|
3 | 3 |
|
4 | 4 | using System.Text.Json; |
5 | 5 | using Microsoft.DurableTask.Client; |
| 6 | +using Microsoft.DurableTask; |
6 | 7 | using Microsoft.DurableTask.Converters; |
7 | 8 | using Microsoft.DurableTask.Worker; |
8 | 9 | using Microsoft.Extensions.DependencyInjection; |
@@ -32,26 +33,20 @@ public async Task LargeOrchestrationInputAndOutputAndCustomStatus() |
32 | 33 | return Task.FromResult(input + input); |
33 | 34 | })); |
34 | 35 |
|
35 | | - // Enable externalization on the worker |
36 | | - worker.UseExternalizedPayloads(opts => |
37 | | - { |
38 | | - opts.ExternalizeThresholdBytes = 1024; // small threshold to force externalization for test data |
39 | | - opts.ContainerName = "test"; |
40 | | - opts.ConnectionString = "UseDevelopmentStorage=true"; |
41 | | - }); |
| 36 | + worker.UseExternalizedPayloads(); |
42 | 37 |
|
43 | | - // Override store with in-memory test double |
44 | 38 | worker.Services.AddSingleton<IPayloadStore>(fakeStore); |
45 | 39 | }, |
46 | 40 | client => |
47 | 41 | { |
48 | | - // Enable externalization on the client |
49 | | - client.UseExternalizedPayloads(opts => |
| 42 | + // Enable externalization on the client (shared store configuration) |
| 43 | + client.Services.AddExternalizedPayloadStore(opts => |
50 | 44 | { |
51 | 45 | opts.ExternalizeThresholdBytes = 1024; |
52 | 46 | opts.ContainerName = "test"; |
53 | 47 | opts.ConnectionString = "UseDevelopmentStorage=true"; |
54 | 48 | }); |
| 49 | + client.UseExternalizedPayloads(); |
55 | 50 |
|
56 | 51 | // Override store with in-memory test double |
57 | 52 | client.Services.AddSingleton<IPayloadStore>(fakeStore); |
@@ -114,23 +109,12 @@ public async Task HistoryStreaming_ResolvesPayloads() |
114 | 109 | return largeOutput; |
115 | 110 | })); |
116 | 111 |
|
117 | | - worker.UseExternalizedPayloads(opts => |
118 | | - { |
119 | | - opts.ExternalizeThresholdBytes = 1024; |
120 | | - opts.ContainerName = "test"; |
121 | | - opts.ConnectionString = "UseDevelopmentStorage=true"; |
122 | | - }); |
| 112 | + worker.UseExternalizedPayloads(); |
123 | 113 | worker.Services.AddSingleton<IPayloadStore>(store); |
124 | 114 | }, |
125 | 115 | client => |
126 | 116 | { |
127 | | - // Enable client to resolve outputs on query |
128 | | - client.UseExternalizedPayloads(opts => |
129 | | - { |
130 | | - opts.ExternalizeThresholdBytes = 1024; |
131 | | - opts.ContainerName = "test"; |
132 | | - opts.ConnectionString = "UseDevelopmentStorage=true"; |
133 | | - }); |
| 117 | + client.UseExternalizedPayloads(); |
134 | 118 | client.Services.AddSingleton<IPayloadStore>(store); |
135 | 119 | }); |
136 | 120 |
|
@@ -171,12 +155,7 @@ public async Task SuspendAndResume_Reason_IsExternalizedByClient() |
171 | 155 | client => |
172 | 156 | { |
173 | 157 | // Enable externalization on the client and use the in-memory store to track uploads |
174 | | - client.UseExternalizedPayloads(opts => |
175 | | - { |
176 | | - opts.ExternalizeThresholdBytes = 1024; // 1KB threshold to force externalization |
177 | | - opts.ContainerName = "test"; |
178 | | - opts.ConnectionString = "UseDevelopmentStorage=true"; |
179 | | - }); |
| 158 | + client.UseExternalizedPayloads(); |
180 | 159 | client.Services.AddSingleton<IPayloadStore>(clientStore); |
181 | 160 | }); |
182 | 161 |
|
@@ -253,22 +232,12 @@ public async Task LargeTerminateWithPayload() |
253 | 232 | return null; |
254 | 233 | })); |
255 | 234 |
|
256 | | - worker.UseExternalizedPayloads(opts => |
257 | | - { |
258 | | - opts.ExternalizeThresholdBytes = 1024; |
259 | | - opts.ContainerName = "test"; |
260 | | - opts.ConnectionString = "UseDevelopmentStorage=true"; |
261 | | - }); |
| 235 | + worker.UseExternalizedPayloads(); |
262 | 236 | worker.Services.AddSingleton<IPayloadStore>(store); |
263 | 237 | }, |
264 | 238 | client => |
265 | 239 | { |
266 | | - client.UseExternalizedPayloads(opts => |
267 | | - { |
268 | | - opts.ExternalizeThresholdBytes = 1024; |
269 | | - opts.ContainerName = "test"; |
270 | | - opts.ConnectionString = "UseDevelopmentStorage=true"; |
271 | | - }); |
| 240 | + client.UseExternalizedPayloads(); |
272 | 241 | client.Services.AddSingleton<IPayloadStore>(store); |
273 | 242 | }); |
274 | 243 |
|
@@ -318,22 +287,12 @@ public async Task LargeContinueAsNewAndCustomStatus() |
318 | 287 | } |
319 | 288 | })); |
320 | 289 |
|
321 | | - worker.UseExternalizedPayloads(opts => |
322 | | - { |
323 | | - opts.ExternalizeThresholdBytes = 1024; |
324 | | - opts.ContainerName = "test"; |
325 | | - opts.ConnectionString = "UseDevelopmentStorage=true"; |
326 | | - }); |
| 290 | + worker.UseExternalizedPayloads(); |
327 | 291 | worker.Services.AddSingleton<IPayloadStore>(workerStore); |
328 | 292 | }, |
329 | 293 | client => |
330 | 294 | { |
331 | | - client.UseExternalizedPayloads(opts => |
332 | | - { |
333 | | - opts.ExternalizeThresholdBytes = 1024; |
334 | | - opts.ContainerName = "test"; |
335 | | - opts.ConnectionString = "UseDevelopmentStorage=true"; |
336 | | - }); |
| 295 | + client.UseExternalizedPayloads(); |
337 | 296 | client.Services.AddSingleton<IPayloadStore>(workerStore); |
338 | 297 | }); |
339 | 298 |
|
@@ -376,22 +335,12 @@ public async Task LargeSubOrchestrationAndActivityOutput() |
376 | 335 | .AddOrchestratorFunc<string, string>(child, (ctx, input) => Task.FromResult(input)) |
377 | 336 | .AddActivityFunc<string>(activity, (ctx) => Task.FromResult(largeActivityOutput))); |
378 | 337 |
|
379 | | - worker.UseExternalizedPayloads(opts => |
380 | | - { |
381 | | - opts.ExternalizeThresholdBytes = 1024; |
382 | | - opts.ContainerName = "test"; |
383 | | - opts.ConnectionString = "UseDevelopmentStorage=true"; |
384 | | - }); |
| 338 | + worker.UseExternalizedPayloads(); |
385 | 339 | worker.Services.AddSingleton<IPayloadStore>(workerStore); |
386 | 340 | }, |
387 | 341 | client => |
388 | 342 | { |
389 | | - client.UseExternalizedPayloads(opts => |
390 | | - { |
391 | | - opts.ExternalizeThresholdBytes = 1024; |
392 | | - opts.ContainerName = "test"; |
393 | | - opts.ConnectionString = "UseDevelopmentStorage=true"; |
394 | | - }); |
| 343 | + client.UseExternalizedPayloads(); |
395 | 344 | client.Services.AddSingleton<IPayloadStore>(workerStore); |
396 | 345 | }); |
397 | 346 |
|
@@ -425,22 +374,12 @@ public async Task LargeQueryFetchInputsAndOutputs() |
425 | 374 | orch, |
426 | 375 | (ctx, input) => Task.FromResult(largeOut))); |
427 | 376 |
|
428 | | - worker.UseExternalizedPayloads(opts => |
429 | | - { |
430 | | - opts.ExternalizeThresholdBytes = 1024; |
431 | | - opts.ContainerName = "test"; |
432 | | - opts.ConnectionString = "UseDevelopmentStorage=true"; |
433 | | - }); |
| 377 | + worker.UseExternalizedPayloads(); |
434 | 378 | worker.Services.AddSingleton<IPayloadStore>(workerStore); |
435 | 379 | }, |
436 | 380 | client => |
437 | 381 | { |
438 | | - client.UseExternalizedPayloads(opts => |
439 | | - { |
440 | | - opts.ExternalizeThresholdBytes = 1024; |
441 | | - opts.ContainerName = "test"; |
442 | | - opts.ConnectionString = "UseDevelopmentStorage=true"; |
443 | | - }); |
| 382 | + client.UseExternalizedPayloads(); |
444 | 383 | client.Services.AddSingleton<IPayloadStore>(workerStore); |
445 | 384 | }); |
446 | 385 |
|
@@ -484,12 +423,7 @@ public async Task LargeActivityInputAndOutput() |
484 | 423 | (ctx, _) => ctx.CallActivityAsync<string>(activityName, largeParam)) |
485 | 424 | .AddActivityFunc<string, string>(activityName, (ctx, input) => input + input)); |
486 | 425 |
|
487 | | - worker.UseExternalizedPayloads(opts => |
488 | | - { |
489 | | - opts.ExternalizeThresholdBytes = 1024; // force externalization for activity input |
490 | | - opts.ContainerName = "test"; |
491 | | - opts.ConnectionString = "UseDevelopmentStorage=true"; |
492 | | - }); |
| 426 | + worker.UseExternalizedPayloads(); |
493 | 427 | worker.Services.AddSingleton<IPayloadStore>(workerStore); |
494 | 428 | }, |
495 | 429 | client => { /* client not needed for externalization path here */ }); |
@@ -529,22 +463,12 @@ public async Task NoLargePayloads() |
529 | 463 | orchestratorName, |
530 | 464 | (ctx, input) => Task.FromResult(input))); |
531 | 465 |
|
532 | | - worker.UseExternalizedPayloads(opts => |
533 | | - { |
534 | | - opts.ExternalizeThresholdBytes = 2 * 1024 * 1024; // 2MB, higher than payload |
535 | | - opts.ContainerName = "test"; |
536 | | - opts.ConnectionString = "UseDevelopmentStorage=true"; |
537 | | - }); |
| 466 | + worker.UseExternalizedPayloads(); |
538 | 467 | worker.Services.AddSingleton<IPayloadStore>(workerStore); |
539 | 468 | }, |
540 | 469 | client => |
541 | 470 | { |
542 | | - client.UseExternalizedPayloads(opts => |
543 | | - { |
544 | | - opts.ExternalizeThresholdBytes = 2 * 1024 * 1024; // 2MB, higher than payload |
545 | | - opts.ContainerName = "test"; |
546 | | - opts.ConnectionString = "UseDevelopmentStorage=true"; |
547 | | - }); |
| 471 | + client.UseExternalizedPayloads(); |
548 | 472 | client.Services.AddSingleton<IPayloadStore>(clientStore); |
549 | 473 | }); |
550 | 474 |
|
@@ -578,22 +502,12 @@ public async Task LargeExternalEvent() |
578 | 502 | orchestratorName, |
579 | 503 | async ctx => await ctx.WaitForExternalEvent<string>(EventName))); |
580 | 504 |
|
581 | | - worker.UseExternalizedPayloads(opts => |
582 | | - { |
583 | | - opts.ExternalizeThresholdBytes = 1024; // force externalization |
584 | | - opts.ContainerName = "test"; |
585 | | - opts.ConnectionString = "UseDevelopmentStorage=true"; |
586 | | - }); |
| 505 | + worker.UseExternalizedPayloads(); |
587 | 506 | worker.Services.AddSingleton<IPayloadStore>(fakeStore); |
588 | 507 | }, |
589 | 508 | client => |
590 | 509 | { |
591 | | - client.UseExternalizedPayloads(opts => |
592 | | - { |
593 | | - opts.ExternalizeThresholdBytes = 1024; // force externalization |
594 | | - opts.ContainerName = "test"; |
595 | | - opts.ConnectionString = "UseDevelopmentStorage=true"; |
596 | | - }); |
| 510 | + client.UseExternalizedPayloads(); |
597 | 511 | client.Services.AddSingleton<IPayloadStore>(fakeStore); |
598 | 512 | }); |
599 | 513 |
|
|
0 commit comments