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

Make max record age configurable #410

Merged
merged 1 commit into from
Nov 15, 2019
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
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
4 changes: 4 additions & 0 deletions dht.go
Original file line number Diff line number Diff line change
Expand Up @@ -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
Expand All @@ -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))

Expand Down
2 changes: 1 addition & 1 deletion handlers.go
Original file line number Diff line number Diff line change
Expand Up @@ -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
}
Expand Down
25 changes: 20 additions & 5 deletions opts/options.go
Original file line number Diff line number Diff line change
Expand Up @@ -21,11 +21,12 @@ var (

// Options is a structure containing all the options that can be used when constructing a DHT.
type Options struct {
Datastore ds.Batching
Validator record.Validator
Client bool
Protocols []protocol.ID
BucketSize int
Datastore ds.Batching
Validator record.Validator
Client bool
Protocols []protocol.ID
BucketSize int
MaxRecordAge time.Duration

RoutingTable struct {
RefreshQueryTimeout time.Duration
Expand Down Expand Up @@ -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
}
Expand Down Expand Up @@ -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.
Expand Down
9 changes: 0 additions & 9 deletions records.go
Original file line number Diff line number Diff line change
Expand Up @@ -3,22 +3,13 @@ package dht
import (
"context"
"fmt"
"time"

"github.com/libp2p/go-libp2p-core/peer"
"github.com/libp2p/go-libp2p-core/routing"

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
Expand Down