%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
% Short Sectioned Assignment
% LaTeX Template
% Version 1.0 (5/5/12)
%
% This template has been downloaded from:
% http://www.LaTeXTemplates.com
%
% Original author:
% Frits Wenneker (http://www.howtotex.com)
%
% License:
% CC BY-NC-SA 3.0 (http://creativecommons.org/licenses/by-nc-sa/3.0/)
%
%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%

%----------------------------------------------------------------------------------------
%   PACKAGES AND OTHER DOCUMENT CONFIGURATIONS
%----------------------------------------------------------------------------------------

\documentclass[paper=letter, fontsize=11pt]{scrartcl} % A4 paper and 11pt font size

\usepackage[T1]{fontenc} % Use 8-bit encoding that has 256 glyphs
\usepackage{fourier} % Use the Adobe Utopia font for the document - comment this line to return to the LaTeX default
\usepackage[english]{babel} % English language/hyphenation
\usepackage{amsmath,amsfonts,amsthm} % Math packages
\usepackage{graphicx}
\usepackage{lipsum} % Used for inserting dummy 'Lorem ipsum' text into the template
\usepackage{hyperref}
\usepackage{amssymb}
\usepackage{listings}
\usepackage[]{algorithm2e}
\usepackage{algpseudocode}
\usepackage{enumerate}
\usepackage[table,xcdraw]{xcolor}
\usepackage{sectsty} % Allows customizing section commands
\usepackage{float}
\usepackage{caption}
\usepackage{gensymb} % to used degree symbol 
\usepackage{siunitx} 
\usepackage{enumitem}

\usepackage[sc]{mathpazo}
\allsectionsfont{ \normalfont\scshape} % Make all sections the default font and small caps
\usepackage{fancyhdr} % Custom headers and footers
\pagestyle{fancyplain} % Makes all pages in the document conform to the custom headers and footers
\fancyhead{} % No page header - if you want one, create it in the same way as the footers below
\fancyfoot[L]{} % Empty left footer
\fancyfoot[C]{} % Empty center footer
\fancyfoot[R]{\thepage} % Page numbering for right footer
\renewcommand{\headrulewidth}{0pt} % Remove header underlines
\renewcommand{\footrulewidth}{0pt} % Remove footer underlines
\setlength{\headheight}{13.6pt} % Customize the height of the header

\numberwithin{equation}{section} % Number equations within sections (i.e. 1.1, 1.2, 2.1, 2.2 instead of 1, 2, 3, 4)
\numberwithin{figure}{section} % Number figures within sections (i.e. 1.1, 1.2, 2.1, 2.2 instead of 1, 2, 3, 4)
\numberwithin{table}{section} % Number tables within sections (i.e. 1.1, 1.2, 2.1, 2.2 instead of 1, 2, 3, 4)

\setlength\parindent{0pt} % Removes all indentation from paragraphs - comment this line for an assignment with lots of text

%----------------------------------------------------------------------------------------
%   TITLE SECTION
%----------------------------------------------------------------------------------------
\newcommand{\horrule}[1]{\rule{\linewidth}{#1}} % Create horizontal rule command with 1 argument of height

\title{ 
\normalfont \normalsize 
\textsc{University of California Irvine} \\  % Your university, school and/or department name(s)
\textsc{Prgramming Language Research Group} \\ [25pt]
\horrule{0.5pt} \\[0.4cm] % Thin top horizontal rule
\huge IoTCloud Version 2.0\\ % The assignment title
\horrule{2pt} \\[0.5cm] % Thick bottom horizontal rule
}

\author{Authors} % Your name


\date{\normalsize\today} % Today's date or a custom date

\begin{document}

\maketitle % Print the title




%---------------------------------------------------------------------------------------
% Custom Stuff
%---------------------------------------------------------------------------------------
\newcommand{\tab}[1]{\hspace{.2\textwidth}\rlap{#1}}




\section{\textbf{Introduction}}

\section{\textbf{Approach}}

\subsection{\textbf{Records}}
Each record has the following information included in it:
\begin{itemize}
    \item Machine ID of the device creating the record
    \item The vector clock using the largest clock values from each device it knows and its own largest clock value incremented by 1.
    \item Add a random salt (or nonce) for the encryption safety
    \item Data payload
    \item HMAC of the record.
\end{itemize}
    


\subsubsection{\textbf{Types of Payloads}}
The different types of record payloads are:
\begin{itemize}
    \item Delete notifications
        \begin{itemize}
            \item Contains the HMAC of records that were deleted by devices.
            \item Generated when a device deletes a key from the end of one of the device queues.
        \end{itemize}
    \item Commit notifications
        \begin{itemize}
            \item Contains list of transactions that are committed in order of commit and the current key-value pair for that key.
            \item Generated by the arbitrator of a key and only the for that key (1 arbitrator per key).
            \item 
        \end{itemize}
    \item Abort notifications
        \begin{itemize}
            \item Contains a transaction ID of an aborted transaction and the machine ID of the device that created that transaction.
        \end{itemize}
    \item Data structure re-size notifications
        \begin{itemize}
            \item Contains new size of data structure (number of record allowed in the data structure).
            \item Causes old data Structure re-size notification to no longer be live.
        \end{itemize}
    \item Server sequence number for a specific record notifications
        \begin{itemize}
            \item Contains a record HMAC and the server sequence number for that record
        \end{itemize}
    \item Transactions
        \begin{itemize}
            \item Contains:
            \begin{itemize}
                \item Transaction ID
                \item A guard condition that can be evaluated
                \item A set of key-value pairs that are to be updated if the guard condition is met.
            \end{itemize}
        \end{itemize}
\end{itemize}


\subsection{\textbf{Updates}}
Updates take place as follows:
\begin{enumerate}
    \item A device pulls the latest version of the data structure.  If the device cannot pull the latest version because of network connectivity or some other issues then that device will just work using the local copy of the data structure it has.
    \item The device makes a record as follows:
        \begin{enumerate}
            \item Adds its machine ID.
            \item Creates a vector clock using the largest clock values from each device it knows and its own largest clock value incremented by 1.
            \item Add a random salt (or nonce) for the encryption safety
            \item Fill the record data section with the transactions, key-value pairs, ext.
            \item Fill the remainder of the data section with rescued key-value pairs, transactions, ext.
            \item Pad the record to be the same size for all records.
            \item Calculate the HMAC of the record and add that to the record
            \item Encrypt the record
        \end{enumerate}
    \item Send the record to the server for insertion into the device's queue.
    \item Wait for response from server stating the new records (the one just sent) server sequence number.  Save this server sequence number for when creating the next record.
    \item 
\end{enumerate}


\subsection{\textbf{Updates}}
\subsection{\textbf{Deletions}}

\subsection{\textbf{Checking the Graph}}
Checking the data structure for consistency is done as follows:
\begin{enumerate}
    \item Verify that each record in the data structure has an HMAC that matches the data in the record.
    \item Verify that there are at least as many records in the data structure as stated in the largest data structure size record.
    \item Make sure that for each device queue the difference between the vector clock value of the device queues clock is at most 1 between 2 consecutive messages.
    \item Verify that no currently live data Structure re-size notification is smaller than the last known data structure size.  Data structure can only grow in size.
\end{enumerate}

    
\subsection{\textbf{Live Status}}
Live Status of entries:
\begin{enumerate}
    \item Key-Value Entry is dead if either:
    \begin{enumerate}
        \item there is a newer key-value pair
        \item it is incomplete.
    \end{enumerate}
    
    \item If there are $n$ devices in the system then there are $n$ separate queues
\end{enumerate}
    

\end{document}