Azure / azure-functions-durable-extension

Durable Task Framework extension for Azure Functions
MIT License
711 stars 263 forks source link

Known regression: Activity input fails to deserialize when the input is an array #2742

Open bachuv opened 4 months ago

bachuv commented 4 months ago

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 Out of Process apps that use JavaScript, Python, and PowerShell. They are seeing 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:

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.

1) 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)"
  },

2) Manually install Durable Functions extension version v2.12.0 or lower by following these instructions.

arjunkomath commented 4 months ago

can confirm extensionBundle version 3.29.0 works 👍

https://github.com/Azure/azure-functions-extension-bundles/releases/tag/3.29.0