Known regression: Activity input fails to deserialize when the input is an array
bachuv opened this issue · 1 comments
Known regression notice: Activity input fails to deserialize when the input is an array
Error description:
We have just noticed that users are experiencing errors in Durable Functions JS apps with an exception that includes Exception binding parameter '<your activity parameter name>'
and Unexpected character encountered while parsing value
.
This issue started with Durable Functions version v2.13.0. The following extension bundles are affected:
- v4 bundles: 4.13.1
- v3 bundles: 3.30.1+
Repro:
Use an array type as an input to your activity function.
const { app } = require('@azure/functions');
const df = require('durable-functions');
const activityName = 'durableHello1';
df.app.orchestration('durableHello1Orchestrator', function* (context) {
const outputs = [];
outputs.push(yield context.df.callActivity(activityName, ["Tokyo", "Seattle", "Cairo"]));
return outputs;
});
df.app.activity(activityName, {
handler: (input) => {
return `Hello, ${input}`;
},
});
app.http('durableHello1HttpStart', {
route: 'orchestrators/{orchestratorName}',
extraInputs: [df.input.durableClient()],
handler: async (request, context) => {
const client = df.getClient(context);
const body = await request.text();
const instanceId = await client.startNew(request.params.orchestratorName, { input: body });
context.log(`Started orchestration with ID = '${instanceId}'.`);
return client.createCheckStatusResponse(request, instanceId);
},
});
Incoming solution:
We're issuing a hotfix extension bundles release that will automatically fix any apps that are hitting the issue described here. It will take a few days to roll out.
Immediate Mitigation Options:
There are two ways to fix this issue: Pinning the extension bundles version or manually installing the working Durable Functions extension version.
- Pinning the extension bundles version - Update the extension bundles version in host.json to use v3.29.0 or v4.12.0.
Example:
"extensionBundle": {
"id": "Microsoft.Azure.Functions.ExtensionBundle",
"version": "[4.*, 4.13.0)"
},
- Manually install Durable Functions extension version v2.12.0 or lower by following these instructions.
"version": "[4.*, 4.13.0)"
This doesn't look right for two reasons:
- Syntax error with a ) vs ]
- Doesn't match the versions listed in the ticket
v3.29.0 or v4.12.0.
Is that actually right?
Edit: Found the definition here:
https://learn.microsoft.com/en-us/azure/azure-functions/functions-host-json#extensionbundle
Apparently that trailing ) is correct, and means "up to but not including".
Workaround. Updated my code to pre-serialize the data to a string.
await client.startNew(orchestratorName, { input: options });
became
await client.startNew(orchestratorName, { input: JSON.stringify(options) });
and
const runBot: ActivityHandler = async (input: MyType): Promise<MyType> => {
became
const runBot: ActivityHandler = async (inputJson: string): Promise<string> => {