From 477e1684feab0296345f75a2309fab609bd3134a Mon Sep 17 00:00:00 2001 From: Tech-Matt Date: Thu, 27 Aug 2026 23:01:19 +0300 Subject: [PATCH] docs: add final six-page project report --- README.md | 2 + report/.gitignore | 4 ++ report/01_structure.tex | 49 +++++++++++++++ report/02_design.tex | 83 +++++++++++++++++++++++++ report/03_implementation.tex | 81 +++++++++++++++++++++++++ report/README.md | 14 +++++ report/RizzoMasutti_Report.pdf | Bin 0 -> 81111 bytes report/main.tex | 108 +++++++++++++++++++++++++++++++++ 8 files changed, 341 insertions(+) create mode 100644 report/.gitignore create mode 100644 report/01_structure.tex create mode 100644 report/02_design.tex create mode 100644 report/03_implementation.tex create mode 100644 report/README.md create mode 100644 report/RizzoMasutti_Report.pdf create mode 100644 report/main.tex diff --git a/README.md b/README.md index 725c58e..5563c77 100644 --- a/README.md +++ b/README.md @@ -2,6 +2,8 @@ The sequential-consistency contract, implementation invariants, crash-recovery argument, assumptions, and verification evidence are documented in [the sequential consistency audit](docs/sequential-consistency-report.md). +The six-page exam report and its LaTeX sources are available in [`report/`](report/README.md). + ![Java](https://img.shields.io/badge/Java-ED8B00?style=flat-square&logo=java&logoColor=white) ![Akka](https://img.shields.io/badge/Akka-15A9CE?style=flat-square&logo=akka&logoColor=white) ![Gradle](https://img.shields.io/badge/Gradle-Build-02303A?style=flat-square&logo=gradle&logoColor=white) diff --git a/report/.gitignore b/report/.gitignore new file mode 100644 index 0000000..31e2035 --- /dev/null +++ b/report/.gitignore @@ -0,0 +1,4 @@ +main.aux +main.log +main.out +main.pdf diff --git a/report/01_structure.tex b/report/01_structure.tex new file mode 100644 index 0000000..548db2d --- /dev/null +++ b/report/01_structure.tex @@ -0,0 +1,49 @@ +\section{Project Structure} + +\subsection{Objective and execution model} + +The system implements a replicated, fixed-length array of integer positions. Clients may contact any replica; reads are answered locally, whereas a distinguished coordinator orders writes. Every client, replica, and emulated point-to-point channel is a Java Akka actor that owns its mutable state and processes one mailbox event at a time. The design assumes static membership, reliable FIFO channels, fail-stop replicas without recovery, accurate bounded failure detection, and a strict majority of correct replicas. + +Figure~\ref{fig:architecture} shows the normal request path. An arrow between replicas denotes a dedicated \code{NetworkChannel} actor for that sender--destination pair. The channel queues messages and adds a controlled random delay, but releases the queue head first; therefore latency never reorders messages sent over the same logical channel. + +\begin{figure}[h] +\centering +\begin{tikzpicture}[ + node distance=9mm and 20mm, + actor/.style={draw, rounded corners, minimum width=22mm, minimum height=9mm, align=center}, + coord/.style={actor, fill=blue!10, very thick}, + replica/.style={actor, fill=gray!8}, + channel/.style={-{Latex[length=2mm]}, thick}, + response/.style={{Latex[length=2mm]}-, dashed} +] +\node[actor] (client) {Client}; +\node[replica, right=of client] (contact) {contacted\\replica}; +\node[coord, right=of contact] (coord) {coordinator}; +\node[replica, above right=5mm and 15mm of coord] (r1) {replica $r_1$}; +\node[replica, below right=5mm and 15mm of coord] (r2) {replica $r_2$}; +\draw[channel] (client) -- node[above]{request} (contact); +\draw[response] (client) -- node[below]{result} (contact); +\draw[channel] (contact) -- node[above]{forward} (coord); +\draw[channel] (coord) -- (r1); +\draw[channel] (coord) -- (r2); +\draw[response] (coord) to[bend right=13] (r1); +\draw[response] (coord) to[bend left=13] (r2); +\end{tikzpicture} +\caption{Normal write path: solid coordinator edges carry UPDATE/WRITEOK; dashed reverse edges carry ACK.} +\label{fig:architecture} +\end{figure} + +\subsection{Responsibilities and local state} + +\noindent\begin{tabularx}{\textwidth}{@{}>{\bfseries}p{28mm} X X@{}} +\toprule +Component & Responsibility & Principal local state \\ +\midrule +\code{Client} & Runs one public read/write operation at a time and reports results or timeouts through callbacks. & Current transaction, FIFO queue, local transaction counter. \\ +\code{Replica} & Stores the array, dispatches protocol FSMs, emulates crashes, and records the applied prefix. & $P[0\ldots99]$, coordinator, latest pair, history, active FSMs, crash state. \\ +\code{Transaction} & Encapsulates one local READ, WRITE, UPDATE, HEARTBEAT, or ELECTION FSM; it never travels. & Immutable ID and start epoch, FSM state, optional cancellable timeout. \\ +\code{NetworkChannel} & Emulates one reliable FIFO link with random latency. & FIFO queue of message/sender pairs and one scheduled delivery. \\ +\bottomrule +\end{tabularx} + +Protocol messages extend immutable, serializable \code{Msg}. A \code{TransactionId = } correlates a message with one local FSM; it is a routing key, not the database order. The replicated order is the immutable \code{EpochPair} $\langle e,i\rangle$. Heartbeats reserve transaction sequence $0$, ordinary replica FSMs use positive sequences, and elections use negative sequences. The array materializes state for reads; a \code{Map} keyed by \code{EpochPair} records applied transactions. Membership, candidate lists, and synchronization arrays are defensively copied at actor boundaries. diff --git a/report/02_design.tex b/report/02_design.tex new file mode 100644 index 0000000..d767639 --- /dev/null +++ b/report/02_design.tex @@ -0,0 +1,83 @@ +\clearpage +\section{System Design} + +\subsection{Client operations and the normal update protocol} + +The client maintains one \code{currentTransaction} and a FIFO queue. A new operation starts only after the previous one returns or reaches its terminal timeout. This is stronger than the required ordering for operations from one client to one replica because it preserves that client's order even when destinations differ. + +For a \textbf{read}, \code{ReadTransaction} sends \msg{ReadMsg(idx)} to the selected replica and schedules a local timeout. A live replica validates the index through \code{getPosition}, reads its current array entry, and immediately returns \msg{ReadResultMsg}. The result or the timeout completes the transaction and starts the next queued request. + +For a \textbf{write} $w=(idx,val)$, the contacted replica creates a WRITE FSM, which starts the UPDATE FSM below: + +\begin{enumerate}[leftmargin=7mm,itemsep=1mm,topsep=1mm] + \item A non-coordinator forwards $w$ to its known coordinator and waits for \msg{UPDATE}. If the contacted replica is the coordinator, it enters the coordinator path directly. + \item The coordinator reserves one fresh pair $\langle e,i\rangle$ in mailbox order and broadcasts \msg{UPDATE($\langle e,i\rangle$,idx,val)}. The allocator is separate from the latest applied pair, so an assigned but uncommitted operation is not presented as committed state. + \item Each receiving replica creates or advances the matching update FSM, returns \msg{ACK($\langle e,i\rangle$)}, and waits for the decision. The coordinator counts itself and waits for + \[ + |Q|=\left\lfloor\frac{N}{2}\right\rfloor+1. + \] + \item On the first quorum, the coordinator broadcasts \msg{WRITEOK} carrying the same non-null pair. A replica applies $P[idx]\leftarrow val$ only after this message, advances its latest pair, stores the update in history, and invokes the required callback. + \item The trigger replica completes its parent write transaction and returns success to the client. Duplicate or stale acknowledgements cannot create a second decision because the coordinator FSM leaves \code{WAITING\_ACK} after its first quorum. +\end{enumerate} + +\subsection{Why all replicas obtain one total order} + +Pairs are ordered lexicographically: +\[ +\langle e,i\rangle < \langle e',i'\rangle +\iff e{\bfseries}p{29mm} p{43mm} X@{}} +\toprule +FSM & Main states & Terminal event or recovery action \\ +\midrule +READ & INIT, WAITING\_RESULT & Result returns the local value; timeout reports failure. \\ +WRITE (client) & INIT, WAITING\_RESULT & Result/timeout invokes the supplied client callback and releases the FIFO queue. \\ +WRITE (replica) & INIT, WAITING\_UPDATE & Child UPDATE completion sends the result to the originating client. \\ +UPDATE & WAITING\_UPDATE, WAITING\_ACK, WAITING\_WRITEOK, WAITING\_ELECTION & Matching WRITEOK applies exactly once; phase timeout starts election; definitely unobserved requests may resume. \\ +HEARTBEAT & COORDINATOR, WATCHING, ELECTION\_REQUESTED & Ticks broadcast liveness; a current watchdog expiration requests election. \\ +ELECTION & NEW, PARTICIPATING, ELECTED, SYNCHRONIZING & ACK timeout skips a node; winner publishes a snapshot; rejection or synchronization closes old FSMs. \\ +\bottomrule +\end{tabularx} + +Message dispatch first handles messages that create transactions (READ, WRITE, UPDATE, and ELECTION tokens), then routes subsequent messages by \code{TransactionId}. Replica code iterates over a copy of the active list because a terminal transition may remove its transaction. Results sent to clients use direct actor messaging as public API traffic; all replica-to-replica protocol traffic uses \code{tell}/\code{unicast}/\code{broadcast}, and therefore crosses the emulated FIFO channels. + +Two different counters protect different invariants. The transaction counter provides collision-free local routing, while \code{reserveNextUpdateEpochPair()} provides database ordering. The latter is coordinator-only and increments the sequence at reservation time, but \code{Replica.epochPair} changes only when WRITEOK is applied. After synchronization, a changed epoch resets the reservation sequence above the baseline. UPDATE, ACK, WRITEOK, local state, history, and \code{WriteFinishMsg} all carry the same pair; mismatched pairs are ignored and a null pair is rejected where ordering identity is mandatory. + +\subsection{Observability and controlled faults} + +All required externally visible events use the provided \code{Logger} and callback APIs, so test probes can observe reads, writes, applied updates, election starts, and elected coordinators without shared mutable state. Official logging is timestamped by the template utility; no protocol class prints directly to standard output. Crash instructions are immutable API messages and are interpreted inside the target actor. This makes a failure reproducible at protocol boundaries while preserving normal actor isolation. + +The most informative recovery scenario uses five replicas. The coordinator reaches a quorum, sends WRITEOK to one follower, and crashes before completing its broadcast. That follower has pair $\langle0,1\rangle$ while the others remain at $\langle0,0\rangle$. The ring selects the follower with the greater pair, it starts epoch $1$, and synchronization copies value $42$ to all four correct replicas. This case simultaneously exercises partial broadcast, update timeout/heartbeat detection, candidate ordering, election termination, state transfer, and post-election reads. + +\clearpage +\subsection{Verification strategy and results} + +Verification combines course tests, protocol regressions, formatting, and static analysis. Akka \code{TestKit} listeners receive mandatory callbacks, so tests primarily assert external behavior; focused probes expose identities and history where no callback exists. + +\noindent\begin{tabularx}{\textwidth}{@{}>{\bfseries}p{34mm} X p{25mm}@{}} +\toprule +Test layer & Evidence covered & Result \\ +\midrule +Course base tests & API shape; initialization; no-crash reads/writes; crash scenarios and callback timing. & Passed \\ +Transaction regressions & Message equality/routing; read and write success/timeout; heartbeat generations; update quorum; ring navigation, ACK skipping, candidate choice, synchronization validation. & Passed \\ +Consistency regressions & Unique monotonic epoch pairs; six concurrent writes from two clients on five replicas; write-then-read program order; coordinator crash during first WRITEOK followed by convergence. & 4/4 passed \\ +Complete JUnit run & All non-contract tests in the repository. & 80/80 passed \\ +Quality checks & PMD, SpotBugs, CPD, and Spotless aggregation. & Build successful \\ +Remote CI & GitHub \code{Regression CI/run-tests} on the exact implementation head. & Passed \\ +\bottomrule +\end{tabularx} + +The complete suite was run with an isolated Gradle home because the machine's default Gradle cache could not load its native Linux library. The commands were: + +\begin{verbatim} +GRADLE_USER_HOME=/tmp/coredump-gradle-home gradle test --no-daemon +GRADLE_USER_HOME=/tmp/coredump-gradle-home gradle regression --no-daemon +GRADLE_USER_HOME=/tmp/coredump-gradle-home gradle staticAnalysis --no-daemon +\end{verbatim} + +Static analysis completed with zero errors and zero formatting findings. Its 42 warnings, two informational findings, and two duplication locations are non-blocking complexity/style observations; correctness instead rests on the stated invariants and fault-oriented tests. + +\subsection{Requirement coverage} + +\noindent\begin{tabularx}{\textwidth}{@{}p{43mm} X@{}} +\toprule +Required property & Implementation mechanism \\ +\midrule +Reliable total-order update delivery & Coordinator pairs, strict-majority ACK, apply-on-WRITEOK, and FIFO channels. \\ +Sequential client observations & One active client transaction, FIFO pending queue, and result only after contacted-replica application. \\ +Coordinator crash detection & UPDATE/WRITEOK phase deadlines plus versioned heartbeat watchdog. \\ +Ring election with crashes & Sorted IDs, immutable candidate token, per-hop ACK timeout, failed-node skipping, and finite candidate reduction. \\ +Most up-to-date coordinator & Lexicographic latest-pair comparison with replica-ID tie-break. \\ +Post-election convergence & Strictly newer epoch and immutable full-array synchronization before new-epoch traffic. \\ +Specific crash points and encapsulation & Per-message crash counters, interruptible broadcast, actor-owned state, and defensive copies. \\ +\bottomrule +\end{tabularx} + +\subsection{Use of artificial intelligence} + +OpenAI Codex was used to assist in code and text generation. The authors reviewed and tested the generated material; responsibility for the design, code, report, and oral explanation remains with the authors. + +\subsection{Conclusion} + +The project combines quorum broadcast, coordinator-scoped ordering, FIFO transport, and ring election. A local transaction identifier correlates an FSM; the \code{EpochPair} names a replicated decision. Preserving that pair through WRITEOK gives replicas one ordered prefix, and synchronization establishes the next epoch's baseline. The full automated suite passes, with the snapshot-recovery condition stated explicitly above. diff --git a/report/README.md b/report/README.md new file mode 100644 index 0000000..66f21e2 --- /dev/null +++ b/report/README.md @@ -0,0 +1,14 @@ +# Project report + +The four LaTeX source files preserve the structure and page geometry of the official +`ds1_project_2026_report_template.zip` archive. + +Compile from this directory with: + +```bash +tectonic main.tex +``` + +The submitted artifact is `RizzoMasutti_Report.pdf`. Its page count must remain at or +below the six-page limit in the project specification; the committed version is exactly +six A4 pages. diff --git a/report/RizzoMasutti_Report.pdf b/report/RizzoMasutti_Report.pdf new file mode 100644 index 0000000000000000000000000000000000000000..326a9b739e396d5a340e8c76961ac9758d6e171f GIT binary patch literal 81111 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
    ;>9jWDj>R&sEQntcoOV6CNq#Nd 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 AuK)l5 literal 0 HcmV?d00001 diff --git a/report/main.tex b/report/main.tex new file mode 100644 index 0000000..b82f926 --- /dev/null +++ b/report/main.tex @@ -0,0 +1,108 @@ +\documentclass[a4paper]{article} +\usepackage[utf8]{inputenc} +\usepackage{multicol} +\usepackage{paracol} +\usepackage{geometry} +\usepackage{amssymb} +\usepackage{graphicx} +\usepackage{wrapfig} +\usepackage{caption} +\usepackage{subcaption} +\usepackage{fancyhdr} +\usepackage[parfill]{parskip} +\usepackage{hyperref} +\usepackage{amsmath} +\usepackage{listings} +\usepackage[table]{xcolor} +\usepackage{mathtools} +\usepackage{array} +\usepackage{enumitem} +\usepackage{wrapfig} +\usepackage{svg} +\usepackage{algorithm2e} +\usepackage[edges]{forest} + +% Additional packages permitted by the supplied template. +\usepackage{booktabs} +\usepackage{tabularx} +\usepackage{microtype} +\usepackage{tikz} +\usetikzlibrary{arrows.meta,positioning} + +% VS2017 C++ color scheme from the supplied template. +\definecolor{clr-background}{RGB}{255,255,255} +\definecolor{clr-text}{RGB}{0,0,0} +\definecolor{clr-string}{RGB}{163,21,21} +\definecolor{clr-namespace}{RGB}{0,0,0} +\definecolor{clr-preprocessor}{RGB}{128,128,128} +\definecolor{clr-keyword}{RGB}{0,0,255} +\definecolor{clr-type}{RGB}{43,145,175} +\definecolor{clr-variable}{RGB}{0,0,0} +\definecolor{clr-constant}{RGB}{111,0,138} +\definecolor{clr-comment}{RGB}{0,128,0} + +\lstset{ + language=Java, + basicstyle=\ttfamily, + keywordstyle=\color{blue}\ttfamily, + stringstyle=\color{red}\ttfamily, + commentstyle=\color{green}\ttfamily, + morecomment=[l][\color{magenta}]{\#}, +} + +\lstset{ + language=Java, + backgroundcolor=\color{clr-background}, + basicstyle=\color{clr-text}, + stringstyle=\color{clr-string}, + identifierstyle=\color{clr-variable}, + commentstyle=\color{clr-comment}, + keywordstyle=\color{clr-type}, + keywordstyle={[2]\color{clr-constant}}, + tabsize=1, + frame=single +} + +\DeclareMathOperator*{\argmax}{arg\,max} +\DeclareMathOperator*{\argmin}{arg\,min} + +\hypersetup{ + colorlinks, + citecolor=black, + filecolor=black, + linkcolor=black, + urlcolor=black +} + +% Geometry is copied unchanged from the official report template. +\geometry{ + a4paper, + left=18mm, + right=18mm, + top=25mm, + bottom=25mm +} + +\graphicspath{{./images/}} +\pagestyle{fancy} +\setlength{\headheight}{14pt} +\fancyhf{} +\fancyhead[L]{Distributed Systems 1 Project} +\fancyhead[R]{Rizzo--Masutti} +\fancyfoot[C]{\thepage} +\raggedbottom +\setlength{\parfillskip}{0pt plus 1fil} + +\newcommand{\msg}[1]{\texttt{#1}} +\newcommand{\code}[1]{\texttt{#1}} + +\title{\vspace{-20mm}A Quorum-Based Total Order Broadcast Protocol for Distributed Intelligence Databases} +\author{Mattia Rizzo \qquad Alan Masutti} +\date{Distributed Systems 1 Project -- Academic Year 2025--2026} + +\begin{document} + \maketitle + \input{01_structure} + \input{02_design} + \input{03_implementation} +\end{document}