This is an automated email from the ASF dual-hosted git repository.
adutra 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 23e51307e Make column events.request_id nullable (#2566)
23e51307e is described below
commit 23e51307effc8d10ad0c327efd51898c72e667fb
Author: Alexandre Dutra <[email protected]>
AuthorDate: Mon Sep 15 23:06:31 2025 +0200
Make column events.request_id nullable (#2566)
The request ID is an optional information coming from the REST request.
This PR makes it nullable in the database schema.
This PR also annotates the `ModelEvent.principalName` and
`PolarisEvent.principalName` fields as nullable in code (the corresponding
column was already nullable in the database schema).
---
.../relational/jdbc/models/ModelEvent.java | 3 +++
.../src/main/resources/h2/schema-v3.sql | 2 +-
.../src/main/resources/postgres/schema-v3.sql | 2 +-
.../apache/polaris/core/entity/PolarisEvent.java | 29 ++++++++++++----------
...emoryBufferPolarisPersistenceEventListener.java | 2 ++
.../listeners/PolarisPersistenceEventListener.java | 4 ++-
6 files changed, 26 insertions(+), 16 deletions(-)
diff --git
a/persistence/relational-jdbc/src/main/java/org/apache/polaris/persistence/relational/jdbc/models/ModelEvent.java
b/persistence/relational-jdbc/src/main/java/org/apache/polaris/persistence/relational/jdbc/models/ModelEvent.java
index 8700cff8b..92d01c3e8 100644
---
a/persistence/relational-jdbc/src/main/java/org/apache/polaris/persistence/relational/jdbc/models/ModelEvent.java
+++
b/persistence/relational-jdbc/src/main/java/org/apache/polaris/persistence/relational/jdbc/models/ModelEvent.java
@@ -19,6 +19,7 @@
package org.apache.polaris.persistence.relational.jdbc.models;
+import jakarta.annotation.Nullable;
import java.sql.ResultSet;
import java.sql.SQLException;
import java.util.LinkedHashMap;
@@ -51,6 +52,7 @@ public interface ModelEvent extends Converter<PolarisEvent> {
String getEventId();
// id of the request that generated this event
+ @Nullable
String getRequestId();
// event type that was created
@@ -60,6 +62,7 @@ public interface ModelEvent extends Converter<PolarisEvent> {
long getTimestampMs();
// polaris principal who took this action
+ @Nullable
String getPrincipalName();
// Enum that states the type of resource was being operated on
diff --git a/persistence/relational-jdbc/src/main/resources/h2/schema-v3.sql
b/persistence/relational-jdbc/src/main/resources/h2/schema-v3.sql
index 08e2aa850..59075a9be 100644
--- a/persistence/relational-jdbc/src/main/resources/h2/schema-v3.sql
+++ b/persistence/relational-jdbc/src/main/resources/h2/schema-v3.sql
@@ -129,7 +129,7 @@ CREATE TABLE IF NOT EXISTS events (
realm_id TEXT NOT NULL,
catalog_id TEXT NOT NULL,
event_id TEXT NOT NULL,
- request_id TEXT NOT NULL,
+ request_id TEXT,
event_type TEXT NOT NULL,
timestamp_ms BIGINT NOT NULL,
principal_name TEXT,
diff --git
a/persistence/relational-jdbc/src/main/resources/postgres/schema-v3.sql
b/persistence/relational-jdbc/src/main/resources/postgres/schema-v3.sql
index 38a1ee492..2ab7adcfd 100644
--- a/persistence/relational-jdbc/src/main/resources/postgres/schema-v3.sql
+++ b/persistence/relational-jdbc/src/main/resources/postgres/schema-v3.sql
@@ -126,7 +126,7 @@ CREATE TABLE IF NOT EXISTS events (
realm_id TEXT NOT NULL,
catalog_id TEXT NOT NULL,
event_id TEXT NOT NULL,
- request_id TEXT NOT NULL,
+ request_id TEXT,
event_type TEXT NOT NULL,
timestamp_ms BIGINT NOT NULL,
principal_name TEXT,
diff --git
a/polaris-core/src/main/java/org/apache/polaris/core/entity/PolarisEvent.java
b/polaris-core/src/main/java/org/apache/polaris/core/entity/PolarisEvent.java
index 010108193..0ac1ea84a 100644
---
a/polaris-core/src/main/java/org/apache/polaris/core/entity/PolarisEvent.java
+++
b/polaris-core/src/main/java/org/apache/polaris/core/entity/PolarisEvent.java
@@ -22,6 +22,7 @@ package org.apache.polaris.core.entity;
import com.fasterxml.jackson.annotation.JsonIgnore;
import com.fasterxml.jackson.core.JsonProcessingException;
import com.fasterxml.jackson.databind.ObjectMapper;
+import jakarta.annotation.Nullable;
import java.util.Map;
public class PolarisEvent {
@@ -32,28 +33,28 @@ public class PolarisEvent {
private static final ObjectMapper MAPPER = new ObjectMapper();
// catalog id
- private String catalogId;
+ private final String catalogId;
// event id
- private String id;
+ private final String id;
- // id of the request that generated this event
- private String requestId;
+ // id of the request that generated this event, if any
+ @Nullable private final String requestId;
// event type that was fired
- private String eventType;
+ private final String eventType;
// timestamp in epoch milliseconds of when this event was emitted
- private long timestampMs;
+ private final long timestampMs;
- // polaris principal who took this action
- private String principalName;
+ // polaris principal who took this action, or null if unknown
+ @Nullable private final String principalName;
// Enum that states the type of resource was being operated on
- private ResourceType resourceType;
+ private final ResourceType resourceType;
// Which resource was operated on
- private String resourceIdentifier;
+ private final String resourceIdentifier;
// Additional parameters that were not earlier recorded
private String additionalProperties;
@@ -66,6 +67,7 @@ public class PolarisEvent {
return id;
}
+ @Nullable
public String getRequestId() {
return requestId;
}
@@ -78,6 +80,7 @@ public class PolarisEvent {
return timestampMs;
}
+ @Nullable
public String getPrincipalName() {
return principalName;
}
@@ -97,10 +100,10 @@ public class PolarisEvent {
public PolarisEvent(
String catalogId,
String id,
- String requestId,
+ @Nullable String requestId,
String eventType,
long timestampMs,
- String actor,
+ @Nullable String principalName,
ResourceType resourceType,
String resourceIdentifier) {
this.catalogId = catalogId;
@@ -108,7 +111,7 @@ public class PolarisEvent {
this.requestId = requestId;
this.eventType = eventType;
this.timestampMs = timestampMs;
- this.principalName = actor;
+ this.principalName = principalName;
this.resourceType = resourceType;
this.resourceIdentifier = resourceIdentifier;
}
diff --git
a/runtime/service/src/main/java/org/apache/polaris/service/events/listeners/InMemoryBufferPolarisPersistenceEventListener.java
b/runtime/service/src/main/java/org/apache/polaris/service/events/listeners/InMemoryBufferPolarisPersistenceEventListener.java
index bf8d56088..8dc425ad0 100644
---
a/runtime/service/src/main/java/org/apache/polaris/service/events/listeners/InMemoryBufferPolarisPersistenceEventListener.java
+++
b/runtime/service/src/main/java/org/apache/polaris/service/events/listeners/InMemoryBufferPolarisPersistenceEventListener.java
@@ -20,6 +20,7 @@ package org.apache.polaris.service.events.listeners;
import com.google.common.annotations.VisibleForTesting;
import io.smallrye.common.annotation.Identifier;
+import jakarta.annotation.Nullable;
import jakarta.annotation.PostConstruct;
import jakarta.annotation.PreDestroy;
import jakarta.enterprise.context.ApplicationScoped;
@@ -124,6 +125,7 @@ public class InMemoryBufferPolarisPersistenceEventListener
extends PolarisPersis
}
}
+ @Nullable
@Override
String getRequestId() {
if (containerRequestContext != null &&
containerRequestContext.hasProperty(REQUEST_ID_KEY)) {
diff --git
a/runtime/service/src/main/java/org/apache/polaris/service/events/listeners/PolarisPersistenceEventListener.java
b/runtime/service/src/main/java/org/apache/polaris/service/events/listeners/PolarisPersistenceEventListener.java
index d31beb45e..4b30e8fa3 100644
---
a/runtime/service/src/main/java/org/apache/polaris/service/events/listeners/PolarisPersistenceEventListener.java
+++
b/runtime/service/src/main/java/org/apache/polaris/service/events/listeners/PolarisPersistenceEventListener.java
@@ -19,6 +19,7 @@
package org.apache.polaris.service.events.listeners;
+import jakarta.annotation.Nullable;
import java.util.Map;
import org.apache.iceberg.TableMetadataParser;
import org.apache.polaris.core.entity.PolarisEvent;
@@ -111,10 +112,11 @@ public abstract class PolarisPersistenceEventListener
extends PolarisEventListen
processEvent(polarisEvent);
}
- protected record ContextSpecificInformation(long timestamp, String
principalName) {}
+ protected record ContextSpecificInformation(long timestamp, @Nullable String
principalName) {}
abstract ContextSpecificInformation getContextSpecificInformation();
+ @Nullable
abstract String getRequestId();
abstract void processEvent(PolarisEvent event);