Novell Cool Solutions: Cool Tool
A Java program to synchronize files between servers.
|Posted:||29 Jul 2003|
Please read the note from our friends in legal before using this file.
NJFSS will be a one-way file synchronization program for use in a NetWare environment. It will synchronize files and their NetWare meta-data (Trustees, IRFs, Quotas, etc) between servers.
LATEST: Version 0.8.3 is now available.
IMPORTANT: If you are syncing to a server running NetWare.1 with SP3a, do NOT use NJFSS. There are bugs in SP3a that cause NJFSS to corrupt files.
The aims of NJFSS are:
- Provide a file synchronization program that runs on a NetWare server (or a PC with a Java runtime environment and Novell Class Libraries).
- Synchronizes both file data and the NetWare meta data.
- Is robust and tries to provide useful error messages, not just Java stack traces. In my opinion, Java stack traces are meant for developers, not for end users.
- Easy to recover from system failures, i.e. you don't need to spend all weekend re-building databases.
- User-defined configuration (directories to sync, etc) is kept separate from the programs state databases.
I've used both of Novel's previous offerings (NRS and Zen for Servers TED V1) and have not been impressed with either of them. In the end, I decided to try and do better myself. In using both of these products (and looking at peoples comments on the news groups), I think I can see how not to do things.
There are various third party file synchronization products out there, but most of them run from a PC and don't copy NetWare information. The only one that does handle NetWare information (that I'm aware of) is the "sync" command, part of TaskMaster from Avanti Technology Software.
I have yet to try RSync - but that only works from a NetWare 6 server I believe. NJFSS will work on any NetWare 5 or 6 server, with the Novell Java Virtual Machine and the Novell Java libraries. In theory, it should work on NetWare 4 (as the JVM 1.1.7b can be installed on NetWare 4.11) but I haven't tried it yet. It will also work from a client PC with a Java virtual machine, and Novell Java libraries installed.
Version one of NJFSS will provide synchronization between servers.
Version two will be a distributed version, with processes running on both master and replica servers, maintaining state databases to improve performance.
Version 0.8.3 is currently available for download , and has the following limitations/bugs:
- The logging still needs some work to improve its output, and to allow users to change the amount of information they get. Feel free to make suggestions as to what you would like to see in the log output.
- It is possible to "confuse" (i.e. crash) NJFSS if you delete files from the master before all the slaves have synced them.
- For some reason, NJFSS can get confused about trustees on certain files. I suspect this is due to a file system error, but I'm not 100% sure.
- You MUST use the QUIT command from the NJFSS screen to shutdown NJFSS. Do not use "java -kill" or "java -ext" or "unload java", otherwise you will abend your server.
Version 0.8.3 - Changes from Version 0.8.1.3
- NJFSS.NCF provided. I now supply an NCF file for use to start NJFSS. This help solve most of the problems people were having starting NJFSS.
- Config File validation. NJFSS now uses XML Schema to validate the config file. This isn't 100% perfect, but it helps a lot. The only downside is the parameters in the config file now have to be in the order specified in the config page.
- NoRM Interface. You now get an entry in the NoRM, from which you can monitor NJFSS.
- Added the option to allow slaves to purge files they have deleted.
- Added the startupdelay option to allow you to delay a server (master or slave) from starting up. Useful for reducing the load on a system at start-up.
- Added the minfreespace option to specify how much free space must exist on the destination volume before attempting synchronization.
- Added the retryinterval option to specify how long to wait before retrying, after an error prevented a synchronization occurring.
Version 0.8.1.3 - Changes from Version 0.8.1
- Improved Trustee synchronizations is still not perfect, but NJFSS does not hang anymore when syncing trustees.
- Added code to check the CLASSPATH. This is the most common error people have when starting with NJFSS
- NJFSS now notifies when a synchronization server dies unexpectedly the thread would silently die.
- Added auto-reconnection code. NJFSS should be able to auto-reconnect to a remote server if the remote server re-boots.
Version 0.8.1 Changes from Version 0.8:
- Fixed a bug which prevented the deletion of directories marked read-only.
- Trustee synchronization appears to be working! Use the new
tag in master and slaves to specify trustee synchronization.
- Previously when an error occurred during a sync, the slave would go to sleep for 50 minutes. This has been changed down to 5, and will eventually be configurable.
- Removed some spurious logging.
Changes from Version 0.7.5.3 include:
- Changed IDE from MetroWerks CodeWarrior to Borland JBuilder.
- Re-wrote large chunks of code.
- Added (and removed) code to sync Trustees and IRFs. Will try adding it back again real soon
- Started adding hooks for NoRM.
- Typing HTML causes NJFSS to write a file (output.html) to the current working directory, which shows the current state of NJFSS. (This output will eventually be shown via NoRM.)
- No longer requires gtgnjutil. (What a mistake that was.)
- Tried to improve the shutdown procedure. (Still not perfect, but it does throw fewer exceptions.)
- Added the "auto" switch to the sync frequency tag. With this, the slave will go to sleep, and will get woken up by the master when the master detects a change.
Changes from version 0.7 include:
- Logging output is now configurable to a degree. (Look at the XML configuration file for more info.)
- NJFSS doesn't stop if one slave server becomes unavailable. (I'm currently trying to get NJFSS to be able to recover if a server goes down.)
- You can now exclude files from synchronization prefix & suffix.
- Tidied up large chunks of code.
- Changed more logging statements to use log4j rather than using System.err.
- Added startsync and stopsync tags for master and slave to specify times of day to sync.
- Allowed for once a day synchronization.
This document explains how to set-up the JRE to run this programs from a PC.
NJFSS can be run in two modes: manual and server.
In manual mode, NJFSS does a single synchronization pass. You run it by typing: java NJFSS.NJFSS source destination where source and destination are specified as SERVER/VOLUME/DIR/DIR. NJFSS synchronizes the contents of source and destination. This will only work from a Windows PC which is already authenticated to NDS.
In server mode, you provide NJFSS with an XML configuration file and it runs continuously. The XML configuration file is documented here . To start NJFSS in server mode use the njfss.tpl file supplied as part of the ZIP package. You can run NJFSS in server mode from either a PC or a NetWare server. (NetWare 4 users will need to download the JVM for NetWare from support.novell.com).
When syncing a large number of files/directories, Java may run out of memory. In your NJFSS.NCF, comment out the "envset NJFSS_JAVA_OPTS=" line, and un-comment the "envset NJFSS_JAVA_OPTS=-mx256M" line.
This product includes software developed by the Apache Software Foundation http://www.apache.org/, specifically the Xerces XML parser, Xalan XSLT engine and log4j loging library. These products are Copyright (c) 1999 The Apache Software Foundation. All rights reserved. The full Apache software license can be viewed here. The rest of the code is my own work.
If you have any comments or suggestions, please contact me at email@example.com. Also let me know if you are using NJFSS. Last updated 07/06/03.