Skip to content

Commit cee6aa4

Browse files
committed
fix: track all reasons why a worker does not support an expectation.
1 parent 4e3de47 commit cee6aa4

File tree

5 files changed

+26
-15
lines changed

5 files changed

+26
-15
lines changed

shared/packages/expectationManager/src/evaluationRunner/evaluateExpectationStates/new.ts

Lines changed: 12 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -63,13 +63,21 @@ export async function evaluateExpectationStateNew({ manager, tracker, trackedExp
6363
})
6464
}
6565
} else {
66+
let anyNoAvailableWorkersReasonUser = 'Unknown reason'
67+
const allNoAvailableWorkersReasonsTech: string[] = []
68+
69+
for (const reason of trackedExp.noAvailableWorkersReasons.values()) {
70+
if (!anyNoAvailableWorkersReasonUser) anyNoAvailableWorkersReasonUser = reason.user // Just pick the first one
71+
allNoAvailableWorkersReasonsTech.push(reason.tech)
72+
}
73+
6674
tracker.trackedExpectationAPI.updateTrackedExpectationStatus(trackedExp, {
6775
state: ExpectedPackageStatusAPI.WorkStatusState.NEW,
6876
reason: {
69-
user: `Found no workers who supports this Expectation, due to: ${trackedExp.noAvailableWorkersReason.user}`,
70-
tech: `Found no workers who supports this Expectation: "${
71-
trackedExp.noAvailableWorkersReason.tech
72-
}", have asked workers: [${Array.from(trackedExp.queriedWorkers.keys()).join(',')}]`,
77+
user: `Found no workers who supports this Expectation, due to: ${anyNoAvailableWorkersReasonUser}`,
78+
tech: `Found no workers who supports this Expectation. Reasons why: ${allNoAvailableWorkersReasonsTech.join(
79+
', '
80+
)}, have asked workers: [${Array.from(trackedExp.queriedWorkers.keys()).join(',')}]`,
7381
},
7482
// Don't update the package status, since we don't know anything about the package yet:
7583
dontUpdatePackage: true,

shared/packages/expectationManager/src/evaluationRunner/evaluateExpectationStates/restarted.ts

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -30,6 +30,7 @@ export async function evaluateExpectationStateRestarted({
3030
})
3131
} else {
3232
// Something went wrong when trying to remove
33+
// Todo: Should we go to NEW here, if it happens multiple times?
3334
tracker.trackedExpectationAPI.updateTrackedExpectationStatus(trackedExp, {
3435
state: ExpectedPackageStatusAPI.WorkStatusState.RESTARTED,
3536
reason: removed.reason,

shared/packages/expectationManager/src/internalManager/lib/trackedWorkerAgents.ts

Lines changed: 9 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -60,18 +60,22 @@ export class TrackedWorkerAgents {
6060

6161
if (support.support) {
6262
trackedExp.availableWorkers.add(workerId)
63+
trackedExp.noAvailableWorkersReasons.delete(workerId)
6364
} else {
6465
trackedExp.availableWorkers.delete(workerId)
65-
trackedExp.noAvailableWorkersReason = support.reason
66+
trackedExp.noAvailableWorkersReasons.set(workerId, {
67+
user: support.reason.user,
68+
tech: `${workerId}: ${support.reason.tech}`,
69+
})
6670
}
6771
} catch (err) {
6872
trackedExp.availableWorkers.delete(workerId)
6973

7074
if ((err + '').match(/timeout/i)) {
71-
trackedExp.noAvailableWorkersReason = {
75+
trackedExp.noAvailableWorkersReasons.set(workerId, {
7276
user: 'Worker timed out',
73-
tech: `Worker "${workerId} timeout"`,
74-
}
77+
tech: `Worker "${workerId} timeout in doYouSupportExpectation()"`,
78+
})
7579
} else throw err
7680
}
7781
}
@@ -94,7 +98,7 @@ export class TrackedWorkerAgents {
9498
}> {
9599
/** How many requests to send out simultaneously */
96100
const BATCH_SIZE = 10
97-
/** How many answers we want to have before continuing with picking one */
101+
/** If we've gotten this amount of positive answers, we won't be asking more workers */
98102
const minWorkerCount = 5
99103

100104
let countQueried = 0

shared/packages/expectationManager/src/lib/trackedExpectation.ts

Lines changed: 3 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -23,8 +23,8 @@ export interface TrackedExpectation {
2323
queriedWorkers: Map<WorkerAgentId, number>
2424
/** List of worker ids that supports this Expectation */
2525
availableWorkers: Set<WorkerAgentId>
26-
/** Contains the latest reason why a worker refused to support an Expectation */
27-
noAvailableWorkersReason: Reason
26+
/** Contains the reasons why a worker refused to support an Expectation */
27+
noAvailableWorkersReasons: Map<WorkerAgentId, Reason>
2828
/** Timestamp of the last time the expectation was evaluated. */
2929
lastEvaluationTime: number
3030
/**
@@ -113,10 +113,7 @@ export function getDefaultTrackedExpectation(
113113
state: existingtrackedExp?.state || ExpectedPackageStatusAPI.WorkStatusState.NEW,
114114
queriedWorkers: new Map(),
115115
availableWorkers: new Set(),
116-
noAvailableWorkersReason: {
117-
user: 'Unknown reason',
118-
tech: 'N/A (init)',
119-
},
116+
noAvailableWorkersReasons: new Map(),
120117
lastEvaluationTime: 0,
121118
skipEvaluationCount: 0,
122119
waitingForWorkerTime: null,

shared/packages/expectationManager/src/lib/types.ts

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -13,6 +13,7 @@ export interface ExpectationStateHandlerSession {
1313

1414
/** The Worker assigned to the Expectation during this evaluation-session */
1515
assignedWorker?: WorkerAgentAssignment
16+
/** If no Worker was assigned, a Reason why */
1617
noAssignedWorkerReason?: Reason
1718
}
1819
export interface WorkerAgentAssignment {

0 commit comments

Comments
 (0)