Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

onTaskDispatched with retry option is not working in firebase-functions v6 #1623

Open
daniseijo opened this issue Oct 2, 2024 · 10 comments
Open

Comments

@daniseijo
Copy link

daniseijo commented Oct 2, 2024

Related issues

#1618 - Tried the solution proposed there but it did nothing

[REQUIRED] Version info

node:

v20.12.2

firebase-functions:

6.0.1

firebase-tools:

13.20.2

firebase-admin:

12.6.0

[REQUIRED] Test case

I am following this example from the docs to create a cloud task. The only thing I am changing in my project is adding an option to avoid retries. If I add this in firebase-functions v6, and launch the emulator or try to deploy, it breaks.

[REQUIRED] Steps to reproduce

  • Create a new project from scratch with firebase init. In my case, I added typescript but I think it is irrelevant.
  • Update firebase-functions in the package.json to v6.0.1
  • Add a new onTaskDispatched function to the index.ts file and add the retry option:
import { onTaskDispatched } from 'firebase-functions/v2/tasks';

export const cloudTaskTest = onTaskDispatched({ retry: false }, (task) => {
  logger.info('Task dispatched', { task });
  return Promise.resolve();
});
  • Run npm run serve or npm run deploy either way an error will show:
⬢  functions: Failed to load function definition from source: FirebaseError: Failed to parse build specification

[REQUIRED] Expected behavior

The expected behavior should be for the emulator to create the queue. This behavior is achieved in version 5.1.0 for example:

✔  tasks: Created queue with key: queue:sample-project-us-central1-cloudTaskTest
✔  functions[us-central1-cloudTaskTest]: http function initialized (http://127.0.0.1:5001/sample-project/us-central1/cloudTaskTest).

[REQUIRED] Actual behavior

From version 6.0.1, the emulator returns the error copied above:

⬢  functions: Failed to load function definition from source: FirebaseError: Failed to parse build specification

And if I try to deploy it returns:

Error: Failed to parse build specification:
- FirebaseError Unexpected key 'endpoints[cloudTaskTest].taskQueueTrigger.retry'. You may need to install a newer version of the Firebase CLI.

Were you able to successfully deploy your functions?

No, I was not able. The error message was:

Error: Failed to parse build specification:
- FirebaseError Unexpected key 'endpoints[cloudTaskTest].taskQueueTrigger.retry'. You may need to install a newer version of the Firebase CLI.
@google-oss-bot
Copy link
Collaborator

I couldn't figure out how to label this issue, so I've labeled it for a human to triage. Hang tight.

@minhdanh
Copy link

I'm having this issue too. My firebase-tools version: 13.22.1

@guillermodlpa
Copy link

guillermodlpa commented Dec 7, 2024

Me too! Firebase tools version 13.28.0

I guess doing retry: false is the same as doing retryConfig: { maxAttempts: 1 }, no? That works fine for me.

@cabljac
Copy link

cabljac commented Dec 17, 2024

Hi, thanks for providing all the info. I will raise this with the team.

@daniseijo
Copy link
Author

Hi @cabljac, Is there any news about this issue? We want to update our project to v6 but are currently blocked because of this.

@CorieW CorieW self-assigned this Feb 24, 2025
@CorieW
Copy link

CorieW commented Feb 24, 2025

By the looks of the API specification code, the retry option isn't supported for tasks. Has this worked previously in the past?

@daniseijo
Copy link
Author

We are using it for some cloud tasks in v5.0.1 together with the retryConfig object, and it is still in the types for v6.

@CorieW
Copy link

CorieW commented Feb 24, 2025

Thanks for the quick reply!

Do you know what firebase-tools version was used when deploying the cloud tasks in v5.0.1?

@CorieW CorieW added Needs: Author Feedback Issues awaiting author feedback and removed Needs: Attention labels Feb 24, 2025
@daniseijo
Copy link
Author

We are using the latest version: v13.31.2

@google-oss-bot google-oss-bot added Needs: Attention and removed Needs: Author Feedback Issues awaiting author feedback labels Feb 24, 2025
@CorieW
Copy link

CorieW commented Feb 25, 2025

Okay, yeah it does work in v5.0.1 up until (and before) v5.1.1, due to this change.

I logged the parameters that are sent to firebase-tools, and retry isn't included in v5.0.1, but is in v5.1.1 (and v6).

v5.1.1 (and v6):

{
  "platform": "gcfv2",
  "availableMemoryMb": null,
  "timeoutSeconds": null,
  "minInstances": null,
  "maxInstances": null,
  "ingressSettings": null,
  "concurrency": null,
  "serviceAccountEmail": null,
  "vpc": null,
  "labels": {},
  "taskQueueTrigger": {
    "retryConfig": {
      "maxAttempts": 1,
      "maxDoublings": null,
      "maxBackoffSeconds": null,
      "maxRetrySeconds": null,
      "minBackoffSeconds": null
    },
    "rateLimits": {
      "maxConcurrentDispatches": null,
      "maxDispatchesPerSecond": null
    },
    "retry": false
  },
  "entryPoint": "cloudTaskTest"
}

firebase-tools throws an error here, as the API specification doesn't allow the retry option with tasks.

v5.0.1 (and before):

{
  "platform": "gcfv2",
  "availableMemoryMb": null,
  "timeoutSeconds": null,
  "minInstances": null,
  "maxInstances": null,
  "ingressSettings": null,
  "concurrency": null,
  "serviceAccountEmail": null,
  "vpc": null,
  "labels": {},
  "taskQueueTrigger": {
    "retryConfig": {
      "maxAttempts": 1,
      "maxDoublings": null,
      "maxBackoffSeconds": null,
      "maxRetrySeconds": null,
      "minBackoffSeconds": null
    },
    "rateLimits": {
      "maxConcurrentDispatches": null,
      "maxDispatchesPerSecond": null
    }
  },
  "entryPoint": "cloudTaskTest"
}

firebase-tools does not throw an error here, because no retry option is passed.

It could be that retry has no function. Are you able to verify whether the retry option on your current v5.0.1 function does anything? It seems to me that retry=false could probably be replicated with retryConfig: { maxAttempts: 1 }.

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment
Projects
None yet
Development

No branches or pull requests

6 participants