googleapis / googleapis/google-cloud-node
Cloud Tasks Client throws 4 DEADLINE_EXCEEDED
- Dominant language
- TypeScript
- Stars
- 3.2k
- Forks
- 712
- Avg merge
- 2d 3h
- Merged PRs (30d)
- 99
Description
We're using cloud tasks to enqueue jobs. This is happening for a few jobs that rely on cloud-tasks, the one i'll focus on writes somewhere between 10-25 tasks it creates by reading a file. 10-20% of the time, this job will fail because the cloud tasks client throws with `4 DEADLINE_EXCEEDED`.
I've read through the issue [here](https://github.com/googleapis/nodejs-tasks/issues/580) but it seems that was closed over a year ago now and I'm running into this issue with the latest version of cloud tasks (also ran into it before upgrading using major version 3 of the package).
#### Environment details
- google-cloud/tasks
- Deployed to Gen2 cloud function
- Node 18
- Yarn 1.22.19
#### Steps to reproduce
Below is my code I'm using to add new tasks
```
import { v2beta3 } from "@google-cloud/tasks"
const { GCP_PROJECT } = process.env
if (!GCP_PROJECT) {
throw new Error("GCP_PROJECT is required")
}
const cloudServiceAccountEmail = process.env.CLOUD_TASK_SERVICE_ACCT_EMAIL;
class CloudTasksClientWrapper {
private client: v2beta3.CloudTasksClient
constructor() {
this.client = new v2beta3.CloudTasksClient()
}
async createHttpTaskWithToken({
queueName,
payload,
url,
location = "us-central1",
}:
{
queueName: string
payload: string
url: string
location?: string
}) {
const parent = this.client.queuePath(GCP_PROJECT!, location, queueName)
const body = Buffer.from(payload).toString("base64")
const task = {
httpRequest: {
httpMethod: "POST" as const,
url,
oidcToken: {
serviceAccountEmail: cloudServiceAccountEmail,
audience: new URL(url).origin,
},
headers: {
"Content-Type": "application/json",
},
body,
},
}
// Send create task request.
const [response] = await this.client.createTask(
{ parent, task },
{ timeout: 5000 }
)
return response
}
}
export { CloudTasksClientWrapper }
```
Then I call `createHttpTaskWithToken` from various jobs, for example, after reading every 50 lines from a 1000-line csv, I'll call this function with a task to process those 50 lines.
Contributor guide
Assessment
This issue has not been assessed yet.