Skip to content

Commit 534caad

Browse files
authored
Merge pull request ClickHouse#79569 from tuanpach/fix-rename-database-atomic
Fix using incorrect paths when renaming an Atomic database
2 parents 44b7e9f + a7c0f78 commit 534caad

File tree

4 files changed

+69
-2
lines changed

4 files changed

+69
-2
lines changed

src/Databases/DatabaseAtomic.cpp

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -673,8 +673,8 @@ void DatabaseAtomic::renameDatabase(ContextPtr query_context, const String & new
673673
}
674674

675675
auto new_name_escaped = escapeForFileName(new_name);
676-
auto old_database_metadata_path = root_path / "metadata" / (escapeForFileName(getDatabaseName()) + ".sql");
677-
auto new_database_metadata_path = root_path / "metadata" / (new_name_escaped + ".sql");
676+
auto old_database_metadata_path = fs::path("metadata") / (escapeForFileName(getDatabaseName()) + ".sql");
677+
auto new_database_metadata_path = fs::path("metadata") / (new_name_escaped + ".sql");
678678
db_disk->moveFile(old_database_metadata_path, new_database_metadata_path);
679679

680680
String old_path_to_table_symlinks;

tests/integration/test_database_disk/__init__.py

Whitespace-only changes.
Lines changed: 13 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,13 @@
1+
<clickhouse>
2+
<database_disk>
3+
<disk>custom_db_disk</disk>
4+
</database_disk>
5+
<storage_configuration>
6+
<disks>
7+
<custom_db_disk>
8+
<type>local</type>
9+
<path>/var/lib/clickhouse/disks/default/</path>
10+
</custom_db_disk>
11+
</disks>
12+
</storage_configuration>
13+
</clickhouse>
Lines changed: 54 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,54 @@
1+
import pytest
2+
3+
from helpers.cluster import ClickHouseCluster
4+
5+
cluster = ClickHouseCluster(__file__)
6+
7+
node1 = cluster.add_instance(
8+
"node1",
9+
main_configs=["configs/database_disk.xml"],
10+
with_remote_database_disk=False,
11+
)
12+
13+
14+
@pytest.fixture(scope="module")
15+
def started_cluster():
16+
try:
17+
cluster.start()
18+
19+
yield cluster
20+
21+
finally:
22+
cluster.shutdown()
23+
24+
25+
def test_rename_database_with_database_disk(started_cluster):
26+
db_disk_path = node1.query(
27+
"SELECT path FROM system.disks WHERE name='custom_db_disk'"
28+
).strip()
29+
30+
def list_file_in_metadata_dir():
31+
return node1.exec_in_container(
32+
[
33+
"bash",
34+
"-c",
35+
f'ls "{db_disk_path}/metadata/"',
36+
],
37+
privileged=True,
38+
user="root",
39+
)
40+
41+
node1.query("DROP DATABASE IF EXISTS test SYNC")
42+
node1.query("CREATE DATABASE test ENGINE=Atomic")
43+
44+
node1.query("RENAME DATABASE test TO test_rename")
45+
metadata_files = list_file_in_metadata_dir()
46+
assert "test.sql" not in metadata_files
47+
assert "test_rename.sql" in metadata_files
48+
49+
node1.query("RENAME DATABASE test_rename TO test")
50+
metadata_files = list_file_in_metadata_dir()
51+
assert "test.sql" in metadata_files
52+
assert "test_rename.sql" not in metadata_files
53+
54+
node1.query("DROP DATABASE IF EXISTS test SYNC")

0 commit comments

Comments
 (0)