mirror of
https://github.com/ClickHouse/ClickHouse.git
synced 2024-09-20 08:40:50 +00:00
in-memory parts: fix 'check' query
This commit is contained in:
parent
1ce09e1faa
commit
11c4e9dde3
@ -289,7 +289,7 @@ MergeTreeData::MutableDataPartPtr Fetcher::downloadPartToMemory(
|
||||
throw Exception("Cannot deserialize checksums", ErrorCodes::CORRUPTED_DATA);
|
||||
|
||||
NativeBlockInputStream block_in(in, 0);
|
||||
auto block = block_in.read();
|
||||
auto block = block_in.read();
|
||||
|
||||
auto volume = std::make_shared<SingleDiskVolume>("volume_" + part_name, reservation->getDisk());
|
||||
MergeTreeData::MutableDataPartPtr new_data_part =
|
||||
|
@ -889,6 +889,11 @@ void IMergeTreeDataPart::checkConsistencyBase() const
|
||||
}
|
||||
}
|
||||
|
||||
void IMergeTreeDataPart::checkConsistency(bool /* require_part_metadata */) const
|
||||
{
|
||||
throw Exception("Method 'checkConsistency' is not implemented for part with type " + getType().toString(), ErrorCodes::NOT_IMPLEMENTED);
|
||||
}
|
||||
|
||||
|
||||
void IMergeTreeDataPart::calculateColumnsSizesOnDisk()
|
||||
{
|
||||
|
@ -332,7 +332,7 @@ protected:
|
||||
|
||||
void removeIfNeeded();
|
||||
|
||||
virtual void checkConsistency(bool require_part_metadata) const = 0;
|
||||
virtual void checkConsistency(bool require_part_metadata) const;
|
||||
void checkConsistencyBase() const;
|
||||
|
||||
/// Fill each_columns_size and total_size with sizes from columns files on
|
||||
|
@ -108,14 +108,14 @@ void MergeTreeDataPartInMemory::notifyMerged() const
|
||||
is_merged.notify_one();
|
||||
}
|
||||
|
||||
void MergeTreeDataPartInMemory::renameTo(const String & new_relative_path, bool /* remove_new_dir_if_exists */) const
|
||||
{
|
||||
relative_path = new_relative_path;
|
||||
}
|
||||
|
||||
void MergeTreeDataPartInMemory::calculateEachColumnSizesOnDisk(ColumnSizeByName & /*each_columns_size*/, ColumnSize & /*total_size*/) const
|
||||
{
|
||||
// throw Exception("calculateEachColumnSizesOnDisk of in memory part", ErrorCodes::NOT_IMPLEMENTED);
|
||||
}
|
||||
|
||||
void MergeTreeDataPartInMemory::loadIndexGranularity()
|
||||
{
|
||||
throw Exception("loadIndexGranularity of in memory part", ErrorCodes::NOT_IMPLEMENTED);
|
||||
}
|
||||
|
||||
}
|
||||
|
@ -40,7 +40,7 @@ public:
|
||||
bool isStoredOnDisk() const override { return false; }
|
||||
bool hasColumnFiles(const String & column_name, const IDataType & /* type */) const override { return !!getColumnPosition(column_name); }
|
||||
String getFileNameForColumn(const NameAndTypePair & /* column */) const override { return ""; }
|
||||
void renameTo(const String & /*new_relative_path*/, bool /*remove_new_dir_if_exists*/) const override {}
|
||||
void renameTo(const String & new_relative_path, bool remove_new_dir_if_exists) const override;
|
||||
void makeCloneInDetached(const String & prefix) const override;
|
||||
|
||||
void flushToDisk(const String & base_path, const String & new_relative_path) const;
|
||||
@ -53,11 +53,6 @@ public:
|
||||
private:
|
||||
mutable std::condition_variable is_merged;
|
||||
|
||||
void checkConsistency(bool /* require_part_metadata */) const override {}
|
||||
|
||||
/// Loads marks index granularity into memory
|
||||
void loadIndexGranularity() override;
|
||||
|
||||
/// Compact parts doesn't support per column size, only total size
|
||||
void calculateEachColumnSizesOnDisk(ColumnSizeByName & each_columns_size, ColumnSize & total_size) const override;
|
||||
};
|
||||
|
@ -166,6 +166,9 @@ IMergeTreeDataPart::Checksums checkDataPart(
|
||||
bool require_checksums,
|
||||
std::function<bool()> is_cancelled)
|
||||
{
|
||||
if (!data_part->isStoredOnDisk())
|
||||
return data_part->checksums;
|
||||
|
||||
return checkDataPart(
|
||||
data_part->volume->getDisk(),
|
||||
data_part->getFullRelativePath(),
|
||||
|
@ -1315,7 +1315,7 @@ CheckResults StorageMergeTree::checkData(const ASTPtr & query, const Context & c
|
||||
/// If the checksums file is not present, calculate the checksums and write them to disk.
|
||||
String checksums_path = part_path + "checksums.txt";
|
||||
String tmp_checksums_path = part_path + "checksums.txt.tmp";
|
||||
if (!disk->exists(checksums_path))
|
||||
if (part->isStoredOnDisk() && !disk->exists(checksums_path))
|
||||
{
|
||||
try
|
||||
{
|
||||
|
@ -0,0 +1 @@
|
||||
201901_1_1_0 1
|
10
tests/queries/0_stateless/01130_in_memory_parts_check.sql
Normal file
10
tests/queries/0_stateless/01130_in_memory_parts_check.sql
Normal file
@ -0,0 +1,10 @@
|
||||
-- Part of 00961_check_table test, but with in-memory parts
|
||||
SET check_query_single_value_result = 0;
|
||||
DROP TABLE IF EXISTS mt_table;
|
||||
CREATE TABLE mt_table (d Date, key UInt64, data String) ENGINE = MergeTree() PARTITION BY toYYYYMM(d) ORDER BY key
|
||||
SETTINGS min_rows_for_compact_part = 1000, min_rows_for_compact_part = 1000;
|
||||
|
||||
CHECK TABLE mt_table;
|
||||
INSERT INTO mt_table VALUES (toDate('2019-01-02'), 1, 'Hello'), (toDate('2019-01-02'), 2, 'World');
|
||||
CHECK TABLE mt_table;
|
||||
DROP TABLE mt_table;
|
Loading…
Reference in New Issue
Block a user