int ObClientServerStub::fetch_schema(ObSchemaManagerV2 &schema) { int ret = OB_SUCCESS; const int64_t timeout = 1000000; ObDataBuffer data_buff; ret = get_frame_buffer(data_buff); // step 1. serialize timestamp to data_buff if (OB_SUCCESS == ret) { ret = serialization::encode_vi64(data_buff.get_data(), data_buff.get_capacity(), data_buff.get_position(), DEFAULT_VERSION); if (OB_SUCCESS != ret) { TBSYS_LOG(ERROR, "serialize timestamp failed:version[%ld], ret[%d]", DEFAULT_VERSION, ret); } } // step 2. send get update server info request if (OB_SUCCESS == ret) { ret = rpc_frame_->send_request(root_server_, OB_FETCH_SCHEMA, DEFAULT_VERSION, timeout, data_buff); if (ret != OB_SUCCESS) { TBSYS_LOG(ERROR, "send request to root server for getting schema"); } } // step 3. deserialize restult code int64_t pos = 0; if (OB_SUCCESS == ret) { ObResultCode result_code; ret = result_code.deserialize(data_buff.get_data(), data_buff.get_position(), pos); if (OB_SUCCESS != ret) { TBSYS_LOG(ERROR, "deserialize result_code failed:pos[%ld], ret[%d]", pos, ret); } else { ret = result_code.result_code_; } } // step 4. deserialize update server addr if (OB_SUCCESS == ret) { ret = schema.deserialize(data_buff.get_data(), data_buff.get_position(), pos); if (ret != OB_SUCCESS) { TBSYS_LOG(ERROR, "deserialize server failed:pos[%ld], ret[%d]", pos, ret); } } return ret; }
void print_schema(const char *fname) { int fd = open(fname, O_RDONLY); if (-1 == fd) { fprintf(stderr, "open file [%s] fail errno=%u\n", fname, errno); } else { struct stat st; fstat(fd, &st); char *buffer = new char[st.st_size]; if (NULL == buffer) { fprintf(stderr, "new buffer fail size=%ld\n", st.st_size); } else { int64_t read_ret = read(fd, buffer, st.st_size); if (st.st_size != read_ret) { fprintf(stderr, "read file fail ret=%ld size=%ld errno=%u\n", read_ret, st.st_size, errno); } else { ObSchemaManagerV2 *sm = new(std::nothrow) ObSchemaManagerV2(); if (NULL == sm) { fprintf(stdout, "[%s] new ObSchemaManagerV2 fail\n", __FUNCTION__); } else { int64_t pos = 0; int ret = sm->deserialize(buffer, st.st_size, pos); if (OB_SUCCESS != ret) { fprintf(stderr, "deserialize fail ret=%d\n", ret); } else { print_schema(*sm); } delete sm; } } delete[] buffer; } close(fd); } }
int ObServerRpc::fetch_schema(const ObServer& root_server, const int64_t timestap, ObSchemaManagerV2& schema, const int64_t timeout) { int ret = OB_SUCCESS; int64_t pos = 0; ObResultCode result_code; ObDataBuffer data_buff; if (root_server.get_ipv4() == 0 || root_server.get_port() == 0 || timestap < 0 || timeout <= 0) { TBSYS_LOG(WARN, "invalid param, ip=%d, port=%d, timestap=%ld, " "timeout=%ld", root_server.get_ipv4(), root_server.get_port(), timestap, timeout); ret = OB_ERROR; } else if (NULL == rpc_frame_) { TBSYS_LOG(WARN, "server rpc doesn't init."); ret = OB_ERROR; } if (OB_SUCCESS == ret) { ret = get_frame_buffer(data_buff); } // step 1. serialize timestap to data_buff if (OB_SUCCESS == ret) { ret = encode_vi64(data_buff.get_data(), data_buff.get_capacity(), data_buff.get_position(), timestap); if (OB_SUCCESS != ret) { TBSYS_LOG(WARN, "serialize timestap failed, timestap=%ld, ret=%d.", timestap, ret); } } // step 2. send request for fetch new schema if (OB_SUCCESS == ret) { ret = rpc_frame_->send_request(root_server, OB_FETCH_SCHEMA, DEFAULT_VERSION, timeout, data_buff); if (ret != OB_SUCCESS) { TBSYS_LOG(WARN, "send request to root server for fetch schema failed, " "timestap=%ld, ret=%d.", timestap, ret); } } // step 3. deserialize the response code if (OB_SUCCESS == ret) { ret = result_code.deserialize(data_buff.get_data(), data_buff.get_position(), pos); if (OB_SUCCESS != ret) { TBSYS_LOG(WARN, "deserialize result_code failed, pos=%ld, ret=%d.", pos, ret); } else { ret = result_code.result_code_; if (OB_SUCCESS != ret) { TBSYS_LOG(WARN, "get response from root server failed, " "timeout=%ld, ret=%d.", timeout, ret); } } } // step 4. deserialize the table schema if (OB_SUCCESS == ret) { ret = schema.deserialize(data_buff.get_data(), data_buff.get_position(), pos); if (OB_SUCCESS != ret) { TBSYS_LOG(WARN, "deserialize schema from buffer failed, " "timestap=%ld, pos=%ld, ret=%d", timestap, pos, ret); } } return ret; }
int ObRootServerRpcStub::fetch_schema(const int64_t timestamp, ObSchemaManagerV2 & schema) { int ret = OB_SUCCESS; // send_request timeout us const int64_t timeout = ObChunkServerMain::get_instance()->get_chunk_server().get_param().get_network_time_out(); ObDataBuffer data_buff; ret = get_frame_buffer(data_buff); // step 1. serialize timestamp to data_buff if (OB_SUCCESS == ret) { ret = common::serialization::encode_vi64(data_buff.get_data(), data_buff.get_capacity(), data_buff.get_position(), timestamp); if (OB_SUCCESS != ret) { TBSYS_LOG(ERROR, "serialize timestamp failed:timestamp[%ld], ret[%d].", timestamp, ret); } } // step 2. send request for fetch new schema if (OB_SUCCESS == ret) { ret = rpc_frame_->send_request(root_server_, OB_FETCH_SCHEMA, DEFAULT_VERSION, timeout, data_buff); if (ret != OB_SUCCESS) { const int32_t MAX_SERVER_ADDR_SIZE = 128; char server_addr[MAX_SERVER_ADDR_SIZE]; root_server_.to_string(server_addr, MAX_SERVER_ADDR_SIZE); TBSYS_LOG(ERROR, "send request to root server(%s) for fetch schema failed" ":timestamp[%ld], ret[%d].",server_addr, timestamp, ret); } } // step 3. deserialize the response code int64_t pos = 0; if (OB_SUCCESS == ret) { ObResultCode result_code; ret = result_code.deserialize(data_buff.get_data(), data_buff.get_position(), pos); if (OB_SUCCESS != ret) { TBSYS_LOG(ERROR, "deserialize result_code failed:pos[%ld], ret[%d].", pos, ret); } else { ret = result_code.result_code_; } } // step 4. deserialize the table schema if (OB_SUCCESS == ret) { ret = schema.deserialize(data_buff.get_data(), data_buff.get_position(), pos); if (OB_SUCCESS != ret) { TBSYS_LOG(ERROR, "deserialize schema from buff failed," "timestamp[%ld], pos[%ld], ret[%d].", timestamp, pos, ret); } } return ret; }
int ObMergerRpcStub::fetch_schema( const int64_t timeout, const ObServer & root_server, const int64_t version, ObSchemaManagerV2 & schema) const { int ret = OB_SUCCESS; ObDataBuffer data_buff; ret = get_rpc_buffer(data_buff); // step 1. serialize timestamp to data_buff if (OB_SUCCESS == ret) { ret = serialization::encode_vi64(data_buff.get_data(), data_buff.get_capacity(), data_buff.get_position(), version); if (OB_SUCCESS != ret) { TBSYS_LOG(WARN, "serialize timestamp failed:version[%ld], ret[%d]", version, ret); } } // step 2. send request for fetch new schema if (OB_SUCCESS == ret) { ret = rpc_frame_->send_request(root_server, OB_FETCH_SCHEMA, DEFAULT_VERSION, timeout, data_buff); if (ret != OB_SUCCESS) { TBSYS_LOG(WARN, "send request to root server[%s] for fetch schema failed:" "version[%ld], ret[%d]", root_server.to_cstring(), version, ret); } } // step 3. deserialize the response code int64_t pos = 0; if (OB_SUCCESS == ret) { ObResultCode result_code; ret = result_code.deserialize(data_buff.get_data(), data_buff.get_position(), pos); if (OB_SUCCESS != ret) { TBSYS_LOG(WARN, "deserialize result_code failed:pos[%ld], ret[%d]", pos, ret); } else { ret = result_code.result_code_; } } // step 4. deserialize the table schema if (OB_SUCCESS == ret) { ret = schema.deserialize(data_buff.get_data(), data_buff.get_position(), pos); if (OB_SUCCESS != ret) { TBSYS_LOG(WARN, "deserialize schema from buff failed:" "version[%ld], pos[%ld], ret[%d]", version, pos, ret); } else { TBSYS_LOG(DEBUG, "fetch schema succ:version[%ld]", schema.get_version()); //schema.print_info(); } } return ret; }