Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

Merge unstable into master #1003

Merged
merged 46 commits into from
Dec 18, 2023
Merged
Changes from 1 commit
Commits
Show all changes
46 commits
Select commit Hold shift + click to select a range
c76d1e1
Remove nim 1.2 support (#907)
Menduist Jun 7, 2023
32085ca
Allow to override TCP connection timeouts (#903)
Menduist Jun 7, 2023
3640b4d
Autonat and HP changes (#899)
diegomrsantos Jun 7, 2023
3725f6a
chore: add basic metrics for rendezvous (#905)
vpavlin Jun 7, 2023
eb78292
Bump deps (#896)
Menduist Jun 7, 2023
c28d8bb
WS Transport: handle 'tls/ws' (#914)
Menduist Jun 12, 2023
6771147
Consider dns as public address (#913)
diegomrsantos Jun 13, 2023
a65b7b0
GossipSub: remove peer if we can't establish sendConn (#886)
Menduist Jun 14, 2023
49dfa84
Transports: handle TransportAbortedError properly (#916)
Menduist Jun 14, 2023
9d4c430
Bumper: fix case where target is up to date (#917)
Menduist Jun 15, 2023
5efa089
TCP transport: handle getObservedAddr errors (#918)
Menduist Jun 20, 2023
224f92e
Fix #916 regression causing accept loop lockup (#919)
Menduist Jun 20, 2023
1c4d083
Add GossipSub ping (#912)
Menduist Jun 21, 2023
66f9dc9
Remove all `Result.get()`s & `Option` -> `Opt` (#902)
Menduist Jun 28, 2023
f85d0f7
Handling Opt[PeerId] in logging (#923)
diegomrsantos Jun 28, 2023
43359dd
standard nimble env vars (#921)
arnetheduck Jun 28, 2023
81b861b
avoid `ProveField` warning in `crypto.init` (#915)
etan-status Jun 29, 2023
c45f970
Gossipsub scoring improvements (#909)
diegomrsantos Jul 3, 2023
74c402e
wstransport.nim: avoid re-raising 'TransportOsError' to avoid stoppin…
Ivansete-status Jul 7, 2023
1721f07
Fix crash on empty write (#930)
Menduist Jul 10, 2023
fab1340
avoid a few zeroMem (#932)
arnetheduck Jul 11, 2023
440461b
GS: improve handleIHave (#922)
Menduist Jul 11, 2023
b784167
GossipSub: IDontWant (#934)
Menduist Jul 28, 2023
7a369dd
GossipSub: Limit flood publishing (#911)
Menduist Jul 31, 2023
56c23a2
Add specs crypto tests (#938)
Menduist Aug 1, 2023
d6263bf
nim-websock new version compatibility (#939)
Menduist Aug 2, 2023
f80ce31
Bandwidth estimate as a parameter (#941)
diegomrsantos Aug 14, 2023
e03547e
Perf protocol (#925)
lchenut Aug 14, 2023
c6aa085
Prevent concurrent IWANT of the same message (#943)
diegomrsantos Aug 21, 2023
b76bac7
avoid importing `ecnist` when not needed (#942)
arnetheduck Aug 30, 2023
545a31d
Bump dependencies (#947)
Menduist Sep 6, 2023
ff77d52
IDontWant metrics (#946)
Menduist Sep 6, 2023
20b0e40
Fix doc generation CI (#948)
Menduist Sep 8, 2023
b2eac7e
GS: Relay messages to direct peers (#949)
Menduist Sep 15, 2023
56599f5
GossipSub Traffic scoring (#920)
diegomrsantos Sep 22, 2023
61929ae
Improve rdv advertise (#951)
diegomrsantos Sep 27, 2023
7587181
Split msgs in iwant response if bigger than limit (#944)
diegomrsantos Oct 2, 2023
575344e
Update interop CI name (#956)
Menduist Oct 5, 2023
459f685
Add a flag if a peer should be disconnected when above rate limit (#954)
diegomrsantos Oct 5, 2023
18b0f72
Rate Limit tests (#953)
diegomrsantos Oct 5, 2023
60f9536
Remove ConnManager from Upgrade (#959)
Menduist Oct 13, 2023
fc4e9a8
Fix WS transport when the connection aborts (#967)
lchenut Oct 23, 2023
3fc1236
Revert "Prevent concurrent IWANT of the same message (#943)" (#977)
diegomrsantos Nov 3, 2023
ebef85c
Rate limit fixes (#965)
diegomrsantos Nov 9, 2023
5f7a3ab
fix: doc workflow (#985)
diegomrsantos Nov 16, 2023
4e7eaba
fix chronos v4 compat (#982)
arnetheduck Nov 16, 2023
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
Prev Previous commit
Next Next commit
chore: add basic metrics for rendezvous (#905)
vpavlin authored Jun 7, 2023
commit 3725f6a95b2619f8e05454ccf5c121a5c5041568
15 changes: 15 additions & 0 deletions libp2p/protocols/rendezvous.nim
Original file line number Diff line number Diff line change
@@ -10,6 +10,7 @@
{.push raises: [].}

import tables, sequtils, sugar, sets, options
import metrics except collect
import chronos,
chronicles,
bearssl/rand,
@@ -27,6 +28,11 @@ export chronicles
logScope:
topics = "libp2p discovery rendezvous"

declareCounter(libp2p_rendezvous_register, "number of advertise requests")
declareCounter(libp2p_rendezvous_discover, "number of discovery requests")
declareGauge(libp2p_rendezvous_registered, "number of registered peers")
declareGauge(libp2p_rendezvous_namespaces, "number of registered namespaces")

const
RendezVousCodec* = "/rendezvous/1.0.0"
MinimumDuration* = 2.hours
@@ -375,6 +381,7 @@ proc save(rdv: RendezVous,

proc register(rdv: RendezVous, conn: Connection, r: Register): Future[void] =
trace "Received Register", peerId = conn.peerId, ns = r.ns
libp2p_rendezvous_register.inc()
if r.ns.len notin 1..255:
return conn.sendRegisterResponseError(InvalidNamespace)
let ttl = r.ttl.get(MinimumTTL)
@@ -386,6 +393,8 @@ proc register(rdv: RendezVous, conn: Connection, r: Register): Future[void] =
if rdv.countRegister(conn.peerId) >= RegistrationLimitPerPeer:
return conn.sendRegisterResponseError(NotAuthorized, "Registration limit reached")
rdv.save(r.ns, conn.peerId, r)
libp2p_rendezvous_registered.inc()
libp2p_rendezvous_namespaces.set(int64(rdv.namespaces.len))
conn.sendRegisterResponse(ttl)

proc unregister(rdv: RendezVous, conn: Connection, u: Unregister) =
@@ -395,11 +404,13 @@ proc unregister(rdv: RendezVous, conn: Connection, u: Unregister) =
for index in rdv.namespaces[nsSalted]:
if rdv.registered[index].peerId == conn.peerId:
rdv.registered[index].expiration = rdv.defaultDT
libp2p_rendezvous_registered.dec()
except KeyError:
return

proc discover(rdv: RendezVous, conn: Connection, d: Discover) {.async.} =
trace "Received Discover", peerId = conn.peerId, ns = d.ns
libp2p_rendezvous_discover.inc()
if d.ns.len notin 0..255:
await conn.sendDiscoverResponseError(InvalidNamespace)
return
@@ -654,9 +665,13 @@ proc new*(T: typedesc[RendezVous],
proc deletesRegister(rdv: RendezVous) {.async.} =
heartbeat "Register timeout", 1.minutes:
let n = Moment.now()
var total = 0
rdv.registered.flushIfIt(it.expiration < n)
for data in rdv.namespaces.mvalues():
data.keepItIf(it >= rdv.registered.offset)
total += data.len
libp2p_rendezvous_registered.set(int64(total))
libp2p_rendezvous_namespaces.set(int64(rdv.namespaces.len))

method start*(rdv: RendezVous) {.async.} =
if not rdv.registerDeletionLoop.isNil: