Skip to content

Commit 5f7b563

Browse files
authored
Add Remove Tier feature (#3371)
1 parent 3885875 commit 5f7b563

File tree

13 files changed

+665
-5
lines changed

13 files changed

+665
-5
lines changed

api/admin_client_mock.go

Lines changed: 9 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -66,10 +66,11 @@ var (
6666
deleteSiteReplicationInfoMock func(ctx context.Context, removeReq madmin.SRRemoveReq) (*madmin.ReplicateRemoveStatus, error)
6767
getSiteReplicationStatus func(ctx context.Context, params madmin.SRStatusOptions) (*madmin.SRStatusInfo, error)
6868

69-
minioListTiersMock func(ctx context.Context) ([]*madmin.TierConfig, error)
70-
minioTierStatsMock func(ctx context.Context) ([]madmin.TierInfo, error)
71-
minioAddTiersMock func(ctx context.Context, tier *madmin.TierConfig) error
72-
minioEditTiersMock func(ctx context.Context, tierName string, creds madmin.TierCreds) error
69+
minioListTiersMock func(ctx context.Context) ([]*madmin.TierConfig, error)
70+
minioTierStatsMock func(ctx context.Context) ([]madmin.TierInfo, error)
71+
minioAddTiersMock func(ctx context.Context, tier *madmin.TierConfig) error
72+
minioRemoveTierMock func(ctx context.Context, tierName string) error
73+
minioEditTiersMock func(ctx context.Context, tierName string, creds madmin.TierCreds) error
7374

7475
minioServiceTraceMock func(ctx context.Context, threshold int64, s3, internal, storage, os, errTrace bool) <-chan madmin.ServiceTraceInfo
7576

@@ -345,6 +346,10 @@ func (ac AdminClientMock) addTier(ctx context.Context, tier *madmin.TierConfig)
345346
return minioAddTiersMock(ctx, tier)
346347
}
347348

349+
func (ac AdminClientMock) removeTier(ctx context.Context, tierName string) error {
350+
return minioRemoveTierMock(ctx, tierName)
351+
}
352+
348353
func (ac AdminClientMock) editTierCreds(ctx context.Context, tierName string, creds madmin.TierCreds) error {
349354
return minioEditTiersMock(ctx, tierName, creds)
350355
}

api/admin_tiers.go

Lines changed: 30 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -62,6 +62,14 @@ func registerAdminTiersHandlers(api *operations.ConsoleAPI) {
6262
}
6363
return tieringApi.NewEditTierCredentialsOK()
6464
})
65+
// remove an empty tier
66+
api.TieringRemoveTierHandler = tieringApi.RemoveTierHandlerFunc(func(params tieringApi.RemoveTierParams, session *models.Principal) middleware.Responder {
67+
err := getRemoveTierResponse(session, params)
68+
if err != nil {
69+
return tieringApi.NewRemoveTierDefault(err.Code).WithPayload(err.APIError)
70+
}
71+
return tieringApi.NewRemoveTierNoContent()
72+
})
6573
}
6674

6775
// getNotificationEndpoints invokes admin info and returns a list of notification endpoints
@@ -409,3 +417,25 @@ func getEditTierCredentialsResponse(session *models.Principal, params tieringApi
409417
}
410418
return nil
411419
}
420+
421+
func removeTier(ctx context.Context, client MinioAdmin, params *tieringApi.RemoveTierParams) error {
422+
return client.removeTier(ctx, params.Name)
423+
}
424+
425+
func getRemoveTierResponse(session *models.Principal, params tieringApi.RemoveTierParams) *CodedAPIError {
426+
ctx, cancel := context.WithCancel(params.HTTPRequest.Context())
427+
defer cancel()
428+
mAdmin, err := NewMinioAdminClient(params.HTTPRequest.Context(), session)
429+
if err != nil {
430+
return ErrorWithContext(ctx, err)
431+
}
432+
// create a minioClient interface implementation
433+
// defining the client to be used
434+
adminClient := AdminClient{Client: mAdmin}
435+
// serialize output
436+
err = removeTier(ctx, adminClient, &params)
437+
if err != nil {
438+
return ErrorWithContext(ctx, err)
439+
}
440+
return nil
441+
}

api/client-admin.go

Lines changed: 7 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -96,6 +96,8 @@ type MinioAdmin interface {
9696
editTierCreds(ctx context.Context, tierName string, creds madmin.TierCreds) error
9797
// verify Tier status
9898
verifyTierStatus(ctx context.Context, tierName string) error
99+
// remove empty Tier
100+
removeTier(ctx context.Context, tierName string) error
99101
// Speedtest
100102
speedtest(ctx context.Context, opts madmin.SpeedtestOpts) (chan madmin.SpeedTestResult, error)
101103
// Site Relication
@@ -448,6 +450,11 @@ func (ac AdminClient) verifyTierStatus(ctx context.Context, tierName string) err
448450
return ac.Client.VerifyTier(ctx, tierName)
449451
}
450452

453+
// implements madmin.RemoveTier()
454+
func (ac AdminClient) removeTier(ctx context.Context, tierName string) error {
455+
return ac.Client.RemoveTier(ctx, tierName)
456+
}
457+
451458
func NewMinioAdminClient(ctx context.Context, sessionClaims *models.Principal) (*madmin.AdminClient, error) {
452459
clientIP := utils.ClientIPFromContext(ctx)
453460
adminClient, err := newAdminFromClaims(sessionClaims, clientIP)

api/embedded_spec.go

Lines changed: 56 additions & 0 deletions
Some generated files are not rendered by default. Learn more about customizing how changed files appear on GitHub.

api/operations/console_api.go

Lines changed: 12 additions & 0 deletions
Some generated files are not rendered by default. Learn more about customizing how changed files appear on GitHub.

api/operations/tiering/remove_tier.go

Lines changed: 88 additions & 0 deletions
Some generated files are not rendered by default. Learn more about customizing how changed files appear on GitHub.

api/operations/tiering/remove_tier_parameters.go

Lines changed: 88 additions & 0 deletions
Some generated files are not rendered by default. Learn more about customizing how changed files appear on GitHub.

0 commit comments

Comments
 (0)