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

[BUG] in sample: quickstarts/taskqueues-backup-images/functions/index.js #1002

Open
ddave09 opened this issue Jun 24, 2022 · 1 comment
Open

Comments

@ddave09
Copy link

ddave09 commented Jun 24, 2022

Which sample has a bug?

quickstarts/taskqueues-backup-images/functions/index.js

I have created my own queue with minor modifications provided in the Failing Function code used section. If someone can please help resolve the issue, I would really appreciate it.

Sample name or URL where you found the bug
quickstarts/taskqueues-backup-images/functions/index.js

How to reproduce the issue

  • create an index.ts file for functions with the below-mentioend code.
  • Deploy executeOrders function to create the queue with the same name.
  • execute submitOrder function.
  • enqueue fails with message: Unhandled error FirebaseFunctionsError: Queue does not exist.

Failing Function code used (if you modified the sample)

import * as functions from "firebase-functions";
import * as firebaseAdmin from "firebase-admin";
import * as firebaseFunctions from "firebase-admin/functions";
import * as serviceAccount from "../serviceAccount.json";

firebaseAdmin.initializeApp({
  credential: firebaseAdmin.credential.cert({
    projectId: serviceAccount.project_id,
    clientEmail: serviceAccount.client_email,
    privateKey: serviceAccount.private_key,
  }),
});

export const executeOrders = functions.region(
    region,
).tasks.taskQueue({
  retryConfig: {
    maxAttempts: 2,
    minBackoffSeconds: 10,
  },
  rateLimits: {
    maxConcurrentDispatches: 1,
  },
}).onDispatch(async (data) => {
  functions.logger.info(data);
});

export const submitOrder = functions.region(
    region,
).https.onCall(async (data, context) => {
  const queue = firebaseFunctions.getFunctions().taskQueue("executeOrders");

  functions.logger.info(data);

  await queue.enqueue({"orderId": 1});
});

I also have tried to pass in the app object returned from firebaseAdmin.initializeApp to firebaseFunctions.getFunctions() as below, but still the same behavior.

const firebaseAdminApp  = firebaseAdmin.initializeApp({
  credential: firebaseAdmin.credential.cert({
    projectId: serviceAccount.project_id,
    clientEmail: serviceAccount.client_email,
    privateKey: serviceAccount.private_key,
  }),
});

export const submitOrder = functions.region(
    region,
).https.onCall(async (data, context) => {
  const queue = firebaseFunctions.getFunctions(firebaseAdminApp).taskQueue("executeOrders");

  functions.logger.info(data);

  await queue.enqueue({"orderId": 1});
});

Steps to set up and reproduce

  • Env: node@16
  • Typescript
  • Deploy queue executeOrders
  • Start function emulator or without emulator (I have tried both ways but I get the same behavior.)
  • From any client call submitOrder function to enqueue a task in the executeOrders queue.
  • Function throws an error when enqueuing the task: Unhandled error FirebaseFunctionsError: Queue does not exist. even when the queue exists.

Debug output

{"severity":"ERROR","message":"Unhandled error FirebaseFunctionsError: Queue does not exist.\n    at FirebaseFunctionsError.FirebaseError [as constructor] (/Users/darshitdave/Documents/Workspace/youvest/youvest/functions/node_modules/firebase-admin/lib/utils/error.js:44:28)\n    at FirebaseFunctionsError.PrefixedFirebaseError [as constructor] (/Users/darshitdave/Documents/Workspace/youvest/youvest/functions/node_modules/firebase-admin/lib/utils/error.js:90:28)\n    at new FirebaseFunctionsError (/Users/darshitdave/Documents/Workspace/youvest/youvest/functions/node_modules/firebase-admin/lib/functions/functions-api-client-internal.js:269:28)\n    at FunctionsApiClient.toFirebaseError (/Users/darshitdave/Documents/Workspace/youvest/youvest/functions/node_modules/firebase-admin/lib/functions/functions-api-client-internal.js:243:16)\n    at /Users/darshitdave/Documents/Workspace/youvest/youvest/functions/node_modules/firebase-admin/lib/functions/functions-api-client-internal.js:101:25\n    at processTicksAndRejections (node:internal/process/task_queues:96:5)\n    at async /Users/darshitdave/Documents/Workspace/youvest/youvest/functions/lib/src/index.js:182:5\n    at async /Users/darshitdave/Documents/Workspace/youvest/youvest/functions/node_modules/firebase-functions/lib/common/providers/https.js:407:26\n    at async runFunction (/usr/local/lib/node_modules/firebase-tools/lib/emulator/functionsEmulatorRuntime.js:564:9)\n    at async runHTTPS (/usr/local/lib/node_modules/firebase-tools/lib/emulator/functionsEmulatorRuntime.js:590:5) {\n  errorInfo: {\n    code: 'functions/failed-precondition',\n    message: 'Queue does not exist.'\n  },\n  codePrefix: 'functions'\n}"}

Screenshots

Expected behavior

The task should be enqueued under executeOrders queue.

Actual behavior

Error message: Unhandled error FirebaseFunctionsError: Queue does not exist. even when the queue executeOrders exists.

@craeft-io
Copy link

For me I can get around the error with specifying the location of the queue by replacing
.taskQueue("executeOrders");
with
.taskQueue("location/us-east1/functions/executeOrders");

Unfortunately with this working I get the error Request is missing body.

I got it to work the same way as described here by creating a separate onRequest function
#1105

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

2 participants