diff --git a/cmd/admin-lock-clear.go b/cmd/admin-lock-clear.go deleted file mode 100644 index 3ac9db9b..00000000 --- a/cmd/admin-lock-clear.go +++ /dev/null @@ -1,153 +0,0 @@ -/* - * Minio Client (C) 2016 Minio, Inc. - * - * Licensed under the Apache License, Version 2.0 (the "License"); - * you may not use this file except in compliance with the License. - * You may obtain a copy of the License at - * - * http://www.apache.org/licenses/LICENSE-2.0 - * - * Unless required by applicable law or agreed to in writing, software - * distributed under the License is distributed on an "AS IS" BASIS, - * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. - * See the License for the specific language governing permissions and - * limitations under the License. - */ - -package cmd - -import ( - "encoding/json" - "fmt" - "path/filepath" - "time" - - "github.com/minio/cli" - "github.com/minio/mc/pkg/probe" - "github.com/minio/minio/pkg/madmin" -) - -var ( - adminLockClearFlags = []cli.Flag{ - cli.StringFlag{ - Name: "duration, d", - Usage: "Only clear locks held for longer than NN[h|m|s]", - Value: "0s", - }, - cli.BoolFlag{ - Name: "force", - Usage: "Force a clear lock operation", - }, - } -) - -var adminLockClearCmd = cli.Command{ - Name: "clear", - Usage: "Clear locks held in a given Minio server", - Before: setGlobalsFromContext, - Action: mainAdminLockClear, - Flags: append(adminLockClearFlags, globalFlags...), - CustomHelpTemplate: `NAME: - {{.HelpName}} - {{.Usage}} - -USAGE: - {{.HelpName}} [FLAGS] TARGET - -FLAGS: - {{range .VisibleFlags}}{{.}} - {{end}} -EXAMPLES: - 1. Clear all locks held on 'testbucket' in a Minio server with alias 'play'. - $ {{.HelpName}} --force play/testbucket - - 2. Clear all 'testbucket' locks older than 15 minutes. - $ {{.HelpName}} --force --duration 15m play/testbucket/ - - 3. Clear all locks held on all objects under prefix 'dir'. - $ {{.HelpName}} --force play/testbucket/dir/ - -`, -} - -// lockClearMessage container to hold locks information. -type lockClearMessage struct { - Status string `json:"status"` - madmin.VolumeLockInfo -} - -// String colorized service status message. -func (u lockClearMessage) String() string { - msg := fmt.Sprintf("%s/%s (LocksOnObject: %d, locksAcquiredOnObject: %d, totalBlockLocks:%d): ", - u.Bucket, - u.Object, - u.LocksOnObject, - u.LocksAcquiredOnObject, - u.TotalBlockedLocks) - for _, detail := range u.LockDetailsOnObject { - msg += fmt.Sprintf(" %+v", detail) - } - msg += "\n" - return msg -} - -// JSON jsonified service status Message message. -func (u lockClearMessage) JSON() string { - u.Status = "success" - statusJSONBytes, e := json.Marshal(u) - fatalIf(probe.NewError(e), "Unable to marshal into JSON.") - - return string(statusJSONBytes) -} - -// checkAdminLockClearSyntax - validate all the passed arguments -func checkAdminLockClearSyntax(ctx *cli.Context) { - if len(ctx.Args()) == 0 || len(ctx.Args()) > 2 { - cli.ShowCommandHelpAndExit(ctx, "clear", 1) - } - - // Check if a bucket is specified. - aliasedURL := filepath.ToSlash(ctx.Args().Get(0)) - splits := splitStr(aliasedURL, "/", 3) - if splits[1] == "" { - fatalIf(errBucketNotSpecified().Trace(aliasedURL), "Cannot clear locks.") - } - - if isForce := ctx.Bool("force"); isForce { - return - } - - fatalIf(errDummy().Trace(), - "Clearing locks requires --force flag. This operation is "+ - "*IRREVERSIBLE*. Please review carefully before"+ - " performing this *DANGEROUS* operation.") -} - -func mainAdminLockClear(ctx *cli.Context) error { - - checkAdminLockClearSyntax(ctx) - - // Get the alias parameter from cli - args := ctx.Args() - aliasedURL := args.Get(0) - - // Parse duration flag - duration, e := time.ParseDuration(ctx.String("duration")) - fatalIf(probe.NewError(e), "Unable to parse the passed duration flag.") - - // Create a new Minio Admin Client - client, err := newAdminClient(aliasedURL) - fatalIf(err, "Cannot get a configured admin connection.") - - aliasedURL = filepath.ToSlash(aliasedURL) - splits := splitStr(aliasedURL, "/", 3) - - // Clear locks related to a specified pair of bucket and prefix - locksInfo, e := client.ClearLocks(splits[1], splits[2], duration) - fatalIf(probe.NewError(e), "Cannot clear the specified locks.") - - for _, l := range locksInfo { - printMsg(lockClearMessage{VolumeLockInfo: l}) - } - - return nil -} diff --git a/cmd/admin-lock-list.go b/cmd/admin-lock-list.go deleted file mode 100644 index 8b3701ce..00000000 --- a/cmd/admin-lock-list.go +++ /dev/null @@ -1,140 +0,0 @@ -/* - * Minio Client (C) 2016 Minio, Inc. - * - * Licensed under the Apache License, Version 2.0 (the "License"); - * you may not use this file except in compliance with the License. - * You may obtain a copy of the License at - * - * http://www.apache.org/licenses/LICENSE-2.0 - * - * Unless required by applicable law or agreed to in writing, software - * distributed under the License is distributed on an "AS IS" BASIS, - * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. - * See the License for the specific language governing permissions and - * limitations under the License. - */ - -package cmd - -import ( - "encoding/json" - "fmt" - "path/filepath" - "time" - - "github.com/minio/cli" - "github.com/minio/mc/pkg/probe" - "github.com/minio/minio/pkg/madmin" -) - -var ( - adminLockListFlags = []cli.Flag{ - cli.StringFlag{ - Name: "duration, d", - Usage: "Only show locks that are held for longer than NN[h|m|s]", - Value: "24h", - }, - } -) - -var adminLockListCmd = cli.Command{ - Name: "list", - Usage: "List locks held in a given Minio server", - Action: mainAdminLockList, - Before: setGlobalsFromContext, - Flags: append(adminLockListFlags, globalFlags...), - CustomHelpTemplate: `NAME: - {{.HelpName}} - {{.Usage}} - -USAGE: - {{.HelpName}} [FLAGS] TARGET - -FLAGS: - {{range .VisibleFlags}}{{.}} - {{end}} -EXAMPLES: - 1. List locks held on 'testbucket' in a Minio server with alias 'play'. - $ {{.HelpName}} play/testbucket/ - - 2. List locks held on 'testbucket' for more than 15 minutes. - $ {{.HelpName}} --duration 15m play/testbucket/ - - 3. List locks held on all objects under prefix 'dir'. - $ {{.HelpName}} play/testbucket/dir/ - -`, -} - -// lockListMessage container to hold locks information. -type lockListMessage struct { - Status string `json:"status"` - madmin.VolumeLockInfo -} - -// String colorized service status message. -func (u lockListMessage) String() string { - msg := fmt.Sprintf("%s/%s (LocksOnObject: %d, locksAcquiredOnObject: %d, totalBlockLocks:%d): ", - u.Bucket, - u.Object, - u.LocksOnObject, - u.LocksAcquiredOnObject, - u.TotalBlockedLocks) - for _, detail := range u.LockDetailsOnObject { - msg += fmt.Sprintf(" %+v", detail) - } - msg += "\n" - return msg -} - -// JSON jsonified service status Message message. -func (u lockListMessage) JSON() string { - u.Status = "success" - statusJSONBytes, e := json.Marshal(u) - fatalIf(probe.NewError(e), "Unable to marshal into JSON.") - - return string(statusJSONBytes) -} - -// checkAdminLockListSyntax - validate all the passed arguments -func checkAdminLockListSyntax(ctx *cli.Context) { - if len(ctx.Args()) == 0 || len(ctx.Args()) > 2 { - cli.ShowCommandHelpAndExit(ctx, "list", 1) // last argument is exit code - } - - // Check if a bucket is specified. - aliasedURL := filepath.ToSlash(ctx.Args().Get(0)) - splits := splitStr(aliasedURL, "/", 3) - if splits[1] == "" { - fatalIf(errBucketNotSpecified().Trace(aliasedURL), "Cannot list locks.") - } -} - -func mainAdminLockList(ctx *cli.Context) error { - - checkAdminLockListSyntax(ctx) - - // Get the alias parameter from cli - args := ctx.Args() - aliasedURL := args.Get(0) - - // Parse duration flag - duration, e := time.ParseDuration(ctx.String("duration")) - fatalIf(probe.NewError(e), "Unable to parse the passed duration flag.") - - // Create a new Minio Admin Client - client, err := newAdminClient(aliasedURL) - fatalIf(err, "Cannot get a configured admin connection.") - - aliasedURL = filepath.ToSlash(aliasedURL) - splits := splitStr(aliasedURL, "/", 3) - - // Fetch the lock info related to a specified pair of bucket and prefix - locksInfo, e := client.ListLocks(splits[1], splits[2], duration) - fatalIf(probe.NewError(e), "Cannot get lock status.") - - for _, l := range locksInfo { - printMsg(lockListMessage{VolumeLockInfo: l}) - } - - return nil -} diff --git a/cmd/admin-lock.go b/cmd/admin-lock.go deleted file mode 100644 index b188127e..00000000 --- a/cmd/admin-lock.go +++ /dev/null @@ -1,43 +0,0 @@ -/* - * Minio Client (C) 2016 Minio, Inc. - * - * Licensed under the Apache License, Version 2.0 (the "License"); - * you may not use this file except in compliance with the License. - * You may obtain a copy of the License at - * - * http://www.apache.org/licenses/LICENSE-2.0 - * - * Unless required by applicable law or agreed to in writing, software - * distributed under the License is distributed on an "AS IS" BASIS, - * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. - * See the License for the specific language governing permissions and - * limitations under the License. - */ - -package cmd - -import "github.com/minio/cli" - -var ( - adminLockFlags = []cli.Flag{} -) - -var adminLockCmd = cli.Command{ - Name: "lock", - Usage: "Control locks in servers", - Action: mainAdminLock, - Before: setGlobalsFromContext, - Flags: append(adminLockFlags, globalFlags...), - Subcommands: []cli.Command{ - adminLockListCmd, - adminLockClearCmd, - }, - HideHelpCommand: true, -} - -// mainAdminLock is the handle for "mc admin lock" command. -func mainAdminLock(ctx *cli.Context) error { - cli.ShowCommandHelp(ctx, ctx.Args().First()) - return nil - // Sub-commands like "list", "unlock" have their own main. -} diff --git a/cmd/admin-main.go b/cmd/admin-main.go index 73e64947..037f927a 100644 --- a/cmd/admin-main.go +++ b/cmd/admin-main.go @@ -34,7 +34,6 @@ var adminCmd = cli.Command{ adminInfoCmd, adminCredsCmd, adminConfigCmd, - adminLockCmd, adminHealCmd, }, } diff --git a/cmd/typed-errors.go b/cmd/typed-errors.go index 3f1d371f..fd1590e8 100644 --- a/cmd/typed-errors.go +++ b/cmd/typed-errors.go @@ -116,10 +116,3 @@ var errSourceTargetSame = func(URL string) *probe.Error { msg := "Source and target URL can not be same : " + URL return probe.NewError(sourceTargetSameErr(errors.New(msg))).Untrace() } - -type bucketNotSpecifiedErr error - -var errBucketNotSpecified = func() *probe.Error { - msg := "This operation requires a " + "bucket to be specified." - return probe.NewError(bucketNotSpecifiedErr(errors.New(msg))).Untrace() -} diff --git a/vendor/github.com/minio/minio/pkg/madmin/API.md b/vendor/github.com/minio/minio/pkg/madmin/API.md index c8ca7911..6d855693 100644 --- a/vendor/github.com/minio/minio/pkg/madmin/API.md +++ b/vendor/github.com/minio/minio/pkg/madmin/API.md @@ -36,10 +36,10 @@ func main() { ``` -| Service operations | Info operations | LockInfo operations | Healing operations | Config operations | Misc | +| Service operations | Info operations | Healing operations | Config operations | Misc | |:------------------------------------|:----------------------------|:----------------------------|:--------------------------------------|:--------------------------|:------------------------------------| -| [`ServiceStatus`](#ServiceStatus) | [`ServerInfo`](#ServerInfo) | [`ListLocks`](#ListLocks) | [`Heal`](#Heal) | [`GetConfig`](#GetConfig) | [`SetCredentials`](#SetCredentials) | -| [`ServiceSendAction`](#ServiceSendAction) | | [`ClearLocks`](#ClearLocks) | | [`SetConfig`](#SetConfig) | | +| [`ServiceStatus`](#ServiceStatus) | [`ServerInfo`](#ServerInfo) | [`Heal`](#Heal) | [`GetConfig`](#GetConfig) | [`SetCredentials`](#SetCredentials) | +| [`ServiceSendAction`](#ServiceSendAction) | | | [`SetConfig`](#SetConfig) | | ## 1. Constructor @@ -203,38 +203,6 @@ Fetches information for all cluster nodes, such as server properties, storage in ``` -## 5. Lock operations - - -### ListLocks(bucket, prefix string, duration time.Duration) ([]VolumeLockInfo, error) -If successful returns information on the list of locks held on ``bucket`` matching ``prefix`` for longer than ``duration`` seconds. - -__Example__ - -``` go - volLocks, err := madmClnt.ListLocks("mybucket", "myprefix", 30 * time.Second) - if err != nil { - log.Fatalln(err) - } - log.Println("List of locks: ", volLocks) - -``` - - -### ClearLocks(bucket, prefix string, duration time.Duration) ([]VolumeLockInfo, error) -If successful returns information on the list of locks cleared on ``bucket`` matching ``prefix`` for longer than ``duration`` seconds. - -__Example__ - -``` go - volLocks, err := madmClnt.ClearLocks("mybucket", "myprefix", 30 * time.Second) - if err != nil { - log.Fatalln(err) - } - log.Println("List of locks cleared: ", volLocks) - -``` - ## 6. Heal operations @@ -243,25 +211,26 @@ __Example__ Start a heal sequence that scans data under given (possible empty) `bucket` and `prefix`. The `recursive` bool turns on recursive traversal under the given path. `dryRun` does not mutate on-disk data, -but performs data validation. `incomplete` enables healing of -multipart uploads that are in progress. `removeBadFiles` removes -unrecoverable files. `statisticsOnly` turns off detailed -heal-operations reporting in the status call. +but performs data validation. Two heal sequences on overlapping paths may not be initiated. -The progress of a heal should be followed using the `HealStatus` +The progress of a heal should be followed using the same API `Heal` +by providing the `clientToken` previously obtained from a `Heal` API. The server accumulates results of the heal traversal and waits for the client to receive and acknowledge them using the status -API. When the statistics-only option is set, the server only maintains -aggregates statistics - in this case, no acknowledgement of results is -required. +request by providing `clientToken`. __Example__ ``` go - healPath, err := madmClnt.HealStart("", "", true, false, true, false, false) + opts := madmin.HealOpts{ + Recursive: true, + DryRun: false, + } + forceStart := false + healPath, err := madmClnt.Heal("", "", opts, "", forceStart) if err != nil { log.Fatalln(err) } @@ -269,6 +238,14 @@ __Example__ ``` +#### HealStartSuccess structure + +| Param | Type | Description | +|----|--------|--------| +| s.ClientToken | _string_ | A unique token for a successfully started heal operation, this token is used to request realtime progress of the heal operation. | +| s.ClientAddress | _string_ | Address of the client which initiated the heal operation, the client address has the form "host:port".| +| s.StartTime | _time.Time_ | Time when heal was initially started.| + #### HealTaskStatus structure | Param | Type | Description | @@ -277,7 +254,6 @@ __Example__ | s.FailureDetail | _string_ | Error message in case of heal sequence failure | | s.HealSettings | _HealOpts_ | Contains the booleans set in the `HealStart` call | | s.Items | _[]HealResultItem_ | Heal records for actions performed by server | -| s.Statistics | _HealStatistics_ | Aggregate of heal records from beginning | #### HealResultItem structure @@ -291,38 +267,6 @@ __Example__ | DiskInfo.AvailableOn | _[]int_ | List of disks on which the healed entity is present and healthy | | DiskInfo.HealedOn | _[]int_ | List of disks on which the healed entity was restored | -#### HealStatistics structure - -Most parameters represent the aggregation of heal operations since the -start of the heal sequence. - -| Param | Type | Description | -|-------|-----|----------| -| NumDisks | _int_ | Number of disks configured in the backend | -| NumBucketsScanned | _int64_ | Number of buckets scanned | -| BucketsMissingByDisk | _map[int]int64_ | Map of disk to number of buckets missing | -| BucketsAvailableByDisk | _map[int]int64_ | Map of disk to number of buckets available | -| BucketsHealedByDisk | _map[int]int64_ | Map of disk to number of buckets healed on | -| NumObjectsScanned | _int64_ | Number of objects scanned | -| NumUploadsScanned | _int64_ | Number of uploads scanned | -| ObjectsByAvailablePC | _map[int64]_ | Map of available part counts (after heal) to number of objects | -| ObjectsByHealedPC | _map[int64]_ | Map of healed part counts to number of objects | -| ObjectsMissingByDisk | _map[int64]_ | Map of disk number to number of objects with parts missing on that disk | -| ObjectsAvailableByDisk | _map[int64]_ | Map of disk number to number of objects available on that disk | -| ObjectsHealedByDisk | _map[int64]_ | Map of disk number to number of objects healed on that disk | - -__Example__ - -``` go - - res, err := madmClnt.HealStatus("", "") - if err != nil { - log.Fatalln(err) - } - log.Printf("Heal sequence status data %#v", res) - -``` - ## 7. Config operations diff --git a/vendor/github.com/minio/minio/pkg/madmin/config-commands.go b/vendor/github.com/minio/minio/pkg/madmin/config-commands.go index a6284c5a..b2eabfdc 100644 --- a/vendor/github.com/minio/minio/pkg/madmin/config-commands.go +++ b/vendor/github.com/minio/minio/pkg/madmin/config-commands.go @@ -62,7 +62,7 @@ func (adm *AdminClient) GetConfig() ([]byte, error) { return nil, httpRespToErrorResponse(resp) } - // Return the JSON marshalled bytes to user. + // Return the JSON marshaled bytes to user. return ioutil.ReadAll(resp.Body) } diff --git a/vendor/github.com/minio/minio/pkg/madmin/constants.go b/vendor/github.com/minio/minio/pkg/madmin/constants.go deleted file mode 100644 index dc8f9c1b..00000000 --- a/vendor/github.com/minio/minio/pkg/madmin/constants.go +++ /dev/null @@ -1,22 +0,0 @@ -/* - * Minio Cloud Storage, (C) 2016 Minio, Inc. - * - * Licensed under the Apache License, Version 2.0 (the "License"); - * you may not use this file except in compliance with the License. - * You may obtain a copy of the License at - * - * http://www.apache.org/licenses/LICENSE-2.0 - * - * Unless required by applicable law or agreed to in writing, software - * distributed under the License is distributed on an "AS IS" BASIS, - * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. - * See the License for the specific language governing permissions and - * limitations under the License. - */ - -package madmin - -const ( - // Unsigned payload. - unsignedPayload = "UNSIGNED-PAYLOAD" -) diff --git a/vendor/github.com/minio/minio/pkg/madmin/lock-commands.go b/vendor/github.com/minio/minio/pkg/madmin/lock-commands.go deleted file mode 100644 index 7de125dd..00000000 --- a/vendor/github.com/minio/minio/pkg/madmin/lock-commands.go +++ /dev/null @@ -1,135 +0,0 @@ -/* - * Minio Cloud Storage, (C) 2016 Minio, Inc. - * - * Licensed under the Apache License, Version 2.0 (the "License"); - * you may not use this file except in compliance with the License. - * You may obtain a copy of the License at - * - * http://www.apache.org/licenses/LICENSE-2.0 - * - * Unless required by applicable law or agreed to in writing, software - * distributed under the License is distributed on an "AS IS" BASIS, - * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. - * See the License for the specific language governing permissions and - * limitations under the License. - * - */ - -package madmin - -import ( - "encoding/json" - "io" - "io/ioutil" - "net/http" - "net/url" - "time" -) - -type statusType string - -type lockType string - -// OpsLockState - represents lock specific details. -type OpsLockState struct { - OperationID string `json:"id"` // String containing operation ID. - LockSource string `json:"source"` // Operation type (GetObject, PutObject...) - LockType lockType `json:"type"` // Lock type (RLock, WLock) - Status statusType `json:"status"` // Status can be Running/Ready/Blocked. - Since time.Time `json:"since"` // Time when the lock was initially held. -} - -// VolumeLockInfo - represents summary and individual lock details of all -// locks held on a given bucket, object. -type VolumeLockInfo struct { - Bucket string `json:"bucket"` - Object string `json:"object"` - - // All locks blocked + running for given pair. - LocksOnObject int64 `json:"-"` - // Count of operations which has successfully acquired the lock - // but hasn't unlocked yet( operation in progress). - LocksAcquiredOnObject int64 `json:"-"` - // Count of operations which are blocked waiting for the lock - // to be released. - TotalBlockedLocks int64 `json:"-"` - - // Count of all read locks - TotalReadLocks int64 `json:"readLocks"` - // Count of all write locks - TotalWriteLocks int64 `json:"writeLocks"` - // State information containing state of the locks for all operations - // on given pair. - LockDetailsOnObject []OpsLockState `json:"lockOwners"` -} - -// getLockInfos - unmarshal []VolumeLockInfo from a reader. -func getLockInfos(body io.Reader) ([]VolumeLockInfo, error) { - respBytes, err := ioutil.ReadAll(body) - if err != nil { - return nil, err - } - - var lockInfos []VolumeLockInfo - - err = json.Unmarshal(respBytes, &lockInfos) - if err != nil { - return nil, err - } - - return lockInfos, nil -} - -// ListLocks - Calls List Locks Management API to fetch locks matching -// bucket, prefix and held before the duration supplied. -func (adm *AdminClient) ListLocks(bucket, prefix string, - duration time.Duration) ([]VolumeLockInfo, error) { - - queryVal := make(url.Values) - queryVal.Set("bucket", bucket) - queryVal.Set("prefix", prefix) - queryVal.Set("older-than", duration.String()) - - // Execute GET on /minio/admin/v1/locks to list locks. - resp, err := adm.executeMethod("GET", requestData{ - queryValues: queryVal, - relPath: "/v1/locks", - }) - defer closeResponse(resp) - if err != nil { - return nil, err - } - - if resp.StatusCode != http.StatusOK { - return nil, httpRespToErrorResponse(resp) - } - - return getLockInfos(resp.Body) -} - -// ClearLocks - Calls Clear Locks Management API to clear locks held -// on bucket, matching prefix older than duration supplied. -func (adm *AdminClient) ClearLocks(bucket, prefix string, - duration time.Duration) ([]VolumeLockInfo, error) { - - queryVal := make(url.Values) - queryVal.Set("bucket", bucket) - queryVal.Set("prefix", prefix) - queryVal.Set("duration", duration.String()) - - // Execute POST on /?lock to clear locks. - resp, err := adm.executeMethod("DELETE", requestData{ - queryValues: queryVal, - relPath: "/v1/locks", - }) - defer closeResponse(resp) - if err != nil { - return nil, err - } - - if resp.StatusCode != http.StatusOK { - return nil, httpRespToErrorResponse(resp) - } - - return getLockInfos(resp.Body) -} diff --git a/vendor/github.com/minio/minio/pkg/madmin/utils.go b/vendor/github.com/minio/minio/pkg/madmin/utils.go index 83b2c59e..95b08d1d 100644 --- a/vendor/github.com/minio/minio/pkg/madmin/utils.go +++ b/vendor/github.com/minio/minio/pkg/madmin/utils.go @@ -17,7 +17,6 @@ package madmin import ( - "crypto/md5" "encoding/json" "io" "io/ioutil" @@ -38,13 +37,6 @@ func sum256(data []byte) []byte { return hash.Sum(nil) } -// sumMD5 calculate sumMD5 sum for an input byte array. -func sumMD5(data []byte) []byte { - hash := md5.New() - hash.Write(data) - return hash.Sum(nil) -} - // jsonDecoder decode json to go type. func jsonDecoder(body io.Reader, v interface{}) error { d := json.NewDecoder(body) diff --git a/vendor/vendor.json b/vendor/vendor.json index 42cfc445..220b3912 100644 --- a/vendor/vendor.json +++ b/vendor/vendor.json @@ -134,10 +134,10 @@ "revisionTime": "2018-07-11T12:25:12Z" }, { - "checksumSHA1": "MEC+K9aTG+8tfPjnJ4qj2Y+kc4s=", + "checksumSHA1": "FIs3tgGerLUN+S9IewYzFhJtQQY=", "path": "github.com/minio/minio/pkg/madmin", - "revision": "3dc13323e51dc7038232f5f02f55b37b388c59c2", - "revisionTime": "2018-05-16T01:20:22Z" + "revision": "556a51120ce8a68c6745ab0b0e374390529479a8", + "revisionTime": "2018-08-02T17:39:42Z" }, { "checksumSHA1": "flg07CqTxM9togozKRQiJugao4s=",