Integrate BACKBEAT SDK and resolve KACHING license validation
Major integrations and fixes: - Added BACKBEAT SDK integration for P2P operation timing - Implemented beat-aware status tracking for distributed operations - Added Docker secrets support for secure license management - Resolved KACHING license validation via HTTPS/TLS - Updated docker-compose configuration for clean stack deployment - Disabled rollback policies to prevent deployment failures - Added license credential storage (CHORUS-DEV-MULTI-001) Technical improvements: - BACKBEAT P2P operation tracking with phase management - Enhanced configuration system with file-based secrets - Improved error handling for license validation - Clean separation of KACHING and CHORUS deployment stacks 🤖 Generated with [Claude Code](https://claude.ai/code) Co-Authored-By: Claude <noreply@anthropic.com>
This commit is contained in:
172
vendor/github.com/libp2p/go-libp2p-kad-dht/internal/config/config.go
generated
vendored
Normal file
172
vendor/github.com/libp2p/go-libp2p-kad-dht/internal/config/config.go
generated
vendored
Normal file
@@ -0,0 +1,172 @@
|
||||
package config
|
||||
|
||||
import (
|
||||
"fmt"
|
||||
"time"
|
||||
|
||||
"github.com/ipfs/boxo/ipns"
|
||||
ds "github.com/ipfs/go-datastore"
|
||||
dssync "github.com/ipfs/go-datastore/sync"
|
||||
"github.com/libp2p/go-libp2p-kad-dht/providers"
|
||||
"github.com/libp2p/go-libp2p-kbucket/peerdiversity"
|
||||
record "github.com/libp2p/go-libp2p-record"
|
||||
"github.com/libp2p/go-libp2p/core/host"
|
||||
"github.com/libp2p/go-libp2p/core/peer"
|
||||
"github.com/libp2p/go-libp2p/core/protocol"
|
||||
ma "github.com/multiformats/go-multiaddr"
|
||||
)
|
||||
|
||||
// DefaultPrefix is the application specific prefix attached to all DHT protocols by default.
|
||||
const DefaultPrefix protocol.ID = "/ipfs"
|
||||
|
||||
const defaultBucketSize = 20
|
||||
|
||||
// ModeOpt describes what mode the dht should operate in
|
||||
type ModeOpt int
|
||||
|
||||
// QueryFilterFunc is a filter applied when considering peers to dial when querying
|
||||
type QueryFilterFunc func(dht interface{}, ai peer.AddrInfo) bool
|
||||
|
||||
// RouteTableFilterFunc is a filter applied when considering connections to keep in
|
||||
// the local route table.
|
||||
type RouteTableFilterFunc func(dht interface{}, p peer.ID) bool
|
||||
|
||||
// Config is a structure containing all the options that can be used when constructing a DHT.
|
||||
type Config struct {
|
||||
Datastore ds.Batching
|
||||
Validator record.Validator
|
||||
ValidatorChanged bool // if true implies that the validator has been changed and that Defaults should not be used
|
||||
Mode ModeOpt
|
||||
ProtocolPrefix protocol.ID
|
||||
V1ProtocolOverride protocol.ID
|
||||
BucketSize int
|
||||
Concurrency int
|
||||
Resiliency int
|
||||
MaxRecordAge time.Duration
|
||||
EnableProviders bool
|
||||
EnableValues bool
|
||||
ProviderStore providers.ProviderStore
|
||||
QueryPeerFilter QueryFilterFunc
|
||||
LookupCheckConcurrency int
|
||||
|
||||
RoutingTable struct {
|
||||
RefreshQueryTimeout time.Duration
|
||||
RefreshInterval time.Duration
|
||||
AutoRefresh bool
|
||||
LatencyTolerance time.Duration
|
||||
CheckInterval time.Duration
|
||||
PeerFilter RouteTableFilterFunc
|
||||
DiversityFilter peerdiversity.PeerIPGroupFilter
|
||||
}
|
||||
|
||||
BootstrapPeers func() []peer.AddrInfo
|
||||
AddressFilter func([]ma.Multiaddr) []ma.Multiaddr
|
||||
|
||||
// test specific Config options
|
||||
DisableFixLowPeers bool
|
||||
TestAddressUpdateProcessing bool
|
||||
|
||||
EnableOptimisticProvide bool
|
||||
OptimisticProvideJobsPoolSize int
|
||||
}
|
||||
|
||||
func EmptyQueryFilter(_ interface{}, ai peer.AddrInfo) bool { return true }
|
||||
func EmptyRTFilter(_ interface{}, p peer.ID) bool { return true }
|
||||
|
||||
// Apply applies the given options to this Option
|
||||
func (c *Config) Apply(opts ...Option) error {
|
||||
for i, opt := range opts {
|
||||
if err := opt(c); err != nil {
|
||||
return fmt.Errorf("dht option %d failed: %s", i, err)
|
||||
}
|
||||
}
|
||||
return nil
|
||||
}
|
||||
|
||||
// ApplyFallbacks sets default values that could not be applied during config creation since they are dependent
|
||||
// on other configuration parameters (e.g. optA is by default 2x optB) and/or on the Host
|
||||
func (c *Config) ApplyFallbacks(h host.Host) error {
|
||||
if !c.ValidatorChanged {
|
||||
nsval, ok := c.Validator.(record.NamespacedValidator)
|
||||
if ok {
|
||||
if _, pkFound := nsval["pk"]; !pkFound {
|
||||
nsval["pk"] = record.PublicKeyValidator{}
|
||||
}
|
||||
if _, ipnsFound := nsval["ipns"]; !ipnsFound {
|
||||
nsval["ipns"] = ipns.Validator{KeyBook: h.Peerstore()}
|
||||
}
|
||||
} else {
|
||||
return fmt.Errorf("the default Validator was changed without being marked as changed")
|
||||
}
|
||||
}
|
||||
return nil
|
||||
}
|
||||
|
||||
// Option DHT option type.
|
||||
type Option func(*Config) error
|
||||
|
||||
// Defaults are the default DHT options. This option will be automatically
|
||||
// prepended to any options you pass to the DHT constructor.
|
||||
var Defaults = func(o *Config) error {
|
||||
o.Validator = record.NamespacedValidator{}
|
||||
o.Datastore = dssync.MutexWrap(ds.NewMapDatastore())
|
||||
o.ProtocolPrefix = DefaultPrefix
|
||||
o.EnableProviders = true
|
||||
o.EnableValues = true
|
||||
o.QueryPeerFilter = EmptyQueryFilter
|
||||
|
||||
o.RoutingTable.LatencyTolerance = 10 * time.Second
|
||||
o.RoutingTable.RefreshQueryTimeout = 10 * time.Second
|
||||
o.RoutingTable.RefreshInterval = 10 * time.Minute
|
||||
o.RoutingTable.AutoRefresh = true
|
||||
o.RoutingTable.PeerFilter = EmptyRTFilter
|
||||
|
||||
o.MaxRecordAge = providers.ProvideValidity
|
||||
|
||||
o.BucketSize = defaultBucketSize
|
||||
o.Concurrency = 10
|
||||
o.Resiliency = 3
|
||||
o.LookupCheckConcurrency = 256
|
||||
|
||||
// MAGIC: It makes sense to set it to a multiple of OptProvReturnRatio * BucketSize. We chose a multiple of 4.
|
||||
o.OptimisticProvideJobsPoolSize = 60
|
||||
|
||||
return nil
|
||||
}
|
||||
|
||||
func (c *Config) Validate() error {
|
||||
if c.ProtocolPrefix != DefaultPrefix {
|
||||
return nil
|
||||
}
|
||||
if c.BucketSize != defaultBucketSize {
|
||||
return fmt.Errorf("protocol prefix %s must use bucket size %d", DefaultPrefix, defaultBucketSize)
|
||||
}
|
||||
if !c.EnableProviders {
|
||||
return fmt.Errorf("protocol prefix %s must have providers enabled", DefaultPrefix)
|
||||
}
|
||||
if !c.EnableValues {
|
||||
return fmt.Errorf("protocol prefix %s must have values enabled", DefaultPrefix)
|
||||
}
|
||||
|
||||
nsval, isNSVal := c.Validator.(record.NamespacedValidator)
|
||||
if !isNSVal {
|
||||
return fmt.Errorf("protocol prefix %s must use a namespaced Validator", DefaultPrefix)
|
||||
}
|
||||
|
||||
if len(nsval) != 2 {
|
||||
return fmt.Errorf("protocol prefix %s must have exactly two namespaced validators - /pk and /ipns", DefaultPrefix)
|
||||
}
|
||||
|
||||
if pkVal, pkValFound := nsval["pk"]; !pkValFound {
|
||||
return fmt.Errorf("protocol prefix %s must support the /pk namespaced Validator", DefaultPrefix)
|
||||
} else if _, ok := pkVal.(record.PublicKeyValidator); !ok {
|
||||
return fmt.Errorf("protocol prefix %s must use the record.PublicKeyValidator for the /pk namespace", DefaultPrefix)
|
||||
}
|
||||
|
||||
if ipnsVal, ipnsValFound := nsval["ipns"]; !ipnsValFound {
|
||||
return fmt.Errorf("protocol prefix %s must support the /ipns namespaced Validator", DefaultPrefix)
|
||||
} else if _, ok := ipnsVal.(ipns.Validator); !ok {
|
||||
return fmt.Errorf("protocol prefix %s must use ipns.Validator for the /ipns namespace", DefaultPrefix)
|
||||
}
|
||||
return nil
|
||||
}
|
||||
16
vendor/github.com/libp2p/go-libp2p-kad-dht/internal/config/quorum.go
generated
vendored
Normal file
16
vendor/github.com/libp2p/go-libp2p-kad-dht/internal/config/quorum.go
generated
vendored
Normal file
@@ -0,0 +1,16 @@
|
||||
package config
|
||||
|
||||
import "github.com/libp2p/go-libp2p/core/routing"
|
||||
|
||||
type QuorumOptionKey struct{}
|
||||
|
||||
const defaultQuorum = 0
|
||||
|
||||
// GetQuorum defaults to 0 if no option is found
|
||||
func GetQuorum(opts *routing.Options) int {
|
||||
responsesNeeded, ok := opts.Other[QuorumOptionKey{}].(int)
|
||||
if !ok {
|
||||
responsesNeeded = defaultQuorum
|
||||
}
|
||||
return responsesNeeded
|
||||
}
|
||||
Reference in New Issue
Block a user