@jsm-mit/tigi-sharded-package 0.6.0 → 0.7.0
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/declarations/worker/worker.did +1 -0
- package/declarations/worker/worker.did.d.ts +1 -0
- package/declarations/worker/worker.did.js +1 -0
- package/dist/actors/rides-actor.d.ts +4 -0
- package/dist/actors/rides-actor.d.ts.map +1 -1
- package/dist/actors/rides-actor.js +16 -6
- package/dist/mappers.d.ts +29 -1
- package/dist/mappers.d.ts.map +1 -1
- package/dist/mappers.js +43 -0
- package/package.json +3 -3
|
@@ -214,6 +214,7 @@ export const idlFactory = ({ IDL }) => {
|
|
|
214
214
|
'requestId' : RequestId,
|
|
215
215
|
'expiresNs' : IDL.Nat64,
|
|
216
216
|
'asked' : IDL.Nat32,
|
|
217
|
+
'asOfNs' : IDL.Opt(IDL.Nat64),
|
|
217
218
|
'createdNs' : IDL.Nat64,
|
|
218
219
|
'offers' : IDL.Vec(OfferView),
|
|
219
220
|
'state' : RequestStateView,
|
|
@@ -110,6 +110,10 @@ export declare class RideRequest {
|
|
|
110
110
|
private choosing;
|
|
111
111
|
private lastSnapshot;
|
|
112
112
|
private slots;
|
|
113
|
+
/** ZO-24: each worker's last answer, with the time of its state. */
|
|
114
|
+
private readonly heldViews;
|
|
115
|
+
/** ZO-24: the last ride shown (status and position never go back). */
|
|
116
|
+
private lastRide;
|
|
113
117
|
private readonly rejected;
|
|
114
118
|
private readonly notFree;
|
|
115
119
|
private readonly refreshingUntilMs;
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"rides-actor.d.ts","sourceRoot":"","sources":["../../src/actors/rides-actor.ts"],"names":[],"mappings":"AAOA,OAAO,KAAK,EAAE,QAAQ,EAAE,MAAM,qBAAqB,CAAC;AAKpD,OAAO,EAAgJ,KAAK,YAAY,EAAE,MAAM,4BAA4B,CAAC;AAC7M,OAAO,EAAE,SAAS,EAAE,MAAM,mBAAmB,CAAC;AAE9C,OAAO,EAA2B,KAAK,GAAG,EAAE,MAAM,WAAW,CAAC;AAC9D,OAAO,KAAK,EAAE,SAAS,EAAE,aAAa,EAAE,WAAW,EAAa,eAAe,EAAE,QAAQ,EAAE,aAAa,EAAE,MAAM,kBAAkB,CAAC;AAInI,sFAAsF;AACtF,eAAO,MAAM,oBAAoB,OAAQ,CAAC;AAC1C,eAAO,MAAM,kBAAkB,OAAQ,CAAC;AACxC,yEAAyE;AACzE,eAAO,MAAM,cAAc,QAAS,CAAC;AACrC,qFAAqF;AACrF,eAAO,MAAM,eAAe,OAAQ,CAAC;AACrC;;;GAGG;AACH,eAAO,MAAM,eAAe,QAAS,CAAC;AACtC,+GAA+G;AAC/G,eAAO,MAAM,YAAY,OAAQ,CAAC;AAClC,eAAO,MAAM,iBAAiB,OAAQ,CAAC;AAEvC,wFAAwF;AACxF,UAAU,YAAY;IAClB,CAAC,EAAE,CAAC,CAAC;IACL,SAAS,EAAE,MAAM,CAAC;IAClB,MAAM,EAAE,GAAG,CAAC;IACZ,WAAW,EAAE,GAAG,CAAC;IACjB,SAAS,EAAE,MAAM,CAAC;IAClB,SAAS,EAAE,MAAM,CAAC;IAClB,OAAO,EAAE,MAAM,EAAE,CAAC;IAClB,OAAO,EAAE,OAAO,CAAC;IACjB,YAAY,EAAE,OAAO,CAAC;IACtB,QAAQ,EAAE,OAAO,CAAC;IAClB,0DAA0D;IAC1D,eAAe,CAAC,EAAE,OAAO,CAAC;IAC1B,QAAQ,CAAC,EAAE;QAAE,MAAM,EAAE,MAAM,CAAC;QAAC,QAAQ,EAAE,MAAM,CAAC;QAAC,SAAS,EAAE,MAAM,CAAA;KAAE,CAAC;CACtE;AAED,MAAM,WAAW,eAAe;IAC5B,MAAM,EAAE,GAAG,CAAC;IACZ,WAAW,EAAE,GAAG,CAAC;IACjB,wGAAwG;IACxG,SAAS,CAAC,EAAE,MAAM,CAAC;IACnB,iFAAiF;IACjF,SAAS,CAAC,EAAE,MAAM,CAAC;IACnB;;;OAGG;IACH,eAAe,CAAC,EAAE,OAAO,CAAC;CAC7B;AAED;;;;GAIG;AACH,wBAAgB,YAAY,CAAC,KAAK,EAAE,OAAO,GAAG,MAAM,GAAG,SAAS,CAS/D;AAUD;;;GAGG;AACH,qBAAa,UAAU;IAOf,OAAO,CAAC,QAAQ,CAAC,QAAQ;IACzB,OAAO,CAAC,QAAQ,CAAC,OAAO;IAP5B,OAAO,CAAC,QAAQ,CAAC,KAAK,CAAY;IAClC,OAAO,CAAC,WAAW,CAAK;IACxB,OAAO,CAAC,SAAS,CAAqB;gBAGlC,aAAa,EAAE,MAAM,EACJ,QAAQ,EAAE,QAAQ,EAClB,OAAO,GAAE,YAAiB;IAK/C;;;;;;;;;;OAUG;IACU,sBAAsB,CAAC,IAAI,EAAE,eAAe,GAAG,OAAO,CAAC,WAAW,CAAC;IAuBhF;;;OAGG;IACI,aAAa,CAAC,KAAK,EAAE,MAAM,GAAG,WAAW;IAOhD;;;;OAIG;IACU,sBAAsB,CAAC,OAAO,EAAE,MAAM,GAAG,OAAO,CAAC,QAAQ,CAAC;YAMzD,oBAAoB;IAUlC,0FAA0F;YAC5E,gBAAgB;CAYjC;AAED;;;;GAIG;AACH,qBAAa,WAAW;
|
|
1
|
+
{"version":3,"file":"rides-actor.d.ts","sourceRoot":"","sources":["../../src/actors/rides-actor.ts"],"names":[],"mappings":"AAOA,OAAO,KAAK,EAAE,QAAQ,EAAE,MAAM,qBAAqB,CAAC;AAKpD,OAAO,EAAgJ,KAAK,YAAY,EAAE,MAAM,4BAA4B,CAAC;AAC7M,OAAO,EAAE,SAAS,EAAE,MAAM,mBAAmB,CAAC;AAE9C,OAAO,EAA2B,KAAK,GAAG,EAAE,MAAM,WAAW,CAAC;AAC9D,OAAO,KAAK,EAAE,SAAS,EAAE,aAAa,EAAE,WAAW,EAAa,eAAe,EAAE,QAAQ,EAAE,aAAa,EAAE,MAAM,kBAAkB,CAAC;AAInI,sFAAsF;AACtF,eAAO,MAAM,oBAAoB,OAAQ,CAAC;AAC1C,eAAO,MAAM,kBAAkB,OAAQ,CAAC;AACxC,yEAAyE;AACzE,eAAO,MAAM,cAAc,QAAS,CAAC;AACrC,qFAAqF;AACrF,eAAO,MAAM,eAAe,OAAQ,CAAC;AACrC;;;GAGG;AACH,eAAO,MAAM,eAAe,QAAS,CAAC;AACtC,+GAA+G;AAC/G,eAAO,MAAM,YAAY,OAAQ,CAAC;AAClC,eAAO,MAAM,iBAAiB,OAAQ,CAAC;AAEvC,wFAAwF;AACxF,UAAU,YAAY;IAClB,CAAC,EAAE,CAAC,CAAC;IACL,SAAS,EAAE,MAAM,CAAC;IAClB,MAAM,EAAE,GAAG,CAAC;IACZ,WAAW,EAAE,GAAG,CAAC;IACjB,SAAS,EAAE,MAAM,CAAC;IAClB,SAAS,EAAE,MAAM,CAAC;IAClB,OAAO,EAAE,MAAM,EAAE,CAAC;IAClB,OAAO,EAAE,OAAO,CAAC;IACjB,YAAY,EAAE,OAAO,CAAC;IACtB,QAAQ,EAAE,OAAO,CAAC;IAClB,0DAA0D;IAC1D,eAAe,CAAC,EAAE,OAAO,CAAC;IAC1B,QAAQ,CAAC,EAAE;QAAE,MAAM,EAAE,MAAM,CAAC;QAAC,QAAQ,EAAE,MAAM,CAAC;QAAC,SAAS,EAAE,MAAM,CAAA;KAAE,CAAC;CACtE;AAED,MAAM,WAAW,eAAe;IAC5B,MAAM,EAAE,GAAG,CAAC;IACZ,WAAW,EAAE,GAAG,CAAC;IACjB,wGAAwG;IACxG,SAAS,CAAC,EAAE,MAAM,CAAC;IACnB,iFAAiF;IACjF,SAAS,CAAC,EAAE,MAAM,CAAC;IACnB;;;OAGG;IACH,eAAe,CAAC,EAAE,OAAO,CAAC;CAC7B;AAED;;;;GAIG;AACH,wBAAgB,YAAY,CAAC,KAAK,EAAE,OAAO,GAAG,MAAM,GAAG,SAAS,CAS/D;AAUD;;;GAGG;AACH,qBAAa,UAAU;IAOf,OAAO,CAAC,QAAQ,CAAC,QAAQ;IACzB,OAAO,CAAC,QAAQ,CAAC,OAAO;IAP5B,OAAO,CAAC,QAAQ,CAAC,KAAK,CAAY;IAClC,OAAO,CAAC,WAAW,CAAK;IACxB,OAAO,CAAC,SAAS,CAAqB;gBAGlC,aAAa,EAAE,MAAM,EACJ,QAAQ,EAAE,QAAQ,EAClB,OAAO,GAAE,YAAiB;IAK/C;;;;;;;;;;OAUG;IACU,sBAAsB,CAAC,IAAI,EAAE,eAAe,GAAG,OAAO,CAAC,WAAW,CAAC;IAuBhF;;;OAGG;IACI,aAAa,CAAC,KAAK,EAAE,MAAM,GAAG,WAAW;IAOhD;;;;OAIG;IACU,sBAAsB,CAAC,OAAO,EAAE,MAAM,GAAG,OAAO,CAAC,QAAQ,CAAC;YAMzD,oBAAoB;IAUlC,0FAA0F;YAC5E,gBAAgB;CAYjC;AAED;;;;GAIG;AACH,qBAAa,WAAW;IAgBhB,OAAO,CAAC,QAAQ,CAAC,KAAK;IACtB,OAAO,CAAC,QAAQ,CAAC,QAAQ;IACzB,OAAO,CAAC,QAAQ,CAAC,OAAO;IACxB,OAAO,CAAC,QAAQ,CAAC,KAAK;IACtB,OAAO,CAAC,QAAQ,CAAC,gBAAgB;IAnBrC,OAAO,CAAC,QAAQ,CAAC,YAAY,CAA6B;IAC1D,OAAO,CAAC,QAAQ,CAAS;IACzB,OAAO,CAAC,YAAY,CAA8B;IAClD,OAAO,CAAC,KAAK,CAAmB;IAChC,oEAAoE;IACpE,OAAO,CAAC,QAAQ,CAAC,SAAS,CAAkD;IAC5E,sEAAsE;IACtE,OAAO,CAAC,QAAQ,CAAuB;IACvC,OAAO,CAAC,QAAQ,CAAC,QAAQ,CAAqB;IAC9C,OAAO,CAAC,QAAQ,CAAC,OAAO,CAAqB;IAC7C,OAAO,CAAC,QAAQ,CAAC,iBAAiB,CAA6B;IAC/D,OAAO,CAAC,cAAc,CAAqB;IAE3C,wCAAwC;gBAEnB,KAAK,EAAE,SAAS,EAChB,QAAQ,EAAE,QAAQ,EAClB,OAAO,EAAE,YAAY,EACrB,KAAK,EAAE,YAAY,EACnB,gBAAgB,EAAE,MAAM,OAAO,CAAC,MAAM,GAAG,SAAS,CAAC;IAGxE,IAAW,SAAS,IAAI,MAAM,CAE7B;IAED,mFAAmF;IACnF,IAAW,KAAK,IAAI,MAAM,CAEzB;IAED,8EAA8E;IAC9E,IAAW,MAAM,IAAI,GAAG,CAEvB;IAED,IAAW,WAAW,IAAI,GAAG,CAE5B;IAED,uDAAuD;IACvD,IAAW,QAAQ,IAAI,eAAe,GAAG,SAAS,CAEjD;IAED,oGAAoG;IACvF,gBAAgB,CAAC,YAAY,EAAE,MAAM,GAAG,OAAO,CAAC,IAAI,CAAC;IAiDlE;;;;;;;;;OASG;IACU,cAAc,IAAI,OAAO,CAAC,eAAe,CAAC;IAgBvD;;;;;;OAMG;IACU,sBAAsB,CAAC,OAAO,EAAE,MAAM,GAAG,OAAO,CAAC,OAAO,CAAC;IAStE;;;;;;OAMG;IACU,uBAAuB,CAAC,OAAO,EAAE,MAAM,GAAG,OAAO,CAAC,OAAO,CAAC;IAOvE;;;;;;;;;;;OAWG;IACU,sBAAsB,CAAC,OAAO,EAAE,MAAM,GAAG,OAAO,CAAC,aAAa,CAAC;IAiC5E;;;;;;;;;OASG;IACU,wBAAwB,CAAC,OAAO,EAAE,MAAM,GAAG,OAAO,CAAC,aAAa,GAAG,SAAS,CAAC;IAW1F;;;;;;;OAOG;IACU,uBAAuB,IAAI,OAAO,CAAC,aAAa,GAAG,SAAS,CAAC;IAW1E;;;;;;OAMG;IACU,sBAAsB,IAAI,OAAO,CAAC,WAAW,CAAC;IAoB3D;;;OAGG;IACU,iBAAiB,IAAI,OAAO,CAAC,IAAI,CAAC;IAM/C;;;;;OAKG;IACU,kBAAkB,IAAI,OAAO,CAAC,QAAQ,CAAC;IAOpD;;;;;OAKG;IACU,qBAAqB,IAAI,OAAO,CAAC,IAAI,CAAC;IAKnD;;;;OAIG;IACU,qBAAqB,IAAI,OAAO,CAAC,WAAW,CAAC;IAO1D;;;;;;;;;OASG;IACU,uBAAuB,IAAI,OAAO,CAAC,SAAS,GAAG,SAAS,CAAC;IAOtE;;;;;;OAMG;IACU,qBAAqB,CAAC,KAAK,EAAE,MAAM,GAAG,OAAO,CAAC,OAAO,CAAC;IAOnE,4IAA4I;IAC5I,OAAO,CAAC,WAAW;YAML,kBAAkB;YAuBlB,UAAU;IA8DxB,iHAAiH;YACnG,gBAAgB;IAS9B,6FAA6F;YAC/E,UAAU;YASV,kBAAkB;YAalB,mBAAmB;YAOnB,WAAW;CAG5B"}
|
|
@@ -11,7 +11,7 @@ import { TigiGroup } from "../group/group.js";
|
|
|
11
11
|
import { geohashesByWorker } from "../group/prefixes.js";
|
|
12
12
|
import { cellsWithin, isValidGeo } from "../geo.js";
|
|
13
13
|
import { driverChatPlaceAsyncUnsafe } from "../chat.js";
|
|
14
|
-
import { cardOf, closeReasonOf, decodeToken, driverOfOfferId, encodeToken, mergedPhase, mergeOffers, moneyOf, msOf, offerIdOf, offerOf, phaseOf, placeOffers, rideOfRideRef, rideStatusOf, routeLineOf } from "../mappers.js";
|
|
14
|
+
import { cardOf, closeReasonOf, decodeToken, driverOfOfferId, encodeToken, fresherRide, freshViews, mergedPhase, mergeOffers, moneyOf, msOf, offerIdOf, offerOf, phaseOf, placeOffers, rideOfRideRef, rideStatusOf, routeLineOf } from "../mappers.js";
|
|
15
15
|
/** U-29: the rider's radius, and the radius after `WIDEN_AFTER_MS` without offers. */
|
|
16
16
|
export const SEARCH_RADIUS_METERS = 3_000;
|
|
17
17
|
export const WIDE_RADIUS_METERS = 6_000;
|
|
@@ -155,6 +155,10 @@ export class RideRequest {
|
|
|
155
155
|
choosing = false;
|
|
156
156
|
lastSnapshot;
|
|
157
157
|
slots = [];
|
|
158
|
+
/** ZO-24: each worker's last answer, with the time of its state. */
|
|
159
|
+
heldViews = new Map();
|
|
160
|
+
/** ZO-24: the last ride shown (status and position never go back). */
|
|
161
|
+
lastRide;
|
|
158
162
|
rejected = new Set();
|
|
159
163
|
notFree = new Set();
|
|
160
164
|
refreshingUntilMs = new Map();
|
|
@@ -412,7 +416,9 @@ export class RideRequest {
|
|
|
412
416
|
*/
|
|
413
417
|
async getRideAsyncUnsafe() {
|
|
414
418
|
const accepted = await this.acceptedAsyncUnsafe();
|
|
415
|
-
|
|
419
|
+
// ZO-24: an answer from an older state never moves the ride back.
|
|
420
|
+
this.lastRide = fresherRide(this.lastRide, await getRideOfAsyncUnsafe(this.identity, this.options, accepted, this.state.requestId));
|
|
421
|
+
return this.lastRide;
|
|
416
422
|
}
|
|
417
423
|
/**
|
|
418
424
|
* K-4, U-13: the rider cancels in the driver canister only, before `inProgress`, once.
|
|
@@ -471,22 +477,26 @@ export class RideRequest {
|
|
|
471
477
|
async readAllAsyncUnsafe(workers) {
|
|
472
478
|
const results = await Promise.allSettled(workers.map(async (worker) => ({ worker, view: await this.group.onWorkerAsyncUnsafe(worker, (actor) => actor.getRequest({ requestId: this.state.requestId })) })));
|
|
473
479
|
const answers = [];
|
|
480
|
+
const failed = [];
|
|
474
481
|
let failure;
|
|
475
482
|
let notFound = 0;
|
|
476
|
-
|
|
483
|
+
results.forEach((result, index) => {
|
|
477
484
|
if (result.status === "fulfilled")
|
|
478
485
|
answers.push(result.value);
|
|
479
486
|
else if (errorKeyOf(result.reason) === "NotFound")
|
|
480
487
|
notFound += 1;
|
|
481
|
-
else
|
|
488
|
+
else {
|
|
482
489
|
failure ??= result.reason;
|
|
483
|
-
|
|
490
|
+
failed.push(workers[index]);
|
|
491
|
+
}
|
|
492
|
+
});
|
|
484
493
|
// One silent worker does not hide the rest; nobody answering is an error.
|
|
485
494
|
if (answers.length === 0 && failure !== undefined)
|
|
486
495
|
throw failure;
|
|
487
496
|
if (answers.length === 0 && notFound > 0)
|
|
488
497
|
throw canisterError("NotFound", "no worker holds this request");
|
|
489
|
-
|
|
498
|
+
// ZO-24: an older state than the held one, or a silent worker, keeps the held answer.
|
|
499
|
+
return freshViews(this.heldViews, answers, failed, Date.now());
|
|
490
500
|
}
|
|
491
501
|
async mergeAsync(answers) {
|
|
492
502
|
const simulator = await this.simulatorIdAsync();
|
package/dist/mappers.d.ts
CHANGED
|
@@ -1,7 +1,7 @@
|
|
|
1
1
|
import type { CarrierKind as CandidCarrierKind, DriverCard, Money as CandidMoney, RideStatus, RouteLine } from "../declarations/tigi-driver/tigi-driver.did.js";
|
|
2
2
|
import type { OfferView as CandidOfferView, RequestView as CandidRequestView } from "../declarations/worker/worker.did.js";
|
|
3
3
|
import type { RateRideOutcome as CandidRateRideOutcome, RideView as CandidHistoryRide } from "../declarations/core/core.did.js";
|
|
4
|
-
import type { CarrierKind, CloseReason, DriverCardView, Money, OfferView, RateRideOutcome, RequestPhase, RideHistoryEntry, RideStatusView, RouteLineView } from "./interfaces.js";
|
|
4
|
+
import type { CarrierKind, CloseReason, DriverCardView, Money, OfferView, RateRideOutcome, RequestPhase, RideHistoryEntry, RideStatusView, RideView, RouteLineView } from "./interfaces.js";
|
|
5
5
|
export declare const NS_PER_MS = 1000000n;
|
|
6
6
|
export declare function msOf(ns: bigint): number;
|
|
7
7
|
export declare function moneyOf(money: CandidMoney): Money;
|
|
@@ -85,4 +85,32 @@ export declare function phaseOf(view: CandidRequestView): RequestPhase;
|
|
|
85
85
|
* then an order waiting anywhere, then a search anywhere; closed only when closed in all.
|
|
86
86
|
*/
|
|
87
87
|
export declare function mergedPhase(phases: RequestPhase[]): RequestPhase;
|
|
88
|
+
/** ZO-24: a worker's answer that failed is stood in for by its last one this long. */
|
|
89
|
+
export declare const STAND_IN_MS = 10000;
|
|
90
|
+
/** ZO-24: the last answer of one worker, with the time of its state. */
|
|
91
|
+
export interface HeldView<V> {
|
|
92
|
+
asOfNs: bigint;
|
|
93
|
+
view: V;
|
|
94
|
+
atMs: number;
|
|
95
|
+
}
|
|
96
|
+
/**
|
|
97
|
+
* ZO-24: a query goes to any replica of the subnet, and one a round behind answers from an
|
|
98
|
+
* older state (an offer flashing away and back). Per worker: an answer older than the held
|
|
99
|
+
* one is replaced by the held one; a worker that failed this time keeps its held answer for
|
|
100
|
+
* `STAND_IN_MS` (one silent worker does not blink its offers away). Updates `held`.
|
|
101
|
+
*/
|
|
102
|
+
export declare function freshViews<V extends {
|
|
103
|
+
asOfNs: [] | [bigint];
|
|
104
|
+
}>(held: Map<string, HeldView<V>>, answers: {
|
|
105
|
+
worker: string;
|
|
106
|
+
view: V;
|
|
107
|
+
}[], failed: string[], nowMs: number): {
|
|
108
|
+
worker: string;
|
|
109
|
+
view: V;
|
|
110
|
+
}[];
|
|
111
|
+
/**
|
|
112
|
+
* ZO-24: a ride never goes back — an answer from an older state keeps the newer status, and
|
|
113
|
+
* the position stays the newer one (by `positionAtMs`).
|
|
114
|
+
*/
|
|
115
|
+
export declare function fresherRide(before: RideView | undefined, next: RideView): RideView;
|
|
88
116
|
//# sourceMappingURL=mappers.d.ts.map
|
package/dist/mappers.d.ts.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"mappers.d.ts","sourceRoot":"","sources":["../src/mappers.ts"],"names":[],"mappings":"AAGA,OAAO,KAAK,EAAE,WAAW,IAAI,iBAAiB,EAAE,UAAU,EAAE,KAAK,IAAI,WAAW,EAAE,UAAU,EAAE,SAAS,EAAE,MAAM,gDAAgD,CAAC;AAChK,OAAO,KAAK,EAAE,SAAS,IAAI,eAAe,EAAE,WAAW,IAAI,iBAAiB,EAAE,MAAM,sCAAsC,CAAC;AAC3H,OAAO,KAAK,EAAE,eAAe,IAAI,qBAAqB,EAAE,QAAQ,IAAI,iBAAiB,EAAE,MAAM,kCAAkC,CAAC;AAEhI,OAAO,KAAK,EAAE,WAAW,EAAE,WAAW,EAAE,cAAc,EAAE,KAAK,EAAE,SAAS,EAAE,eAAe,EAAE,YAAY,EAAW,gBAAgB,
|
|
1
|
+
{"version":3,"file":"mappers.d.ts","sourceRoot":"","sources":["../src/mappers.ts"],"names":[],"mappings":"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"}
|
package/dist/mappers.js
CHANGED
|
@@ -227,3 +227,46 @@ export function mergedPhase(phases) {
|
|
|
227
227
|
}
|
|
228
228
|
return "closed";
|
|
229
229
|
}
|
|
230
|
+
// ---------------------------------------------------------------- ZO-24: fresh reads
|
|
231
|
+
/** ZO-24: a worker's answer that failed is stood in for by its last one this long. */
|
|
232
|
+
export const STAND_IN_MS = 10_000;
|
|
233
|
+
/**
|
|
234
|
+
* ZO-24: a query goes to any replica of the subnet, and one a round behind answers from an
|
|
235
|
+
* older state (an offer flashing away and back). Per worker: an answer older than the held
|
|
236
|
+
* one is replaced by the held one; a worker that failed this time keeps its held answer for
|
|
237
|
+
* `STAND_IN_MS` (one silent worker does not blink its offers away). Updates `held`.
|
|
238
|
+
*/
|
|
239
|
+
export function freshViews(held, answers, failed, nowMs) {
|
|
240
|
+
const fresh = answers.map(({ worker, view }) => {
|
|
241
|
+
const asOf = view.asOfNs[0];
|
|
242
|
+
const before = held.get(worker);
|
|
243
|
+
if (asOf === undefined)
|
|
244
|
+
return { worker, view };
|
|
245
|
+
if (before && before.asOfNs > asOf)
|
|
246
|
+
return { worker, view: before.view };
|
|
247
|
+
held.set(worker, { asOfNs: asOf, view, atMs: nowMs });
|
|
248
|
+
return { worker, view };
|
|
249
|
+
});
|
|
250
|
+
for (const worker of failed) {
|
|
251
|
+
const before = held.get(worker);
|
|
252
|
+
if (before && nowMs - before.atMs <= STAND_IN_MS)
|
|
253
|
+
fresh.push({ worker, view: before.view });
|
|
254
|
+
}
|
|
255
|
+
return fresh;
|
|
256
|
+
}
|
|
257
|
+
const RIDE_STEP = { accepted: 0, driverArrived: 1, inProgress: 2, completed: 3, cancelledByDriver: 3, cancelledByRider: 3 };
|
|
258
|
+
/**
|
|
259
|
+
* ZO-24: a ride never goes back — an answer from an older state keeps the newer status, and
|
|
260
|
+
* the position stays the newer one (by `positionAtMs`).
|
|
261
|
+
*/
|
|
262
|
+
export function fresherRide(before, next) {
|
|
263
|
+
if (!before || before.requestId !== next.requestId)
|
|
264
|
+
return next;
|
|
265
|
+
let ride = next;
|
|
266
|
+
if (RIDE_STEP[next.status.kind] < RIDE_STEP[before.status.kind])
|
|
267
|
+
ride = { ...ride, status: before.status };
|
|
268
|
+
if (before.positionAtMs !== undefined && (next.positionAtMs === undefined || next.positionAtMs < before.positionAtMs)) {
|
|
269
|
+
ride = { ...ride, driverPosition: before.driverPosition, positionAtMs: before.positionAtMs, etaToPickupSec: before.etaToPickupSec };
|
|
270
|
+
}
|
|
271
|
+
return ride;
|
|
272
|
+
}
|
package/package.json
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "@jsm-mit/tigi-sharded-package",
|
|
3
|
-
"version": "0.
|
|
3
|
+
"version": "0.7.0",
|
|
4
4
|
"description": "The one package of the Tigi network group: takes the coordinator's id and hides the coordinator, the core and the workers — for a consumer the group is one canister; plus the rider's few driver-canister endpoints (U-14).",
|
|
5
5
|
"homepage": "https://github.com/JSM-Tigi/tigi-sharded/tree/master/package#readme",
|
|
6
6
|
"repository": {
|
|
@@ -59,11 +59,11 @@
|
|
|
59
59
|
"tigiSharded": {
|
|
60
60
|
"repo": "tigi-sharded",
|
|
61
61
|
"repoUrl": "https://github.com/JSM-Tigi/tigi-sharded",
|
|
62
|
-
"commit": "
|
|
62
|
+
"commit": "ac6ef3488e4cda361833ac4819491f8a0231df5b"
|
|
63
63
|
},
|
|
64
64
|
"tigiDriverRust": {
|
|
65
65
|
"repo": "tigi-driver-rust",
|
|
66
66
|
"repoUrl": "https://github.com/JSM-Tigi/tigi-driver-rust",
|
|
67
|
-
"commit": "
|
|
67
|
+
"commit": "516d8b97918290f300ca954e6f6efde4e9e41654"
|
|
68
68
|
}
|
|
69
69
|
}
|