dimas-b opened a new issue, #4407: URL: https://github.com/apache/polaris/issues/4407
1. Start Polaris Server (any Persistence). 2. Create catalog (any storage). 3. Grant catalog access to the admin role (see below) 4. Create namespace `ns` 5. Run two parallel processes each running in a loop: a) create / drop namespace `ns.n1` b) perform a staged table create for table `ts1` in namespace `ns` 6. Observe that after a while process `b` fails with a `500` response from Polaris. Example scripts: Run with in-memory persistence: ``` env POLARIS_BOOTSTRAP_CREDENTIALS=POLARIS,pol123,pol123s java -jar runtime/server/build/quarkus-app/quarkus-run.jar ``` Create RustFS catalog: ``` ./polaris --client-id pol123 --client-secret pol123s catalogs create polaris --storage-type S3 --default-base-location 's3://pol/' --endpoint http://rustfs.local:9000 --path-style-access ``` Grant catalog access to the admin role: ``` ./polaris --realm POLARIS --client-id pol123 --client-secret pol123s privileges catalog grant --catalog polaris --catalog-role catalog_admin CATALOG_MANAGE_CONTENT ``` Create first namespace (`ns`) (fish shell): ``` $ set -x POLARIS_TOKEN (curl -X POST http://localhost:8181/api/catalog/v1/oauth/tokens --data-urlencode "scope=PRINCIPAL_ROLE:ALL" --data-urlencode "grant_type=client_credentials" --data-urlencode "client_id=pol123" --data-urlencode "client_secret=pol123s"|jq -r .access_token) $ curl -H "Authorization: Bearer $POLARIS_TOKEN" -H 'Content-Type: application/json' -X POST 'http://localhost:8181/api/catalog/v1/polaris/namespaces/' -d '{"namespace":["ns"]}' ``` Process A (fish shell): ``` $ set -x POLARIS_TOKEN (curl -X POST http://localhost:8181/api/catalog/v1/oauth/tokens --data-urlencode "scope=PRINCIPAL_ROLE:ALL" --data-urlencode "grant_type=client_credentials" --data-urlencode "client_id=pol123" --data-urlencode "client_secret=pol123s"|jq -r .access_token) $ for n in (seq 1 5000) ; curl -H "Authorization: Bearer $POLARIS_TOKEN" -H 'Content-Type: application/json' -X POST 'http://localhost:8181/api/catalog/v1/polaris/namespaces/' -d '{"namespace":["ns", "ns1"]}' ; curl -H "Authorization: Bearer $POLARIS_TOKEN" -H 'Content-Type: application/json' -X DELETE 'http://localhost:8181/api/catalog/v1/polaris/namespaces/ns%1fns1' ; end ``` Process B (fish shell): ``` $ set -x POLARIS_TOKEN (curl -X POST http://localhost:8181/api/catalog/v1/oauth/tokens --data-urlencode "scope=PRINCIPAL_ROLE:ALL" --data-urlencode "grant_type=client_credentials" --data-urlencode "client_id=pol123" --data-urlencode "client_secret=pol123s"|jq -r .access_token) $ for n in (seq 1 5000) ; set v (curl -H "Authorization: Bearer $POLARIS_TOKEN" -H 'X-Iceberg-Access-Delegation: vended-credentials' -H "Content-Type: application/json" -X POST 'http://localhost:8181/api/catalog/v1/polaris/namespaces/ns/tables' -d '{ "name": "ts1", "stage-create": true, "schema": { "type": "struct", "schema-id": 0, "fields": [ { "id": 1, "name": "id", "required": true, "type": "long" }, { "id": 2, "name": "name", "required": false, "type": "string" }, { "id": 3, "name": "ts", "required": false, "type": "timestamptz" } ] }, "partition-spec": { "spec-id": 0, "fields": [] }, "write-order": { "order-id": 0, "fields": [] }, "properties": { "write.format.default": "parquet" } }' -s -w "%{http_code}" -o /dev/null) ; echo $v ; if test $v != "200" ; break; end; end ``` Observed Polaris exception: ``` 2026-05-11 18:59:51,245 INFO [io.qua.htt.access-log] [55ee3dea-52d6-4614-a87f-a70bcfda0be0_0000000000000017029,POLARIS] [,,,] (executor-thread-5) 0:0:0:0:0:0:0:1 - root [11/May/2026:18:59:51 -0400] "DELETE /api/catalog/v1/polaris/namespaces/ns%1fns1 HTTP/1.1" 204 - 2026-05-11 18:59:51,246 INFO [org.apa.pol.ser.exc.IcebergExceptionMapper] [55ee3dea-52d6-4614-a87f-a70bcfda0be0_0000000000000017028,POLARIS] [,,,] (executor-thread-4) Handling runtimeException Unable to resolve sibling entities to validate location - PATH_COULD_NOT_BE_FULLY_RESOLVED 2026-05-11 18:59:51,246 ERROR [org.apa.pol.ser.exc.IcebergExceptionMapper] [55ee3dea-52d6-4614-a87f-a70bcfda0be0_0000000000000017028,POLARIS] [,,,] (executor-thread-4) Unhandled exception returning INTERNAL_SERVER_ERROR: java.lang.IllegalStateException: Unable to resolve sibling entities to validate location - PATH_COULD_NOT_BE_FULLY_RESOLVED at org.apache.polaris.service.catalog.iceberg.IcebergCatalog.validateNoLocationOverlap(IcebergCatalog.java:1272) at org.apache.polaris.service.catalog.iceberg.IcebergCatalog.validateNoLocationOverlap(IcebergCatalog.java:1085) at org.apache.polaris.service.catalog.iceberg.IcebergCatalog.lambda$validateStagedTableCreate$7(IcebergCatalog.java:1015) at java.base/java.lang.Iterable.forEach(Iterable.java:75) at org.apache.polaris.service.catalog.iceberg.IcebergCatalog.validateStagedTableCreate(IcebergCatalog.java:1013) at org.apache.polaris.service.catalog.iceberg.IcebergCatalogHandler.createTableStaged(IcebergCatalogHandler.java:597) at org.apache.polaris.service.catalog.iceberg.IcebergCatalogAdapter.lambda$createTable$7(IcebergCatalogAdapter.java:284) at org.apache.polaris.service.catalog.iceberg.IcebergCatalogAdapter.withCatalogByName(IcebergCatalogAdapter.java:112) at org.apache.polaris.service.catalog.iceberg.IcebergCatalogAdapter.withCatalog(IcebergCatalogAdapter.java:104) at org.apache.polaris.service.catalog.iceberg.IcebergCatalogAdapter.createTable(IcebergCatalogAdapter.java:273) at org.apache.polaris.service.catalog.iceberg.IcebergCatalogAdapter_Subclass.createTable$$superforward(Unknown Source) at org.apache.polaris.service.catalog.iceberg.IcebergRestCatalogEventServiceDelegator_Gj_WCptqTcdHu-fbZfgVkAwPXCI_Delegate_Subclass.createTable(Unknown Source) at org.apache.polaris.service.catalog.iceberg.IcebergRestCatalogEventServiceDelegator.createTable(IcebergRestCatalogEventServiceDelegator.java:307) at org.apache.polaris.service.catalog.iceberg.IcebergCatalogAdapter_Subclass.createTable(Unknown Source) at org.apache.polaris.service.catalog.iceberg.IcebergCatalogAdapter_ClientProxy.createTable(Unknown Source) at org.apache.polaris.service.catalog.api.IcebergRestCatalogApi.createTable(IcebergRestCatalogApi.java:193) at org.apache.polaris.service.catalog.api.IcebergRestCatalogApi_Subclass.createTable$$superforward(Unknown Source) at org.apache.polaris.service.catalog.api.IcebergRestCatalogApi_Subclass$2.apply(Unknown Source) at io.quarkus.arc.impl.AroundInvokeInvocationContext.proceed(AroundInvokeInvocationContext.java:73) at io.quarkus.arc.impl.AroundInvokeInvocationContext$NextAroundInvokeInvocationContext.proceed(AroundInvokeInvocationContext.java:97) at io.smallrye.faulttolerance.FaultToleranceInterceptor.lambda$syncFlow$8(FaultToleranceInterceptor.java:364) at io.smallrye.faulttolerance.core.Future.from(Future.java:85) at io.smallrye.faulttolerance.FaultToleranceInterceptor.lambda$syncFlow$9(FaultToleranceInterceptor.java:364) at io.smallrye.faulttolerance.core.FaultToleranceContext.call(FaultToleranceContext.java:20) at io.smallrye.faulttolerance.core.Invocation.apply(Invocation.java:29) at io.smallrye.faulttolerance.core.metrics.MetricsCollector.apply(MetricsCollector.java:98) at io.smallrye.faulttolerance.FaultToleranceInterceptor.syncFlow(FaultToleranceInterceptor.java:367) at io.smallrye.faulttolerance.FaultToleranceInterceptor.intercept(FaultToleranceInterceptor.java:205) at io.smallrye.faulttolerance.FaultToleranceInterceptor_Bean.intercept(Unknown Source) at io.quarkus.arc.impl.InterceptorInvocation.invoke(InterceptorInvocation.java:42) at io.quarkus.arc.impl.AroundInvokeInvocationContext.proceed(AroundInvokeInvocationContext.java:70) at io.quarkus.arc.impl.AroundInvokeInvocationContext$NextAroundInvokeInvocationContext.proceed(AroundInvokeInvocationContext.java:97) at io.quarkus.micrometer.runtime.MicrometerTimedInterceptor.timedMethod(MicrometerTimedInterceptor.java:79) at io.quarkus.micrometer.runtime.MicrometerTimedInterceptor_Bean.intercept(Unknown Source) at io.quarkus.arc.impl.InterceptorInvocation.invoke(InterceptorInvocation.java:42) at io.quarkus.arc.impl.AroundInvokeInvocationContext.proceed(AroundInvokeInvocationContext.java:70) at io.quarkus.arc.impl.AroundInvokeInvocationContext$NextAroundInvokeInvocationContext.proceed(AroundInvokeInvocationContext.java:97) at io.quarkus.security.runtime.interceptor.SecurityHandler.handle(SecurityHandler.java:27) at io.quarkus.security.runtime.interceptor.RolesAllowedInterceptor.intercept(RolesAllowedInterceptor.java:31) at io.quarkus.security.runtime.interceptor.RolesAllowedInterceptor_Bean.intercept(Unknown Source) at io.quarkus.arc.impl.InterceptorInvocation.invoke(InterceptorInvocation.java:42) at io.quarkus.arc.impl.AroundInvokeInvocationContext.proceed(AroundInvokeInvocationContext.java:70) at io.quarkus.arc.impl.AroundInvokeInvocationContext.proceed(AroundInvokeInvocationContext.java:62) at io.quarkus.resteasy.reactive.server.runtime.StandardSecurityCheckInterceptor.intercept(StandardSecurityCheckInterceptor.java:48) at io.quarkus.resteasy.reactive.server.runtime.StandardSecurityCheckInterceptor$RolesAllowedInterceptor_Bean.intercept(Unknown Source) at io.quarkus.arc.impl.InterceptorInvocation.invoke(InterceptorInvocation.java:42) at io.quarkus.arc.impl.AroundInvokeInvocationContext.perform(AroundInvokeInvocationContext.java:30) at io.quarkus.arc.impl.InvocationContexts.performAroundInvoke(InvocationContexts.java:27) at org.apache.polaris.service.catalog.api.IcebergRestCatalogApi_Subclass.createTable(Unknown Source) at org.apache.polaris.service.catalog.api.IcebergRestCatalogApi$quarkusrestinvoker$createTable_01f5a1bd6d7815fd3314a553161c943c8cd03101.invoke(Unknown Source) at org.jboss.resteasy.reactive.server.handlers.InvocationHandler.handle(InvocationHandler.java:29) at io.quarkus.resteasy.reactive.server.runtime.QuarkusResteasyReactiveRequestContext.invokeHandler(QuarkusResteasyReactiveRequestContext.java:190) at org.jboss.resteasy.reactive.common.core.AbstractResteasyReactiveContext.run(AbstractResteasyReactiveContext.java:147) at io.quarkus.vertx.core.runtime.VertxCoreRecorder$15.runWith(VertxCoreRecorder.java:677) 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) ``` -- 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: [email protected] For queries about this service, please contact Infrastructure at: [email protected]
