Date: Wed, 13 Oct 1999 16:20:28 -0500 (CDT) From: Jonathan Abbey <jonabbey@arlut.utexas.edu> To: ganymede-announce@arlut.utexas.edu Subject: [Ganymede Announce] Ganymede 0.99.7 released Ganymede 0.99.7 is available at ftp://ftp.arlut.utexas.edu/pub/ganymede/ or ftp://129.116.212.1/pub/ganymede/ if your client has trouble resolving a proper address for ftp.arlut.utexas.edu. -- It's been almost 6 weeks since the last Ganymede release, and lots of things have been fixed and improved. We went into production with Ganymede this past week, and lots of the new features and fixes came about as part of that. Highlights include a fix for the old 'can't bind to localhost' problem that people had been reporting when running the Ganymede server on Linux. Thanks to Michael McEniry (mmceniry@itsc.uah.edu) for providing a very nice patch to the Ganymede server to take care of this problem. I had to take care of a whole cluster of problems from 0.99.6 that made it basically impossible to properly take a newly dumped schema file and load data into it using any of the included schema kits. I also fixed a bug introduced in 0.99.6 that broke the database rollback code. The new features include some extra sanity checking in the server's start-up code, a reworking of the builder task classes to not leak file descriptors, an idle user time-out server thread, the ability for the client to reconnect to the Ganymede server if the server is restarted while the client is loaded, and a deferred shutdown option for the server, to cleanly shut down the system without having users lose changes they are working on. -------------------- Changes from 0.99.6 to 0.99.7 ------------------- RELEASE DATE: October 13, 1999 1. [SERVER] Fixed the Ganymede server's registry binding for localhost Michael McEniry (mmceniry@itsc.uah.edu) provided a patch to Ganymede.java which corrects the problem on Linux systems with the server failing on startup with a localhost RMI registry binding permissions failure. 2. [SERVER] Fixed object deletion for multi-level nested objects Martin Schneider (martin@ira.uka.de) wrote to report that deleting objects which contained embedded objects which contain embedded objects fails on transaction commit.. the problem was that the GanymedeSession.getContainingObj() method couldn't walk the embedding stack to find the top-level parent to determine object ownership for logging purposes. GanymedeSession.getContainingObj() will now check to see if it is trying to find the parent of an embedded object which has been processed for deletion, in which case it will check the original version of the object in order to find the original parent. 3. [SERVER] Added support for regexp matching in StringDBField Added support for specifying a regular expression pattern in string fields. Modified the server and schema editor to support regular expression binding to string fields. The older 'OkChars' and 'BadChars' string field parameters are still maintained.. any change to a string field must satisfy any regular expression specified in addition to the OkChars and BadChars parameters. This change bumps the DBStore revision numbers to major: 1 minor: 14 Martin Schneider (martin@ira.uka.de) asked for this change, it seemed like a good idea to me. 4. [SERVER] Fixed server-loading bug from 0.99.6.6 Change 6 to Ganymede.java in release 0.99.6 broke loading data from a freshly dumped schema. Fixed the server initialization so that it can properly reset passwords if the password field is undefined in the supergash persona object. 5. [SERVER] Fixed schema dump bugs in DBObject.partialEmit() Since July there has been a bug in DBObject.partialEmit() which makes it impossible to successfully dump a modified schema to disk and then turn around and use it to load a new database. The problem was that when the server was dumping a ganymede.schema file, the supergash persona was being written to disk without the link to the supergash owner group (owner group 0) that gave it supergash privileges. Actually, there were a cluster of bugs in the schema dump logic. All of them have been fixed, so schema dumping should produce a clean and usable ganymede.schema file now. I knew the code for schema dumping was poorly architected, but I somehow missed the fact that it was so thoroughly broken. 6. [SERVER] Added code to protect the essential server data structures It used to be possible to manually delete the supergash owner group, which would put the ganymede.db file in an unusable state. GanymedeSession.remove_db_object() now refuses attempts to do this. In addition, the Ganymede server now checks the database schema on start-up to make sure that all of the essential database objects are defined, including the supergash persona object, the supergash owner group, the default role, and the system event objects. If any of these objects are undefined in the database on server startup, the server will now recreate them. The server still doesn't do a schema sanity check on startup, though. Still lots more work to do to clean up schema editing as a whole. 7. [SERVER] Fixed logging for IP address changes The IPDBField.getDiffString() method had an error that caused it to report the old value for a changed IP address when it was meant to be showing the new. 8. [SERVER] Added a background task to disconnect idle users The Ganymede server now has a built-in task which runs every minute to disconnect users that have been idle for a certain period of time. Currently, users with no objects checked out of the database will be disconnected after 15 minutes of idle time, and users who are in the middle of a transaction but have not done anything for a long time will be disconnected after 20 minutes of idle time. 9. [CLIENT, SERVER] Made client able to re-acquire server without restarting The Ganymede client is now able to attempt to re-acquire the Ganymede server if the server goes down while the client is running. That is, if the server goes down cleanly while the client is running, the client will close the main window, leaving the login box. The login box will now be able to attempt to bind to a new instantiation of the Ganymede server if the server has been brought back up. In order to do this properly, I had to add a new method to the RMI Server interface (Server.up()), so you'll need to install the client from Ganymede 0.99.7 for use with the 0.99.7 server, and vice-versa. Also modified the client to be more responsive to a server shut-down message, even if the user was sitting on the persona selection dialog. 10. [SERVER] Server now associates embedded objects with container in log Previously, if changes were made to an embedded object that did not result in a modification to the state of the container, the log for that change did not record that the container was involved in the transaction, making such changes invisible to the history panel of the containing object. Now, whenever an embedded object is changed, the log record for the change will be associated its container and the change will show up properly in the container's history view. 11. [SERVER,SCHEMA,DISTRIBUTION] Changes to handle descriptor starvation We put Ganymede in production at the laboratory on October 10th and quickly discovered that the Ganymede server was running into file descriptor exhaustion when builds are done at a high rate of speed. It turns out that one of the problems was that the GASHBuilderTask class in the gasharl schema kit wasn't explicitly closing the file descriptors for the Process object used to do the external build. Looking on the Java BugParade, I found bug item #4025386, which describes the problem and how to fix it. I went through all the BuilderTask classes in all the schema kits included with Ganymede and added a finally {} clause to close the Process file descriptors once the external build was done. Even after this change, I still saw the server run out of descriptors, so I put a 'ulimit -n 128' in the runServer script (64 is the default on Solaris.. the ulimit command is commented out so that people on Linux, etc., don't get an artificially low descriptor limit), and I fixed a few other places in the code where the system was unnecessarily waiting for garbage collection to close resources. File descriptor depletion is still a big issue with Ganymede, as a user with the client login window open is taking up a descriptor on the server for the RMI connection, even though the user isn't doing anything. I'm not sure how much I can do about this, since I believe the only way to force an RMI break is by allowing the remote object to be garbage collected on the client. In any case, the problem isn't so much that the Ganymede server itself is keeping an excessive number of descriptors open, but that the extensive Ganymede/GASH build process we initiate on transaction commit opens dozens of files, taking up lots of the server's descriptors along the way. Java doesn't provide any good way to manage this, but it may be a good idea to put another ulimit invocation in the script run by Ganymede? 12. [SERVER] Fixed really stupid DBEditSet rollback mistake Ugh. Ugh. Ugh. I had broken the DBEditSet rollback code with change #0.99.6.9 below. There was no way it could have ever worked. It didn't come close to working. Not even remotely plausible code. I am dum. I fixed it.. it is now both efficient and correct. 13. [SERVER] Optimized DBEditSet.commit() I reworked DBEditSet.commit() so that it doesn't need to use rollback() to handle an incompletely filled-out object at transaction commit time. Basically streamlined commit() so that it does the minimum amount of work required to check things out, without doing an unnecessary checkpoint()/rollback() pair when one or more objects in a transaction aren't completely filled out. And I checked my work, and I tested the code, this time. 14. [SERVER, ADMIN CONSOLE] Added a deferred shutdown option The server can now be told to disable logins and to shutdown the server when all users log out of the system. This is very useful for shutting the server down cleanly in a production environment. If you use the 'stopServer' script, you can now say 'stopServer -delay' to have the server do a user-friendly shutdown. If you do do 'stopServer -delay', the stopServer script will not wait for the server to shut down before exiting. If you shut the server down through the admin console, a dialog will pop up asking if you want to make the shut down deferred or not. This change involves an incompatible change to the arlut.csd.ganymede.adminSession RMI remote interface used by the server, admin console, and stopServer script. 15. [SCHEMA] Several tweaks to gasharl schema Lots of minor fix-ups to the gasharl schema code, which we are actually using in production at ARL now. ------------------------------------------------------------------------------- Jonathan Abbey jonabbey@arlut.utexas.edu Applied Research Laboratories The University of Texas at Austin Ganymede, a free NIS/DNS management system 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 ----------------------------------------------------------------------------