[chord] Correctness of finger table in simulator
Verdi March
verdimar at comp.nus.edu.sg
Tue Jun 8 14:32:54 EDT 2004
Hi Ion,
On Tuesday June 8 2004 am 00:26, you wrote:
> One way to "fix" this problem is to avoid inserting
> nodes in the fingerList when you hear from other
> nodes,
This means I need to run the simulator by specifying
num_location_cache = num_successors + num_finger - 1
In addition, I need to change:
n.process_request()
begin
if (empty(request_list) == True)
return;
r = request_list.remove();
//finger_list.add(r.initiator); //Don't insert cached node
//finger_list.add(r.sender); //Don't insert cached node
...
end
> and pick size(fingerList) = 2*logN + m,
> where m is the number of bits of the identifier.
> Let me know if you are interested in this approach.
Is this under the assumption that num_successor = 2*logN ?
Some of my experiments do not involved node failure and node
withdrawal -- only lookups on stable condition. For these
experiments, I think it is sufficient to use only 1 successor
(max. size of fingerList = m)?
> Ion
>
> PS. Also note that in most cases chosing
> size(fingerList) = 3*logN is good enough
> since the first log(2log(N)) proper fingers
> will be shared with the 2*log(N) successors,
> so in practice you can accommodate log(N) +
> log(2log(N)) proper fingers.
Ah, I forgot that fingerList only keep unique fingers. That's why,
its size can be smaller than (max_successors + max_fingers - 1).
However, I'm still confused about #shared_proper_finger, log(2log(N)).
By "2log(N)" do you mean "2*log(N)" or "log_2 (N)"?
Using different approach, I also arrived at the same calculation (size
of fingerList is bounded by 3*log(N)):
with s successor there will be (log(s) + 1) successors shared with the
proper fingers. Since s = 2*log(N) and max_fingers = log(N), then the
maximum size of fingerList will be log(N) + s - log(s) + 1, which is
3*log(N) - log(log(N)) + 1.
Regards,
Verdi
More information about the chord
mailing list