Skip to content

Commit a447cdd

Browse files
Merge pull request #100 from UAVCAN/78
Be more explicit about the flexibility of the transfer-ID timeout setting
2 parents cc5b516 + 1b20b4e commit a447cdd

File tree

2 files changed

+30
-8
lines changed

2 files changed

+30
-8
lines changed

specification/introduction/introduction.tex

Lines changed: 4 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -15,7 +15,7 @@ \section{Overview}
1515
with a specialized interface description language and a highly efficient data serialization format
1616
suitable for use in real-time safety-critical systems with optional modular redundancy.
1717

18-
The name UAVCAN stands for \emph{Uncomplicated Application-level Vehicular Communication And Networking}.
18+
The name UAVCAN stands for \emph{Uncomplicated Application-level Vehicular Computing And Networking}.
1919

2020
UAVCAN is a standard open to everyone, and it will always remain this way.
2121
No authorization or approval of any kind is necessary for its implementation, distribution, or use.
@@ -206,9 +206,6 @@ \section{Revision history}
206206

207207
\subsection{v1.0-beta -- Sep 2020}
208208

209-
This version is to be followed by \emph{v1.0} upon completion of the formal standardization process
210-
in one of the standard bodies.
211-
212209
Compared to v1.0-alpha, the differences are as follows (the motivation is provided on the forum):
213210

214211
\begin{itemize}
@@ -221,6 +218,9 @@ \subsection{v1.0-beta -- Sep 2020}
221218
\item Added support for delimited serialization; introduced related concepts of \emph{extent} and \emph{sealing}
222219
(section \ref{sec:dsdl_composite_extent_and_sealing}).
223220
This change enables one to easily evolve networked services in a backward-compatible way.
221+
222+
\item Enabled the automatic runtime adjustment of the transfer-ID timeout on a per-subject basis
223+
as a function of the transfer reception rate (section \ref{sec:transport_transfer_reception}).
224224
\end{itemize}
225225

226226
\subsection{v1.0-alpha -- Jan 2020}

specification/transport/abstract.tex

Lines changed: 26 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -662,16 +662,19 @@ \subsubsection{Transmission over redundant transports}
662662
in section~\ref{sec:application_functions}.
663663
}.
664664

665-
\subsection{Transfer reception}
665+
\subsection{Transfer reception}\label{sec:transport_transfer_reception}
666666

667667
\subsubsection{Definitions}
668668

669669
\emph{Transfer reassembly} is the real-time process of reconstruction of the transfer payload and its metadata from
670670
a sequence of relevant transport frames.
671671

672-
\emph{Transfer-ID timeout} is a time interval that is 2 (two) seconds long.
673-
The semantics of this entity are explained below.
674-
Implementations are allowed to redefine this value provided that such redefinition is explicitly documented.
672+
\emph{Transfer-ID timeout} is a time interval whose semantics are explained below.
673+
Implementations may define this value statically according to the application requirements.
674+
Implementations may automatically adjust this value per session at runtime as a function of the
675+
observed transfer reception interval.
676+
Transfer-ID timeout values greater than 2 (two) seconds are not recommended.
677+
Implementations should document the value of transfer-ID timeout or the rules of its computation.
675678

676679
\emph{Transport frame reception timestamp} specifies the moment of time when the frame is received by a node.
677680
\emph{Transfer reception timestamp} is the reception timestamp of the earliest received frame of the transfer.
@@ -693,13 +696,32 @@ \subsubsection{Behaviors}
693696
any other successfully reassembled transfer under the same session specifier by more than the transfer-ID timeout
694697
is considered unique regardless of its transfer-ID value.
695698

699+
If the optimal transfer-ID timeout value for a given session cannot be known in advance,
700+
it can be computed at runtime on a per-session basis\footnote{%
701+
E.g., as a multiple of the average transfer reception interval.
702+
}.
703+
The parameters of such computation are to be chosen according to the requirements of the application,
704+
but they should always be documented.
705+
696706
\begin{remark}
697707
Low transfer-ID timeout values increase the risk of undetected transfer duplication when such transfers
698708
are significantly delayed due to network congestion,
699709
which is possible with very low-priority transfers when the network load is high.
700710

701711
High transfer-ID timeout values increase the risk of an undetected transfer loss
702712
when a remote node suffers a loss of state (e.g., due to a software reset).
713+
714+
The ability to auto-detect the optimal transfer-ID timeout value per session at runtime ensures that the
715+
application can find the optimal balance even if the temporal properties of the network are not known in advance.
716+
As a practical example, an implementation could compute the exponential moving average of the
717+
transfer reception interval $x$ for a given session and define the transfer-ID timeout as $2x$.
718+
719+
It is important to note that the automatic adjustment of the transfer-ID timeout should only be done
720+
on a per-session basis rather than for the entire port, because there may be multiple remote nodes
721+
emitting transfers on the same port at different rates.
722+
For example, if one node emits transfers at a rate $r$ transfers per second, and another node emits transfers
723+
on the same port at a much higher rate $100r$, the resulting auto-detected transfer-ID timeout might be
724+
too low, creating the risk of accepting duplicates.
703725
\end{remark}
704726

705727
Implementations are recommended, but not required, to support reassembly of

0 commit comments

Comments
 (0)