From 954142a98fbf3e2645b8917bcfe58d2ff12c44fd Mon Sep 17 00:00:00 2001 From: Harshavardhana Date: Sat, 21 Apr 2018 20:51:53 -0700 Subject: [PATCH] Cleanup and make a safer code (#5794) --- cmd/admin-handlers.go | 16 ++++++++-------- cmd/admin-rpc-client.go | 7 ++++++- cmd/admin-rpc-server.go | 9 ++++++++- cmd/lockinfo-handlers.go | 7 ------- cmd/lockinfo-handlers_test.go | 6 +++++- 5 files changed, 27 insertions(+), 18 deletions(-) diff --git a/cmd/admin-handlers.go b/cmd/admin-handlers.go index c1703b680..a463ba40a 100644 --- a/cmd/admin-handlers.go +++ b/cmd/admin-handlers.go @@ -356,6 +356,13 @@ func (a adminAPIHandlers) ListLocksHandler(w http.ResponseWriter, r *http.Reques func (a adminAPIHandlers) ClearLocksHandler(w http.ResponseWriter, r *http.Request) { ctx := newContext(r, "ClearLocks") + // Get object layer instance. + objLayer := newObjectLayerFn() + if objLayer == nil { + writeErrorResponseJSON(w, ErrServerNotInitialized, r.URL) + return + } + adminAPIErr := checkAdminRequestAuthType(r, globalServerConfig.GetRegion()) if adminAPIErr != ErrNone { writeErrorResponseJSON(w, adminAPIErr, r.URL) @@ -387,7 +394,7 @@ func (a adminAPIHandlers) ClearLocksHandler(w http.ResponseWriter, r *http.Reque return } - newObjectLayerFn().ClearLocks(ctx, volLocks) + objLayer.ClearLocks(ctx, volLocks) // Reply with list of locks cleared, as json. writeSuccessResponseJSON(w, jsonBytes) @@ -561,7 +568,6 @@ func (a adminAPIHandlers) HealHandler(w http.ResponseWriter, r *http.Request) { // GetConfigHandler - GET /minio/admin/v1/config // Get config.json of this minio setup. func (a adminAPIHandlers) GetConfigHandler(w http.ResponseWriter, r *http.Request) { - // Validate request signature. adminAPIErr := checkAdminRequestAuthType(r, globalServerConfig.GetRegion()) if adminAPIErr != ErrNone { @@ -569,12 +575,6 @@ func (a adminAPIHandlers) GetConfigHandler(w http.ResponseWriter, r *http.Reques return } - // check if objectLayer is initialized, if not return. - if newObjectLayerFn() == nil { - writeErrorResponseJSON(w, ErrServerNotInitialized, r.URL) - return - } - // Take a read lock on minio/config.json. NB minio is a // reserved bucket name and wouldn't conflict with normal // object operations. diff --git a/cmd/admin-rpc-client.go b/cmd/admin-rpc-client.go index 98029f908..b6b5affc9 100644 --- a/cmd/admin-rpc-client.go +++ b/cmd/admin-rpc-client.go @@ -89,7 +89,12 @@ func (lc localAdminClient) ReInitFormat(dryRun bool) error { // ListLocks - Fetches lock information from local lock instrumentation. func (lc localAdminClient) ListLocks(bucket, prefix string, duration time.Duration) ([]VolumeLockInfo, error) { - return listLocksInfo(bucket, prefix, duration), nil + // check if objectLayer is initialized, if not return. + objectAPI := newObjectLayerFn() + if objectAPI == nil { + return nil, errServerNotInitialized + } + return objectAPI.ListLocks(context.Background(), bucket, prefix, duration) } func (rc remoteAdminClient) SignalService(s serviceSignal) (err error) { diff --git a/cmd/admin-rpc-server.go b/cmd/admin-rpc-server.go index 7980b6e51..f634d12b8 100644 --- a/cmd/admin-rpc-server.go +++ b/cmd/admin-rpc-server.go @@ -102,7 +102,14 @@ func (s *adminCmd) ListLocks(query *ListLocksQuery, reply *ListLocksReply) error if err := query.IsAuthenticated(); err != nil { return err } - volLocks := listLocksInfo(query.Bucket, query.Prefix, query.Duration) + objectAPI := newObjectLayerFn() + if objectAPI == nil { + return errServerNotInitialized + } + volLocks, err := objectAPI.ListLocks(context.Background(), query.Bucket, query.Prefix, query.Duration) + if err != nil { + return err + } *reply = ListLocksReply{VolLocks: volLocks} return nil } diff --git a/cmd/lockinfo-handlers.go b/cmd/lockinfo-handlers.go index 16e1db0ab..dc17fad20 100644 --- a/cmd/lockinfo-handlers.go +++ b/cmd/lockinfo-handlers.go @@ -17,7 +17,6 @@ package cmd import ( - "context" "time" ) @@ -66,9 +65,3 @@ type OpsLockState struct { Status statusType `json:"status"` // Status can be Running/Ready/Blocked. Since time.Time `json:"since"` // Time when the lock was initially held. } - -// listLocksInfo - Fetches locks held on bucket, matching prefix held for longer than duration. -func listLocksInfo(bucket, prefix string, duration time.Duration) []VolumeLockInfo { - locksInfo, _ := newObjectLayerFn().ListLocks(context.Background(), bucket, prefix, duration) - return locksInfo -} diff --git a/cmd/lockinfo-handlers_test.go b/cmd/lockinfo-handlers_test.go index ef0fa8dd9..0c3b306c5 100644 --- a/cmd/lockinfo-handlers_test.go +++ b/cmd/lockinfo-handlers_test.go @@ -17,6 +17,7 @@ package cmd import ( + "context" "fmt" "os" "testing" @@ -99,7 +100,10 @@ func TestListLocksInfo(t *testing.T) { } for i, test := range testCases { - actual := listLocksInfo(test.bucket, test.prefix, test.duration) + actual, err := objAPI.ListLocks(context.Background(), test.bucket, test.prefix, test.duration) + if err != nil { + t.Errorf("Test %d - Expected success, got %s", i+1, err) + } if len(actual) != test.numLocks { t.Errorf("Test %d - Expected %d locks but observed %d locks", i+1, test.numLocks, len(actual))