プロジェクト

全般

プロフィール

調査 #4561

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

n-miyamotoほぼ6年前に追加. ほぼ6年前に更新.

ステータス:
担当
優先度:
低め
担当者:
対象バージョン:
-
開始日:
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を見ていますが、
反応がない状態です。

履歴

#1 n-miyamotoほぼ6年前に更新

  • 進捗率0 から 20 に変更

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

他の形式にエクスポート: Atom PDF