Coda File System

Re: IP fragmentation

From: Jan Harkes <jaharkes_at_cs.cmu.edu>
Date: Thu, 4 Nov 1999 13:12:30 -0500
On Thu, Nov 04, 1999 at 07:45:29AM +0100, Tom Ivar Helbekkmo wrote:
> One thing I've failed to understand from browsing the Coda
> documentation: _why_ is there a private re-implementation of RPC?  A
> brief summary of the reasons for this decision would be interesting,
> if someone has the time to respond.  (They must have been rather
> powerful, to be worth absorbing the cost of implementation and
> debugging, I assume?  This is difficult territory, and I was not
> surprised back when I tried to get Coda running under NetBSD before
> you folks did, and I gave up when, after many hours of debugging and
> modifying rpc2, I still failed to get authentication working.)
> 
> -tih
> -- 
> Popularity is the hallmark of mediocrity.  --Niles Crane, "Frasier"

I surely don't know all the reasons, but maybe some of them.

- RPC2 was used by AFS2. 
 Some of the system on which Coda is built was jumpstarted by using
 the AFS2 codebase to quickly get to a working implementation.

- Available technology the the time it was developed.
 TCP was in it's infancy, memory-usage and filedescriptor usage were
 the limiting factors for any network service. (think of select that
 could only handle 32 filedescriptors)

- Design objectives.
 You could as well ask, why DCOM, Corba, RX, etc. Or for that matter
 C++, Java. Or NFS/AFS/Coda, or Windows/Linux :)
 Also the multirpc implementation does a very good job at sending a
 single message to a large group of peers, without using multicast. This
 is vital for the callback breaks. Also the streaming 'side-effects' for
 bulk datatransfer, which work very well when sending one data stream to
 a group of servers, as used by Coda's active replication. There is
 simply no serious alternative without losing functionality. Which is
 also the reason I was mentioning the possibility of layering
 rpc2-on-tcp. That is not to preserve compatibility, but to preserve
 functionality of the existing implementation.

- Research.
 Multiple implementations of the same concept improve overall
 understanding of the underlying theorems.

- Availability of alternatives.
 Maybe there weren't good alternatives available 12-15 years ago.

- Portability and support.
 Ok, this is a bad excuse, but I heard it a couple of times and the
 reasoning goes a bit like this.
 What if we use product xxx to handle yyy. Well, we could, but what
 if they don't port xxx to platform zzz. Or what if they stop fixing
 bugs we find. And at some point, for some reason, implementing,
 bugfixing, and porting the code yourself looks simpler than leveraging
 off other people's sweat and tears. Luckily, the idea's behind OSS
 seem to be changing that rapidly.

f.i. switching Coda-lwp to pthreads is possible, I even have a fully
 working `glue'-layer, but we lose _all_ windows ports until a pthread
 compatible api is available on those platforms. Also GNU Pth seems to
 work exactly like LWP, and could actually be used as a drop-in
 replacement. But as it is, LWP is fast, relatively bug free ;), and
 the only drawback at this time, as far as I'm concerned, is that gdb
 isn't able to switch the stacks of the LWP-threads.

 Also recently persistent memory stores have started popping up (hmmm,
 how old is RVM by now?), Coldstore, texas, etc. They seem to require
 compiler/linker hacks and are more focussed on C++ programs.

Jan

btw. You hacked on Coda back in the Mach day's? Wow, impressive.
Received on 1999-11-04 14:23:30