Skip to content

Commit 276dbf1

Browse files
committed
use settingsenum
1 parent 8602587 commit 276dbf1

File tree

10 files changed

+27
-38
lines changed

10 files changed

+27
-38
lines changed

src/Core/Settings.cpp

Lines changed: 4 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -6884,11 +6884,11 @@ Maximum number of retries for exporting a merge tree part in an export partition
68846884
Determines how long the manifest will live in ZooKeeper. It prevents the same partition from being exported twice to the same destination.
68856885
This setting does not affect / delete in progress tasks. It'll only cleanup the completed ones.
68866886
)", 0) \
6887-
DECLARE(String, export_merge_tree_part_file_already_exists_policy, "NO_OP", R"(
6887+
DECLARE(MergeTreePartExportFileAlreadyExistsPolicy, export_merge_tree_part_file_already_exists_policy, MergeTreePartExportFileAlreadyExistsPolicy::skip, R"(
68886888
Possible values:
6889-
- NO_OP - No-op if the file already exists - Default.
6890-
- ERROR - Throw an error if the file already exists.
6891-
- OVERWRITE - Overwrite the file
6889+
- skip - Skip the file if it already exists.
6890+
- error - Throw an error if the file already exists.
6891+
- overwrite - Overwrite the file.
68926892
)", 0) \
68936893
DECLARE(Timezone, iceberg_timezone_for_timestamptz, "UTC", R"(
68946894
Timezone for Iceberg timestamptz field.

src/Core/Settings.h

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -81,6 +81,7 @@ class WriteBuffer;
8181
M(CLASS_NAME, LogsLevel) \
8282
M(CLASS_NAME, Map) \
8383
M(CLASS_NAME, MaxThreads) \
84+
M(CLASS_NAME, MergeTreePartExportFileAlreadyExistsPolicy) \
8485
M(CLASS_NAME, Milliseconds) \
8586
M(CLASS_NAME, MsgPackUUIDRepresentation) \
8687
M(CLASS_NAME, MySQLDataTypesSupport) \

src/Core/SettingsChangesHistory.cpp

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -50,7 +50,7 @@ const VersionToSettingsChangesMap & getSettingsChangesHistory()
5050
{"export_merge_tree_partition_force_export", false, false, "New setting."},
5151
{"export_merge_tree_partition_max_retries", 3, 3, "New setting."},
5252
{"export_merge_tree_partition_manifest_ttl", 180, 180, "New setting."},
53-
{"export_merge_tree_part_file_already_exists_policy", "NO_OP", "NO_OP", "New setting."},
53+
{"export_merge_tree_part_file_already_exists_policy", "skip", "skip", "New setting."},
5454
{"iceberg_timezone_for_timestamptz", "UTC", "UTC", "New setting."}
5555
});
5656
addSettingsChanges(settings_changes_history, "25.8",

src/Core/SettingsEnums.cpp

Lines changed: 2 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -370,4 +370,6 @@ IMPLEMENT_SETTING_ENUM(
370370
{"manifest_list_entry", IcebergMetadataLogLevel::ManifestListEntry},
371371
{"manifest_file_metadata", IcebergMetadataLogLevel::ManifestFileMetadata},
372372
{"manifest_file_entry", IcebergMetadataLogLevel::ManifestFileEntry}})
373+
374+
IMPLEMENT_SETTING_AUTO_ENUM(MergeTreePartExportFileAlreadyExistsPolicy, ErrorCodes::BAD_ARGUMENTS);
373375
}

src/Core/SettingsEnums.h

Lines changed: 10 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -480,4 +480,14 @@ enum class IcebergMetadataLogLevel : uint8_t
480480
};
481481

482482
DECLARE_SETTING_ENUM(IcebergMetadataLogLevel)
483+
484+
enum class MergeTreePartExportFileAlreadyExistsPolicy : uint8_t
485+
{
486+
skip,
487+
error,
488+
overwrite,
489+
};
490+
491+
DECLARE_SETTING_ENUM(MergeTreePartExportFileAlreadyExistsPolicy)
492+
483493
}

src/Storages/MergeTree/ExportPartTask.cpp

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -95,7 +95,7 @@ bool ExportPartTask::executeStep()
9595
manifest.data_part->name + "_" + manifest.data_part->checksums.getTotalChecksumHex(),
9696
block_with_partition_values,
9797
(*exports_list_entry)->destination_file_path,
98-
manifest.file_already_exists_policy == MergeTreePartExportManifest::FileAlreadyExistsPolicy::OVERWRITE,
98+
manifest.file_already_exists_policy == MergeTreePartExportManifest::FileAlreadyExistsPolicy::overwrite,
9999
context_copy);
100100
}
101101
catch (const Exception & e)
@@ -105,7 +105,7 @@ bool ExportPartTask::executeStep()
105105
ProfileEvents::increment(ProfileEvents::PartsExportDuplicated);
106106

107107
/// File already exists and the policy is NO_OP, treat it as success.
108-
if (manifest.file_already_exists_policy == MergeTreePartExportManifest::FileAlreadyExistsPolicy::NO_OP)
108+
if (manifest.file_already_exists_policy == MergeTreePartExportManifest::FileAlreadyExistsPolicy::skip)
109109
{
110110
storage.writePartLog(
111111
PartLogElement::Type::EXPORT_PART,

src/Storages/MergeTree/MergeTreeData.cpp

Lines changed: 2 additions & 11 deletions
Original file line numberDiff line numberDiff line change
@@ -212,7 +212,7 @@ namespace Setting
212212
extern const SettingsBool apply_patch_parts;
213213
extern const SettingsBool allow_experimental_export_merge_tree_part;
214214
extern const SettingsUInt64 min_bytes_to_use_direct_io;
215-
extern const SettingsString export_merge_tree_part_file_already_exists_policy;
215+
extern const SettingsMergeTreePartExportFileAlreadyExistsPolicy export_merge_tree_part_file_already_exists_policy;
216216
extern const SettingsBool output_format_parallel_formatting;
217217
extern const SettingsBool output_format_parquet_parallel_encoding;
218218
}
@@ -6253,20 +6253,11 @@ void MergeTreeData::exportPartToTable(
62536253
part_name, getStorageID().getFullTableName());
62546254

62556255
{
6256-
const auto file_already_exists_policy = magic_enum::enum_cast<MergeTreePartExportManifest::FileAlreadyExistsPolicy>(Poco::toUpper(query_context->getSettingsRef()[Setting::export_merge_tree_part_file_already_exists_policy].value));
6257-
if (!file_already_exists_policy)
6258-
{
6259-
throw Exception(
6260-
ErrorCodes::INVALID_SETTING_VALUE,
6261-
"Invalid value for setting 'export_merge_tree_part_file_already_exists_policy': {}",
6262-
query_context->getSettingsRef()[Setting::export_merge_tree_part_file_already_exists_policy].value);
6263-
}
6264-
62656256
MergeTreePartExportManifest manifest(
62666257
dest_storage->getStorageID(),
62676258
part,
62686259
transaction_id,
6269-
*file_already_exists_policy,
6260+
query_context->getSettingsRef()[Setting::export_merge_tree_part_file_already_exists_policy].value,
62706261
query_context->getSettingsRef()[Setting::output_format_parallel_formatting],
62716262
query_context->getSettingsRef()[Setting::output_format_parquet_parallel_encoding],
62726263
query_context->getSettingsRef()[Setting::max_threads],

src/Storages/MergeTree/MergeTreePartExportManifest.h

Lines changed: 1 addition & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -14,12 +14,7 @@ class ExportPartTask;
1414

1515
struct MergeTreePartExportManifest
1616
{
17-
enum class FileAlreadyExistsPolicy
18-
{
19-
NO_OP,
20-
ERROR,
21-
OVERWRITE,
22-
};
17+
using FileAlreadyExistsPolicy = MergeTreePartExportFileAlreadyExistsPolicy;
2318

2419
using DataPartPtr = std::shared_ptr<const IMergeTreeDataPart>;
2520

src/Storages/StorageReplicatedMergeTree.cpp

Lines changed: 2 additions & 12 deletions
Original file line numberDiff line numberDiff line change
@@ -198,7 +198,7 @@ namespace Setting
198198
extern const SettingsBool output_format_parallel_formatting;
199199
extern const SettingsBool output_format_parquet_parallel_encoding;
200200
extern const SettingsMaxThreads max_threads;
201-
extern const SettingsString export_merge_tree_part_file_already_exists_policy;
201+
extern const SettingsMergeTreePartExportFileAlreadyExistsPolicy export_merge_tree_part_file_already_exists_policy;
202202
}
203203

204204
namespace MergeTreeSetting
@@ -8205,17 +8205,7 @@ void StorageReplicatedMergeTree::exportPartitionToTable(const PartitionCommand &
82058205
manifest.parallel_formatting = query_context->getSettingsRef()[Setting::output_format_parallel_formatting];
82068206
manifest.parquet_parallel_encoding = query_context->getSettingsRef()[Setting::output_format_parquet_parallel_encoding];
82078207

8208-
const auto file_already_exists_policy = magic_enum::enum_cast<MergeTreePartExportManifest::FileAlreadyExistsPolicy>(query_context->getSettingsRef()[Setting::export_merge_tree_part_file_already_exists_policy].value);
8209-
8210-
if (!file_already_exists_policy)
8211-
{
8212-
throw Exception(
8213-
ErrorCodes::INVALID_SETTING_VALUE,
8214-
"Invalid value for setting 'export_merge_tree_part_file_already_exists_policy': {}",
8215-
query_context->getSettingsRef()[Setting::export_merge_tree_part_file_already_exists_policy].value);
8216-
}
8217-
8218-
manifest.file_already_exists_policy = file_already_exists_policy.value();
8208+
manifest.file_already_exists_policy = query_context->getSettingsRef()[Setting::export_merge_tree_part_file_already_exists_policy].value;
82198209

82208210
ops.emplace_back(zkutil::makeCreateRequest(
82218211
fs::path(partition_exports_path) / "metadata.json",

tests/integration/test_export_replicated_mt_partition_to_object_storage/test.py

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -506,7 +506,7 @@ def test_export_partition_file_already_exists_policy(cluster):
506506

507507
# now let's try with a file exists policy that is not NO_OP
508508
node.query(
509-
f"ALTER TABLE {mt_table} EXPORT PARTITION ID '2020' TO TABLE {s3_table} SETTINGS allow_experimental_export_merge_tree_part=1, export_merge_tree_partition_force_export=1, export_merge_tree_part_file_already_exists_policy='OVERWRITE'",
509+
f"ALTER TABLE {mt_table} EXPORT PARTITION ID '2020' TO TABLE {s3_table} SETTINGS allow_experimental_export_merge_tree_part=1, export_merge_tree_partition_force_export=1, export_merge_tree_part_file_already_exists_policy='overwrite'",
510510
query_id=query_id_3,
511511
)
512512

@@ -527,7 +527,7 @@ def test_export_partition_file_already_exists_policy(cluster):
527527
# last but not least, let's try with the error policy
528528
# max retries = 1 so it fails fast
529529
node.query(
530-
f"ALTER TABLE {mt_table} EXPORT PARTITION ID '2020' TO TABLE {s3_table} SETTINGS allow_experimental_export_merge_tree_part=1, export_merge_tree_partition_force_export=1, export_merge_tree_part_file_already_exists_policy='ERROR', export_merge_tree_partition_max_retries=1",
530+
f"ALTER TABLE {mt_table} EXPORT PARTITION ID '2020' TO TABLE {s3_table} SETTINGS allow_experimental_export_merge_tree_part=1, export_merge_tree_partition_force_export=1, export_merge_tree_part_file_already_exists_policy='error', export_merge_tree_partition_max_retries=1",
531531
query_id=query_id_4,
532532
)
533533

0 commit comments

Comments
 (0)