\begin{frame} \frametitle{Cascading Rollbacks} \begin{exampleblock}{} \begin{tcenter} \begin{tikzpicture}[inner sep=.5mm,outer sep=.5mm] \draw [thick,->] (0,0) -- node [at end,above] {time} (7cm,0); \draw [thick,->] (0,0) -- (0,3cm); \begin{scope}[yshift=2.6cm] \node at (0,0cm) [anchor=east] {$T_1$}; \draw (.5cm,0cm) -- node [pos=1,anchor=west] {\error abort} node (w1) [pos=.1,above] {{\footnotesize $\twrite{X}$}} (6cm,0cm); \draw (.5cm,-.1cm) -- (.5cm,.1cm); \draw (6cm,-.1cm) -- (6cm,.1cm); \end{scope} \begin{scope}[yshift=1.9cm] \node at (0,0cm) [anchor=east] {$T_2$}; \draw (1cm,0cm) -- node (r1) [pos=.8,above] {{\footnotesize $\tread{X}$}} (5cm,0cm); \draw (1cm,-.1cm) -- (1cm,.1cm); \draw (5cm,-.1cm) -- (5cm,.1cm); \end{scope} \begin{scope}[yshift=1.2cm] \node at (0,0cm) [anchor=east] {$T_3$}; \draw (1.5cm,0cm) -- node (w2) [pos=.1,above] {{\footnotesize $\twrite{Y}$}} node (r2) [pos=.5,above] {{\footnotesize $\tread{X}$}} (5.5cm,0cm); \draw (1.5cm,-.1cm) -- (1.5cm,.1cm); \draw (5.5cm,-.1cm) -- (5.5cm,.1cm); \end{scope} \begin{scope}[yshift=0.5cm] \node at (0,0cm) [anchor=east] {$T_4$}; \draw (2.5cm,0cm) -- node (r3) [pos=.3,above] {{\footnotesize $\tread{Y}$}} (4cm,0cm); \draw (2.5cm,-.1cm) -- (2.5cm,.1cm); \draw (4cm,-.1cm) -- (4cm,.1cm); \end{scope} \begin{scope}[dotted,red,->,very thick] \mpause[1]{ \draw (w1) -- (r1); \draw (w1) -- (r2); } \mpause[3]{ \draw (w2) -- (r3); } \end{scope} \end{tikzpicture} \end{tcenter} \end{exampleblock} \smallskip \begin{quiz}{\textwidth}{What happens here?} \pause Note: $T_2$ and $T_3$ \emph{cannot commit} until the fate of $T_1$ is known.% \pause\smallskip When $T_1$ aborts: \begin{itemize} \item $T_2$ and $T_3$ have already read data written by $T_1$ (dirty read) \item $T_2$ and $T_3$ need to be rolled back too (\emph{cascading roll back}) \end{itemize} \pause Since $T_3$ is aborted, $T_4$ needs to be aborted as well. \end{quiz} \end{frame}