Project

General

Profile

調査 #4561

データポート間通信でデータが消える要因と検知方法

Added by n-miyamoto about 4 years ago. Updated about 4 years ago.

Status:
担当
Priority:
低め
Assignee:
Target version:
-
Start date:
06/21/2018
Due date:
% Done:

20%

Estimated time:

Description

安藤様、

金広です。

極稀にデータポート間の通信でデータが消えてしまう場合があるのですが、
消える要因としてどのようなケースが有りえますでしょうか。
また消えた場合にそれを知るにはどうすれば良いでしょうか。

具体的にはデータポート間の接続は以下のような設定にしています。
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を見ていますが、
反応がない状態です。

History

#1 Updated by n-miyamoto about 4 years ago

  • % Done changed from 0 to 20

バッファフルポリシーがoverwriteの場合、InPort、OutPortに関わらずON_BUFFER_OVERWRITEのコールバックが呼び出されることはありません。
金広さんが動作確認した時点でOutPort側のバッファはdo_nothingやoverwriteのポリシーに設定してもblockのポリシーで処理するバグがあったので、OutPort側はblockになっていたはずです。
InPort側がoverwriteの場合、ON_BUFFER_OVERWRITEのコールバックを呼び出さずにデータを上書きするため、一見何の異常もないにもかかわらずデータが消失する現象が発生します。

Also available in: Atom PDF