mirror of
https://github.com/fluencelabs/go-libp2p-kad-dht
synced 2025-04-24 22:32:13 +00:00
make max record age configurable
This commit is contained in:
parent
8ecf9380a4
commit
7a39667d70
4
dht.go
4
dht.go
@ -71,6 +71,8 @@ type IpfsDHT struct {
|
||||
rtRefreshQueryTimeout time.Duration
|
||||
rtRefreshPeriod time.Duration
|
||||
triggerRtRefresh chan struct{}
|
||||
|
||||
maxRecordAge time.Duration
|
||||
}
|
||||
|
||||
// Assert that IPFS assumptions about interfaces aren't broken. These aren't a
|
||||
@ -95,6 +97,8 @@ func New(ctx context.Context, h host.Host, options ...opts.Option) (*IpfsDHT, er
|
||||
dht.rtRefreshPeriod = cfg.RoutingTable.RefreshPeriod
|
||||
dht.rtRefreshQueryTimeout = cfg.RoutingTable.RefreshQueryTimeout
|
||||
|
||||
dht.maxRecordAge = cfg.MaxRecordAge
|
||||
|
||||
// register for network notifs.
|
||||
dht.host.Network().Notify((*netNotifiee)(dht))
|
||||
|
||||
|
@ -118,7 +118,7 @@ func (dht *IpfsDHT) checkLocalDatastore(k []byte) (*recpb.Record, error) {
|
||||
recordIsBad = true
|
||||
}
|
||||
|
||||
if time.Since(recvtime) > MaxRecordAge {
|
||||
if time.Since(recvtime) > dht.maxRecordAge {
|
||||
logger.Debug("old record found, tossing.")
|
||||
recordIsBad = true
|
||||
}
|
||||
|
@ -26,6 +26,7 @@ type Options struct {
|
||||
Client bool
|
||||
Protocols []protocol.ID
|
||||
BucketSize int
|
||||
MaxRecordAge time.Duration
|
||||
|
||||
RoutingTable struct {
|
||||
RefreshQueryTimeout time.Duration
|
||||
@ -59,6 +60,7 @@ var Defaults = func(o *Options) error {
|
||||
o.RoutingTable.RefreshQueryTimeout = 10 * time.Second
|
||||
o.RoutingTable.RefreshPeriod = 1 * time.Hour
|
||||
o.RoutingTable.AutoRefresh = true
|
||||
o.MaxRecordAge = time.Hour * 36
|
||||
|
||||
return nil
|
||||
}
|
||||
@ -153,6 +155,19 @@ func BucketSize(bucketSize int) Option {
|
||||
}
|
||||
}
|
||||
|
||||
// MaxRecordAge specifies the maximum time that any node will hold onto a record ("PutValue record")
|
||||
// from the time its received. This does not apply to any other forms of validity that
|
||||
// the record may contain.
|
||||
// For example, a record may contain an ipns entry with an EOL saying its valid
|
||||
// until the year 2020 (a great time in the future). For that record to stick around
|
||||
// it must be rebroadcasted more frequently than once every 'MaxRecordAge'
|
||||
func MaxRecordAge(maxAge time.Duration) Option {
|
||||
return func(o *Options) error {
|
||||
o.MaxRecordAge = maxAge
|
||||
return nil
|
||||
}
|
||||
}
|
||||
|
||||
// DisableAutoRefresh completely disables 'auto-refresh' on the DHT routing
|
||||
// table. This means that we will neither refresh the routing table periodically
|
||||
// nor when the routing table size goes below the minimum threshold.
|
||||
|
@ -3,7 +3,6 @@ package dht
|
||||
import (
|
||||
"context"
|
||||
"fmt"
|
||||
"time"
|
||||
|
||||
"github.com/libp2p/go-libp2p-core/peer"
|
||||
"github.com/libp2p/go-libp2p-core/routing"
|
||||
@ -11,14 +10,6 @@ import (
|
||||
ci "github.com/libp2p/go-libp2p-core/crypto"
|
||||
)
|
||||
|
||||
// MaxRecordAge specifies the maximum time that any node will hold onto a record
|
||||
// from the time its received. This does not apply to any other forms of validity that
|
||||
// the record may contain.
|
||||
// For example, a record may contain an ipns entry with an EOL saying its valid
|
||||
// until the year 2020 (a great time in the future). For that record to stick around
|
||||
// it must be rebroadcasted more frequently than once every 'MaxRecordAge'
|
||||
const MaxRecordAge = time.Hour * 36
|
||||
|
||||
type pubkrs struct {
|
||||
pubk ci.PubKey
|
||||
err error
|
||||
|
Loading…
x
Reference in New Issue
Block a user