Skip to content

Commit febe4e8

Browse files
authored
Copy RealmId when passing it to TaskExecutorImpl (#879)
Realm id is a request-scoped component, so we need to copy it to ensure it is available when the task is executed, even if the original realm id is no longer available because the request has completed.
1 parent 8be38d0 commit febe4e8

File tree

2 files changed

+8
-1
lines changed

2 files changed

+8
-1
lines changed

polaris-core/src/main/java/org/apache/polaris/core/context/RealmId.java

Lines changed: 4 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -37,6 +37,10 @@ static RealmId newRealmId(String id) {
3737
return ImmutableRealmId.of(id);
3838
}
3939

40+
static RealmId copyOf(RealmId realmId) {
41+
return ImmutableRealmId.copyOf(realmId);
42+
}
43+
4044
@Value.Parameter
4145
@JsonValue
4246
String id();

service/common/src/main/java/org/apache/polaris/service/task/TaskExecutorImpl.java

Lines changed: 4 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -97,7 +97,10 @@ public void addTaskHandler(TaskHandler taskHandler) {
9797
*/
9898
@Override
9999
public void addTaskHandlerContext(long taskEntityId, RealmId realmId) {
100-
tryHandleTask(taskEntityId, realmId, null, 1);
100+
// Realm id is a request-scoped component, so we need to copy it to ensure it is available when
101+
// the task is executed, even if the original realm id is no longer available because the
102+
// request has completed.
103+
tryHandleTask(taskEntityId, RealmId.copyOf(realmId), null, 1);
101104
}
102105

103106
private @Nonnull CompletableFuture<Void> tryHandleTask(

0 commit comments

Comments
 (0)