Adding helper functions for server part; cleaning up
[iotcloud.git] / doc / iotcloud.tex
index 315b84ec938a938c7b37238e44a0f5da93d7d6f9..79525458af929316271ceaa4b1fc6de003ced8b1 100644 (file)
@@ -52,7 +52,7 @@ client's last entry from the queue. This is kept in the slot until
 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
@@ -127,45 +127,46 @@ Client can make a request to resize the queue. This is done as a write that comb
 \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