googleapis / googleapis/google-cloud-node

Cloud Tasks Client throws 4 DEADLINE_EXCEEDED

Open
#4,573 5 comments 3 reactions 0 assignees View on GitHub
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

Open the contributing guide

Assessment

This issue has not been assessed yet.

Get new issues in your inbox

A short digest of beginner-friendly GitHub issues.