cpp/src/common/global.cc (135 lines of code) (raw):

/* * Licensed to the Apache Software Foundation (ASF) under one * or more contributor license agreements. See the NOTICE file * distributed with this work for additional information * regarding copyright ownership. The ASF licenses this file * to you under the Apache License, Version 2.0 (the * License); you may not use this file except in compliance * with the License. You may obtain a copy of the License at * * http://www.apache.org/licenses/LICENSE-2.0 * * Unless required by applicable law or agreed to in writing, * software distributed under the License is distributed on an * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY * KIND, either express or implied. See the License for the * specific language governing permissions and limitations * under the License. */ #include "global.h" #ifndef _WIN32 #include <execinfo.h> #endif #include <stdlib.h> #include "utils/injection.h" namespace common { ColumnSchema g_time_column_schema; ConfigValue g_config_value_; void init_config_value() { g_config_value_.tsblock_mem_inc_step_size_ = 8000; // 8k g_config_value_.tsblock_max_memory_ = 64000; // 64k // g_config_value_.tsblock_max_memory_ = 32; g_config_value_.page_writer_max_point_num_ = 10000; g_config_value_.page_writer_max_memory_bytes_ = 128 * 1024; // 128 k g_config_value_.max_degree_of_index_node_ = 256; g_config_value_.tsfile_index_bloom_filter_error_percent_ = 0.05; g_config_value_.record_count_for_next_mem_check_ = 100; g_config_value_.chunk_group_size_threshold_ = 128 * 1024 * 1024; g_config_value_.time_encoding_type_ = TS_2DIFF; g_config_value_.time_data_type_ = INT64; g_config_value_.time_compress_type_ = LZ4; } extern TSEncoding get_value_encoder(TSDataType data_type) { switch (data_type) { case BOOLEAN: return TSEncoding::RLE; case INT32: return TSEncoding::TS_2DIFF; case INT64: return TSEncoding::TS_2DIFF; case FLOAT: return TSEncoding::GORILLA; case DOUBLE: return TSEncoding::GORILLA; case TEXT: return TSEncoding::PLAIN; case STRING: return TSEncoding::PLAIN; case VECTOR: break; case NULL_TYPE: break; case INVALID_DATATYPE: break; default: break; } return TSEncoding::INVALID_ENCODING; } extern CompressionType get_default_compressor() { return LZ4; } void config_set_page_max_point_count(uint32_t page_max_point_count) { g_config_value_.page_writer_max_point_num_ = page_max_point_count; } void config_set_max_degree_of_index_node(uint32_t max_degree_of_index_node) { g_config_value_.max_degree_of_index_node_ = max_degree_of_index_node; } void set_config_value() {} const char* s_data_type_names[8] = {"BOOLEAN", "INT32", "INT64", "FLOAT", "DOUBLE", "TEXT", "VECTOR", "STRING"}; const char* s_encoding_names[12] = { "PLAIN", "DICTIONARY", "RLE", "DIFF", "TS_2DIFF", "BITMAP", "GORILLA_V1", "REGULAR", "GORILLA", "ZIGZAG", "FREQ"}; const char* s_compression_names[8] = { "UNCOMPRESSED", "SNAPPY", "GZIP", "LZO", "SDT", "PAA", "PLA", "LZ4", }; int init_common() { int ret = E_OK; common::init_config_value(); g_time_column_schema.data_type_ = INT64; g_time_column_schema.encoding_ = PLAIN; g_time_column_schema.compression_ = UNCOMPRESSED; g_time_column_schema.column_name_ = std::string("time"); return ret; } bool is_timestamp_column_name(const char* time_col_name) { // both "time" and "timestamp" refer to timestmap column. int32_t len = strlen(time_col_name); if (len == 4) { return strncasecmp(time_col_name, "time", 4) == 0; } else if (len == 9) { return strncasecmp(time_col_name, "timestamp", 9) == 0; } else { return false; } } void cols_to_json(ByteStream* byte_stream, std::vector<common::ColumnSchema>& ret_ts_list) { // 1. append start tag byte_stream->write_buf("{\n", 2); size_t ts_count = ret_ts_list.size(); for (size_t i = 0; i < ts_count; ++i) { // 2. append timeseries name std::string name = ret_ts_list[i].column_name_; byte_stream->write_buf(" \"", 3); byte_stream->write_buf(name.c_str(), name.length()); byte_stream->write_buf("\" : {\n", 6); // 3. append DataType const char* data_type = get_data_type_name(ret_ts_list[i].data_type_); byte_stream->write_buf(" \"DataType\" : \"", 18); byte_stream->write_buf(data_type, strlen(data_type)); byte_stream->write_buf("\",\n", 3); // 4. append Encoding const char* encoding = get_encoding_name(ret_ts_list[i].encoding_); byte_stream->write_buf(" \"Encoding\" : \"", 18); byte_stream->write_buf(encoding, strlen(encoding)); byte_stream->write_buf("\",\n", 3); // 5. append CompressionType const char* compression = get_compression_name(ret_ts_list[i].compression_); byte_stream->write_buf(" \"Compression\" : \"", 21); byte_stream->write_buf(compression, strlen(compression)); byte_stream->write_buf("\",\n", 3); // 6. append footer if (i == ts_count - 1) { byte_stream->write_buf(" }\n", 4); } else { byte_stream->write_buf(" },\n", 5); } } // 7. end byte_stream->write_buf("}\n", 2); // DEBUG_print_byte_stream(*byte_stream); // for debug } #ifndef _WIN32 void print_backtrace() { const int MAX_FRAMES = 32; int layers = 0; char** symbols = NULL; void* frames[MAX_FRAMES]; memset(frames, 0, sizeof(frames)); layers = backtrace(frames, MAX_FRAMES); symbols = backtrace_symbols(frames, layers); if (symbols) { for (int i = 0; i < layers; i++) { printf("SYMBOL layer %d: %s\n", i, symbols[i]); } free(symbols); } } #endif std::map<std::string, InjectPoint> g_all_inject_points; } // namespace common