From 31e06e77a206e603bf52bd4a5d4ffaf0e5fb6f98 Mon Sep 17 00:00:00 2001 From: Patrick LeBlanc Date: Thu, 21 May 2020 17:34:36 -0400 Subject: [PATCH] Fixed the fix. Actually need to rename the file after you pick a new name for it LOL! --- storage-manager/src/IOCoordinator.cpp | 9 ++++++++- storage-manager/src/MetadataFile.h | 1 - 2 files changed, 8 insertions(+), 2 deletions(-) diff --git a/storage-manager/src/IOCoordinator.cpp b/storage-manager/src/IOCoordinator.cpp index e86ab2c83..86e0a9989 100644 --- a/storage-manager/src/IOCoordinator.cpp +++ b/storage-manager/src/IOCoordinator.cpp @@ -506,8 +506,13 @@ ssize_t IOCoordinator::_write(const boost::filesystem::path &filename, const uin count += err; iocBytesWritten += err; // get a new name for the object + + bf::path oldPath = firstDir/newObject.key; newObject.key = metadata.getNewKeyFromOldKey(newObject.key, err + objectOffset); - metadata.updateEntryLength(newObject.offset, (err + objectOffset)); + ::rename(oldPath.string().c_str(), (firstDir/newObject.key).string().c_str()); + + // rename and resize the object in metadata + metadata.updateEntry(newObject.offset, newObject.key, (err + objectOffset)); cache->newObject(firstDir, newObject.key,err + objectOffset); newObjectKeys.push_back(newObject.key); goto out; @@ -638,7 +643,9 @@ ssize_t IOCoordinator::append(const char *_filename, const uint8_t *data, size_t iocBytesWritten += err; if (err < (int64_t) writeLength) { + bf::path oldPath = firstDir/newObject.key; newObject.key = metadata.getNewKeyFromOldKey(newObject.key, err + newObject.offset); + ::rename(oldPath.string().c_str(), (firstDir/newObject.key).string().c_str()); metadata.updateEntry(newObject.offset, newObject.key, err + newObject.offset); } cache->newObject(firstDir, newObject.key,err); diff --git a/storage-manager/src/MetadataFile.h b/storage-manager/src/MetadataFile.h index bd70a581c..38a36c006 100644 --- a/storage-manager/src/MetadataFile.h +++ b/storage-manager/src/MetadataFile.h @@ -77,7 +77,6 @@ class MetadataFile // removes p from the json cache. p should be a fully qualified metadata file static void deletedMeta(const boost::filesystem::path &p); - // TBD: this may have to go; there may be no use case where only the uuid needs to change. static std::string getNewKeyFromOldKey(const std::string &oldKey, size_t length=0); static std::string getNewKey(std::string sourceName, size_t offset, size_t length); static off_t getOffsetFromKey(const std::string &key);