[gclist] Impl, terminate & obviousness

Giuliano Carlini giuliano@ix.netcom.com
Sun, 16 Jun 1996 23:08:22 -0700


Arturo,

I'm intrigued by the possibilities you claim for your algorithm, but I 
just don't see how they are correct. Perhaps I'm just not understanding 
you correctly, or perhaps we have different definitions for fundamental 
concepts. I'm hoping you'll be willing to explain in more detail. I'm not 
trying to be a smart-ass. Please forgive any poor choice of words I may use. 
I'm just trying to understand your algorithm.

First, you say that your algorithm does not use a depth first search. It 
appears to me to be so. Could you explain what differentiates you search order 
from a depth first search?

Marc presented an example with a reachable cycle ABC, in which the cycle is 
reclaimed. I was confused by your reply. So, given Marc's example, is the 
cycle reclaimed or not?

In particular, you mention a barrier design to handle this, but then seem to 
indicate that you don't use a barrier. Do you or don't you? If you don't use a 
barrier, how do you avoid falsely reclaiming a cycle if the IRG changes?

Then you say that a second method is to not destroy a "suspect", but to just 
destroy the references to it and from it. Is this what you do in the case Marc 
presents? If so, it seems like a bug to me. In your reply to a question 
regarding this, you gave a reply I didn't understand. Could you explain a bit 
more fully.

You also reject terminate messages, partly because they can be spoofed. But 
any of the messages you rely on could also be spoofed. In particular if 
"disregard" is spoofed, objects could be falsely reclaimed. This seems 
inconsistent. What don't I understand about what you are doing?

You discount encryption as a solution to spoofing. Why?

How do you handle the case where you have a large cycle, say A-B-C-...-X-Y-Z.
With such a large cycle, it is likely that several nodes will decide to 
initiate a search of the IRG at roughly the same time. Do all proceed without 
interacting with the others? If so, your algorithm is O(N^2) which is a 
problem for a huge network like the Internet. Or do they try to cooperate to 
avoid duplicating work? In this case you must avoid deadlocks. How do you do 
this?

If all are allowed to proceed, the algorithm works but is expensive. They can 
of course cooperate to avoid duplicating work. In this case, a node which has 
received AreYouRooted(I) and which then receives AreYouRooted(n) will not 
forward AreYouRooted(n). It simply waits for the replies to AreYouRooted(I), 
and reponds to both the senders of AreYouRooted(I) and AreYouRooted(N). The 
problem is that this will deadlock if implemented naively.


Best Regards,

g