googleapis / googleapis/google-cloud-node

Cloud Tasks Client throws 4 DEADLINE_EXCEEDED

Aperta
#4,573 5 commenti 3 reazioni 0 assegnatari Vedi su GitHub
Lingua principale
TypeScript
Stelle
3.2k
Fork
712
Merge medio
2g 9h
PR unite (30g)
104

Descrizione

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.

Guida per i contributori

Apri la guida per i contributori

Direzione di ricerca

Inizia con la riproduzione fornita di CloudTasksClientWrapper.createHttpTaskWithToken e analizza la chiamata a createTask, incluso il suo timeout di 5 secondi, con Node 18 e nell’ambiente Gen2 descritto. Riproduci l’errore intermittente DEADLINE_EXCEEDED durante la creazione di più task, quindi determina il comportamento rilevante del client e documenta una risoluzione verificabile o un test di regressione.

Scritto dal modello di indicizzazione a partire dal testo della issue.

Valutazione

Stack tecnologico
google-cloud, node.js, typescript
Ambito
api, backend, cloud
Tipo di issue
Bug
Difficoltà
4/5
Tempo stimato
3-5 giorni
Stato di attività
Ferma
Chiarezza
Da chiarire
Idoneità per principianti
35/100

Ricevi le nuove issue nella tua casella

Un breve riepilogo di issue GitHub adatte ai principianti.