nessie icon indicating copy to clipboard operation
nessie copied to clipboard

[Bug]: Unable to point to root folder

Open julien-alpaca opened this issue 4 months ago • 2 comments

What happened

This config does not work because Nessie requires a subpath that is not empty: location: gs://alpaca-datawarehouse-prod

2025-08-06 14:38:24,999 ERROR [org.pro.ser.cat.ObjectStoresHealthCheck] (executor-thread-1) Failed to ping warehouse 'lakehouse-production', error ID 76c3fe88-4aec-4b9e-a518-c3b17b376772: java.lang.NullPointerException
	at com.google.common.base.Preconditions.checkNotNull(Preconditions.java:902)
	at com.google.cloud.storage.BlobId.of(BlobId.java:132)
	at com.google.cloud.storage.JsonConversions.blobIdDecode(JsonConversions.java:353)
	at com.google.cloud.storage.JsonConversions.blobInfoDecode(JsonConversions.java:299)
	at com.google.cloud.storage.Conversions$SimpleCodec.decode(Conversions.java:149)
	at com.google.cloud.storage.StorageImpl.lambda$internalGetBlob$70(StorageImpl.java:1671)
	at com.google.cloud.storage.Retrying.run(Retrying.java:66)
	at com.google.cloud.storage.StorageImpl.run(StorageImpl.java:1608)
	at com.google.cloud.storage.StorageImpl.internalGetBlob(StorageImpl.java:1667)
	at com.google.cloud.storage.StorageImpl.get(StorageImpl.java:345)
	at com.google.cloud.storage.StorageImpl.get(StorageImpl.java:350)
	at org.projectnessie.catalog.files.gcs.GcsObjectIO.ping(GcsObjectIO.java:73)
	at org.projectnessie.catalog.files.DelegatingObjectIO.ping(DelegatingObjectIO.java:35)
	at org.projectnessie.catalog.files.api.CatalogProducers_ProducerMethod_objectIO_Ed95GkFIhtTZERiabosXvHelB7Q_ClientProxy.ping(Unknown Source)
	at org.projectnessie.server.catalog.ObjectStoresHealthCheck.call(ObjectStoresHealthCheck.java:61)
	at org.projectnessie.server.catalog.ObjectStoresHealthCheck_ClientProxy.call(Unknown Source)
	at io.smallrye.context.impl.wrappers.SlowContextualSupplier.get(SlowContextualSupplier.java:21)
	at io.smallrye.mutiny.operators.uni.builders.UniCreateFromItemSupplier.subscribe(UniCreateFromItemSupplier.java:28)
	at io.smallrye.mutiny.operators.AbstractUni.subscribe(AbstractUni.java:35)
	at io.smallrye.mutiny.operators.uni.UniOnFailureFlatMap.subscribe(UniOnFailureFlatMap.java:31)
	at io.smallrye.mutiny.operators.AbstractUni.subscribe(AbstractUni.java:35)
	at io.smallrye.mutiny.operators.uni.UniOnItemTransform.subscribe(UniOnItemTransform.java:22)
	at io.smallrye.mutiny.operators.AbstractUni.subscribe(AbstractUni.java:35)
	at io.smallrye.mutiny.operators.uni.UniRunSubscribeOn.lambda$subscribe$0(UniRunSubscribeOn.java:27)
	at io.quarkus.smallrye.health.runtime.QuarkusAsyncHealthCheckFactory$1$1.call(QuarkusAsyncHealthCheckFactory.java:42)
	at io.quarkus.smallrye.health.runtime.QuarkusAsyncHealthCheckFactory$1$1.call(QuarkusAsyncHealthCheckFactory.java:39)
	at io.vertx.core.impl.ContextImpl.lambda$executeBlocking$4(ContextImpl.java:192)
	at io.vertx.core.impl.ContextInternal.dispatch(ContextInternal.java:270)
	at io.vertx.core.impl.ContextImpl$1.execute(ContextImpl.java:221)
	at io.vertx.core.impl.WorkerTask.run(WorkerTask.java:56)
	at io.quarkus.vertx.core.runtime.VertxCoreRecorder$15.runWith(VertxCoreRecorder.java:637)
	at org.jboss.threads.EnhancedQueueExecutor$Task.doRunWith(EnhancedQueueExecutor.java:2651)
	at org.jboss.threads.EnhancedQueueExecutor$Task.run(EnhancedQueueExecutor.java:2630)
	at org.jboss.threads.EnhancedQueueExecutor.runThreadBody(EnhancedQueueExecutor.java:1622)
	at org.jboss.threads.EnhancedQueueExecutor$ThreadBody.run(EnhancedQueueExecutor.java:1589)
	at org.jboss.threads.DelegatingRunnable.run(DelegatingRunnable.java:11)
	at org.jboss.threads.ThreadLocalResettingRunnable.run(ThreadLocalResettingRunnable.java:11)
	at io.netty.util.concurrent.FastThreadLocalRunnable.run(FastThreadLocalRunnable.java:30)
	at java.base/java.lang.Thread.run(Thread.java:1583)

How to reproduce it

  1. Deploy Nessie using a bucket at the root level (no subpath)

Nessie server type (docker/uber-jar/built from source) and version

kubernetes, latest version

Client type (Ex: UI/Spark/pynessie ...) and version

k8s

Additional information

No response

julien-alpaca avatar Aug 06 '25 14:08 julien-alpaca

HI @julien-alpaca , Thanks for reporting this issue.

I guess it may be specific to the health check, though, and Nessie APIs may work with the root of the GS bucket.

Please try setting this config nessie.catalog.object-stores.health-check.enabled to false.

dimas-b avatar Aug 12 '25 23:08 dimas-b

The corresponding helm value is catalog.iceberg.objectStoresHealthCheckEnabled

dimas-b avatar Aug 12 '25 23:08 dimas-b