130 lines
2.9 KiB
C
130 lines
2.9 KiB
C
|
#ifndef MADFS_COMMON_H
|
||
|
#define MADFS_COMMON_H
|
||
|
|
||
|
#include <string>
|
||
|
#include <butil/iobuf.h>
|
||
|
#include <folly/futures/Future.h>
|
||
|
#include <folly/futures/Promise.h>
|
||
|
#include <folly/executors/ThreadedExecutor.h>
|
||
|
#include <boost/filesystem.hpp>
|
||
|
|
||
|
#include <sys/types.h>
|
||
|
#include <sys/stat.h>
|
||
|
#include <unistd.h>
|
||
|
#include <fcntl.h>
|
||
|
|
||
|
#include "config.h"
|
||
|
|
||
|
using folly::Future;
|
||
|
using folly::Promise;
|
||
|
|
||
|
#define RED "\033[1;31m"
|
||
|
#define GREEN "\033[1;32m"
|
||
|
#define YELLOW "\033[1;33m"
|
||
|
#define WHITE "\033[0m"
|
||
|
|
||
|
DECLARE_bool(verbose);
|
||
|
|
||
|
const static int OK = 0;
|
||
|
const static int RPC_FAILED = -2;
|
||
|
const static int NOT_FOUND = -3;
|
||
|
const static int CACHE_ENTRY_NOT_FOUND = -3; // deprecated
|
||
|
const static int INVALID_ARGUMENT = -4;
|
||
|
const static int S3_INTERNAL_ERROR = -5;
|
||
|
const static int FOLLY_ERROR = -6;
|
||
|
const static int NO_ENOUGH_REPLICAS = -7;
|
||
|
const static int METADATA_ERROR = -8;
|
||
|
const static int IO_ERROR = -9;
|
||
|
const static int END_OF_FILE = -10;
|
||
|
const static int NO_ENOUGH_DISKSPACE = -11;
|
||
|
const static int UNSUPPORTED_TYPE = -12;
|
||
|
const static int UNSUPPORTED_OPERATION = -13;
|
||
|
const static int UNIMPLEMENTED = -128;
|
||
|
|
||
|
struct GetOutput {
|
||
|
int status;
|
||
|
butil::IOBuf buf;
|
||
|
};
|
||
|
|
||
|
struct PutOutput {
|
||
|
int status;
|
||
|
std::string internal_key;
|
||
|
};
|
||
|
|
||
|
struct QueryTsOutput {
|
||
|
int status;
|
||
|
uint64_t timestamp;
|
||
|
};
|
||
|
|
||
|
enum WriteCacheType {
|
||
|
NOCACHE, REPLICATION, REED_SOLOMON
|
||
|
};
|
||
|
|
||
|
struct S3Config {
|
||
|
std::string address;
|
||
|
std::string access_key;
|
||
|
std::string secret_access_key;
|
||
|
std::string bucket;
|
||
|
int bg_threads;
|
||
|
};
|
||
|
|
||
|
struct CachePolicy {
|
||
|
size_t read_chunk_size;
|
||
|
size_t read_replication_factor;
|
||
|
|
||
|
WriteCacheType write_cache_type;
|
||
|
size_t write_replication_factor; // if write_cache_type == REPLICATION
|
||
|
size_t write_data_blocks;
|
||
|
size_t write_parity_blocks; // if write_cache_type == REED_SOLOMON
|
||
|
};
|
||
|
|
||
|
struct GlobalConfig {
|
||
|
int rpc_timeout;
|
||
|
int rpc_threads;
|
||
|
int rpc_connections;
|
||
|
int folly_threads;
|
||
|
bool use_rdma;
|
||
|
|
||
|
bool use_meta_cache;
|
||
|
size_t meta_cache_max_size;
|
||
|
size_t meta_cache_clear_size;
|
||
|
|
||
|
size_t write_chunk_size;
|
||
|
|
||
|
size_t max_inflight_payload_size;
|
||
|
|
||
|
CachePolicy default_policy;
|
||
|
S3Config s3_config;
|
||
|
|
||
|
HybridCache::ReadCacheConfig read_cache;
|
||
|
HybridCache::WriteCacheConfig write_cache;
|
||
|
|
||
|
std::string read_cache_dir;
|
||
|
std::string write_cache_dir;
|
||
|
|
||
|
std::string etcd_prefix;
|
||
|
};
|
||
|
|
||
|
GlobalConfig &GetGlobalConfig();
|
||
|
|
||
|
static inline std::string PathJoin(const std::string &left, const std::string &right) {
|
||
|
if (left.empty()) {
|
||
|
return right;
|
||
|
} else if (left[left.length() - 1] == '/') {
|
||
|
return left + right;
|
||
|
} else {
|
||
|
return left + "/" + right;
|
||
|
}
|
||
|
}
|
||
|
|
||
|
static inline int CreateParentDirectories(const std::string &path) {
|
||
|
auto pos = path.rfind('/');
|
||
|
if (pos == path.npos) {
|
||
|
return 0;
|
||
|
}
|
||
|
auto parent = path.substr(0, pos);
|
||
|
boost::filesystem::create_directories(parent);
|
||
|
return 0;
|
||
|
}
|
||
|
|
||
|
#endif // MADFS_COMMON_H
|