Encode dir obj names before expiration (#19305)

Object names of directory objects qualified for ExpiredObjectAllVersions
must be encoded appropriately before calling on deletePrefix on their
erasure set.

e.g., a directory object and regular objects with overlapping prefixes
could lead to the expiration of regular objects, which is not the 
intention of ILM. 

```
bucket/dir/ ---> directory object
bucket/dir/obj-1
```

When `bucket/dir/` qualifies for expiration, the current implementation would
remove regular objects under the prefix `bucket/dir/`, in this case,
`bucket/dir/obj-1`.
This commit is contained in:
Krishnan Parthasarathi 2024-03-21 10:21:35 -07:00 committed by GitHub
parent a03dac41eb
commit da81c6cc27
No known key found for this signature in database
GPG Key ID: B5690EEEBB952194
15 changed files with 91 additions and 53 deletions

View File

@ -24,7 +24,7 @@ help: ## print this help
getdeps: ## fetch necessary dependencies getdeps: ## fetch necessary dependencies
@mkdir -p ${GOPATH}/bin @mkdir -p ${GOPATH}/bin
@echo "Installing golangci-lint" && curl -sSfL https://raw.githubusercontent.com/golangci/golangci-lint/master/install.sh | sh -s -- -b $(GOLANGCI_DIR) @echo "Installing golangci-lint" && curl -sSfL https://raw.githubusercontent.com/golangci/golangci-lint/master/install.sh | sh -s -- -b $(GOLANGCI_DIR)
@echo "Installing msgp" && go install -v github.com/tinylib/msgp@6ac204f0b4d48d17ab4fa442134c7fba13127a4e @echo "Installing msgp" && go install -v github.com/tinylib/msgp@v1.1.10-0.20240227114326-6d6f813fff1b
@echo "Installing stringer" && go install -v golang.org/x/tools/cmd/stringer@latest @echo "Installing stringer" && go install -v golang.org/x/tools/cmd/stringer@latest
crosscompile: ## cross compile minio crosscompile: ## cross compile minio

View File

@ -427,7 +427,7 @@ func batchObjsForDelete(ctx context.Context, r *BatchJobExpire, ri *batchJobInfo
default: default:
} }
stopFn := globalBatchJobsMetrics.trace(batchJobMetricExpire, ri.JobID, attempts) stopFn := globalBatchJobsMetrics.trace(batchJobMetricExpire, ri.JobID, attempts)
_, err := api.DeleteObject(ctx, exp.Bucket, exp.Name, ObjectOptions{ _, err := api.DeleteObject(ctx, exp.Bucket, encodeDirObject(exp.Name), ObjectOptions{
DeletePrefix: true, DeletePrefix: true,
}) })
if err != nil { if err != nil {

View File

@ -584,6 +584,7 @@ func (z *InQueueStats) DecodeMsg(dc *msgp.Reader) (err error) {
// EncodeMsg implements msgp.Encodable // EncodeMsg implements msgp.Encodable
func (z InQueueStats) EncodeMsg(en *msgp.Writer) (err error) { func (z InQueueStats) EncodeMsg(en *msgp.Writer) (err error) {
// map header, size 0 // map header, size 0
_ = z
err = en.Append(0x80) err = en.Append(0x80)
if err != nil { if err != nil {
return return
@ -595,6 +596,7 @@ func (z InQueueStats) EncodeMsg(en *msgp.Writer) (err error) {
func (z InQueueStats) MarshalMsg(b []byte) (o []byte, err error) { func (z InQueueStats) MarshalMsg(b []byte) (o []byte, err error) {
o = msgp.Require(b, z.Msgsize()) o = msgp.Require(b, z.Msgsize())
// map header, size 0 // map header, size 0
_ = z
o = append(o, 0x80) o = append(o, 0x80)
return return
} }

View File

@ -749,6 +749,7 @@ func (z *ReplicateDecision) DecodeMsg(dc *msgp.Reader) (err error) {
// EncodeMsg implements msgp.Encodable // EncodeMsg implements msgp.Encodable
func (z ReplicateDecision) EncodeMsg(en *msgp.Writer) (err error) { func (z ReplicateDecision) EncodeMsg(en *msgp.Writer) (err error) {
// map header, size 0 // map header, size 0
_ = z
err = en.Append(0x80) err = en.Append(0x80)
if err != nil { if err != nil {
return return
@ -760,6 +761,7 @@ func (z ReplicateDecision) EncodeMsg(en *msgp.Writer) (err error) {
func (z ReplicateDecision) MarshalMsg(b []byte) (o []byte, err error) { func (z ReplicateDecision) MarshalMsg(b []byte) (o []byte, err error) {
o = msgp.Require(b, z.Msgsize()) o = msgp.Require(b, z.Msgsize())
// map header, size 0 // map header, size 0
_ = z
o = append(o, 0x80) o = append(o, 0x80)
return return
} }
@ -1388,6 +1390,7 @@ func (z *ResyncDecision) DecodeMsg(dc *msgp.Reader) (err error) {
// EncodeMsg implements msgp.Encodable // EncodeMsg implements msgp.Encodable
func (z ResyncDecision) EncodeMsg(en *msgp.Writer) (err error) { func (z ResyncDecision) EncodeMsg(en *msgp.Writer) (err error) {
// map header, size 0 // map header, size 0
_ = z
err = en.Append(0x80) err = en.Append(0x80)
if err != nil { if err != nil {
return return
@ -1399,6 +1402,7 @@ func (z ResyncDecision) EncodeMsg(en *msgp.Writer) (err error) {
func (z ResyncDecision) MarshalMsg(b []byte) (o []byte, err error) { func (z ResyncDecision) MarshalMsg(b []byte) (o []byte, err error) {
o = msgp.Require(b, z.Msgsize()) o = msgp.Require(b, z.Msgsize())
// map header, size 0 // map header, size 0
_ = z
o = append(o, 0x80) o = append(o, 0x80)
return return
} }

View File

@ -1240,7 +1240,7 @@ func applyExpiryOnNonTransitionedObjects(ctx context.Context, objLayer ObjectLay
} }
}() }()
dobj, err = objLayer.DeleteObject(ctx, obj.Bucket, obj.Name, opts) dobj, err = objLayer.DeleteObject(ctx, obj.Bucket, encodeDirObject(obj.Name), opts)
if err != nil { if err != nil {
if isErrObjectNotFound(err) || isErrVersionNotFound(err) { if isErrObjectNotFound(err) || isErrVersionNotFound(err) {
return false return false
@ -1261,7 +1261,9 @@ func applyExpiryOnNonTransitionedObjects(ctx context.Context, objLayer ObjectLay
if obj.DeleteMarker { if obj.DeleteMarker {
eventName = event.ObjectRemovedDeleteMarkerCreated eventName = event.ObjectRemovedDeleteMarkerCreated
} }
if lcEvent.Action.DeleteAll() {
eventName = event.ObjectRemovedDeleteAllVersions
}
// Notify object deleted event. // Notify object deleted event.
sendEvent(eventArgs{ sendEvent(eventArgs{
EventName: eventName, EventName: eventName,

View File

@ -1762,7 +1762,7 @@ func (z *dataUsageEntry) DecodeMsg(dc *msgp.Reader) (err error) {
// EncodeMsg implements msgp.Encodable // EncodeMsg implements msgp.Encodable
func (z *dataUsageEntry) EncodeMsg(en *msgp.Writer) (err error) { func (z *dataUsageEntry) EncodeMsg(en *msgp.Writer) (err error) {
// omitempty: check for empty values // check for omitted fields
zb0001Len := uint32(10) zb0001Len := uint32(10)
var zb0001Mask uint16 /* 10 bits */ var zb0001Mask uint16 /* 10 bits */
_ = zb0001Mask _ = zb0001Mask
@ -1866,7 +1866,7 @@ func (z *dataUsageEntry) EncodeMsg(en *msgp.Writer) (err error) {
return return
} }
} }
if (zb0001Mask & 0x80) == 0 { // if not empty if (zb0001Mask & 0x80) == 0 { // if not omitted
// write "rs" // write "rs"
err = en.Append(0xa2, 0x72, 0x73) err = en.Append(0xa2, 0x72, 0x73)
if err != nil { if err != nil {
@ -1885,7 +1885,7 @@ func (z *dataUsageEntry) EncodeMsg(en *msgp.Writer) (err error) {
} }
} }
} }
if (zb0001Mask & 0x100) == 0 { // if not empty if (zb0001Mask & 0x100) == 0 { // if not omitted
// write "ats" // write "ats"
err = en.Append(0xa3, 0x61, 0x74, 0x73) err = en.Append(0xa3, 0x61, 0x74, 0x73)
if err != nil { if err != nil {
@ -1920,7 +1920,7 @@ func (z *dataUsageEntry) EncodeMsg(en *msgp.Writer) (err error) {
// MarshalMsg implements msgp.Marshaler // MarshalMsg implements msgp.Marshaler
func (z *dataUsageEntry) MarshalMsg(b []byte) (o []byte, err error) { func (z *dataUsageEntry) MarshalMsg(b []byte) (o []byte, err error) {
o = msgp.Require(b, z.Msgsize()) o = msgp.Require(b, z.Msgsize())
// omitempty: check for empty values // check for omitted fields
zb0001Len := uint32(10) zb0001Len := uint32(10)
var zb0001Mask uint16 /* 10 bits */ var zb0001Mask uint16 /* 10 bits */
_ = zb0001Mask _ = zb0001Mask
@ -1968,7 +1968,7 @@ func (z *dataUsageEntry) MarshalMsg(b []byte) (o []byte, err error) {
for za0002 := range z.ObjVersions { for za0002 := range z.ObjVersions {
o = msgp.AppendUint64(o, z.ObjVersions[za0002]) o = msgp.AppendUint64(o, z.ObjVersions[za0002])
} }
if (zb0001Mask & 0x80) == 0 { // if not empty if (zb0001Mask & 0x80) == 0 { // if not omitted
// string "rs" // string "rs"
o = append(o, 0xa2, 0x72, 0x73) o = append(o, 0xa2, 0x72, 0x73)
if z.ReplicationStats == nil { if z.ReplicationStats == nil {
@ -1981,7 +1981,7 @@ func (z *dataUsageEntry) MarshalMsg(b []byte) (o []byte, err error) {
} }
} }
} }
if (zb0001Mask & 0x100) == 0 { // if not empty if (zb0001Mask & 0x100) == 0 { // if not omitted
// string "ats" // string "ats"
o = append(o, 0xa3, 0x61, 0x74, 0x73) o = append(o, 0xa3, 0x61, 0x74, 0x73)
if z.AllTierStats == nil { if z.AllTierStats == nil {
@ -3243,7 +3243,7 @@ func (z *replicationAllStats) DecodeMsg(dc *msgp.Reader) (err error) {
// EncodeMsg implements msgp.Encodable // EncodeMsg implements msgp.Encodable
func (z *replicationAllStats) EncodeMsg(en *msgp.Writer) (err error) { func (z *replicationAllStats) EncodeMsg(en *msgp.Writer) (err error) {
// omitempty: check for empty values // check for omitted fields
zb0001Len := uint32(3) zb0001Len := uint32(3)
var zb0001Mask uint8 /* 3 bits */ var zb0001Mask uint8 /* 3 bits */
_ = zb0001Mask _ = zb0001Mask
@ -3267,7 +3267,7 @@ func (z *replicationAllStats) EncodeMsg(en *msgp.Writer) (err error) {
if zb0001Len == 0 { if zb0001Len == 0 {
return return
} }
if (zb0001Mask & 0x1) == 0 { // if not empty if (zb0001Mask & 0x1) == 0 { // if not omitted
// write "t" // write "t"
err = en.Append(0xa1, 0x74) err = en.Append(0xa1, 0x74)
if err != nil { if err != nil {
@ -3291,7 +3291,7 @@ func (z *replicationAllStats) EncodeMsg(en *msgp.Writer) (err error) {
} }
} }
} }
if (zb0001Mask & 0x2) == 0 { // if not empty if (zb0001Mask & 0x2) == 0 { // if not omitted
// write "r" // write "r"
err = en.Append(0xa1, 0x72) err = en.Append(0xa1, 0x72)
if err != nil { if err != nil {
@ -3303,7 +3303,7 @@ func (z *replicationAllStats) EncodeMsg(en *msgp.Writer) (err error) {
return return
} }
} }
if (zb0001Mask & 0x4) == 0 { // if not empty if (zb0001Mask & 0x4) == 0 { // if not omitted
// write "rc" // write "rc"
err = en.Append(0xa2, 0x72, 0x63) err = en.Append(0xa2, 0x72, 0x63)
if err != nil { if err != nil {
@ -3321,7 +3321,7 @@ func (z *replicationAllStats) EncodeMsg(en *msgp.Writer) (err error) {
// MarshalMsg implements msgp.Marshaler // MarshalMsg implements msgp.Marshaler
func (z *replicationAllStats) MarshalMsg(b []byte) (o []byte, err error) { func (z *replicationAllStats) MarshalMsg(b []byte) (o []byte, err error) {
o = msgp.Require(b, z.Msgsize()) o = msgp.Require(b, z.Msgsize())
// omitempty: check for empty values // check for omitted fields
zb0001Len := uint32(3) zb0001Len := uint32(3)
var zb0001Mask uint8 /* 3 bits */ var zb0001Mask uint8 /* 3 bits */
_ = zb0001Mask _ = zb0001Mask
@ -3342,7 +3342,7 @@ func (z *replicationAllStats) MarshalMsg(b []byte) (o []byte, err error) {
if zb0001Len == 0 { if zb0001Len == 0 {
return return
} }
if (zb0001Mask & 0x1) == 0 { // if not empty if (zb0001Mask & 0x1) == 0 { // if not omitted
// string "t" // string "t"
o = append(o, 0xa1, 0x74) o = append(o, 0xa1, 0x74)
o = msgp.AppendMapHeader(o, uint32(len(z.Targets))) o = msgp.AppendMapHeader(o, uint32(len(z.Targets)))
@ -3355,12 +3355,12 @@ func (z *replicationAllStats) MarshalMsg(b []byte) (o []byte, err error) {
} }
} }
} }
if (zb0001Mask & 0x2) == 0 { // if not empty if (zb0001Mask & 0x2) == 0 { // if not omitted
// string "r" // string "r"
o = append(o, 0xa1, 0x72) o = append(o, 0xa1, 0x72)
o = msgp.AppendUint64(o, z.ReplicaSize) o = msgp.AppendUint64(o, z.ReplicaSize)
} }
if (zb0001Mask & 0x4) == 0 { // if not empty if (zb0001Mask & 0x4) == 0 { // if not omitted
// string "rc" // string "rc"
o = append(o, 0xa2, 0x72, 0x63) o = append(o, 0xa2, 0x72, 0x63)
o = msgp.AppendUint64(o, z.ReplicaCount) o = msgp.AppendUint64(o, z.ReplicaCount)
@ -3478,6 +3478,8 @@ func (z *replicationAllStatsV1) DecodeMsg(dc *msgp.Reader) (err error) {
delete(z.Targets, key) delete(z.Targets, key)
} }
} }
var field []byte
_ = field
for zb0002 > 0 { for zb0002 > 0 {
zb0002-- zb0002--
var za0001 string var za0001 string
@ -3588,6 +3590,8 @@ func (z *replicationAllStatsV1) UnmarshalMsg(bts []byte) (o []byte, err error) {
delete(z.Targets, key) delete(z.Targets, key)
} }
} }
var field []byte
_ = field
for zb0002 > 0 { for zb0002 > 0 {
var za0001 string var za0001 string
var za0002 replicationStats var za0002 replicationStats

View File

@ -614,6 +614,7 @@ func (z *rebalanceMetrics) DecodeMsg(dc *msgp.Reader) (err error) {
// EncodeMsg implements msgp.Encodable // EncodeMsg implements msgp.Encodable
func (z rebalanceMetrics) EncodeMsg(en *msgp.Writer) (err error) { func (z rebalanceMetrics) EncodeMsg(en *msgp.Writer) (err error) {
// map header, size 0 // map header, size 0
_ = z
err = en.Append(0x80) err = en.Append(0x80)
if err != nil { if err != nil {
return return
@ -625,6 +626,7 @@ func (z rebalanceMetrics) EncodeMsg(en *msgp.Writer) (err error) {
func (z rebalanceMetrics) MarshalMsg(b []byte) (o []byte, err error) { func (z rebalanceMetrics) MarshalMsg(b []byte) (o []byte, err error) {
o = msgp.Require(b, z.Msgsize()) o = msgp.Require(b, z.Msgsize())
// map header, size 0 // map header, size 0
_ = z
o = append(o, 0x80) o = append(o, 0x80)
return return
} }

View File

@ -21,6 +21,8 @@ func (z *localLockMap) DecodeMsg(dc *msgp.Reader) (err error) {
delete((*z), key) delete((*z), key)
} }
} }
var field []byte
_ = field
for zb0004 > 0 { for zb0004 > 0 {
zb0004-- zb0004--
var zb0001 string var zb0001 string
@ -115,6 +117,8 @@ func (z *localLockMap) UnmarshalMsg(bts []byte) (o []byte, err error) {
delete((*z), key) delete((*z), key)
} }
} }
var field []byte
_ = field
for zb0004 > 0 { for zb0004 > 0 {
var zb0001 string var zb0001 string
var zb0002 []lockRequesterInfo var zb0002 []lockRequesterInfo

View File

@ -38,6 +38,7 @@ func (z *BaseOptions) DecodeMsg(dc *msgp.Reader) (err error) {
// EncodeMsg implements msgp.Encodable // EncodeMsg implements msgp.Encodable
func (z BaseOptions) EncodeMsg(en *msgp.Writer) (err error) { func (z BaseOptions) EncodeMsg(en *msgp.Writer) (err error) {
// map header, size 0 // map header, size 0
_ = z
err = en.Append(0x80) err = en.Append(0x80)
if err != nil { if err != nil {
return return
@ -49,6 +50,7 @@ func (z BaseOptions) EncodeMsg(en *msgp.Writer) (err error) {
func (z BaseOptions) MarshalMsg(b []byte) (o []byte, err error) { func (z BaseOptions) MarshalMsg(b []byte) (o []byte, err error) {
o = msgp.Require(b, z.Msgsize()) o = msgp.Require(b, z.Msgsize())
// map header, size 0 // map header, size 0
_ = z
o = append(o, 0x80) o = append(o, 0x80)
return return
} }
@ -532,6 +534,7 @@ func (z *DeleteOptions) EncodeMsg(en *msgp.Writer) (err error) {
return return
} }
// map header, size 0 // map header, size 0
_ = z.BaseOptions
err = en.Append(0x80) err = en.Append(0x80)
if err != nil { if err != nil {
return return
@ -576,6 +579,7 @@ func (z *DeleteOptions) MarshalMsg(b []byte) (o []byte, err error) {
// string "BaseOptions" // string "BaseOptions"
o = append(o, 0x84, 0xab, 0x42, 0x61, 0x73, 0x65, 0x4f, 0x70, 0x74, 0x69, 0x6f, 0x6e, 0x73) o = append(o, 0x84, 0xab, 0x42, 0x61, 0x73, 0x65, 0x4f, 0x70, 0x74, 0x69, 0x6f, 0x6e, 0x73)
// map header, size 0 // map header, size 0
_ = z.BaseOptions
o = append(o, 0x80) o = append(o, 0x80)
// string "r" // string "r"
o = append(o, 0xa1, 0x72) o = append(o, 0xa1, 0x72)
@ -1906,6 +1910,8 @@ func (z *FileInfo) DecodeMsg(dc *msgp.Reader) (err error) {
delete(z.Metadata, key) delete(z.Metadata, key)
} }
} }
var field []byte
_ = field
for zb0002 > 0 { for zb0002 > 0 {
zb0002-- zb0002--
var za0001 string var za0001 string
@ -2362,6 +2368,8 @@ func (z *FileInfo) UnmarshalMsg(bts []byte) (o []byte, err error) {
delete(z.Metadata, key) delete(z.Metadata, key)
} }
} }
var field []byte
_ = field
for zb0002 > 0 { for zb0002 > 0 {
var za0001 string var za0001 string
var za0002 string var za0002 string
@ -4455,6 +4463,7 @@ func (z *RenameDataHandlerParams) EncodeMsg(en *msgp.Writer) (err error) {
return return
} }
// map header, size 0 // map header, size 0
_ = z.Opts.BaseOptions
err = en.Append(0x80) err = en.Append(0x80)
if err != nil { if err != nil {
return return
@ -4494,6 +4503,7 @@ func (z *RenameDataHandlerParams) MarshalMsg(b []byte) (o []byte, err error) {
// string "BaseOptions" // string "BaseOptions"
o = append(o, 0x81, 0xab, 0x42, 0x61, 0x73, 0x65, 0x4f, 0x70, 0x74, 0x69, 0x6f, 0x6e, 0x73) o = append(o, 0x81, 0xab, 0x42, 0x61, 0x73, 0x65, 0x4f, 0x70, 0x74, 0x69, 0x6f, 0x6e, 0x73)
// map header, size 0 // map header, size 0
_ = z.Opts.BaseOptions
o = append(o, 0x80) o = append(o, 0x80)
return return
} }
@ -4983,6 +4993,7 @@ func (z *RenameOptions) EncodeMsg(en *msgp.Writer) (err error) {
return return
} }
// map header, size 0 // map header, size 0
_ = z.BaseOptions
err = en.Append(0x80) err = en.Append(0x80)
if err != nil { if err != nil {
return return
@ -4997,6 +5008,7 @@ func (z *RenameOptions) MarshalMsg(b []byte) (o []byte, err error) {
// string "BaseOptions" // string "BaseOptions"
o = append(o, 0x81, 0xab, 0x42, 0x61, 0x73, 0x65, 0x4f, 0x70, 0x74, 0x69, 0x6f, 0x6e, 0x73) o = append(o, 0x81, 0xab, 0x42, 0x61, 0x73, 0x65, 0x4f, 0x70, 0x74, 0x69, 0x6f, 0x6e, 0x73)
// map header, size 0 // map header, size 0
_ = z.BaseOptions
o = append(o, 0x80) o = append(o, 0x80)
return return
} }

View File

@ -21,6 +21,8 @@ func (z *DailyAllTierStats) DecodeMsg(dc *msgp.Reader) (err error) {
delete((*z), key) delete((*z), key)
} }
} }
var field []byte
_ = field
for zb0004 > 0 { for zb0004 > 0 {
zb0004-- zb0004--
var zb0001 string var zb0001 string
@ -30,8 +32,6 @@ func (z *DailyAllTierStats) DecodeMsg(dc *msgp.Reader) (err error) {
err = msgp.WrapError(err) err = msgp.WrapError(err)
return return
} }
var field []byte
_ = field
var zb0005 uint32 var zb0005 uint32
zb0005, err = dc.ReadMapHeader() zb0005, err = dc.ReadMapHeader()
if err != nil { if err != nil {
@ -167,6 +167,8 @@ func (z *DailyAllTierStats) UnmarshalMsg(bts []byte) (o []byte, err error) {
delete((*z), key) delete((*z), key)
} }
} }
var field []byte
_ = field
for zb0004 > 0 { for zb0004 > 0 {
var zb0001 string var zb0001 string
var zb0002 lastDayTierStats var zb0002 lastDayTierStats
@ -176,8 +178,6 @@ func (z *DailyAllTierStats) UnmarshalMsg(bts []byte) (o []byte, err error) {
err = msgp.WrapError(err) err = msgp.WrapError(err)
return return
} }
var field []byte
_ = field
var zb0005 uint32 var zb0005 uint32
zb0005, bts, err = msgp.ReadMapHeaderBytes(bts) zb0005, bts, err = msgp.ReadMapHeaderBytes(bts)
if err != nil { if err != nil {

View File

@ -648,7 +648,7 @@ func (z *ObjectPartInfo) DecodeMsg(dc *msgp.Reader) (err error) {
// EncodeMsg implements msgp.Encodable // EncodeMsg implements msgp.Encodable
func (z *ObjectPartInfo) EncodeMsg(en *msgp.Writer) (err error) { func (z *ObjectPartInfo) EncodeMsg(en *msgp.Writer) (err error) {
// omitempty: check for empty values // check for omitted fields
zb0001Len := uint32(7) zb0001Len := uint32(7)
var zb0001Mask uint8 /* 7 bits */ var zb0001Mask uint8 /* 7 bits */
_ = zb0001Mask _ = zb0001Mask
@ -718,7 +718,7 @@ func (z *ObjectPartInfo) EncodeMsg(en *msgp.Writer) (err error) {
err = msgp.WrapError(err, "ModTime") err = msgp.WrapError(err, "ModTime")
return return
} }
if (zb0001Mask & 0x20) == 0 { // if not empty if (zb0001Mask & 0x20) == 0 { // if not omitted
// write "index" // write "index"
err = en.Append(0xa5, 0x69, 0x6e, 0x64, 0x65, 0x78) err = en.Append(0xa5, 0x69, 0x6e, 0x64, 0x65, 0x78)
if err != nil { if err != nil {
@ -730,7 +730,7 @@ func (z *ObjectPartInfo) EncodeMsg(en *msgp.Writer) (err error) {
return return
} }
} }
if (zb0001Mask & 0x40) == 0 { // if not empty if (zb0001Mask & 0x40) == 0 { // if not omitted
// write "crc" // write "crc"
err = en.Append(0xa3, 0x63, 0x72, 0x63) err = en.Append(0xa3, 0x63, 0x72, 0x63)
if err != nil { if err != nil {
@ -760,7 +760,7 @@ func (z *ObjectPartInfo) EncodeMsg(en *msgp.Writer) (err error) {
// MarshalMsg implements msgp.Marshaler // MarshalMsg implements msgp.Marshaler
func (z *ObjectPartInfo) MarshalMsg(b []byte) (o []byte, err error) { func (z *ObjectPartInfo) MarshalMsg(b []byte) (o []byte, err error) {
o = msgp.Require(b, z.Msgsize()) o = msgp.Require(b, z.Msgsize())
// omitempty: check for empty values // check for omitted fields
zb0001Len := uint32(7) zb0001Len := uint32(7)
var zb0001Mask uint8 /* 7 bits */ var zb0001Mask uint8 /* 7 bits */
_ = zb0001Mask _ = zb0001Mask
@ -792,12 +792,12 @@ func (z *ObjectPartInfo) MarshalMsg(b []byte) (o []byte, err error) {
// string "ModTime" // string "ModTime"
o = append(o, 0xa7, 0x4d, 0x6f, 0x64, 0x54, 0x69, 0x6d, 0x65) o = append(o, 0xa7, 0x4d, 0x6f, 0x64, 0x54, 0x69, 0x6d, 0x65)
o = msgp.AppendTime(o, z.ModTime) o = msgp.AppendTime(o, z.ModTime)
if (zb0001Mask & 0x20) == 0 { // if not empty if (zb0001Mask & 0x20) == 0 { // if not omitted
// string "index" // string "index"
o = append(o, 0xa5, 0x69, 0x6e, 0x64, 0x65, 0x78) o = append(o, 0xa5, 0x69, 0x6e, 0x64, 0x65, 0x78)
o = msgp.AppendBytes(o, z.Index) o = msgp.AppendBytes(o, z.Index)
} }
if (zb0001Mask & 0x40) == 0 { // if not empty if (zb0001Mask & 0x40) == 0 { // if not omitted
// string "crc" // string "crc"
o = append(o, 0xa3, 0x63, 0x72, 0x63) o = append(o, 0xa3, 0x63, 0x72, 0x63)
o = msgp.AppendMapHeader(o, uint32(len(z.Checksums))) o = msgp.AppendMapHeader(o, uint32(len(z.Checksums)))

View File

@ -340,7 +340,7 @@ func (z *xlMetaDataDirDecoder) DecodeMsg(dc *msgp.Reader) (err error) {
// EncodeMsg implements msgp.Encodable // EncodeMsg implements msgp.Encodable
func (z *xlMetaDataDirDecoder) EncodeMsg(en *msgp.Writer) (err error) { func (z *xlMetaDataDirDecoder) EncodeMsg(en *msgp.Writer) (err error) {
// omitempty: check for empty values // check for omitted fields
zb0001Len := uint32(1) zb0001Len := uint32(1)
var zb0001Mask uint8 /* 1 bits */ var zb0001Mask uint8 /* 1 bits */
_ = zb0001Mask _ = zb0001Mask
@ -356,7 +356,7 @@ func (z *xlMetaDataDirDecoder) EncodeMsg(en *msgp.Writer) (err error) {
if zb0001Len == 0 { if zb0001Len == 0 {
return return
} }
if (zb0001Mask & 0x1) == 0 { // if not empty if (zb0001Mask & 0x1) == 0 { // if not omitted
// write "V2Obj" // write "V2Obj"
err = en.Append(0xa5, 0x56, 0x32, 0x4f, 0x62, 0x6a) err = en.Append(0xa5, 0x56, 0x32, 0x4f, 0x62, 0x6a)
if err != nil { if err != nil {
@ -387,7 +387,7 @@ func (z *xlMetaDataDirDecoder) EncodeMsg(en *msgp.Writer) (err error) {
// MarshalMsg implements msgp.Marshaler // MarshalMsg implements msgp.Marshaler
func (z *xlMetaDataDirDecoder) MarshalMsg(b []byte) (o []byte, err error) { func (z *xlMetaDataDirDecoder) MarshalMsg(b []byte) (o []byte, err error) {
o = msgp.Require(b, z.Msgsize()) o = msgp.Require(b, z.Msgsize())
// omitempty: check for empty values // check for omitted fields
zb0001Len := uint32(1) zb0001Len := uint32(1)
var zb0001Mask uint8 /* 1 bits */ var zb0001Mask uint8 /* 1 bits */
_ = zb0001Mask _ = zb0001Mask
@ -400,7 +400,7 @@ func (z *xlMetaDataDirDecoder) MarshalMsg(b []byte) (o []byte, err error) {
if zb0001Len == 0 { if zb0001Len == 0 {
return return
} }
if (zb0001Mask & 0x1) == 0 { // if not empty if (zb0001Mask & 0x1) == 0 { // if not omitted
// string "V2Obj" // string "V2Obj"
o = append(o, 0xa5, 0x56, 0x32, 0x4f, 0x62, 0x6a) o = append(o, 0xa5, 0x56, 0x32, 0x4f, 0x62, 0x6a)
if z.ObjectV2 == nil { if z.ObjectV2 == nil {
@ -571,7 +571,7 @@ func (z *xlMetaV2DeleteMarker) DecodeMsg(dc *msgp.Reader) (err error) {
// EncodeMsg implements msgp.Encodable // EncodeMsg implements msgp.Encodable
func (z *xlMetaV2DeleteMarker) EncodeMsg(en *msgp.Writer) (err error) { func (z *xlMetaV2DeleteMarker) EncodeMsg(en *msgp.Writer) (err error) {
// omitempty: check for empty values // check for omitted fields
zb0001Len := uint32(3) zb0001Len := uint32(3)
var zb0001Mask uint8 /* 3 bits */ var zb0001Mask uint8 /* 3 bits */
_ = zb0001Mask _ = zb0001Mask
@ -607,7 +607,7 @@ func (z *xlMetaV2DeleteMarker) EncodeMsg(en *msgp.Writer) (err error) {
err = msgp.WrapError(err, "ModTime") err = msgp.WrapError(err, "ModTime")
return return
} }
if (zb0001Mask & 0x4) == 0 { // if not empty if (zb0001Mask & 0x4) == 0 { // if not omitted
// write "MetaSys" // write "MetaSys"
err = en.Append(0xa7, 0x4d, 0x65, 0x74, 0x61, 0x53, 0x79, 0x73) err = en.Append(0xa7, 0x4d, 0x65, 0x74, 0x61, 0x53, 0x79, 0x73)
if err != nil { if err != nil {
@ -637,7 +637,7 @@ func (z *xlMetaV2DeleteMarker) EncodeMsg(en *msgp.Writer) (err error) {
// MarshalMsg implements msgp.Marshaler // MarshalMsg implements msgp.Marshaler
func (z *xlMetaV2DeleteMarker) MarshalMsg(b []byte) (o []byte, err error) { func (z *xlMetaV2DeleteMarker) MarshalMsg(b []byte) (o []byte, err error) {
o = msgp.Require(b, z.Msgsize()) o = msgp.Require(b, z.Msgsize())
// omitempty: check for empty values // check for omitted fields
zb0001Len := uint32(3) zb0001Len := uint32(3)
var zb0001Mask uint8 /* 3 bits */ var zb0001Mask uint8 /* 3 bits */
_ = zb0001Mask _ = zb0001Mask
@ -656,7 +656,7 @@ func (z *xlMetaV2DeleteMarker) MarshalMsg(b []byte) (o []byte, err error) {
// string "MTime" // string "MTime"
o = append(o, 0xa5, 0x4d, 0x54, 0x69, 0x6d, 0x65) o = append(o, 0xa5, 0x4d, 0x54, 0x69, 0x6d, 0x65)
o = msgp.AppendInt64(o, z.ModTime) o = msgp.AppendInt64(o, z.ModTime)
if (zb0001Mask & 0x4) == 0 { // if not empty if (zb0001Mask & 0x4) == 0 { // if not omitted
// string "MetaSys" // string "MetaSys"
o = append(o, 0xa7, 0x4d, 0x65, 0x74, 0x61, 0x53, 0x79, 0x73) o = append(o, 0xa7, 0x4d, 0x65, 0x74, 0x61, 0x53, 0x79, 0x73)
o = msgp.AppendMapHeader(o, uint32(len(z.MetaSys))) o = msgp.AppendMapHeader(o, uint32(len(z.MetaSys)))
@ -879,7 +879,7 @@ func (z *xlMetaV2Object) DecodeMsg(dc *msgp.Reader) (err error) {
err = msgp.WrapError(err, "PartETags") err = msgp.WrapError(err, "PartETags")
return return
} }
if cap(z.PartETags) >= int(zb0006) { if z.PartETags != nil && cap(z.PartETags) >= int(zb0006) {
z.PartETags = (z.PartETags)[:zb0006] z.PartETags = (z.PartETags)[:zb0006]
} else { } else {
z.PartETags = make([]string, zb0006) z.PartETags = make([]string, zb0006)
@ -926,7 +926,7 @@ func (z *xlMetaV2Object) DecodeMsg(dc *msgp.Reader) (err error) {
err = msgp.WrapError(err, "PartActualSizes") err = msgp.WrapError(err, "PartActualSizes")
return return
} }
if cap(z.PartActualSizes) >= int(zb0008) { if z.PartActualSizes != nil && cap(z.PartActualSizes) >= int(zb0008) {
z.PartActualSizes = (z.PartActualSizes)[:zb0008] z.PartActualSizes = (z.PartActualSizes)[:zb0008]
} else { } else {
z.PartActualSizes = make([]int64, zb0008) z.PartActualSizes = make([]int64, zb0008)
@ -1061,7 +1061,7 @@ func (z *xlMetaV2Object) DecodeMsg(dc *msgp.Reader) (err error) {
// EncodeMsg implements msgp.Encodable // EncodeMsg implements msgp.Encodable
func (z *xlMetaV2Object) EncodeMsg(en *msgp.Writer) (err error) { func (z *xlMetaV2Object) EncodeMsg(en *msgp.Writer) (err error) {
// omitempty: check for empty values // check for omitted fields
zb0001Len := uint32(18) zb0001Len := uint32(18)
var zb0001Mask uint32 /* 18 bits */ var zb0001Mask uint32 /* 18 bits */
_ = zb0001Mask _ = zb0001Mask
@ -1256,7 +1256,7 @@ func (z *xlMetaV2Object) EncodeMsg(en *msgp.Writer) (err error) {
} }
} }
} }
if (zb0001Mask & 0x2000) == 0 { // if not empty if (zb0001Mask & 0x2000) == 0 { // if not omitted
// write "PartIdx" // write "PartIdx"
err = en.Append(0xa7, 0x50, 0x61, 0x72, 0x74, 0x49, 0x64, 0x78) err = en.Append(0xa7, 0x50, 0x61, 0x72, 0x74, 0x49, 0x64, 0x78)
if err != nil { if err != nil {
@ -1359,7 +1359,7 @@ func (z *xlMetaV2Object) EncodeMsg(en *msgp.Writer) (err error) {
// MarshalMsg implements msgp.Marshaler // MarshalMsg implements msgp.Marshaler
func (z *xlMetaV2Object) MarshalMsg(b []byte) (o []byte, err error) { func (z *xlMetaV2Object) MarshalMsg(b []byte) (o []byte, err error) {
o = msgp.Require(b, z.Msgsize()) o = msgp.Require(b, z.Msgsize())
// omitempty: check for empty values // check for omitted fields
zb0001Len := uint32(18) zb0001Len := uint32(18)
var zb0001Mask uint32 /* 18 bits */ var zb0001Mask uint32 /* 18 bits */
_ = zb0001Mask _ = zb0001Mask
@ -1434,7 +1434,7 @@ func (z *xlMetaV2Object) MarshalMsg(b []byte) (o []byte, err error) {
o = msgp.AppendInt64(o, z.PartActualSizes[za0007]) o = msgp.AppendInt64(o, z.PartActualSizes[za0007])
} }
} }
if (zb0001Mask & 0x2000) == 0 { // if not empty if (zb0001Mask & 0x2000) == 0 { // if not omitted
// string "PartIdx" // string "PartIdx"
o = append(o, 0xa7, 0x50, 0x61, 0x72, 0x74, 0x49, 0x64, 0x78) o = append(o, 0xa7, 0x50, 0x61, 0x72, 0x74, 0x49, 0x64, 0x78)
o = msgp.AppendArrayHeader(o, uint32(len(z.PartIndices))) o = msgp.AppendArrayHeader(o, uint32(len(z.PartIndices)))
@ -1596,7 +1596,7 @@ func (z *xlMetaV2Object) UnmarshalMsg(bts []byte) (o []byte, err error) {
err = msgp.WrapError(err, "PartETags") err = msgp.WrapError(err, "PartETags")
return return
} }
if cap(z.PartETags) >= int(zb0006) { if z.PartETags != nil && cap(z.PartETags) >= int(zb0006) {
z.PartETags = (z.PartETags)[:zb0006] z.PartETags = (z.PartETags)[:zb0006]
} else { } else {
z.PartETags = make([]string, zb0006) z.PartETags = make([]string, zb0006)
@ -1639,7 +1639,7 @@ func (z *xlMetaV2Object) UnmarshalMsg(bts []byte) (o []byte, err error) {
err = msgp.WrapError(err, "PartActualSizes") err = msgp.WrapError(err, "PartActualSizes")
return return
} }
if cap(z.PartActualSizes) >= int(zb0008) { if z.PartActualSizes != nil && cap(z.PartActualSizes) >= int(zb0008) {
z.PartActualSizes = (z.PartActualSizes)[:zb0008] z.PartActualSizes = (z.PartActualSizes)[:zb0008]
} else { } else {
z.PartActualSizes = make([]int64, zb0008) z.PartActualSizes = make([]int64, zb0008)
@ -1893,7 +1893,7 @@ func (z *xlMetaV2Version) DecodeMsg(dc *msgp.Reader) (err error) {
// EncodeMsg implements msgp.Encodable // EncodeMsg implements msgp.Encodable
func (z *xlMetaV2Version) EncodeMsg(en *msgp.Writer) (err error) { func (z *xlMetaV2Version) EncodeMsg(en *msgp.Writer) (err error) {
// omitempty: check for empty values // check for omitted fields
zb0001Len := uint32(5) zb0001Len := uint32(5)
var zb0001Mask uint8 /* 5 bits */ var zb0001Mask uint8 /* 5 bits */
_ = zb0001Mask _ = zb0001Mask
@ -1927,7 +1927,7 @@ func (z *xlMetaV2Version) EncodeMsg(en *msgp.Writer) (err error) {
err = msgp.WrapError(err, "Type") err = msgp.WrapError(err, "Type")
return return
} }
if (zb0001Mask & 0x2) == 0 { // if not empty if (zb0001Mask & 0x2) == 0 { // if not omitted
// write "V1Obj" // write "V1Obj"
err = en.Append(0xa5, 0x56, 0x31, 0x4f, 0x62, 0x6a) err = en.Append(0xa5, 0x56, 0x31, 0x4f, 0x62, 0x6a)
if err != nil { if err != nil {
@ -1946,7 +1946,7 @@ func (z *xlMetaV2Version) EncodeMsg(en *msgp.Writer) (err error) {
} }
} }
} }
if (zb0001Mask & 0x4) == 0 { // if not empty if (zb0001Mask & 0x4) == 0 { // if not omitted
// write "V2Obj" // write "V2Obj"
err = en.Append(0xa5, 0x56, 0x32, 0x4f, 0x62, 0x6a) err = en.Append(0xa5, 0x56, 0x32, 0x4f, 0x62, 0x6a)
if err != nil { if err != nil {
@ -1965,7 +1965,7 @@ func (z *xlMetaV2Version) EncodeMsg(en *msgp.Writer) (err error) {
} }
} }
} }
if (zb0001Mask & 0x8) == 0 { // if not empty if (zb0001Mask & 0x8) == 0 { // if not omitted
// write "DelObj" // write "DelObj"
err = en.Append(0xa6, 0x44, 0x65, 0x6c, 0x4f, 0x62, 0x6a) err = en.Append(0xa6, 0x44, 0x65, 0x6c, 0x4f, 0x62, 0x6a)
if err != nil { if err != nil {
@ -2000,7 +2000,7 @@ func (z *xlMetaV2Version) EncodeMsg(en *msgp.Writer) (err error) {
// MarshalMsg implements msgp.Marshaler // MarshalMsg implements msgp.Marshaler
func (z *xlMetaV2Version) MarshalMsg(b []byte) (o []byte, err error) { func (z *xlMetaV2Version) MarshalMsg(b []byte) (o []byte, err error) {
o = msgp.Require(b, z.Msgsize()) o = msgp.Require(b, z.Msgsize())
// omitempty: check for empty values // check for omitted fields
zb0001Len := uint32(5) zb0001Len := uint32(5)
var zb0001Mask uint8 /* 5 bits */ var zb0001Mask uint8 /* 5 bits */
_ = zb0001Mask _ = zb0001Mask
@ -2024,7 +2024,7 @@ func (z *xlMetaV2Version) MarshalMsg(b []byte) (o []byte, err error) {
// string "Type" // string "Type"
o = append(o, 0xa4, 0x54, 0x79, 0x70, 0x65) o = append(o, 0xa4, 0x54, 0x79, 0x70, 0x65)
o = msgp.AppendUint8(o, uint8(z.Type)) o = msgp.AppendUint8(o, uint8(z.Type))
if (zb0001Mask & 0x2) == 0 { // if not empty if (zb0001Mask & 0x2) == 0 { // if not omitted
// string "V1Obj" // string "V1Obj"
o = append(o, 0xa5, 0x56, 0x31, 0x4f, 0x62, 0x6a) o = append(o, 0xa5, 0x56, 0x31, 0x4f, 0x62, 0x6a)
if z.ObjectV1 == nil { if z.ObjectV1 == nil {
@ -2037,7 +2037,7 @@ func (z *xlMetaV2Version) MarshalMsg(b []byte) (o []byte, err error) {
} }
} }
} }
if (zb0001Mask & 0x4) == 0 { // if not empty if (zb0001Mask & 0x4) == 0 { // if not omitted
// string "V2Obj" // string "V2Obj"
o = append(o, 0xa5, 0x56, 0x32, 0x4f, 0x62, 0x6a) o = append(o, 0xa5, 0x56, 0x32, 0x4f, 0x62, 0x6a)
if z.ObjectV2 == nil { if z.ObjectV2 == nil {
@ -2050,7 +2050,7 @@ func (z *xlMetaV2Version) MarshalMsg(b []byte) (o []byte, err error) {
} }
} }
} }
if (zb0001Mask & 0x8) == 0 { // if not empty if (zb0001Mask & 0x8) == 0 { // if not omitted
// string "DelObj" // string "DelObj"
o = append(o, 0xa6, 0x44, 0x65, 0x6c, 0x4f, 0x62, 0x6a) o = append(o, 0xa6, 0x44, 0x65, 0x6c, 0x4f, 0x62, 0x6a)
if z.DeleteMarker == nil { if z.DeleteMarker == nil {

View File

@ -38,6 +38,7 @@ func (z *BucketBandwidthReport) DecodeMsg(dc *msgp.Reader) (err error) {
// EncodeMsg implements msgp.Encodable // EncodeMsg implements msgp.Encodable
func (z BucketBandwidthReport) EncodeMsg(en *msgp.Writer) (err error) { func (z BucketBandwidthReport) EncodeMsg(en *msgp.Writer) (err error) {
// map header, size 0 // map header, size 0
_ = z
err = en.Append(0x80) err = en.Append(0x80)
if err != nil { if err != nil {
return return
@ -49,6 +50,7 @@ func (z BucketBandwidthReport) EncodeMsg(en *msgp.Writer) (err error) {
func (z BucketBandwidthReport) MarshalMsg(b []byte) (o []byte, err error) { func (z BucketBandwidthReport) MarshalMsg(b []byte) (o []byte, err error) {
o = msgp.Require(b, z.Msgsize()) o = msgp.Require(b, z.Msgsize())
// map header, size 0 // map header, size 0
_ = z
o = append(o, 0x80) o = append(o, 0x80)
return return
} }

View File

@ -47,6 +47,7 @@ const (
ObjectCreatedDeleteTagging ObjectCreatedDeleteTagging
ObjectRemovedDelete ObjectRemovedDelete
ObjectRemovedDeleteMarkerCreated ObjectRemovedDeleteMarkerCreated
ObjectRemovedDeleteAllVersions
ObjectRemovedNoOP ObjectRemovedNoOP
BucketCreated BucketCreated
BucketRemoved BucketRemoved
@ -100,6 +101,7 @@ func (name Name) Expand() []Name {
ObjectRemovedDelete, ObjectRemovedDelete,
ObjectRemovedDeleteMarkerCreated, ObjectRemovedDeleteMarkerCreated,
ObjectRemovedNoOP, ObjectRemovedNoOP,
ObjectRemovedDeleteAllVersions,
} }
case ObjectReplicationAll: case ObjectReplicationAll:
return []Name{ return []Name{
@ -193,6 +195,8 @@ func (name Name) String() string {
return "s3:ObjectRemoved:DeleteMarkerCreated" return "s3:ObjectRemoved:DeleteMarkerCreated"
case ObjectRemovedNoOP: case ObjectRemovedNoOP:
return "s3:ObjectRemoved:NoOP" return "s3:ObjectRemoved:NoOP"
case ObjectRemovedDeleteAllVersions:
return "s3:ObjectRemoved:DeleteAllVersions"
case ObjectReplicationAll: case ObjectReplicationAll:
return "s3:Replication:*" return "s3:Replication:*"
case ObjectReplicationFailed: case ObjectReplicationFailed:
@ -313,6 +317,8 @@ func ParseName(s string) (Name, error) {
return ObjectRemovedDeleteMarkerCreated, nil return ObjectRemovedDeleteMarkerCreated, nil
case "s3:ObjectRemoved:NoOP": case "s3:ObjectRemoved:NoOP":
return ObjectRemovedNoOP, nil return ObjectRemovedNoOP, nil
case "s3:ObjectRemoved:DeleteAllVersions":
return ObjectRemovedDeleteAllVersions, nil
case "s3:Replication:*": case "s3:Replication:*":
return ObjectReplicationAll, nil return ObjectReplicationAll, nil
case "s3:Replication:OperationFailedReplication": case "s3:Replication:OperationFailedReplication":

View File

@ -36,7 +36,7 @@ func TestNameExpand(t *testing.T) {
ObjectCreatedCompleteMultipartUpload, ObjectCreatedCopy, ObjectCreatedPost, ObjectCreatedPut, ObjectCreatedCompleteMultipartUpload, ObjectCreatedCopy, ObjectCreatedPost, ObjectCreatedPut,
ObjectCreatedPutRetention, ObjectCreatedPutLegalHold, ObjectCreatedPutTagging, ObjectCreatedDeleteTagging, ObjectCreatedPutRetention, ObjectCreatedPutLegalHold, ObjectCreatedPutTagging, ObjectCreatedDeleteTagging,
}}, }},
{ObjectRemovedAll, []Name{ObjectRemovedDelete, ObjectRemovedDeleteMarkerCreated, ObjectRemovedNoOP}}, {ObjectRemovedAll, []Name{ObjectRemovedDelete, ObjectRemovedDeleteMarkerCreated, ObjectRemovedNoOP, ObjectRemovedDeleteAllVersions}},
{ObjectAccessedHead, []Name{ObjectAccessedHead}}, {ObjectAccessedHead, []Name{ObjectAccessedHead}},
} }