New upstream version 8.1.0
This commit is contained in:
53
storage/source/net/message/fsck/FetchFsckChunkListMsgEx.cpp
Normal file
53
storage/source/net/message/fsck/FetchFsckChunkListMsgEx.cpp
Normal file
@@ -0,0 +1,53 @@
|
||||
#include "FetchFsckChunkListMsgEx.h"
|
||||
|
||||
#include <program/Program.h>
|
||||
|
||||
bool FetchFsckChunkListMsgEx::processIncoming(ResponseContext& ctx)
|
||||
{
|
||||
App* app = Program::getApp();
|
||||
ChunkFetcher* chunkFetcher = app->getChunkFetcher();
|
||||
|
||||
FetchFsckChunkListStatus status;
|
||||
FsckChunkList chunkList;
|
||||
|
||||
if (getLastStatus() == FetchFsckChunkListStatus_NOTSTARTED)
|
||||
{
|
||||
// This is the first message of a new Fsck run
|
||||
if (chunkFetcher->getNumRunning() != 0 || !chunkFetcher->isQueueEmpty())
|
||||
{
|
||||
// another fsck is already in progress
|
||||
if (!getForceRestart())
|
||||
{
|
||||
LOG(GENERAL, NOTICE, "Received request to start fsck although previous run is not finished. "
|
||||
"Not starting.", ("From", ctx.peerName()));
|
||||
|
||||
ctx.sendResponse(FetchFsckChunkListRespMsg(&chunkList,
|
||||
FetchFsckChunkListStatus_NOTSTARTED));
|
||||
return true;
|
||||
}
|
||||
else
|
||||
{
|
||||
LOG(GENERAL, NOTICE, "Aborting previous fsck chunk fetcher run by user request.",
|
||||
("From", ctx.peerName()));
|
||||
|
||||
chunkFetcher->stopFetching();
|
||||
chunkFetcher->waitForStopFetching();
|
||||
}
|
||||
}
|
||||
|
||||
chunkFetcher->startFetching();
|
||||
}
|
||||
|
||||
|
||||
if(chunkFetcher->getIsBad())
|
||||
status = FetchFsckChunkListStatus_READERROR;
|
||||
else if (chunkFetcher->getNumRunning() == 0)
|
||||
status = FetchFsckChunkListStatus_FINISHED;
|
||||
else
|
||||
status = FetchFsckChunkListStatus_RUNNING;
|
||||
|
||||
chunkFetcher->getAndDeleteChunks(chunkList, getMaxNumChunks());
|
||||
|
||||
ctx.sendResponse(FetchFsckChunkListRespMsg(&chunkList, status));
|
||||
return true;
|
||||
}
|
||||
Reference in New Issue
Block a user