Merge branch 'master' of ssh://plrg.eecs.uci.edu/home/git/iotcloud
authortkwa <kwathomas0@gmail.com>
Tue, 2 Aug 2016 00:14:03 +0000 (17:14 -0700)
committertkwa <kwathomas0@gmail.com>
Tue, 2 Aug 2016 00:14:03 +0000 (17:14 -0700)
Conflicts:
doc/iotcloud.tex

doc/iotcloud.tex
src/java/iotcloud/Table.java
src/server/README.txt

index ab9cf8521caed7972aebc8d38e86370450f12068..af0a291b64697fc06ef819aa3ac9d517d55f9cd7 100644 (file)
@@ -519,13 +519,13 @@ $\tuple{ck,\tuple{k, v}} \in KV_s \wedge
 \forall \tuple{ck_s,\tuple{k_s, v_s}} \in KV_s, k = k_s$ \\\r
 \r
 \begin{algorithmic}[1]\r
-\Function{PutKVPair}{$KV_s,\tuple{k_s,v_s}$}\r
-\State $\tuple{ck_s,\tuple{k_s,v_t}} \gets GetKV(KV_s,k_s)$\r
+\Function{PutKVPair}{$\tuple{k_s,v_s}$}\r
+\State $\tuple{ck_s,\tuple{k_s,v_t}} \gets GetKV(KV,k_s)$\r
 \If{$\tuple{ck_s,\tuple{k_s,v_t}} = \emptyset$}\r
-       \State $KV_s \gets KV_s \cup \{\tuple{ck_p, \tuple{k_s,v_s}}\}$\r
+       \State $KV \gets KV \cup \{\tuple{ck_p, \tuple{k_s,v_s}}\}$\r
        \State $ck_p \gets ck_p + 1$\r
 \Else\r
-       \State $KV_s \gets (KV_s - \{\tuple{ck_s, \tuple{k_s,v_t}}\}) \cup \r
+       \State $KV \gets (KV - \{\tuple{ck_s, \tuple{k_s,v_t}}\}) \cup \r
        \{\tuple{ck_s, \tuple{k_s,v_s}}\}$\r
 \EndIf\r
 \State \Return{$KV_s$}\r
@@ -578,16 +578,24 @@ $\tuple{ck,\tuple{k, v}} \in KV_s \wedge
 \end{algorithmic}\r
 \r
 \begin{algorithmic}[1]\r
-\Function{ReinsertLastSlot}{$sl_{s_{last}},max'_s$}\r
-       \State $s_s \gets GetLastS(sl_{s_{last}})$\r
-       \State $sv_s \gets GetSV(sl_{s_{last}})$\r
-       \State $\tuple{stat_s,SL_s} \gets \Call{PutSlot}{s_s,sv_s,max'_s}$\r
-       \State $cr_s \gets \Call{HandleCollision}{\tuple{stat_s,SL_s}}$\r
-\State \Return{$cr_s$}\r
+\r
+\Function{ReinsertLastSlot}{$MS_s,SK_s,sl_{s_{last}},max'_s,hmac_{p_s}$}\r
+\State $s_s \gets MaxLastSeqN(MS_s)$\r
+\State $sv_s \gets GetSV(sl_{s_{last}})$\r
+\State $Dat_s \gets Decrypt(SK,sv_s)$\r
+\State $DE_s \gets GetDatEnt(Dat_s)$\r
+\State $hmac_{c_s} \gets Hmac(DE_s,SK_s)$\r
+\State $Dat_s \gets CreateDat(s_s,id_{self},hmac_{p_s},DE_p,hmac_{c_s})$\r
+\State $hmac_{p_s} \gets hmac_{c_s}$\r
+\State $\tuple{stat_s,SL_s} \gets \Call{PutSlot}{s_s,sv_s,max'_s}$   \r
+\State $cr_s \gets \Call{HandleCollision}{\tuple{stat_s,SL_s}}$\r
+\State \Return{$\tuple{cr_s,hmac_{p_p}}$}\r
+\r
 \EndFunction\r
 \end{algorithmic}\r
 \note{Shouldn't this function do something pretty sophisticated about seeing what data we actually need to keep from the last slot and not just insert the entire thing?}\r
 \r
+\note{Probably best to just not call this function if $need_s$ is false and not pass in such parameters.  It makes it harder to read.}\r
 \r
 \begin{algorithmic}[1]\r
 \Function{GetDEPairs}{$KV_s,max'_s,need_s,sl_s$}\r
index cf7095e42c15784277b95e9420792c0d655deded..7c798ad7679c63f1dbfa2859973faf95129dcd40 100644 (file)
@@ -128,33 +128,39 @@ final public class Table {
                }
 
                if (!rejectedmessagelist.isEmpty()) {
+                       /* TODO: We should avoid generating a rejected message entry if
+                        * there is already a sufficient entry in the queue (e.g.,
+                        * equalsto value of true and same sequence number).  */
+
                        long old_seqn=rejectedmessagelist.firstElement();
                        if (rejectedmessagelist.size() > REJECTED_THRESHOLD) {
                                long new_seqn=rejectedmessagelist.lastElement();
                                RejectedMessage rm=new RejectedMessage(s, localmachineid, old_seqn, new_seqn, false);
                                s.addEntry(rm);
                        } else {
-                               long prev_seqn=old_seqn;
-                               for(int i=0; i<rejectedmessagelist.size();i++) {
+                               long prev_seqn=-1;
+                               int i=0;
+                               /* Go through list of missing messages */
+                               for(;i<rejectedmessagelist.size();i++) {
                                        long curr_seqn=rejectedmessagelist.get(i);
                                        Slot s_msg=buffer.getSlot(curr_seqn);
-                                       if (s_msg!=null) {
-                                               long machineid=s_msg.getMachineID();
-                                               RejectedMessage rm=new RejectedMessage(s, machineid, curr_seqn, curr_seqn, true);
-                                               s.addEntry(rm);
-                                               if (old_seqn != -1 && old_seqn != curr_seqn) {
-                                                       RejectedMessage rmprev=new RejectedMessage(s, localmachineid, old_seqn, prev_seqn, false);
-                                                       s.addEntry(rmprev);
-                                               }
-                                               old_seqn = -1;
-                                       } else {
-                                               prev_seqn=curr_seqn;
-                                       }
+                                       if (s_msg!=null)
+                                               break;
+                                       prev_seqn=curr_seqn;
                                }
-                               if (old_seqn != -1) {
+                               /* Generate rejected message entry for missing messages */
+                               if (prev_seqn != -1) {
                                        RejectedMessage rm=new RejectedMessage(s, localmachineid, old_seqn, prev_seqn, false);
                                        s.addEntry(rm);
                                }
+                               /* Generate rejected message entries for present messages */
+                               for(;i<rejectedmessagelist.size();i++) {
+                                       long curr_seqn=rejectedmessagelist.get(i);
+                                       Slot s_msg=buffer.getSlot(curr_seqn);
+                                       long machineid=s_msg.getMachineID();
+                                       RejectedMessage rm=new RejectedMessage(s, machineid, curr_seqn, curr_seqn, true);
+                                       s.addEntry(rm);
+                               }
                        }
                }
                
index 7de6bf92f739e94e4927d3e1f23f1d20e89fc671..6eb138f6b5792ea362a707d80e988e42e74aa76a 100644 (file)
@@ -1,5 +1,5 @@
 1) Requires apache2
-2) Requires fastcgi (libapache2-mod-fastcfi)
+2) Requires fastcgi (libapache2-mod-fastcgi and libfcgi-dev)
 
 Setup on ubuntu
 1) Install modules