Skip to content

Commit 7be8c1c

Browse files
committed
svs: default to SVS v3
1 parent f70f997 commit 7be8c1c

4 files changed

Lines changed: 37 additions & 32 deletions

File tree

pkg/svs/README.md

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -5,10 +5,10 @@ This package is part of [NDNts](https://yoursunny.com/p/NDNts/), Named Data Netw
55
This package contains **StateVectorSync** and related protocols, including:
66

77
* [StateVectorSync v2](https://github.com/named-data/StateVectorSync/blob/98bb56661b98a1afa869a96d86715b9788e671a6/Specification.md), revision 2025-01-04
8-
* complete unit test
8+
* deprecated, enable with `svs3: false` option
9+
* partial unit test
910
* core synchronization logic only, does not deal with Data fetching
1011
* [StateVectorSync v3](https://named-data.github.io/StateVectorSync/Specification.html), revision 2025-01-14
11-
* enable with `svs3: true` option
1212
* complete unit test
1313
* core synchronization logic only, does not deal with Data fetching
1414
* [SVS-PS](https://named-data.github.io/StateVectorSync/PubSubSpec.html), revision 2025-01-04

pkg/svs/src/sync.ts

Lines changed: 16 additions & 14 deletions
Original file line numberDiff line numberDiff line change
@@ -36,11 +36,11 @@ export class SvSync extends TypedEventTarget<EventMap> implements SyncProtocol<S
3636
initialize,
3737
syncInterestLifetime = 1000,
3838
periodicTimeout = [30000, 0.1],
39-
suppressionPeriod = 2200,
39+
suppressionPeriod = 200,
4040
suppressionTimeout = SvSync.suppressionExpDelay(suppressionPeriod),
4141
signer = nullSigner,
4242
verifier = noopSigning,
43-
svs3 = false,
43+
svs3 = true, // eslint-disable-line @typescript-eslint/no-deprecated
4444
}: SvSync.Options): Promise<SvSync> {
4545
if (typeof periodicTimeout === "number") {
4646
periodicTimeout = [periodicTimeout, 0.1];
@@ -76,7 +76,7 @@ export class SvSync extends TypedEventTarget<EventMap> implements SyncProtocol<S
7676
private readonly verifier: Verifier,
7777
) {
7878
super();
79-
this.syncInterestName = groupPrefix.append(svs3 ? Version3 : Version2);
79+
this.syncDataName = groupPrefix.append(svs3 ? Version3 : Version2);
8080
}
8181

8282
private makeFace(fw: Forwarder): void {
@@ -87,12 +87,12 @@ export class SvSync extends TypedEventTarget<EventMap> implements SyncProtocol<S
8787
describe: this.describe,
8888
routeCapture: false,
8989
});
90-
this.face.addRoute(this.syncInterestName, this.groupPrefix);
90+
this.face.addRoute(this.syncDataName, this.groupPrefix);
9191
}
9292

9393
private readonly maybeHaveEventListener = trackEventListener(this);
9494
private face?: FwFace;
95-
private readonly syncInterestName: Name;
95+
private readonly syncDataName: Name;
9696
private txStream = pushable<FwPacket>();
9797

9898
/**
@@ -289,7 +289,7 @@ export class SvSync extends TypedEventTarget<EventMap> implements SyncProtocol<S
289289
}
290290
case l3TT.Data: { // SVS v3
291291
const data = d1.decode(Data);
292-
assert(data.name.equals(this.syncInterestName));
292+
assert(data.name.equals(this.syncDataName));
293293
await this.verifier.verify(data);
294294
recv = Decoder.decode(data.content, StateVector);
295295
break;
@@ -365,7 +365,7 @@ export class SvSync extends TypedEventTarget<EventMap> implements SyncProtocol<S
365365
/** Transmit a sync Interest. */
366366
private async sendSyncInterest(): Promise<void> {
367367
const interest = new Interest();
368-
interest.name = this.syncInterestName;
368+
interest.name = this.syncDataName;
369369
interest.canBePrefix = true;
370370
interest.mustBeFresh = true;
371371
interest.lifetime = this.syncInterestLifetime;
@@ -375,7 +375,7 @@ export class SvSync extends TypedEventTarget<EventMap> implements SyncProtocol<S
375375
this.own.encodeTo(encoder, 3);
376376

377377
const data = new Data();
378-
data.name = this.syncInterestName;
378+
data.name = this.syncDataName;
379379
data.content = encoder.output;
380380
await this.signer.sign(data);
381381

@@ -442,8 +442,8 @@ export namespace SvSync {
442442
periodicTimeout?: number | [median: number, jitter: number];
443443

444444
/**
445-
* Sync Interest timer in suppression state, maximum value.
446-
* @defaultValue `200ms`
445+
* Sync Interest timer in suppression state, maximum value in milliseconds.
446+
* @defaultValue 200
447447
*/
448448
suppressionPeriod?: number;
449449

@@ -470,15 +470,17 @@ export namespace SvSync {
470470
verifier?: Verifier;
471471

472472
/**
473-
* Enable SVS v3 protocol.
474-
* @defaultValue false
473+
* Enable SVS v3 protocol instead of SVS v2.
474+
* @defaultValue true
475+
*
476+
* @deprecated SVS v2 is deprecated.
475477
*/
476478
svs3?: boolean;
477479
}
478480

479481
/**
480-
* SVS v2 suppression timeout exponential decay function.
481-
* @param c - Constant factor.
482+
* SVS v3 suppression timeout exponential decay function.
483+
* @param c - Constant factor, aka SuppressionPeriod.
482484
* @param f - Decay factor.
483485
* @returns Function to generate suppression timeout values.
484486
*/

pkg/svs/tests/svsps.t.ts

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -25,6 +25,7 @@ beforeAll(async () => {
2525
suppressionPeriod: 50,
2626
signer: signerS,
2727
verifier: verifierS,
28+
svs3: false,
2829
};
2930
pubOpts = {
3031
innerSigner: signerI,

pkg/svs/tests/sync.t.ts

Lines changed: 18 additions & 16 deletions
Original file line numberDiff line numberDiff line change
@@ -150,7 +150,7 @@ test("5.3", async () => {
150150
initialStateVector.set({ name: new Name("/B"), boot: 1636266412 }, 15);
151151
initialStateVector.set({ name: new Name("/C"), boot: 1636266115 }, 25);
152152

153-
const opts: SvSync.Options = { ...baseOpts, svs3: true, initialStateVector };
153+
const opts: SvSync.Options = { ...baseOpts, initialStateVector };
154154

155155
const pA0 = await SvSync.create({ ...opts, describe: "A0" });
156156
const pB0 = await SvSync.create({ ...opts, describe: "B0" });
@@ -198,22 +198,26 @@ test("initialize", async () => {
198198
closers.push(p0);
199199
debugHandler.start(p0);
200200

201-
const n0A = p0.get("/A");
201+
const n0A = p0.get("/A", 10);
202202
n0A.seqNum = 11;
203203
n0A.remove(); // no effect
204-
const n0B = p0.get("/B");
204+
const n0B = p0.get("/N", 22);
205205
n0B.seqNum = 12;
206-
const n0C = p0.get("/C");
206+
const n0C = p0.get("/N", 23);
207207
n0C.seqNum = 13;
208208
n0C.seqNum = 3; // no effect
209209
await delay(200);
210210
expect(debugHandler.count("0:send")).toBe(1);
211211

212+
const idA = n0A.id;
213+
const idB = n0B.id;
214+
const idC = n0C.id;
215+
212216
p0.close();
213217
const v0 = p0.currentStateVector;
214-
expect(v0.get(new Name("/A"))).toBe(11);
215-
expect(v0.get(new Name("/B"))).toBe(12);
216-
expect(v0.get(new Name("/C"))).toBe(13);
218+
expect(v0.get(idA)).toBe(11);
219+
expect(v0.get(idB)).toBe(12);
220+
expect(v0.get(idC)).toBe(13);
217221
expect(v0.get(new Name("/D"))).toBe(0);
218222

219223
// eslint-disable-next-line unicorn/prefer-structured-clone
@@ -227,8 +231,8 @@ test("initialize", async () => {
227231
debugHandler.start(sync);
228232

229233
const n1A = sync.get("/A");
230-
const n1B = sync.get("/B");
231-
const n1C = sync.get("/C");
234+
const n1B = sync.get("/N", 22);
235+
const n1C = sync.get("/N", 23);
232236
const n1D = sync.get("/D");
233237

234238
expect(n1A.seqNum).toBe(11);
@@ -247,8 +251,8 @@ test("initialize", async () => {
247251
expect(debugHandler.count("1:send")).toBe(0);
248252

249253
expect(p1.get("/A").seqNum).toBe(0);
250-
expect(p1.get("/B").seqNum).toBe(22);
251-
expect(p1.get("/C").seqNum).toBe(3);
254+
expect(p1.get(idB).seqNum).toBe(22);
255+
expect(p1.get(idC).seqNum).toBe(3);
252256
const n1D = p1.get("/D");
253257
expect(n1D.seqNum).toBe(4);
254258
++n1D.seqNum;
@@ -262,7 +266,7 @@ test("get add", async () => {
262266
initialStateVector.set({ name: new Name("/A"), boot: 1736890910 }, 1);
263267
initialStateVector.set({ name: new Name("/B"), boot: 1736890920 }, 1);
264268

265-
const p = await SvSync.create({ ...baseOpts, svs3: true, initialStateVector });
269+
const p = await SvSync.create({ ...baseOpts, initialStateVector });
266270
closers.push(p);
267271

268272
// .get(id)
@@ -295,10 +299,8 @@ test("get add", async () => {
295299
test("future bootstrap time", async () => {
296300
const debugHandler = new DebugHandler();
297301

298-
const opts: SvSync.Options = { ...baseOpts, svs3: true };
299-
300-
const pA = await SvSync.create({ ...opts, describe: "A" });
301-
const pB = await SvSync.create({ ...opts, describe: "B" });
302+
const pA = await SvSync.create({ ...baseOpts, describe: "A" });
303+
const pB = await SvSync.create({ ...baseOpts, describe: "B" });
302304

303305
debugHandler.start(pA);
304306
debugHandler.start(pB);

0 commit comments

Comments
 (0)