Date: Fri, 14 Jan 2000 12:13:03 -0600 (CST) From: Jonathan Abbey <jonabbey@arlut.utexas.edu> To: ganymede-announce@arlut.utexas.edu Subject: [Ganymede Announce] Ganymede 0.99.9 Released Ganymede 0.99.9 is now available for download at http://www.arlut.utexas.edu/gash2/ or ftp://ftp.arlut.utexas.edu/pub/ganymede/ Mirrors: (may take a short while to update) ftp://ftp.netlag.com/ganymede/ (USA) ftp://mirror.aarnet.edu.au/pub/ganymede/ (Australia/NZ only) ftp://ftp.kddlabs.co.jp/pub/ganymede/ (KDD R&D Labs, Saitama, Japan) Ganymede is a GPL'ed metadirectory system written in Java, providing support for team management of NIS, DNS, etc. Ganymede provides a multithreaded database server with plug-in intelligence for managing directory data, custom scripting to propagate changes from the database to external directory services, and a easy to use, graphical client. -- Mostly bug fixes this time, resulting from ARL's experience running Ganymede in full production over the last couple of months. The server has been reworked to fix several deadlock vulnerabilities relating to user time out and admin console operations. The client has had several usability improvements made to it, including the ability for users to browse all objects in the tree that they have permission to view but not edit, and some threading improvements in the history panel. I had hoped to do a rework of the schema kit distribution system this time around, but I have decided that to do it right is going to involve truly major surgery on the server, so I wanted to go ahead and put out this release to tide people over for now. My current plans for the next major release are to incorporate the Xerces-Java XML parser from The Apache Group into the Ganymede server, and to support XML import/export of data from the Ganymede server. This will simplify the schema kit data importation code, and will make it possible for people to write their own code in Perl, etc., for bulk data importing into the Ganymede server. Part of this effort will involve separating schema definition information from the object database in the XML file, hopefully making it possible to independently upgrade the Ganymede server's schema and/or objects in the database. All of this will require some experimentation on my part, though, so for now, here is a nice and stable release of the Ganymede system as it exists today. -------------------- Changes from 0.99.8 to 0.99.9 ------------------- RELEASE DATE: January 13, 2000 1. [SCHEMA] Fixed gasharl schema errors a. The gasharl schema kit had a bug which made it impossible to edit a system if that system was connected to a room that had no networks listed. b. The gasharl GASHBuilderTask code is designed to handle netgroups that overflow the 1024 byte NIS line length limit, but the code that handled netgroup folding did so very inefficiently, putting only one netgroup entry per line after the first. 2. [SERVER] Fixed race condition in Qstmp stopThreaded() method The Qstmp shutdown process could throw a NullPointerException in stopThreaded() if thread timing worked out just wrong. This has been caught, and this race condition will no longer be able to prevent clean server shut-down. 3. [SERVER] Fixed various deadlock possibilities in server a. The 3 DBLock subclasses (DBReadLock, DBWriteLock, DBDumpLock) did not properly call notifyAll() on the DBStore object if they threw an exception in their establish() method. Now, all synchronized blocks in the DBLock subclasses use try..finally to guarantee that other threads waiting on DBStore will be woken up, even if something unexpected happens. The DBReadLock.establish() code had code to throw an exception if a session that possessed a write or dump lock tried to obtain a readlock at the same time. Unfortunately, the internal sessions used for the Ganymede builder tasks, expiration task, and warning task were given the same identifier as the standard 'internal' session used to process queries in the login process, so if a login was attempted during a builder task's phase1 execution, or during portions of the expire or warning task, an exception could be thrown, possibly causing threadlock if other threads had wait()'ed at that point. All this should be fixed now. b. There are several ways a user can be forced off of the Ganymede server.. the idle timer, the admin console, and the RMI unreferenced object mechanism. Previously, various essential objects in the server could get locked if the client refused to respond to the server's disconnect command. Now the client force-disconnect code is better coordinated so only one thread in the server will ever attempt to force the user to disconnect, and that thread will itself spawn a background thread to force the user to disconnect. As a result, although the server may wind up with a single dangling thread per client if the RMI system blocks trying to call the client, nothing in the server will deadlock because of it. As a result of this change, knocking a user off the system by the admin console is no longer a synchronous operation, so it may take a few seconds before the admin console updates to show the results of a user kill operation. c. The admin console code in the server had a number of problems that could lead to a deadlock that blocked any admin console operations (including the stopServer script). The server code that handles communications to/from the admin consoles have been significantly reworked so as to not be vulnerable to a threadlock condition, and some redundant operations have been pruned to reduce overhead. A number of possible race conditions have been closed. This will make the server faster and safer when admin consoles are attached, but the admin console updating is still generally synchronous. Every admin console connected to the Ganymede server will slow the server down a bit. 4. [SERVER/CLIENT] Added support for 'browse' mode in client John Knutson pointed out that the Ganymede client wasn't an adequate directory browser because it always hid things that couldn't be edited, when in fact the user had a perfect right to see everything for which he is granted view access. This was intended to be a feature of the client, that it could present a simplified tree to the user to avoid confusion, but it needlessly restricts advanced users. The server and client have now been modified so that the client can display all objects and object types viewable by the user, even if the user does not have editing permission. This is toggled by a 'Hide non-editable objects' checkbox menu item under the client's 'File' menu. I expect I may move this someplace else in the client's GUI eventually. This involved changes to GanymedeSession.java, Session.java, and CategoryTransport.java on the server, and gclient.java on the client, so a 0.99.9 server will now require a 0.99.9 client. As before, the server is really responsible for deciding what object types are reported to the client.. the client can't choose to show object types in the tree if the server doesn't report them, but the client can now ask to have all visible object types reported, which it couldn't do before. 5. [CLIENT] Reworked object folder pop-up menus in client tree display The client's object folder pop-up menus in the tree display has been reworked to be less ambiguous. The old 'List editable' and 'List all' have been changed to 'Report editable' and 'Report all', and the old 'Show All Objects' has been changed to 'Show Non-Editables', and moved to the top of the pop-up menu. Hopefully this should be less confusing for folks. 6. [SERVER] Fixed custom schema migration bug from 0.99.8 Change 0.99.8, #17, listed below, which modified how the server handles non-symmetrically linked InvidDBFields, didn't properly handle InvidDBField definitions that explicitly listed the backlinks field as the field to be linked to. Apparently, in 0.99.7 and before, the schema editor presented the backlinks field as a valid symmetric field target. Martin Schneider reported that Ganymede 0.99.8 was complaining when it came across such a field in his ganymede.db file from 0.99.7. I had the server handling invid fields with target fields set to 'none', but I hadn't handled the equivalence case of the 'backlinks' target. The Ganymede server will now treat an invid field with a target field set to field 8 (the obsolete backlinks field) in precisely the same way that it treats invid fields with no target field specified. This should make Martin's ganymede.db file from 0.99.7 work properly in 0.99.9. 7. [SERVER] Made bad login user notification optional Previously, the Ganymede server would always attempt to send notification of a bad password/login attempt to the name of the user entered at the login attempt, regardless of the configuration of the 'badpass' system event object. Now the Ganymede server will not do this unless the 'badpass' system event object in the ganymede.db database has the 'Cc: Admin' flag set. 8. [SERVER] Took out unnecessary fields in DBField.java The DBField base class had a number of redundant or unnecessary fields, including both a scalar and vector field, even though no field is both a scalar and a vector. I've removed the Vector values holding field and replaced it with accessors which will treat the single value field as a Vector as appropriate. I also took out the 'fieldID' short, which was redundant, since the DBField.getFieldDef() method already calculated that information from the field definition reference. I also took out the 'newValue' field, which was only used in one very specialized case in the userCustom plug-in, and which was better handled by putting an extra field in that custom DBEditObject subclass. This will save 10 bytes per field in the database while in memory, with probably around 40 bytes of per-field overhead remaining for scalar fields, rather more for Vector fields. Not a very big deal, but it does amount to 80-300 bytes of RAM per object in the database. For our current database, this probably saves us a megabyte of in-memory space, or around 3% of the total resident memory usage. That percentage could probably get quite a bit higher when the initial size of the server itself is amortized over larger and larger databases. This change doesn't affect the on-disk database file at all. 9. [STOPSERVER] Modified the stopServer code to prompt for supergash password Previously, if the Ganymede server's supergash ("root") password was not kept in the server's ganymede.properties file, the stopServer client would simply fail. Now, if it can't load the supergash password from the ganymede.properties file, stopServer will prompt the user for the supergash password. 10. [CLIENT] Threaded out the client's history panel to avoid locking GUI Here at ARL, our server log is getting quite large, and the round trip time for reporting on the history of changes to an object is getting large. Because of this, the client's GUI has been locked for a longer and longer time as the client's GUI thread blocks waiting for the server to report the object history. Because of this, the Ganymede client has been modified to thread out history reporting. The client's GUI will no longer lock up while the client is waiting to get a report on an object's history back. ------------------------------------------------------------------------------- Jonathan Abbey jonabbey@arlut.utexas.edu Applied Research Laboratories The University of Texas at Austin Ganymede, a GPL'ed metadirectory for UNIX http://www.arlut.utexas.edu/gash2 ---------------------------------------------------------------------------- To make changes to your subscription to the ganymede announcement list, send mail to majordomo@arlut.utexas.edu. To unsubcribe, include the line unsubscribe ganymede-announce in the body of your mail message Visit the Ganymede web page at http://www.arlut.utexas.edu/gash2 ----------------------------------------------------------------------------