[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]

Nameserver worlds and Internet namespace



    Date: Thu 26 May 88 12:05:06-PDT
    From:     TYSON@Warbucks.AI.SRI.COM (Mabry Tyson)

    I had this problem and apparently some other people have had the problem,
    so I thought I'd pass it along.  I looked closely at the documentation and
    it wasn't as clear as it should be.

    If you have a nameserver for the Internet namespace, do NOT try to boot
    that machine into a world built on another machine (non-nameserver for
    the Internet) at your site.  The result will be more hours of execution
    than you will want to wait.  I let one run about 5 hours before I gave
    up on it.  I checked periodically and it was trying to reload the Internet
    namespace.  (Basically to reload the namespace it has to delete each host
    (each name?) from the full set of names.  The way it is implemented, it
    appears to be an n**2 or n**3 process.)

    I know that when I get a new release, the nameserver is one of the last
    machines I convert to running it.  I build a site-specific world on the
    other machines and slowly get everyone to convert their code.  Mostly
    independent of that, I build a world on our nameservers.  They also
    get our site system, so it is tempting to build it on top of the world
    (as an Incremental World) that we run on the other machines.  That loses
    big.  I had to go back to the distribution world, do a SET SITE, and
    load all the software (Symbolics's and ours).

I build namespace server world loads from existing incremental disk saves by
using a hack that I had developed.  I define the two functions:

(defmethod (:force-being-primary-server neti:namespace) ()
  (setf neti:file-information nil)
  (setf neti:local-server-type :primary)
  (setf neti:server-access-paths (neti:compute-server-access-paths (list neti:*local-host*)))
  (send self :set-unloaded "Forcing reload.")
  (send self :check-validity nil t))

(defun reload-namespaces ()
  (neti:keeping-namespace-server
    (neti:with-fixups
      (loop for namespace in neti:*namespace-search-list*
	    do (send namespace :force-being-primary-server)))))

run (reload-namespaces), and then disk-save the world load.  This isn't
perfect, because when you run this result world load on the namespace server,
the log of namespace changes made before the world had been disk saved is
thought to be empty.  To work around this problem, I prune the namespace
changes files before I make a new namespace server world load.

I came up with this because I was impossible to build namespace server world
loads from scratch, because during a build from scratch the namespace server
would invariably blow out with "Object/Name mismatch" error.

Actually, I have come up with another solution to the slowness of loading the
internet namespace:  I got rid of it.  Since the mailer insists on using the
domain database anyway, the internet namespace wasn't used much around here.
Eliminating the Internet Namespace has improved the performance of our
namespace servers significantly.  

Now only if the resolver worked better...