New upstream version 8.1.0
This commit is contained in:
56
meta/source/net/message/storage/creating/RmLocalDirMsgEx.cpp
Normal file
56
meta/source/net/message/storage/creating/RmLocalDirMsgEx.cpp
Normal file
@@ -0,0 +1,56 @@
|
||||
#include <program/Program.h>
|
||||
#include <common/net/message/storage/creating/RmLocalDirRespMsg.h>
|
||||
#include <common/toolkit/MetaStorageTk.h>
|
||||
|
||||
#include "RmLocalDirMsgEx.h"
|
||||
|
||||
|
||||
std::tuple<HashDirLock, FileIDLock> RmLocalDirMsgEx::lock(EntryLockStore& store)
|
||||
{
|
||||
HashDirLock hashLock;
|
||||
|
||||
// if we are currently under modsync, we must lock the hash dir from which we are removing the
|
||||
// inode. otherwise bulk sync may interfere with mod sync and cause the resync to fail.
|
||||
// do not lock the hash dir if we are removing the inode from the same meta node as the dentry,
|
||||
// RmDir will have already locked the hash dir.
|
||||
if (!rctx->isLocallyGenerated() && resyncJob && resyncJob->isRunning())
|
||||
hashLock = {&store, MetaStorageTk::getMetaInodeHash(getDelEntryInfo()->getEntryID())};
|
||||
|
||||
return std::make_tuple(
|
||||
std::move(hashLock),
|
||||
FileIDLock(&store, getDelEntryInfo()->getEntryID(), true));
|
||||
}
|
||||
|
||||
bool RmLocalDirMsgEx::processIncoming(ResponseContext& ctx)
|
||||
{
|
||||
rctx = &ctx;
|
||||
|
||||
return BaseType::processIncoming(ctx);
|
||||
}
|
||||
|
||||
std::unique_ptr<MirroredMessageResponseState> RmLocalDirMsgEx::executeLocally(ResponseContext& ctx,
|
||||
bool isSecondary)
|
||||
{
|
||||
return rmDir();
|
||||
}
|
||||
|
||||
std::unique_ptr<RmLocalDirMsgEx::ResponseState> RmLocalDirMsgEx::rmDir()
|
||||
{
|
||||
MetaStore* metaStore = Program::getApp()->getMetaStore();
|
||||
|
||||
EntryInfo* delEntryInfo = this->getDelEntryInfo();
|
||||
|
||||
LOG_DEBUG("RmLocalDirMsgEx (rmDir)", Log_DEBUG,
|
||||
"Removing local dir inode: " + delEntryInfo->getFileName() + "; isBuddyMirrored: " +
|
||||
StringTk::intToStr(delEntryInfo->getIsBuddyMirrored()) );
|
||||
|
||||
FhgfsOpsErr res = metaStore->removeDirInode(delEntryInfo->getEntryID(),
|
||||
delEntryInfo->getIsBuddyMirrored());
|
||||
|
||||
return boost::make_unique<ResponseState>(res);
|
||||
}
|
||||
|
||||
void RmLocalDirMsgEx::forwardToSecondary(ResponseContext& ctx)
|
||||
{
|
||||
sendToSecondary(ctx, *this, NETMSGTYPE_RmLocalDirResp);
|
||||
}
|
||||
Reference in New Issue
Block a user