This is an automated email from the ASF dual-hosted git repository.
etudenhoefner pushed a commit to branch master
in repository https://gitbox.apache.org/repos/asf/iceberg.git
The following commit(s) were added to refs/heads/master by this push:
new d29f392e09 Nessie: Support ApiV2 for Nessie client (#6712)
d29f392e09 is described below
commit d29f392e09733b4d75c24f49bbd036d536a6c3e7
Author: Ajantha Bhat <[email protected]>
AuthorDate: Thu Jun 15 16:58:23 2023 +0530
Nessie: Support ApiV2 for Nessie client (#6712)
---
.../org/apache/iceberg/nessie/NessieCatalog.java | 24 +++++++++++++++++++---
.../java/org/apache/iceberg/nessie/NessieUtil.java | 2 ++
.../org/apache/iceberg/nessie/BaseTestIceberg.java | 7 +++++--
.../iceberg/nessie/TestCustomNessieClient.java | 8 ++++++--
.../apache/iceberg/nessie/TestNessieCatalog.java | 14 +++++++------
.../iceberg/nessie/TestNessieIcebergClient.java | 13 ++++++++++++
6 files changed, 55 insertions(+), 13 deletions(-)
diff --git a/nessie/src/main/java/org/apache/iceberg/nessie/NessieCatalog.java
b/nessie/src/main/java/org/apache/iceberg/nessie/NessieCatalog.java
index 0c6f2d4c59..0c91cfb1db 100644
--- a/nessie/src/main/java/org/apache/iceberg/nessie/NessieCatalog.java
+++ b/nessie/src/main/java/org/apache/iceberg/nessie/NessieCatalog.java
@@ -44,6 +44,7 @@ import
org.apache.iceberg.relocated.com.google.common.collect.ImmutableMap;
import org.projectnessie.client.NessieClientBuilder;
import org.projectnessie.client.NessieConfigConstants;
import org.projectnessie.client.api.NessieApiV1;
+import org.projectnessie.client.api.NessieApiV2;
import org.projectnessie.client.http.HttpClientBuilder;
import org.projectnessie.model.ContentKey;
import org.projectnessie.model.TableReference;
@@ -88,11 +89,28 @@ public class NessieCatalog extends BaseMetastoreCatalog
options.get(removePrefix.apply(NessieConfigConstants.CONF_NESSIE_REF));
String requestedHash =
options.get(removePrefix.apply(NessieConfigConstants.CONF_NESSIE_REF_HASH));
- NessieApiV1 api =
+
+ NessieClientBuilder<?> nessieClientBuilder =
createNessieClientBuilder(
options.get(NessieConfigConstants.CONF_NESSIE_CLIENT_BUILDER_IMPL))
- .fromConfig(x -> options.get(removePrefix.apply(x)))
- .build(NessieApiV1.class);
+ .fromConfig(x -> options.get(removePrefix.apply(x)));
+ // default version is set to v1.
+ final String apiVersion =
+
options.getOrDefault(removePrefix.apply(NessieUtil.CLIENT_API_VERSION), "1");
+ NessieApiV1 api;
+ switch (apiVersion) {
+ case "1":
+ api = nessieClientBuilder.build(NessieApiV1.class);
+ break;
+ case "2":
+ api = nessieClientBuilder.build(NessieApiV2.class);
+ break;
+ default:
+ throw new IllegalArgumentException(
+ String.format(
+ "Unsupported %s: %s. Can only be 1 or 2",
+ removePrefix.apply(NessieUtil.CLIENT_API_VERSION),
apiVersion));
+ }
initialize(
name,
diff --git a/nessie/src/main/java/org/apache/iceberg/nessie/NessieUtil.java
b/nessie/src/main/java/org/apache/iceberg/nessie/NessieUtil.java
index 0e57d8ccc3..0420597945 100644
--- a/nessie/src/main/java/org/apache/iceberg/nessie/NessieUtil.java
+++ b/nessie/src/main/java/org/apache/iceberg/nessie/NessieUtil.java
@@ -37,6 +37,8 @@ public final class NessieUtil {
public static final String NESSIE_CONFIG_PREFIX = "nessie.";
static final String APPLICATION_TYPE = "application-type";
+ public static final String CLIENT_API_VERSION = "nessie.client-api-version";
+
private NessieUtil() {}
static TableIdentifier removeCatalogName(TableIdentifier to, String name) {
diff --git
a/nessie/src/test/java/org/apache/iceberg/nessie/BaseTestIceberg.java
b/nessie/src/test/java/org/apache/iceberg/nessie/BaseTestIceberg.java
index ae4947a98c..5a9bbc2738 100644
--- a/nessie/src/test/java/org/apache/iceberg/nessie/BaseTestIceberg.java
+++ b/nessie/src/test/java/org/apache/iceberg/nessie/BaseTestIceberg.java
@@ -73,7 +73,7 @@ import org.slf4j.LoggerFactory;
@ExtendWith(DatabaseAdapterExtension.class)
@NessieDbAdapterName(InmemoryDatabaseAdapterFactory.NAME)
@NessieExternalDatabase(InmemoryTestConnectionProviderSource.class)
-@NessieApiVersions(versions = NessieApiVersion.V1)
+@NessieApiVersions // test all versions
public abstract class BaseTestIceberg {
@NessieDbAdapter static DatabaseAdapter databaseAdapter;
@@ -88,6 +88,7 @@ public abstract class BaseTestIceberg {
protected NessieCatalog catalog;
protected NessieApiV1 api;
+ protected String apiVersion;
protected Configuration hadoopConfig;
protected final String branch;
private String initialHashOfDefaultBranch;
@@ -122,6 +123,7 @@ public abstract class BaseTestIceberg {
throws IOException {
this.uri = nessieUri.toASCIIString();
this.api = clientFactory.make();
+ this.apiVersion = clientFactory.apiVersion() == NessieApiVersion.V2 ? "2"
: "1";
Branch defaultBranch = api.getDefaultBranch();
initialHashOfDefaultBranch = defaultBranch.getHash();
@@ -145,7 +147,8 @@ public abstract class BaseTestIceberg {
.put("ref", ref)
.put(CatalogProperties.URI, uri)
.put("auth-type", "NONE")
- .put(CatalogProperties.WAREHOUSE_LOCATION,
temp.toUri().toString());
+ .put(CatalogProperties.WAREHOUSE_LOCATION, temp.toUri().toString())
+ .put("client-api-version", apiVersion);
if (null != hash) {
options.put("ref.hash", hash);
}
diff --git
a/nessie/src/test/java/org/apache/iceberg/nessie/TestCustomNessieClient.java
b/nessie/src/test/java/org/apache/iceberg/nessie/TestCustomNessieClient.java
index 2a3c0c85e0..4034135807 100644
--- a/nessie/src/test/java/org/apache/iceberg/nessie/TestCustomNessieClient.java
+++ b/nessie/src/test/java/org/apache/iceberg/nessie/TestCustomNessieClient.java
@@ -48,7 +48,9 @@ public class TestCustomNessieClient extends BaseTestIceberg {
CatalogProperties.WAREHOUSE_LOCATION,
temp.toUri().toString(),
CatalogProperties.URI,
- uri));
+ uri,
+ "client-api-version",
+ apiVersion));
}
@Test
@@ -62,7 +64,9 @@ public class TestCustomNessieClient extends BaseTestIceberg {
CatalogProperties.URI,
uri,
NessieConfigConstants.CONF_NESSIE_CLIENT_BUILDER_IMPL,
- HttpClientBuilder.class.getName()));
+ HttpClientBuilder.class.getName(),
+ "client-api-version",
+ apiVersion));
}
@Test
diff --git
a/nessie/src/test/java/org/apache/iceberg/nessie/TestNessieCatalog.java
b/nessie/src/test/java/org/apache/iceberg/nessie/TestNessieCatalog.java
index f8ed3987c1..8ff052712b 100644
--- a/nessie/src/test/java/org/apache/iceberg/nessie/TestNessieCatalog.java
+++ b/nessie/src/test/java/org/apache/iceberg/nessie/TestNessieCatalog.java
@@ -54,7 +54,7 @@ import
org.projectnessie.versioned.persist.tests.extension.NessieExternalDatabas
@ExtendWith(DatabaseAdapterExtension.class)
@NessieDbAdapterName(InmemoryDatabaseAdapterFactory.NAME)
@NessieExternalDatabase(InmemoryTestConnectionProviderSource.class)
-@NessieApiVersions(versions = NessieApiVersion.V1)
+@NessieApiVersions // test all versions
public class TestNessieCatalog extends CatalogTests<NessieCatalog> {
@NessieDbAdapter static DatabaseAdapter databaseAdapter;
@@ -67,6 +67,7 @@ public class TestNessieCatalog extends
CatalogTests<NessieCatalog> {
private NessieCatalog catalog;
private NessieApiV1 api;
+ private NessieApiVersion apiVersion;
private Configuration hadoopConfig;
private String initialHashOfDefaultBranch;
private String uri;
@@ -75,6 +76,7 @@ public class TestNessieCatalog extends
CatalogTests<NessieCatalog> {
public void setUp(NessieClientFactory clientFactory, @NessieClientUri URI
nessieUri)
throws NessieNotFoundException {
api = clientFactory.make();
+ apiVersion = clientFactory.apiVersion();
initialHashOfDefaultBranch = api.getDefaultBranch().getHash();
uri = nessieUri.toASCIIString();
hadoopConfig = new Configuration();
@@ -115,17 +117,17 @@ public class TestNessieCatalog extends
CatalogTests<NessieCatalog> {
private NessieCatalog initNessieCatalog(String ref) {
NessieCatalog newCatalog = new NessieCatalog();
newCatalog.setConf(hadoopConfig);
- newCatalog.initialize(
- "nessie",
+ ImmutableMap<String, String> options =
ImmutableMap.of(
"ref",
ref,
CatalogProperties.URI,
uri,
- "auth-type",
- "NONE",
CatalogProperties.WAREHOUSE_LOCATION,
- temp.toUri().toString()));
+ temp.toUri().toString(),
+ "client-api-version",
+ apiVersion == NessieApiVersion.V2 ? "2" : "1");
+ newCatalog.initialize("nessie", options);
return newCatalog;
}
diff --git
a/nessie/src/test/java/org/apache/iceberg/nessie/TestNessieIcebergClient.java
b/nessie/src/test/java/org/apache/iceberg/nessie/TestNessieIcebergClient.java
index d6643be91e..12fa807dcf 100644
---
a/nessie/src/test/java/org/apache/iceberg/nessie/TestNessieIcebergClient.java
+++
b/nessie/src/test/java/org/apache/iceberg/nessie/TestNessieIcebergClient.java
@@ -18,6 +18,7 @@
*/
package org.apache.iceberg.nessie;
+import java.io.IOException;
import org.apache.iceberg.catalog.Namespace;
import org.apache.iceberg.relocated.com.google.common.collect.ImmutableMap;
import org.assertj.core.api.Assertions;
@@ -89,4 +90,16 @@ public class TestNessieIcebergClient extends BaseTestIceberg
{
.isEqualTo(ref);
Assertions.assertThat(client.withReference(branch,
null)).isNotEqualTo(client);
}
+
+ @Test
+ public void testInvalidClientApiVersion() throws IOException {
+ try (NessieCatalog newCatalog = new NessieCatalog()) {
+ newCatalog.setConf(hadoopConfig);
+ ImmutableMap.Builder<String, String> options =
+ ImmutableMap.<String, String>builder().put("client-api-version",
"3");
+ Assertions.assertThatThrownBy(() -> newCatalog.initialize("nessie",
options.buildOrThrow()))
+ .isInstanceOf(IllegalArgumentException.class)
+ .hasMessage("Unsupported client-api-version: 3. Can only be 1 or 2");
+ }
+ }
}