mirror of
https://github.com/minio/minio.git
synced 2024-12-24 22:25:54 -05:00
fix: avoid an extra rename when there is no dataDir (#11964)
also perform globalSync() in defer when enabled for RenameData(), to ensure all calls are flushed to disk.
This commit is contained in:
parent
09ee303244
commit
5cce9361bc
@ -1143,6 +1143,7 @@ func (s *xlStorage) readAllData(volumeDir string, filePath string, requireDirect
|
|||||||
if err != nil {
|
if err != nil {
|
||||||
err = osErrToFileErr(err)
|
err = osErrToFileErr(err)
|
||||||
}
|
}
|
||||||
|
|
||||||
return buf, err
|
return buf, err
|
||||||
}
|
}
|
||||||
|
|
||||||
@ -1811,6 +1812,14 @@ func (s *xlStorage) Delete(ctx context.Context, volume string, path string, recu
|
|||||||
|
|
||||||
// RenameData - rename source path to destination path atomically, metadata and data directory.
|
// RenameData - rename source path to destination path atomically, metadata and data directory.
|
||||||
func (s *xlStorage) RenameData(ctx context.Context, srcVolume, srcPath, dataDir, dstVolume, dstPath string) (err error) {
|
func (s *xlStorage) RenameData(ctx context.Context, srcVolume, srcPath, dataDir, dstVolume, dstPath string) (err error) {
|
||||||
|
defer func() {
|
||||||
|
if err == nil {
|
||||||
|
if s.globalSync {
|
||||||
|
globalSync()
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}()
|
||||||
|
|
||||||
srcVolumeDir, err := s.getVolDir(srcVolume)
|
srcVolumeDir, err := s.getVolDir(srcVolume)
|
||||||
if err != nil {
|
if err != nil {
|
||||||
return err
|
return err
|
||||||
@ -1984,11 +1993,6 @@ func (s *xlStorage) RenameData(ctx context.Context, srcVolume, srcPath, dataDir,
|
|||||||
return osErrToFileErr(err)
|
return osErrToFileErr(err)
|
||||||
}
|
}
|
||||||
|
|
||||||
if s.globalSync {
|
|
||||||
// Sync all the previous directory operations.
|
|
||||||
globalSync()
|
|
||||||
}
|
|
||||||
|
|
||||||
for _, entry := range entries {
|
for _, entry := range entries {
|
||||||
// Skip xl.meta renames further, also ignore any directories such as `legacyDataDir`
|
// Skip xl.meta renames further, also ignore any directories such as `legacyDataDir`
|
||||||
if entry == xlStorageFormatFile || strings.HasSuffix(entry, slashSeparator) {
|
if entry == xlStorageFormatFile || strings.HasSuffix(entry, slashSeparator) {
|
||||||
@ -1999,11 +2003,6 @@ func (s *xlStorage) RenameData(ctx context.Context, srcVolume, srcPath, dataDir,
|
|||||||
return osErrToFileErr(err)
|
return osErrToFileErr(err)
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
// Sync all the metadata operations once renames are done.
|
|
||||||
if s.globalSync {
|
|
||||||
globalSync()
|
|
||||||
}
|
|
||||||
}
|
}
|
||||||
|
|
||||||
var oldDstDataPath string
|
var oldDstDataPath string
|
||||||
@ -2032,13 +2031,12 @@ func (s *xlStorage) RenameData(ctx context.Context, srcVolume, srcPath, dataDir,
|
|||||||
return err
|
return err
|
||||||
}
|
}
|
||||||
|
|
||||||
if oldDstDataPath != "" {
|
|
||||||
renameAll(oldDstDataPath, pathutil.Join(s.diskPath, minioMetaTmpDeletedBucket, mustGetUUID()))
|
|
||||||
}
|
|
||||||
renameAll(dstDataPath, pathutil.Join(s.diskPath, minioMetaTmpDeletedBucket, mustGetUUID()))
|
|
||||||
|
|
||||||
// renameAll only for objects that have xl.meta not saved inline.
|
// renameAll only for objects that have xl.meta not saved inline.
|
||||||
if len(fi.Data) == 0 && fi.Size > 0 {
|
if len(fi.Data) == 0 && fi.Size > 0 {
|
||||||
|
if oldDstDataPath != "" {
|
||||||
|
renameAll(oldDstDataPath, pathutil.Join(s.diskPath, minioMetaTmpDeletedBucket, mustGetUUID()))
|
||||||
|
}
|
||||||
|
renameAll(dstDataPath, pathutil.Join(s.diskPath, minioMetaTmpDeletedBucket, mustGetUUID()))
|
||||||
if err = renameAll(srcDataPath, dstDataPath); err != nil {
|
if err = renameAll(srcDataPath, dstDataPath); err != nil {
|
||||||
logger.LogIf(ctx, err)
|
logger.LogIf(ctx, err)
|
||||||
return osErrToFileErr(err)
|
return osErrToFileErr(err)
|
||||||
|
Loading…
Reference in New Issue
Block a user