the entry owner inserts a newer update into the queue.}\r
\item Queue state entry: Includes queue size \newline {The purpose \r
of this is for the client to tell if the server lies about the number \r
-of slots in the queue, e.g. if there are 2 queue state entry in the queue, \r
+of slots in the queue, e.g. if there are 2 queue state entries in the queue, \r
e.g. 50 and 70, the client knows that when it sees 50, it should expect \r
at most 50 slots in the queue and after it sees 70, it should expect \r
50 slots before that queue state entry slot 50 and at most 70 slots. \r
\subsection{Server Algorithm}\r
$s \in SN$ is a sequence number\\\r
$sv \in SV$ is a slot's value\\\r
-$slot_s = \tuple{s, sv} \in Q \subseteq SN \times SV$ \\\r
+$slot_s = \tuple{s, sv} \in SL \subseteq SN \times SV$ \\\r
\r
\textbf{State} \\\r
-\textit{Q = set of live slots on server} \\\r
+\textit{SL = set of live slots on server} \\\r
\textit{max = maximum number of slots (input only for resize message)} \\\r
-\textit{n = number of slots} \\\r
+\textit{n = number of slots} \\ \\\r
+\textbf{Helper Function} \\\r
+$MaxSlot(SL')= \langle s, sv \rangle \mid \langle s, sv \rangle \r
+\in SL' \wedge \forall \langle s', sv' \rangle \in SL', s \geq s'$ \\\r
+$MinSlot(SL')= \langle s, sv \rangle \mid \langle s, sv \rangle \r
+\in SL' \wedge \forall \langle s', sv' \rangle \in SL', s \leq s'$ \\\r
+$SeqN(\langle s, sv \rangle)=s$ \\\r
+$SlotVal(\langle s, sv \rangle)=sv$ \\\r
\r
\begin{algorithmic}[1]\r
-\Function{Get}{$s'$}\r
-\State \Return{$\{\tuple{s, sv} \in Q \mid s \geq s'\}$}\r
+\Function{GetSlot}{$s_g$}\r
+\State \Return{$\{\tuple{s, sv} \in SL \mid s \geq s_g\}$}\r
\EndFunction\r
\end{algorithmic}\r
\r
\begin{algorithmic}[1]\r
-\Function{Put}{$s,newMax,newSlot$}\r
-\If{$(newMax \neq \emptyset) \land (newMax > max)$}\Comment{Resize}\r
- \State $Q' \gets \{slot_1, slot_2, \dots, slot_{newMax}\} \forall slot_i = 0 \r
- \Leftrightarrow Q' = \emptyset$\r
- \State $Q \gets Q' \cup Q$\r
- \State $max \gets newMax$\r
+\Function{PutSlot}{$s_p,sv_p,max'$}\r
+\If{$(max' \neq \emptyset)$}\Comment{Resize}\r
+\State $max \gets max'$\r
\EndIf\r
-\If{$(s = sn_n + d)$}\r
+\State $\langle s_n,sv_n \rangle \gets MaxSlot(SL)$\Comment{Last sv}\r
+\State $s_n \gets SeqN(\langle s_n,sv_n \rangle)$\r
+\If{$(s_p = s_n + 1)$}\r
\If{$n = max$}\r
- \State $Q \gets Q - \{slot_{sn_1}\}$\r
- \State $SN \gets SN - \{sn_1\}$\r
- \State $Q \gets Q \cup newSlot$\r
+ \State $\langle s_m,sv_m \rangle \gets MinSlot(SL)$\Comment{First sv}\r
+ \State $SL \gets SL - \{\langle s_m,sv_m \rangle\}$\r
\Else \Comment{$n < max$}\r
- \State $Q \gets Q \cup newSlot$\r
\State $n \gets n + 1$\r
\EndIf\r
- \State $SN \gets SN \cup \{s\: |\: s = new\: sn_n\}$\r
- \State $status \gets true$\r
- \State $MSlot \gets \emptyset$\r
+ \State $SL \gets SL \cup \{\langle s_p,sv_p \rangle\}$\r
+ \State \Return{$true$}\r
\Else\r
- \State $status \gets false$\r
- \State $MSlot \gets \{slot_{s}, \dots, slot_{sn_n}\} \forall $\r
- $slot_i = \langle i,E( \langle k,v \rangle ) \rangle \in Q$\r
+ \State \Return{$(false,\{\langle s,sv \rangle \in SL \mid \r
+ s \geq s_p\})$}\r
\EndIf\r
-\State \Return{$\langle status,MSlot \rangle$}\Comment{Return missed updates and status}\r
\EndFunction\r
\end{algorithmic}\r
\r