update

0 views
Skip to first unread message

twcho...@gmail.com

unread,
Dec 23, 2009, 1:06:58 AM12/23/09
to acis.p2p
I've been testing Deetoo on Planet-lab for the past week and the
results are not good at all.
I found two main errors.

1) network size estimation is not working;
Almost every node's estimation was between 5 and 10 even though
over 600 nodes on Planet-lab were connected initially.
please look at the following code.

short logN0 = (short)(Math.Log(_local_network_size) );
if (logN0 < 1) { logN0 = 1;}
Address target = new DirectionalAddress
(DirectionalAddress.Direction.Left);
//ISender send = new AHSender(_node, target, logN0,
AHPacket.AHOptions.Last); ///log N0-hop away node
ISender send = new AHSender(_node, target, logN0,
AHHeader.Options.Last); ///log N0-hop away node
Channel queue = new Channel(1);
_rpc.Invoke(send, queue, "sys:link.Ping",0);
queue.CloseEvent += delegate(object o, EventArgs args) {
Channel q = (Channel)o;
if (q.Count > 0) {
RpcResult rres = (RpcResult)q.Dequeue();
AHSender res_sender = (AHSender)rres.ResultSender;
AHAddress remote = (AHAddress)res_sender.Destination; ///this is
logN0-hop away node's address
AHAddress me = (AHAddress)_node.Address;
BigInteger width = me.LeftDistanceTo(remote); ///distance
between me and remote node
BigInteger inv_density = width / (logN0); ///inverse
density
BigInteger total = Address.Full / inv_density; ///new
estimation
int total_int = total.IntValue();
_local_network_size = total_int;
Console.WriteLine("this_node: {0}, remote_node: {1},
updated_netsize: {2}", me, remote, total_int);
}
};

Since AHPacket no longer exists, I replaced 'AHPacket' to
'AHHeader'.
I tested with very small network(less than 10 nodes).
if 'logN0' is 1, 'remote' should be 'me's left neighbor but remote
was always same as 'me'.
The code was working when AHPacket was used. I guess I'm missing
something but can't find by myself.

2) The second problem might be related to the first problem.
During stabilization (recalculate object's range based on network
size estimation, then remove or insert the object upon changing
connection), some objects are totally deleted in the whole network.
Like I said, this is very likely to have connection with network
size estimation problem. But just in case, I'm checking range
calculation part in my code.

Best,

David Isaac Wolinsky

unread,
Dec 23, 2009, 4:33:43 AM12/23/09
to aci...@googlegroups.com
Maybe DirectionalRouting has an issue, though its not entirely obvious
to me, compare these two:
old:
http://github.com/johnynek/brunet/blob/088a3d1e7738a2aad91182078492dbf46cea1a46/src/protocol/DirectionalRouter.cs
current:
http://github.com/johnynek/brunet/blob/cc44e202f2afa55a342c3daf484459a55073d505/src/protocol/AHSender.cs#L523

The new code should be unit testable, so my suggestion, though
frustrating as it might be, is to write some unit test code and work
from simplest to most complex. In fact all the code you're working
with, seems somewhat unit testable and could be tested without ever
deploying a single node in simulation or on planetlab. I'll be in the
office for some time today if you want any assistance.

> 2) The second problem might be related to the first problem.
> During stabilization (recalculate object's range based on network
> size estimation, then remove or insert the object upon changing
> connection), some objects are totally deleted in the whole network.
> Like I said, this is very likely to have connection with network
> size estimation problem. But just in case, I'm checking range
> calculation part in my code.
>

Let's hope 2 is fixed once 1 is.
> Best,
>
> --
>
> You received this message because you are subscribed to the Google Groups "acis.p2p" group.
> To post to this group, send email to aci...@googlegroups.com.
> To unsubscribe from this group, send email to acisp2p+u...@googlegroups.com.
> For more options, visit this group at http://groups.google.com/group/acisp2p?hl=en.
>
>
>
>

David Isaac Wolinsky

unread,
Dec 23, 2009, 11:08:38 AM12/23/09
to aci...@googlegroups.com
You could also look into crafting a XmlRpc request that uses
DirectionalAddresses to see what peer was actually returning your call.
This would probably be the first and easiest thing to test.
Reply all
Reply to author
Forward
0 new messages