-
-
Notifications
You must be signed in to change notification settings - Fork 3k
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
IPNS Pubsub Reprovider Duration (GC for unused topics) #8586
Comments
cc @BigLep @aschmahmann @Stebalien if the above sounds sensible and something @schomatis could add to his list of things to tackle. |
I have no experience with IPNS in |
Update 12/10 (@schomatis): I think I can tackle this but still will need support during the review process and resolving some doubts. Left my notes of how to proceed at the end of the issue's description. (cc @lidel) |
@schomatis are you using go-ipfs 0.11.0? We've just added those config flags there.
@aschmahmann mind confirming this? My understanding is that:
|
I took a dab at this to practice my go-fu, and came up with a PR for go-libp2p-pubsub-router which covers the minimal implementation (to my understanding). No tests and no config so far. @schomatis' notes were very useful. Assumptions
Implantation details in the PR itself. Sorry if I DUPed anyones work, feel free to take over anytime. |
Thanks @TobiaszCudnik !! No duplication at all, I haven't started on this. Once the direction above is confirmed we can move forward with this and I'll help you get that landed (or if you're busy I can take over if any finishing touches are required). |
@schomatis : are you able to drive this one to completion with @TobiaszCudnik ? @lidel : any concerns with @schomatis being the approver for ? |
@BigLep No. We still have open questions about the direction of this issue in #8586 (comment), waiting for @aschmahmann 's input. |
TLDR
Rationale
We want go-ipfs users in desktop use case (IPFS Desktop, Brave) and HTTP Gateways to have Pubsub and IPNS over pubsub enabled by default (#6621).
One of the blockers for enabling it by default for all our users is IPNS over pubsub listening to IPNS topic forever. When running on a server hosting HTTP Gateway (or a very active desktop client) resolving
/ipns/{libp2p-key}
will add topic listener that never expires.Proposed fix
Introduce usage-based GC for unused pubsub topics created by IPNS over pubsub.
We don't want the expiration to be too aggresive: there is a value in peers running "IPNS record reprovider" over the libp2p's fetch protocol. I think ~48h would match current expiration window of IPNS record in DHT + solve the problem of "IPNS rot" caused by someone's laptop going offline.
To implement the GC:
/ipns/{libp2p-key}
was resolved by namesys (ipfs name resolve
oripfs resolve
)OptionalDuration
), so we can adjust the default without impacting user's configs.Ipns.ReproviderDuration
if there is no point in making this ipns-specific – I believe we want to enable reproviding on DHT as well, not sure if there is any value in having separateIpns.DHTReproviderDuration
andIpns.PubsubReproviderDuration
@schomatis' notes
IPNS Pubsub Reprovider Duration (GC for unused topics)
#8586
Related spec: https://github.com/ipfs/specs/blob/master/naming/pubsub.md.
Most of the logic of interest (subscription handling) is in the
PubsubValueStore
structure in https://github.com/libp2p/go-libp2p-pubsub-router.Also in the
IpnsResolver
ingithub.com/ipfs/[email protected]/routing.go
.Proposed solution
My biggest doubt is if we leave the subscription standing because we want to avoid unsubscribing and resubscribing repeatedly or is this just a technical debt.
If we actually want to leave the subscription standing then Lidel's proposal seems fine to me and I can add an independent goroutine in
NewPubsubValueStore
(similar togo psValueStore.rebroadcast(ctx)
here) that periodically checks the last read/write (PutValue
/GetValue
) of each topic and unsubscribes after certain time has elapsed (and no one is watching).If, on the other hand, the standing subscriptions are a technical debt then we should have a finer-grained control where we unsubscribe after each topic access (again, if no one is watching it).
Simplest path to trigger a topic subscription for IPNS using the
ipfs name
commandsThe text was updated successfully, but these errors were encountered: