beegfs/storage/source/toolkit/StorageTkEx.h
2025-08-10 01:34:16 +02:00

65 lines
1.8 KiB
C++

#pragma once
#include <app/config/Config.h>
#include <common/Common.h>
#include <common/fsck/FsckChunk.h>
#include <common/storage/Path.h>
#include <common/storage/Storagedata.h>
#include <common/storage/StorageErrors.h>
#include <common/threading/Mutex.h>
#include <common/toolkit/StorageTk.h>
#include <common/threading/SafeRWLock.h>
#include <dirent.h>
#define STORAGETK_FORMAT_MIN_VERSION 2
#define STORAGETK_FORMAT_CURRENT_VERSION 3
#define MAX_SERIAL_ENTRYINFO_SIZE 4096
#define STORAGETK_DEFAULTCHUNKDIRMODE (S_IRWXU | S_IRWXG | S_IRWXO)
#define STORAGETK_DEFAULTCHUNKFILEMODE (S_IRUSR | S_IWUSR | S_IRGRP | S_IWGRP | S_IROTH | S_IWOTH)
class StorageTkEx
{
private:
StorageTkEx() {}
public:
static bool getDynamicFileAttribs(const int fd, int64_t* outFilesize,
int64_t* outAllocedBlocks, int64_t* outModificationTimeSecs,
int64_t* outLastAccessTimeSecs)
{
struct stat statbuf;
int statRes = fstat(fd, &statbuf);
if (statRes)
return false;
*outFilesize = statbuf.st_size;
*outAllocedBlocks = statbuf.st_blocks;
*outModificationTimeSecs = statbuf.st_mtime;
*outLastAccessTimeSecs = statbuf.st_atime;
return true;
}
static bool getDynamicFileAttribs(const int dirFD, const char* path, int64_t* outFilesize,
int64_t* outAllocedBlocks, int64_t* outModificationTimeSecs,
int64_t* outLastAccessTimeSecs)
{
struct stat statbuf;
int statRes = fstatat(dirFD, path, &statbuf, 0);
if (statRes)
return false;
*outFilesize = statbuf.st_size;
*outAllocedBlocks = statbuf.st_blocks;
*outModificationTimeSecs = statbuf.st_mtime;
*outLastAccessTimeSecs = statbuf.st_atime;
return true;
}
};