#include "libpmempool.h"
#include "pool.h"
#define UNDEF_REPLICA UINT_MAX
#define UNDEF_PART UINT_MAX
#define IS_BROKEN (1 << 0)
#define IS_INCONSISTENT (1 << 1)
#define IS_TRANSFORMED (1 << 10)
#define REMOTE_NLANES 1
struct replica_health_status {
unsigned nparts;
unsigned nhdrs;
unsigned flags;
size_t pool_size;
unsigned part[];
};
struct poolset_health_status {
unsigned nreplicas;
unsigned flags;
struct replica_health_status *replica[];
};
size_t replica_get_part_data_len(struct pool_set *set_in, unsigned repn,
unsigned partn);
size_t replica_get_part_range_data_len(struct pool_set *set_in, unsigned repn,
unsigned pstart, unsigned pend);
uint64_t replica_get_part_data_offset(struct pool_set *set_in, unsigned repn,
unsigned part);
static inline bool
is_dry_run(unsigned flags)
{
return PMEMPOOL_DRY_RUN & flags;
}
int replica_remove_part(struct pool_set *set, unsigned repn, unsigned partn);
int replica_create_poolset_health_status(struct pool_set *set,
struct poolset_health_status **set_hsp);
void replica_free_poolset_health_status(struct poolset_health_status *set_s);
int replica_check_poolset_health(struct pool_set *set,
struct poolset_health_status **set_hs,
unsigned flags);
int replica_is_part_broken(unsigned repn, unsigned partn,
struct poolset_health_status *set_hs);
unsigned replica_find_unbroken_part(unsigned repn,
struct poolset_health_status *set_hs);
int replica_is_replica_broken(unsigned repn,
struct poolset_health_status *set_hs);
int replica_is_replica_consistent(unsigned repn,
struct poolset_health_status *set_hs);
int replica_is_replica_healthy(unsigned repn,
struct poolset_health_status *set_hs);
unsigned replica_find_healthy_replica(struct poolset_health_status *set_hs);
int replica_is_poolset_healthy(struct poolset_health_status *set_hs);
int replica_is_poolset_transformed(unsigned flags);
size_t replica_get_pool_size(struct pool_set *set, unsigned repn);
int replica_check_part_sizes(struct pool_set *set, size_t min_size);
int replica_check_part_dirs(struct pool_set *set);
int replica_check_local_part_dir(struct pool_set *set, unsigned repn,
unsigned partn);
int replica_open_replica_part_files(struct pool_set *set, unsigned repn);
int replica_open_poolset_part_files(struct pool_set *set);
int replica_sync(struct pool_set *set_in, struct poolset_health_status *set_hs,
unsigned flags);
int replica_transform(struct pool_set *set_in, struct pool_set *set_out,
unsigned flags);