操作
調査 #4561
未完了データポート間通信でデータが消える要因と検知方法
開始日:
2018/06/21
期日:
進捗率:
20%
予定工数:
説明
安藤様、 金広です。 極稀にデータポート間の通信でデータが消えてしまう場合があるのですが、 消える要因としてどのようなケースが有りえますでしょうか。 また消えた場合にそれを知るにはどうすれば良いでしょうか。 具体的にはデータポート間の接続は以下のような設定にしています。 subscription type: new push policy: all buffer length: 20 なお、 出力データポートに、ON_BUFFER_FULL, ON_BUFFER_WRITE_TIMEOUT, ON_BUFFER_OVERWRITE, ON_RECEIVER_FULL, ON_RECEIVER_TIMEOUTの リスナを設定していますが、これらは検知されていません。
金広様 安藤です データが消える場合としては、 ・OutPort側のリングバッファでの上書き ・InPort側ののリングバッファでの上書き 今回は、OutPortのON_BUFFER_OVERWRITEが検出されない ということなので、InPort側の ON_BUFFER_OVERWRITEの可能性が考えられます。
安藤様、 書き忘れてましたが、入力データポートでも、ON_BUFFER_FULL, ON_BUFFER_WRITE_TIMEOUT, ON_BUFFER_OVERWRITE, ON_RECEIVER_FULL, ON_RECEIVER_TIMEOUTを見ていますが、 反応がない状態です。
n-miyamoto さんが6年以上前に更新
- 進捗率 を 0 から 20 に変更
バッファフルポリシーがoverwriteの場合、InPort、OutPortに関わらずON_BUFFER_OVERWRITEのコールバックが呼び出されることはありません。
金広さんが動作確認した時点でOutPort側のバッファはdo_nothingやoverwriteのポリシーに設定してもblockのポリシーで処理するバグがあったので、OutPort側はblockになっていたはずです。
InPort側がoverwriteの場合、ON_BUFFER_OVERWRITEのコールバックを呼び出さずにデータを上書きするため、一見何の異常もないにもかかわらずデータが消失する現象が発生します。
操作