[42] in Athena_Backup_System
Re: Issues raised at the "High-Level Design" review
daemon@ATHENA.MIT.EDU (Diane Delgado)
Fri Dec  2 18:06:20 1994
To: athena-backup@MIT.EDU
In-Reply-To: Your message of "Fri, 02 Dec 1994 15:54:23 EST."
             <199412022054.PAA02996@the-other-woman.MIT.EDU> 
Date: Fri, 02 Dec 1994 18:05:56 EST
From: Diane Delgado <delgado@MIT.EDU>
>There were several issues brought up at the design review that took
>place several months ago.  The most notable of these issues were our
>plans to use three technologies not developed in I/S.  Have we
>addressed all of these issues?
I agree; it's good to review these to be sure that we have everything
understood, since I'd bet someone will undoubtedly raise the same issues.
Feel free to add any more info:
  ONC - It's my understanding that (most) people agreed during the
  end of the review and after the review that ONC is perfectly 
  acceptable for us to use.
  Concerns about ONC:
  1.  Source access - Peple felt more at ease if we have this.
      We do have source for ONC.  I currently have two versions,
      the latest and a bsd-based version which is a few years old.
      The goal is to use the lastest version on those systems
      which support the X/TI interface (X/Open Transport Interface)
      (SOLARIS, AIX, ULTRIX).  The old sockets based version would
       be used if we need to port to something that does not 
       support this.  The versions claim to be interoperable.
  2.  Documentation - Both versions of ONC come with the following
      documentation: man pages, application developer guides, and
      a short paper describing the implementation of the new version.
      
   3.   Learning Curve - ONC is a fairly simple protocol which is layered
     on top of sockets or streams.  I've spent a lot of time looking
     at the code recently  and I didn't find the learning curve to
     be high at all. (My experience has been as user of various RPC's with a
     small/moderate exposure to  RPC internals).
     I've been also keeping notes as I've been doing the porting
     so anyone who needs to read the ONC code will know what we
     had to change.
   4.  I will leave MIT and no one will know how ONC works - I'm not
     planning on leaving soon, and secondly anyone who is on the
     implementation team will be highly familiar with ONC from a
     development/debugging point of view by time we are through, so
     the knowlege will be spreading amongst several people.
   5. The technology isn't standard - Well it is a standard, in fact
      It's an IETF standard.  It's also shipped by almost every unix
      vendor.  The only minus is that the vendor code isn't usually
       kerberized, which is what we will be doing.
Commercial Database
This wasn't decided at the review, but somehow was resolved outside
of the review.  I heard rumors about how, but I'm not going to repeat
them.  Tim probably can comment more on the conjecture that this
issue has been resolved and that people understand why we are going
this route.
I also note that during the review, those who objected most also
described the public domain databases as "garbage", so no-one has
yet come up with a better alternative.
Threads
This was the only item of the three which was subject to compromise.
One valid  objection centered around the use of threads with the
DBMS libraries, and that all DBMS vendors don't support threads
safe client DBMS libraries.  So what we've done here is to not
have a fully threaded master server which can handle multiple calls.
The design and implementation will, however, take into account the
fact that we may need to implement full threads support in the
future.  Thus we program in a threads-safe fashion, although we
aren't really using threads at this time.
We do use two threads in the Master server, one for all of the main
server work and a second thread which initiates the automated jobs.
This isn't a problem for the following reasons:
  1.  The scope of the auto job thread is limited and there isn't
      expected to be a lot of overlap with other work in the master.
      The interaction between the two threads will be limited and
       not hairy.
  2.  The use of threads in this case is very simple and easy to 
      understand, and it's a good introduction to threads for
      the person who will be implementing it.
  3.  The threads implementation is more elegant than other options
      (e.g., signals) and its interaction with other things like the
       dbms libraries is more predictable.
       To implement automatic job scheduling, what we are really doing
       is performing a context switch wherein at a pre-appointed time,
       we stop what we are doing and perform a different task which is
       the initiation of  the automatic jobs, and then resume the previous
       task.  The simplist way to effect this context switch is via threads, 
       since it's already done for us by the threads package.
       Since the target platform for the master is solaris and solaris
       has native threads, we might as well take advatage of them.
       I've actually prototyped this and it works.
   4.  Porting issues - For the Master, it isn't necessary that it run
       on all platforms.  If we need to migrate there are a few options:
       
        a.  use the target vendor's threads, if they exist. It isn't
            uncommon for threads to exist so this is a possiblity.
        b.  Use user-space threads - we have a user space threads package
            that we can port to platforms (DCE threads, which is already
             ported to rios, hpux, mips).
        c.  Emulated the functionality someother way with signals
            or whatever else is available.
   5.  Note that the lastest version of the ONC-RPC library has been
       made threads safe!
The last threads objection to address is : no one in dcns-dev knows 
how to program with threads.  This is not true.  I've programmed with
threads, and guess what AFS is based on threads, so surely someone
here knows AFS?  Thinking about threads while programming will also
introduce some good programming habits, such as using global variables
sparingly which contributes to readability.