Filter out internal object prefix during listing (#4435)

We use ZZZZ-Minio/ prefix internally in our GCS gateway which should be
filtered out in the response to ListObjects.
master
Krishnan Parthasarathi 8 years ago committed by Harshavardhana
parent 9bd0eb1a9e
commit 8085ba4494
  1. 9
      cmd/gateway-gcs.go
  2. 35
      cmd/gateway-gcs_test.go

@ -44,6 +44,11 @@ const (
ZZZZMinioPrefix = "ZZZZ-Minio" ZZZZMinioPrefix = "ZZZZ-Minio"
) )
// Check if object prefix is "ZZZZ_Minio".
func isGCSPrefix(prefix string) bool {
return strings.TrimSuffix(prefix, slashSeparator) == ZZZZMinioPrefix
}
// Convert Minio errors to minio object layer errors. // Convert Minio errors to minio object layer errors.
func gcsToObjectError(err error, params ...string) error { func gcsToObjectError(err error, params ...string) error {
if err == nil { if err == nil {
@ -325,7 +330,7 @@ func (l *gcsGateway) ListObjects(bucket string, prefix string, marker string, de
attrs, _ := it.Next() attrs, _ := it.Next()
if attrs == nil { if attrs == nil {
} else if attrs.Prefix == ZZZZMinioPrefix { } else if isGCSPrefix(attrs.Prefix) {
break break
} }
@ -342,7 +347,7 @@ func (l *gcsGateway) ListObjects(bucket string, prefix string, marker string, de
nextMarker = toGCSPageToken(attrs.Name) nextMarker = toGCSPageToken(attrs.Name)
if attrs.Prefix == ZZZZMinioPrefix { if isGCSPrefix(attrs.Prefix) {
// we don't return our metadata prefix // we don't return our metadata prefix
continue continue
} else if attrs.Prefix != "" { } else if attrs.Prefix != "" {

@ -129,3 +129,38 @@ func TestValidGCSProjectID(t *testing.T) {
} }
} }
} }
// Test for isGCSPrefix
func TestIsGCSPrefix(t *testing.T) {
testCases := []struct {
prefix string
expectedRes bool
}{
// Regular prefix without a trailing slash
{
prefix: "hello",
expectedRes: false,
},
// Regular prefix with a trailing slash
{
prefix: "hello/",
expectedRes: false,
},
// GCS prefix without a trailing slash
{
prefix: ZZZZMinioPrefix,
expectedRes: true,
},
// GCS prefix with a trailing slash
{
prefix: ZZZZMinioPrefix + "/",
expectedRes: true,
},
}
for i, tc := range testCases {
if actualRes := isGCSPrefix(tc.prefix); actualRes != tc.expectedRes {
t.Errorf("%d: Expected isGCSPrefix to return %v but got %v", i, tc.expectedRes, actualRes)
}
}
}

Loading…
Cancel
Save