apache / apache/pulsar-client-node

Improve Timing of Promise "then"

オープン
#19 コメント 0 件 リアクション 0 件 担当者 0 名 GitHub で見る
triage/week-16
主要言語
C++
スター
164
フォーク
98
PR マージ指標
30日以内にマージされた PR はありません

説明

Currently, To measure latency of sending messages, asynchronous processing using Nodejs [Promise](https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/Promise) like following code:

```
const results = [];
for (let mi = 0; mi < numOfMessages; mi += 1) {
const startSendTimeMilliSeconds = performance.now();
results.push(producer.send({
data: message,
}).then(() => {
// add latency
histogram.recordValue((performance.now() - startSendTimeMilliSeconds));
}));
}
await Promise.all(results); // wait until all messages are sent.
```
https://github.com/apache/pulsar-client-node/blob/master/perf/perf_producer.js#L88-L98

This code creates histogram about latency of sending messages.
However, all `then()` of `Promise` in `results` start after `await Promise.all(results)`.
So, We cannot get accurate histogram.

コントリビューションガイド

このリポジトリのコントリビューションガイドは索引されていません

調査の方向性

perf/perf_producer.js の88〜98行あたりから始め、producer.send() の promise と Promise.all() がどのように使われているかを確認します。各 then() コールバックが Promise.all() に対していつ実行されるかを検証し、そのうえでレイテンシヒストグラムが実際のメッセージ送信タイミングを反映するようにし、パフォーマンススクリプトが引き続き正しく完了することを確認します。

索引モデルが issue の本文から書いたものです。

評価

技術スタック
javascript, node.js
領域
performance
issue の種類
バグ
難易度
3/5
見積もり時間
1〜2日
活発さ
停滞
明瞭さ
おおむね明確
初心者へのやさしさ
35/100

新しい issue をメールで受け取る

初心者向けの GitHub issue を短くまとめたダイジェスト。