mirror of
https://github.com/minio/minio.git
synced 2025-11-30 13:42:53 -05:00
Metadata and writing the object are now both committed together.
This commit is contained in:
@@ -14,13 +14,58 @@ type DonutBox interface {
|
||||
SetBucketMetadata(bucket string, metadata map[string]string) error
|
||||
|
||||
// object operations
|
||||
GetObjectWriter(bucket, object string, column, blockSize uint) *io.PipeWriter
|
||||
GetObjectReader(bucket, object string, column int) (io.Reader, error)
|
||||
SetObjectMetadata(bucket, object string, metadata map[string]string) error
|
||||
GetObjectMetadata(bucket, object string) (map[string]string, error)
|
||||
GetObjectWriter(bucket, object string, column, blockSize uint) (*NewObject, error)
|
||||
GetObjectReader(bucket, object string, column uint) (io.Reader, error)
|
||||
GetObjectMetadata(bucket, object string, column uint) (map[string]string, error)
|
||||
}
|
||||
|
||||
// Result is a result for async tasks
|
||||
type Result struct {
|
||||
Err error
|
||||
}
|
||||
|
||||
// CreateNewObject creates a new object wrapping a writer. Clients are not expected to use this directly. This is exposed for storage drivers.
|
||||
func CreateNewObject(writer *io.PipeWriter) *NewObject {
|
||||
return &NewObject{writer: writer}
|
||||
}
|
||||
|
||||
// NewObject wraps a writer and allows setting metadata. On a successful close, the object is committed by the backend.
|
||||
type NewObject struct {
|
||||
metadata map[string]string
|
||||
writer *io.PipeWriter
|
||||
}
|
||||
|
||||
// Write data
|
||||
func (newObject *NewObject) Write(data []byte) (int, error) {
|
||||
return newObject.writer.Write(data)
|
||||
}
|
||||
|
||||
// SetMetadata sets metadata for an object
|
||||
func (newObject *NewObject) SetMetadata(metadata map[string]string) {
|
||||
newMetadata := make(map[string]string)
|
||||
for k, v := range metadata {
|
||||
newMetadata[k] = v
|
||||
}
|
||||
newObject.metadata = newMetadata
|
||||
}
|
||||
|
||||
// Close and commit the object
|
||||
func (newObject *NewObject) Close() error {
|
||||
return newObject.writer.Close()
|
||||
}
|
||||
|
||||
// CloseWithError closes the object with an error, causing the backend to abandon the object
|
||||
func (newObject *NewObject) CloseWithError(err error) error {
|
||||
return newObject.writer.CloseWithError(err)
|
||||
}
|
||||
|
||||
// GetMetadata returns a copy of the metadata set metadata
|
||||
func (newObject *NewObject) GetMetadata() map[string]string {
|
||||
newMetadata := make(map[string]string)
|
||||
if newMetadata != nil {
|
||||
for k, v := range newObject.metadata {
|
||||
newMetadata[k] = v
|
||||
}
|
||||
}
|
||||
return newMetadata
|
||||
}
|
||||
|
||||
Reference in New Issue
Block a user