[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]
decaching namespace objects from non-namespace servers
Date: Thu, 24 Jan 91 12:36 CST
From: dmitchell@APCTRC.msc.edu (Donald H. Mitchell)
We replaced what used to be our default printer with another printer. We
deleted the old printer object and added the new one. Our namespace server
never missed a beat; however, the other machines seem to depend on the
namespace they remember (must be in their worlds) and keep trying to print on
the non-existent printer.
What did I do wrong? Was there someway to prevent the non-namespace servers
from loading the namespace site object before saving the world (and thus
having the wrong default site printer)? Is there some initialization I could
add to the boot process to read the updated site object (and possibly other
MUST KNOW objects)? Shouldn't the hosts always get the updated objects for
site, network, and themselves? Shouldn't they check with the namespace server
before trying to use a host object that they remember from some long time ago?
I'm probably missing something obvious, but all the :show candidates that I've
tried give me no clues.
No, you're not missing anything. The namespace software makes heavy use
of caches, and it does a lousy job of checking that the cache is up to
date. The cache gets saved into bands, so out-of-date information can
last for a long time. The undocumented variable
NETI:*VALIDATE-ONCE-PER-BOOT* is somewhat helpful; setting it to NIL
causes some namespace caches to time out (I haven't figured out exactly
which), and NETI:*VALIDATION-RETRY-MINIMUM-WAIT* specifies the timeout
in 60ths of a second. The first variable is grossly misnamed, as far as
I'm concerned; it would be more accurately named "*VALIDATE-ONCE*",
because of the data that survives world saves. I think Optimize World
and full GC will forcibly update the namespace cache, so you can use one
of these before saving a band. You can force an update for a particular
object with
(send <object> :check-validity net:*namespace* t)
I think it does automatically reload the site and self objects these
days; we used to have (send net:*local-host* :check-validity
net:*namespace* t) in an initialization file that all our hosts load at
boot time.
barmar