adutra commented on code in PR #8857:
URL: https://github.com/apache/iceberg/pull/8857#discussion_r1365256655


##########
nessie/src/main/java/org/apache/iceberg/nessie/NessieIcebergClient.java:
##########
@@ -223,27 +284,57 @@ namespace, getRef().getName()),
   }
 
   public boolean dropNamespace(Namespace namespace) throws 
NamespaceNotEmptyException {
+
+    getRef().checkMutable();
+    ContentKey key = ContentKey.of(namespace.levels());
+
     try {
-      getRef().checkMutable();
-      withReference(
-              getApi()
-                  .deleteNamespace()
-                  
.namespace(org.projectnessie.model.Namespace.of(namespace.levels())))
-          .delete();
-      refresh();
+
+      CommitMultipleOperationsBuilder commitBuilder =
+          api.commitMultipleOperations()
+              .commitMeta(NessieUtil.buildCommitMetadata("drop namespace " + 
key, catalogOptions))
+              .operation(Operation.Delete.of(key));
+
+      Tasks.foreach(commitBuilder)
+          .retry(5)
+          .stopRetryOn(
+              NessieReferenceNotFoundException.class, 
NessieReferenceConflictException.class)
+          .throwFailureWhenFinished()
+          .onFailure((o, exception) -> refresh())
+          .run(
+              b -> {
+                Branch branch = b.branch((Branch) getReference()).commit();
+                getRef().updateReference(branch);
+              },
+              BaseNessieClientServerException.class);
+
       return true;
-    } catch (NessieNamespaceNotFoundException e) {
-      return false;
-    } catch (NessieNotFoundException e) {
+    } catch (NessieReferenceNotFoundException e) {
       LOG.error(
           "Cannot drop Namespace '{}': ref '{}' is no longer valid.",
           namespace,
           getRef().getName(),
           e);
       return false;
-    } catch (NessieNamespaceNotEmptyException e) {
-      throw new NamespaceNotEmptyException(
-          e, "Namespace '%s' is not empty. One or more tables exist.", 
namespace);
+    } catch (NessieReferenceConflictException e) {
+      List<Conflict> conflicts = e.getErrorDetails().conflicts();

Review Comment:
   The issue is that `Conflict.conflictType()` is nullable, so the above code 
raises a few compiler warnings.
   
   > Maybe worth to handle all conflicts in one method used for create-ref and 
drop-ref?
   
   There is already a method to handle all conflicts: 
`NessieTableOperations.maybeThrowSpecializedException()`. I didn't want to 
touch it because it would require some refactoring to be usable here. But I 
will check again.



-- 
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: issues-unsubscr...@iceberg.apache.org

For queries about this service, please contact Infrastructure at:
us...@infra.apache.org


---------------------------------------------------------------------
To unsubscribe, e-mail: issues-unsubscr...@iceberg.apache.org
For additional commands, e-mail: issues-h...@iceberg.apache.org

Reply via email to