Skip to content

Commit ee53bd1

Browse files
committed
Revert "wait time fix"
This reverts commit 667f1e6.
1 parent 667f1e6 commit ee53bd1

2 files changed

Lines changed: 12 additions & 90 deletions

File tree

libp2p/protocols/service_discovery/registrar.nim

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -184,6 +184,8 @@ proc waitingTime*(
184184
if waitDuration < prevWaitDuration - elapsedDuration:
185185
waitDuration = prevWaitDuration - elapsedDuration
186186

187+
waitDuration = min(discoConfig.advertExpiry, waitDuration)
188+
187189
return waitDuration
188190

189191
proc updateLowerBounds*(
@@ -486,8 +488,6 @@ proc registration*(disco: ServiceDiscovery, peerId: PeerId, inMsg: Message): Mes
486488

487489
return msg
488490

489-
tWait = min(max(disco.discoConfig.advertExpiry, ZeroDuration), tWait)
490-
491491
disco.registrar.updateLowerBounds(serviceId, ad, tWait, now)
492492

493493
var ticket = Ticket(

tests/libp2p/service_discovery/test_registrar.nim

Lines changed: 10 additions & 88 deletions
Original file line numberDiff line numberDiff line change
@@ -227,11 +227,13 @@ suite "Service Discovery Registrar - Waiting Time Calculation":
227227
check w > 500.seconds
228228

229229
suite "Service Discovery Registrar - advertExpiry cap":
230+
# The wait time must never exceed advertExpiry: a wait longer than the
231+
# advert's own lifetime is pointless and is clamped at the end of waitingTime.
230232

231-
test "waitingTime does not cap a formula-driven wait at advertExpiry":
233+
test "waitingTime clamps formula-driven wait to advertExpiry":
232234
let registrar = Registrar.new()
233235
# cache at capacity ⇒ occupancy = 100.0; with safetyParam = 1.0 the
234-
# w = 100 * 100.0 * 1.0 = 10000s ≫ advertExpiry (100s).
236+
# uncapped w = 100 * 100.0 * 1.0 = 10000s ≫ advertExpiry (100s).
235237
let discoConfig =
236238
ServiceDiscoveryConfig.new(advertExpiry = 100.secs, safetyParam = 1.0)
237239
let serviceId = makeServiceId()
@@ -243,9 +245,9 @@ suite "Service Discovery Registrar - advertExpiry cap":
243245

244246
let w = registrar.waitingTime(discoConfig, ad, 1000, serviceId, now)
245247

246-
check w == 10000.secs
248+
check w == discoConfig.advertExpiry
247249

248-
test "waitingTime does not cap a lower-bound-driven wait at advertExpiry":
250+
test "waitingTime clamps lower-bound wait to advertExpiry":
249251
let registrar = Registrar.new()
250252
let discoConfig = ServiceDiscoveryConfig.new() # advertExpiry = 900s (default)
251253
let serviceId = makeServiceId()
@@ -258,12 +260,12 @@ suite "Service Discovery Registrar - advertExpiry cap":
258260

259261
let w = registrar.waitingTime(discoConfig, ad, 1000, serviceId, now)
260262

261-
check w == 100000.secs
263+
check w == discoConfig.advertExpiry
262264

263-
test "waitingTime returns a legitimately small wait untouched":
265+
test "waitingTime cap leaves a legitimately small wait untouched":
264266
let registrar = Registrar.new()
265-
# Empty cache, safetyParam = 0.5 ⇒ w = 10000 * 0.5 = 5000s, comfortably
266-
# below advertExpiry (10000s) either way.
267+
# Empty cache, safetyParam = 0.5 ⇒ uncapped w = 10000 * 0.5 = 5000s,
268+
# comfortably below advertExpiry (10000s) so the clamp is a no-op.
267269
let discoConfig =
268270
ServiceDiscoveryConfig.new(advertExpiry = 10000.secs, safetyParam = 0.5)
269271
let serviceId = makeServiceId()
@@ -275,86 +277,6 @@ suite "Service Discovery Registrar - advertExpiry cap":
275277
check w < discoConfig.advertExpiry
276278
check w == 5000.secs
277279

278-
test "registration caps the offered tWaitFor at advertExpiry":
279-
let advertExpiry = 100.secs
280-
let conf = ServiceDiscoveryConfig.new(
281-
advertExpiry = advertExpiry, safetyParam = 1.0, advertCacheCap = 10
282-
)
283-
let disco = setupServiceDiscoveryNode(discoConfig = conf)
284-
let serviceName = "service"
285-
let serviceId = serviceName.hashServiceId()
286-
let advertiserKey = PrivateKey.random(rng()).get()
287-
let advertiserId = PeerId.init(advertiserKey).get()
288-
let adBytes = makeAdvertisement(serviceName, advertiserKey).encode().get()
289-
290-
# Saturate the cache: occupancy pins at 100.0, so w = 100*100*1.0 = 10000s.
291-
for i in 0 ..< 10:
292-
disco.registrar.cacheTimestamps[(peerId: randomPeerId(), seqNo: uint64(i))] =
293-
Moment.now()
294-
295-
let inMsg = kadprotobuf.Message(
296-
msgType: kadprotobuf.MessageType.register,
297-
key: serviceId,
298-
register: Opt.some(
299-
kadprotobuf.RegisterMessage(
300-
advertisement: adBytes,
301-
status: Opt.none(kadprotobuf.RegistrationStatus),
302-
ticket: Opt.none(Ticket),
303-
)
304-
),
305-
)
306-
let reply = disco.registration(advertiserId, inMsg).register.get()
307-
308-
check reply.status.get() == kadprotobuf.RegistrationStatus.Wait
309-
check reply.ticket.get().tWaitFor.get() == advertExpiry
310-
311-
test "sustained overload keeps offering advertExpiry-length waits across retries":
312-
let advertExpiry = 100.secs
313-
let registrationWindow = 10.secs
314-
let conf = ServiceDiscoveryConfig.new(
315-
advertExpiry = advertExpiry,
316-
safetyParam = 1.0,
317-
advertCacheCap = 10,
318-
registrationWindow = registrationWindow,
319-
)
320-
let disco = setupServiceDiscoveryNode(discoConfig = conf)
321-
let serviceName = "service"
322-
let serviceId = serviceName.hashServiceId()
323-
let advertiserKey = PrivateKey.random(rng()).get()
324-
let advertiserId = PeerId.init(advertiserKey).get()
325-
let adBytes = makeAdvertisement(serviceName, advertiserKey).encode().get()
326-
327-
for i in 0 ..< 10:
328-
disco.registrar.cacheTimestamps[(peerId: randomPeerId(), seqNo: uint64(i))] =
329-
Moment.now()
330-
331-
let firstAttemptTime =
332-
Moment.init((Moment.now() - advertExpiry).epochSeconds, Second)
333-
var retryTicket = Ticket(
334-
advertisement: adBytes,
335-
tInit: firstAttemptTime,
336-
tMod: firstAttemptTime,
337-
tWaitFor: advertExpiry,
338-
signature: Opt.none(seq[byte]),
339-
)
340-
check retryTicket.sign(disco.switch.peerInfo.privateKey).isOk()
341-
342-
let inMsg = kadprotobuf.Message(
343-
msgType: kadprotobuf.MessageType.register,
344-
key: serviceId,
345-
register: Opt.some(
346-
kadprotobuf.RegisterMessage(
347-
advertisement: adBytes,
348-
status: Opt.none(kadprotobuf.RegistrationStatus),
349-
ticket: Opt.some(retryTicket),
350-
)
351-
),
352-
)
353-
let reply = disco.registration(advertiserId, inMsg).register.get()
354-
355-
check reply.status.get() == kadprotobuf.RegistrationStatus.Wait
356-
check reply.ticket.get().tWaitFor.get() == advertExpiry
357-
358280
suite "Service Discovery Registrar - Lower Bound Enforcement":
359281
test "waitingTime enforces service lower bound when exists":
360282
let registrar = Registrar.new()

0 commit comments

Comments
 (0)