--peer-age option.
This commit is contained in:
parent
16117898d4
commit
20040a6444
|
@ -4,6 +4,7 @@ package main
|
||||||
|
|
||||||
import (
|
import (
|
||||||
"github.com/jessevdk/go-flags"
|
"github.com/jessevdk/go-flags"
|
||||||
|
"time"
|
||||||
)
|
)
|
||||||
|
|
||||||
// Taken from: https://github.com/bitcoin/bitcoin/blob/89d72f3d9b6e7ef051ad1439f266b809f348229b/src/chainparams.cpp#L143
|
// Taken from: https://github.com/bitcoin/bitcoin/blob/89d72f3d9b6e7ef051ad1439f266b809f348229b/src/chainparams.cpp#L143
|
||||||
|
@ -21,6 +22,7 @@ type Options struct {
|
||||||
Seed []string `short:"s" long:"seed" description:"Override which seeds to use." default-mask:"<bitcoin-core DNS seeds>"`
|
Seed []string `short:"s" long:"seed" description:"Override which seeds to use." default-mask:"<bitcoin-core DNS seeds>"`
|
||||||
Concurrency int `short:"c" long:"concurrency" description:"Maximum number of concurrent connections to open." default:"10"`
|
Concurrency int `short:"c" long:"concurrency" description:"Maximum number of concurrent connections to open." default:"10"`
|
||||||
UserAgent string `short:"A" long:"user-agent" description:"Client name to advertise while crawling. Should be in format of '/name:x.y.z/'." default:"/btc-crawl:0.1.1/"`
|
UserAgent string `short:"A" long:"user-agent" description:"Client name to advertise while crawling. Should be in format of '/name:x.y.z/'." default:"/btc-crawl:0.1.1/"`
|
||||||
|
PeerAge time.Duration `long:"peer-age" description:"Ignore discovered peers older than this." default:"24h"`
|
||||||
}
|
}
|
||||||
|
|
||||||
func main() {
|
func main() {
|
||||||
|
@ -40,6 +42,6 @@ func main() {
|
||||||
}
|
}
|
||||||
|
|
||||||
client := NewClient(options.UserAgent)
|
client := NewClient(options.UserAgent)
|
||||||
crawler := NewCrawler(client, seedNodes, options.Concurrency)
|
crawler := NewCrawler(client, seedNodes, options.Concurrency, options.PeerAge)
|
||||||
crawler.Start()
|
crawler.Start()
|
||||||
}
|
}
|
||||||
|
|
11
crawler.go
11
crawler.go
|
@ -14,10 +14,10 @@ type Crawler struct {
|
||||||
results chan []string
|
results chan []string
|
||||||
workers chan struct{}
|
workers chan struct{}
|
||||||
queue []string
|
queue []string
|
||||||
activeSince time.Duration
|
peerAge time.Duration
|
||||||
}
|
}
|
||||||
|
|
||||||
func NewCrawler(client *Client, queue []string, numWorkers int) *Crawler {
|
func NewCrawler(client *Client, queue []string, numWorkers int, peerAge time.Duration) *Crawler {
|
||||||
c := Crawler{
|
c := Crawler{
|
||||||
client: client,
|
client: client,
|
||||||
count: 0,
|
count: 0,
|
||||||
|
@ -25,7 +25,7 @@ func NewCrawler(client *Client, queue []string, numWorkers int) *Crawler {
|
||||||
results: make(chan []string),
|
results: make(chan []string),
|
||||||
workers: make(chan struct{}, numWorkers),
|
workers: make(chan struct{}, numWorkers),
|
||||||
queue: []string{},
|
queue: []string{},
|
||||||
activeSince: time.Hour * -24,
|
peerAge: peerAge,
|
||||||
}
|
}
|
||||||
|
|
||||||
// Prefill the queue
|
// Prefill the queue
|
||||||
|
@ -65,7 +65,7 @@ func (c *Crawler) handleAddress(address string) *[]string {
|
||||||
firstReceived := -1
|
firstReceived := -1
|
||||||
tolerateMessages := 3
|
tolerateMessages := 3
|
||||||
otherMessages := []string{}
|
otherMessages := []string{}
|
||||||
timestampSince := time.Now().Add(c.activeSince)
|
timestampSince := time.Now().Add(-c.peerAge)
|
||||||
|
|
||||||
for {
|
for {
|
||||||
// We can't really tell when we're done receiving peers, so we stop either
|
// We can't really tell when we're done receiving peers, so we stop either
|
||||||
|
@ -81,6 +81,7 @@ func (c *Crawler) handleAddress(address string) *[]string {
|
||||||
case *btcwire.MsgAddr:
|
case *btcwire.MsgAddr:
|
||||||
for _, addr := range tmsg.AddrList {
|
for _, addr := range tmsg.AddrList {
|
||||||
if addr.Timestamp.After(timestampSince) {
|
if addr.Timestamp.After(timestampSince) {
|
||||||
|
// TODO: Move this check to .Start()?
|
||||||
r = append(r, NetAddressKey(addr))
|
r = append(r, NetAddressKey(addr))
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
@ -154,7 +155,9 @@ func (c *Crawler) Start() {
|
||||||
}
|
}
|
||||||
numWorkers -= 1
|
numWorkers -= 1
|
||||||
|
|
||||||
|
if len(r) > 0 {
|
||||||
log.Printf("Added %d new peers of %d returned. Total %d known peers via %d connected.", newAdded, len(r), c.count, numGood)
|
log.Printf("Added %d new peers of %d returned. Total %d known peers via %d connected.", newAdded, len(r), c.count, numGood)
|
||||||
|
}
|
||||||
|
|
||||||
if len(c.queue) == 0 && numWorkers == 0 {
|
if len(c.queue) == 0 && numWorkers == 0 {
|
||||||
log.Printf("Done.")
|
log.Printf("Done.")
|
||||||
|
|
Loading…
Reference in New Issue