Ejemplo n.º 1
0
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;
}
Ejemplo n.º 2
0
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);
  }
}
Ejemplo n.º 3
0
    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;
    }
Ejemplo n.º 4
0
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;
}
Ejemplo n.º 5
0
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;
}