@@ -828,7 +828,7 @@ ColumnsStatistics IMergeTreeDataPart::loadStatistics() const
828828 return result;
829829}
830830
831- void IMergeTreeDataPart::loadColumnsChecksumsIndexes (bool require_columns_checksums, bool check_consistency)
831+ void IMergeTreeDataPart::loadColumnsChecksumsIndexes (bool require_columns_checksums, bool check_consistency, bool load_metadata_version )
832832{
833833 // / Memory should not be limited during ATTACH TABLE query.
834834 // / This is already true at the server startup but must be also ensured for manual table ATTACH.
@@ -839,7 +839,7 @@ void IMergeTreeDataPart::loadColumnsChecksumsIndexes(bool require_columns_checks
839839 {
840840 if (!isStoredOnReadonlyDisk ())
841841 loadUUID ();
842- loadColumns (require_columns_checksums);
842+ loadColumns (require_columns_checksums, load_metadata_version );
843843 loadColumnsSubstreams ();
844844 loadChecksums (require_columns_checksums);
845845
@@ -1228,6 +1228,19 @@ void IMergeTreeDataPart::writeVersionMetadata(const VersionMetadata & version_,
12281228 }
12291229}
12301230
1231+ void IMergeTreeDataPart::writeMetadataVersion (ContextPtr context, int32_t metadata_version_, bool sync)
1232+ {
1233+ removeMetadataVersion ();
1234+ {
1235+ auto out_metadata = getDataPartStorage ().writeFile (METADATA_VERSION_FILE_NAME, 4096 , context->getWriteSettings ());
1236+ writeText (metadata_version_, *out_metadata);
1237+ out_metadata->finalize ();
1238+ if (sync)
1239+ out_metadata->sync ();
1240+ }
1241+ old_part_with_no_metadata_version_on_disk = false ;
1242+ }
1243+
12311244void IMergeTreeDataPart::removeDeleteOnDestroyMarker ()
12321245{
12331246 getDataPartStorage ().removeFileIfExists (DELETE_ON_DESTROY_MARKER_FILE_NAME_DEPRECATED);
@@ -1612,7 +1625,7 @@ void IMergeTreeDataPart::loadUUID()
16121625 }
16131626}
16141627
1615- void IMergeTreeDataPart::loadColumns (bool require)
1628+ void IMergeTreeDataPart::loadColumns (bool require, bool load_metadata_version )
16161629{
16171630 String path = fs::path (getDataPartStorage ().getRelativePath ()) / " columns.txt" ;
16181631
@@ -1656,20 +1669,24 @@ void IMergeTreeDataPart::loadColumns(bool require)
16561669 if (auto in = readFileIfExists (SERIALIZATION_FILE_NAME))
16571670 infos = SerializationInfoByName::readJSON (loaded_columns, settings, *in);
16581671
1659- int32_t loaded_metadata_version;
1660- if (auto in = readFileIfExists (METADATA_VERSION_FILE_NAME) )
1672+ std::optional< int32_t > loaded_metadata_version;
1673+ if (load_metadata_version )
16611674 {
1662- readIntText (loaded_metadata_version, *in);
1675+ if (auto in = readFileIfExists (METADATA_VERSION_FILE_NAME))
1676+ {
1677+ readIntText (loaded_metadata_version.emplace (), *in);
1678+ }
16631679 }
1664- else
1680+
1681+ if (!loaded_metadata_version)
16651682 {
16661683 auto storage_metdata_snapshot = storage.getInMemoryMetadataPtr ();
16671684 loaded_metadata_version = storage_metdata_snapshot->getMetadataVersion ();
16681685 old_part_with_no_metadata_version_on_disk = true ;
16691686 }
16701687
1671- LOG_DEBUG (storage.log , " Loaded metadata version {}" , loaded_metadata_version);
1672- setColumns (loaded_columns, infos, loaded_metadata_version);
1688+ LOG_DEBUG (storage.log , " Loaded metadata version {}" , * loaded_metadata_version);
1689+ setColumns (loaded_columns, infos, * loaded_metadata_version);
16731690}
16741691
16751692void IMergeTreeDataPart::loadColumnsSubstreams ()
0 commit comments