hi currently facing an issue with dispose msg, when backend app delete a geometry and called writer.dispose(geometry) to inform frontend to delete the geometry from the display. but however some time frontend dnt seem to receive the dispose msg, when it happened from the adm console for the geometry msg i get not_alive_no_writer. however if it was successfully received i see not_alive_dispose. any idea what happening? thanks
NOT_ALIVE_NO_WRITER indicates that a DataReader considers an instance to no longer have a "LIVING" DataWriter associated with it.
I could go into more detail here but I think this knowledge base articale covers it well.
Not sure exactly the use scenario since Admin Console was mentioned. What do you mean by "front end"? Is that a user process?
What does it mean to "happen from Admin Console"? You mention that "you" get "NOT_ALIVE_NO_WRITER", but you also say that you successfully get "NOT_ALIVE_DISPOSED". Which process gets those messages? Does the app also get both messages?
The "dispose" message is propagated on the network as a sample for the Topic. If the DataReader does not subscribe to the Topic with RELIABLE Reliability QoS setting, then it's possible that the DataReader will not receive all samples, which includes the "disposed" sample.
app A write geo msg to app B. app A also write.dispose geo msg to app B. but someime app B dnt seem to receive the dispose geo msg from app A. so to troubleshoot on app B admin console, i sub to geo msg and see not_alive_no_writer when app B din receive the dispose msg. the qos reliability is set to reliable_reliability_qos. durability is set to transient_local_durability_qos. network link is fine.
So first, I assume that the Topic that you are sending is "keyed"...has a key field...
Second, how is your application B detecting that it has received a disposed message? A disposed message will have the SampleInfo.valid field with a value of "false (0)".
yes the topic is keyed, app B has a reader callback that listen to onDataDisposed and deleted the record from database. so i can aslo verify from d database if dispose msg is received.
What programming language are you using? In any case, the DDSDataReaderListener does not have a onDataDisposed (on_data_disposed) callback. Are you directly using DDS or a wrapper around the DDS API? Are you using Connext DDS (I assume you are since you refered to RTI Admin Console)? What version?
using java jdk 11, dds rti secure 6.1.2. the callback is a wrapper around dds api.
So, I would suggest that you first confirm that your wrappe layer is or is not receiving the disposed sample from Connext DDS. Again, Connext DDS doesn't have a specific callback for disposed samples. Disposed samples would be received via the DDSDataReaderListener::on_data_available() callback.
You should probably work with whomever wrote the API layer to check to see if handles disposed samples corrrectly and make sure it's not receiving the disposed sample from DDS.