\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}