This is an automated email from the ASF dual-hosted git repository.
yufei pushed a commit to branch main
in repository https://gitbox.apache.org/repos/asf/polaris.git
The following commit(s) were added to refs/heads/main by this push:
new 0a8d8b805 Core: Consolidate CallContext with PolarisCallContext part
1(#1806)
0a8d8b805 is described below
commit 0a8d8b8053ca37d5d95757b416a9a42814630135
Author: Yufei Gu <[email protected]>
AuthorDate: Wed Jun 4 12:13:13 2025 -0700
Core: Consolidate CallContext with PolarisCallContext part 1(#1806)
---
.../jdbc/JdbcMetaStoreManagerFactory.java | 12 ++++--
.../apache/polaris/core/PolarisCallContext.java | 49 ++++++++++++++++++----
.../apache/polaris/core/context/CallContext.java | 13 +++++-
.../LocalPolarisMetaStoreManagerFactory.java | 14 ++++---
.../service/quarkus/config/QuarkusProducers.java | 11 ++---
.../context/DefaultCallContextResolver.java | 5 +--
6 files changed, 74 insertions(+), 30 deletions(-)
diff --git
a/persistence/relational-jdbc/src/main/java/org/apache/polaris/persistence/relational/jdbc/JdbcMetaStoreManagerFactory.java
b/persistence/relational-jdbc/src/main/java/org/apache/polaris/persistence/relational/jdbc/JdbcMetaStoreManagerFactory.java
index e3547eb2f..7ad83fe8a 100644
---
a/persistence/relational-jdbc/src/main/java/org/apache/polaris/persistence/relational/jdbc/JdbcMetaStoreManagerFactory.java
+++
b/persistence/relational-jdbc/src/main/java/org/apache/polaris/persistence/relational/jdbc/JdbcMetaStoreManagerFactory.java
@@ -226,9 +226,11 @@ public class JdbcMetaStoreManagerFactory implements
MetaStoreManagerFactory {
// CallContext may not have been resolved yet.
PolarisCallContext polarisContext =
new PolarisCallContext(
- sessionSupplierMap.get(realmContext.getRealmIdentifier()).get(),
diagServices);
+ realmContext,
+ sessionSupplierMap.get(realmContext.getRealmIdentifier()).get(),
+ diagServices);
if (CallContext.getCurrentContext() == null) {
- CallContext.setCurrentContext(CallContext.of(realmContext,
polarisContext));
+ CallContext.setCurrentContext(polarisContext);
}
EntityResult preliminaryRootPrincipalLookup =
@@ -275,9 +277,11 @@ public class JdbcMetaStoreManagerFactory implements
MetaStoreManagerFactory {
RealmContext realmContext, PolarisMetaStoreManager metaStoreManager) {
PolarisCallContext polarisContext =
new PolarisCallContext(
- sessionSupplierMap.get(realmContext.getRealmIdentifier()).get(),
diagServices);
+ realmContext,
+ sessionSupplierMap.get(realmContext.getRealmIdentifier()).get(),
+ diagServices);
if (CallContext.getCurrentContext() == null) {
- CallContext.setCurrentContext(CallContext.of(realmContext,
polarisContext));
+ CallContext.setCurrentContext(polarisContext);
}
EntityResult rootPrincipalLookup =
diff --git
a/polaris-core/src/main/java/org/apache/polaris/core/PolarisCallContext.java
b/polaris-core/src/main/java/org/apache/polaris/core/PolarisCallContext.java
index c7033a50d..4d5dfe984 100644
--- a/polaris-core/src/main/java/org/apache/polaris/core/PolarisCallContext.java
+++ b/polaris-core/src/main/java/org/apache/polaris/core/PolarisCallContext.java
@@ -22,13 +22,15 @@ import jakarta.annotation.Nonnull;
import java.time.Clock;
import java.time.ZoneId;
import org.apache.polaris.core.config.PolarisConfigurationStore;
+import org.apache.polaris.core.context.CallContext;
+import org.apache.polaris.core.context.RealmContext;
import org.apache.polaris.core.persistence.BasePersistence;
/**
* The Call context is allocated each time a new REST request is processed. It
contains instances of
* low-level services required to process that request
*/
-public class PolarisCallContext {
+public class PolarisCallContext implements CallContext {
// meta store which is used to persist Polaris entity metadata
private final BasePersistence metaStore;
@@ -40,31 +42,52 @@ public class PolarisCallContext {
private final Clock clock;
+ // will make it final once we remove deprecated constructor
+ private RealmContext realmContext = null;
+
public PolarisCallContext(
+ @Nonnull RealmContext realmContext,
@Nonnull BasePersistence metaStore,
@Nonnull PolarisDiagnostics diagServices,
@Nonnull PolarisConfigurationStore configurationStore,
@Nonnull Clock clock) {
+ this.realmContext = realmContext;
this.metaStore = metaStore;
this.diagServices = diagServices;
this.configurationStore = configurationStore;
this.clock = clock;
}
+ @Deprecated
public PolarisCallContext(
- @Nonnull BasePersistence metaStore, @Nonnull PolarisDiagnostics
diagServices) {
+ @Nonnull BasePersistence metaStore,
+ @Nonnull PolarisDiagnostics diagServices,
+ @Nonnull PolarisConfigurationStore configurationStore,
+ @Nonnull Clock clock) {
+ this.metaStore = metaStore;
+ this.diagServices = diagServices;
+ this.configurationStore = configurationStore;
+ this.clock = clock;
+ }
+
+ public PolarisCallContext(
+ @Nonnull RealmContext realmContext,
+ @Nonnull BasePersistence metaStore,
+ @Nonnull PolarisDiagnostics diagServices) {
+ this.realmContext = realmContext;
this.metaStore = metaStore;
this.diagServices = diagServices;
this.configurationStore = new PolarisConfigurationStore() {};
this.clock = Clock.system(ZoneId.systemDefault());
}
- public static PolarisCallContext copyOf(PolarisCallContext original) {
- return new PolarisCallContext(
- original.getMetaStore().detach(),
- original.getDiagServices(),
- original.getConfigurationStore(),
- original.getClock());
+ @Deprecated
+ public PolarisCallContext(
+ @Nonnull BasePersistence metaStore, @Nonnull PolarisDiagnostics
diagServices) {
+ this.metaStore = metaStore;
+ this.diagServices = diagServices;
+ this.configurationStore = new PolarisConfigurationStore() {};
+ this.clock = Clock.system(ZoneId.systemDefault());
}
public BasePersistence getMetaStore() {
@@ -82,4 +105,14 @@ public class PolarisCallContext {
public Clock getClock() {
return clock;
}
+
+ @Override
+ public RealmContext getRealmContext() {
+ return realmContext;
+ }
+
+ @Override
+ public PolarisCallContext getPolarisCallContext() {
+ return this;
+ }
}
diff --git
a/polaris-core/src/main/java/org/apache/polaris/core/context/CallContext.java
b/polaris-core/src/main/java/org/apache/polaris/core/context/CallContext.java
index 54859647d..340cf4a6e 100644
---
a/polaris-core/src/main/java/org/apache/polaris/core/context/CallContext.java
+++
b/polaris-core/src/main/java/org/apache/polaris/core/context/CallContext.java
@@ -49,6 +49,7 @@ public interface CallContext {
CURRENT_CONTEXT.remove();
}
+ // only tests are using this method now, we can get rid of them easily in a
followup
static CallContext of(
final RealmContext realmContext, final PolarisCallContext
polarisCallContext) {
return new CallContext() {
@@ -68,7 +69,15 @@ public interface CallContext {
static CallContext copyOf(CallContext base) {
String realmId = base.getRealmContext().getRealmIdentifier();
RealmContext realmContext = () -> realmId;
- PolarisCallContext polarisCallContext =
PolarisCallContext.copyOf(base.getPolarisCallContext());
+ PolarisCallContext originalPolarisCallContext =
base.getPolarisCallContext();
+ PolarisCallContext newPolarisCallContext =
+ new PolarisCallContext(
+ realmContext,
+ originalPolarisCallContext.getMetaStore(),
+ originalPolarisCallContext.getDiagServices(),
+ originalPolarisCallContext.getConfigurationStore(),
+ originalPolarisCallContext.getClock());
+
return new CallContext() {
@Override
public RealmContext getRealmContext() {
@@ -77,7 +86,7 @@ public interface CallContext {
@Override
public PolarisCallContext getPolarisCallContext() {
- return polarisCallContext;
+ return newPolarisCallContext;
}
};
}
diff --git
a/polaris-core/src/main/java/org/apache/polaris/core/persistence/LocalPolarisMetaStoreManagerFactory.java
b/polaris-core/src/main/java/org/apache/polaris/core/persistence/LocalPolarisMetaStoreManagerFactory.java
index dc615341a..8d385bd0c 100644
---
a/polaris-core/src/main/java/org/apache/polaris/core/persistence/LocalPolarisMetaStoreManagerFactory.java
+++
b/polaris-core/src/main/java/org/apache/polaris/core/persistence/LocalPolarisMetaStoreManagerFactory.java
@@ -202,11 +202,13 @@ public abstract class
LocalPolarisMetaStoreManagerFactory<StoreType>
RealmContext realmContext, PolarisMetaStoreManager metaStoreManager) {
// While bootstrapping we need to act as a fake privileged context since
the real
// CallContext may not have been resolved yet.
- PolarisCallContext polarisContext =
+ var polarisContext =
new PolarisCallContext(
- sessionSupplierMap.get(realmContext.getRealmIdentifier()).get(),
diagServices);
+ realmContext,
+ sessionSupplierMap.get(realmContext.getRealmIdentifier()).get(),
+ diagServices);
if (CallContext.getCurrentContext() == null) {
- CallContext.setCurrentContext(CallContext.of(realmContext,
polarisContext));
+ CallContext.setCurrentContext(polarisContext);
}
EntityResult preliminaryRootPrincipalLookup =
@@ -251,9 +253,11 @@ public abstract class
LocalPolarisMetaStoreManagerFactory<StoreType>
RealmContext realmContext, PolarisMetaStoreManager metaStoreManager) {
PolarisCallContext polarisContext =
new PolarisCallContext(
- sessionSupplierMap.get(realmContext.getRealmIdentifier()).get(),
diagServices);
+ realmContext,
+ sessionSupplierMap.get(realmContext.getRealmIdentifier()).get(),
+ diagServices);
if (CallContext.getCurrentContext() == null) {
- CallContext.setCurrentContext(CallContext.of(realmContext,
polarisContext));
+ CallContext.setCurrentContext(polarisContext);
}
EntityResult rootPrincipalLookup =
diff --git
a/quarkus/service/src/main/java/org/apache/polaris/service/quarkus/config/QuarkusProducers.java
b/quarkus/service/src/main/java/org/apache/polaris/service/quarkus/config/QuarkusProducers.java
index c4b3a3ae1..593853c40 100644
---
a/quarkus/service/src/main/java/org/apache/polaris/service/quarkus/config/QuarkusProducers.java
+++
b/quarkus/service/src/main/java/org/apache/polaris/service/quarkus/config/QuarkusProducers.java
@@ -121,7 +121,7 @@ public class QuarkusProducers {
@Produces
@RequestScoped
- public PolarisCallContext polarisCallContext(
+ public CallContext polarisCallContext(
RealmContext realmContext,
PolarisDiagnostics diagServices,
PolarisConfigurationStore configurationStore,
@@ -129,13 +129,8 @@ public class QuarkusProducers {
Clock clock) {
BasePersistence metaStoreSession =
metaStoreManagerFactory.getOrCreateSessionSupplier(realmContext).get();
- return new PolarisCallContext(metaStoreSession, diagServices,
configurationStore, clock);
- }
-
- @Produces
- @RequestScoped
- public CallContext callContext(RealmContext realmContext, PolarisCallContext
polarisCallContext) {
- return CallContext.of(realmContext, polarisCallContext);
+ return new PolarisCallContext(
+ realmContext, metaStoreSession, diagServices, configurationStore,
clock);
}
// Polaris service beans - selected from @Identifier-annotated beans
diff --git
a/service/common/src/main/java/org/apache/polaris/service/context/DefaultCallContextResolver.java
b/service/common/src/main/java/org/apache/polaris/service/context/DefaultCallContextResolver.java
index 8c5ae391d..62b113dae 100644
---
a/service/common/src/main/java/org/apache/polaris/service/context/DefaultCallContextResolver.java
+++
b/service/common/src/main/java/org/apache/polaris/service/context/DefaultCallContextResolver.java
@@ -66,8 +66,7 @@ public class DefaultCallContextResolver implements
CallContextResolver {
// factories would then inject something else instead if needed.
BasePersistence metaStoreSession =
metaStoreManagerFactory.getOrCreateSessionSupplier(realmContext).get();
- PolarisCallContext polarisContext =
- new PolarisCallContext(metaStoreSession, diagnostics,
configurationStore, clock);
- return CallContext.of(realmContext, polarisContext);
+ return new PolarisCallContext(
+ realmContext, metaStoreSession, diagnostics, configurationStore,
clock);
}
}