コード例 #1
0
int gen_sst(const gen_param &param)
{
  ObSSTableSchema *sst_schema = new(std::nothrow)ObSSTableSchema;
  ObSSTableWriter sst_writer;
  ObSSTableRow    sst_row;
  tbsys::CConfig config;
  ObSchemaManagerV2 *mgr = new(std::nothrow) ObSchemaManagerV2;
  int err = OB_SUCCESS;
  if ((NULL == mgr) || (NULL == sst_schema))
  {
    err = OB_ALLOCATE_MEMORY_FAILED;
    TBSYS_LOG(WARN,"fail to allocate memory for ObSchemaManagerV2");
  }
  if ((OB_SUCCESS == err) && (!mgr->parse_from_file(param.schema_,config)))
  {
    TBSYS_LOG(WARN,"fail to load schema from file [err:%d,schema.ini:%s]", err, param.schema_);
    err = OB_INVALID_ARGUMENT;
  }
  if ((OB_SUCCESS == err) && (OB_SUCCESS != (err = fill_sstable_schema(*mgr,msolap::target_table_id,*sst_schema))))
  {
    TBSYS_LOG(WARN,"fail to fill sst schema [err:%d, table_id:%lu]", err, msolap::target_table_id);
  }
  ObTrailerParam trailer_param;
  trailer_param.block_size_ = msolap::ups_sst_block_size;
  trailer_param.compressor_name_.assign((char*)msolap::ups_sst_compressor_name, static_cast<int32_t>(strlen(msolap::ups_sst_compressor_name)));
  trailer_param.frozen_time_ = tbsys::CTimeUtil::getTime();
  trailer_param.store_type_ = msolap::ups_sst_store_type;
  trailer_param.table_version_ = msolap::ups_sst_version;
  ObString sst_path(static_cast<int32_t>(strlen(param.sst_name_)), static_cast<int32_t>(strlen(param.sst_name_)),(char*)param.sst_name_);
  if ((OB_SUCCESS == err) && (OB_SUCCESS != sst_writer.create_sstable(*sst_schema,sst_path, trailer_param)))
  {
    TBSYS_LOG(WARN,"fail to create sst [err:%d,sst_path:%s]", err, param.sst_name_);
  }
  uint32_t big_endian_row_key = 0;
  int64_t space_usage = 0;
  ObString row_key_str(sizeof(big_endian_row_key), sizeof(big_endian_row_key), (char*)&big_endian_row_key);
  if((OB_SUCCESS == err) && (OB_SUCCESS != (err = sst_row.set_obj_count(msolap::max_column_id - msolap::min_column_id + 1))))
  {
    TBSYS_LOG(WARN,"fail to call sst_row.set_obj_count [err:%d]", err);
  }
  for (uint32_t row_key = param.start_include_; (OB_SUCCESS == err) && (row_key <= param.end_include_); row_key++)
  {
    big_endian_row_key = htonl(row_key);
    sst_row.clear();
    if ((OB_SUCCESS == err) &&(OB_SUCCESS != (err =  sst_row.set_rowkey(TestRowkeyHelper(row_key_str, &allocator_)))))
    {
      TBSYS_LOG(WARN,"fail to set sst row rowkey [err:%d]", err);
    }
    if((OB_SUCCESS == err) && (OB_SUCCESS !=(err = sst_row.set_table_id(msolap::target_table_id))))
    {
      TBSYS_LOG(WARN,"fail to set sst row table id [err:%d]", err);
    }
    if((OB_SUCCESS == err) && (OB_SUCCESS !=(err = sst_row.set_column_group_id(msolap::ups_sst_column_group_id))))
    {
      TBSYS_LOG(WARN,"fail to set sst row group id [err:%d]", err);
    }
    for (uint64_t column_id = msolap::min_column_id; (OB_SUCCESS == err)&&(column_id <= msolap::max_column_id); column_id ++)
    {
      ObObj val;
      val.set_int(msolap::olap_get_column_val(column_id,big_endian_row_key));
      if (OB_SUCCESS != (err = sst_row.add_obj(val)))
      {
        TBSYS_LOG(WARN,"fail to add obj to sst row [err:%d]", err);
      }
    }
    assert(OB_SUCCESS == sst_row.check_schema(*sst_schema));
    if((OB_SUCCESS == err) && (OB_SUCCESS != (err = sst_writer.append_row(sst_row,space_usage))))
    {
      TBSYS_LOG(WARN,"fail to append row to sst writer [err:%d]", err);
    }
  }
  int64_t trailer_offset = 0;
  int64_t sst_size = 0;
  if((OB_SUCCESS == err) && (OB_SUCCESS != (err = sst_writer.close_sstable(trailer_offset, sst_size))))
  {
    TBSYS_LOG(WARN,"fail to close sst [err:%d]", err);
  }
  else
  {
    TBSYS_LOG(INFO, "sst write success [trailer_offset:%ld,sst_size:%ld]", trailer_offset, sst_size);
  }
  delete sst_schema;
  delete mgr;
  return err;
}
コード例 #2
0
TEST(ObMsScanParam, columns)
{
  ObSchemaManagerV2 *mgr = new ObSchemaManagerV2();
  tbsys::CConfig config;
  EXPECT_TRUE(mgr->parse_from_file("schema.ini",config));

  ObScanParam scan_param;
  ObScanParam decoded_param;
  ObStringBuf buf;
  init_decode_param(buf,scan_param);
  clear_assis();
  EXPECT_EQ(ob_decode_scan_param(scan_param,*mgr,decoded_param),OB_SUCCESS);
  ObMergerScanParam ms_scan_param;
  EXPECT_EQ(ms_scan_param.set_param(decoded_param), OB_SUCCESS);

  /// select basic columns
  int32_t return_info_idx = 0;
  EXPECT_EQ(scan_param.get_column_name_size(), ms_scan_param.get_cs_param()->get_column_id_size());
  EXPECT_EQ(scan_param.get_column_name_size(), ms_scan_param.get_ms_param()->get_column_id_size());
  for (int32_t i = 0; i < scan_param.get_column_name_size(); i ++, return_info_idx ++)
  {
    EXPECT_EQ(ms_scan_param.get_cs_param()->get_column_id()[i], ms_scan_param.get_ms_param()->get_column_id()[i]);
    EXPECT_TRUE(*ms_scan_param.get_cs_param()->get_return_infos().at(return_info_idx));
    EXPECT_EQ(*scan_param.get_return_infos().at(return_info_idx),
      *ms_scan_param.get_ms_param()->get_return_infos().at(return_info_idx));
  }

  /// select composite columns
  EXPECT_EQ(scan_param.get_composite_columns_size(), ms_scan_param.get_cs_param()->get_composite_columns_size());
  EXPECT_EQ(scan_param.get_composite_columns_size(), ms_scan_param.get_ms_param()->get_composite_columns_size());
  for (int32_t i = 0; i < scan_param.get_composite_columns_size();i ++, return_info_idx++)
  {
    EXPECT_TRUE(*ms_scan_param.get_cs_param()->get_return_infos().at(return_info_idx));
    EXPECT_EQ(*scan_param.get_return_infos().at(return_info_idx),
      *ms_scan_param.get_ms_param()->get_return_infos().at(return_info_idx));
    const ObObj * cs_expr = ms_scan_param.get_cs_param()->get_composite_columns().at(i)->get_postfix_expr();
    const ObObj * ms_expr = ms_scan_param.get_ms_param()->get_composite_columns().at(i)->get_postfix_expr();
    for (int obj_idx = 0;; obj_idx += 2)
    {
      int64_t cs_type  = 0;
      int64_t ms_type  = 0;
      EXPECT_EQ(cs_expr[obj_idx].get_int(cs_type),OB_SUCCESS);
      EXPECT_EQ(ms_expr[obj_idx].get_int(ms_type),OB_SUCCESS);
      EXPECT_EQ(cs_type, ms_type);
      if (ms_type == ObExpression::END)
      {
        break;
      }
      EXPECT_TRUE(cs_expr[obj_idx + 1] == ms_expr[obj_idx + 1]);
    }
  }

  /// where condition
  EXPECT_EQ(ms_scan_param.get_ms_param()->get_filter_info().get_count(), 0);
  EXPECT_EQ(ms_scan_param.get_cs_param()->get_filter_info().get_count(), scan_param.get_filter_info().get_count());

  return_info_idx = 0;
  /// groupby::groupby columns
  EXPECT_EQ(scan_param.get_group_by_param().get_groupby_columns().get_array_index(),
    ms_scan_param.get_cs_param()->get_group_by_param().get_groupby_columns().get_array_index());
  EXPECT_EQ(scan_param.get_group_by_param().get_groupby_columns().get_array_index(),
    ms_scan_param.get_ms_param()->get_group_by_param().get_groupby_columns().get_array_index());

  for (int32_t i = 0; i < scan_param.get_group_by_param().get_groupby_columns().get_array_index(); i ++, return_info_idx ++)
  {
    EXPECT_TRUE(*ms_scan_param.get_ms_param()->get_group_by_param().get_groupby_columns().at(i)  ==
      *ms_scan_param.get_ms_param()->get_group_by_param().get_groupby_columns().at(i));

    EXPECT_TRUE(*ms_scan_param.get_cs_param()->get_group_by_param().get_return_infos().at(return_info_idx));
    EXPECT_EQ(*scan_param.get_group_by_param().get_return_infos().at(return_info_idx),
      *ms_scan_param.get_ms_param()->get_group_by_param().get_return_infos().at(return_info_idx));
  }

  /// groupby::aggregate columns
  EXPECT_EQ(scan_param.get_group_by_param().get_aggregate_columns().get_array_index(),
    ms_scan_param.get_cs_param()->get_group_by_param().get_aggregate_columns().get_array_index());
  EXPECT_EQ(scan_param.get_group_by_param().get_aggregate_columns().get_array_index(),
    ms_scan_param.get_ms_param()->get_group_by_param().get_aggregate_columns().get_array_index());

  for (int32_t i = 0; i < scan_param.get_group_by_param().get_aggregate_columns().get_array_index(); i ++, return_info_idx ++)
  {
    EXPECT_TRUE(*ms_scan_param.get_ms_param()->get_group_by_param().get_aggregate_columns().at(i)  ==
      *ms_scan_param.get_ms_param()->get_group_by_param().get_aggregate_columns().at(i));

    EXPECT_TRUE(*ms_scan_param.get_cs_param()->get_group_by_param().get_return_infos().at(return_info_idx));
    EXPECT_EQ(*scan_param.get_group_by_param().get_return_infos().at(return_info_idx),
      *ms_scan_param.get_ms_param()->get_group_by_param().get_return_infos().at(return_info_idx));
  }
  /// groupby::composite columns columns
  EXPECT_EQ(scan_param.get_group_by_param().get_return_infos().get_array_index(),
    ms_scan_param.get_cs_param()->get_group_by_param().get_return_infos().get_array_index());
  EXPECT_EQ(scan_param.get_group_by_param().get_return_infos().get_array_index(),
    ms_scan_param.get_ms_param()->get_group_by_param().get_return_infos().get_array_index());
  for (int32_t i = 0; i < scan_param.get_group_by_param().get_composite_columns().get_array_index();i ++, return_info_idx++)
  {
    EXPECT_TRUE(*ms_scan_param.get_cs_param()->get_group_by_param().get_return_infos().at(return_info_idx));
    EXPECT_EQ(*scan_param.get_group_by_param().get_return_infos().at(return_info_idx),
      *ms_scan_param.get_ms_param()->get_group_by_param().get_return_infos().at(return_info_idx));
    const ObObj * cs_expr = ms_scan_param.get_cs_param()->get_group_by_param().get_composite_columns().at(i)->get_postfix_expr();
    const ObObj * ms_expr = ms_scan_param.get_ms_param()->get_group_by_param().get_composite_columns().at(i)->get_postfix_expr();
    for (int obj_idx = 0;; obj_idx += 2)
    {
      int64_t cs_type  = 0;
      int64_t ms_type  = 0;
      EXPECT_EQ(cs_expr[obj_idx].get_int(cs_type),OB_SUCCESS);
      EXPECT_EQ(ms_expr[obj_idx].get_int(ms_type),OB_SUCCESS);
      EXPECT_EQ(cs_type, ms_type);
      if (ms_type == ObExpression::END)
      {
        break;
      }
      EXPECT_TRUE(cs_expr[obj_idx + 1] == ms_expr[obj_idx + 1]);
    }
  }
  /// having condition
  EXPECT_EQ(ms_scan_param.get_cs_param()->get_group_by_param().get_having_condition().get_count(),  0);
  EXPECT_EQ(ms_scan_param.get_ms_param()->get_group_by_param().get_having_condition().get_count(),
    scan_param.get_group_by_param().get_having_condition().get_count());

  /// orderby
  EXPECT_EQ(ms_scan_param.get_cs_param()->get_orderby_column_size(),
    ((scan_param.get_group_by_param().get_aggregate_row_width() > 0) && (scan_param.get_orderby_column_size() == 0))?
    1: scan_param.get_orderby_column_size());
  EXPECT_EQ(ms_scan_param.get_ms_param()->get_orderby_column_size(),
    scan_param.get_orderby_column_size());

  /// limit info witout sharding_minimum preicession
  scan_param.set_limit_info(0,100);
  clear_assis();
  EXPECT_EQ(ob_decode_scan_param(scan_param,*mgr,decoded_param),OB_SUCCESS);
  EXPECT_EQ(ms_scan_param.set_param(decoded_param), OB_SUCCESS);

  /// orderby
  EXPECT_EQ(ms_scan_param.get_cs_param()->get_orderby_column_size(),
    ((scan_param.get_group_by_param().get_aggregate_row_width() > 0) && (scan_param.get_orderby_column_size() == 0))?
    1: scan_param.get_orderby_column_size());
  EXPECT_EQ(ms_scan_param.get_ms_param()->get_orderby_column_size(),
    scan_param.get_orderby_column_size());
  int64_t limit_offset;
  int64_t limit_count;
  int64_t sharding_minimum;
  double topk_precision;
  ms_scan_param.get_cs_param()->get_limit_info(limit_offset,limit_count);
  ms_scan_param.get_cs_param()->get_topk_precision(sharding_minimum,topk_precision);
  EXPECT_EQ(limit_offset,0);
  EXPECT_EQ(limit_count,0);
  EXPECT_EQ(sharding_minimum,0);
  EXPECT_EQ(topk_precision,0);

  ms_scan_param.get_ms_param()->get_limit_info(limit_offset,limit_count);
  ms_scan_param.get_ms_param()->get_topk_precision(sharding_minimum,topk_precision);
  EXPECT_EQ(limit_offset,0);
  EXPECT_EQ(limit_count,100);
  EXPECT_EQ(sharding_minimum,0);
  EXPECT_EQ(topk_precision,0);

  /// limit info witout sharding_minimum preicession
  scan_param.set_limit_info(0,100);
  scan_param.set_topk_precision(1000, 0.5);
  clear_assis();
  EXPECT_EQ(ob_decode_scan_param(scan_param,*mgr,decoded_param),OB_SUCCESS);
  EXPECT_EQ(ms_scan_param.set_param(decoded_param), OB_SUCCESS);

  /// orderby
  EXPECT_EQ(ms_scan_param.get_cs_param()->get_orderby_column_size(), scan_param.get_orderby_column_size());
  EXPECT_EQ(ms_scan_param.get_ms_param()->get_orderby_column_size(),
    scan_param.get_orderby_column_size());
  ms_scan_param.get_cs_param()->get_limit_info(limit_offset,limit_count);
  ms_scan_param.get_cs_param()->get_topk_precision(sharding_minimum,topk_precision);
  EXPECT_EQ(limit_offset,0);
  EXPECT_EQ(limit_count,0);
  EXPECT_EQ(sharding_minimum,1000);
  EXPECT_EQ(topk_precision,0.5);

  ms_scan_param.get_ms_param()->get_limit_info(limit_offset,limit_count);
  ms_scan_param.get_ms_param()->get_topk_precision(sharding_minimum,topk_precision);
  EXPECT_EQ(limit_offset,0);
  EXPECT_EQ(limit_count,100);
  EXPECT_EQ(sharding_minimum,0);
  EXPECT_EQ(topk_precision,0);

  delete mgr;
}