func main() { cf_debug_server.AddFlags(flag.CommandLine) cf_lager.AddFlags(flag.CommandLine) etcdFlags := AddETCDFlags(flag.CommandLine) flag.Parse() cf_http.Initialize(*communicationTimeout) logger, reconfigurableSink := cf_lager.New("bbs") logger.Info("starting") initializeDropsonde(logger) etcdOptions, err := etcdFlags.Validate() if err != nil { logger.Fatal("etcd-validation-failed", err) } var etcdClient *etcdclient.Client if etcdOptions.IsSSL { etcdClient, err = etcdclient.NewTLSClient(etcdOptions.ClusterUrls, etcdOptions.CertFile, etcdOptions.KeyFile, etcdOptions.CAFile) if err != nil { logger.Fatal("failed-to-construct-etcd-tls-client", err) } } else { etcdClient = etcdclient.NewClient(etcdOptions.ClusterUrls) } etcdClient.SetConsistency(etcdclient.STRONG_CONSISTENCY) err = validateAuctioneerFlag() if err != nil { logger.Fatal("auctioneer-address-validation-failed", err) } auctioneerClient := auctionhandlers.NewClient(*auctioneerAddress) consulSession := initializeConsul(logger) consulDB := consuldb.NewConsul(consulSession) cellClient := cellhandlers.NewClient() db := etcddb.NewETCD(etcdClient, auctioneerClient, cellClient, consulDB, clock.NewClock()) hub := events.NewHub() watcher := watcher.NewWatcher( logger, db, hub, clock.NewClock(), bbsWatchRetryWaitDuration, ) handler := handlers.New(logger, db, hub) members := grouper.Members{ {"watcher", watcher}, {"server", http_server.New(*serverAddress, handler)}, {"hub-closer", closeHub(logger.Session("hub-closer"), hub)}, } if dbgAddr := cf_debug_server.DebugAddress(flag.CommandLine); dbgAddr != "" { members = append(grouper.Members{ {"debug-server", cf_debug_server.Runner(dbgAddr, reconfigurableSink)}, }, members...) } group := grouper.NewOrdered(os.Interrupt, members) monitor := ifrit.Invoke(sigmon.New(group)) logger.Info("started") err = <-monitor.Wait() if err != nil { logger.Error("exited-with-failure", err) os.Exit(1) } logger.Info("exited") }
func main() { cf_debug_server.AddFlags(flag.CommandLine) cf_lager.AddFlags(flag.CommandLine) etcdFlags := AddETCDFlags(flag.CommandLine) encryptionFlags := encryption.AddEncryptionFlags(flag.CommandLine) flag.Parse() cf_http.Initialize(*communicationTimeout) logger, reconfigurableSink := cf_lager.New("bbs") logger.Info("starting") initializeDropsonde(logger) clock := clock.NewClock() consulClient, err := consuladapter.NewClient(*consulCluster) if err != nil { logger.Fatal("new-consul-client-failed", err) } sessionManager := consuladapter.NewSessionManager(consulClient) serviceClient := initializeServiceClient(logger, clock, consulClient, sessionManager) cbWorkPool := taskworkpool.New(logger, *taskCallBackWorkers, taskworkpool.HandleCompletedTask) keyManager, err := encryptionFlags.Validate() if err != nil { logger.Fatal("cannot-setup-encryption", err) } cryptor := encryption.NewCryptor(keyManager, rand.Reader) etcdOptions, err := etcdFlags.Validate() if err != nil { logger.Fatal("etcd-validation-failed", err) } storeClient := initializeEtcdStoreClient(logger, etcdOptions) db := initializeEtcdDB(logger, cryptor, storeClient, cbWorkPool, serviceClient) migrationsDone := make(chan struct{}) maintainer := initializeLockMaintainer(logger, serviceClient) migrationManager := migration.NewManager(logger, db, cryptor, storeClient, migrations.Migrations, migrationsDone, clock, ) encryptor := encryptor.New(logger, db, keyManager, cryptor, storeClient, clock) hub := events.NewHub() watcher := watcher.NewWatcher( logger, db, hub, clock, bbsWatchRetryWaitDuration, ) handler := handlers.New(logger, db, hub, migrationsDone) metricsNotifier := metrics.NewPeriodicMetronNotifier( logger, *reportInterval, etcdOptions, clock, ) var server ifrit.Runner if *requireSSL { tlsConfig, err := cf_http.NewTLSConfig(*certFile, *keyFile, *caFile) if err != nil { logger.Fatal("tls-configuration-failed", err) } server = http_server.NewTLSServer(*listenAddress, handler, tlsConfig) } else { server = http_server.New(*listenAddress, handler) } members := grouper.Members{ {"lock-maintainer", maintainer}, {"workPool", cbWorkPool}, {"server", server}, {"migration-manager", migrationManager}, {"encryptor", encryptor}, {"watcher", watcher}, {"hub-closer", closeHub(logger.Session("hub-closer"), hub)}, {"metrics", *metricsNotifier}, } if dbgAddr := cf_debug_server.DebugAddress(flag.CommandLine); dbgAddr != "" { members = append(grouper.Members{ {"debug-server", cf_debug_server.Runner(dbgAddr, reconfigurableSink)}, }, members...) } group := grouper.NewOrdered(os.Interrupt, members) monitor := ifrit.Invoke(sigmon.New(group)) logger.Info("started") err = <-monitor.Wait() if err != nil { logger.Error("exited-with-failure", err) os.Exit(1) } logger.Info("exited") }
BeforeEach(func() { db = new(fakes.FakeEventDB) hub = new(eventfakes.FakeHub) clock = fakeclock.NewFakeClock(time.Now()) logger := lagertest.NewTestLogger("test") desiredLRPStop = make(chan bool, 1) desiredLRPErrors = make(chan error) actualLRPStop = make(chan bool, 1) actualLRPErrors = make(chan error) db.WatchForDesiredLRPChangesReturns(desiredLRPStop, desiredLRPErrors) db.WatchForActualLRPChangesReturns(actualLRPStop, actualLRPErrors) bbsWatcher = watcher.NewWatcher(logger, db, hub, clock, retryWaitDuration) }) AfterEach(func() { process.Signal(os.Interrupt) Eventually(process.Wait()).Should(Receive()) }) Describe("starting", func() { Context("when the hub initially reports no subscribers", func() { BeforeEach(func() { hub.RegisterCallbackStub = func(cb func(int)) { cb(0) } process = ifrit.Invoke(bbsWatcher) })