@@ -324,6 +324,12 @@ struct CoreOptions::Impl {
324324 std::optional<std::string> global_index_external_path;
325325
326326 std::optional<std::string> scan_tag_name;
327+ std::optional<int64_t > optimized_compaction_interval;
328+ std::optional<int64_t > compaction_total_size_threshold;
329+ std::optional<int64_t > compaction_incremental_size_threshold;
330+ int32_t compact_off_peak_start_hour = -1 ;
331+ int32_t compact_off_peak_end_hour = -1 ;
332+ int32_t compact_off_peak_ratio = 0 ;
327333};
328334
329335// Parse configurations from a map and return a populated CoreOptions object
@@ -507,6 +513,7 @@ Result<CoreOptions> CoreOptions::FromMap(
507513 impl->scan_tag_name = scan_tag_name;
508514 }
509515
516+ // Parse compaction options
510517 // Parse commit.force-compact
511518 PAIMON_RETURN_NOT_OK (
512519 parser.Parse <bool >(Options::COMMIT_FORCE_COMPACT , &impl->commit_force_compact ));
@@ -519,6 +526,41 @@ Result<CoreOptions> CoreOptions::FromMap(
519526 PAIMON_RETURN_NOT_OK (parser.Parse <bool >(Options::COMPACTION_FORCE_REWRITE_ALL_FILES ,
520527 &impl->compaction_force_rewrite_all_files ));
521528
529+ // Parse compaction.optimization-interval
530+ std::string optimized_compaction_interval_str;
531+ PAIMON_RETURN_NOT_OK (parser.ParseString (Options::COMPACTION_OPTIMIZATION_INTERVAL ,
532+ &optimized_compaction_interval_str));
533+ if (!optimized_compaction_interval_str.empty ()) {
534+ PAIMON_ASSIGN_OR_RAISE (impl->optimized_compaction_interval ,
535+ TimeDuration::Parse (optimized_compaction_interval_str));
536+ }
537+ // Parse compaction.total-size-threshold
538+ std::string compaction_total_size_threshold_str;
539+ PAIMON_RETURN_NOT_OK (parser.ParseString (Options::COMPACTION_TOTAL_SIZE_THRESHOLD ,
540+ &compaction_total_size_threshold_str));
541+ if (!compaction_total_size_threshold_str.empty ()) {
542+ PAIMON_ASSIGN_OR_RAISE (impl->compaction_total_size_threshold ,
543+ MemorySize::ParseBytes (compaction_total_size_threshold_str));
544+ }
545+ // Parse compaction.incremental-size-threshold
546+ std::string compaction_incremental_size_threshold_str;
547+ PAIMON_RETURN_NOT_OK (parser.ParseString (Options::COMPACTION_INCREMENTAL_SIZE_THRESHOLD ,
548+ &compaction_incremental_size_threshold_str));
549+ if (!compaction_incremental_size_threshold_str.empty ()) {
550+ PAIMON_ASSIGN_OR_RAISE (impl->compaction_incremental_size_threshold ,
551+ MemorySize::ParseBytes (compaction_incremental_size_threshold_str));
552+ }
553+
554+ // Parse compaction.offpeak.start.hour
555+ PAIMON_RETURN_NOT_OK (
556+ parser.Parse (Options::COMPACT_OFFPEAK_START_HOUR , &impl->compact_off_peak_start_hour ));
557+ // Parse compaction.offpeak.end.hour
558+ PAIMON_RETURN_NOT_OK (
559+ parser.Parse (Options::COMPACT_OFFPEAK_END_HOUR , &impl->compact_off_peak_end_hour ));
560+ // Parse compaction.offpeak-ratio
561+ PAIMON_RETURN_NOT_OK (
562+ parser.Parse (Options::COMPACTION_OFFPEAK_RATIO , &impl->compact_off_peak_ratio ));
563+
522564 return options;
523565}
524566
@@ -847,4 +889,24 @@ std::optional<std::string> CoreOptions::GetScanTagName() const {
847889 return impl_->scan_tag_name ;
848890}
849891
892+ std::optional<int64_t > CoreOptions::GetOptimizedCompactionInterval () const {
893+ return impl_->optimized_compaction_interval ;
894+ }
895+ std::optional<int64_t > CoreOptions::GetCompactionTotalSizeThreshold () const {
896+ return impl_->compaction_total_size_threshold ;
897+ }
898+ std::optional<int64_t > CoreOptions::GetCompactionIncrementalSizeThreshold () const {
899+ return impl_->compaction_incremental_size_threshold ;
900+ }
901+
902+ int32_t CoreOptions::GetCompactOffPeakStartHour () const {
903+ return impl_->compact_off_peak_start_hour ;
904+ }
905+ int32_t CoreOptions::GetCompactOffPeakEndHour () const {
906+ return impl_->compact_off_peak_end_hour ;
907+ }
908+ int32_t CoreOptions::GetCompactOffPeakRatio () const {
909+ return impl_->compact_off_peak_ratio ;
910+ }
911+
850912} // namespace paimon
0 commit comments