From 0ff359ca0e7e1a515dcefb65a79aae3aec03f929 Mon Sep 17 00:00:00 2001 From: Aditya Manthramurthy Date: Mon, 17 Oct 2016 16:38:29 -0700 Subject: [PATCH] Fix early init. problem for notifications (Fixes #2972) (#2977) --- cmd/routers.go | 11 +++++++++++ cmd/server-main.go | 16 ++++++---------- 2 files changed, 17 insertions(+), 10 deletions(-) diff --git a/cmd/routers.go b/cmd/routers.go index 0956837bf..ba54b3694 100644 --- a/cmd/routers.go +++ b/cmd/routers.go @@ -45,6 +45,13 @@ func newObjectLayer(storageDisks []StorageAPI) (ObjectLayer, error) { return nil, err } + // The following actions are performed here, so that any + // requests coming in early in the bootup sequence don't fail + // unexpectedly - e.g. if initEventNotifier was initialized + // after this function completes, an event could be generated + // before the notification system is ready, causing event + // drops or crashes. + // Migrate bucket policy from configDir to .minio.sys/buckets/ err = migrateBucketPolicyConfig(objAPI) if err != nil { @@ -62,6 +69,10 @@ func newObjectLayer(storageDisks []StorageAPI) (ObjectLayer, error) { err = initBucketPolicies(objAPI) fatalIf(err, "Unable to load all bucket policies.") + // Initialize a new event notifier. + err = initEventNotifier(objAPI) + fatalIf(err, "Unable to initialize event notification.") + // Success. return objAPI, nil } diff --git a/cmd/server-main.go b/cmd/server-main.go index 5b17a42f2..123a1cba1 100644 --- a/cmd/server-main.go +++ b/cmd/server-main.go @@ -363,6 +363,12 @@ func serverMain(c *cli.Context) { // Fetch endpoints which we are going to serve from. endPoints := finalizeEndpoints(tls, &apiServer.Server) + // Initialize local server address + globalMinioAddr = getLocalAddress(srvConfig) + + // Initialize S3 Peers inter-node communication + initGlobalS3Peers(disks) + // Start server, automatically configures TLS if certs are available. go func(tls bool) { var lerr error @@ -387,16 +393,6 @@ func serverMain(c *cli.Context) { globalObjectAPI = newObject globalObjLayerMutex.Unlock() - // Initialize local server address - globalMinioAddr = getLocalAddress(srvConfig) - - // Initialize S3 Peers inter-node communication - initGlobalS3Peers(disks) - - // Initialize a new event notifier. - err = initEventNotifier(newObjectLayerFn()) - fatalIf(err, "Unable to initialize event notification.") - // Prints the formatted startup message once object layer is initialized. printStartupMessage(endPoints)