airqo-platform / airqo-platform/AirQo-api
Bug: NATS broker publishMessage treats synchronous publish() as a Promise
- Vorherrschende Sprache
- JavaScript
- Sterne
- 26
- Forks
- 24
- Ø Merge
- 5 Std. 36 Min.
- Gemergte PRs (30 T.)
- 81
Beschreibung
## 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
Beitragsleitfaden
Bewertung
Dieses Issue wurde noch nicht bewertet.