airqo-platform / airqo-platform/AirQo-api

Bug: NATS broker publishMessage treats synchronous publish() as a Promise

Aperta
#4,718 0 commenti 0 reazioni 1 assegnatario Rivendicata da @Baalmart Vedi su GitHub
Lingua principale
JavaScript
Stelle
26
Fork
24
Merge medio
5h 36m
PR unite (30g)
81

Descrizione

## Issue Description

In the NATS broker implementation, there's a critical bug in the `publishMessage` method where `client.publish()` is treated as a Promise in a `Promise.race()` construction.

**File:** `src/auth-service/utils/messaging/brokers/nats-broker.js`

**Problem:**
The `@nats/js`'s `publish()` method returns `void` (not a Promise). When treating it as a promise with `Promise.race()`, `publishPromise` resolves immediately as `undefined`, and the timeout branch will always win – raising a false "timed-out" error on every call.

**Impact:**
This will mark the broker as unhealthy and trigger unnecessary fail-over to other message brokers, degrading performance and potentially causing message delivery issues.

## Proposed Solutions

Either:

1. Await the *flush* operation instead:
```js
this.client.publish(topic, payloadBuf);
await this.client.flush();
```

2. Remove the `Promise.race` and rely on the library's internal back-pressure.

## References
- Discovered in PR review: https://github.com/airqo-platform/AirQo-api/pull/4716#discussion_r2051508781

Guida per i contributori

Apri la guida per i contributori

Valutazione

Questa issue non è ancora stata valutata.

Ricevi le nuove issue nella tua casella

Un breve riepilogo di issue GitHub adatte ai principianti.