------------------------ version 2.4.7 released ----------------------------
1999-05-06 Eric Melski
* Fixed a endless looping bug caused by a failed attempt to load a
second tape in backup
1999-04-09 Eric Melski
* Changed TestTapeLabelEquality to not test the equality of the
magic numbers, because they will never match due to the way magic
numbers are stored internally.
* Fixed up BurtMtWrite and BurtMtRead. Both have more accurate
return codes now. Correctly recognizes EOT on Linux now, which is
important for multitape support. Stripped out some dead code.
* Fixed ProcessBackupInputChannel, ReadTape,
ProcessRecoverInputChannel to deal with new return codes.
* Created function GetMaxPacketSize(), which returns the maximum
size of the data block in a packet. The function encapsulates
some "magic" numbers, like the size of the packet and the size of
the header info in the packet.
1999-04-01 Eric Melski
* Removed old LoadNextBackupTape() stuff in backup
1999-03-26 Eric Melski
* Added an option to the status command; "status internalversion"
will print the rcsid strings from each module
1999-03-23 Eric Melski
* Replaced readtape and recover load next tape stuff with new
mechanism
* Created LoadNextTape(), ProcessLoadWritableTapeTimer() and
ProcessLoadReadableTapeTimer(), which together will replace
LoadNextBackupTape(), ProcessLoadNextBackupTapeTimer(),
LoadNextReadtapeTape(), ProcessLoadNextReadtapeTapeTimer(),
LoadNextRecoverTape() and ProcessLoadNextRecoverTapeTimer(); these
functions shared a lot of common code, so this consolidation
should reduce the maintenance overhead and probably the binary
size too, a little.
* Renamed SetBurtTapeLabel() to SetupTapeLabel() which is
(marginally) more descriptive
1999-03-19 Eric Melski
* Rewrote BurtBackupIsComplete() to be more readable. Ugly logic
sucks!
1999-03-17 Eric Melski
* Changed the backup, recover, and readtape startup procedures to
treat a failed tape rewind as a warning, rather than an error.
This is a (small) hack to make Burt more friendly to non-tape
devices until I figure out a better way to do it.
* Renamed GetUserBackupChannels() to EvaluateUserBackupProc(); made a
separate function for finding the name of the backupmonitor proc,
called GetUserBackupMonitorProc()
1999-03-16 Eric Melski
* Moved code to set the blocking and translation modes on the
input/stderr channels returned by a user-defined backup proc from
StartBackupChannel to GetUserBackupChannels (where that code
belongs, conceptually)
1999-03-15 Eric Melski
* Pulled the code that enables/disables backup events on all the
channels in a backup control block into separate functions
1999-03-10 Eric Melski
* Changed the format of the error messages given by
GetUserBackupChannels. The new format gives more information in a
hopefully easier to read layout.
1999-03-03 Eric Melski
* Removed an inefficiency in StartBackupChannel; originally, it
allocated a Burt_Packet on the stack, then copied that
(garbage-filled) packet to the malloc'd packet (also garbage
filled). This didn't cause any memory leaks or other problems, it
just introduced an unnecessary (and big and slow) memory copy.
1999-02-16 Eric Melski
* Fixed a bug in the calls to StartBackupChannel. In cases when
StartBackupChannel returned an error, the engine wasn't properly
noting that as a "complete" item, so the engine would never
terminate.
* Improved the error dialog from StartBackupChannel and
GetUserBackupChannels. The error messages now clearly indicate
that they came from the Burt engine (with the BURT: prefix); they
more clearly identify the error; and they include a timestamp.
1999-02-12 Eric Melski
* Replace the call to Tcl_BackgroundError in CloseBackupChannel
with an explicit write to the log channel
* Wrapped call to StartBackupChannel in CloseBackupChannel with
some code to ensure that a new backup is started to replace the
one that is finishing, provided that there remain items to backup
1999-02-11 Eric Melski
* Removed the string based backup command entirely (it has been
superceeded by the object based backup command), including the
function prototype in burtInt.h and the code in burtBackup.c
* Removed the PositionTapeForAppend function (it has been
superceeded by the AppendBackup function)
* Replaced the call to Tcl_BackgroundError in
ProcessBackupStderrChannel with an explicit write to the log
channel. This will cause errors in backupmonitor proc code to be
logged closer to the instant that they occurred, rather than
delaying that logging until the background error shows up.
* Replaced the call to Tcl_BackgroundError in
ProcessBackupInputChannel with an explicit write to the log channel.
1999-02-02 Eric Melski
* Removed entry point for the old string based backup command, to
facilitate tests of the new object based implementation
1999-01-22 Eric Melski
* Added AppendBackup(), which contains all the code which gets run
when a user runs "backup append ...." Very close now to having a
completely Tcl 8.0 object implementation of the backup command
1999-01-21 Eric Melski
* Added StartBackup(), to isolate the "backup start ..." code and
clean up the "Burt_BackupCmd". This is also in anticipation of
adding the "Burt_BackupObjCmd" (the Tcl 8.0 object version of the
command).
* Fixed numerous logic problems with the StartBackup() code, such
as some bootstrapping deals with setting the BurtStatus stuff, and
burt_complete, before actually finishing the startup code for
"backup start ..."
* Moved the check for an empty schedule to the top of the
StartBackup() code
* Changed the StartBackup() code to be more robust when initially
starting channels. If you try to start x channels and an error
occurs while trying to start the first schedule item for one of
them, StartBackup() will try to start a different schedule item,
continuing until it either successfully starts a item or it runs
out of items to try. This will only really be an issue if you
have a bug in your backup type definition.
* Changed StartBackup() to display the actual number of channels
started, instead of the requested number of channels. That is, if
you try to start x channels and y channels (y <= x, always) are
actually started, the message displayed will read "BURT: Started y
channels."
* Added a check to StartBackup() which verifies that the tape
label is not too long
* Restructured StartBackup() for greater clarity
1999-01-18 Eric Melski
* Changed BurtMtWriteLabel to return the number of bytes written on
success instead of MT_OK, so that it behaves like BurtMtWrite and
can then more accurately track the number of bytes written
1999-01-12 Eric Melski
* Replaced Tcl_GetChannelHandle/lseek with Tcl_Seek in
LoadNextBackupTape, LoadNextRecoverTape and LoadNextReadTape
* Moved the check for a zero-length schedule earlier in the order
of things checked when "backup start" is issued, and changed the
test from using BurtBackupIsComplete() to using
BurtScheduleLength() == 0, which makes the code a little clearer
1999-01-11 Eric Melski
* Moved code that prepares a tape for appending from
Burt_BackupCmd to a separate function (PositionTapeForApped)
which is called by Burt_BackupCmd
1999-01-06 Eric Melski
* Changed readtape command to leave input/log channels registered
with the interpreter when those channels haven't been opened with
the proper permissions (instead of calling Tcl_UnregisterChannel
on them, which was, in my opinion, extraordinarily rude)
* Fixed a potential buffer overflow problem in StartBackupChannel
1999-01-05 Eric Melski
* Changed schedule module to use Tcl_Alloc/Tcl_Free instead of
malloc/free, which saves me the hassle of checking that memory
really is allocated (Tcl_Alloc does it for me)
* Fixed a couple memory leaks in schedule module, in particular with
the schedule remove and schedule list commands
* Replaced a reference to "interp->result" with
Tcl_GetStringResult, in schedule module
* Changed the "mt" command to use the Tcl_Object format
1999-01-04 Eric Melski
* Changed the Tcl interface for the "schedule" command to use the
Tcl 8.0 Tcl_Object format
* Rewrote portions of the schedule module, including the functions
BurtScheduleInfo, BurtScheduleLength, BurtScheduleList,
BurtScheduleAdd, BurtScheduleRemove, and BurtScheduleGetNext, to
better emphasize the relationship between the functions and the
module, and to eliminate the need for other functions to have
access to the schedule table (I'm working towards functions that
are strongly cohesive, loosely coupled, and friendly)
* Updated the backup and recover modules to use the new function
BurtScheduleLength instead of calling BurtTableLength on the
schedule table directly, again to improve modularity
* Added checks to ensure that the input to the "schedule" command
is not so long that it overflows the storage allocated (ie, that
the host, atom, level and type specified are of length less than
BURT_MAX_HOSTLEN, BURT_MAX_ATOMLEN, BURT_MAX_LEVELLEN and
BURT_MAX_TYPELEN, respectively). The lack of checks like this
made it possible to make the Burt core dump core if given
inappropriately long input
* Made the schedule table a private member of the schedule module
(as it should have been from the start)
* Changed BurtTableLength to simply look inside the Tcl_HashTable
structure and extract the number of elements rather than walking
the table and explicitly counting them. This is much faster, it
is an O(1) operation instead of an O(n) operation.
1998-12-12 Eric Melski
* Changed log file time stamp format from [time date] to {time
date}, which allows for easier parsing from Tcl scripts
------------------------ version 2.4.1 released ----------------------------
1998-10-15 Eric Melski
* Added README containing a brief description of Burt and where to
get more information.
1998-10-14 Eric Melski
* Added ChangeLog with changes from v2.4 up.
1998-10-08 Eric Melski
* Changed installation of pkgIndex.tcl to be non-destructive.
Intead of simply overwriting whatever pkgIndex.tcl may have
existed originally, the installation will append a single line
corresponding to the new version to an existing pkgIndex.tcl.
* Changed interpretation of filemark offsets to indicate number of
filemarks from the beginning of a given tape, not from the
beginning of a backupset. This allows faster recovery of items
which have no data on the first n tapes -- instead of
fast-forwarding through those n tapes, the recover process can
just start with the appropriate tape.
1998-09-30 Eric Melski
* Added checks which ensure that the names of the Burt commands
have not already been registered within the interpreter. In case
of conflict, load of the Burt module aborts.
* Added check which ensures that the tape being read as part of an
interrupted read check (ie, when readchecks start after a tape in
a multi-tape backup is written) has a label which matches the
expected label.
------------------------- version 2.4 released -----------------------------
last modified Thursday October 15, 1998
eric melski