New upstream version 8.1.0
This commit is contained in:
67
meta/source/net/message/storage/creating/RmDirEntryMsgEx.cpp
Normal file
67
meta/source/net/message/storage/creating/RmDirEntryMsgEx.cpp
Normal file
@@ -0,0 +1,67 @@
|
||||
#include <program/Program.h>
|
||||
#include <common/net/message/storage/creating/RmDirEntryRespMsg.h>
|
||||
#include <common/toolkit/MessagingTk.h>
|
||||
#include "RmDirEntryMsgEx.h"
|
||||
|
||||
bool RmDirEntryMsgEx::processIncoming(ResponseContext& ctx)
|
||||
{
|
||||
EntryInfo* parentInfo = getParentInfo();
|
||||
std::string entryName = getEntryName();
|
||||
|
||||
FhgfsOpsErr rmRes = rmDirEntry(parentInfo, entryName);
|
||||
|
||||
ctx.sendResponse(RmDirEntryRespMsg(rmRes) );
|
||||
|
||||
App* app = Program::getApp();
|
||||
app->getNodeOpStats()->updateNodeOp(ctx.getSocket()->getPeerIP(), MetaOpCounter_RMLINK,
|
||||
getMsgHeaderUserID() );
|
||||
|
||||
return true;
|
||||
}
|
||||
|
||||
FhgfsOpsErr RmDirEntryMsgEx::rmDirEntry(EntryInfo* parentInfo, std::string& entryName)
|
||||
{
|
||||
const char* logContext = "RmDirEntryMsg (rm entry)";
|
||||
|
||||
MetaStore* metaStore = Program::getApp()->getMetaStore();
|
||||
|
||||
FhgfsOpsErr retVal;
|
||||
|
||||
|
||||
// reference parent
|
||||
DirInode* parentDir = metaStore->referenceDir(parentInfo->getEntryID(),
|
||||
parentInfo->getIsBuddyMirrored(), true);
|
||||
if(!parentDir)
|
||||
return FhgfsOpsErr_PATHNOTEXISTS;
|
||||
|
||||
DirEntry removeDentry(entryName);
|
||||
bool getRes = parentDir->getDentry(entryName, removeDentry);
|
||||
if(!getRes)
|
||||
retVal = FhgfsOpsErr_PATHNOTEXISTS;
|
||||
else
|
||||
{
|
||||
if(DirEntryType_ISDIR(removeDentry.getEntryType() ) )
|
||||
{ // remove dir link
|
||||
retVal = parentDir->removeDir(entryName, NULL);
|
||||
}
|
||||
else
|
||||
if(DirEntryType_ISFILE(removeDentry.getEntryType() ) )
|
||||
{
|
||||
retVal = parentDir->unlinkDirEntry(entryName, &removeDentry,
|
||||
DirEntry_UNLINK_ID_AND_FILENAME);
|
||||
}
|
||||
else
|
||||
{ // unknown entry type
|
||||
LogContext(logContext).logErr(std::string("Unknown entry type: ") +
|
||||
StringTk::intToStr(removeDentry.getEntryType() ) );
|
||||
|
||||
retVal = FhgfsOpsErr_INTERNAL;
|
||||
}
|
||||
}
|
||||
|
||||
// clean-up
|
||||
metaStore->releaseDir(parentInfo->getEntryID() );
|
||||
|
||||
return retVal;
|
||||
}
|
||||
|
||||
Reference in New Issue
Block a user