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

jmclean pushed a commit to branch main
in repository https://gitbox.apache.org/repos/asf/gravitino.git


The following commit(s) were added to refs/heads/main by this push:
     new e5007ccbde [#7351] feat(cli): Add MODEL provider support to CLI (#7366)
e5007ccbde is described below

commit e5007ccbdee8a5417f8c4c302f0f3be5850a68cb
Author: Edie <[email protected]>
AuthorDate: Thu Jul 10 17:53:04 2025 -0700

    [#7351] feat(cli): Add MODEL provider support to CLI (#7366)
    
    ### What changes were proposed in this pull request?
    
    Add support for MODEL provider in CLI catalog creation command by:
    - Add MODEL constant definition
    - Add MODEL to valid providers set
    - Handle MODEL provider in internal() method
    - Set catalog type to MODEL for model provider
    
    ### Why are the changes needed?
    
    Currently, the CLI throws "Unsupported provider: model" error when
    trying to create a model catalog. This prevents users from using the CLI
    to manage model catalogs, even though the server supports model
    catalogs.
    
    Fix: CLI does not support create model catalog now
    
    ### Does this PR introduce *any* user-facing change?
    
    Yes, this PR introduces the following user-facing change:
    - Users can now use CLI command `gcli.sh catalog create --metalake
    <metalake> --name <name> --provider model` to create model catalogs
    - The CLI will no longer throw "Unsupported provider: model" error for
    model provider
    
    ### How was this patch tested?
    
    - Built the project successfully with `./gradlew build`
    - Ran CLI tests with `./gradlew :clients:cli:test` - all tests passed
    - **Manual testing**: CLI command `catalog create --metalake yedian
    --name model --provider model` now successfully creates model catalog
    instead of throwing "Unsupported provider: model" error
    - Verified the fix by starting local Gravitino server and testing the
    complete workflow
---
 .../main/java/org/apache/gravitino/cli/Providers.java |  6 ++++++
 .../java/org/apache/gravitino/cli/TestProviders.java  | 19 +++++++++++++++++++
 2 files changed, 25 insertions(+)

diff --git a/clients/cli/src/main/java/org/apache/gravitino/cli/Providers.java 
b/clients/cli/src/main/java/org/apache/gravitino/cli/Providers.java
index 46f875c11b..174d2a2a02 100644
--- a/clients/cli/src/main/java/org/apache/gravitino/cli/Providers.java
+++ b/clients/cli/src/main/java/org/apache/gravitino/cli/Providers.java
@@ -37,6 +37,7 @@ public class Providers {
   public static final String PAIMON = "paimon";
   public static final String HUDI = "hudi";
   public static final String OCEANBASE = "oceanbase";
+  public static final String MODEL = "model";
 
   private static final HashSet<String> VALID_PROVIDERS = new HashSet<>();
 
@@ -51,6 +52,7 @@ public class Providers {
     VALID_PROVIDERS.add(PAIMON);
     VALID_PROVIDERS.add(HUDI);
     VALID_PROVIDERS.add(OCEANBASE);
+    VALID_PROVIDERS.add(MODEL);
   }
 
   /**
@@ -85,6 +87,8 @@ public class Providers {
         return "lakehouse-hudi";
       case OCEANBASE:
         return "jdbc-oceanbase";
+      case MODEL:
+        return "model";
       default:
         throw new IllegalArgumentException("Unsupported provider: " + 
provider);
     }
@@ -105,6 +109,8 @@ public class Providers {
         return Catalog.Type.RELATIONAL;
       case KAFKA:
         return Catalog.Type.MESSAGING;
+      case MODEL:
+        return Catalog.Type.MODEL;
       default:
         throw new IllegalArgumentException("Unsupported provider: " + 
provider);
     }
diff --git 
a/clients/cli/src/test/java/org/apache/gravitino/cli/TestProviders.java 
b/clients/cli/src/test/java/org/apache/gravitino/cli/TestProviders.java
index c7302e2884..c59a0ca193 100644
--- a/clients/cli/src/test/java/org/apache/gravitino/cli/TestProviders.java
+++ b/clients/cli/src/test/java/org/apache/gravitino/cli/TestProviders.java
@@ -19,11 +19,13 @@
 
 package org.apache.gravitino.cli;
 
+import static org.junit.jupiter.api.Assertions.assertEquals;
 import static org.junit.jupiter.api.Assertions.assertFalse;
 import static org.junit.jupiter.api.Assertions.assertNotNull;
 import static org.junit.jupiter.api.Assertions.assertThrows;
 import static org.junit.jupiter.api.Assertions.assertTrue;
 
+import org.apache.gravitino.Catalog;
 import org.junit.jupiter.api.Test;
 
 public class TestProviders {
@@ -41,6 +43,7 @@ public class TestProviders {
     assertTrue(Providers.isValidProvider(Providers.HUDI), "HUDI should be a 
valid entity");
     assertTrue(
         Providers.isValidProvider(Providers.OCEANBASE), "OCEANBASE should be a 
valid entity");
+    assertTrue(Providers.isValidProvider(Providers.MODEL), "MODEL should be a 
valid entity");
   }
 
   @Test
@@ -79,6 +82,7 @@ public class TestProviders {
     assertNotNull(Providers.internal(Providers.PAIMON), "Internal string 
should not be null");
     assertNotNull(Providers.internal(Providers.HUDI), "Internal string should 
not be null");
     assertNotNull(Providers.internal(Providers.OCEANBASE), "Internal string 
should not be null");
+    assertNotNull(Providers.internal(Providers.MODEL), "Internal string should 
not be null");
   }
 
   @Test
@@ -101,6 +105,7 @@ public class TestProviders {
     assertNotNull(Providers.catalogType(Providers.PAIMON), "Catalog type 
should not be null");
     assertNotNull(Providers.catalogType(Providers.HUDI), "Catalog type should 
not be null");
     assertNotNull(Providers.catalogType(Providers.OCEANBASE), "Catalog type 
should not be null");
+    assertNotNull(Providers.catalogType(Providers.MODEL), "Catalog type should 
not be null");
   }
 
   @Test
@@ -110,4 +115,18 @@ public class TestProviders {
         () -> Providers.catalogType("unknown"),
         "Expected an IllegalArgumentException for an unknown provider");
   }
+
+  @Test
+  public void modelProviderInternal() {
+    assertEquals(
+        "model", Providers.internal(Providers.MODEL), "MODEL internal should 
return 'model'");
+  }
+
+  @Test
+  public void modelProviderCatalogType() {
+    assertEquals(
+        Catalog.Type.MODEL,
+        Providers.catalogType(Providers.MODEL),
+        "MODEL catalog type should be MODEL");
+  }
 }

Reply via email to