From d6af3c1237d7f5f2c27585aed0ff2f4bcd0b09e3 Mon Sep 17 00:00:00 2001 From: Harshavardhana Date: Mon, 3 Dec 2018 00:32:14 -0800 Subject: [PATCH] Add bucket notification support for NAS gateway (#6908) Fixes #6885 --- cmd/gateway-main.go | 40 ++++++++++++++++++++++++---------- cmd/gateway-startup-msg.go | 1 + cmd/gateway/nas/gateway-nas.go | 14 ++---------- cmd/setup-type.go | 5 +++++ 4 files changed, 36 insertions(+), 24 deletions(-) diff --git a/cmd/gateway-main.go b/cmd/gateway-main.go index 03cc28456..d2804d0f5 100644 --- a/cmd/gateway-main.go +++ b/cmd/gateway-main.go @@ -196,6 +196,15 @@ func StartGateway(ctx *cli.Context, gw Gateway) { // Add API router. registerAPIRouter(router) + // Dummy endpoint representing gateway instance. + globalEndpoints = []Endpoint{{ + URL: &url.URL{Path: "/minio/gateway"}, + IsLocal: true, + }} + + // Initialize Admin Peers. + initGlobalAdminPeers(globalEndpoints) + var getCert certs.GetCertificateFunc if globalTLSCerts != nil { getCert = globalTLSCerts.GetCertificate @@ -221,20 +230,24 @@ func StartGateway(ctx *cli.Context, gw Gateway) { // Create a new config system. globalConfigSys = NewConfigSys() + if globalEtcdClient != nil { + // Initialize server config. + _ = globalConfigSys.Init(newObject) + } else { + // Initialize server config. + srvCfg := newServerConfig() - // Initialize server config. - srvCfg := newServerConfig() + // Override any values from ENVs. + srvCfg.loadFromEnvs() - // Override any values from ENVs. - srvCfg.loadFromEnvs() + // Load values to cached global values. + srvCfg.loadToCachedConfigs() - // Load values to cached global values. - srvCfg.loadToCachedConfigs() - - // hold the mutex lock before a new config is assigned. - globalServerConfigMu.Lock() - globalServerConfig = srvCfg - globalServerConfigMu.Unlock() + // hold the mutex lock before a new config is assigned. + globalServerConfigMu.Lock() + globalServerConfig = srvCfg + globalServerConfigMu.Unlock() + } // Load logger subsystem loadLoggers() @@ -257,7 +270,7 @@ func StartGateway(ctx *cli.Context, gw Gateway) { globalIAMSys = NewIAMSys() if globalEtcdClient != nil { // Initialize IAM sys. - go globalIAMSys.Init(newObject) + _ = globalIAMSys.Init(newObject) } // Create new policy system. @@ -268,6 +281,9 @@ func StartGateway(ctx *cli.Context, gw Gateway) { // Create new notification system. globalNotificationSys = NewNotificationSys(globalServerConfig, globalEndpoints) + if globalEtcdClient != nil { + _ = globalNotificationSys.Init(newObject) + } // Once endpoints are finalized, initialize the new object api. globalObjLayerMutex.Lock() diff --git a/cmd/gateway-startup-msg.go b/cmd/gateway-startup-msg.go index 9502a2fcc..eb7ee97b5 100644 --- a/cmd/gateway-startup-msg.go +++ b/cmd/gateway-startup-msg.go @@ -61,6 +61,7 @@ func printGatewayCommonMsg(apiEndpoints []string) { logger.StartupMessage(colorBlue("AccessKey: ") + colorBold(fmt.Sprintf("%s ", cred.AccessKey))) logger.StartupMessage(colorBlue("SecretKey: ") + colorBold(fmt.Sprintf("%s ", cred.SecretKey))) } + printEventNotifiers() if globalIsBrowserEnabled { logger.StartupMessage(colorBlue("\nBrowser Access:")) diff --git a/cmd/gateway/nas/gateway-nas.go b/cmd/gateway/nas/gateway-nas.go index 2cb794ae1..03b8c23a0 100644 --- a/cmd/gateway/nas/gateway-nas.go +++ b/cmd/gateway/nas/gateway-nas.go @@ -108,7 +108,7 @@ func (g *NAS) NewGatewayLayer(creds auth.Credentials) (minio.ObjectLayer, error) if err != nil { return nil, err } - return &nasObjects{newObject.(*minio.FSObjects)}, nil + return &nasObjects{newObject}, nil } // Production - nas gateway is production ready. @@ -118,15 +118,5 @@ func (g *NAS) Production() bool { // nasObjects implements gateway for Minio and S3 compatible object storage servers. type nasObjects struct { - *minio.FSObjects -} - -// IsNotificationSupported returns whether notifications are applicable for this layer. -func (l *nasObjects) IsNotificationSupported() bool { - return false -} - -// IsCompressionSupported returns whether compression is applicable for this layer. -func (l *nasObjects) IsCompressionSupported() bool { - return false + minio.ObjectLayer } diff --git a/cmd/setup-type.go b/cmd/setup-type.go index 96ba2a4cd..47a12afdc 100644 --- a/cmd/setup-type.go +++ b/cmd/setup-type.go @@ -28,6 +28,9 @@ const ( // DistXLSetupType - Distributed XL setup type enum. DistXLSetupType + + // GatewaySetupType - gateway setup type enum. + GatewaySetupType ) func (setupType SetupType) String() string { @@ -38,6 +41,8 @@ func (setupType SetupType) String() string { return globalMinioModeXL case DistXLSetupType: return globalMinioModeDistXL + case GatewaySetupType: + return globalMinioModeGatewayPrefix } return ""