mirror of
https://github.com/minio/minio.git
synced 2024-12-24 06:05:55 -05:00
fix: s3zip in fs mode (#13758)
The index was converted directly from bytes to binary. This would fail a roundtrip through json. This would result in `Error: invalid input: magic number mismatch` when reading back. On non-erasure backends store index as base64.
This commit is contained in:
parent
a5db4ca092
commit
34dc725d26
@ -20,6 +20,7 @@ package cmd
|
|||||||
import (
|
import (
|
||||||
"bytes"
|
"bytes"
|
||||||
"context"
|
"context"
|
||||||
|
"encoding/base64"
|
||||||
"errors"
|
"errors"
|
||||||
"fmt"
|
"fmt"
|
||||||
"io"
|
"io"
|
||||||
@ -142,8 +143,15 @@ func (api objectAPIHandlers) getObjectInArchiveFileHandler(ctx context.Context,
|
|||||||
var zipInfo []byte
|
var zipInfo []byte
|
||||||
|
|
||||||
if z, ok := zipObjInfo.UserDefined[archiveInfoMetadataKey]; ok {
|
if z, ok := zipObjInfo.UserDefined[archiveInfoMetadataKey]; ok {
|
||||||
zipInfo = []byte(z)
|
if globalIsErasure {
|
||||||
} else {
|
zipInfo = []byte(z)
|
||||||
|
} else {
|
||||||
|
zipInfo, err = base64.StdEncoding.DecodeString(z)
|
||||||
|
logger.LogIf(ctx, err)
|
||||||
|
// Will attempt to re-read...
|
||||||
|
}
|
||||||
|
}
|
||||||
|
if len(zipInfo) == 0 {
|
||||||
zipInfo, err = updateObjectMetadataWithZipInfo(ctx, objectAPI, bucket, zipPath, opts)
|
zipInfo, err = updateObjectMetadataWithZipInfo(ctx, objectAPI, bucket, zipPath, opts)
|
||||||
}
|
}
|
||||||
|
|
||||||
@ -151,7 +159,6 @@ func (api objectAPIHandlers) getObjectInArchiveFileHandler(ctx context.Context,
|
|||||||
writeErrorResponse(ctx, w, toAPIError(ctx, err), r.URL)
|
writeErrorResponse(ctx, w, toAPIError(ctx, err), r.URL)
|
||||||
return
|
return
|
||||||
}
|
}
|
||||||
|
|
||||||
file, err := zipindex.FindSerialized(zipInfo, object)
|
file, err := zipindex.FindSerialized(zipInfo, object)
|
||||||
if err != nil {
|
if err != nil {
|
||||||
if err == io.EOF {
|
if err == io.EOF {
|
||||||
@ -491,7 +498,11 @@ func updateObjectMetadataWithZipInfo(ctx context.Context, objectAPI ObjectLayer,
|
|||||||
}
|
}
|
||||||
|
|
||||||
srcInfo.UserDefined[archiveTypeMetadataKey] = archiveType
|
srcInfo.UserDefined[archiveTypeMetadataKey] = archiveType
|
||||||
srcInfo.UserDefined[archiveInfoMetadataKey] = string(zipInfo)
|
if globalIsErasure {
|
||||||
|
srcInfo.UserDefined[archiveInfoMetadataKey] = string(zipInfo)
|
||||||
|
} else {
|
||||||
|
srcInfo.UserDefined[archiveInfoMetadataKey] = base64.StdEncoding.EncodeToString(zipInfo)
|
||||||
|
}
|
||||||
srcInfo.metadataOnly = true
|
srcInfo.metadataOnly = true
|
||||||
|
|
||||||
// Always update the same version id & modtime
|
// Always update the same version id & modtime
|
||||||
|
Loading…
Reference in New Issue
Block a user