Buffer race condition fix #102
Open
Add this suggestion to a batch that can be applied as a single commit.
This suggestion is invalid because no changes were made to the code.
Suggestions cannot be applied while the pull request is closed.
Suggestions cannot be applied while viewing a subset of changes.
Only one suggestion per line can be applied in a batch.
Add this suggestion to a batch that can be applied as a single commit.
Applying suggestions on deleted lines is not supported.
You must change the existing code in this line in order to create a valid suggestion.
Outdated suggestions cannot be applied.
This suggestion has been applied or marked resolved.
Suggestions cannot be applied from pending reviews.
Suggestions cannot be applied on multi-line comments.
Suggestions cannot be applied while the pull request is queued to merge.
Suggestion cannot be applied right now. Please check back later.
By splitting observation removal lock and further adding lock, there was broken atomicity of the update.
As a result, a simultaneously running current query could not return any value for removed observation. And this observation, once restored, was not returned as sample. After all it was an update of existing observation.
To mitigate the problem made update atomic.
Please see the log for illustration:
Despite the fact that sequence 58 was not known when we started the scan for Current values, 58 was returned as the LastSequence from GetCurrentObservations.
2025-06-06T12:49:47.2753930|Trace: [MTConnect.Servers.Http.MTConnectHttpServer] CurrentRequest: deviceKey=(null), deviceType=(null), path=(null), at=(null), interval=-1, heartbeat=10000, version=2.4, documentFormat=XML, validationLevel=0, indentOutput=True, outputComments=False, acceptEncodings=
2025-06-06T12:49:47.2753943|Information: [MTConnect.Servers.Http.MTConnectHttpServer] Handling current request as a single response (interval <= -1).
2025-06-06T12:49:47.2753968|Information: [MTConnect.Servers.Http.MTConnectHttpServer] Handling current request as a single response without deviceKey.
2025-06-06T12:49:47.2753999|Trace: [MTConnect.Agents.MTConnectAgentBroker] Streams request received
2025-06-06T12:49:47.2754433|Trace: [MTConnect.Agents.MTConnectAgentBroker] MTConnectObservationBuffer.AddCurrentObservation: Removed Existing Observation for BufferKey 20041 with Sequence 41 and Timestamp 17492069872588588, Removed: True
2025-06-06T12:49:47.2754484|Trace: [MTConnect.Agents.MTConnectAgentBroker] MTConnectObservationBuffer.GetCurrentObservations[1]: Found Current Observation for BufferKey 10001 with Sequence 1 and Timestamp 17492069872491916
2025-06-06T12:49:47.2754511|Trace: [MTConnect.Agents.MTConnectAgentBroker] MTConnectObservationBuffer.GetCurrentObservations[1]: Found Current Observation for BufferKey 10002 with Sequence 2 and Timestamp 17492069872497963
2025-06-06T12:49:47.2754521|Trace: [MTConnect.Agents.MTConnectAgentBroker] MTConnectObservationBuffer.GetCurrentObservations[1]: Found Current Observation for BufferKey 10003 with Sequence 3 and Timestamp 17492069872498734
2025-06-06T12:49:47.2754530|Trace: [MTConnect.Agents.MTConnectAgentBroker] MTConnectObservationBuffer.GetCurrentObservations[1]: Found Current Observation for BufferKey 10004 with Sequence 4 and Timestamp 17492069872499506
2025-06-06T12:49:47.2754539|Trace: [MTConnect.Agents.MTConnectAgentBroker] MTConnectObservationBuffer.GetCurrentObservations[1]: Found Current Observation for BufferKey 10005 with Sequence 5 and Timestamp 17492069872499750
2025-06-06T12:49:47.2754551|Trace: [MTConnect.Agents.MTConnectAgentBroker] MTConnectObservationBuffer.GetCurrentObservations[1]: Found Current Observation for BufferKey 10006 with Sequence 6 and Timestamp 17492069872507792
2025-06-06T12:49:47.2754560|Trace: [MTConnect.Agents.MTConnectAgentBroker] MTConnectObservationBuffer.GetCurrentObservations[1]: Found Current Observation for BufferKey 10007 with Sequence 7 and Timestamp 17492069872507792
2025-06-06T12:49:47.2754570|Trace: [MTConnect.Agents.MTConnectAgentBroker] MTConnectObservationBuffer.GetCurrentObservations[1]: Found Current Observation for BufferKey 10008 with Sequence 8 and Timestamp 17492069872507792
2025-06-06T12:49:47.2754579|Trace: [MTConnect.Agents.MTConnectAgentBroker] MTConnectObservationBuffer.GetCurrentObservations[1]: Found Current Observation for BufferKey 10009 with Sequence 9 and Timestamp 17492069872507792
2025-06-06T12:49:47.2754593|Trace: [MTConnect.Agents.MTConnectAgentBroker] MTConnectObservationBuffer.GetCurrentObservations[1]: Found Current Observation for BufferKey 10010 with Sequence 10 and Timestamp 17492069872507792
2025-06-06T12:49:47.2754605|Trace: [MTConnect.Agents.MTConnectAgentBroker] MTConnectObservationBuffer.GetCurrentObservations[1]: Found Current Observation for BufferKey 10011 with Sequence 11 and Timestamp 17492069872507792
2025-06-06T12:49:47.2754622|Trace: [MTConnect.Agents.MTConnectAgentBroker] MTConnectObservationBuffer.GetCurrentObservations[1]: Found Current Observation for BufferKey 20012 with Sequence 12 and Timestamp 17492069872588588
2025-06-06T12:49:47.2754643|Trace: [MTConnect.Agents.MTConnectAgentBroker] MTConnectObservationBuffer.GetCurrentObservations[1]: Found Current Observation for BufferKey 20013 with Sequence 13 and Timestamp 17492069872588588
2025-06-06T12:49:47.2754654|Trace: [MTConnect.Agents.MTConnectAgentBroker] MTConnectObservationBuffer.GetCurrentObservations[1]: Found Current Observation for BufferKey 20014 with Sequence 14 and Timestamp 17492069872588588
2025-06-06T12:49:47.2754666|Trace: [MTConnect.Agents.MTConnectAgentBroker] MTConnectObservationBuffer.GetCurrentObservations[1]: Found Current Observation for BufferKey 20015 with Sequence 15 and Timestamp 17492069872588588
2025-06-06T12:49:47.2754677|Trace: [MTConnect.Agents.MTConnectAgentBroker] MTConnectObservationBuffer.GetCurrentObservations[1]: Found Current Observation for BufferKey 20016 with Sequence 16 and Timestamp 17492069872588588
2025-06-06T12:49:47.2754687|Trace: [MTConnect.Agents.MTConnectAgentBroker] MTConnectObservationBuffer.GetCurrentObservations[1]: Found Current Observation for BufferKey 20017 with Sequence 17 and Timestamp 17492069872588588
2025-06-06T12:49:47.2754700|Trace: [MTConnect.Agents.MTConnectAgentBroker] MTConnectObservationBuffer.GetCurrentObservations[1]: Found Current Observation for BufferKey 20018 with Sequence 18 and Timestamp 17492069872588588
2025-06-06T12:49:47.2754710|Trace: [MTConnect.Agents.MTConnectAgentBroker] MTConnectObservationBuffer.GetCurrentObservations[1]: Found Current Observation for BufferKey 20019 with Sequence 19 and Timestamp 17492069872588588
2025-06-06T12:49:47.2754721|Trace: [MTConnect.Agents.MTConnectAgentBroker] MTConnectObservationBuffer.GetCurrentObservations[1]: Found Current Observation for BufferKey 20020 with Sequence 20 and Timestamp 17492069872588588
2025-06-06T12:49:47.2754730|Trace: [MTConnect.Agents.MTConnectAgentBroker] MTConnectObservationBuffer.GetCurrentObservations[1]: Found Current Observation for BufferKey 20021 with Sequence 21 and Timestamp 17492069872588588
2025-06-06T12:49:47.2754739|Trace: [MTConnect.Agents.MTConnectAgentBroker] MTConnectObservationBuffer.GetCurrentObservations[1]: Found Current Observation for BufferKey 20022 with Sequence 22 and Timestamp 17492069872588588
2025-06-06T12:49:47.2754747|Trace: [MTConnect.Agents.MTConnectAgentBroker] MTConnectObservationBuffer.GetCurrentObservations[1]: Found Current Observation for BufferKey 20023 with Sequence 23 and Timestamp 17492069872588588
2025-06-06T12:49:47.2754756|Trace: [MTConnect.Agents.MTConnectAgentBroker] MTConnectObservationBuffer.GetCurrentObservations[1]: Found Current Observation for BufferKey 20024 with Sequence 24 and Timestamp 17492069872588588
2025-06-06T12:49:47.2754769|Trace: [MTConnect.Agents.MTConnectAgentBroker] MTConnectObservationBuffer.GetCurrentObservations[1]: Found Current Observation for BufferKey 20025 with Sequence 25 and Timestamp 17492069872588588
2025-06-06T12:49:47.2754796|Trace: [MTConnect.Agents.MTConnectAgentBroker] MTConnectObservationBuffer.GetCurrentObservations[1]: Found Current Observation for BufferKey 20026 with Sequence 26 and Timestamp 17492069872588588
2025-06-06T12:49:47.2754805|Trace: [MTConnect.Agents.MTConnectAgentBroker] MTConnectObservationBuffer.GetCurrentObservations[1]: Found Current Observation for BufferKey 20027 with Sequence 27 and Timestamp 17492069872588588
2025-06-06T12:49:47.2754833|Trace: [MTConnect.Agents.MTConnectAgentBroker] MTConnectObservationBuffer.GetCurrentObservations[1]: Found Current Observation for BufferKey 20031 with Sequence 31 and Timestamp 17492069872588588
2025-06-06T12:49:47.2754842|Trace: [MTConnect.Agents.MTConnectAgentBroker] MTConnectObservationBuffer.GetCurrentObservations[1]: Found Current Observation for BufferKey 20032 with Sequence 32 and Timestamp 17492069872588588
2025-06-06T12:49:47.2754850|Trace: [MTConnect.Agents.MTConnectAgentBroker] MTConnectObservationBuffer.GetCurrentObservations[1]: Found Current Observation for BufferKey 20033 with Sequence 33 and Timestamp 17492069872588588
2025-06-06T12:49:47.2754865|Trace: [MTConnect.Agents.MTConnectAgentBroker] MTConnectObservationBuffer.GetCurrentObservations[1]: Found Current Observation for BufferKey 20034 with Sequence 34 and Timestamp 17492069872588588
2025-06-06T12:49:47.2754873|Trace: [MTConnect.Agents.MTConnectAgentBroker] MTConnectObservationBuffer.GetCurrentObservations[1]: Found Current Observation for BufferKey 20035 with Sequence 35 and Timestamp 17492069872588588
2025-06-06T12:49:47.2754882|Trace: [MTConnect.Agents.MTConnectAgentBroker] MTConnectObservationBuffer.GetCurrentObservations[1]: Found Current Observation for BufferKey 20036 with Sequence 36 and Timestamp 17492069872588588
2025-06-06T12:49:47.2754890|Trace: [MTConnect.Agents.MTConnectAgentBroker] MTConnectObservationBuffer.GetCurrentObservations[1]: Found Current Observation for BufferKey 20037 with Sequence 37 and Timestamp 17492069872588588
2025-06-06T12:49:47.2754899|Trace: [MTConnect.Agents.MTConnectAgentBroker] MTConnectObservationBuffer.GetCurrentObservations[1]: Found Current Observation for BufferKey 20038 with Sequence 38 and Timestamp 17492069872588588
2025-06-06T12:49:47.2754908|Trace: [MTConnect.Agents.MTConnectAgentBroker] MTConnectObservationBuffer.GetCurrentObservations[1]: Found Current Observation for BufferKey 20039 with Sequence 39 and Timestamp 17492069872588588
2025-06-06T12:49:47.2754920|Trace: [MTConnect.Agents.MTConnectAgentBroker] MTConnectObservationBuffer.GetCurrentObservations[1]: Found Current Observation for BufferKey 20040 with Sequence 40 and Timestamp 17492069872588588
2025-06-06T12:49:47.2754929|Trace: [MTConnect.Agents.MTConnectAgentBroker] MTConnectObservationBuffer.GetCurrentObservations[1]: Found Current Observation for BufferKey 20042 with Sequence 42 and Timestamp 17492069872588588
2025-06-06T12:49:47.2754938|Trace: [MTConnect.Agents.MTConnectAgentBroker] MTConnectObservationBuffer.GetCurrentObservations[1]: Found Current Observation for BufferKey 20043 with Sequence 43 and Timestamp 17492069872588588
2025-06-06T12:49:47.2754946|Trace: [MTConnect.Agents.MTConnectAgentBroker] MTConnectObservationBuffer.GetCurrentObservations[1]: Found Current Observation for BufferKey 20044 with Sequence 44 and Timestamp 17492069872588588
2025-06-06T12:49:47.2754956|Trace: [MTConnect.Agents.MTConnectAgentBroker] MTConnectObservationBuffer.GetCurrentObservations[1]: Found Current Observation for BufferKey 20045 with Sequence 45 and Timestamp 17492069872588588
2025-06-06T12:49:47.2754966|Trace: [MTConnect.Agents.MTConnectAgentBroker] MTConnectObservationBuffer.GetCurrentObservations[1]: Found Current Observation for BufferKey 20046 with Sequence 46 and Timestamp 17492069872588588
2025-06-06T12:49:47.2754975|Trace: [MTConnect.Agents.MTConnectAgentBroker] MTConnectObservationBuffer.GetCurrentObservations[1]: Found Current Observation for BufferKey 20047 with Sequence 47 and Timestamp 17492069872588588
2025-06-06T12:49:47.2754985|Trace: [MTConnect.Agents.MTConnectAgentBroker] MTConnectObservationBuffer.GetCurrentObservations[1]: Found Current Observation for BufferKey 20048 with Sequence 48 and Timestamp 17492069872588588
2025-06-06T12:49:47.2754999|Trace: [MTConnect.Agents.MTConnectAgentBroker] MTConnectObservationBuffer.GetCurrentObservations[1]: Found Current Observation for BufferKey 20049 with Sequence 49 and Timestamp 17492069872588588
2025-06-06T12:49:47.2755008|Trace: [MTConnect.Agents.MTConnectAgentBroker] MTConnectObservationBuffer.GetCurrentObservations[1]: Found Current Observation for BufferKey 20050 with Sequence 50 and Timestamp 17492069872588588
2025-06-06T12:49:47.2755020|Trace: [MTConnect.Agents.MTConnectAgentBroker] MTConnectObservationBuffer.GetCurrentObservations[1]: Found Current Observation for BufferKey 20053 with Sequence 53 and Timestamp 17492069872588588
2025-06-06T12:49:47.2755029|Trace: [MTConnect.Agents.MTConnectAgentBroker] MTConnectObservationBuffer.GetCurrentObservations[1]: Found Current Observation for BufferKey 20054 with Sequence 54 and Timestamp 17492069872588588
2025-06-06T12:49:47.2755037|Trace: [MTConnect.Agents.MTConnectAgentBroker] MTConnectObservationBuffer.GetCurrentObservations[1]: Found Current Observation for BufferKey 20055 with Sequence 55 and Timestamp 17492069872588588
2025-06-06T12:49:47.2755046|Trace: [MTConnect.Agents.MTConnectAgentBroker] MTConnectObservationBuffer.GetCurrentObservations[1]: Found Current Observation for BufferKey 20056 with Sequence 56 and Timestamp 17492069872588588
2025-06-06T12:49:47.2755055|Trace: [MTConnect.Agents.MTConnectAgentBroker] MTConnectObservationBuffer.GetCurrentObservations[1]: Found Current Observation for BufferKey 20057 with Sequence 57 and Timestamp 17492069872588588
2025-06-06T12:49:47.2755203|Trace: [MTConnect.Agents.MTConnectAgentBroker] MTConnectObservationBuffer.AddCurrentObservation: Added Current Observation for BufferKey 20041 with Sequence 58 and Timestamp 17492069872753157
2025-06-06T12:49:47.2755290|Trace: [MTConnect.Agents.MTConnectAgentBroker] MTConnectObservationBuffer.GetCurrentObservations[1]: Found 56 Current Observations for BufferKeys 10001, 10002, 10003, 10004, 10005, 10006, 10007, 10008, 10009, 10010, 10011, 20012, 20013, 20014, 20015, 20016, 20017, 20018, 20019, 20020, 20021, 20022, 20023, 20024, 20025, 20026, 20027, 20028, 20029, 20030, 20031, 20032, 20033, 20034, 20035, 20036, 20037, 20038, 20039, 20040, 20041, 20042, 20043, 20044, 20045, 20046, 20047, 20048, 20049, 20050, 20051, 20052, 20053, 20054, 20055, 20056, 20057 with FirstSequence 1, LastSequence 58, NextSequence 59, FirstObservationSequence 1, LastObservationSequence 57.
2025-06-06T12:49:47.2755473|Trace: [MTConnect.Agents.MTConnectAgentBroker] Observation added: bc14c002-4e99-446d-b8a4-7f3174f34dbb PartCountAct Result:12
2025-06-06T12:49:47.2755568|Trace: [MTConnect.Agents.MTConnectAgentBroker] MTConnectAgent:12.49.47.275549 Data item added async in agent PartCountAct:Result/12 with success.
2025-06-06T12:49:47.2755635|Trace: [MTConnect.Agents.MTConnectAgentBroker] [MTConnectAgent, 2011] 12.49.47.275562 Added data item PartCountAct to buffer with True.
2025-06-06T12:49:47.2755939|Trace: [MTConnect.Agents.MTConnectAgentBroker] Streams response sent