Skip to content

Commit e9daff6

Browse files
Merge pull request #54506 from azat/system.detached_parts-modification_time
Add modification_time into system.detached_parts
2 parents ee8db35 + 44a9dbd commit e9daff6

File tree

6 files changed

+37
-3
lines changed

6 files changed

+37
-3
lines changed

src/Storages/System/StorageSystemDetachedParts.cpp

Lines changed: 16 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -2,6 +2,7 @@
22

33
#include <DataTypes/DataTypeString.h>
44
#include <DataTypes/DataTypesNumber.h>
5+
#include <DataTypes/DataTypeDateTime.h>
56
#include <DataTypes/DataTypeNullable.h>
67
#include <Storages/IStorage.h>
78
#include <Storages/MergeTree/DataPartStorageOnDiskFull.h>
@@ -230,6 +231,19 @@ class DetachedPartsSource : public ISource
230231
size_t bytes_on_disk = parts_sizes.at(p_id - begin).load();
231232
new_columns[res_index++]->insert(bytes_on_disk);
232233
}
234+
if (columns_mask[src_index++])
235+
{
236+
Poco::Timestamp modification_time{};
237+
try
238+
{
239+
modification_time = p.disk->getLastModified(fs::path(current_info.data->getRelativeDataPath()) / MergeTreeData::DETACHED_DIR_NAME / p.dir_name);
240+
}
241+
catch (const fs::filesystem_error &)
242+
{
243+
tryLogCurrentException(__PRETTY_FUNCTION__);
244+
}
245+
new_columns[res_index++]->insert(static_cast<UInt64>(modification_time.epochTime()));
246+
}
233247
if (columns_mask[src_index++])
234248
new_columns[res_index++]->insert(p.disk->getName());
235249
if (columns_mask[src_index++])
@@ -260,12 +274,13 @@ StorageSystemDetachedParts::StorageSystemDetachedParts(const StorageID & table_i
260274
{"partition_id", std::make_shared<DataTypeNullable>(std::make_shared<DataTypeString>())},
261275
{"name", std::make_shared<DataTypeString>()},
262276
{"bytes_on_disk", std::make_shared<DataTypeUInt64>()},
277+
{"modification_time",std::make_shared<DataTypeDateTime>()},
263278
{"disk", std::make_shared<DataTypeString>()},
264279
{"path", std::make_shared<DataTypeString>()},
265280
{"reason", std::make_shared<DataTypeNullable>(std::make_shared<DataTypeString>())},
266281
{"min_block_number", std::make_shared<DataTypeNullable>(std::make_shared<DataTypeInt64>())},
267282
{"max_block_number", std::make_shared<DataTypeNullable>(std::make_shared<DataTypeInt64>())},
268-
{"level", std::make_shared<DataTypeNullable>(std::make_shared<DataTypeUInt32>())}
283+
{"level", std::make_shared<DataTypeNullable>(std::make_shared<DataTypeUInt32>())},
269284
}});
270285
setInMemoryMetadata(storage_metadata);
271286
}

tests/integration/test_partition/test.py

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -431,7 +431,7 @@ def test_system_detached_parts(drop_detached_parts_table):
431431
)
432432

433433
res = q(
434-
"select system.detached_parts.* except (bytes_on_disk, `path`) from system.detached_parts where table like 'sdp_%' order by table, name"
434+
"select system.detached_parts.* except (bytes_on_disk, `path`, modification_time) from system.detached_parts where table like 'sdp_%' order by table, name"
435435
)
436436
assert (
437437
res == "default\tsdp_0\tall\tall_1_1_0\tdefault\t\t1\t1\t0\n"

tests/queries/0_stateless/00502_custom_partitioning_local.sql

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -18,7 +18,7 @@ ALTER TABLE not_partitioned DETACH PARTITION ID 'all';
1818
SELECT 'Sum after DETACH PARTITION:';
1919
SELECT sum(x) FROM not_partitioned;
2020
SELECT 'system.detached_parts after DETACH PARTITION:';
21-
SELECT system.detached_parts.* EXCEPT (bytes_on_disk, `path`, disk) FROM system.detached_parts WHERE database = currentDatabase() AND table = 'not_partitioned';
21+
SELECT system.detached_parts.* EXCEPT (bytes_on_disk, `path`, disk, modification_time) FROM system.detached_parts WHERE database = currentDatabase() AND table = 'not_partitioned';
2222

2323
DROP TABLE not_partitioned;
2424

tests/queries/0_stateless/02117_show_create_table_system.reference

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -145,6 +145,7 @@ CREATE TABLE system.detached_parts
145145
`partition_id` Nullable(String),
146146
`name` String,
147147
`bytes_on_disk` UInt64,
148+
`modification_time` DateTime,
148149
`disk` String,
149150
`path` String,
150151
`reason` Nullable(String),
Lines changed: 2 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,2 @@
1+
after detach 1
2+
after detach 1
Lines changed: 16 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,16 @@
1+
set mutations_sync=1;
2+
3+
{% for id, settings in [
4+
("wide", "min_bytes_for_wide_part=0, min_rows_for_wide_part=0"),
5+
("compact", "min_bytes_for_wide_part=1000, min_rows_for_wide_part=100"),
6+
]
7+
%}
8+
9+
drop table if exists data_{{ id }};
10+
create table data_{{ id }} (key Int) engine=MergeTree() order by tuple() settings {{ settings }};
11+
insert into data_{{ id }} values (1);
12+
select 'before detach', now()-modification_time < 10 from system.detached_parts where database = currentDatabase() and table = 'data_{{ id }}';
13+
alter table data_{{ id }} detach partition all;
14+
select 'after detach', now()-modification_time < 10 from system.detached_parts where database = currentDatabase() and table = 'data_{{ id }}';
15+
16+
{% endfor %}

0 commit comments

Comments
 (0)