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

Major optimization introduced into dev4b

Date Fri, 28 Aug 1998 03:36:08 -0500 (CDT)
From Jonathan Abbey <jonabbey@arlut.utexas.edu>

After putting Ganymede developer's pre-release dev4b on our FTP server
earlier this evening, I went out to eat Chinese food with a friend.
While at the restaurant, talking about the Ganymede server, it
occurred to me that there might be a significant optimization that
could be done in the server to cut down on its memory loading.  After
getting back to the lab and taking a look at things, it turns out that
all it took to do the optimization was to change about 30 lines of
code in the server and to recompile any DBEditObject subclasses
defined in the custom.jar file.

As a result of this optimization, Ganymede's memory footprint has been
cut by almost 60%, and the time required to bulk-load the database has
been cut in half.  Before this change, the Ganymede server with the
full ARL GASH database loaded into it would take up between 93 and 105
megabytes in memory, depending on the version of the JVM.  This is now
down to 40 megabytes.  Likewise, bulk-loading the database with the
latest JVM on our 80 mhz Sparc server used to take just over 31
minutes.  It's now down to 14 and change.  Server start time is
faster, and the server should be snappier overall during normal use.

Since no one had yet downloaded dev4b, I went ahead and integrated the
new changes into this release.  I've spent a couple of hours testing
out various permutations, but I have every reason to believe this
optimization is solid.

Here now is the full list of changes made in dev4b.

Note that if you have written your own custom DBEditObject subclasses,
you'll want to recompile them, otherwise you'll get an exception
when loading your database.

-------------------- Changes from dev4a to dev4b -------------------

Ganymede Developer Release 4b
August 27, 1998
CHANGES

RELEASE DATE: August 27, 1998

1. [CLIENT] View-only StringSelectors are double width

The StringSelector GUI components are now twice as wide as before 
when they are not being edited.  That is, the single StringSelector
panel will expand to take up the space that would have been given
to the list of choices in an editing context.

2. [SERVER] Owner Groups Now Own Themselves, Implicitly

This change allows owner groups to be self-administering, so that
group administrators (possibly with a special role) can edit the mail
delivery options for object event notification for a group.  This
change also prepares the way for group administrators with a special
role to be able to create sub-groups, and to put their administrators
in these subgroups.

The permissions logic in GanymedeSession can now handle recursive
ownership hierarchies.

3. [SERVER] Roles can be created by non-supergash admins

But the roles created cannot exceed the privileges granted to the
admin that creates the role.

4. [SERVER] Permission Bits Cleaning Implemented

The permission bits system (used by PermissionMatrixDBField) is only
loosely bound to the object/field definitions held in the schema.
Previously, the permission matrix fields would not properly drop
permission entries recorded for object or field definitions that had
been removed by the schema editor.  Now, the database-writing code for
the PermissionMatrixDBField will check all entries for validity, and
omit those entries that no longer have any application to the revised
schema. Permission entries that are redundant or pointless are
filtered out as well.

5. [SERVER] CategoryTransport fixed

The CategoryTransport object passed from the server to the client was
supposed to carry only entries for object bases that were editable by
the end user, and the categories containing such objects.  In dev4a
and prior, the CategoryTransport code that was supposed to make this
determination did a Visibility test when choosing to include Category
definitions and an Editability test when choosing to include Base
definitions.  This made for a confusing set of results in the tree for
non-supergash users/admins.

6. [CUSTOM] Miscellaneous GASH Schema Fixes

Fixed network selection error in interface custom class.  This was
preventing users from being able to create more than one interface
in a system.

7. [CLIENT] Miscellaneous Client Fixes

Fixes in some of the GUI components, and their interaction with the
server to present choices, etc.

8. [INSTALL] Changed the install script to support new schema development.

It has always been possible to install the Ganymede server without
specifying one of the schemas that we provide with the Ganymede
distribution.  Now, if the installer does not choose one of bsd,
nisonly, or gash, the installServer.perl script will go ahead and
install the scaffolding upon which custom code for a custom schema can
be built.

9. [DOCUMENTATION] Documentation on DBEditObject subclassing added.

We've added a lengthy guide to the operation of the DBEditObject
class, and how you can subclass it to implement custom logic
on the server.  A book should probably be written on this topic,
but this guide should prove a useful start on things.

10. [SERVER] Important Fixes In Invid Binding Code

The object linking code now handles 'untargeted' object reference
fields properly, both in binding and in unbinding.  The InvidDBField
code will also properly catch ambiguous link operations resulting from
improperly specified link fields in the schema.

11. [SERVER] *** Major Memory/Speed Optimization ***

Previously, all objects and all fields in the server were subclassed
from java.rmi.server.UnicastRemoteObject, which meant that as each
field and object was created, it was registered as a remotely
accessible object through the RMI system.  Now, all objects and fields
in the server are no longer subclasses of UnicastRemoteObject, but
instead are exported through the RMI system only at the time the
object or fields are accessed by the client.  This reduces the size of
the Ganymede server in RAM by a lot.  With the full ARL GASH database
loaded, the server used to take up anywhere from 93 to 105 megabytes.
After this change, it's down to 40.  Likewise, database loading time
for our GASH database is less than half of what it was.

12. [SCHEMA] Recompiled all schema files to take advantage of 11.

You will need to recompile any custom classes you may have authored,
as they are no longer subclasses of UnicastRemoteObject.

-------------------------------------------------------------------------------
Jonathan Abbey				              jonabbey@arlut.utexas.edu
Applied Research Laboratories                 The University of Texas at Austin
-------------------------------------------------------------------------------

----------------------------------------------------------------------------
To make changes to your subscription to the ganymede mailing list, send
mail to majordomo@arlut.utexas.edu.

To unsubcribe, include the line

unsubscribe ganymede

in the body of your mail message

Download ganymede from ftp.arlut.utexas.edu/pub/ganymede/.

To see the latest design specs for Ganymede, visit the Ganymede web page
at http://www.arlut.utexas.edu/gash2/
----------------------------------------------------------------------------