Allow selecting pintracker with ipfs-cluster-service

License: MIT
Signed-off-by: Hector Sanjuan <code@hector.link>
This commit is contained in:
Hector Sanjuan 2018-08-14 19:57:14 +02:00
parent b8194143c2
commit 10fa7a13b5
6 changed files with 54 additions and 16 deletions

View File

@ -15,18 +15,20 @@ import (
"github.com/ipfs/ipfs-cluster/monitor/basic"
"github.com/ipfs/ipfs-cluster/monitor/pubsubmon"
"github.com/ipfs/ipfs-cluster/pintracker/maptracker"
"github.com/ipfs/ipfs-cluster/pintracker/stateless"
)
type cfgs struct {
clusterCfg *ipfscluster.Config
apiCfg *rest.Config
ipfshttpCfg *ipfshttp.Config
consensusCfg *raft.Config
trackerCfg *maptracker.Config
monCfg *basic.Config
pubsubmonCfg *pubsubmon.Config
diskInfCfg *disk.Config
numpinInfCfg *numpin.Config
clusterCfg *ipfscluster.Config
apiCfg *rest.Config
ipfshttpCfg *ipfshttp.Config
consensusCfg *raft.Config
maptrackerCfg *maptracker.Config
statelessTrackerCfg *stateless.Config
monCfg *basic.Config
pubsubmonCfg *pubsubmon.Config
diskInfCfg *disk.Config
numpinInfCfg *numpin.Config
}
func makeConfigs() (*config.Manager, *cfgs) {
@ -35,7 +37,8 @@ func makeConfigs() (*config.Manager, *cfgs) {
apiCfg := &rest.Config{}
ipfshttpCfg := &ipfshttp.Config{}
consensusCfg := &raft.Config{}
trackerCfg := &maptracker.Config{}
maptrackerCfg := &maptracker.Config{}
statelessCfg := &stateless.Config{}
monCfg := &basic.Config{}
pubsubmonCfg := &pubsubmon.Config{}
diskInfCfg := &disk.Config{}
@ -44,7 +47,8 @@ func makeConfigs() (*config.Manager, *cfgs) {
cfg.RegisterComponent(config.API, apiCfg)
cfg.RegisterComponent(config.IPFSConn, ipfshttpCfg)
cfg.RegisterComponent(config.Consensus, consensusCfg)
cfg.RegisterComponent(config.PinTracker, trackerCfg)
cfg.RegisterComponent(config.PinTracker, maptrackerCfg)
cfg.RegisterComponent(config.PinTracker, statelessCfg)
cfg.RegisterComponent(config.Monitor, monCfg)
cfg.RegisterComponent(config.Monitor, pubsubmonCfg)
cfg.RegisterComponent(config.Informer, diskInfCfg)
@ -54,7 +58,8 @@ func makeConfigs() (*config.Manager, *cfgs) {
apiCfg,
ipfshttpCfg,
consensusCfg,
trackerCfg,
maptrackerCfg,
statelessCfg,
monCfg,
pubsubmonCfg,
diskInfCfg,

View File

@ -22,6 +22,7 @@ import (
"github.com/ipfs/ipfs-cluster/monitor/basic"
"github.com/ipfs/ipfs-cluster/monitor/pubsubmon"
"github.com/ipfs/ipfs-cluster/pintracker/maptracker"
"github.com/ipfs/ipfs-cluster/pintracker/stateless"
"github.com/ipfs/ipfs-cluster/pstoremgr"
"github.com/ipfs/ipfs-cluster/state/mapstate"
@ -125,7 +126,7 @@ func createCluster(
)
checkErr("creating consensus component", err)
tracker := maptracker.NewMapPinTracker(cfgs.trackerCfg, host.ID())
tracker := setupPinTracker(c.String("pintracker"), host, cfgs.maptrackerCfg, cfgs.statelessTrackerCfg)
mon := setupMonitor(c.String("monitor"), host, cfgs.monCfg, cfgs.pubsubmonCfg)
informer, alloc := setupAllocation(c.String("alloc"), cfgs.diskInfCfg, cfgs.numpinInfCfg)
@ -238,10 +239,12 @@ func setupMonitor(
case "basic":
mon, err := basic.NewMonitor(basicCfg)
checkErr("creating monitor", err)
logger.Debug("basic monitor loaded")
return mon
case "pubsub":
mon, err := pubsubmon.New(h, pubsubCfg)
checkErr("creating monitor", err)
logger.Debug("pubsub monitor loaded")
return mon
default:
err := errors.New("unknown monitor type")
@ -250,3 +253,25 @@ func setupMonitor(
}
}
func setupPinTracker(
name string,
h host.Host,
mapCfg *maptracker.Config,
statelessCfg *stateless.Config,
) ipfscluster.PinTracker {
switch name {
case "map":
ptrk := maptracker.NewMapPinTracker(mapCfg, h.ID())
logger.Debug("map pintracker loaded")
return ptrk
case "stateless":
ptrk := stateless.New(statelessCfg, h.ID())
logger.Debug("stateless pintracker loaded")
return ptrk
default:
err := errors.New("unknown pintracker type")
checkErr("", err)
return nil
}
}

View File

@ -24,6 +24,7 @@ const programName = `ipfs-cluster-service`
const (
defaultAllocation = "disk-freespace"
defaultMonitor = "pubsub"
defaultPinTracker = "map"
defaultLogLevel = "info"
)
@ -250,6 +251,12 @@ configuration.
Hidden: true,
Usage: "peer monitor to use [basic,pubsub].",
},
cli.StringFlag{
Name: "pintracker",
Value: defaultPinTracker,
Hidden: true,
Usage: "pintracker to use [map,stateless].",
},
},
Action: daemon,
},

View File

@ -21,6 +21,7 @@ var LoggingFacilities = map[string]string{
"shardingdags": "INFO",
"localdags": "INFO",
"adder": "INFO",
"optracker": "INFO",
}
// LoggingFacilitiesExtra provides logging identifiers

View File

@ -11,7 +11,7 @@ const configKey = "maptracker"
// Default values for this Config.
const (
DefaultMaxPinQueueSize = 4096
DefaultMaxPinQueueSize = 50000
DefaultConcurrentPins = 10
)

View File

@ -11,8 +11,8 @@ const configKey = "stateless"
// Default values for this Config.
const (
DefaultMaxPinQueueSize = 4096
DefaultConcurrentPins = 1
DefaultMaxPinQueueSize = 50000
DefaultConcurrentPins = 10
)
// Config allows to initialize a Monitor and customize some parameters.