diff --git a/cmd/disk-cache.go b/cmd/disk-cache.go index 58abd3ae4..50d0e7b5e 100644 --- a/cmd/disk-cache.go +++ b/cmd/disk-cache.go @@ -71,6 +71,9 @@ type cacheObjects struct { // mutex to protect migration bool migMutex sync.Mutex + // nsMutex namespace lock + nsMutex *nsLockMap + // Object functions pointing to the corresponding functions of backend implementation. NewNSLockFn func(ctx context.Context, bucket, object string) RWLocker GetObjectNInfoFn func(ctx context.Context, bucket, object string, rs *HTTPRangeSpec, h http.Header, lockType LockType, opts ObjectOptions) (gr *GetObjectReader, err error) @@ -566,9 +569,7 @@ func newServerCacheObjects(ctx context.Context, config cache.Config) (CacheObjec exclude: config.Exclude, migrating: migrateSw, migMutex: sync.Mutex{}, - NewNSLockFn: func(ctx context.Context, bucket, object string) RWLocker { - return globalObjectAPI.NewNSLock(ctx, bucket, object) - }, + nsMutex: newNSLock(false), GetObjectInfoFn: func(ctx context.Context, bucket, object string, opts ObjectOptions) (ObjectInfo, error) { return newObjectLayerFn().GetObjectInfo(ctx, bucket, object, opts) }, @@ -589,6 +590,10 @@ func newServerCacheObjects(ctx context.Context, config cache.Config) (CacheObjec return newObjectLayerFn().PutObject(ctx, bucket, object, data, opts) }, } + c.NewNSLockFn = func(ctx context.Context, bucket, object string) RWLocker { + return c.nsMutex.NewNSLock(ctx, nil, bucket, object) + } + if migrateSw { go c.migrateCacheFromV1toV2(ctx) } diff --git a/cmd/gateway-main.go b/cmd/gateway-main.go index 68d13aa52..df4fdb016 100644 --- a/cmd/gateway-main.go +++ b/cmd/gateway-main.go @@ -291,6 +291,11 @@ func StartGateway(ctx *cli.Context, gw Gateway) { // - compression verifyObjectLayerFeatures("gateway "+gatewayName, newObject) + // Disable safe mode operation, after all initialization is over. + globalObjLayerMutex.Lock() + globalSafeMode = false + globalObjLayerMutex.Unlock() + // Prints the formatted startup message once object layer is initialized. if !globalCLIContext.Quiet { mode := globalMinioModeGatewayPrefix + gatewayName @@ -306,11 +311,6 @@ func StartGateway(ctx *cli.Context, gw Gateway) { printGatewayStartupMessage(getAPIEndpoints(), gatewayName) } - // Disable safe mode operation, after all initialization is over. - globalObjLayerMutex.Lock() - globalSafeMode = false - globalObjLayerMutex.Unlock() - // Set uptime time after object layer has initialized. globalBootTime = UTCNow()