make max record age configurable

This commit is contained in:
Aarsh Shah 2019-11-15 10:54:09 +08:00
parent 8ecf9380a4
commit 7a39667d70
4 changed files with 25 additions and 15 deletions

4
dht.go
View File

@ -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))

View File

@ -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
}

View File

@ -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.

View File

@ -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