airqo-platform / airqo-platform/AirQo-api
Bug: NATS broker publishMessage treats synchronous publish() as a Promise
- Ngôn ngữ chính
- JavaScript
- Star
- 26
- Fork
- 24
- Merge trung bình
- 5 giờ 36 phút
- Pull request đã merge (30 ngày)
- 81
Mô tả
## 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
Hướng dẫn đóng góp
Đánh giá
Issue này chưa được đánh giá.