mirror of
https://github.com/fluencelabs/go-libp2p-kad-dht
synced 2025-04-25 06:42: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
|
rtRefreshQueryTimeout time.Duration
|
||||||
rtRefreshPeriod time.Duration
|
rtRefreshPeriod time.Duration
|
||||||
triggerRtRefresh chan struct{}
|
triggerRtRefresh chan struct{}
|
||||||
|
|
||||||
|
maxRecordAge time.Duration
|
||||||
}
|
}
|
||||||
|
|
||||||
// Assert that IPFS assumptions about interfaces aren't broken. These aren't a
|
// 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.rtRefreshPeriod = cfg.RoutingTable.RefreshPeriod
|
||||||
dht.rtRefreshQueryTimeout = cfg.RoutingTable.RefreshQueryTimeout
|
dht.rtRefreshQueryTimeout = cfg.RoutingTable.RefreshQueryTimeout
|
||||||
|
|
||||||
|
dht.maxRecordAge = cfg.MaxRecordAge
|
||||||
|
|
||||||
// register for network notifs.
|
// register for network notifs.
|
||||||
dht.host.Network().Notify((*netNotifiee)(dht))
|
dht.host.Network().Notify((*netNotifiee)(dht))
|
||||||
|
|
||||||
|
@ -118,7 +118,7 @@ func (dht *IpfsDHT) checkLocalDatastore(k []byte) (*recpb.Record, error) {
|
|||||||
recordIsBad = true
|
recordIsBad = true
|
||||||
}
|
}
|
||||||
|
|
||||||
if time.Since(recvtime) > MaxRecordAge {
|
if time.Since(recvtime) > dht.maxRecordAge {
|
||||||
logger.Debug("old record found, tossing.")
|
logger.Debug("old record found, tossing.")
|
||||||
recordIsBad = true
|
recordIsBad = true
|
||||||
}
|
}
|
||||||
|
@ -26,6 +26,7 @@ type Options struct {
|
|||||||
Client bool
|
Client bool
|
||||||
Protocols []protocol.ID
|
Protocols []protocol.ID
|
||||||
BucketSize int
|
BucketSize int
|
||||||
|
MaxRecordAge time.Duration
|
||||||
|
|
||||||
RoutingTable struct {
|
RoutingTable struct {
|
||||||
RefreshQueryTimeout time.Duration
|
RefreshQueryTimeout time.Duration
|
||||||
@ -59,6 +60,7 @@ var Defaults = func(o *Options) error {
|
|||||||
o.RoutingTable.RefreshQueryTimeout = 10 * time.Second
|
o.RoutingTable.RefreshQueryTimeout = 10 * time.Second
|
||||||
o.RoutingTable.RefreshPeriod = 1 * time.Hour
|
o.RoutingTable.RefreshPeriod = 1 * time.Hour
|
||||||
o.RoutingTable.AutoRefresh = true
|
o.RoutingTable.AutoRefresh = true
|
||||||
|
o.MaxRecordAge = time.Hour * 36
|
||||||
|
|
||||||
return nil
|
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
|
// DisableAutoRefresh completely disables 'auto-refresh' on the DHT routing
|
||||||
// table. This means that we will neither refresh the routing table periodically
|
// table. This means that we will neither refresh the routing table periodically
|
||||||
// nor when the routing table size goes below the minimum threshold.
|
// nor when the routing table size goes below the minimum threshold.
|
||||||
|
@ -3,7 +3,6 @@ package dht
|
|||||||
import (
|
import (
|
||||||
"context"
|
"context"
|
||||||
"fmt"
|
"fmt"
|
||||||
"time"
|
|
||||||
|
|
||||||
"github.com/libp2p/go-libp2p-core/peer"
|
"github.com/libp2p/go-libp2p-core/peer"
|
||||||
"github.com/libp2p/go-libp2p-core/routing"
|
"github.com/libp2p/go-libp2p-core/routing"
|
||||||
@ -11,14 +10,6 @@ import (
|
|||||||
ci "github.com/libp2p/go-libp2p-core/crypto"
|
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 {
|
type pubkrs struct {
|
||||||
pubk ci.PubKey
|
pubk ci.PubKey
|
||||||
err error
|
err error
|
||||||
|
Loading…
x
Reference in New Issue
Block a user