beegfs/client_module/source/common/nodes/MirrorBuddyGroupMapper.h
2025-08-10 01:34:16 +02:00

48 lines
2.0 KiB
C

#ifndef MIRRORBUDDYGROUPMAPPER_H_
#define MIRRORBUDDYGROUPMAPPER_H_
#include <app/config/Config.h>
#include <common/nodes/TargetMapper.h>
#include <common/nodes/MirrorBuddyGroup.h>
#include <common/threading/RWLock.h>
#include <common/toolkit/list/UInt16ListIter.h>
#include <common/toolkit/StringTk.h>
#include <common/storage/StorageErrors.h>
struct MirrorBuddyGroupMapper;
typedef struct MirrorBuddyGroupMapper MirrorBuddyGroupMapper;
extern void MirrorBuddyGroupMapper_init(MirrorBuddyGroupMapper* this);
extern MirrorBuddyGroupMapper* MirrorBuddyGroupMapper_construct(void);
extern void MirrorBuddyGroupMapper_uninit(MirrorBuddyGroupMapper* this);
extern void MirrorBuddyGroupMapper_destruct(MirrorBuddyGroupMapper* this);
extern uint16_t MirrorBuddyGroupMapper_getPrimaryTargetID(MirrorBuddyGroupMapper* this,
uint16_t mirrorBuddyGroupID);
extern uint16_t MirrorBuddyGroupMapper_getSecondaryTargetID(MirrorBuddyGroupMapper* this,
uint16_t mirrorBuddyGroupID);
extern int MirrorBuddyGroupMapper_acquireSequenceNumber(MirrorBuddyGroupMapper* this,
uint16_t mirrorBuddyGroupID, uint64_t* seqNo, uint64_t* finishedSeqNo, bool* isSelective,
struct BuddySequenceNumber** handle, struct MirrorBuddyGroup** group);
extern void MirrorBuddyGroupMapper_syncGroups(MirrorBuddyGroupMapper* this,
Config* config, struct list_head* groups);
extern FhgfsOpsErr MirrorBuddyGroupMapper_addGroup(MirrorBuddyGroupMapper* this,
Config* config, TargetMapper* targetMapper, uint16_t buddyGroupID, uint16_t primaryTargetID,
uint16_t secondaryTargetID, bool allowUpdate);
extern uint16_t __MirrorBuddyGroupMapper_getBuddyGroupIDUnlocked(MirrorBuddyGroupMapper* this,
uint16_t targetID);
extern void __MirrorBuddyGroupMapper_syncGroupsUnlocked(MirrorBuddyGroupMapper* this,
Config* config, struct list_head* groups);
struct MirrorBuddyGroupMapper
{
// friend class TargetStateStore; // for atomic update of state change plus mirror group switch
RWLock rwlock;
struct rb_root mirrorBuddyGroups; /* struct MirrorBuddyGroup */
};
#endif /* MIRRORBUDDYGROUPMAPPER_H_ */