View Issue Details

IDProjectCategoryView StatusLast Update
000096010000-004: Servicespublic2012-02-09 22:46
ReporterWolfgang Mahnke Assigned ToMatthias Damm  
PrioritynormalSeveritymajorReproducibilityalways
Status closedResolutionfixed 
Product Version1.01 
Fixed in Version1.02 
Summary0000960: Publish and reconnect problem
Description

When client and server are losing the connection the client reestablishes the connection. There are cases when the connection gets lost when the server has sent a Publish response but the client has not received it. Then the client needs to call a Republish. The client can identify that a Publish message was lost as soon as he gets the next Publish response from the server. Typically this will happen soon after reconnect when the server has new data to publish. However, if the server does not have new data to publish it waits until the keep alive is send. That means that in this case the client identifies the lost publish after the keep-alive was send from the server. This is not perfect, especially if a low keep-alive frequency is chosen.

Potential solutions:

  • The server should send the first publish after reconnect directly without waiting for the keep-alive.
  • The client requests a Republish of the potential next publish message. This might lead to redundant data on the wire if the publish was not lost and the server is sending the data anyhow in the normal publish.
  • ???
TagsNo tags attached.
Commit Version
Fix Due Date

Relationships

related to 0001826 closedPaul Hunkar 10000-007: Profiles Resolution to Mantis issue 960 causes significant increase in RAM requirements for Embedded Datachange Subscription Server Facet 

Activities

Claude Lafond

2010-02-05 13:23

reporter   ~0001522

If you force the client to ask for republish, this will cause other issue with long lasting disconnection.
1) The server has no obligation to keep unacknowledge item forever, so you can miss the oldest items
2) Some historians do not accept inserting data older than the current one, so if the client needs to ask for Republish, he will need creative fifo to stack items he just receives, then ask for republish of "untransmitted items", wait for them (other entries may arrive during that time), place these items in order and finally send all items in the right order to the historian.

One possible solution is to force the server to assume that, after a disconnection, the "unacknowledge" items as been lost so they need to be retransmitted in the right order. The only issue is if the SourceTimestamp is not transmitted, the client will not be able to identify which data as already been received. Following this rule, the client may use the timestamp to identify already received items, which is quite simple.

user2

2010-03-30 18:05

  ~0001622

We agreed that the worst case in a reconnect scenario the client may not detect a missting message for 2X the keep alive interval (instead of the normal one). Also the client may want to temporarily set a shorter keep alive interval after a reconnect to remedy this. To do this an SDK that does auto reconnect needs to notify the client that a reconnect occured. This scenario should be described in the spec.

Also we need to make this normative change to Clause 5.13.1.1 (changed one interval to three intervals)

i) Subscriptions maintain a retransmission queue of sent NotificationMessages. NotificationMessages are retained in this queue until they are acknowledged or until they have been in the queue for a minimum of three keep-alive intervals. Clients are required to acknowledge NotificationMessages as they are received.

Matthias Damm

2011-03-16 21:38

developer   ~0002434

UA WG meeting March 16

  • Change minimum resend queue to "min publish request queue size" or to "three times keep-alive interval"
  • Explain problem and possible clien side solutions in Republish

Matthias Damm

2011-03-18 02:30

developer   ~0002503

Updated the minimum requirement for the retransmition queue of sent NotificationMessages from one to three keep-alive intervals but allowed the server to restrict the size of the queue to two times the minimum number of Publish requests per Session.
Added a description of the issues and strategies regarding reconnect and Republish.

Change is part of the draft version "OPC UA Part 4 - Services Draft 1.02.03 Body.doc"

Randy Armstrong

2011-03-23 06:55

administrator   ~0002526

Reviewed in telco on March 23, 2011
The final changes are included in the document revision OPC UA Part 4 - Services 1.02.04 Draft.doc

Matthias Damm

2011-03-23 09:28

developer   ~0002527

This change was not reviewed yet.

Matthias Damm

2011-05-23 16:05

developer   ~0002726

Need to enhance reconnect description in Republish.

Proposed change:
Recommend to call Republish until an error is returned for the next expected sequence numbers before calling Publish after reconnect.

Matthias Damm

2011-09-06 21:39

developer   ~0002915

Added new chapter 6.4 Re-establishing connections.
Moved the description about Republish and reconnect handling to this section.

Changed in document version OPC UA Part 4 - Services 1.02.06 Draft.doc

Randy Armstrong

2011-09-15 16:30

administrator   ~0002998

Discussed at F2F

Paul Hunkar

2012-01-11 15:17

developer   ~0003157

Need to add sentance indicating what to do if repiblish misses something and also that a profile may change the minimum count

Matthias Damm

2012-01-11 15:44

developer   ~0003166

Updated Text:

Added text to 5.13.1 Subscription model -> 5.13.1.1 -> (i)
The minimum size of the retransmition queue may be changed by a Profile in Part 7.

Added text to 6.4 Re-establishing connections
If the Client detects lost sequence numbers in the Publish and is not able to get the lost NotificationMessages through Republish, the Client should read the values of all data MonitoredItems to make sure he has the latest values for all MonitoredItems.

Changed in document version OPC UA Part 4 - Services 1.02.11 Draft.doc

Jim Luth

2012-01-17 18:11

administrator   ~0003203

Reviewed and agreed to changes in telecon.

Issue History

Date Modified Username Field Change
2010-02-04 09:27 Wolfgang Mahnke New Issue
2010-02-05 13:23 Claude Lafond Note Added: 0001522
2010-03-30 18:05 user2 Note Added: 0001622
2010-03-30 18:05 user2 Status new => assigned
2010-03-30 18:05 user2 Assigned To => Matthias Damm
2011-03-16 21:38 Matthias Damm Note Added: 0002434
2011-03-18 02:30 Matthias Damm Status assigned => resolved
2011-03-18 02:30 Matthias Damm Resolution open => fixed
2011-03-18 02:30 Matthias Damm Note Added: 0002503
2011-03-23 06:55 Randy Armstrong Status resolved => closed
2011-03-23 06:55 Randy Armstrong Note Added: 0002526
2011-03-23 09:28 Matthias Damm Status closed => resolved
2011-03-23 09:28 Matthias Damm Note Added: 0002527
2011-05-23 16:05 Matthias Damm Status resolved => feedback
2011-05-23 16:05 Matthias Damm Resolution fixed => reopened
2011-05-23 16:05 Matthias Damm Note Added: 0002726
2011-09-06 21:39 Matthias Damm Status feedback => resolved
2011-09-06 21:39 Matthias Damm Resolution reopened => fixed
2011-09-06 21:39 Matthias Damm Note Added: 0002915
2011-09-15 16:30 Randy Armstrong Status resolved => closed
2011-09-15 16:30 Randy Armstrong Note Added: 0002998
2012-01-08 14:34 Paul Hunkar Relationship added related to 0001826
2012-01-11 15:17 Paul Hunkar Status closed => feedback
2012-01-11 15:17 Paul Hunkar Resolution fixed => reopened
2012-01-11 15:17 Paul Hunkar Note Added: 0003157
2012-01-11 15:44 Matthias Damm Status feedback => resolved
2012-01-11 15:44 Matthias Damm Resolution reopened => fixed
2012-01-11 15:44 Matthias Damm Note Added: 0003166
2012-01-17 18:11 Jim Luth Status resolved => closed
2012-01-17 18:11 Jim Luth Note Added: 0003203
2012-02-09 22:46 Jim Luth Fixed in Version => 1.02