|
From: Jonathan L. <jon...@ee...> - 2008-12-11 04:02:29
|
Seems reasonable.
Both ideas (lastPingTime and a weighted probability based on age) seem
to be independent.
Some of the code is more CPU intensive than it should be (e.g.,
looping through potentially long lists), and that is a slight downside
to the function approach vs a set, but this probably isn't a big deal.
-jonathan
On Dec 10, 2008, at 10:40 PM, Eric Chan-Tin wrote:
> okay. I think I might have misunderstood you. Your idea of
> lastPingTime
> looks interesting.
>
> My idea is to introduce a probability function. Right now, it just
> randomly picks one of the neighbors. What I am thinking it might do is
> that instead of just randomly picking a neighbor, pick a neighbor
> based
> on some function. So, the neighbor whose lastUpdateTime is oldest will
> have a higher chance of being picked than a neighbor who was just
> updated.
>
> Does that make more sense?
>
> -Eric
>
> Jonathan Ledlie wrote:
>>
>> Hmm. The advantage of lastPingTime is that you learn whether or not
>> you've tried to contact a neighbor and they haven't responded.
>> Then you
>> can use that knowledge to determine whether or not to toss them.
>>
>> Maybe I'm not understanding your suggestion then.
>>
>> -jonathan
>>
>> On Dec 10, 2008, at 12:51 PM, Eric Chan-Tin wrote:
>>
>>> That's a good idea. Here is a little twist on it.
>>>
>>> Put a "weight" on each neighbor, based on the lastUpdateTime. So if
>>> currentTime - neighbor's lastUpdateTime, then the weight is higher.
>>> Then in getNeighborToPing, neighbor's with higher weight have a
>>> higher
>>> probability of getting picked than neighbor's with lower weight.
>>>
>>> The weight could be ( (currentTime - lastUpdateTime) / 15 minutes).
>>> It's not 10 minutes so as to avoid a probability of 1 if the
>>> lastUpdateTime was the previous performMaintenance. This should also
>>> avoid the problem of always pinging the oldest neighbor since it's
>>> about probability (weight).
>>>
>>> It seems a little bit less complicated than having lastPingTime and
>>> MIN_UPDATE_TIME.
>>>
>>> -Eric
>>>
>>> On Dec 10 2008, Jonathan Ledlie wrote:
>>>
>>>>
>>>> This is an interesting situation. Let's think about the goal. The
>>>> goal is to keep pinging the same nodes as long as they are alive,
>>>> and to replace a node soon after it dies, keeping the total number
>>>> of up neighbors at approximately MAX_NEIGHBORS.
>>>>
>>>> How about the following:
>>>> - when you pick a neighbor to ping, you set a time on that event
>>>> (in
>>>> a new per-neighbor timestamp LastPingTime)
>>>> - when you first insert a neighbor, set this timestamp to 0.
>>>> - when you loop in performMaintenance, remove nodes whose
>>>> LastPingTime - LastUpdateTime > threshold (like 10 minutes)
>>>>
>>>> - when picking a node, pick the guy with the oldest LastPingTime
>>>> (not sure about this one -- I don't like situations where you pick
>>>> the absolute *oldest* because then we could get in a situation
>>>> where
>>>> an old guy sits there, waiting to be kicked out, and we keep
>>>> picking
>>>> him to be pinged; I'd prefer to pick randomly, or random older
>>>> guys).
>>>> - a simple way around this is to simply have a self-adjusting
>>>> threshold: so, we walk through the nodes, and everyone whose
>>>> LastPingTime is older than MIN_UPDATE_TIME_TO_PING ago (a relative
>>>> time) get added to a set; we pick a guy randomly from the set to
>>>> ping. If the set is empty, we increase MIN_UPDATE_TIME_TO_PING,
>>>> and
>>>> wait for the next time the function is called. If the set is too
>>>> large (relative to a fraction of MAX_NEIGHBORS), we decrease it.
>>>>
>>>> We still might get some churn from lost UDP packets. You might
>>>> also
>>>> give nodes a second chance to be pinged by including LastPingTime -
>>>> LastUpdateTime > 1 minute in the set. Note that increases and
>>>> decreases in MIN_UPDATE_TIME_TO_PING shouldn't be affected by the
>>>> number of nodes that fall into this category.
>>>>
>>>> We still probably need a way for new potential neighbors to be
>>>> rejected if our current set of neighbors is fine. Because I still
>>>> want addNeigbor to really add the neighbor, how about putting a
>>>> check before calling that to see if we need more neighbors.
>>>>
>>>> What thinks?
>>>>
>>>> -jonathan
>>>>
>>>> On Dec 9, 2008, at 11:37 PM, ext Eric Chan-Tin wrote:
>>>>
>>>>> Peter,
>>>>>
>>>>> Thanks. That fixed it.
>>>>>
>>>>> However, here is another problem I found while deploying Pyxida
>>>>> and
>>>>> running them for a while.
>>>>>
>>>>> In performMaintenance(), I loop through every neighbor and if
>>>>> (neighbor.getLastUpdateTime() < current_time - 10 minutes), then I
>>>>> remove that neighbor.
>>>>
>>>>
>>>>>
>>>>>
>>>>> In NCManager, I call getNeighborToPing, which randomly picks one
>>>>> of
>>>>> the
>>>>> neighbors (32 in this case). Pinging is performed every 10
>>>>> seconds, so
>>>>> in 10 minutes, you can ping 60 nodes. However, if a neighbor A
>>>>> is not
>>>>> among those 60 nodes, it will get kicked out in
>>>>> performMaintenance(),
>>>>> although A is still alive (it just hasn't been contacted yet).
>>>>>
>>>>> There are some possible options.
>>>>>
>>>>> 1) Increase the timeout period from 10 minutes to ?? minutes. This
>>>>> doesn't quite work because say in Azureus, the number of
>>>>> neighbors is
>>>>> 512, so the timeout needs to be increased even more... It could
>>>>> be a
>>>>> function of MAX_NEIGHBORS...
>>>>>
>>>>> 2) When Pyxida replies to a ping request, it will update the
>>>>> neighbor's
>>>>> lastUpdateTime. This does not quite work either because it
>>>>> assumes a
>>>>> symmetric relationship which is most likely not the case.
>>>>>
>>>>> 3) Introduce some more logic to Pyxida so it remembers what
>>>>> nodes it
>>>>> contacted and does not send, say, more than 2 requests in 10
>>>>> minutes to
>>>>> the same node. This solution isn't that great either.
>>>>>
>>>>> Let me know what you guys think. I am currently leaning towards
>>>>> option
>>>>> 1) but make the timeout period a function of MAX_NEIGHBORS,
>>>>> although I
>>>>> haven't quite found the perfect function yet.
>>>>>
>>>>> Here are some preliminary results. I compared the number of
>>>>> neighbors
>>>>> which are the same at each reported time (10 minutes). Before
>>>>> the fix,
>>>>> more than 50% of the neighbors changed within 10 minutes. After
>>>>> the
>>>>> fix,
>>>>> only about 30% of the neighbors changed within 10 minutes. It is
>>>>> more
>>>>> stable but I think 30% is still quite a big number.
>>>>>
>>>>> Sorry for the long email :)
>>>>>
>>>>> -Eric
>>>>>
>>>>> Peter Pietzuch wrote:
>>>>>> Hi,
>>>>>>
>>>>>> Eric Chan-Tin wrote:
>>>>>>> for (RemoteState<T> neighbor : neighbors) { //this is line 1029
>>>>>>> if (neighbor.getLastUpdateTime() < (curr_time -
>>>>>>> MAINTENANCE_PERIOD)) {
>>>>>>> neighbors.remove(neighbor);
>>>>>>> }
>>>>>>> }
>>>>>>
>>>>>> IIRC you can't modify a collection while iterating over it
>>>>>> using the
>>>>>> above for loop. Instead you have to use a proper
>>>>>> Iterator<RemoteState<T>> and use it's remove method.
>>>>>>
>>>>>> Cheers,
>>>>>> Peter
>>>>>>
>>>>>>> Jonathan Ledlie wrote:
>>>>>>>> On Nov 3, 2008, at 3:46 PM, Eric Chan-Tin wrote:
>>>>>>>>
>>>>>>>>> Jonathan,
>>>>>>>>>
>>>>>>>>> I can insert some code to fix this and it doesn't look too
>>>>>>>>> hard
>>>>>>>>> but I do
>>>>>>>>> have some concerns.
>>>>>>>>>
>>>>>>>>>> I don't remember observing this behavior in our PL
>>>>>>>>>> deployment, but that could have been because we had the ping
>>>>>>>>>> time set
>>>>>>>>>> to 1-2 minutes, IIRC.
>>>>>>>>> The default ping time was set to 10 seconds + some Gaussian
>>>>>>>>> distribution,
>>>>>>>>> so that's what I used, but changing the ping time to 1 minute
>>>>>>>>> or more
>>>>>>>>> will
>>>>>>>>> result in the same effect except it will take longer for the
>>>>>>>>> "cycle" to
>>>>>>>>> occur.
>>>>>>>>>
>>>>>>>>> What I have in mind was the following:
>>>>>>>>>
>>>>>>>>> 1) In NCClient.addNeighbor() would be changed to (in
>>>>>>>>> pseudocode)
>>>>>>>>> protected boolean addNeighbor(RemoteState<T> guy) {
>>>>>>>>> boolean added = false;
>>>>>>>>> //if neighbors.size() >= MAX_NEIGHBORS
>>>>>>>>> //Check last update time of each neighbor in
>>>>>>>>> neighbors
>>>>>>>>> //neighbor.getLastUpdateTime()
>>>>>>>>> //if any of them is older than some number
>>>>>>>>> TIMEOUT,
>>>>>>>>> remove the oldest one, then add "guy" to neighbors
>>>>>>>>> //else don't add "guy" to neighbors
>>>>>>>>> //else add "guy" to neighbors
>>>>>>>>> }
>>>>>>>>>
>>>>>>>> IMO this shouldn't be the behavior of this function because it
>>>>>>>> is called
>>>>>>>> "addNeighbor." Instead what could happen is that part of the
>>>>>>>> performMaintenance() function could remove old neighbors.
>>>>>>>>
>>>>>>>>> 2) In NCManager, getGossipNode() would just pick a random node
>>>>>>>>> from
>>>>>>>>> localNC.primaryNC.getNeighbors() to send a request to every 10
>>>>>>>>> seconds.
>>>>>>>>>
>>>>>>>>> 3) Pyxida will still keep track of all GossipNodes in the
>>>>>>>>> network. It
>>>>>>>>> could
>>>>>>>>> also (say every 10 minutes) check its NCClient.neighbors list
>>>>>>>>> and see if
>>>>>>>>> any neighbor is older than TIMEOUT, remove it, then pick a
>>>>>>>>> random
>>>>>>>>> GossipNode to send a ping request.
>>>>>>>>>
>>>>>>>>> The main problem with this scheme is that one Pyxida node
>>>>>>>>> would
>>>>>>>>> most
>>>>>>>>> likely
>>>>>>>>> stay with the same set of neighbors all the time. Its
>>>>>>>>> coordinates
>>>>>>>>> would be
>>>>>>>>> greatly affected by those 32 nodes (I am assuming
>>>>>>>>> MAX_NEIGHBORS
>>>>>>>>> = 32).
>>>>>>>>>
>>>>>>>> Instead of (2), why not have the getNeighborToPing function
>>>>>>>> determine
>>>>>>>> the behavior? If it returns a node, then ping it. If it
>>>>>>>> returns null,
>>>>>>>> then have the NCManager pick some other node to use? If
>>>>>>>> things are
>>>>>>>> hunky-dory, getNeighborToPing() would return a node (a current
>>>>>>>> member of
>>>>>>>> the neighbor set), if we're short on neighbors, then it would
>>>>>>>> return
>>>>>>>> null. The periodic maintenance would have already tossed old
>>>>>>>> nodes, so
>>>>>>>> this would be self-sustaining.
>>>>>>>>
>>>>>>>> The "problem" you mention is fairly central to network
>>>>>>>> coordinates in
>>>>>>>> general. Sure the coordinates will be a little better the more
>>>>>>>> neighbors you have. But in a very large system talking to
>>>>>>>> everybody
>>>>>>>> isn't feasible. Peter and I have a graph in one of the
>>>>>>>> workshop
>>>>>>>> papers
>>>>>>>> which shows the effect of increasing the number of neighbors
>>>>>>>>
>>>>>>>>> I don't think the network would be partitioned, but it could
>>>>>>>>> happen. For
>>>>>>>>> example, the boostrap nodes have each other in their neighbors
>>>>>>>>> list.
>>>>>>>>> Every
>>>>>>>>> new node bootstrapping to the network would contact those
>>>>>>>>> bootstrapping
>>>>>>>>> nodes first and add them to their neighbors. So every Pyxida
>>>>>>>>> node could
>>>>>>>>> have as its neighbors the "Bootstrap nodes", which would make
>>>>>>>>> Pyxida
>>>>>>>>> become
>>>>>>>>> a centralized system.
>>>>>>>>>
>>>>>>>> As long as the initial bootstrap list is large enough, I think
>>>>>>>> you are
>>>>>>>> right, that partitions won't be a problem.
>>>>>>>>
>>>>>>>>> One last thing: When Pyxida receives a ping request from a
>>>>>>>>> node, it does
>>>>>>>>> not update its coordinates. Is there any particular reason for
>>>>>>>>> that?
>>>>>>>>> Is it
>>>>>>>>> because Pyxida will not be able to calculate the RTT?
>>>>>>>>>
>>>>>>>> Yes.
>>>>>>>>
>>>>>>>>> Also, there is no "gossiping" of other nodes' coordinates,
>>>>>>>>> right? So if A
>>>>>>>>> has B in its neighbors list, it will from time to time tell
>>>>>>>>> other nodes
>>>>>>>>> about B's coordinates. I realize this has a lot of
>>>>>>>>> complications but the
>>>>>>>>> original Vivaldi paper was very fuzzy about this point and the
>>>>>>>>> previous
>>>>>>>>> point that it seems it is up to the implementors to decide
>>>>>>>>> what
>>>>>>>>> to do.
>>>>>>>>>
>>>>>>>> I don't think we are doing this. It could be useful in certain
>>>>>>>> circumstance (e.g., picking potential new neighbors), but we're
>>>>>>>> not, IIRC.
>>>>>>>>
>>>>>>>>> I will have to think some more about this as there are a lot
>>>>>>>>> of
>>>>>>>>> nasty
>>>>>>>>> little side effects that could happen, but these are my
>>>>>>>>> thoughts.
>>>>>>>>>
>>>>>>>>> Thanks,
>>>>>>>>>
>>>>>>>>> -Eric
>>>>>>>>>
>>>>>>>> Sounds good.
>>>>>>>>
>>>>>>>> -jonathan
>>>>>>>>
>>>>>>>>> On Nov 3 2008, Jonathan Ledlie wrote:
>>>>>>>>>
>>>>>>>>>> Eric,
>>>>>>>>>>
>>>>>>>>>> Based on a look at the code just now, I see where you are
>>>>>>>>>> coming from:
>>>>>>>>>> with these params on PL, there isn't anything stopping the
>>>>>>>>>> neighbor
>>>>>>>>>> list from circulating pretty quickly through all nodes. In
>>>>>>>>>> the
>>>>>>>>>> Azureus implementation, the guys fed to the alg (fed to
>>>>>>>>>> processSample)
>>>>>>>>>> weren't changing much because they were coming from the
>>>>>>>>>> routing finger
>>>>>>>>>> tables. I don't remember observing this behavior in our PL
>>>>>>>>>> deployment, but that could have been because we had the ping
>>>>>>>>>> time set
>>>>>>>>>> to 1-2 minutes, IIRC.
>>>>>>>>>>
>>>>>>>>>> Do you want to insert some code that will fix this?
>>>>>>>>>> Basically
>>>>>>>>>> we want
>>>>>>>>>> to only add a new neighbor if our oldest neighbor should be
>>>>>>>>>> tossed (or
>>>>>>>>>> if we haven't reached MAX_NEIGHBORS). It's probably best
>>>>>>>>>> from a
>>>>>>>>>> clarity standpoint if addNeighbor does continue to actually
>>>>>>>>>> add the
>>>>>>>>>> neighbor in all cases. Probably the best thing to do is to
>>>>>>>>>> have
>>>>>>>>>> NCClient drop old neighbors internally and have NCManager ask
>>>>>>>>>> it which
>>>>>>>>>> nodes should be pinged via getNeighborToPing. So NCClient
>>>>>>>>>> would
>>>>>>>>>> continue to have the same behavior on processSample (it
>>>>>>>>>> would not
>>>>>>>>>> reject new information) and NCManager and NCClient would
>>>>>>>>>> cooperate to
>>>>>>>>>> measure RTTs to current neighbors. We do want to make sure,
>>>>>>>>>> however,
>>>>>>>>>> that the gossip set stays large enough so that partitions
>>>>>>>>>> don't occur.
>>>>>>>>>>
>>>>>>>>>> Do you want to be added to the SourceForge Pyxida developers
>>>>>>>>>> to make
>>>>>>>>>> this change? (Please test it out carefully first.)
>>>>>>>>>>
>>>>>>>>>> -jonathan
>>>>>>>>>>
>>>>>>>>>> On Oct 30, 2008, at 11:32 AM, ext Eric Chan-Tin wrote:
>>>>>>>>>>
>>>>>>>>>>> Jonathan,
>>>>>>>>>>>
>>>>>>>>>>> From what I saw, eventually, you learn about all the nodes
>>>>>>>>>>> in
>>>>>>>>>>> the
>>>>>>>>>>> network. Every 10 seconds, Pyxida picks a random "Gossip"
>>>>>>>>>>> node from
>>>>>>>>>>> its
>>>>>>>>>>> list and sends a request. The Gossip node will reply back
>>>>>>>>>>> with an
>>>>>>>>>>> "upNeighbor", that is, a "Gossip" node that is "up" or
>>>>>>>>>>> with 10%
>>>>>>>>>>> probability, a node that is "pending". Since naturally, all
>>>>>>>>>>> the nodes
>>>>>>>>>>> bootstrap off the same set of nodes, every node will
>>>>>>>>>>> eventually know
>>>>>>>>>>> of
>>>>>>>>>>> every other node.
>>>>>>>>>>>
>>>>>>>>>>> Pyxida might not be rotating through everybody continuously
>>>>>>>>>>> (although
>>>>>>>>>>> eventually, since it knows everybody, it will have added
>>>>>>>>>>> everybody to
>>>>>>>>>>> its Neighbors list at some point), but could be removing a
>>>>>>>>>>> node that
>>>>>>>>>>> is
>>>>>>>>>>> "alive". So, if MAX_NEIGHBORS = 32, let's call them A_1,
>>>>>>>>>>> A_2,
>>>>>>>>>>> ...,
>>>>>>>>>>> A_32.
>>>>>>>>>>> Pyxida picks a random Gossip node B, sends it a request
>>>>>>>>>>> and B
>>>>>>>>>>> replies
>>>>>>>>>>> back. Pyxida will add B to its Neighbors list, see that
>>>>>>>>>>> size of
>>>>>>>>>>> Neighbors > MAX_NEIGHBORS, kick A_1 out. Then from those 32
>>>>>>>>>>> neighbors
>>>>>>>>>>> A_2, ...., A_32, B, it will calculate the force, and apply
>>>>>>>>>>> it
>>>>>>>>>>> to the
>>>>>>>>>>> current system coordinates. Thus, if every 10 seconds,
>>>>>>>>>>> Pyxida
>>>>>>>>>>> picks a
>>>>>>>>>>> different set of nodes C, D, E, etc... it would keep kicking
>>>>>>>>>>> nodes out
>>>>>>>>>>> of the neighbors list.
>>>>>>>>>>>
>>>>>>>>>>> It's the "kicking A_1 out" part that seemed a bit confusing.
>>>>>>>>>>> Churn
>>>>>>>>>>> is a
>>>>>>>>>>> good reason but you don't check that A_1 might still be
>>>>>>>>>>> alive
>>>>>>>>>>> or maybe
>>>>>>>>>>> A_1 was just added. I have been printing the neighbors list
>>>>>>>>>>> every 10
>>>>>>>>>>> minutes, and they are completely different between those 10
>>>>>>>>>>> minutes.
>>>>>>>>>>>
>>>>>>>>>>> One possible problem might be that I am choosing the value
>>>>>>>>>>> of
>>>>>>>>>>> MAX_NEIGHBORS to be too small. Originally it was set to 512
>>>>>>>>>>> (which was
>>>>>>>>>>> meant for Azureus). Since I am using Planetlab where there
>>>>>>>>>>> are about
>>>>>>>>>>> 400-500 "stable" nodes, I changed the value to 32. But I
>>>>>>>>>>> don't think
>>>>>>>>>>> that should be a problem since log(n) = log(512) = 9.
>>>>>>>>>>>
>>>>>>>>>>> Thanks,
>>>>>>>>>>>
>>>>>>>>>>> -Eric
>>>>>>>>>>>
>>>>>>>>>>> Jonathan Ledlie wrote:
>>>>>>>>>>>> Eric,
>>>>>>>>>>>>
>>>>>>>>>>>> Glad to hear it. Let Peter and me know if you publish
>>>>>>>>>>>> anything using
>>>>>>>>>>>> Pyxida and we can put it on the web page.
>>>>>>>>>>>>
>>>>>>>>>>>> "Gossip" nodes are for learning about the network.
>>>>>>>>>>>> "Neighbors" are
>>>>>>>>>>>> for
>>>>>>>>>>>> constructing the coordinate.
>>>>>>>>>>>>
>>>>>>>>>>>> So, IIRC, the gossip process learns about nodes that may or
>>>>>>>>>>>> may not
>>>>>>>>>>>> be
>>>>>>>>>>>> applied to the neighbor list. That is, we may eventually
>>>>>>>>>>>> learn
>>>>>>>>>>>> about a
>>>>>>>>>>>> large portion of the network, via gossiping, but should
>>>>>>>>>>>> only
>>>>>>>>>>>> be using
>>>>>>>>>>>> MAX_NEIGHBORS at any given time for coordinate computation.
>>>>>>>>>>>> The
>>>>>>>>>>>> reason
>>>>>>>>>>>> we don't want to use a fixed set of neighbors for
>>>>>>>>>>>> coordinate
>>>>>>>>>>>> computation
>>>>>>>>>>>> is because nodes may come and go from the system. However,
>>>>>>>>>>>> it should
>>>>>>>>>>>> not be the case that we just rotate through everybody,
>>>>>>>>>>>> because
>>>>>>>>>>>> then, as
>>>>>>>>>>>> you note, we'd be computing against everyone's coordinate/
>>>>>>>>>>>> latency,
>>>>>>>>>>>> and
>>>>>>>>>>>> this is counter to the point of network coordinates.
>>>>>>>>>>>> With this
>>>>>>>>>>>> gradual
>>>>>>>>>>>> transience as a desirable quality in mind, I am pretty
>>>>>>>>>>>> sure we
>>>>>>>>>>>> maintain
>>>>>>>>>>>> neighbors in a fairly fixed manner. Does this not seem to
>>>>>>>>>>>> be the
>>>>>>>>>>>> case
>>>>>>>>>>>> to you?
>>>>>>>>>>>>
>>>>>>>>>>>> -jonathan
>>>>>>>>>>>>
>>>>>>>>>>>> On Oct 29, 2008, at 9:20 PM, Eric Chan-Tin wrote:
>>>>>>>>>>>>
>>>>>>>>>>>>> Hi Jonathan and Peter,
>>>>>>>>>>>>>
>>>>>>>>>>>>> First of all, just wanted to say that Pyxida has been
>>>>>>>>>>>>> working
>>>>>>>>>>>>> great on
>>>>>>>>>>>>> Planetlab for the past 4 months or so. Getting good data
>>>>>>>>>>>>> and
>>>>>>>>>>>>> experiments
>>>>>>>>>>>>> going well.
>>>>>>>>>>>>>
>>>>>>>>>>>>> However, I do have one question/comment.
>>>>>>>>>>>>>
>>>>>>>>>>>>> Every Pyxida node contains a list of Neighbors (in
>>>>>>>>>>>>> NCClient) and a
>>>>>>>>>>>>> list
>>>>>>>>>>>>> of Gossip nodes (they are called neighbors in NCManager
>>>>>>>>>>>>> but
>>>>>>>>>>>>> I will
>>>>>>>>>>>>> call
>>>>>>>>>>>>> them gossip for now so as not to confuse with the 'real'
>>>>>>>>>>>>> neighbors
>>>>>>>>>>>>> in
>>>>>>>>>>>>> NCClient). Every 10 seconds, Pyxida will pick a random
>>>>>>>>>>>>> node
>>>>>>>>>>>>> (call
>>>>>>>>>>>>> it A)
>>>>>>>>>>>>> from Gossip and send a gossip request (basically asking
>>>>>>>>>>>>> for
>>>>>>>>>>>>> rtt,
>>>>>>>>>>>>> coordinate, error). But Gossip contains all the nodes in
>>>>>>>>>>>>> the
>>>>>>>>>>>>> network.
>>>>>>>>>>>>> The comment in the code said that was to avoid Pyxida
>>>>>>>>>>>>> becoming
>>>>>>>>>>>>> lonely
>>>>>>>>>>>>> and no-one to gossip with, which makes sense.
>>>>>>>>>>>>>
>>>>>>>>>>>>> Once A responds, Pyxida will add A to its Neighbors (if
>>>>>>>>>>>>> Neighbors
>>>>>>>>>>>>> does
>>>>>>>>>>>>> not contain A) and remove the first element from the
>>>>>>>>>>>>> Neighbors list.
>>>>>>>>>>>>> This seems a little bit odd. Was there any particular
>>>>>>>>>>>>> reasoning
>>>>>>>>>>>>> behind
>>>>>>>>>>>>> this? Because it would seem like you're getting the
>>>>>>>>>>>>> coordinate from
>>>>>>>>>>>>> every node in the network eventually.
>>>>>>>>>>>>>
>>>>>>>>>>>>> Thanks a lot,
>>>>>>>>>>>>>
>>>>>>>>>>>>> -Eric
>>>>>>>>>>>>>
>>>>>>>>>>>>> Jonathan Ledlie wrote:
>>>>>>>>>>>>>> Your inclination is correct. See forwarded message.
>>>>>>>>>>>>>>
>>>>>>>>>>>>>> -jonathan
>>>>>>>>>>>>>>
>>>>>>>>>>>>>> On Apr 9, 2008, at 1:53 PM, ext Eric Chan-Tin wrote:
>>>>>>>>>>>>>>
>>>>>>>>>>>>>>> Thank you for the clarification.
>>>>>>>>>>>>>>>
>>>>>>>>>>>>>>> I've been reading through your published papers and code
>>>>>>>>>>>>>>> and I
>>>>>>>>>>>>>>> must
>>>>>>>>>>>>>>> say I learned a lot about how Pyxida works :)
>>>>>>>>>>>>>>>
>>>>>>>>>>>>>>> I still have a quick and easy (hopefully) question. Each
>>>>>>>>>>>>>>> Pyxida
>>>>>>>>>>>>>>> node
>>>>>>>>>>>>>>> has a small amount of neighbors and learn about other
>>>>>>>>>>>>>>> nodes
>>>>>>>>>>>>>>> through
>>>>>>>>>>>>>>> other nodes. I am running on about 200 machines, and it
>>>>>>>>>>>>>>> seems
>>>>>>>>>>>>>>> like all
>>>>>>>>>>>>>>> the Pyxida nodes are adding each other to their
>>>>>>>>>>>>>>> upNeighbors set.
>>>>>>>>>>>>>>> NCClient.java has the MAX_NEIGHBORS set to 512.
>>>>>>>>>>>>>>>
>>>>>>>>>>>>>>> I wanted to make sure that I am not misreading the
>>>>>>>>>>>>>>> code, but
>>>>>>>>>>>>>>> shouldn't
>>>>>>>>>>>>>>> each Pyxida node keep a small number of neighbors in its
>>>>>>>>>>>>>>> upNeighbors
>>>>>>>>>>>>>>> set. Else, it will be a lot of updates to send a
>>>>>>>>>>>>>>> gossipMessage
>>>>>>>>>>>>>>> to all
>>>>>>>>>>>>>>> 200 neighbors, and it also means that a Pyxida node has
>>>>>>>>>>>>>>> the whole
>>>>>>>>>>>>>>> network in its upNeighbors set - that seems wrong. I am
>>>>>>>>>>>>>>> inclined
>>>>>>>>>>>>>>> to
>>>>>>>>>>>>>>> change the value of MAX_NEIGHBORS but wanted to make
>>>>>>>>>>>>>>> sure
>>>>>>>>>>>>>>> that my
>>>>>>>>>>>>>>> understanding is correct first.
>>>>>>>>>>>>>>>
>>>>>>>>>>>>>>> Thank you,
>>>>>>>>>>>>>>>
>>>>>>>>>>>>>>> Eric
>>>>>>>>>>>>>>>
>>>>>>>>>>>>>
>>>>>>>>>>>>> -------------------------------------------------------------------------
>>>>>>>>>>>>>
>>>>>>>>>>>>>
>>>>>>>>>>>>> This SF.Net email is sponsored by the Moblin Your Move
>>>>>>>>>>>>> Developer's
>>>>>>>>>>>>> challenge Build the coolest Linux based applications with
>>>>>>>>>>>>> Moblin
>>>>>>>>>>>>> SDK &
>>>>>>>>>>>>> win great prizes Grand prize is a trip for two to an Open
>>>>>>>>>>>>> Source
>>>>>>>>>>>>> event
>>>>>>>>>>>>> anywhere in the world
>>>>>>>>>>>>> http://moblin-contest.org/redirect.php?banner_id=100&url=/
>>>>>>>>>>>>> _______________________________________________
>>>>>>>>>>>>> Pyxida-users mailing
>>>>>>>>>>>>> list Pyx...@li...
>>>>>>>>>>>>> https://lists.sourceforge.net/lists/listinfo/pyxida-users
>>>>>>>>> -------------------------------------------------------------------------
>>>>>>>>> This SF.Net email is sponsored by the Moblin Your Move
>>>>>>>>> Developer's challenge Build the coolest Linux based
>>>>>>>>> applications
>>>>>>>>> with Moblin SDK & win great prizes Grand prize is a trip for
>>>>>>>>> two
>>>>>>>>> to an Open Source event anywhere in the world
>>>>>>>>> http://moblin-contest.org/redirect.php?banner_id=100&url=/
>>>>>>>>> _______________________________________________
>>>>>>>>> Pyxida-users mailing list Pyx...@li...
>>>>>>>>> https://lists.sourceforge.net/lists/listinfo/pyxida-users
>>>>>>> ------------------------------------------------------------------------------
>>>>>>> SF.Net email is Sponsored by MIX09, March 18-20, 2009 in Las
>>>>>>> Vegas, Nevada. The future of the web can't happen without you.
>>>>>>> Join us at MIX09 to help pave the way to the Next Web now. Learn
>>>>>>> more and register at
>>>>>>> http://ad.doubleclick.net/clk;208669438;13503038;i?http://2009.visitmix.com/
>>>>>>> _______________________________________________
>>>>>>> Pyxida-users mailing list Pyx...@li...
>>>>>>> https://lists.sourceforge.net/lists/listinfo/pyxida-users
>>>>>>
>>>>>>
>>>>
|