Skip to content

Commit c036ec1

Browse files
Run plugin configures *before* setting the plugins and the defaults.
1 parent 4bd410a commit c036ec1

File tree

3 files changed

+24
-56
lines changed

3 files changed

+24
-56
lines changed

temporal-sdk/src/main/java/io/temporal/client/WorkflowClientInternalImpl.java

Lines changed: 6 additions & 16 deletions
Original file line numberDiff line numberDiff line change
@@ -77,10 +77,14 @@ public static WorkflowClient newInstance(
7777
// Merge propagated plugins with client-specified plugins
7878
WorkflowClientPlugin[] mergedPlugins = mergePlugins(propagatedPlugins, options.getPlugins());
7979

80-
// Apply plugin configuration phase (forward order), then validate
80+
// Apply plugin configuration phase (forward order) on user-provided options,
81+
// so plugins see unmodified state before defaults and plugin merging
8182
WorkflowClientOptions.Builder builder = WorkflowClientOptions.newBuilder(options);
83+
for (WorkflowClientPlugin plugin : mergedPlugins) {
84+
plugin.configureWorkflowClient(builder);
85+
}
86+
// Set merged plugins after configuration, then validate
8287
builder.setPlugins(mergedPlugins);
83-
applyClientPluginConfiguration(builder, mergedPlugins);
8488
options = builder.validateAndBuildWithDefaults();
8589
workflowServiceStubs =
8690
new NamespaceInjectWorkflowServiceStubs(workflowServiceStubs, options.getNamespace());
@@ -788,20 +792,6 @@ public NexusStartWorkflowResponse startNexus(
788792
}
789793
}
790794

791-
/**
792-
* Applies workflow client plugin configuration phase. Plugins are called in forward
793-
* (registration) order to modify the client options.
794-
*/
795-
private static void applyClientPluginConfiguration(
796-
WorkflowClientOptions.Builder builder, WorkflowClientPlugin[] plugins) {
797-
if (plugins == null || plugins.length == 0) {
798-
return;
799-
}
800-
for (WorkflowClientPlugin plugin : plugins) {
801-
plugin.configureWorkflowClient(builder);
802-
}
803-
}
804-
805795
/**
806796
* Extracts WorkflowClientPlugins from service stubs plugins. Only plugins that also implement
807797
* {@link WorkflowClientPlugin} are included. This enables plugin propagation from service stubs

temporal-sdk/src/main/java/io/temporal/client/schedules/ScheduleClientImpl.java

Lines changed: 6 additions & 12 deletions
Original file line numberDiff line numberDiff line change
@@ -57,10 +57,14 @@ public static ScheduleClient newInstance(
5757
// Merge propagated plugins with schedule client-specified plugins
5858
ScheduleClientPlugin[] mergedPlugins = mergePlugins(propagatedPlugins, options.getPlugins());
5959

60-
// Apply plugin configuration phase (forward order)
60+
// Apply plugin configuration phase (forward order) on user-provided options,
61+
// so plugins see unmodified state before defaults and plugin merging
6162
ScheduleClientOptions.Builder builder = ScheduleClientOptions.newBuilder(options);
63+
for (ScheduleClientPlugin plugin : mergedPlugins) {
64+
plugin.configureScheduleClient(builder);
65+
}
66+
// Set merged plugins after configuration, then build
6267
builder.setPlugins(mergedPlugins);
63-
applyPluginConfiguration(builder, mergedPlugins);
6468
options = builder.build();
6569

6670
workflowServiceStubs =
@@ -119,16 +123,6 @@ private static ScheduleClientPlugin[] mergePlugins(
119123
return merged.toArray(new ScheduleClientPlugin[0]);
120124
}
121125

122-
private static void applyPluginConfiguration(
123-
ScheduleClientOptions.Builder builder, ScheduleClientPlugin[] plugins) {
124-
if (plugins == null) {
125-
return;
126-
}
127-
for (ScheduleClientPlugin plugin : plugins) {
128-
plugin.configureScheduleClient(builder);
129-
}
130-
}
131-
132126
private ScheduleClientCallsInterceptor initializeClientInvoker() {
133127
ScheduleClientCallsInterceptor scheduleClientInvoker =
134128
new RootScheduleClientInvoker(genericClient, options);

temporal-sdk/src/main/java/io/temporal/worker/WorkerFactory.java

Lines changed: 12 additions & 28 deletions
Original file line numberDiff line numberDiff line change
@@ -90,11 +90,18 @@ private WorkerFactory(WorkflowClient workflowClient, WorkerFactoryOptions factor
9090
// Merge propagated plugins with explicit plugins (propagated first)
9191
this.plugins = mergePlugins(propagatedPlugins, explicitPlugins);
9292

93-
// Apply plugin configuration to factory options (forward order)
94-
factoryOptions = applyPluginConfiguration(factoryOptions, this.plugins);
95-
96-
this.factoryOptions =
97-
WorkerFactoryOptions.newBuilder(factoryOptions).validateAndBuildWithDefaults();
93+
// Apply plugin configuration to factory options (forward order) on user-provided options,
94+
// so plugins see unmodified state before defaults and plugin merging
95+
WorkerFactoryOptions.Builder factoryOptionsBuilder =
96+
factoryOptions == null
97+
? WorkerFactoryOptions.newBuilder()
98+
: WorkerFactoryOptions.newBuilder(factoryOptions);
99+
for (WorkerPlugin plugin : this.plugins) {
100+
plugin.configureWorkerFactory(factoryOptionsBuilder);
101+
}
102+
// Set merged plugins after configuration, then validate
103+
factoryOptionsBuilder.setPlugins(this.plugins.toArray(new WorkerPlugin[0]));
104+
this.factoryOptions = factoryOptionsBuilder.validateAndBuildWithDefaults();
98105

99106
this.metricsScope =
100107
this.workflowClient
@@ -554,29 +561,6 @@ private static List<WorkerPlugin> mergePlugins(
554561
return Collections.unmodifiableList(merged);
555562
}
556563

557-
/**
558-
* Applies plugin configuration to worker factory options. Plugins are called in forward
559-
* (registration) order. The merged plugins are set on the builder so plugins can see the complete
560-
* list if they inspect the builder.
561-
*/
562-
private static WorkerFactoryOptions applyPluginConfiguration(
563-
WorkerFactoryOptions options, List<WorkerPlugin> plugins) {
564-
WorkerFactoryOptions.Builder builder =
565-
options == null
566-
? WorkerFactoryOptions.newBuilder()
567-
: WorkerFactoryOptions.newBuilder(options);
568-
569-
// Set the merged plugins on the builder so plugins see the complete list
570-
builder.setPlugins(plugins.toArray(new WorkerPlugin[0]));
571-
572-
if (plugins != null) {
573-
for (WorkerPlugin plugin : plugins) {
574-
plugin.configureWorkerFactory(builder);
575-
}
576-
}
577-
return builder.build();
578-
}
579-
580564
/**
581565
* Applies plugin configuration to worker options. Plugins are called in forward (registration)
582566
* order.

0 commit comments

Comments
 (0)