#include #include #include #include #include #include #include #include #include #include #include #include namespace DB { StorageSystemParts::StorageSystemParts(const std::string & name) : StorageSystemPartsBase(name, { {"partition", std::make_shared()}, {"name", std::make_shared()}, {"active", std::make_shared()}, {"marks", std::make_shared()}, {"marks_size", std::make_shared()}, {"rows", std::make_shared()}, {"bytes", std::make_shared()}, {"modification_time", std::make_shared()}, {"remove_time", std::make_shared()}, {"refcount", std::make_shared()}, {"min_date", std::make_shared()}, {"max_date", std::make_shared()}, {"min_block_number", std::make_shared()}, {"max_block_number", std::make_shared()}, {"level", std::make_shared()}, {"primary_key_bytes_in_memory", std::make_shared()}, {"primary_key_bytes_in_memory_allocated", std::make_shared()}, {"database", std::make_shared()}, {"table", std::make_shared()}, {"engine", std::make_shared()}, {"path", std::make_shared()} } ) { } void StorageSystemParts::processNextStorage(MutableColumns & columns, const StoragesInfo & info, bool has_state_column) { using State = MergeTreeDataPart::State; for (size_t part_number = 0; part_number < info.all_parts.size(); ++part_number) { const auto & part = info.all_parts[part_number]; auto part_state = info.all_parts_state[part_number]; size_t i = 0; { WriteBufferFromOwnString out; part->partition.serializeTextQuoted(*info.data, out); columns[i++]->insert(out.str()); } columns[i++]->insert(part->name); columns[i++]->insert(static_cast(part_state == State::Committed)); columns[i++]->insert(static_cast(part->marks_count)); columns[i++]->insert(static_cast(part->getTotalMrkSizeInBytes())); columns[i++]->insert(static_cast(part->rows_count)); columns[i++]->insert(static_cast(part->size_in_bytes)); columns[i++]->insert(static_cast(part->modification_time)); columns[i++]->insert(static_cast(part->remove_time.load(std::memory_order_relaxed))); /// For convenience, in returned refcount, don't add references that was due to local variables in this method: all_parts, active_parts. columns[i++]->insert(static_cast(part.use_count() - 1)); columns[i++]->insert(static_cast(part->getMinDate())); columns[i++]->insert(static_cast(part->getMaxDate())); columns[i++]->insert(part->info.min_block); columns[i++]->insert(part->info.max_block); columns[i++]->insert(static_cast(part->info.level)); columns[i++]->insert(static_cast(part->getIndexSizeInBytes())); columns[i++]->insert(static_cast(part->getIndexSizeInAllocatedBytes())); columns[i++]->insert(info.database); columns[i++]->insert(info.table); columns[i++]->insert(info.engine); columns[i++]->insert(part->getFullPath()); if (has_state_column) columns[i++]->insert(part->stateString()); } } }