From 216fcae6b9ab91926549510d38e78de9cd999ab2 Mon Sep 17 00:00:00 2001 From: Torben Brenner Date: Wed, 20 Sep 2023 09:11:34 +0200 Subject: [PATCH] fix: ignore responses that state claimed requests --- core/cql/src/beam.ts | 20 +++++++++++++------- 1 file changed, 13 insertions(+), 7 deletions(-) diff --git a/core/cql/src/beam.ts b/core/cql/src/beam.ts index fa274b7..a6a835b 100644 --- a/core/cql/src/beam.ts +++ b/core/cql/src/beam.ts @@ -85,7 +85,7 @@ export class Beam implements RequestTarget { console.log(`Requesting results from ${this.sites.length} sites through ${this.key}`) for (let i = 1; i <= this.sites.length; i++) { let retryCounter = 0; - let response = await firstValueFrom(this.client.get>( + let response: HttpResponse = await firstValueFrom(this.client.get>( this.url.toString() + `tasks/${this.currentTask?.id}?wait_count=${i}`, { observe: "response", @@ -117,12 +117,15 @@ export class Beam implements RequestTarget { ); if (response.status == 200) { console.log(`Received new partial result for query ${this.currentTask?.id} with results from ${i} sites.`) - i = (response.body) ? response.body.length : i - let receivedTask = (response.body != undefined) ? response.body[0].task : ""; - if (receivedTask.indexOf(this.currentTask?.id) != -1) { - this.resultsReceived(response) - } else { - console.warn(`Throwing away response for old query ${receivedTask} in favor of new query ${this.currentTask?.id}`) + if (response.body != undefined) { + i = response.body + .filter(test => test.status !== "claimed").length; + let receivedTask = response.body[0].task; + if (this.currentTask != undefined && receivedTask.indexOf(this.currentTask.id) != -1) { + this.resultsReceived(response) + } else { + console.warn(`Throwing away response for old query ${receivedTask} in favor of new query ${this.currentTask?.id}`) + } } } // add a little delay between requests so diagrams won't change to fast @@ -140,6 +143,9 @@ export class Beam implements RequestTarget { if (result.status == "permfailed" || result.status == "tempfailed") { console.warn(`Site ${result.from} returned status ${result.status}. Therefore ignoring their result!`) return false; + } else if (result.status == "claimed") { + console.info(`Site ${result.from} claimed the request`) + return false } else { return true; }