Re: [PR] [#5989] The credential type of ADLSTokenCredentialProvider is not equal to the credential type of ADLSTokenCredential [gravitino]
jerryshao merged PR #5990: URL: https://github.com/apache/gravitino/pull/5990 -- 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: commits-unsubscr...@gravitino.apache.org For queries about this service, please contact Infrastructure at: us...@infra.apache.org
Re: [I] [Bug report] The credential type of ADLSTokenCredentialProvider is not equal to the credential type of ADLSTokenCredential [gravitino]
jerryshao closed issue #5989: [Bug report] The credential type of ADLSTokenCredentialProvider is not equal to the credential type of ADLSTokenCredential URL: https://github.com/apache/gravitino/issues/5989 -- 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: commits-unsubscr...@gravitino.apache.org For queries about this service, please contact Infrastructure at: us...@infra.apache.org
(gravitino) branch main updated: [#5989] The credential type of ADLSTokenCredentialProvider is not equal to the credential type of ADLSTokenCredential (#5990)
This is an automated email from the ASF dual-hosted git repository. jshao 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 486c042cb2 [#5989] The credential type of ADLSTokenCredentialProvider is not equal to the credential type of ADLSTokenCredential (#5990) 486c042cb2 is described below commit 486c042cb23182c761881cd7f5b6826d038001d0 Author: FANNG AuthorDate: Sat Dec 28 17:00:25 2024 +0800 [#5989] The credential type of ADLSTokenCredentialProvider is not equal to the credential type of ADLSTokenCredential (#5990) ### What changes were proposed in this pull request? ADLSTokenCredentialProvider use the credential type from ADLSTokenCredential ### Why are the changes needed? Fix: #5989 ### Does this PR introduce _any_ user-facing change? no ### How was this patch tested? add test --- .../gravitino/credential/ADLSTokenCredential.java | 6 ++-- bundles/aliyun/build.gradle.kts| 6 .../oss/credential/TestCredentialProvider.java | 40 ++ bundles/aws/build.gradle.kts | 6 .../s3/credential/TestCredentialProvider.java | 39 + bundles/azure/build.gradle.kts | 6 .../abs/credential/ADLSTokenProvider.java | 3 +- .../abs/credential/AzureAccountKeyProvider.java| 3 +- .../abs/credential/TestCredentialProvider.java | 40 ++ bundles/gcp/build.gradle.kts | 6 .../gravitino/gcs/credential/GCSTokenProvider.java | 3 +- .../gcs/credential/TestCredentialProvider.java | 34 ++ .../gravitino/credential/CredentialConstants.java | 9 - .../api/credential/adls_token_credential.py| 4 +-- .../gravitino/utils/credential_factory.py | 2 +- .../tests/unittests/test_credential_factory.py | 2 +- .../credential/TestCredentialFactory.java | 6 ++-- .../integration/test/IcebergRESTADLSTokenIT.java | 3 +- .../test/IcebergRESTAzureAccountKeyIT.java | 3 +- .../iceberg/integration/test/IcebergRESTGCSIT.java | 3 +- .../iceberg/integration/test/IcebergRESTOSSIT.java | 3 +- .../iceberg/integration/test/IcebergRESTS3IT.java | 3 +- 22 files changed, 199 insertions(+), 31 deletions(-) diff --git a/api/src/main/java/org/apache/gravitino/credential/ADLSTokenCredential.java b/api/src/main/java/org/apache/gravitino/credential/ADLSTokenCredential.java index 25c83c2f7c..249b0ac0b0 100644 --- a/api/src/main/java/org/apache/gravitino/credential/ADLSTokenCredential.java +++ b/api/src/main/java/org/apache/gravitino/credential/ADLSTokenCredential.java @@ -27,8 +27,8 @@ import org.apache.commons.lang3.StringUtils; /** ADLS SAS token credential. */ public class ADLSTokenCredential implements Credential { - /** ADLS SAS token credential type. */ - public static final String ADLS_SAS_TOKEN_CREDENTIAL_TYPE = "adls-sas-token"; + /** ADLS token credential type. */ + public static final String ADLS_TOKEN_CREDENTIAL_TYPE = "adls-token"; /** ADLS base domain */ public static final String ADLS_DOMAIN = "dfs.core.windows.net"; /** ADLS storage account name */ @@ -62,7 +62,7 @@ public class ADLSTokenCredential implements Credential { @Override public String credentialType() { -return ADLS_SAS_TOKEN_CREDENTIAL_TYPE; +return ADLS_TOKEN_CREDENTIAL_TYPE; } @Override diff --git a/bundles/aliyun/build.gradle.kts b/bundles/aliyun/build.gradle.kts index f4d38d40b9..9dfab9d679 100644 --- a/bundles/aliyun/build.gradle.kts +++ b/bundles/aliyun/build.gradle.kts @@ -60,6 +60,12 @@ dependencies { // Aliyun oss SDK depends on this package, and JDK >= 9 requires manual add // https://www.alibabacloud.com/help/en/oss/developer-reference/java-installation?spm=a2c63.p38356.0.i1 implementation(libs.sun.activation) + + testImplementation(project(":api")) + testImplementation(project(":core")) + testImplementation(libs.junit.jupiter.api) + testImplementation(libs.junit.jupiter.params) + testRuntimeOnly(libs.junit.jupiter.engine) } tasks.withType(ShadowJar::class.java) { diff --git a/bundles/aliyun/src/test/java/org/apache/gravitino/oss/credential/TestCredentialProvider.java b/bundles/aliyun/src/test/java/org/apache/gravitino/oss/credential/TestCredentialProvider.java new file mode 100644 index 00..0e8cd2fb74 --- /dev/null +++ b/bundles/aliyun/src/test/java/org/apache/gravitino/oss/credential/TestCredentialProvider.java @@ -0,0 +1,40 @@ +/* + * Licensed to the Apache Software Foundation (ASF) under one + * or more contributor license agreements. See the NOTICE file + * distributed with this work for additional information + * regarding copyright ownership. The ASF licenses this file + * to you under the Apache License, Version 2.0 (t
Re: [PR] [#5965] subtask(web): ML model support for web UI [gravitino]
orenccl commented on code in PR #6025: URL: https://github.com/apache/gravitino/pull/6025#discussion_r1898532044 ## docs/webui.md: ## @@ -527,19 +575,137 @@ Displays a confirmation dialog, clicking on the `DROP` button drops this fileset  ### Topic +Click the kafka schema tree node on the left sidebar or the schema name link in the table cell. + +Displays the list topics of the schema. + + + + Create topic + +Click on the `CREATE TOPIC` button displays the dialog to create a topic. + + + +Creating a topic needs these fields: + +1. **Name**(**_required_**): the name of the topic. +2. **Comment**(_optional_): the comment of the topic. +3. **Properties**(_optional_): Click on the `ADD PROPERTY` button to add custom properties. + + Show topic details + +Click on the action icon in the table cell. + +You can see the detailed information of this topic in the drawer component on the right. + + + +Click the topic tree node on the left sidebar or the topic name link in the table cell. + +You can see the detailed information on the right page.  + Edit topic + +Click on the action icon in the table cell. + +Displays the dialog for modifying fields of the selected topic. + + + + Drop topic + +Click on the action icon in the table cell. + +Displays a confirmation dialog, clicking on the `DROP` button drops this fileset. Review Comment: Should be ... drop this topic. -- 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: commits-unsubscr...@gravitino.apache.org For queries about this service, please contact Infrastructure at: us...@infra.apache.org
Re: [PR] [#5965] subtask(web): ML model support for web UI [gravitino]
orenccl commented on code in PR #6025: URL: https://github.com/apache/gravitino/pull/6025#discussion_r1898537514 ## web/web/src/app/metalakes/metalake/MetalakeView.js: ## @@ -124,7 +140,9 @@ const MetalakeView = () => { routeParams.schema ? `{{${routeParams.schema}}}` : '' }${routeParams.table ? `{{${routeParams.table}}}` : ''}${ routeParams.fileset ? `{{${routeParams.fileset}}}` : '' - }${routeParams.topic ? `{{${routeParams.topic}}}` : ''}` + }${routeParams.topic ? `{{${routeParams.topic}}}` : ''}${ +routeParams.model ? `{{${routeParams.model}}}` : '' + }${routeParams.version ? `{{${routeParams.version}}}` : ''}` Review Comment: This code is hard to read. Consider improving the formatting or simplifying it. But I am fine with current approach. -- 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: commits-unsubscr...@gravitino.apache.org For queries about this service, please contact Infrastructure at: us...@infra.apache.org
Re: [PR] [#6024] feat(iceberg): refactor Iceberg credential code to reuse credential component in Gravitino server [gravitino]
jerryshao commented on PR #6021: URL: https://github.com/apache/gravitino/pull/6021#issuecomment-2564274319 Seems like there's some conflicts need to be resolved. -- 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: commits-unsubscr...@gravitino.apache.org For queries about this service, please contact Infrastructure at: us...@infra.apache.org
Re: [PR] [#5965] subtask(web): ML model support for web UI [gravitino]
orenccl commented on code in PR #6025: URL: https://github.com/apache/gravitino/pull/6025#discussion_r1898531624 ## docs/webui.md: ## @@ -527,19 +575,137 @@ Displays a confirmation dialog, clicking on the `DROP` button drops this fileset  ### Topic +Click the kafka schema tree node on the left sidebar or the schema name link in the table cell. + +Displays the list topics of the schema. + + + + Create topic + +Click on the `CREATE TOPIC` button displays the dialog to create a topic. + + + +Creating a topic needs these fields: + +1. **Name**(**_required_**): the name of the topic. +2. **Comment**(_optional_): the comment of the topic. +3. **Properties**(_optional_): Click on the `ADD PROPERTY` button to add custom properties. + + Show topic details + +Click on the action icon in the table cell. + +You can see the detailed information of this topic in the drawer component on the right. + + + +Click the topic tree node on the left sidebar or the topic name link in the table cell. + +You can see the detailed information on the right page.  + Edit topic + +Click on the action icon in the table cell. + +Displays the dialog for modifying fields of the selected topic. + + + + Drop topic + +Click on the action icon in the table cell. + +Displays a confirmation dialog, clicking on the `DROP` button drops this fileset. + + + +### Model +Click the model schema tree node on the left sidebar or the schema name link in the table cell. + +Displays the list model of the schema. + + + + Register model + +Click on the `REGISTER MODEL` button displays the dialog to register a model. + + + +Register a model needs these fields: + +1. **Name**(**_required_**): the name of the model. +2. **Comment**(_optional_): the comment of the model. +3. **Properties**(_optional_): Click on the `ADD PROPERTY` button to add custom properties. + + Show model details + +Click on the action icon in the table cell. + +You can see the detailed information of this model in the drawer component on the right. + + + + Drop model + +Click on the action icon in the table cell. + +Displays a confirmation dialog, clicking on the `DROP` button drops this model. + + + +### Version +Click the model tree node on the left sidebar or the model name link in the table cell. + +Displays the list versions of the model. + + + + Link version + +Click on the `LINK VERSION` button displays the dialog to link a version. + + + +Link a version needs these fields: + +1. **URI**(**_required_**): the uri of the version. +2. **Aliases**(**_required_**): the aliases of the version, aliase cannot be number or number string. +3. **Comment**(_optional_): the comment of the model. +4. **Properties**(_optional_): Click on the `ADD PROPERTY` button to add custom properties. + + Show version details + +Click on the action icon in the table cell. + +You can see the detailed information of this version in the drawer component on the right. + + + + Drop version + +Click on the action icon in the table cell. + +Displays a confirmation dialog, clicking on the `DROP` button drops this model. Review Comment: Should be ... drop this version? -- 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: commits-unsubscr...@gravitino.apache.org For queries about this service, please contact Infrastructure at: us...@infra.apache.org
(gravitino) branch main updated: [#5985] improvement(CLI): Fix role command that supports handling multiple values (#5988)
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 f6e201bfce [#5985] improvement(CLI): Fix role command that supports handling multiple values (#5988) f6e201bfce is described below commit f6e201bfce3de6611a32802e3880bd2f81831f13 Author: Lord of Abyss <103809695+abyss-l...@users.noreply.github.com> AuthorDate: Sat Dec 28 22:11:05 2024 +0800 [#5985] improvement(CLI): Fix role command that supports handling multiple values (#5988) ### What changes were proposed in this pull request? In `GravitinoOptions`, the role option supports multiple values, but the handleRoleCommand implementation currently only processes a single role value. CLI should support create and delete multiple roles simultaneously. ### Why are the changes needed? Fix: #5985 ### Does this PR introduce _any_ user-facing change? NO ### How was this patch tested? local test + UT ```bash gcli role create -m demo_metalake --role role1 role2 role3 # role1, role2, role3 created gcli role delete -m demo_metalake --role role1 role2 role3 # role1, role2, role3 deleted. gcli role delete -m demo_metalake --role role1 role2 role3 unknown # role1, role2, role3 deleted, but unknown is not deleted. gcli role details -m demo_metalake # Missing --role option. gcli role details -m demo_metalake --role roleA roleB # Exception in thread "main" java.lang.IllegalArgumentException: details requires only one role, but multiple are currently passed. ``` --- .../org/apache/gravitino/cli/ErrorMessages.java| 1 + .../apache/gravitino/cli/GravitinoCommandLine.java | 33 +++-- .../apache/gravitino/cli/TestableCommandLine.java | 8 +- .../apache/gravitino/cli/commands/CreateRole.java | 15 ++- .../apache/gravitino/cli/commands/DeleteRole.java | 32 +++-- .../org/apache/gravitino/cli/TestRoleCommands.java | 133 +++-- 6 files changed, 184 insertions(+), 38 deletions(-) diff --git a/clients/cli/src/main/java/org/apache/gravitino/cli/ErrorMessages.java b/clients/cli/src/main/java/org/apache/gravitino/cli/ErrorMessages.java index 1d6db1a5ac..a525366450 100644 --- a/clients/cli/src/main/java/org/apache/gravitino/cli/ErrorMessages.java +++ b/clients/cli/src/main/java/org/apache/gravitino/cli/ErrorMessages.java @@ -32,6 +32,7 @@ public class ErrorMessages { public static final String MISSING_NAME = "Missing --name option."; public static final String MISSING_GROUP = "Missing --group option."; public static final String MISSING_USER = "Missing --user option."; + public static final String MISSING_ROLE = "Missing --role option."; public static final String MISSING_TAG = "Missing --tag option."; public static final String METALAKE_EXISTS = "Metalake already exists."; public static final String CATALOG_EXISTS = "Catalog already exists."; diff --git a/clients/cli/src/main/java/org/apache/gravitino/cli/GravitinoCommandLine.java b/clients/cli/src/main/java/org/apache/gravitino/cli/GravitinoCommandLine.java index 48d9729435..06ac09d673 100644 --- a/clients/cli/src/main/java/org/apache/gravitino/cli/GravitinoCommandLine.java +++ b/clients/cli/src/main/java/org/apache/gravitino/cli/GravitinoCommandLine.java @@ -720,17 +720,26 @@ public class GravitinoCommandLine extends TestableCommandLine { String userName = line.getOptionValue(GravitinoOptions.LOGIN); FullName name = new FullName(line); String metalake = name.getMetalakeName(); -String role = line.getOptionValue(GravitinoOptions.ROLE); String[] privileges = line.getOptionValues(GravitinoOptions.PRIVILEGE); Command.setAuthenticationMode(auth, userName); +String[] roles = line.getOptionValues(GravitinoOptions.ROLE); +if (roles == null && !CommandActions.LIST.equals(command)) { + System.err.println(ErrorMessages.MISSING_ROLE); + Main.exit(-1); +} + +if (roles != null) { + roles = Arrays.stream(roles).distinct().toArray(String[]::new); +} + switch (command) { case CommandActions.DETAILS: if (line.hasOption(GravitinoOptions.AUDIT)) { - newRoleAudit(url, ignore, metalake, role).handle(); + newRoleAudit(url, ignore, metalake, getOneRole(roles, CommandActions.DETAILS)).handle(); } else { - newRoleDetails(url, ignore, metalake, role).handle(); + newRoleDetails(url, ignore, metalake, getOneRole(roles, CommandActions.DETAILS)).handle(); } break; @@ -739,20 +748,24 @@ public class GravitinoCommandLine extends TestableCommandLine { break; case CommandActions.CREATE: -newCreateRole(url, ignore, metalake, role).handle(); +newCreateRole(url, igno
Re: [I] [Improvement] The role command supports handling multiple values simultaneously. [gravitino]
justinmclean closed issue #5985: [Improvement] The role command supports handling multiple values simultaneously. URL: https://github.com/apache/gravitino/issues/5985 -- 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: commits-unsubscr...@gravitino.apache.org For queries about this service, please contact Infrastructure at: us...@infra.apache.org
Re: [I] [Improvement] The role command supports handling multiple values simultaneously. [gravitino]
justinmclean closed issue #5985: [Improvement] The role command supports handling multiple values simultaneously. URL: https://github.com/apache/gravitino/issues/5985 -- 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: commits-unsubscr...@gravitino.apache.org For queries about this service, please contact Infrastructure at: us...@infra.apache.org
[PR] [SIP] Fix OSS token privilege [gravitino]
FANNG1 opened a new pull request, #6029: URL: https://github.com/apache/gravitino/pull/6029 ### What changes were proposed in this pull request? (Please outline the changes and how this PR fixes the issue.) ### Why are the changes needed? (Please clarify why the changes are needed. For instance, 1. If you propose a new API, clarify the use case for a new API. 2. If you fix a bug, describe the bug.) Fix: # (issue) ### Does this PR introduce _any_ user-facing change? (Please list the user-facing changes introduced by your change, including 1. Change in user-facing APIs. 2. Addition or removal of property keys.) ### How was this patch tested? (Please test your changes, and provide instructions on how to test it: 1. If you add a feature or fix a bug, add a test to cover your changes. 2. If you fix a flaky test, repeat it for many times to prove it works.) -- 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: commits-unsubscr...@gravitino.apache.org For queries about this service, please contact Infrastructure at: us...@infra.apache.org
Re: [PR] fix: use compose v2 syntax [gravitino-playground]
kahnwong commented on PR #79: URL: https://github.com/apache/gravitino-playground/pull/79#issuecomment-2564369975 @jhchee rebased the pr and apply compose syntax migration. Please kindly review this PR. -- 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: commits-unsubscr...@gravitino.apache.org For queries about this service, please contact Infrastructure at: us...@infra.apache.org
Re: [PR] [#5902] feat: Add tag failure event to Gravitino server [gravitino]
cool9850311 commented on PR #5944: URL: https://github.com/apache/gravitino/pull/5944#issuecomment-2564371371 @FANNG1 I run the Frontend IT test successfully in local, do I need to change anything? -- 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: commits-unsubscr...@gravitino.apache.org For queries about this service, please contact Infrastructure at: us...@infra.apache.org
Re: [PR] [#6024] feat(iceberg): refactor Iceberg credential code to reuse credential component in Gravitino server [gravitino]
FANNG1 commented on PR #6021: URL: https://github.com/apache/gravitino/pull/6021#issuecomment-2564346940 > Seems like there's some conflicts need to be resolved. updated -- 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: commits-unsubscr...@gravitino.apache.org For queries about this service, please contact Infrastructure at: us...@infra.apache.org
Re: [PR] fix: use compose v2 syntax [gravitino-playground]
kahnwong commented on PR #79: URL: https://github.com/apache/gravitino-playground/pull/79#issuecomment-2564348525 > Hihi @kahnwong Are you still working on this? This will be QoL improvement for users that use docker compose v2. I'm still working on this. I noticed from the latest commit, the file I've worked on has been renamed to another file. Will create a commit for compose syntax upgrade. -- 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: commits-unsubscr...@gravitino.apache.org For queries about this service, please contact Infrastructure at: us...@infra.apache.org
Re: [I] [Improvement] Add Support for Inspecting Tables in Datalake Formats like Iceberg [gravitino]
dataageek commented on issue #4798: URL: https://github.com/apache/gravitino/issues/4798#issuecomment-2564375370 Thank you for the efforts on the project! I'm following up on this issue to check if there have been any recent updates or progress. Is there an estimated timeline or plan for implementing this feature? Looking forward to your insights. cc: @FANNG1 -- 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: commits-unsubscr...@gravitino.apache.org For queries about this service, please contact Infrastructure at: us...@infra.apache.org
Re: [PR] fix: use compose v2 syntax [gravitino-playground]
jhchee commented on PR #79: URL: https://github.com/apache/gravitino-playground/pull/79#issuecomment-2564387168 Thanks @kahnwong, I can attest your change is working! However, I'm not a contributor of this project, so will likely need other to approve this PR. Gentle ping @unknowntpo if you have the time to review this :pray: -- 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: commits-unsubscr...@gravitino.apache.org For queries about this service, please contact Infrastructure at: us...@infra.apache.org
Re: [PR] [#5973] feat(hadoop-catalog): Support using dynamic credential when using fileset with cloud storage [gravitino]
FANNG1 commented on code in PR #5974: URL: https://github.com/apache/gravitino/pull/5974#discussion_r1899046771 ## bundles/aliyun/src/main/java/org/apache/gravitino/oss/fs/OSSSessionCredentialProvider.java: ## @@ -0,0 +1,116 @@ +/* + * Licensed to the Apache Software Foundation (ASF) under one + * or more contributor license agreements. See the NOTICE file + * distributed with this work for additional information + * regarding copyright ownership. The ASF licenses this file + * to you under the Apache License, Version 2.0 (the + * "License"); you may not use this file except in compliance + * with the License. You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, + * software distributed under the License is distributed on an + * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY + * KIND, either express or implied. See the License for the + * specific language governing permissions and limitations + * under the License. + */ + +package org.apache.gravitino.oss.fs; + +import static org.apache.gravitino.credential.OSSTokenCredential.GRAVITINO_OSS_SESSION_ACCESS_KEY_ID; +import static org.apache.gravitino.credential.OSSTokenCredential.GRAVITINO_OSS_SESSION_SECRET_ACCESS_KEY; +import static org.apache.gravitino.credential.OSSTokenCredential.GRAVITINO_OSS_TOKEN; + +import com.aliyun.oss.common.auth.BasicCredentials; +import com.aliyun.oss.common.auth.Credentials; +import com.aliyun.oss.common.auth.CredentialsProvider; +import com.aliyun.oss.common.auth.DefaultCredentials; +import java.net.URI; +import java.util.Map; +import org.apache.gravitino.NameIdentifier; +import org.apache.gravitino.client.GravitinoClient; +import org.apache.gravitino.credential.Credential; +import org.apache.gravitino.credential.OSSTokenCredential; +import org.apache.gravitino.file.Fileset; +import org.apache.gravitino.file.FilesetCatalog; +import org.apache.gravitino.filesystem.hadoop.GravitinoVirtualFileSystem; +import org.apache.gravitino.filesystem.hadoop.GravitinoVirtualFileSystemConfiguration; +import org.apache.hadoop.conf.Configuration; +import org.apache.hadoop.fs.aliyun.oss.Constants; +import org.slf4j.Logger; +import org.slf4j.LoggerFactory; + +public class OSSSessionCredentialProvider implements CredentialsProvider { + + private static final Logger LOGGER = LoggerFactory.getLogger(OSSSessionCredentialProvider.class); + private Credentials basicCredentials; + private final String filesetIdentifier; + private long expirationTime; + private final GravitinoClient client; + private final Configuration configuration; + + public OSSSessionCredentialProvider(URI uri, Configuration conf) { +this.filesetIdentifier = + conf.get(GravitinoVirtualFileSystemConfiguration.GVFS_FILESET_IDENTIFIER); +// extra value and init Gravitino client here +GravitinoVirtualFileSystem gravitinoVirtualFileSystem = new GravitinoVirtualFileSystem(); +this.client = gravitinoVirtualFileSystem.initializeClient(conf); +this.configuration = conf; + } + + @Override + public void setCredentials(Credentials credentials) {} + + @Override + public Credentials getCredentials() { +// If the credentials are null or about to expire, refresh the credentials. +if (basicCredentials == null || System.currentTimeMillis() > expirationTime - 5 * 60 * 1000) { + synchronized (this) { +refresh(); + } +} + +return basicCredentials; + } + + private void refresh() { +String[] idents = filesetIdentifier.split("\\."); +String catalog = idents[1]; + +FilesetCatalog filesetCatalog = client.loadCatalog(catalog).asFilesetCatalog(); + +Fileset fileset = filesetCatalog.loadFileset(NameIdentifier.of(idents[2], idents[3])); +Credential[] credentials = fileset.supportsCredentials().getCredentials(); +if (credentials.length == 0) { + LOGGER.warn("No credential found for fileset: {}, try to use static AKSK", filesetIdentifier); + expirationTime = Long.MAX_VALUE; + this.basicCredentials = + new DefaultCredentials( + configuration.get(Constants.ACCESS_KEY_ID), + configuration.get(Constants.ACCESS_KEY_SECRET)); + return; +} + +// Use the first one. +Credential credential = credentials[0]; Review Comment: you should pick the first OSSTokenCredential (should only one), and use the specific methods provided by OSSTokenCredential not fetch properties in `credentialMap`. -- 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: commits-unsubscr...@gravitino.apache.org For queries about this service, please contact Infrastructure at: us...@infra.apache.org
Re: [PR] fix: use compose v2 syntax [gravitino-playground]
unknowntpo commented on PR #79: URL: https://github.com/apache/gravitino-playground/pull/79#issuecomment-2564603598 LGTM, ping @xunliu -- 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: commits-unsubscr...@gravitino.apache.org For queries about this service, please contact Infrastructure at: us...@infra.apache.org
Re: [I] [Bug report] Gravitino CLI get wrong catalogName when set metalake name by --name option [gravitino]
Abyss-lord commented on issue #6027: URL: https://github.com/apache/gravitino/issues/6027#issuecomment-2564587856 @justinmclean , I would like to work on it. -- 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: commits-unsubscr...@gravitino.apache.org For queries about this service, please contact Infrastructure at: us...@infra.apache.org
Re: [PR] [#5873] feat(gvfs-fuse): add debug log for FuseApiHandle [gravitino]
unknowntpo commented on code in PR #5905: URL: https://github.com/apache/gravitino/pull/5905#discussion_r1899071512 ## clients/filesystem-fuse/src/fuse_api_handle.rs: ## @@ -30,10 +30,174 @@ use fuse3::{Errno, FileType, Inode, SetAttr, Timestamp}; use futures_util::stream; use futures_util::stream::BoxStream; use futures_util::StreamExt; +use log::debug; use std::ffi::{OsStr, OsString}; use std::num::NonZeroU32; use std::time::{Duration, SystemTime}; +pub(crate) struct FuseApiHandleDebug { +inner: FuseApiHandle, +} + +impl FuseApiHandleDebug { +pub fn new(fs: T, context: FileSystemContext) -> Self { +Self { +inner: FuseApiHandle::new(fs, context), +} +} + Review Comment: `new` is needed, we can use it to create a `FuseApiHandleDebug`, and it will create a `FuseApiHandle` as inner file system. e.g. ``` let fs = DefaultRawFileSystem::new(gvfs); FuseApiHandleDebug::new(fs, fs_context) ``` -- 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: commits-unsubscr...@gravitino.apache.org For queries about this service, please contact Infrastructure at: us...@infra.apache.org
Re: [PR] [#5873] feat(gvfs-fuse): add debug log for FuseApiHandle [gravitino]
unknowntpo commented on code in PR #5905: URL: https://github.com/apache/gravitino/pull/5905#discussion_r1899071079 ## clients/filesystem-fuse/src/fuse_api_handle.rs: ## @@ -30,10 +30,174 @@ use fuse3::{Errno, FileType, Inode, SetAttr, Timestamp}; use futures_util::stream; use futures_util::stream::BoxStream; use futures_util::StreamExt; +use log::debug; use std::ffi::{OsStr, OsString}; use std::num::NonZeroU32; use std::time::{Duration, SystemTime}; +pub(crate) struct FuseApiHandleDebug { +inner: FuseApiHandle, +} + +impl FuseApiHandleDebug { +pub fn new(fs: T, context: FileSystemContext) -> Self { +Self { +inner: FuseApiHandle::new(fs, context), +} +} + +pub async fn get_file_path(&self, file_id: u64) -> String { +debug!("get_file_path: file_id: {}", file_id); +let result = self.inner.get_file_path(file_id).await; +debug!("get_file_path result: {}", result); +result +} + +async fn get_modified_file_stat( +&self, +file_id: u64, +size: Option, +atime: Option, +mtime: Option, +) -> Result { +debug!("get_modified_file_stat: file_id: {}, size: {:?}, atime: {:?}, mtime: {:?}", file_id, size, atime, mtime); +let result = self.inner.get_modified_file_stat(file_id, size, atime, mtime).await; +debug!("get_modified_file_stat result: {:?}", result); +result +} +} + +impl Filesystem for FuseApiHandleDebug { +async fn init(&self, req: Request) -> fuse3::Result { +debug!("init: req: {:?}", req); +let result = self.inner.init(req).await; +debug!("init result: {:?}", result); Review Comment: Okay, I use `Request.unique` as the unique identifier of the request. ``` 2024-12-28T12:23:01.966929Z DEBUG gvfs_fuse::fuse_api_handle: lookup [id=6]: error: Errno(2) 2024-12-28T12:23:01.967037Z DEBUG gvfs_fuse::fuse_api_handle: lookup [id=7]: req: Request { unique: 7, uid: 501, gid: 20, pid: 18890 }, parent: 1, name: "test_create" 2024-12-28T12:23:01.967056Z DEBUG gvfs_fuse::fuse_api_handle: lookup [id=7]: reply: ReplyEntry { ttl: 1s, attr: FileAttr { ino: 10001, size: 0, blocks: 0, atime: Timestamp { sec: 1735388581, nsec: 967051000 }, mtime: Timestamp { sec: 1735388581, nsec: 967051000 }, ctime: Timestamp { sec: 1735388581, nsec: 967051000 }, crtime: Timestamp { sec: 1735388581, nsec: 967051000 }, kind: RegularFile, perm: 420, nlink: 1, uid: 501, gid: 20, rdev: 0, flags: 0, blksize: 4096 }, generation: 0 } ``` -- 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: commits-unsubscr...@gravitino.apache.org For queries about this service, please contact Infrastructure at: us...@infra.apache.org
Re: [PR] [#5873] feat(gvfs-fuse): add debug log for FuseApiHandle [gravitino]
unknowntpo commented on code in PR #5905: URL: https://github.com/apache/gravitino/pull/5905#discussion_r1899073067 ## clients/filesystem-fuse/src/fuse_api_handle.rs: ## @@ -30,10 +30,174 @@ use fuse3::{Errno, FileType, Inode, SetAttr, Timestamp}; use futures_util::stream; use futures_util::stream::BoxStream; use futures_util::StreamExt; +use log::debug; use std::ffi::{OsStr, OsString}; use std::num::NonZeroU32; use std::time::{Duration, SystemTime}; +pub(crate) struct FuseApiHandleDebug { +inner: FuseApiHandle, +} + +impl FuseApiHandleDebug { +pub fn new(fs: T, context: FileSystemContext) -> Self { +Self { +inner: FuseApiHandle::new(fs, context), +} +} + +pub async fn get_file_path(&self, file_id: u64) -> String { +debug!("get_file_path: file_id: {}", file_id); +let result = self.inner.get_file_path(file_id).await; +debug!("get_file_path result: {}", result); +result +} + +async fn get_modified_file_stat( +&self, +file_id: u64, +size: Option, +atime: Option, +mtime: Option, +) -> Result { +debug!("get_modified_file_stat: file_id: {}, size: {:?}, atime: {:?}, mtime: {:?}", file_id, size, atime, mtime); Review Comment: implemented at a7073a033fcd59057addcf926f73d04123b0f6e7. I use a wrapper struct `TimestampDebug` which implement custom `fmt::Display` trait, now, `Timestamp` will be displayed like: ``` mtime: Timestamp { sec: 1735386080, nsec: 26884000 }, ctime: Timestamp { sec: 1735386080, nsec: 26884000 }, crtime: Timestamp { sec: 1735386080, nsec: 26884000 } ``` -- 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: commits-unsubscr...@gravitino.apache.org For queries about this service, please contact Infrastructure at: us...@infra.apache.org
(gravitino) branch main updated: [#6014] refactor: CLI output methods for no data hints (#6015)
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 69e93f9631 [#6014] refactor: CLI output methods for no data hints (#6015) 69e93f9631 is described below commit 69e93f96317d09fcdc64104b3507714a0b90973b Author: Jimmy Lee <55496001+wau...@users.noreply.github.com> AuthorDate: Sat Dec 28 22:12:32 2024 +0800 [#6014] refactor: CLI output methods for no data hints (#6015) ### What changes were proposed in this pull request? In the `ListMetalakes` and `ListCatalogs` methods, retain the use of `output(metalakes)` and `output(catalogs)`. If metalakes or catalogs are empty arrays, they will be handled by the `output` method in `PlainFormat` and `TableFormat`. ### Why are the changes needed? Issue: https://github.com/apache/gravitino/issues/6014 ### Does this PR introduce _any_ user-facing change? No. ### How was this patch tested? No. --- .../gravitino/cli/commands/ListCatalogs.java | 6 +--- .../gravitino/cli/commands/ListMetalakes.java | 6 +--- .../apache/gravitino/cli/outputs/PlainFormat.java | 24 ++-- .../apache/gravitino/cli/outputs/TableFormat.java | 32 ++ 4 files changed, 38 insertions(+), 30 deletions(-) diff --git a/clients/cli/src/main/java/org/apache/gravitino/cli/commands/ListCatalogs.java b/clients/cli/src/main/java/org/apache/gravitino/cli/commands/ListCatalogs.java index eb9c960b14..e6aaf811ec 100644 --- a/clients/cli/src/main/java/org/apache/gravitino/cli/commands/ListCatalogs.java +++ b/clients/cli/src/main/java/org/apache/gravitino/cli/commands/ListCatalogs.java @@ -49,11 +49,7 @@ public class ListCatalogs extends Command { try { GravitinoClient client = buildClient(metalake); catalogs = client.listCatalogsInfo(); - if (catalogs.length == 0) { -System.out.println("No catalogs exist."); - } else { -output(catalogs); - } + output(catalogs); } catch (NoSuchMetalakeException err) { exitWithError(ErrorMessages.UNKNOWN_METALAKE); } catch (Exception exp) { diff --git a/clients/cli/src/main/java/org/apache/gravitino/cli/commands/ListMetalakes.java b/clients/cli/src/main/java/org/apache/gravitino/cli/commands/ListMetalakes.java index b2388e5cd3..ee5ac81d64 100644 --- a/clients/cli/src/main/java/org/apache/gravitino/cli/commands/ListMetalakes.java +++ b/clients/cli/src/main/java/org/apache/gravitino/cli/commands/ListMetalakes.java @@ -43,11 +43,7 @@ public class ListMetalakes extends Command { try { GravitinoAdminClient client = buildAdminClient(); metalakes = client.listMetalakes(); - if (metalakes.length == 0) { -System.out.println("No metalakes exist."); - } else { -output(metalakes); - } + output(metalakes); } catch (Exception exp) { exitWithError(exp.getMessage()); } diff --git a/clients/cli/src/main/java/org/apache/gravitino/cli/outputs/PlainFormat.java b/clients/cli/src/main/java/org/apache/gravitino/cli/outputs/PlainFormat.java index 6160634db9..66e616c4f7 100644 --- a/clients/cli/src/main/java/org/apache/gravitino/cli/outputs/PlainFormat.java +++ b/clients/cli/src/main/java/org/apache/gravitino/cli/outputs/PlainFormat.java @@ -50,10 +50,14 @@ public class PlainFormat { static final class MetalakesPlainFormat implements OutputFormat { @Override public void output(Metalake[] metalakes) { - List metalakeNames = - Arrays.stream(metalakes).map(Metalake::name).collect(Collectors.toList()); - String all = String.join(System.lineSeparator(), metalakeNames); - System.out.println(all); + if (metalakes.length == 0) { +System.out.println("No metalakes exist."); + } else { +List metalakeNames = + Arrays.stream(metalakes).map(Metalake::name).collect(Collectors.toList()); +String all = String.join(System.lineSeparator(), metalakeNames); +System.out.println(all); + } } } @@ -74,10 +78,14 @@ public class PlainFormat { static final class CatalogsPlainFormat implements OutputFormat { @Override public void output(Catalog[] catalogs) { - List catalogNames = - Arrays.stream(catalogs).map(Catalog::name).collect(Collectors.toList()); - String all = String.join(System.lineSeparator(), catalogNames); - System.out.println(all); + if (catalogs.length == 0) { +System.out.println("No catalogs exist."); + } else { +List catalogNames = + Arrays.stream(catalogs).map(Catalog::name).collect(Collectors.toList()); +String all = String.join(System.lineSeparator(), catalogNames); +System.out.println(all); + } } } } diff --git a/clients/
Re: [PR] [#6014] refactor: CLI output methods for no data hints [gravitino]
justinmclean merged PR #6015: URL: https://github.com/apache/gravitino/pull/6015 -- 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: commits-unsubscr...@gravitino.apache.org For queries about this service, please contact Infrastructure at: us...@infra.apache.org
Re: [PR] [#5985] improvement(CLI): Fix role command that supports handling multiple values [gravitino]
justinmclean merged PR #5988: URL: https://github.com/apache/gravitino/pull/5988 -- 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: commits-unsubscr...@gravitino.apache.org For queries about this service, please contact Infrastructure at: us...@infra.apache.org
Re: [I] [Improvement] Add Support for Inspecting Tables in Datalake Formats like Iceberg [gravitino]
FANNG1 commented on issue #4798: URL: https://github.com/apache/gravitino/issues/4798#issuecomment-2564600204 I'm afraid I can't provide a timeline currently, it depends on the requirements of the community, could you provide your scenarios? -- 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: commits-unsubscr...@gravitino.apache.org For queries about this service, please contact Infrastructure at: us...@infra.apache.org
[I] [Improvement] Setting the same tags multiple times in the Gravitino CLi gives unexpected output [gravitino]
Abyss-lord opened a new issue, #6030: URL: https://github.com/apache/gravitino/issues/6030 ### What would you like to be improved? Running the command `gcli tag set --metalake metalake_demo --name catalog --tagB --tagC` multiple times gives unexpected output.  ### How should we improve? the output could be more user-friendly. -- 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: commits-unsubscr...@gravitino.apache.org.apache.org For queries about this service, please contact Infrastructure at: us...@infra.apache.org
Re: [I] [Improvement] Setting the same tags multiple times in the Gravitino CLi gives unexpected output [gravitino]
Abyss-lord commented on issue #6030: URL: https://github.com/apache/gravitino/issues/6030#issuecomment-2564617781 @justinmclean I would like to work on it. -- 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: commits-unsubscr...@gravitino.apache.org For queries about this service, please contact Infrastructure at: us...@infra.apache.org
Re: [PR] [#5831] fix(CLI): Fix CLi gives unexpected output when input tag set command [gravitino]
Abyss-lord commented on PR #5897: URL: https://github.com/apache/gravitino/pull/5897#issuecomment-2564616690 Hi @justinmclean @shaofengshi , I’ve finished updating the code. Please take a look at the PR again when you have time. -- 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: commits-unsubscr...@gravitino.apache.org For queries about this service, please contact Infrastructure at: us...@infra.apache.org
Re: [PR] [#5902] feat: Add tag failure event to Gravitino server [gravitino]
FANNG1 commented on PR #5944: URL: https://github.com/apache/gravitino/pull/5944#issuecomment-2564572784 > @FANNG1 I run the Frontend IT test successfully in local, but it does not pass here 2 times, and it says connection timeout, do I need to change anything? no, it's network failures, reruned it. -- 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: commits-unsubscr...@gravitino.apache.org For queries about this service, please contact Infrastructure at: us...@infra.apache.org
Re: [PR] [#5973] feat(hadoop-catalog): Support using dynamic credential when using fileset with cloud storage [gravitino]
FANNG1 commented on PR #5974: URL: https://github.com/apache/gravitino/pull/5974#issuecomment-2564574655 Do you plan to support the static credential like `S3SecretKey` and some storage properties not included in the credential like `s3-region` in the new PR? -- 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: commits-unsubscr...@gravitino.apache.org For queries about this service, please contact Infrastructure at: us...@infra.apache.org
Re: [PR] [#5982] feat (gvfs-fuse): Implement Gravitino fileset file system [gravitino]
FANNG1 commented on code in PR #5984: URL: https://github.com/apache/gravitino/pull/5984#discussion_r1899053172 ## clients/filesystem-fuse/src/gvfs_fileset_fs.rs: ## @@ -0,0 +1,135 @@ +/* + * Licensed to the Apache Software Foundation (ASF) under one + * or more contributor license agreements. See the NOTICE file + * distributed with this work for additional information + * regarding copyright ownership. The ASF licenses this file + * to you under the Apache License, Version 2.0 (the + * "License"); you may not use this file except in compliance + * with the License. You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, + * software distributed under the License is distributed on an + * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY + * KIND, either express or implied. See the License for the + * specific language governing permissions and limitations + * under the License. + */ +use crate::config::AppConfig; +use crate::filesystem::{FileStat, FileSystemCapacity, FileSystemContext, PathFileSystem, Result}; +use crate::gravitino_client::GravitinoClient; +use crate::opened_file::{OpenFileFlags, OpenedFile}; +use async_trait::async_trait; +use fuse3::Errno; +use std::path::{Path, PathBuf}; + +pub(crate) struct GravitinoFileSystemConfig {} + +/// GravitinoFileSystem is a filesystem that is associated with a fileset in Gravitino. +/// It mapping the fileset path to the original data storage path. and delegate the operation +/// to the inner filesystem like S3 GCS, JuiceFS. +pub(crate) struct GvfsFilesetFs { Review Comment: I prefer `FilesetFilesystem`, but I'm ok to `GravitinoFilesetFilesystem` if you have strong option. -- 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: commits-unsubscr...@gravitino.apache.org For queries about this service, please contact Infrastructure at: us...@infra.apache.org
Re: [PR] [#5982] feat (gvfs-fuse): Implement Gravitino fileset file system [gravitino]
FANNG1 commented on code in PR #5984: URL: https://github.com/apache/gravitino/pull/5984#discussion_r1899053370 ## clients/filesystem-fuse/src/gvfs_fileset_fs.rs: ## @@ -0,0 +1,135 @@ +/* + * Licensed to the Apache Software Foundation (ASF) under one + * or more contributor license agreements. See the NOTICE file + * distributed with this work for additional information + * regarding copyright ownership. The ASF licenses this file + * to you under the Apache License, Version 2.0 (the + * "License"); you may not use this file except in compliance + * with the License. You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, + * software distributed under the License is distributed on an + * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY + * KIND, either express or implied. See the License for the + * specific language governing permissions and limitations + * under the License. + */ +use crate::config::AppConfig; +use crate::filesystem::{FileStat, FileSystemCapacity, FileSystemContext, PathFileSystem, Result}; +use crate::gravitino_client::GravitinoClient; +use crate::opened_file::{OpenFileFlags, OpenedFile}; +use async_trait::async_trait; +use fuse3::Errno; +use std::path::{Path, PathBuf}; + +pub(crate) struct GravitinoFileSystemConfig {} + +/// GravitinoFileSystem is a filesystem that is associated with a fileset in Gravitino. +/// It mapping the fileset path to the original data storage path. and delegate the operation +/// to the inner filesystem like S3 GCS, JuiceFS. +pub(crate) struct GvfsFilesetFs { +fs: Box, Review Comment: something like `physical_fs`? the underlying fs are doing real physical operations -- 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: commits-unsubscr...@gravitino.apache.org For queries about this service, please contact Infrastructure at: us...@infra.apache.org
Re: [PR] [#5889] feat(client-python): Add model management Python API [gravitino]
jerryshao commented on code in PR #6009: URL: https://github.com/apache/gravitino/pull/6009#discussion_r1898876975 ## clients/client-python/gravitino/namespace.py: ## @@ -34,13 +33,13 @@ def __init__(self, levels: List[str]): self._levels = levels def to_json(self): -return json.dumps(self._levels) +return self._levels Review Comment: It is a bug in the previous code, it treat a json list as a string, which will lead to failure in deserialization. ## clients/client-python/gravitino/namespace.py: ## @@ -34,13 +33,13 @@ def __init__(self, levels: List[str]): self._levels = levels def to_json(self): -return json.dumps(self._levels) +return self._levels Review Comment: It is a bug in the previous code, it treats a json list as a string, which will lead to failure in deserialization. -- 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: commits-unsubscr...@gravitino.apache.org For queries about this service, please contact Infrastructure at: us...@infra.apache.org