This is an automated email from the ASF dual-hosted git repository.

weichiu pushed a commit to branch master
in repository https://gitbox.apache.org/repos/asf/ozone.git


The following commit(s) were added to refs/heads/master by this push:
     new 905d1ad567b HDDS-13538. Transfer snapshot YAML files as part of 
bootstrap tarball. (#8899)
905d1ad567b is described below

commit 905d1ad567bf2c6f1fae1dec4c8164da82682923
Author: Sadanand Shenoy <[email protected]>
AuthorDate: Sat Aug 16 10:27:12 2025 +0530

    HDDS-13538. Transfer snapshot YAML files as part of bootstrap tarball. 
(#8899)
    
    Co-authored-by: Wei-Chiu Chuang <[email protected]>
    Generated-by: Copilot
---
 .../TestOMDbCheckpointServletInodeBasedXfer.java   | 24 ++++++++++++++++++++++
 .../om/OMDBCheckpointServletInodeBasedXfer.java    |  7 +++++++
 .../apache/hadoop/ozone/om/OmSnapshotManager.java  | 14 +++++++++----
 3 files changed, 41 insertions(+), 4 deletions(-)

diff --git 
a/hadoop-ozone/integration-test/src/test/java/org/apache/hadoop/ozone/om/TestOMDbCheckpointServletInodeBasedXfer.java
 
b/hadoop-ozone/integration-test/src/test/java/org/apache/hadoop/ozone/om/TestOMDbCheckpointServletInodeBasedXfer.java
index a43b0832c96..ec2080e9cf4 100644
--- 
a/hadoop-ozone/integration-test/src/test/java/org/apache/hadoop/ozone/om/TestOMDbCheckpointServletInodeBasedXfer.java
+++ 
b/hadoop-ozone/integration-test/src/test/java/org/apache/hadoop/ozone/om/TestOMDbCheckpointServletInodeBasedXfer.java
@@ -291,10 +291,12 @@ public void testContentsOfTarballWithSnapshot(boolean 
includeSnapshot) throws Ex
     Path checkpointLocation = realCheckpoint.get().getCheckpointLocation();
     populateInodesOfFilesInDirectory(dbStore, checkpointLocation,
         inodesFromOmDataDir, hardLinkMapFromOmData);
+    int numSnapshots = 0;
     if (includeSnapshot) {
       for (String snapshotPath : snapshotPaths) {
         populateInodesOfFilesInDirectory(dbStore, Paths.get(snapshotPath),
             inodesFromOmDataDir, hardLinkMapFromOmData);
+        numSnapshots++;
       }
     }
     populateInodesOfFilesInDirectory(dbStore, 
Paths.get(dbStore.getRocksDBCheckpointDiffer().getSSTBackupDir()),
@@ -317,8 +319,30 @@ public void testContentsOfTarballWithSnapshot(boolean 
includeSnapshot) throws Ex
     assertFalse(inodesFromTarball.isEmpty());
     assertTrue(inodesFromTarball.containsAll(inodesFromOmDataDir));
 
+    long actualYamlFiles = Files.list(newDbDir.toPath())
+        .filter(f -> f.getFileName().toString()
+            .endsWith(".yaml")).count();
+    assertEquals(numSnapshots, actualYamlFiles,
+        "Number of generated YAML files should match the number of 
snapshots.");
+
     // create hardlinks now
     OmSnapshotUtils.createHardLinks(newDbDir.toPath(), true);
+
+    if (includeSnapshot) {
+      List<String> yamlRelativePaths = snapshotPaths.stream().map(path -> {
+        int startIndex = path.indexOf("db.snapshots");
+        if (startIndex != -1) {
+          return path.substring(startIndex) + ".yaml";
+        }
+        return path + ".yaml";
+      }).collect(Collectors.toList());
+
+      for (String yamlRelativePath : yamlRelativePaths) {
+        String yamlFileName = Paths.get(newDbDir.getPath(), 
yamlRelativePath).toString();
+        assertTrue(Files.exists(Paths.get(yamlFileName)));
+      }
+    }
+
     assertFalse(hardlinkFilePath.toFile().exists());
   }
 
diff --git 
a/hadoop-ozone/ozone-manager/src/main/java/org/apache/hadoop/ozone/om/OMDBCheckpointServletInodeBasedXfer.java
 
b/hadoop-ozone/ozone-manager/src/main/java/org/apache/hadoop/ozone/om/OMDBCheckpointServletInodeBasedXfer.java
index 97e345e7677..42a28e4a781 100644
--- 
a/hadoop-ozone/ozone-manager/src/main/java/org/apache/hadoop/ozone/om/OMDBCheckpointServletInodeBasedXfer.java
+++ 
b/hadoop-ozone/ozone-manager/src/main/java/org/apache/hadoop/ozone/om/OMDBCheckpointServletInodeBasedXfer.java
@@ -297,6 +297,13 @@ private void transferSnapshotData(Set<String> 
sstFilesToExclude, Path tmpdir, Se
         
om.getOmSnapshotManager().invalidateCacheEntry(UUID.fromString(snapshotId));
         writeDBToArchive(sstFilesToExclude, snapshotDir, maxTotalSstSize, 
archiveOutputStream, tmpdir,
             hardLinkFileMap, false);
+        Path snapshotLocalPropertyYaml = Paths.get(
+            OmSnapshotManager.getSnapshotLocalPropertyYamlPath(snapshotDir));
+        if (Files.exists(snapshotLocalPropertyYaml)) {
+          File yamlFile = snapshotLocalPropertyYaml.toFile();
+          hardLinkFileMap.put(yamlFile.getAbsolutePath(), yamlFile.getName());
+          linkAndIncludeFile(yamlFile, yamlFile.getName(), 
archiveOutputStream, tmpdir);
+        }
       } finally {
         omMetadataManager.getLock().releaseReadLock(SNAPSHOT_DB_LOCK, 
snapshotId);
       }
diff --git 
a/hadoop-ozone/ozone-manager/src/main/java/org/apache/hadoop/ozone/om/OmSnapshotManager.java
 
b/hadoop-ozone/ozone-manager/src/main/java/org/apache/hadoop/ozone/om/OmSnapshotManager.java
index 786a55b4bb9..91e5abb217a 100644
--- 
a/hadoop-ozone/ozone-manager/src/main/java/org/apache/hadoop/ozone/om/OmSnapshotManager.java
+++ 
b/hadoop-ozone/ozone-manager/src/main/java/org/apache/hadoop/ozone/om/OmSnapshotManager.java
@@ -840,12 +840,18 @@ public static String 
extractSnapshotIDFromCheckpointDirName(String snapshotPath)
    */
   public static String getSnapshotLocalPropertyYamlPath(OMMetadataManager 
omMetadataManager,
       SnapshotInfo snapshotInfo) {
-    return getSnapshotPath(omMetadataManager, snapshotInfo) + ".yaml";
+    Path snapshotPath = getSnapshotPath(omMetadataManager, snapshotInfo);
+    return getSnapshotLocalPropertyYamlPath(snapshotPath);
   }
 
-  public static String getSnapshotLocalPropertyYamlPath(OzoneConfiguration 
conf,
-      SnapshotInfo snapshotInfo) {
-    return getSnapshotPath(conf, snapshotInfo) + ".yaml";
+  /**
+   * Returns the path to the YAML file that stores local properties for the 
given snapshot.
+   *
+   * @param snapshotPath path to the snapshot checkpoint dir
+   * @return the path to the snapshot's local property YAML file
+   */
+  public static String getSnapshotLocalPropertyYamlPath(Path snapshotPath) {
+    return snapshotPath.toString() + ".yaml";
   }
 
   public static boolean isSnapshotKey(String[] keyParts) {


---------------------------------------------------------------------
To unsubscribe, e-mail: [email protected]
For additional commands, e-mail: [email protected]

Reply via email to