Merge pull request #972 from harshavardhana/merge-atomic
fs: use new atomic package - use FileCreateWithPrefix() API
This commit is contained in:
commit
3bdee8e4f6
|
@ -276,7 +276,7 @@ func (fs Filesystem) CreateObjectPart(bucket, object, uploadID, expectedMD5Sum s
|
||||||
|
|
||||||
objectPath := filepath.Join(bucketPath, object)
|
objectPath := filepath.Join(bucketPath, object)
|
||||||
partPath := objectPath + fmt.Sprintf("$%d", partID)
|
partPath := objectPath + fmt.Sprintf("$%d", partID)
|
||||||
partFile, err := atomic.FileCreate(partPath)
|
partFile, err := atomic.FileCreateWithPrefix(partPath, "")
|
||||||
if err != nil {
|
if err != nil {
|
||||||
return "", probe.NewError(err)
|
return "", probe.NewError(err)
|
||||||
}
|
}
|
||||||
|
@ -307,7 +307,6 @@ func (fs Filesystem) CreateObjectPart(bucket, object, uploadID, expectedMD5Sum s
|
||||||
return "", probe.NewError(SignatureDoesNotMatch{})
|
return "", probe.NewError(SignatureDoesNotMatch{})
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
partFile.File.Sync()
|
|
||||||
partFile.Close()
|
partFile.Close()
|
||||||
|
|
||||||
fi, err := os.Stat(partPath)
|
fi, err := os.Stat(partPath)
|
||||||
|
@ -374,7 +373,7 @@ func (fs Filesystem) CompleteMultipartUpload(bucket, object, uploadID string, da
|
||||||
}
|
}
|
||||||
|
|
||||||
objectPath := filepath.Join(bucketPath, object)
|
objectPath := filepath.Join(bucketPath, object)
|
||||||
file, err := atomic.FileCreate(objectPath)
|
file, err := atomic.FileCreateWithPrefix(objectPath, "")
|
||||||
if err != nil {
|
if err != nil {
|
||||||
return ObjectMetadata{}, probe.NewError(err)
|
return ObjectMetadata{}, probe.NewError(err)
|
||||||
}
|
}
|
||||||
|
@ -430,7 +429,6 @@ func (fs Filesystem) CompleteMultipartUpload(bucket, object, uploadID string, da
|
||||||
file.CloseAndPurge()
|
file.CloseAndPurge()
|
||||||
return ObjectMetadata{}, err.Trace()
|
return ObjectMetadata{}, err.Trace()
|
||||||
}
|
}
|
||||||
file.File.Sync()
|
|
||||||
file.Close()
|
file.Close()
|
||||||
|
|
||||||
st, err := os.Stat(objectPath)
|
st, err := os.Stat(objectPath)
|
||||||
|
|
|
@ -207,7 +207,7 @@ func (fs Filesystem) CreateObject(bucket, object, expectedMD5Sum string, size in
|
||||||
}
|
}
|
||||||
|
|
||||||
// write object
|
// write object
|
||||||
file, err := atomic.FileCreate(objectPath)
|
file, err := atomic.FileCreateWithPrefix(objectPath, "")
|
||||||
if err != nil {
|
if err != nil {
|
||||||
return ObjectMetadata{}, probe.NewError(err)
|
return ObjectMetadata{}, probe.NewError(err)
|
||||||
}
|
}
|
||||||
|
@ -250,7 +250,6 @@ func (fs Filesystem) CreateObject(bucket, object, expectedMD5Sum string, size in
|
||||||
return ObjectMetadata{}, probe.NewError(SignatureDoesNotMatch{})
|
return ObjectMetadata{}, probe.NewError(SignatureDoesNotMatch{})
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
file.File.Sync()
|
|
||||||
file.Close()
|
file.Close()
|
||||||
|
|
||||||
st, err := os.Stat(objectPath)
|
st, err := os.Stat(objectPath)
|
||||||
|
|
13
vendor/github.com/minio/minio-xl/pkg/atomic/atomic.go
generated
vendored
13
vendor/github.com/minio/minio-xl/pkg/atomic/atomic.go
generated
vendored
|
@ -33,6 +33,11 @@ type File struct {
|
||||||
|
|
||||||
// Close the file replacing, returns an error if any
|
// Close the file replacing, returns an error if any
|
||||||
func (f *File) Close() error {
|
func (f *File) Close() error {
|
||||||
|
// sync to the disk
|
||||||
|
err := f.Sync()
|
||||||
|
if err != nil {
|
||||||
|
return err
|
||||||
|
}
|
||||||
// close the embedded fd
|
// close the embedded fd
|
||||||
if err := f.File.Close(); err != nil {
|
if err := f.File.Close(); err != nil {
|
||||||
return err
|
return err
|
||||||
|
@ -58,12 +63,18 @@ func (f *File) CloseAndPurge() error {
|
||||||
|
|
||||||
// FileCreate creates a new file at filePath for atomic writes, it also creates parent directories if they don't exist
|
// FileCreate creates a new file at filePath for atomic writes, it also creates parent directories if they don't exist
|
||||||
func FileCreate(filePath string) (*File, error) {
|
func FileCreate(filePath string) (*File, error) {
|
||||||
|
return FileCreateWithPrefix(filePath, "$deleteme.")
|
||||||
|
}
|
||||||
|
|
||||||
|
// FileCreateWithPrefix creates a new file at filePath for atomic writes, it also creates parent directories if they don't exist
|
||||||
|
// prefix specifies the prefix of the temporary files so that cleaning stale temp files is easy
|
||||||
|
func FileCreateWithPrefix(filePath string, prefix string) (*File, error) {
|
||||||
// if parent directories do not exist, ioutil.TempFile doesn't create them
|
// if parent directories do not exist, ioutil.TempFile doesn't create them
|
||||||
// handle such a case with os.MkdirAll()
|
// handle such a case with os.MkdirAll()
|
||||||
if err := os.MkdirAll(filepath.Dir(filePath), 0700); err != nil {
|
if err := os.MkdirAll(filepath.Dir(filePath), 0700); err != nil {
|
||||||
return nil, err
|
return nil, err
|
||||||
}
|
}
|
||||||
f, err := ioutil.TempFile(filepath.Dir(filePath), filepath.Base(filePath))
|
f, err := ioutil.TempFile(filepath.Dir(filePath), prefix+filepath.Base(filePath))
|
||||||
if err != nil {
|
if err != nil {
|
||||||
return nil, err
|
return nil, err
|
||||||
}
|
}
|
||||||
|
|
11
vendor/github.com/minio/minio-xl/pkg/quick/quick.go
generated
vendored
11
vendor/github.com/minio/minio-xl/pkg/quick/quick.go
generated
vendored
|
@ -30,6 +30,7 @@ import (
|
||||||
"sync"
|
"sync"
|
||||||
|
|
||||||
"github.com/fatih/structs"
|
"github.com/fatih/structs"
|
||||||
|
"github.com/minio/minio-xl/pkg/atomic"
|
||||||
"github.com/minio/minio-xl/pkg/probe"
|
"github.com/minio/minio-xl/pkg/probe"
|
||||||
)
|
)
|
||||||
|
|
||||||
|
@ -193,7 +194,15 @@ func (d config) Save(filename string) *probe.Error {
|
||||||
jsonData = []byte(strings.Replace(string(jsonData), "\n", "\r\n", -1))
|
jsonData = []byte(strings.Replace(string(jsonData), "\n", "\r\n", -1))
|
||||||
}
|
}
|
||||||
|
|
||||||
err = ioutil.WriteFile(filename, jsonData, 0600)
|
atomicFile, err := atomic.FileCreate(filename)
|
||||||
|
if err != nil {
|
||||||
|
return probe.NewError(err)
|
||||||
|
}
|
||||||
|
_, err = atomicFile.Write(jsonData)
|
||||||
|
if err != nil {
|
||||||
|
return probe.NewError(err)
|
||||||
|
}
|
||||||
|
err = atomicFile.Close()
|
||||||
if err != nil {
|
if err != nil {
|
||||||
return probe.NewError(err)
|
return probe.NewError(err)
|
||||||
}
|
}
|
||||||
|
|
8
vendor/vendor.json
vendored
8
vendor/vendor.json
vendored
|
@ -39,8 +39,8 @@
|
||||||
},
|
},
|
||||||
{
|
{
|
||||||
"path": "github.com/minio/minio-xl/pkg/atomic",
|
"path": "github.com/minio/minio-xl/pkg/atomic",
|
||||||
"revision": "a5fc6d2430ba2ebcab31b938ab02a42bac85dc2e",
|
"revision": "008404af67dcf66bdde580245cd43951b425ed39",
|
||||||
"revisionTime": "2015-10-20T11:16:42-07:00"
|
"revisionTime": "2015-11-17T16:21:42-08:00"
|
||||||
},
|
},
|
||||||
{
|
{
|
||||||
"path": "github.com/minio/minio-xl/pkg/cpu",
|
"path": "github.com/minio/minio-xl/pkg/cpu",
|
||||||
|
@ -69,8 +69,8 @@
|
||||||
},
|
},
|
||||||
{
|
{
|
||||||
"path": "github.com/minio/minio-xl/pkg/quick",
|
"path": "github.com/minio/minio-xl/pkg/quick",
|
||||||
"revision": "a5fc6d2430ba2ebcab31b938ab02a42bac85dc2e",
|
"revision": "008404af67dcf66bdde580245cd43951b425ed39",
|
||||||
"revisionTime": "2015-10-20T11:16:42-07:00"
|
"revisionTime": "2015-11-17T16:21:42-08:00"
|
||||||
},
|
},
|
||||||
{
|
{
|
||||||
"path": "github.com/rs/cors",
|
"path": "github.com/rs/cors",
|
||||||
|
|
Loading…
Reference in a new issue