0710.0270/analysis-fof_jan25.tex
1: \subsection{Failure of Fingers}
2: \begin{figure}[t]
3: 	\centering
4: 	\includegraphics[width=9cm, height=7cm]{fk_trans.eps}
5: %	\vspace*{-0.4cm}
6: 	\caption{Changes in $F_k$, the number of failed $fin_k$ pointers, due to joins, failures and stabilizations.}
7: 	\label{fig:fk-trans}
8: \end{figure}
9: 
10: We now turn to estimating the fraction of finger pointers
11: which point to failed nodes. As we will see this is an important
12: quantity for predicting lookups, since failed fingers cause timeouts
13: and increase the lookup length. However, we only need to consider
14: fingers pointing to {\it dead} nodes.
15: Unlike members of the successor list,  {\it alive} fingers even if outdated, 
16: always bring a query closer to the destination and do not 
17: affect consistency or substantially even the lookup length.
18: Therefore we consider fingers in only two states, alive 
19: or dead (failed). By our implementation of the stabilization protocol (see Sections \ref{sec:stab} and \ref{sec:fingers}),
20: fingers and successors are stabilized entirely
21: independently of each other to simplify the analysis. 
22: Thus even though the first finger is
23: also always the first successor, this information is not used by the node
24: in updating the finger. Fingers of nodes far apart 
25: are independent of each other. Fingers of adjacent nodes can be correlated 
26: and we take this into account. The only assumption in this section is 
27: in connection with the join protocol as explained below.
28: 
29: Let $f_k(r,\alpha)$ denote the fraction of nodes whose $k^{th}$
30: finger points to a failed node and $F_k(r,\alpha)$ denote the
31: respective number. For notational simplicity, we write these as simply
32: $F_k$ and $f_k$. We can predict this function for any $k$ by again
33: estimating the gain and loss terms for this quantity, caused by a
34: join, failure or stabilization event, and keeping only the most
35: relevant terms. These are listed in Table \ref{tab:f} and illustrated
36: in Fig. \ref{fig:fk-trans}
37: 
38: \begin{table}
39: \caption{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$.}
40: \label{tab:f}
41: 	\centering
42: 		\begin{tabular}{|l|l|} \hline
43: 		$F_k(t+\Delta t)$	&  \minorchange{Probability of Occurence}  \\ %\hline 
44: %		$= F_1(t)+1$ & $c_1=(\lambda_f \minorchange{N} \Delta t)(1-f_1)^2$
45: %		\\ %\hline
46: %		$= F_1(t)-1$ & $c_2= \frac{(1-\alpha)}{{\cal M}}(\lambda_s \minorchange{N} \Delta t){f_1}$ \\ \hline
47: 		%$= F_1(t)$ & $1 - (c_1 + c_2)$\\ \hline
48: 		$= F_k(t)+1$ & $c_{3.1}=(\lambda_j \minorchange{N} \Delta t) \sum_{i=1}^{k}p_{\minorchange{\it join}}(i,k)f_i$
49: 		\\ %\hline
50: 		$= F_k(t)-1$ & $c_{3.2}= (1-\alpha)\frac{1}{{\cal M}}f_k (\lambda_s \minorchange{N} \Delta t)$ \\ %\hline
51: 		$= F_k(t)+1$ & $c_{3.3}= (1-f_k)^2 [1-p_{1}(k)] (\lambda_f \minorchange{N} \Delta t)$ \\ %\hline
52: 		$= F_k(t)+2$ & $c_{3.4}= (1-f_k)^2 (p_{1}(k)-p_{2}(k)) (\lambda_f \minorchange{N} \Delta t)$ \\ %\hline
53: 	  $= F_k(t)+3$ & $c_{3.5}= (1-f_k)^2 (p_{2}(k)-p_{3}(k)) (\lambda_f \minorchange{N} \Delta t)$ \\ %\hline
54: 		$= F_k(t)$   & $1 - (c_{3.1} + c_{3.2} + c_{3.3}+ c_{3.4}+ c_{3.5})$\\ \hline		
55: 		\end{tabular}
56: \end{table}
57: 
58: %As mentioned before though $fin_1$ is always also $s_1$, 
59: %since we stabilize fingers and successors entirely independent of each other, 
60: %$f_1 \neq w_1-d_1 $.
61: %Consider the gain and loss terms for $F_1$ first. A join process does not
62: %change this number at all, hence we need only consider a 
63: %stabilization or failure event. A failure event decreases 
64: %$F_1$ by one at rate $c_1$ if \emph{both} the node that fails as 
65: %well as the node pointing its $fin_1$ pointer to it were 
66: %correct to begin with. (If 
67: %only any one of these was correct and the other failed, 
68: %the number does not change). 
69: 
70: A join event can play a role here by increasing the
71: number of $F_k$ pointers if the successor of the joinee had a failed
72: $i^{th}$ pointer (occurs with probability $f_i$) and the joinee replicated this from the successor as the joinee's 
73: \minorchange{$k^{th}$} pointer.
74: (occurs with probability $p_{\minorchange{\it join}}(i,k)$ 
75: from property~\ref{prop:copy}). For large enough $k$, 
76: this probability is one only for $p_{\minorchange{\it join}}(k,k)$, that
77: is, the new joinee mostly only replicates the successor's $k$th pointer
78: as its own \minorchange{$k^{th}$} pointer. This is what we consider here.
79: 
80: A stabilization evicts a failed pointer if there was one to begin with.
81: The stabilization rate is divided by ${\cal M}$, since a node stabilizes
82: any one finger randomly, every time it decides to stabilize a finger
83: at rate $(1-\alpha)\lambda_s$.
84: 
85: Given a node $n$ with an alive $k^{th}$ finger (occurs
86: with probability $1-f_k$), when the node pointed
87: to by that finger fails, the number of failed $k^{th}$ fingers ($F_k$) increases.
88: The amount of this increase depends on the number of immediate predecessors of $n$ that were
89: pointing to the failed node with their $k^{th}$ finger. That number of predecessors could be $0$, $1$, $2$,.. etc.
90: 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.
91: 
92: 
93: Solving for $f_k$ in the steady state, we get:
94: \begin{equation}
95: \begin{split}
96: &f_k  =  \frac {
97:  			\left[2 \tilde{P}_{rep}(k)+2-p_{\minorchange{\it join}}(k)+ \frac{r(1-\alpha)}{{\cal M}} \right]} 
98:       {2(1+\tilde{P}_{rep}(k))}\\
99:      &- \frac{
100:        			\sqrt{ \left[2 \tilde{P}_{rep}(k) + 2 - p_{\minorchange{\it join}}(k)+ \frac{r(1-\alpha)}{{\cal M}} \right]^2 
101:        - 4(1+\tilde{P}_{rep}(k))^2} 
102:       }
103:         {2(1+\tilde{P}_{rep}(k))}
104: \end{split}
105: \label{eq:fk}
106: \end{equation}
107: where $\tilde{P}_{rep}(k) = \Sigma p_i(k)$.  
108: In practice, it is enough to keep the first three terms in this sum.
109: To first order in $\frac{1}{r}$ we have, in analogy to (\ref{eq:wk-leading}),
110: \begin{equation}
111: \label{eq:fk-leading}
112: f_k  \approx  \frac {(1+\tilde{P}_{rep}(k)){\cal M}}{(1-\alpha)r}
113: \end{equation}
114: This expression simply says that the fraction of dead fingers
115: is inversely proportional to the rate of finger stabilizations,
116: $(1-\alpha)r$, and proportional to how many fingers there are
117: to stabilize, ${\cal M}$, with the proportionality factor 
118: $(1+\tilde{P}_{rep}(k))$ depending only on $\rho$. 
119: 
120: To sum up, the computation of the fraction of dead $k^{th}$ finger
121: pointers is analogous to the calculation of the fraction of
122: wrong first successor pointer, albeit a bit more involved. No
123: recursion is involved, in contrast to the calculation of the
124: fraction of wrong higher successor pointers.
125: The above expressions, (\ref{eq:fk}) match very well with the simulation  results (Fig. \ref{fig:w}).
126: 
127: 
128: 
129: 
130: 
131: 
132: 
133: 
134: 
135: 
136: 
137: 
138: 
139: 
140: 
141: 
142: