beegfs/fsck/source/components/worker/RetrieveChunksWork.h
2025-08-10 01:34:16 +02:00

58 lines
1.7 KiB
C++

#ifndef RETRIEVECHUNKSWORK_H
#define RETRIEVECHUNKSWORK_H
/*
* retrieve all chunks from one storage server and save them to DB
*/
#include <common/app/log/LogContext.h>
#include <common/components/worker/Work.h>
#include <common/threading/Barrier.h>
#include <common/toolkit/SynchronizedCounter.h>
#include <database/FsckDB.h>
#include <database/FsckDBTable.h>
// the size of one response packet, i.e. how many chunks are asked for at once
#define RETRIEVE_CHUNKS_PACKET_SIZE 400
class RetrieveChunksWork : public Work
{
public:
/*
* @param db database instance
* @param node pointer to the node to retrieve data from
* @param counter a pointer to a Synchronized counter; this is incremented by one at the end
* and the calling thread can wait for the counter
* @param numChunksFound
* @param forceRestart In case the storage servers' chunk fetchers still have data from a
* previous run, force a restart instead of aborting with an error
*/
RetrieveChunksWork(FsckDB* db, NodeHandle node, SynchronizedCounter* counter,
AtomicUInt64* numChunksFound, bool forceRestart);
virtual ~RetrieveChunksWork();
void process(char* bufIn, unsigned bufInLen, char* bufOut, unsigned bufOutLen);
void waitForStarted(bool* isStarted);
private:
LogContext log;
NodeHandle node;
SynchronizedCounter* counter;
AtomicUInt64* numChunksFound;
FsckDBChunksTable* chunks;
FsckDBChunksTable::BulkHandle chunksHandle;
DiskList<FsckChunk>* malformedChunks;
bool forceRestart;
void doWork();
bool started;
Barrier startedBarrier;
};
#endif /* RETRIEVECHUNKSWORK_H */