Commit 6d107c70 authored by Juan Batiz-Benet's avatar Juan Batiz-Benet

core/bootstrap: cleaned up bootstrapping

Moved it to its own package to isolate scope.
parent 8d7a7981
...@@ -14,6 +14,7 @@ import ( ...@@ -14,6 +14,7 @@ import (
context "github.com/jbenet/go-ipfs/Godeps/_workspace/src/code.google.com/p/go.net/context" context "github.com/jbenet/go-ipfs/Godeps/_workspace/src/code.google.com/p/go.net/context"
goprocess "github.com/jbenet/go-ipfs/Godeps/_workspace/src/github.com/jbenet/goprocess" goprocess "github.com/jbenet/go-ipfs/Godeps/_workspace/src/github.com/jbenet/goprocess"
periodicproc "github.com/jbenet/go-ipfs/Godeps/_workspace/src/github.com/jbenet/goprocess/periodic"
) )
// DefaultBootstrapQueries specifies how many queries to run, // DefaultBootstrapQueries specifies how many queries to run,
...@@ -54,9 +55,9 @@ const DefaultBootstrapTimeout = time.Duration(10 * time.Second) ...@@ -54,9 +55,9 @@ const DefaultBootstrapTimeout = time.Duration(10 * time.Second)
// and connected to at least a few nodes. // and connected to at least a few nodes.
// //
// Like PeriodicBootstrap, Bootstrap returns a process, so the user can stop it. // Like PeriodicBootstrap, Bootstrap returns a process, so the user can stop it.
func (dht *IpfsDHT) Bootstrap() (goprocess.Process, error) { func (dht *IpfsDHT) Bootstrap(ctx context.Context) (goprocess.Process, error) {
if err := dht.runBootstrap(dht.Context(), DefaultBootstrapQueries); err != nil { if err := dht.runBootstrap(ctx, DefaultBootstrapQueries); err != nil {
return nil, err return nil, err
} }
...@@ -79,14 +80,7 @@ func (dht *IpfsDHT) BootstrapOnSignal(queries int, signal <-chan time.Time) (gop ...@@ -79,14 +80,7 @@ func (dht *IpfsDHT) BootstrapOnSignal(queries int, signal <-chan time.Time) (gop
return nil, fmt.Errorf("invalid signal: %v", signal) return nil, fmt.Errorf("invalid signal: %v", signal)
} }
proc := goprocess.Go(func(worker goprocess.Process) { proc := periodicproc.Ticker(signal, func(worker goprocess.Process) {
defer log.Debug("dht bootstrapper shutting down")
for {
select {
case <-worker.Closing():
return
case <-signal:
// it would be useful to be able to send out signals of when we bootstrap, too... // it would be useful to be able to send out signals of when we bootstrap, too...
// maybe this is a good case for whole module event pub/sub? // maybe this is a good case for whole module event pub/sub?
...@@ -113,8 +107,6 @@ func (dht *IpfsDHT) BootstrapOnSignal(queries int, signal <-chan time.Time) (gop ...@@ -113,8 +107,6 @@ func (dht *IpfsDHT) BootstrapOnSignal(queries int, signal <-chan time.Time) (gop
// ignore all errors with something like an ErrStreamDiscard. We should // ignore all errors with something like an ErrStreamDiscard. We should
// study what other systems do for ideas. // study what other systems do for ideas.
} }
}
}
}) })
return proc, nil return proc, nil
......
Markdown is supported
0% or .
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment