cs0501069/analysis-fof.tex
1: \subsection{Failure of Fingers}
2: \begin{figure*}
3: 	\centering
4: %		\includegraphics[height=9cm, angle=270]{wd}
5: %		\includegraphics[height=9cm, angle=270]{i}
6: 		\includegraphics[height=9cm, angle=270]{f}
7: 		\includegraphics[height=9cm, angle=270]{l}
8: 
9: 		%\begin{table}[t]
10: 	   %\centering
11: 	\vspace*{-0.3cm}
12: 	\caption{Theory and Simulation for $f_k(r,\alpha)$, and $L(r,\alpha)$}
13: 	\label{fig:w}
14: \end{figure*}
15: 
16: \begin{figure}[t]
17: 	\centering
18: 	\includegraphics{fk_trans.eps}
19: 	\vspace*{-0.4cm}
20: 	\caption{Changes in $F_k$, the number of failed $fin_k$ pointers, due to joins, failures and stabilizations.}
21: 	\label{fig:fk-trans}
22: \end{figure}
23: 
24: We now turn to estimating the fraction of finger pointers
25: which point to failed nodes. As we will see this is an important
26: quantity for predicting lookups.  Unlike members of the successor list, 
27: alive fingers even if outdated, always bring a query closer to the destination and do not 
28: affect consistency. Therefore we consider fingers in only two states, alive 
29: or dead (failed).
30: 
31: Let $f_k(r,\alpha)$ denote the fraction of nodes having their $k^{th}$
32: finger pointing to a failed node and $F_k(r,\alpha)$ denote the
33: respective number. For notational simplicity, we write these as simply
34: $F_k$ and $f_k$. We can predict this function for any $k$ by again
35: estimating the gain and loss terms for this quantity, caused by a
36: join, failure or stabilization event, and keeping only the most
37: relevant terms. These are listed in table \ref{tab:f}.
38: 
39: \begin{table}
40: 	\centering
41: 		\begin{tabular}{|l|l|} \hline
42: 		$F_k(t+\Delta t)$	&  Rate of Change   \\ %\hline 
43: %		$= F_1(t)+1$ & $c_1=(\lambda_f \Delta t)(1-f_1)^2$
44: %		\\ %\hline
45: %		$= F_1(t)-1$ & $c_2= \frac{(1-\alpha)}{{\cal M}}(\lambda_s \Delta t){f_1}$ \\ \hline
46: 		%$= F_1(t)$ & $1 - (c_1 + c_2)$\\ \hline
47: 		$= F_k(t)+1$ & $c_1=(\lambda_j \Delta t)p_{\mathrm join}(k)f_k$
48: 		\\ %\hline
49: 		$= F_k(t)-1$ & $c_2= (1-\alpha)\frac{1}{{\cal M}}f_k (\lambda_s \Delta t)$ \\ %\hline
50: 		$= F_k(t)+1$ & $c_3= (1-f_k)^2 [1-p_{1}(k)] (\lambda_f \Delta t)$ \\ %\hline
51: 		$= F_k(t)+2$ & $c_4= (1-f_k)^2 (p_{1}(k)-p_{2}(k)) (\lambda_f \Delta t)$ \\ %\hline
52: 	  $= F_k(t)+3$ & $c_5= (1-f_k)^2 (p_{2}(k)-p_{3}(k)) (\lambda_f \Delta t)$ \\ %\hline
53: 		$= F_k(t)$   & $1 - (c_1 + c_2 + c_3+ c_4+ c_5)$\\ \hline		
54: 		\end{tabular}
55: \caption{Some of the relevant gain and loss terms for $F_k$, the number of nodes whose $k{th}$ fingers are pointing to a failed node for $k > 1$.}
56: \label{tab:f}
57: \end{table}
58: 
59: %As mentioned before though $fin_1$ is always also $s_1$, 
60: %since we stabilize fingers and successors entirely independent of each other, 
61: %$f_1 \neq w_1-d_1 $.
62: %Consider the gain and loss terms for $F_1$ first. A join process does not
63: %change this number at all, hence we need only consider a 
64: %stabilization or failure event. A failure event decreases 
65: %$F_1$ by one at rate $c_1$ if \emph{both} the node that fails as 
66: %well as the node pointing its $fin_1$ pointer to it were 
67: %correct to begin with. (If 
68: %only any one of these was correct and the other failed, 
69: %the number does not change). 
70: 
71: A join event can play a role here by increasing the
72: number of $F_k$ pointers if the successor of the joinee had a failed
73: $k^{th}$ pointer (occurs with probability $f_k$) and the joinee replicated this from the successor
74: (occurs with probability $p_{\mathrm join}(k)$ from property~\ref{prop:copy}). 
75: 
76: A stabilization evicts a failed pointer if there was one to begin with.
77: The stabilization rate is divided by ${\cal M}$, since a node stabilizes
78: any one finger randomly, every time it decides to stabilize a finger
79: at rate $(1-\alpha)\lambda_s$.
80: 
81: Given a node $n$ with an alive $k^{th}$ finger (occurs
82: with probability $1-f_k$), when the node pointed
83: to by that finger fails, the number of failed $k^{th}$ fingers ($F_k$) increases.
84: The amount of this increase depends on the number of immediate predecessors of $n$ that were
85: pointing to the failed node with their $k^{th}$ finger. That number of predecessors could be $0$, $1$, $2$,.. etc.
86: Using property~\ref{prop:share} the respective probabilities of those cases are: $1-p_{1}(k)$, $p_{1}(k)-p_{2}(k)$, $p_{2}(k)-p_{3}(k)$,... etc.
87: 
88: Solving for $f_k$ in the steady state, we get:
89: \begin{equation}
90: \begin{split}
91: &f_k  =  \frac {
92:  			\left[2 \tilde{P}_{rep}(k)+2-p_{\mathrm join}(k)+ \frac{r(1-\alpha)}{{\cal M}} \right]} 
93:       {2(1+\tilde{P}_{rep}(k))}\\
94:      &- \frac{
95:        			\sqrt{ \left[2 \tilde{P}_{rep}(k) + 2 - p_{\mathrm join}(k)+ \frac{r(1-\alpha)}{{\cal M}} \right]^2 
96:        - 4(1+\tilde{P}_{rep}(k))^2} 
97:       }
98:         {2(1+\tilde{P}_{rep}(k))}
99: \end{split}
100: \end{equation}
101: 
102: where $\tilde{P}_{rep}(k) = \Sigma p_i(k)$. In principle its enough to keep
103: even three terms in the sum. The above expressions match very well with the simulation 
104: results (figure \ref{fig:w}).
105: 
106: 
107: 
108: 
109: 
110: 
111: 
112: 
113: 
114: