3 #ifndef ZOOKEEPER_INCLUDE_ZK_NN_CLIENT_H_
4 #define ZOOKEEPER_INCLUDE_ZK_NN_CLIENT_H_
7 #define MAX_FREE_SPACE 'f'
9 #include "zk_client_common.h"
10 #include <google/protobuf/message.h>
16 #include "ClientNamenodeProtocol.pb.h"
17 #include "erasurecoding.pb.h"
18 #include <ConfigReader.h>
22 #define MAX_USERNAME_LEN 256
26 typedef enum class FileStatus : int {
40 zkclient::FileStatus under_construction;
47 std::uint64_t access_time;
48 std::uint64_t modification_time;
49 char owner[MAX_USERNAME_LEN];
50 char group[MAX_USERNAME_LEN];
51 char permissions[20][MAX_USERNAME_LEN];
53 int permission_number;
54 std::uint64_t last_block_id;
61 std::string clientName;
79 TargetDN(std::string
id,
int bytes,
int xmits,
char policy) : policy(policy),
85 bool operator<(
const struct TargetDN &other)
const {
87 if (policy == MIN_XMITS) {
88 if (num_xmits == other.num_xmits) {
89 return free_bytes < other.free_bytes;
91 return num_xmits > other.num_xmits;
95 if (free_bytes == other.free_bytes) {
96 return num_xmits > other.num_xmits;
98 return free_bytes < other.free_bytes;
159 const char* EC_REPLICATION =
"replication";
160 const char* DEFAULT_EC_POLICY =
"RS-6-3-1024k";
161 uint32_t DEFAULT_EC_CELLSIZE = 1024*1024;
162 uint32_t DEFAULT_EC_ID = 1;
163 uint32_t REPLICATION_EC_ID = 63;
164 const uint32_t DEFAULT_DATA_UNITS = 6;
165 const uint32_t DEFAULT_PARITY_UNITS = 3;
166 const char* DEFAULT_EC_CODEC_NAME =
"rs";
167 std::string DEFAULT_STORAGE_ID =
"1";
168 std::string REPLICATION_STORAGE_ID =
"63";
179 enum class ListingResponse {
182 FailedChildRetrieval,
186 enum class DeleteResponse {
189 FileUnderConstruction,
190 FileIsDirectoryMismatch,
191 FailedChildRetrieval,
192 FailedBlockRetrieval,
193 FailedDataNodeRetrieval,
198 enum class GetFileInfoResponse {
205 enum class MkdirResponse {
210 enum class CreateResponse {
217 enum class RenameResponse {
226 enum class ErasureCodingPoliciesResponse {
230 enum class ErasureCodingPolicyResponse {
235 enum class SetErasureCodingPolicyResponse {
241 explicit ZkNnClient(std::string zkIpAndAddress)
244 std::shared_ptr<GetListingResponseProto>>(64, 10)) {
245 mkdir_helper(
"/",
false);
246 populateDefaultECProto();
258 bool secureMode =
false)
260 cache(new lru::Cache<std::string,
262 mkdir_helper(
"/",
false);
263 isSecureMode = secureMode;
264 populateDefaultECProto();
266 void register_watches();
295 std::string client_name =
"default");
315 std::string client_name =
"default");
334 std::string client_name =
"default");
345 std::string client_name =
"default");
356 std::string client_name =
"default");
367 std::string client_name =
"default");
377 std::string client_name =
"default");
383 const std::string &path,
386 void set_node_policy(
char policy);
388 char get_node_policy();
432 std::string client_name =
"default");
443 std::string client_name =
"default");
463 bool add_block(
const std::string &fileName,
465 std::vector<std::string> &dataNodes,
466 uint32_t replication_factor);
479 u_int64_t &block_group_id,
480 std::vector<std::string> &dataNodes,
481 std::vector<char> &blockIndices,
482 uint32_t total_num_storage_blocks);
491 const std::string &fileName,
492 u_int64_t &block_group_id);
501 uint64_t block_group_id,
502 uint64_t index_within_group);
533 std::string client_name =
"default");
535 bool previousBlockComplete(uint64_t prev_id);
544 bool get_block_size(
const u_int64_t &block_id, uint64_t &blocksize);
547 static const std::string CLASS_NAME;
549 bool find_live_datanodes(
const uint64_t blockId,
int error_code,
550 std::vector<std::string> &live_data_nodes);
552 bool find_datanode_for_block(std::vector<std::string> &datanodes,
553 std::vector<std::string> &excluded_dns,
554 const u_int64_t blockId,
555 uint32_t replication_factor,
558 bool find_all_datanodes_with_block(
const uint64_t &block_uuid,
559 std::vector<std::string> &rdatanodes,
563 std::vector<std::shared_ptr<ZooOp>> &ops);
564 bool rename_ops_for_dir(
const std::string &src,
const std::string &dst,
565 std::vector<std::shared_ptr<ZooOp>> &ops);
576 google::protobuf::uint64 offset,
577 google::protobuf::uint64 length,
579 std::string client_name =
"default");
587 bool process_request(std::string client_name, std::string file_path,
589 bool get_primary_block_info(std::string file_path,
592 bool check_lease(std::string client_name, std::string file_path);
599 bool cache_contains(
const std::string &path);
612 uint64_t block_id, uint64_t block_size);
614 bool set_file_status(std::string file_path,
626 bool sort_by_xmits(
const std::vector<std::string> &unsorted_dn_ids,
627 std::vector<std::string> &sorted_dn_ids);
634 const std::string &path,
639 std::string ClientZookeeperPath(
const std::string & clientname);
643 std::string LeaseZookeeperPath(
const std::string & hadoopPath);
649 std::string ZookeeperBlocksPath(
const std::string &hadoopPath);
655 std::string ZookeeperFilePath(
const std::string &hadoopPath);
666 bool create_file_znode(
const std::string &path,
FileZNode *znode_data);
671 void set_mkdir_znode(
FileZNode *znode_data);
677 MkdirResponse mkdir_helper(
const std::string &path,
bool create_parent);
683 void file_znode_struct_to_vec(
FileZNode *znode_data,
684 std::vector<std::uint8_t> &data);
686 void znode_data_to_vec(T *znode_data, std::vector<std::uint8_t> &data);
688 void read_znode_data(T &znode_data,
const std::string &path);
693 void delete_node_wrapper(std::string &path,
696 DeleteResponse destroy_helper(
const std::string &path,
697 std::vector<std::shared_ptr<ZooOp>> &ops);
703 bool recover_ec_blocks(
const std::vector<std::string> &to_ec_recover,
712 bool replicate_blocks(
const std::vector<std::string> &to_replicate,
719 int ms_since_creation(std::string &path);
733 const std::string &data_node);
744 const std::uint64_t &block_id,
745 const uint64_t &block_size);
751 static void watcher_health(zhandle_t *zzh,
int type,
int state,
752 const char *path,
void *watcherCtx);
757 static void watcher_health_child(zhandle_t *zzh,
int type,
int state,
758 const char *path,
void *watcherCtx);
760 static void watcher_listing(zhandle_t *zzh,
int type,
int state,
761 const char *path,
void *watcherCtx);
766 bool lease_expired(std::string lease_holder_client);
774 bool blockDeleted(uint64_t uuid, std::string
id);
779 void populateDefaultECProto();
788 bool checkAccess(std::string username,
FileZNode &znode_data);
790 const int UNDER_CONSTRUCTION = 1;
791 const int FILE_COMPLETE = 0;
792 const int UNDER_DESTRUCTION = 2;
794 const int IS_FILE = 2;
795 const int IS_DIR = 1;
799 const int ACK_TIMEOUT = 600000;
802 bool isSecureMode =
false;
803 const uint64_t EXPIRATION_TIME =
812 #endif // ZOOKEEPER_INCLUDE_ZK_NN_CLIENT_H_
uint64_t get_client_lease_timestamp(std::string client_name)
Definition: zk_nn_client.cc:3180
Definition: ClientNamenodeProtocol.pb.h:4767
Definition: ClientNamenodeProtocol.pb.h:12580
Definition: ClientNamenodeProtocol.pb.h:4337
void complete(CompleteRequestProto &req, CompleteResponseProto &res, std::string client_name="default")
Definition: zk_nn_client.cc:1289
Definition: LRUCache.h:209
Definition: ClientNamenodeProtocol.pb.h:415
bool add_block(AddBlockRequestProto &req, AddBlockResponseProto &res, std::string client_name="default")
Definition: zk_nn_client.cc:825
Definition: ClientNamenodeProtocol.pb.h:2128
Definition: ClientNamenodeProtocol.pb.h:5364
ErasureCodingPolicyResponse get_erasure_coding_policy_of_path(GetErasureCodingPolicyRequestProto &req, GetErasureCodingPolicyResponseProto &res)
Definition: zk_nn_client.cc:2015
Definition: ClientNamenodeProtocol.pb.h:8436
Definition: ClientNamenodeProtocol.pb.h:1917
Definition: zk_client_common.h:14
Definition: ClientNamenodeProtocol.pb.h:5266
bool rename_ops_for_file(const std::string &src, const std::string &dst, std::vector< std::shared_ptr< ZooOp >> &ops)
Definition: zk_nn_client.cc:2639
u_int64_t generate_storage_block_id(uint64_t block_group_id, uint64_t index_within_group)
Definition: zk_nn_client.cc:2461
Definition: zk_nn_client.h:69
uint32_t get_total_num_storage_blocks(const std::string &fileName, u_int64_t &block_group_id)
Definition: ClientNamenodeProtocol.pb.h:1115
bool abandon_block(AbandonBlockRequestProto &req, AbandonBlockResponseProto &res, std::string client_name="default")
Definition: zk_nn_client.cc:941
Definition: ClientNamenodeProtocol.pb.h:5563
Definition: ClientNamenodeProtocol.pb.h:11431
Definition: ClientNamenodeProtocol.pb.h:2000
ZkNnClient(std::shared_ptr< ZKWrapper > zk_in, bool secureMode=false)
Definition: zk_nn_client.h:257
Definition: ClientNamenodeProtocol.pb.h:2432
u_int64_t get_block_group_id(u_int64_t storage_block_id)
Definition: zk_nn_client.cc:2479
Definition: ClientNamenodeProtocol.pb.h:2211
Definition: ClientNamenodeProtocol.pb.h:1804
Definition: hdfs.pb.h:1380
bool file_exists(const std::string &path)
Definition: zk_nn_client.cc:322
Definition: hdfs.pb.h:3859
Definition: ConfigReader.h:18
u_int64_t generate_block_group_id()
Definition: zk_nn_client.cc:2471
Definition: erasurecoding.pb.h:53
Definition: hdfs.pb.h:3304
Definition: zk_nn_client.h:60
Definition: ClientNamenodeProtocol.pb.h:2349
Definition: erasurecoding.pb.h:607
Definition: erasurecoding.pb.h:249
uint64_t current_time_ms()
Definition: zk_nn_client.cc:3095
Definition: zk_nn_client.h:35
Definition: ClientNamenodeProtocol.pb.h:294
Definition: ClientNamenodeProtocol.pb.h:4226
bool append_file(AppendRequestProto &req, AppendResponseProto &res)
Definition: zk_nn_client.cc:396
bool set_owner(SetOwnerRequestProto &req, SetOwnerResponseProto &res, std::string client_name="default")
Definition: zk_nn_client.cc:785
Definition: erasurecoding.pb.h:332
void renew_lease(RenewLeaseRequestProto &req, RenewLeaseResponseProto &res)
Definition: zk_nn_client.cc:630
Definition: hdfs.pb.h:314
GetFileInfoResponse get_info(GetFileInfoRequestProto &req, GetFileInfoResponseProto &res, std::string client_name="default")
Definition: zk_nn_client.cc:1044
ErasureCodingPoliciesResponse get_erasure_coding_policies(GetErasureCodingPoliciesRequestProto &req, GetErasureCodingPoliciesResponseProto &res)
Definition: zk_nn_client.cc:1995
RenameResponse rename(RenameRequestProto &req, RenameResponseProto &res, std::string client_name="default")
Definition: zk_nn_client.cc:1562
Definition: ClientNamenodeProtocol.pb.h:2600
Definition: ClientNamenodeProtocol.pb.h:3924
Definition: ClientNamenodeProtocol.pb.h:8338
Definition: ClientNamenodeProtocol.pb.h:12693
Definition: ClientNamenodeProtocol.pb.h:5447
Definition: erasurecoding.pb.h:705
Definition: ClientNamenodeProtocol.pb.h:989
bool set_permission(SetPermissionRequestProto &req, SetPermissionResponseProto &res)
Definition: zk_nn_client.cc:2253
Definition: hdfs.pb.h:2354
ListingResponse get_listing(GetListingRequestProto &req, GetListingResponseProto &res, std::string client_name="default")
Definition: zk_nn_client.cc:1706
Definition: Security.pb.h:50
Definition: ClientNamenodeProtocol.pb.h:3119
DeleteResponse destroy(DeleteRequestProto &req, DeleteResponseProto &res, std::string client_name="default")
Definition: zk_nn_client.cc:1412
void set_file_info_content(ContentSummaryProto *status, const std::string &path, FileZNode &znode_data)
Definition: zk_nn_client.cc:2163
Definition: ClientNamenodeProtocol.pb.h:11333
std::string find_parent(const std::string &path)
Definition: zk_nn_client.cc:1072
void get_content(GetContentSummaryRequestProto &req, GetContentSummaryResponseProto &res, std::string client_name="default")
Definition: zk_nn_client.cc:2136
void get_block_locations(GetBlockLocationsRequestProto &req, GetBlockLocationsResponseProto &res, std::string client_name="default")
Definition: zk_nn_client.cc:1806
bool add_block_group(const std::string &filePath, u_int64_t &block_group_id, std::vector< std::string > &dataNodes, std::vector< char > &blockIndices, uint32_t total_num_storage_blocks)
Definition: zk_nn_client.cc:2370
Definition: hdfs.pb.h:3585
Definition: ClientNamenodeProtocol.pb.h:2981
Definition: ClientNamenodeProtocol.pb.h:4553
Definition: ClientNamenodeProtocol.pb.h:894
Definition: ClientNamenodeProtocol.pb.h:4646
void read_file_znode(FileZNode &znode_data, const std::string &path)
Definition: zk_nn_client.cc:711
u_int64_t get_index_within_block_group(u_int64_t storage_block_id)
Definition: zk_nn_client.cc:2484
Definition: ClientNamenodeProtocol.pb.h:688
Definition: hdfs.pb.h:3719
Definition: zk_nn_client.h:73
Definition: ClientNamenodeProtocol.pb.h:3808
bool get_block_size(const u_int64_t &block_id, uint64_t &blocksize)
Definition: zk_nn_client.cc:330
Definition: ClientNamenodeProtocol.pb.h:4430
MkdirResponse mkdir(MkdirsRequestProto &req, MkdirsResponseProto &res)
Definition: zk_nn_client.cc:1656
Definition: erasurecoding.pb.h:166
CreateResponse create_file(CreateRequestProto &request, CreateResponseProto &response)
Definition: zk_nn_client.cc:1488
bool check_acks()
Definition: zk_nn_client.cc:2852
SetErasureCodingPolicyResponse set_erasure_coding_policy_of_path(SetErasureCodingPolicyRequestProto &req, SetErasureCodingPolicyResponseProto &res)
Definition: zk_nn_client.cc:2046
Definition: zk_nn_client.h:156
Definition: hdfs.pb.h:838