sarvekshayr commented on code in PR #11368:
URL: https://github.com/apache/ozone/pull/11368#discussion_r4193951801


##########
hadoop-ozone/dist/src/main/smoketest/basic/links.robot:
##########
@@ -94,6 +94,14 @@ Link to non-existent bucket
     ${result} =         Execute And Ignore Error    ozone sh key list 
${target}/dangling-link
                         Should Contain              ${result}         
BUCKET_NOT_FOUND
 
+Link to non-existent source volume
+    ${missing} =        Generate Random String  5  [NUMBERS]
+    ${missingVol} =     Set Variable              ${missing}-missing-source
+                        Execute                     ozone sh bucket link 
${missingVol}/any-bucket ${target}/dangling-missing-vol

Review Comment:
   Lets simplify this - 
   ```suggestion
                           Execute                     ozone sh bucket link 
no-such-volume/no-such-bucket ${target}/dangling-missing-vol
   
   ```



##########
hadoop-ozone/ozone-manager/src/test/java/org/apache/hadoop/ozone/om/TestBucketManagerImpl.java:
##########
@@ -660,6 +662,60 @@ private static void denySourceRead(OmMetadataReader 
metadataReader, String sourc
     }).when(metadataReader).checkAcls(any(), any(), any(), any(), any(), 
any());
   }
 
+  @Test
+  void testResolveBucketLinkMissingSourceVolume() throws Exception {
+    String targetVolume = volumeName();
+    String missingSourceVolume = volumeName();
+    OmBucketInfo danglingLink = OmBucketInfo.newBuilder()
+        .setVolumeName(targetVolume)
+        .setBucketName("dangling-link")
+        .setSourceVolume(missingSourceVolume)
+        .setSourceBucket("any-bucket")
+        .build();
+    BucketManager bucketManager = mock(BucketManager.class);
+    when(bucketManager.getBucketInfo(targetVolume, 
"dangling-link")).thenReturn(danglingLink);
+    when(bucketManager.getBucketInfo(missingSourceVolume, "any-bucket"))
+        .thenThrow(new OMException("Volume doesn't exist", 
ResultCodes.VOLUME_NOT_FOUND));
+    OzoneManager omSpy = spy(omTestManagers.getOzoneManager());
+    HddsWhiteboxTestUtils.setInternalState(omSpy, "bucketManager", 
bucketManager);
+    when(omSpy.getAclsEnabled()).thenReturn(false);
+
+    OMException omEx = assertThrows(OMException.class,
+        () -> omSpy.resolveBucketLink(Pair.of(targetVolume, "dangling-link")));
+    assertEquals(ResultCodes.BUCKET_NOT_FOUND, omEx.getResult());
+    assertTrue(omEx.getMessage().contains("Cannot follow bucket link"));
+  }
+
+  @Test
+  void testListKeysOnLinkWithMissingSourceVolume() throws Exception {
+    String targetVolume = volumeName();
+    String missingSourceVolume = volumeName();
+    OmBucketInfo danglingLink = OmBucketInfo.newBuilder()
+        .setVolumeName(targetVolume)
+        .setBucketName("dangling-link-list")
+        .setSourceVolume(missingSourceVolume)
+        .setSourceBucket("any-bucket")
+        .build();
+    BucketManager bucketManager = mock(BucketManager.class);
+    when(bucketManager.getBucketInfo(targetVolume, 
"dangling-link-list")).thenReturn(danglingLink);
+    when(bucketManager.getBucketInfo(missingSourceVolume, "any-bucket"))
+        .thenThrow(new OMException("Volume doesn't exist", 
ResultCodes.VOLUME_NOT_FOUND));
+    OzoneManager om = omTestManagers.getOzoneManager();
+    OzoneManager omSpy = spy(om);
+    HddsWhiteboxTestUtils.setInternalState(omSpy, "bucketManager", 
bucketManager);
+    when(omSpy.getAclsEnabled()).thenReturn(false);
+    OmMetadataReader metadataReader = (OmMetadataReader) 
HddsWhiteboxTestUtils.getInternalState(om,
+        "omMetadataReader");
+    HddsWhiteboxTestUtils.setInternalState(metadataReader, "ozoneManager", 
omSpy);
+
+    OMException omEx = assertThrows(OMException.class,
+        () -> omSpy.listKeys(targetVolume, "dangling-link-list", null, null, 
100));
+    assertEquals(ResultCodes.BUCKET_NOT_FOUND, omEx.getResult());
+    assertTrue(omEx.getMessage().contains("Cannot follow bucket link"));

Review Comment:
   Use `assertThat` instead of `assertTrue` here as well.



##########
hadoop-ozone/ozone-manager/src/main/java/org/apache/hadoop/ozone/om/OzoneManager.java:
##########
@@ -5416,6 +5418,13 @@ private OmBucketInfo resolveBucketLink(
       if (allowDanglingBuckets) {
         return null;
       }
+
+      if (!visited.isEmpty()
+          && (e.getResult() == VOLUME_NOT_FOUND || e.getResult() == 
BUCKET_NOT_FOUND)) {
+        throw new OMException(
+            "Cannot follow bucket link: linked source bucket does not exist",
+            BUCKET_NOT_FOUND);

Review Comment:
   Include source details to improve error message. 
   ```suggestion
           throw new OMException(
               String.format("Cannot follow bucket link: linked source %s/%s 
does not exist",
                     volumeName, bucketName),
               e, BUCKET_NOT_FOUND);
   ```



##########
hadoop-ozone/ozone-manager/src/test/java/org/apache/hadoop/ozone/om/TestBucketManagerImpl.java:
##########
@@ -660,6 +662,60 @@ private static void denySourceRead(OmMetadataReader 
metadataReader, String sourc
     }).when(metadataReader).checkAcls(any(), any(), any(), any(), any(), 
any());
   }
 
+  @Test
+  void testResolveBucketLinkMissingSourceVolume() throws Exception {
+    String targetVolume = volumeName();
+    String missingSourceVolume = volumeName();
+    OmBucketInfo danglingLink = OmBucketInfo.newBuilder()
+        .setVolumeName(targetVolume)
+        .setBucketName("dangling-link")
+        .setSourceVolume(missingSourceVolume)
+        .setSourceBucket("any-bucket")
+        .build();
+    BucketManager bucketManager = mock(BucketManager.class);
+    when(bucketManager.getBucketInfo(targetVolume, 
"dangling-link")).thenReturn(danglingLink);
+    when(bucketManager.getBucketInfo(missingSourceVolume, "any-bucket"))
+        .thenThrow(new OMException("Volume doesn't exist", 
ResultCodes.VOLUME_NOT_FOUND));
+    OzoneManager omSpy = spy(omTestManagers.getOzoneManager());
+    HddsWhiteboxTestUtils.setInternalState(omSpy, "bucketManager", 
bucketManager);
+    when(omSpy.getAclsEnabled()).thenReturn(false);
+
+    OMException omEx = assertThrows(OMException.class,
+        () -> omSpy.resolveBucketLink(Pair.of(targetVolume, "dangling-link")));
+    assertEquals(ResultCodes.BUCKET_NOT_FOUND, omEx.getResult());
+    assertTrue(omEx.getMessage().contains("Cannot follow bucket link"));

Review Comment:
   Please use `assertThat` instead of `assertTrue`, see 
[HDDS-9951](https://issues.apache.org/jira/browse/HDDS-9951).
   ```suggestion
       assertThat(omEx.getMessage()).contains("Cannot follow bucket link");
   ```



-- 
This is an automated message from the Apache Git Service.
To respond to the message, please log on to GitHub and use the
URL above to go to the specific comment.

To unsubscribe, e-mail: [email protected]

For queries about this service, please contact Infrastructure at:
[email protected]


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

Reply via email to