1
0
mirror of https://github.com/ipfs/kubo.git synced 2025-06-26 23:53:19 +08:00

Merge pull request #4154 from ipfs/feat/lowpower-profile

Add low power init profile
This commit is contained in:
Whyrusleeping
2018-03-24 20:55:54 -07:00
committed by GitHub
8 changed files with 70 additions and 5 deletions

View File

@ -45,6 +45,7 @@ const (
routingOptionDHTClientKwd = "dhtclient" routingOptionDHTClientKwd = "dhtclient"
routingOptionDHTKwd = "dht" routingOptionDHTKwd = "dht"
routingOptionNoneKwd = "none" routingOptionNoneKwd = "none"
routingOptionDefaultKwd = "default"
unencryptTransportKwd = "disable-transport-encryption" unencryptTransportKwd = "disable-transport-encryption"
unrestrictedApiAccessKwd = "unrestricted-api" unrestrictedApiAccessKwd = "unrestricted-api"
writableKwd = "writable" writableKwd = "writable"
@ -150,7 +151,7 @@ Headers.
Options: []cmdkit.Option{ Options: []cmdkit.Option{
cmdkit.BoolOption(initOptionKwd, "Initialize ipfs with default settings if not already initialized"), cmdkit.BoolOption(initOptionKwd, "Initialize ipfs with default settings if not already initialized"),
cmdkit.StringOption(initProfileOptionKwd, "Configuration profiles to apply for --init. See ipfs init --help for more"), cmdkit.StringOption(initProfileOptionKwd, "Configuration profiles to apply for --init. See ipfs init --help for more"),
cmdkit.StringOption(routingOptionKwd, "Overrides the routing option").WithDefault("dht"), cmdkit.StringOption(routingOptionKwd, "Overrides the routing option").WithDefault("default"),
cmdkit.BoolOption(mountKwd, "Mounts IPFS to the filesystem"), cmdkit.BoolOption(mountKwd, "Mounts IPFS to the filesystem"),
cmdkit.BoolOption(writableKwd, "Enable writing objects (with POST, PUT and DELETE)"), cmdkit.BoolOption(writableKwd, "Enable writing objects (with POST, PUT and DELETE)"),
cmdkit.StringOption(ipfsMountKwd, "Path to the mountpoint for IPFS (if using --mount). Defaults to config setting."), cmdkit.StringOption(ipfsMountKwd, "Path to the mountpoint for IPFS (if using --mount). Defaults to config setting."),
@ -300,6 +301,22 @@ func daemonFunc(req *cmds.Request, re cmds.ResponseEmitter, env cmds.Environment
} }
routingOption, _ := req.Options[routingOptionKwd].(string) routingOption, _ := req.Options[routingOptionKwd].(string)
if err != nil {
re.SetError(err, cmdkit.ErrNormal)
return
}
if routingOption == routingOptionDefaultKwd {
cfg, err := repo.Config()
if err != nil {
re.SetError(err, cmdkit.ErrNormal)
return
}
routingOption = cfg.Routing.Type
if routingOption == "" {
routingOption = routingOptionDHTKwd
}
}
switch routingOption { switch routingOption {
case routingOptionSupernodeKwd: case routingOptionSupernodeKwd:
re.SetError(errors.New("supernode routing was never fully implemented and has been removed"), cmdkit.ErrNormal) re.SetError(errors.New("supernode routing was never fully implemented and has been removed"), cmdkit.ErrNormal)

View File

@ -39,6 +39,9 @@ Available profiles:
running IPFS on machines with public IPv4 addresses. running IPFS on machines with public IPv4 addresses.
'test' - Reduces external interference of IPFS daemon, this 'test' - Reduces external interference of IPFS daemon, this
is useful when using the daemon in test environments. is useful when using the daemon in test environments.
'lowpower' - Reduces daemon overhead on the system. May affect node
functionality - performance of content discovery and data fetching
may be degraded.
ipfs uses a repository in the local file system. By default, the repo is ipfs uses a repository in the local file system. By default, the repo is
located at ~/.ipfs. To change the repo location, set the $IPFS_PATH located at ~/.ipfs. To change the repo location, set the $IPFS_PATH

View File

@ -197,6 +197,12 @@ Default: `true`
- `Interval` - `Interval`
A number of seconds to wait between discovery checks. A number of seconds to wait between discovery checks.
- `Routing`
Content routing mode. Can be overridden with daemon `--routing` flag.
Valid modes are:
- `dht` (default)
- `dhtclient`
- `none`
## `Gateway` ## `Gateway`
Options for the HTTP gateway. Options for the HTTP gateway.

View File

@ -19,6 +19,7 @@ type Config struct {
Addresses Addresses // local node's addresses Addresses Addresses // local node's addresses
Mounts Mounts // local node's mount points Mounts Mounts // local node's mount points
Discovery Discovery // local node's discovery mechanisms Discovery Discovery // local node's discovery mechanisms
Routing Routing // local node's routing settings
Ipns Ipns // Ipns settings Ipns Ipns // Ipns settings
Bootstrap []string // local nodes's bootstrap peer addresses Bootstrap []string // local nodes's bootstrap peer addresses
Gateway Gateway // local node's gateway server options Gateway Gateway // local node's gateway server options

View File

@ -38,10 +38,16 @@ func Init(out io.Writer, nBitsForKeypair int) (*Config, error) {
Datastore: datastore, Datastore: datastore,
Bootstrap: BootstrapPeerStrings(bootstrapPeers), Bootstrap: BootstrapPeerStrings(bootstrapPeers),
Identity: identity, Identity: identity,
Discovery: Discovery{MDNS{ Discovery: Discovery{
Enabled: true, MDNS: MDNS{
Interval: 10, Enabled: true,
}}, Interval: 10,
},
},
Routing: Routing{
Type: "dht",
},
// setup the node mount points. // setup the node mount points.
Mounts: Mounts{ Mounts: Mounts{

View File

@ -1,5 +1,7 @@
package config package config
import "time"
// Transformer is a function which takes configuration and applies some filter to it // Transformer is a function which takes configuration and applies some filter to it
type Transformer func(c *Config) error type Transformer func(c *Config) error
@ -73,6 +75,15 @@ var Profiles = map[string]Transformer{
c.Datastore.Spec = DefaultDatastoreConfig().Spec c.Datastore.Spec = DefaultDatastoreConfig().Spec
return nil return nil
}, },
"lowpower": func(c *Config) error {
c.Routing.Type = "dhtclient"
c.Reprovider.Interval = "0"
c.Swarm.ConnMgr.LowWater = 20
c.Swarm.ConnMgr.HighWater = 40
c.Swarm.ConnMgr.GracePeriod = time.Minute.String()
return nil
},
} }
func appendSingle(a []string, b []string) []string { func appendSingle(a []string, b []string) []string {

7
repo/config/routing.go Normal file
View File

@ -0,0 +1,7 @@
package config
// Routing defines configuration options for libp2p routing
type Routing struct {
// Type sets default daemon routing mode.
Type string
}

View File

@ -167,6 +167,20 @@ test_expect_success "clean up ipfs dir" '
rm -rf "$IPFS_PATH" rm -rf "$IPFS_PATH"
' '
test_expect_success "'ipfs init --profile=lowpower' succeeds" '
BITS="1024" &&
ipfs init --bits="$BITS" --profile=lowpower
'
test_expect_success "'ipfs config Discovery.Routing' looks good" '
ipfs config Routing.Type > actual_config &&
test $(cat actual_config) = "dhtclient"
'
test_expect_success "clean up ipfs dir" '
rm -rf "$IPFS_PATH"
'
test_init_ipfs test_init_ipfs
test_launch_ipfs_daemon test_launch_ipfs_daemon