Enable console to set expired-object-all-versions (#3226)

Signed-off-by: Shubhendu Ram Tripathi <shubhendu@minio.io>
This commit is contained in:
Shubhendu
2024-03-12 01:55:06 +05:30
committed by GitHub
parent a838c763ea
commit 39bf627b0a
15 changed files with 123 additions and 3 deletions

View File

@@ -33,6 +33,10 @@ lint:
@GO111MODULE=on ${GOPATH}/bin/golangci-lint cache clean
@GO111MODULE=on ${GOPATH}/bin/golangci-lint run --timeout=5m --config ./.golangci.yml
lint-fix: getdeps ## runs golangci-lint suite of linters with automatic fixes
@echo "Running $@ check"
@GO111MODULE=on ${GOPATH}/bin/golangci-lint run --timeout=5m --config ./.golangci.yml --fix
install: console
@echo "Installing console binary to '$(GOPATH)/bin/console'"
@mkdir -p $(GOPATH)/bin && cp -f $(PWD)/console $(GOPATH)/bin/console

View File

@@ -5373,6 +5373,10 @@ func init() {
"description": "Non required, toggle to disable or enable rule",
"type": "boolean"
},
"expired_object_delete_all": {
"description": "Non required, toggle to disable or enable rule",
"type": "boolean"
},
"expired_object_delete_marker": {
"description": "Non required, toggle to disable or enable rule",
"type": "boolean"
@@ -5475,6 +5479,10 @@ func init() {
"type": "string"
}
},
"expired_object_delete_all": {
"description": "Non required, toggle to disable or enable rule",
"type": "boolean"
},
"expired_object_delete_marker": {
"description": "Non required, toggle to disable or enable rule",
"type": "boolean"
@@ -6180,6 +6188,9 @@ func init() {
"type": "integer",
"format": "int64"
},
"delete_all": {
"type": "boolean"
},
"delete_marker": {
"type": "boolean"
},
@@ -8838,6 +8849,10 @@ func init() {
"description": "Non required, toggle to disable or enable rule",
"type": "boolean"
},
"expired_object_delete_all": {
"description": "Non required, toggle to disable or enable rule",
"type": "boolean"
},
"expired_object_delete_marker": {
"description": "Non required, toggle to disable or enable rule",
"type": "boolean"
@@ -14729,6 +14744,10 @@ func init() {
"description": "Non required, toggle to disable or enable rule",
"type": "boolean"
},
"expired_object_delete_all": {
"description": "Non required, toggle to disable or enable rule",
"type": "boolean"
},
"expired_object_delete_marker": {
"description": "Non required, toggle to disable or enable rule",
"type": "boolean"
@@ -14831,6 +14850,10 @@ func init() {
"type": "string"
}
},
"expired_object_delete_all": {
"description": "Non required, toggle to disable or enable rule",
"type": "boolean"
},
"expired_object_delete_marker": {
"description": "Non required, toggle to disable or enable rule",
"type": "boolean"
@@ -15531,6 +15554,9 @@ func init() {
"type": "integer",
"format": "int64"
},
"delete_all": {
"type": "boolean"
},
"delete_marker": {
"type": "boolean"
},
@@ -18172,6 +18198,10 @@ func init() {
"description": "Non required, toggle to disable or enable rule",
"type": "boolean"
},
"expired_object_delete_all": {
"description": "Non required, toggle to disable or enable rule",
"type": "boolean"
},
"expired_object_delete_marker": {
"description": "Non required, toggle to disable or enable rule",
"type": "boolean"

View File

@@ -117,6 +117,7 @@ func getBucketLifecycle(ctx context.Context, client MinioClient, bucketName stri
Date: rule.Expiration.Date.Format(time.RFC3339),
Days: int64(rule.Expiration.Days),
DeleteMarker: rule.Expiration.DeleteMarker.IsEnabled(),
DeleteAll: bool(rule.Expiration.DeleteAll),
NoncurrentExpirationDays: int64(rule.NoncurrentVersionExpiration.NoncurrentDays),
NewerNoncurrentExpirationVersions: int64(rule.NoncurrentVersionExpiration.NewerNoncurrentVersions),
},
@@ -188,6 +189,7 @@ func addBucketLifecycle(ctx context.Context, client MinioClient, params bucketAp
Status: &status,
Tags: &params.Body.Tags,
ExpiredObjectDeleteMarker: &params.Body.ExpiredObjectDeleteMarker,
ExpiredObjectAllversions: &params.Body.ExpiredObjectDeleteAll,
}
if params.Body.NoncurrentversionTransitionDays > 0 {
@@ -219,6 +221,7 @@ func addBucketLifecycle(ctx context.Context, client MinioClient, params bucketAp
Status: &status,
Tags: &params.Body.Tags,
ExpiredObjectDeleteMarker: &params.Body.ExpiredObjectDeleteMarker,
ExpiredObjectAllversions: &params.Body.ExpiredObjectDeleteAll,
}
if params.Body.NewerNoncurrentversionExpirationVersions > 0 {
@@ -298,6 +301,7 @@ func editBucketLifecycle(ctx context.Context, client MinioClient, params bucketA
Status: &status,
Tags: &params.Body.Tags,
ExpiredObjectDeleteMarker: &params.Body.ExpiredObjectDeleteMarker,
ExpiredObjectAllversions: &params.Body.ExpiredObjectDeleteAll,
}
if params.Body.NoncurrentversionTransitionDays > 0 {
@@ -328,6 +332,7 @@ func editBucketLifecycle(ctx context.Context, client MinioClient, params bucketA
Status: &status,
Tags: &params.Body.Tags,
ExpiredObjectDeleteMarker: &params.Body.ExpiredObjectDeleteMarker,
ExpiredObjectAllversions: &params.Body.ExpiredObjectDeleteAll,
}
if params.Body.NoncurrentversionExpirationDays > 0 {
@@ -456,6 +461,7 @@ func addMultiBucketLifecycle(ctx context.Context, client MinioClient, params buc
ExpiryDays: params.Body.ExpiryDays,
Disable: false,
ExpiredObjectDeleteMarker: params.Body.ExpiredObjectDeleteMarker,
ExpiredObjectDeleteAll: params.Body.ExpiredObjectDeleteMarker,
}
go func() {

2
go.mod
View File

@@ -22,7 +22,7 @@ require (
github.com/minio/highwayhash v1.0.2
github.com/minio/kes v0.23.0
github.com/minio/madmin-go/v3 v3.0.46
github.com/minio/mc v0.0.0-20240209221824-669cb0a9a475
github.com/minio/mc v0.0.0-20240224013320-f17313e7ab89
github.com/minio/minio-go/v7 v7.0.67
github.com/minio/selfupdate v0.6.0
github.com/minio/websocket v1.6.0

4
go.sum
View File

@@ -189,8 +189,8 @@ github.com/minio/kes-go v0.2.1 h1:KnqS+p6xoSFJZbQhmJaz/PbxeA6nQyRqT/ywrn5lU2o=
github.com/minio/kes-go v0.2.1/go.mod h1:76xf7l41Wrh+IifisABXK2S8uZWYgWV1IGBKC3GdOJk=
github.com/minio/madmin-go/v3 v3.0.46 h1:DabFt+aUph5Vu/SOat2RWN/xVagPBU7qzxhAQ03hH/k=
github.com/minio/madmin-go/v3 v3.0.46/go.mod h1:ZDF7kf5fhmxLhbGTqyq5efs4ao0v4eWf7nOuef/ljJs=
github.com/minio/mc v0.0.0-20240209221824-669cb0a9a475 h1:yfLzMougcV2xkVlWgwYwVRoT8pnXrcCV4oOQW+pI2EQ=
github.com/minio/mc v0.0.0-20240209221824-669cb0a9a475/go.mod h1:MmDLdb7NWd/OYhcKcXKvwErq2GNa/Zq6xtTWuhdC4II=
github.com/minio/mc v0.0.0-20240224013320-f17313e7ab89 h1:XM7YTVWU46a1P+8h7+xMCQXJEIdU+MEFp9BZM7ImeVI=
github.com/minio/mc v0.0.0-20240224013320-f17313e7ab89/go.mod h1:RBhdjMeCia7yxC9jQ2onV7kPvruzWBgtSa/h2zm1egc=
github.com/minio/md5-simd v1.1.2 h1:Gdi1DZK69+ZVMoNHRXJyNcxrMA4dSxoYHZSQbirFg34=
github.com/minio/md5-simd v1.1.2/go.mod h1:MzdKDxYpY2BT9XQFocsiZf/NKVtR7nkE4RoEpN+20RM=
github.com/minio/minio-go/v7 v7.0.67 h1:BeBvZWAS+kRJm1vGTMJYVjKUNoo0FoEt/wUWdUtfmh8=

View File

@@ -40,6 +40,9 @@ type AddBucketLifecycle struct {
// Non required, toggle to disable or enable rule
Disable bool `json:"disable,omitempty"`
// Non required, toggle to disable or enable rule
ExpiredObjectDeleteAll bool `json:"expired_object_delete_all,omitempty"`
// Non required, toggle to disable or enable rule
ExpiredObjectDeleteMarker bool `json:"expired_object_delete_marker,omitempty"`

View File

@@ -41,6 +41,9 @@ type AddMultiBucketLifecycle struct {
// Required: true
Buckets []string `json:"buckets"`
// Non required, toggle to disable or enable rule
ExpiredObjectDeleteAll bool `json:"expired_object_delete_all,omitempty"`
// Non required, toggle to disable or enable rule
ExpiredObjectDeleteMarker bool `json:"expired_object_delete_marker,omitempty"`

View File

@@ -40,6 +40,9 @@ type ExpirationResponse struct {
// days
Days int64 `json:"days,omitempty"`
// delete all
DeleteAll bool `json:"delete_all,omitempty"`
// delete marker
DeleteMarker bool `json:"delete_marker,omitempty"`

View File

@@ -40,6 +40,9 @@ type UpdateBucketLifecycle struct {
// Non required, toggle to disable or enable rule
Disable bool `json:"disable,omitempty"`
// Non required, toggle to disable or enable rule
ExpiredObjectDeleteAll bool `json:"expired_object_delete_all,omitempty"`
// Non required, toggle to disable or enable rule
ExpiredObjectDeleteMarker bool `json:"expired_object_delete_marker,omitempty"`

View File

@@ -5109,6 +5109,8 @@ definitions:
format: int64
delete_marker:
type: boolean
delete_all:
type: boolean
noncurrent_expiration_days:
type: integer
format: int64
@@ -5192,6 +5194,9 @@ definitions:
expired_object_delete_marker:
description: Non required, toggle to disable or enable rule
type: boolean
expired_object_delete_all:
description: Non required, toggle to disable or enable rule
type: boolean
noncurrentversion_expiration_days:
description: Non required, can be set in case of expiration is enabled
type: integer
@@ -5247,6 +5252,9 @@ definitions:
expired_object_delete_marker:
description: Non required, toggle to disable or enable rule
type: boolean
expired_object_delete_all:
description: Non required, toggle to disable or enable rule
type: boolean
noncurrentversion_expiration_days:
description: Non required, can be set in case of expiration is enabled
type: integer
@@ -5299,6 +5307,9 @@ definitions:
expired_object_delete_marker:
description: Non required, toggle to disable or enable rule
type: boolean
expired_object_delete_all:
description: Non required, toggle to disable or enable rule
type: boolean
noncurrentversion_expiration_days:
description: Non required, can be set in case of expiration is enabled
type: integer

View File

@@ -903,6 +903,7 @@ export interface ExpirationResponse {
/** @format int64 */
days?: number;
delete_marker?: boolean;
delete_all?: boolean;
/** @format int64 */
noncurrent_expiration_days?: number;
/** @format int64 */
@@ -958,6 +959,8 @@ export interface AddBucketLifecycle {
disable?: boolean;
/** Non required, toggle to disable or enable rule */
expired_object_delete_marker?: boolean;
/** Non required, toggle to disable or enable rule */
expired_object_delete_all?: boolean;
/**
* Non required, can be set in case of expiration is enabled
* @format int32
@@ -1005,6 +1008,8 @@ export interface UpdateBucketLifecycle {
disable?: boolean;
/** Non required, toggle to disable or enable rule */
expired_object_delete_marker?: boolean;
/** Non required, toggle to disable or enable rule */
expired_object_delete_all?: boolean;
/**
* Non required, can be set in case of expiration is enabled
* @format int32
@@ -1045,6 +1050,8 @@ export interface AddMultiBucketLifecycle {
storage_class?: string;
/** Non required, toggle to disable or enable rule */
expired_object_delete_marker?: boolean;
/** Non required, toggle to disable or enable rule */
expired_object_delete_all?: boolean;
/**
* Non required, can be set in case of expiration is enabled
* @format int32

View File

@@ -73,6 +73,8 @@ const AddLifecycleModal = ({
const [lifecycleDays, setLifecycleDays] = useState<string>("");
const [isFormValid, setIsFormValid] = useState<boolean>(false);
const [expiredObjectDM, setExpiredObjectDM] = useState<boolean>(false);
const [expiredAllVersionsDM, setExpiredAllVersionsDM] =
useState<boolean>(false);
const [loadingVersioning, setLoadingVersioning] = useState<boolean>(true);
const [expandedAdv, setExpandedAdv] = useState<boolean>(false);
const [expanded, setExpanded] = useState<boolean>(false);
@@ -183,6 +185,7 @@ const AddLifecycleModal = ({
prefix,
tags,
expired_object_delete_marker: expiredObjectDM,
expired_object_delete_all: expiredAllVersionsDM,
...rules,
};
@@ -437,6 +440,21 @@ const AddLifecycleModal = ({
"Remove the reference to the object if no versions are left"
}
/>
<Switch
value="expired_delete_all"
id="expired_delete_all"
name="expired_delete_all"
checked={expiredAllVersionsDM}
onChange={(
event: React.ChangeEvent<HTMLInputElement>,
) => {
setExpiredAllVersionsDM(event.target.checked);
}}
label={"Expire All Versions"}
description={
"Removes all the versions of the object already expired"
}
/>
</Grid>
</Accordion>
</Grid>

View File

@@ -62,6 +62,8 @@ const EditLifecycleConfiguration = ({
const [storageClass, setStorageClass] = useState("");
const [NCTransitionSC, setNCTransitionSC] = useState("");
const [expiredObjectDM, setExpiredObjectDM] = useState<boolean>(false);
const [expiredAllVersionsDM, setExpiredAllVersionsDM] =
useState<boolean>(false);
const [NCExpirationDays, setNCExpirationDays] = useState<string>("0");
const [NCTransitionDays, setNCTransitionDays] = useState<string>("0");
const [ilmType, setIlmType] = useState<"transition" | "expiry">("expiry");
@@ -199,6 +201,7 @@ const EditLifecycleConfiguration = ({
}
setExpiredObjectDM(!!lifecycleRule.expiration?.delete_marker);
setExpiredAllVersionsDM(!!lifecycleRule.expiration?.delete_all);
setPrefix(lifecycleRule.prefix || "");
if (lifecycleRule.tags) {
@@ -270,6 +273,7 @@ const EditLifecycleConfiguration = ({
prefix,
tags,
expired_object_delete_marker: expiredObjectDM,
expired_object_delete_all: expiredAllVersionsDM,
...rules,
};
@@ -498,6 +502,18 @@ const EditLifecycleConfiguration = ({
}}
label={"Expired Object Delete Marker"}
/>
<Switch
value="expired_delete_all"
id="expired_delete_all"
name="expired_delete_all"
checked={expiredAllVersionsDM}
onChange={(
event: React.ChangeEvent<HTMLInputElement>,
) => {
setExpiredAllVersionsDM(event.target.checked);
}}
label={"Expired All Versions"}
/>
</Accordion>
</Grid>
)}

View File

@@ -59,6 +59,8 @@ const AddBulkReplicationModal = ({
const [storageClass, setStorageClass] = useState("");
const [NCTransitionSC, setNCTransitionSC] = useState("");
const [expiredObjectDM, setExpiredObjectDM] = useState<boolean>(false);
const [expiredAllVersionsDM, setExpiredAllVersionsDM] =
useState<boolean>(false);
const [NCExpirationDays, setNCExpirationDays] = useState<string>("0");
const [NCTransitionDays, setNCTransitionDays] = useState<string>("0");
const [ilmType, setIlmType] = useState<"expiry" | "transition">("expiry");
@@ -172,6 +174,7 @@ const AddBulkReplicationModal = ({
prefix,
tags,
expired_object_delete_marker: expiredObjectDM,
expired_object_delete_all: expiredAllVersionsDM,
...rules,
};
@@ -344,6 +347,18 @@ const AddBulkReplicationModal = ({
}}
label={"Expired Object Delete Marker"}
/>
<Switch
value="expired_delete_all"
id="expired_delete_all"
name="expired_delete_all"
checked={expiredAllVersionsDM}
onChange={(
event: React.ChangeEvent<HTMLInputElement>,
) => {
setExpiredAllVersionsDM(event.target.checked);
}}
label={"Expired All Versions"}
/>
</fieldset>
</FormLayout>
</Fragment>

View File

@@ -41,6 +41,7 @@ interface IExpirationLifecycle {
days: number;
date: string;
delete_marker?: boolean;
delete_all?: boolean;
noncurrent_expiration_days?: number;
newer_noncurrent_expiration_versions?: number;
}