diff --git a/cmd/boulder-ca/main.go b/cmd/boulder-ca/main.go index ce8353fcc..63af4209d 100644 --- a/cmd/boulder-ca/main.go +++ b/cmd/boulder-ca/main.go @@ -7,8 +7,6 @@ package main import ( "github.com/letsencrypt/boulder/Godeps/_workspace/src/github.com/streadway/amqp" - "log" - "time" "github.com/letsencrypt/boulder/ca" "github.com/letsencrypt/boulder/cmd" @@ -26,7 +24,7 @@ func main() { cai, err := ca.NewCertificateAuthorityImpl(auditlogger, c.CA.Server, c.CA.AuthKey, c.CA.Profile) cmd.FailOnError(err, "Failed to create CA impl") - for true { + for { ch := cmd.AmqpChannel(c.AMQP.Server) closeChan := ch.NotifyClose(make(chan *amqp.Error, 1)) @@ -38,17 +36,7 @@ func main() { cas, err := rpc.NewCertificateAuthorityServer(c.AMQP.CA.Server, ch, cai) cmd.FailOnError(err, "Unable to create CA server") - forever := make(chan bool) - go func() { - for err := range closeChan { - log.Printf(" [!] AMQP Channel closed: [%s]", err) - time.Sleep(time.Second*10) - log.Printf(" [!] Reconnecting to AMQP...") - close(forever) - return - } - }() - cmd.MaybeRunForever(cas, forever) + cmd.RunUntilSignaled(auditlogger, cas, closeChan) } } diff --git a/cmd/boulder-ra/main.go b/cmd/boulder-ra/main.go index f916ddfc5..e94174406 100644 --- a/cmd/boulder-ra/main.go +++ b/cmd/boulder-ra/main.go @@ -7,8 +7,6 @@ package main import ( "github.com/letsencrypt/boulder/Godeps/_workspace/src/github.com/streadway/amqp" - "log" - "time" "github.com/letsencrypt/boulder/cmd" blog "github.com/letsencrypt/boulder/log" @@ -45,17 +43,7 @@ func main() { ras, err := rpc.NewRegistrationAuthorityServer(c.AMQP.RA.Server, ch, &rai) cmd.FailOnError(err, "Unable to create RA server") - forever := make(chan bool) - go func() { - for err := range closeChan { - log.Printf(" [!] AMQP Channel closed: [%s]", err) - time.Sleep(time.Second*10) - log.Printf(" [!] Reconnecting to AMQP...") - close(forever) - return - } - }() - cmd.MaybeRunForever(ras, forever) + cmd.RunUntilSignaled(auditlogger, ras, closeChan) } } diff --git a/cmd/boulder-sa/main.go b/cmd/boulder-sa/main.go index 846aec265..15486c235 100644 --- a/cmd/boulder-sa/main.go +++ b/cmd/boulder-sa/main.go @@ -7,8 +7,6 @@ package main import ( "github.com/letsencrypt/boulder/Godeps/_workspace/src/github.com/streadway/amqp" - "log" - "time" // Load both drivers to allow configuring either _ "github.com/letsencrypt/boulder/Godeps/_workspace/src/github.com/go-sql-driver/mysql" @@ -23,10 +21,10 @@ func main() { app := cmd.NewAppShell("boulder-sa") app.Action = func(c cmd.Config) { // Set up logging - logger, err := blog.Dial(c.Syslog.Network, c.Syslog.Server, c.Syslog.Tag) + auditlogger, err := blog.Dial(c.Syslog.Network, c.Syslog.Server, c.Syslog.Tag) cmd.FailOnError(err, "Could not connect to Syslog") - sai, err := sa.NewSQLStorageAuthority(logger, c.SA.DBDriver, c.SA.DBName) + sai, err := sa.NewSQLStorageAuthority(auditlogger, c.SA.DBDriver, c.SA.DBName) cmd.FailOnError(err, "Failed to create SA impl") for true { @@ -35,17 +33,7 @@ func main() { sas := rpc.NewStorageAuthorityServer(c.AMQP.SA.Server, ch, sai) - forever := make(chan bool) - go func() { - for err := range closeChan { - log.Printf(" [!] AMQP Channel closed: [%s]", err) - time.Sleep(time.Second*10) - log.Printf(" [!] Reconnecting to AMQP...") - close(forever) - return - } - }() - cmd.MaybeRunForever(sas, forever) + cmd.RunUntilSignaled(auditlogger, sas, closeChan) } } diff --git a/cmd/boulder-va/main.go b/cmd/boulder-va/main.go index 517b27261..cae2ffdf5 100644 --- a/cmd/boulder-va/main.go +++ b/cmd/boulder-va/main.go @@ -7,8 +7,6 @@ package main import ( "github.com/letsencrypt/boulder/Godeps/_workspace/src/github.com/streadway/amqp" - "log" - "time" "github.com/letsencrypt/boulder/cmd" blog "github.com/letsencrypt/boulder/log" @@ -37,17 +35,7 @@ func main() { vas, err := rpc.NewValidationAuthorityServer(c.AMQP.VA.Server, ch, &vai) cmd.FailOnError(err, "Unable to create VA server") - forever := make(chan bool) - go func() { - for err := range closeChan { - log.Printf(" [!] AMQP Channel closed: [%s]", err) - time.Sleep(time.Second*10) - log.Printf(" [!] Reconnecting to AMQP...") - close(forever) - return - } - }() - cmd.MaybeRunForever(vas, forever) + cmd.RunUntilSignaled(auditlogger, vas, closeChan) } } diff --git a/cmd/boulder-wfe/main.go b/cmd/boulder-wfe/main.go index 1363b1a6d..8fc9ef6c3 100644 --- a/cmd/boulder-wfe/main.go +++ b/cmd/boulder-wfe/main.go @@ -10,7 +10,6 @@ import ( "net/http" "github.com/letsencrypt/boulder/Godeps/_workspace/src/github.com/streadway/amqp" - "log" "time" "github.com/letsencrypt/boulder/cmd" @@ -50,12 +49,12 @@ func main() { // with new RA and SA rpc clients. for true { for err := range closeChan { - log.Printf(" [!] AMQP Channel closed: [%s]", err) - time.Sleep(time.Second*10) + auditlogger.Warning(fmt.Sprintf("AMQP Channel closed, will reconnect in 5 seconds: [%s]", err)) + time.Sleep(time.Second*5) rac, sac, closeChan = setupWFE(c, auditlogger) wfe.RA = &rac wfe.SA = &sac - log.Printf(" [!] Reconnected to AMQP") + auditlogger.Warning("Reconnected to AMQP") } } }() diff --git a/cmd/shell.go b/cmd/shell.go index 27695a8e9..1fb6168f2 100644 --- a/cmd/shell.go +++ b/cmd/shell.go @@ -26,9 +26,11 @@ import ( "fmt" "io/ioutil" "os" + "time" "github.com/letsencrypt/boulder/Godeps/_workspace/src/github.com/codegangsta/cli" "github.com/letsencrypt/boulder/Godeps/_workspace/src/github.com/streadway/amqp" + blog "github.com/letsencrypt/boulder/log" "github.com/letsencrypt/boulder/rpc" ) @@ -142,9 +144,15 @@ func RunForever(server *rpc.AmqpRPCServer) { <-forever } -// Start the server and maybe wait around forever... -func MaybeRunForever(server *rpc.AmqpRPCServer, forever chan bool) { +// Start the server and run until we get something on closeChan +func RunUntilSignaled(logger *blog.AuditLogger, server *rpc.AmqpRPCServer, closeChan chan *amqp.Error) { server.Start() fmt.Fprintf(os.Stderr, "Server running...\n") - <-forever + + // Block until channel closes + err := <- closeChan + + logger.Warning(fmt.Sprintf("AMQP Channel closed, will reconnect in 5 seconds: [%s]", err)) + time.Sleep(time.Second*5) + logger.Warning("Reconnecting to AMQP...") }