Proper shutdown.
This commit is contained in:
parent
e94164c692
commit
81e7762d1d
16
cmd.go
16
cmd.go
|
@ -6,6 +6,7 @@ import (
|
||||||
"fmt"
|
"fmt"
|
||||||
"os"
|
"os"
|
||||||
"os/signal"
|
"os/signal"
|
||||||
|
"syscall"
|
||||||
"time"
|
"time"
|
||||||
|
|
||||||
"github.com/alexcesaro/log"
|
"github.com/alexcesaro/log"
|
||||||
|
@ -94,24 +95,22 @@ func main() {
|
||||||
return
|
return
|
||||||
}
|
}
|
||||||
|
|
||||||
isActive := true
|
resultChan := make(chan Result)
|
||||||
|
|
||||||
// Construct interrupt handler
|
// Construct interrupt handler
|
||||||
sig := make(chan os.Signal, 1)
|
sig := make(chan os.Signal, 1)
|
||||||
signal.Notify(sig, os.Interrupt)
|
signal.Notify(sig, os.Interrupt, syscall.SIGTERM)
|
||||||
go func() {
|
go func() {
|
||||||
<-sig // Wait for ^C signal
|
<-sig // Wait for ^C signal
|
||||||
logger.Warningf("Interrupt signal detected, shutting down gracefully by waiting for active workers to finish.")
|
logger.Warningf("Interrupt signal detected, shutting down gracefully by waiting for active workers to finish.")
|
||||||
crawler.Shutdown()
|
crawler.Shutdown()
|
||||||
|
|
||||||
// FIXME: This isn't working?
|
|
||||||
<-sig // Hurry up?
|
<-sig // Hurry up?
|
||||||
logger.Warningf("Super-interrupt. Abandoning in-progress workers.")
|
logger.Warningf("Urgent interrupt. Abandoning in-progress workers.")
|
||||||
isActive = false
|
close(resultChan) // FIXME: Could this cause stuff to asplode?
|
||||||
}()
|
}()
|
||||||
|
|
||||||
// Launch crawler
|
// Launch crawler
|
||||||
resultChan := make(chan Result)
|
|
||||||
go crawler.Run(resultChan, options.Concurrency)
|
go crawler.Run(resultChan, options.Concurrency)
|
||||||
logger.Infof("Crawler started with %d concurrency limit.", options.Concurrency)
|
logger.Infof("Crawler started with %d concurrency limit.", options.Concurrency)
|
||||||
|
|
||||||
|
@ -139,11 +138,6 @@ func main() {
|
||||||
logger.Infof("StopAfter count reached, shutting down gracefully.")
|
logger.Infof("StopAfter count reached, shutting down gracefully.")
|
||||||
crawler.Shutdown()
|
crawler.Shutdown()
|
||||||
}
|
}
|
||||||
|
|
||||||
if !isActive {
|
|
||||||
// No time to wait, finish writing and quit.
|
|
||||||
break
|
|
||||||
}
|
|
||||||
}
|
}
|
||||||
|
|
||||||
w.Write([]byte("]")) // No error checking here because it's too late to care.
|
w.Write([]byte("]")) // No error checking here because it's too late to care.
|
||||||
|
|
|
@ -31,6 +31,7 @@ func NewCrawler(client *Client, seeds []string, peerAge time.Duration) *Crawler
|
||||||
client: client,
|
client: client,
|
||||||
seenFilter: map[string]bool{},
|
seenFilter: map[string]bool{},
|
||||||
peerAge: peerAge,
|
peerAge: peerAge,
|
||||||
|
shutdown: make(chan struct{}, 1),
|
||||||
}
|
}
|
||||||
filter := func(address string) *string {
|
filter := func(address string) *string {
|
||||||
return c.filter(address)
|
return c.filter(address)
|
||||||
|
@ -187,6 +188,7 @@ func (c *Crawler) Run(resultChan chan<- Result, numWorkers int) {
|
||||||
<-workerChan
|
<-workerChan
|
||||||
|
|
||||||
case <-c.shutdown:
|
case <-c.shutdown:
|
||||||
|
logger.Infof("Shutting down.")
|
||||||
isActive = false
|
isActive = false
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
Loading…
Reference in New Issue