]> git.sur5r.net Git - bacula/bacula/blobdiff - bacula/kernstodo
Cosmetics for Recyle Oldest Volume
[bacula/bacula] / bacula / kernstodo
index ff138597ba342033e432647f16e80ac034754653..d4dd548770f60769747a9dbf6b3864d06c4a5c77 100644 (file)
                  Kern's ToDo List
-                  22 April 2003 
+                  22 June 2003 
 
-Documentation to do: (a little bit at a time)
+Documentation to do: (any release a little bit at a time)
 - Document running a test version.
 - Document query file format.
 - Document static linking
-- Document how to automatically backup all local partitions
 - Document problems with Verify and pruning.
 - Document how to use multiple databases.
-- Add a section to the doc on Manual cycling of Volumes.
+- For FreeBSD typical /dev/nrsa0 and for mtx /dev/pass1
+- VXA drives have a "cleaning required"
+  indicator, but Exabyte recommends preventive cleaning after every 75
+  hours of operation.
+- Lookup HP cleaning recommendations.
+- Lookup HP tape replacement recommendations (see trouble shooting autochanger)
+- Document FInclude ...
+- Document need to add "-u root" to most of MySQL script calls
+  (./create_mys... ./make_my...).
+- Document recycling algorithm.
 
           
 Testing to do: (painful)
 - that ALL console command line options work and are always implemented
 - blocksize recognition code.
 - multiple simultaneous Volumes
-
-For 1.30 release:
-- Bug: up arrow prints garbage in command line on gnome-console!
-- Bug: fix access problems on files restored on WinXP (possibly do
-       this in a later update.
-- Fix Bare Metal restore problem.
+- Test if rewind at end of tape waits for tape to rewind.
+- Test cancel at EOM.       
+- Test not zeroing Autochanger slot when it is wrong.
 - Test multiple simultaneous Volumes
-
-- Document new transparent Console commands and wait command.
-- Document new immediate File save configuration (walk user
-  through first save to file Volume with automatic Volume labeling?).
-- Document OPTIMIZE TABLE in MySQL
-- Document labeling a whole magazine using "cat"
-- Document Lutz Kittler's trick of using "Run Before Job" to
-  abort a job on a particular day.
-- Document Ludovic Strappazon's Win32 raw device save/restore.
-- Document not to restore .journal .autofsck
-- Document logrotate
-- Document . and @ commands
-- Document run when.
-
+- Test of last block is correct in JobMedia when splitting file 
+  over two volumes.
+- Test recycling and purging (code changed in db_find_next_volume and
+  in recycle.c).
 - Figure out how to use ssh or stunnel to protect Bacula communications.
 
-After 1.30:
+For 1.31 release:
+- Check that Block number in JobMedia are correct.
+- Complain if record dropped in bnet_recv because too long.
+- Suppress Job Name in Jmsg for console
+- Check Jmsg in bnet, may not work, must dup bsock.
+- Use SD returned values in report -- or add them.
+- Increment DB version prior to releasing.
+- Turn off FULL_DEBUG prior to releasing.
+- Implement forward spacing block/file: position_device(bsr) --
+  just before read_block_from_device();
+- On Windows with very long path names, it may be impossible to create 
+  a file (and thus restore it) because the total length is too long.
+  We must cd into the directory then create the file without the
+  full path name.
+- Move JobFiles and JobBytes to SD rather than FD -- more correct.
+- Add client name to cram-md5 challenge so Director can immediately
+  verify if it is the correct client.
+- Use runbeforejob to unload, then reload a volume previously used,
+  then the next job run gets an error reading the drive.
+- lstat() is not going to work on Win32 for testing date.
+- Implement a Recycle command
+- Something is not right in last block of fill command.
+- Implement List Volume Job=xxx  or List scheduled volumes or
+  Status Director 
+- Check if Incremental is working correctly when it looks for the previous Job 
+  (Phil's problem).
+- Add next Volume to be used to status output.
+- Make bootstrap filename unique.
+- The bsr for Dan's job has file indexes covering the whole range rather
+  than only the range contained on the volume.
+  Constrain FileIndex to be within range for Volume.
+- Test a second language e.g. french.
+- Start working on Base jobs.
+- Make "make binary-release" work from any directory.
+- Document c:/working directory better than /working directory.
+- Unsaved Flag in Job record.
+- Base Flag in Job record.
+- Implement UnsavedFiles DB record.
+- Implement argc/argv for daemon command line scanning using table driven
+  stuff below.
+- Implement table driven single argc/argv scanner to pickup all arguments.
+  Much like xxx_conf.c scan table.
+  keyword, handler(store_routine), store_address, code, flags, default.
+- Make | and < work on FD side.
+- Pass prefix_links to FD.
+- Implement a M_SECURITY message class.
+- From Phil Stracchino:
+  It would probably be a per-client option, and would be called
+  something like, say, "Automatically purge obsoleted jobs".  What it
+  would do is, when you successfully complete a Differential backup of a
+  client, it would automatically purge all Incremental backups for that
+  client that are rendered redundant by that Differential.  Likewise,
+  when a Full backup on a client completed, it would automatically purge
+  all Differential and Incremental jobs obsoleted by that Full backup.
+  This would let people minimize the number of tapes they're keeping on
+  hand without having to master the art of retention times.
+- Prohibit backing up archive device (findlib/find_one.c:128)
+- Make Restore report an error if FD or SD term codes are not OK.
+- Add JobLevel in FD status (but make sure it is defined).
+- Restrict characters permitted in a Resource name, and don't permit
+  duplicate names.
+- Implement new serialize subroutines
+   send(socket, "string", &Vol, "uint32", &i, NULL)
+- Audit all UA commands to ensure that we always prompt where possible.
+- Scratch Pool where the volumes can be re-assigned to any Pool.
+
+
+After 1.31:
+- When doing a Backup send all attributes back to the Director, who
+  would then figure out what files have been deleted.
+- Currently in mount.c:236 the SD simply creates a Volume. It should have
+  explicit permission to do so.  It should also mark the tape in error
+  if there is an error.
+- Make sure all restore counters are working correctly in the FD.
+- SD Bytes Read is wrong.
+- Configure mtx-changer to have correct path to mtx.
+- Look at ALL higher level routines that call block.c to be sure
+  they don't expect something in errmsg.
+- Investigate doing RAW backup of Win32 partition.
+- Add JobName= to VerifyToCatalog so that all verifies can be done at the end.
+- Add thread specific data to hold the jcr -- send error messages from
+  low level routines by accessing it and using Jmsg().
+- Cancel waiting for Client connect in SD if FD goes away.
+- Testing Tibs job erred and hung director on Storage resource.  This was
+  because there were a whole pile of jobs hanging around in the SD  
+  waiting for a connection from the FD that was never coming.
+- Possibly update all client records at startup.
+
+- Add Progress command that periodically reports the progress of
+  a job or all jobs.
+- One block was orphaned in the SD probably after cancel.
+- Add all command line arguments to "update", e.g. slot=nn volStatus=append, ...
+
+
+- Examine Bare Metal restore problem (a FD crash exists somewhere ...).
+- Implement timeout in response() when it should come quickly.
+- Implement console @echo command.
 - Implement a Slot priority (loaded/not loaded).
+- Implement "vacation" Incremental only saves.
+- Implement single pane restore (much like the Gftp panes).
 - Implement Automatic Mount even in operator wait.
 - Implement create "FileSet"?
 - Implement Release Device in the Job resource to unmount a drive.
@@ -50,39 +143,22 @@ After 1.30:
 - Implement all command line args on run.
 - Implement command line "restore" args.
 - Implement "restore current select=no"
-- Fix watchdog pthread crash on Win32
-- Fix "access not allowed" for backup of files on WinXP.
+- Fix watchdog pthread crash on Win32 (this is pthread_kill() Cygwin bug)
 - Implement "scratch pool" where tapes are defined and can be
   taken by any pool that needs them.
 - Implement restore "current system", but take all files without
   doing selection tree -- so that jobs without File records can
   be restored.
-- Implement scheduling of one time "run" jobs (i.e. instead of
-  starting immediately start at some specified time).
-- Make | and < work on FD side.
-- Pass prefix_links to FD.
-- Implement a M_SECURITY message class.
 - Implement disk spooling. Two parts: 1. Spool to disk then
   immediately to tape to speed up tape operations. 2. Spool to
   disk only when the tape is full, then when a tape is hung move
   it to tape.
-- From Phil Stracchino:
-  It would probably be a per-client option, and would be called
-  something like, say, "Automatically purge obsoleted jobs".  What it
-  would do is, when you successfully complete a Differential backup of a
-  client, it would automatically purge all Incremental backups for that
-  client that are rendered redundant by that Differential.  Likewise,
-  when a Full backup on a client completed, it would automatically purge
-  all Differential and Incremental jobs obsoleted by that Full backup.
-  This would let people minimize the number of tapes they're keeping on
-  hand without having to master the art of retention times.
-
+- Implement a relocatable bacula.spec 
 - Allow multiple Storage specifications (or multiple names on
   a single Storage specification) in the Job record. Thus a job 
   can be backed up to a number of storage devices.
-- Implement dump label to UA
+- Implement dump/print label to UA
 - Add prefixlinks to where or not where absolute links to FD.
-- Look at Python for a Bacula scripting language -- www.python.org
 - Issue message to mount a new tape before the rewind.
 - Simplified client job initiation for portables.
 - If SD cannot open a drive, make it periodically retry.
@@ -125,20 +201,16 @@ After 1.30:
 - Program files (i.e. execute a program to read/write files).
   Pass read date of last backup, size of file last time.
 - Add Signature type to File DB record.
-- Make Restore report an error if FD or SD term codes are not OK.
 - CD into subdirectory when open()ing files for backup to
   speed up things.  Test with testfind().
 - Priority job to go to top of list.
-- Find out why Full saves run slower and slower (hashing?)
 - Why are save/restore of device different sizes (sparse?)   Yup! Fix it.
 - Implement some way for the Console to dynamically create a job.
 - Restore to a particular time -- e.g. before date, after date. 
 - Solaris -I on tar for include list
-- Prohibit backing up archive device (findlib/find_one.c:128)
 - Need a verbose mode in restore, perhaps to bsr.
 - bscan without -v is too quiet -- perhaps show jobs.
 - Add code to reject whole blocks if not wanted on restore.
-- Start working on Base jobs.
 - Check if we can increase Bacula FD priorty in Win2000
 - Make sure the MaxVolFiles is fully implemented in SD
 - Check if both CatalogFiles and UseCatalog are set to SD.
@@ -146,21 +218,14 @@ After 1.30:
   records -- one per Job, maybe a JCR or some other structure with
   a block and a record.
 - Figure out how to do a bare metal Windows restore
-- Put system type returned by FD into catalog.
 - Possibly add email to Watchdog if drive is unmounted too
   long and a job is waiting on the drive.
 - Use read_record.c in SD code.
-- Why don't we get an error message from Win32 FD when bootstrap 
-  file cannot be created for restore command?
-- When Marking a file in Restore that is a hard link, also
-  mark the link so that the data will be reloaded.
 - Restore program that errors in SD due to no tape reports
   OK incorrectly in output.
 - After unmount, if restore job started, ask to mount.
 - Convert all %x substitution variables, which are hard to remember
   and read to %(variable-name).  Idea from TMDA.
-- Add JobLevel in FD status (but make sure it is defined).
-- Make Pool resource handle Counter resources.
 - Remove NextId for SQLite. Optimize.
 - Move all SQL statements into a single location.
 - Add UA rc and history files.
@@ -169,15 +234,11 @@ After 1.30:
 - Enhance time and size scanning routines.
 - Fix Autoprune for Volumes to respect need for full save.
 - Fix Win32 config file definition name on /install
-- No READLINE_SRC if found in alternate directory.
-- Test a second language e.g. french.
 - Compare tape to Client files (attributes, or attributes and data) 
 - Make all database Ids 64 bit.
 - Write an applet for Linux.
 - Add estimate to Console commands
-- Find solution to blank filename (i.e. path only) problem.
 - Implement new daemon communications protocol.
-- Remove PoolId from Job table, it exists in Media.
 - Allow console commands to detach or run in background.
 - Fix status delay on storage daemon during rewind.
 - Add SD message variables to control operator wait time
@@ -189,31 +250,20 @@ After 1.30:
   Verify level=Catalog, level=InitCatalog
 - Events file
 - Add keyword search to show command in Console.
-- Fix Win2000 error with no messages during startup.
 - Events : tape has more than xxx bytes.
-- Restrict characters permitted in a Resource name.
 - Complete code in Bacula Resources -- this will permit
   reading a new config file at any time.
 - Handle ctl-c in Console
 - Implement script driven addition of File daemon to config files.
 - Think about how to make Bacula work better with File (non-tape) archives.
 - Write Unix emulator for Windows.
-- Implement new serialize subroutines
-   send(socket, "string", &Vol, "uint32", &i, NULL)
-- Audit all UA commands to ensure that we always prompt where possible.
-- If ./btape is called without /dev, assume argument is a Storage resource name.
 - Put memory utilization in Status output of each daemon
   if full status requested or if some level of debug on.
 - Make database type selectable by .conf files i.e. at runtime
 - Set flag for uname -a.  Add to Volume label.
 - Implement throttled work queue.
-- Check for EOT at ENOSPC or EIO or ENXIO (unix Pc)
 - Restore files modified after date
 - Restore file modified before date
-- Emergency restore info:
-  - Backup Bacula
-  - Backup working directory
-  - Backup Catalog
 - Restore -- do nothing but show what would happen
 - SET LD_RUN_PATH=$HOME/mysql/lib/mysql
 - Implement Restore FileSet=
@@ -221,16 +271,23 @@ After 1.30:
   are concentrated.
 - Remove duplicate fields from jcr (e.g. jcr.level and jcr.jr.Level, ...).
 - Timout a job or terminate if link goes down, or reopen link and query.
-- Find general solution for sscanf size problems (as well
-  as sprintf. Do at run time?
 - Concept of precious tapes (cannot be reused).
 - Make bcopy copy with a single tape drive.
 - Permit changing ownership during restore.
 
+- From Phil:
+  > My suggestion:  Add a feature on the systray menu-icon menu to request
+  > an immediate backup now.  This would be useful for laptop users who may
+  > not be on the network when the regular scheduled backup is run.
+  > 
+  > My wife's suggestion: Add a setting to the win32 client to allow it to
+  > shut down the machine after backup is complete (after, of course,
+  > displaying a "System will shut down in one minute, click here to cancel"
+  > warning dialog).  This would be useful for sites that want user
+  > woorkstations to be shut down overnight to save power.
+  > 
+
 - Autolabel should be specified by DIR instead of SD.
-- Find out how to get the system tape block limits, e.g.:
-  Apr 22 21:22:10 polymatou kernel: st1: Block limits 1 - 245760 bytes.  
-  Apr 22 21:22:10 polymatou kernel: st0: Block limits 2 - 16777214 bytes.
 - Storage daemon    
   - Add media capacity
   - AutoScan (check checksum of tape)
@@ -269,13 +326,6 @@ After 1.30:
   times out jobs by asking the deamons where they are.
 - Enhance Jmsg code to permit buffering and saving to disk.
 - device driver = "xxxx" for drives.
-- restart: paranoid: read label fsf to
-  eom read append block, and go
-  super-paranoid: read label, read all files
-  in between, read append block, and go
-  verify: backspace, read append block, and go
-  permissive: same as above but frees drive
-  if tape is not valid.
 - Verify from Volume
 - Ensure that /dev/null works
 - Need report class for messages. Perhaps
@@ -284,7 +334,7 @@ After 1.30:
   fill in code for "since" option 
 - Director needs a time after which the report status is sent
   anyway -- or better yet, a retry time for the job.
-  Don't reschedule a job if previous incarnation is still running.
+- Don't reschedule a job if previous incarnation is still running.
 - Some way to automatically backup everything is needed????
 - Need a structure for pending actions:
   - buffered messages
@@ -299,10 +349,6 @@ After 1.30:
 Longer term to do:
 - Design at hierarchial storage for Bacula. Migration and Clone. 
 - Implement FSM (File System Modules).
-- Identify unchanged or "system" files and save them to a
-  special tape thus removing them from the standard 
-  backup FileSet -- BASE backup.
-- Heartbeat between daemons.
 - Audit M_ error codes to ensure they are correct and consistent.
 - Add variable break characters to lex analyzer.
   Either a bit mask or a string of chars so that
@@ -322,14 +368,27 @@ Longer term to do:
   someway to do so with every volume that has less than x% valid 
   files.
 
+
+Migration: Move a backup from one Volume to another
+Clone:     Copy a backup -- two Volumes
+
+Bacula Migration is based on Jobs (apparently Networker is file by file).
+
+Migration triggered by:
+  Number of Jobs
+  Number of Volumes
+  Age of Jobs
+  Highwater mark (keep total size)
+  Lowwater mark
   
 Projects:
             Bacula Projects Roadmap 
                17 August 2002
-           last update 5 January 2003
+           last update 8 May 2003
 
 Item 1:   Multiple simultaneous Jobs. (done)
 Done -- Restore part needs better implementation to work correctly
+        Also, it needs considerable testing
 
   What:   Permit multiple simultaneous jobs in Bacula.
 
@@ -349,7 +408,7 @@ Done -- Restore part needs better implementation to work correctly
 
 
 Item 2:   Make the Storage daemon use intermediate file storage to buffer data.
-Deferred -- not necessary yet.
+Deferred -- not necessary yet -- possibly implement with Migration.
 
   What:   If data is coming into the SD too fast, buffer it to 
           disk if the user has configured this option.
@@ -405,6 +464,7 @@ Item 4:   Implement Base jobs.
 
 
 Item 5:   Implement Label templates
+Done 
 
   What:   This is a mechanism whereby Bacula can automatically create
           a tape label for new tapes according to a detailed specification
@@ -557,22 +617,6 @@ Need:
   VolSessionId and VolSessionTime.
 =========================================================  
 
-========================================================== 
-    Unsaved File design
-For each Incremental job that is run, there may be files that
-were found but not saved because they were locked (this applies
-only to Windows). Such a system could send back to the Director
-a list of Unsaved files.
-Need:
-- New UnSavedFiles table that contains:
-  JobId
-  PathId
-  FilenameId
-- Then in the next Incremental job, the list of Unsaved Files will be
-  feed to the FD, who will ensure that they are explicitly chosen even
-  if standard date/time check would not have selected them.
-=============================================================
-
   
 
 =============================================================
@@ -734,244 +778,227 @@ Results:
   After implementing the above, the user will be able to specify
   on a file by file basis (using regular expressions) what options are
   applied for the backup.
-====================================
-
-=========================================
-Proposal by Bill Sellers
-
-Return-Path: <w.a.sellers@larc.nasa.gov>
-Received: from post.larc.nasa.gov (post.larc.nasa.gov [128.155.4.45]) by matou.sibbald.com (8.11.6/8.11.6) with ESMTP id h0ELUIm07622 for <kern@sibbald.com>; Tue, 14 Jan 2003 22:30:18 +0100
-Received: from Baron.larc.nasa.gov (baron.larc.nasa.gov [128.155.40.132]) by post.larc.nasa.gov (pohub4.6) with ESMTP id QAA09768 for <kern@sibbald.com>; Tue, 14 Jan 2003 16:30:14 -0500 (EST)
-Message-Id: <5.1.0.14.2.20030114153452.028dbae8@pop.larc.nasa.gov>
-X-Sender: w.a.sellers@pop.larc.nasa.gov
-X-Mailer: QUALCOMM Windows Eudora Version 5.1
-Date: Tue, 14 Jan 2003 16:30:18 -0500
-To: Kern Sibbald <kern@sibbald.com>
-From: Bill Sellers <w.a.sellers@larc.nasa.gov>
-Subject: Re: [Bacula-users] Bacula remote storage?
-In-Reply-To: <1042565382.1845.177.camel@rufus>
-References: <5.1.0.14.2.20030114113004.0293a210@pop.larc.nasa.gov> <5.1.0.14.2.20030113170650.028dad88@pop.larc.nasa.gov> <5.1.0.14.2.20030113170650.028dad88@pop.larc.nasa.gov> <5.1.0.14.2.20030114113004.0293a210@pop.larc.nasa.gov>
-Mime-Version: 1.0
-Content-Type: text/plain; charset="us-ascii"; format=flowed
-X-Annoyance-Filter-Junk-Probability: 0
-X-Annoyance-Filter-Classification: Mail
-At 06:29 PM 1/14/2003 +0100, you wrote:
->Hello Bill,
->
->Well, if you cannot put a Bacula client on the machine,
->then it is a big problem.  If you know of some software
->that can do what you want, let me know, because I
->really just don't know how to do it -- at least not
->directly.
-
-
-Hi Kern,
-
-We have been able to get Amanda to use the HSM as a storage 
-device.  Someone here wrote a driver for Amanda.  BUT, Amanda doesn't 
-handle Windows systems very well (or at all without Samba).  So I am 
-looking for a backup system that has a Windows client.  I really like the 
-Windows integration of Bacula.
-
-From the command line, its rather trivial to move the data around.  We use 
-something like-
-
-tar cf - ./files | gzip -c | rsh hsm dd of=path/file.tgz
-
-or if you use GNU tar:
-
-tar czf hsm:path/file.tgz ./files
-
-One idea for you to consider; Sendmail offers pipes in the aliases file; 
-(mailpipe:  "|/usr/bin/vacation root")  and Perl supports pipes in the 
-"open" statement (open FILE, "|/bin/nroff -man";)  Could you could make a 
-pipe available, as a storage device? Then we could use any command that 
-handles stdin as a  storage destination.
-
-Something like-
-
-Storage {
-        Name = HSM-RSH
-        Address = hsm
-        #Password is not used in rsh, but might be used in ftp.
-        Device = "| gzip -c | rsh hsm dd of=path/file.tgz"
-        MediaType = Pipe
-}
-
-Storage {
-        Name = HSM-FTP
-        Address = hsm
-        Password = "foobar&-"
-        Device = "| ncftpput -c hsm /path/file.bacula"
-        MediaType = Pipe
-}
-
->If you have some local storage available, you could
->use Bacula to backup to disk volumes, then use some
->other software (ftp, scp) to move them to the HSM
->machine. However, this is a bit kludgy.
-
-
-It is, but maybe worth a try.  Is there some function in Bacula to put 
-variables in filenames?  i.e. backup.2003-01-15.root
-
-Thanks!
-Bill
-
----
-Bill Sellers
-w.a.sellers@larc.nasa.gov
-
-==============================================
-   The Project for the above
-
-I finally realized that this is not at all
-the same as reader/writer programs or plugins,
-which are alternate ways of accessing the 
-files to be backed up. Rather, it is an alternate
-form of storage device, and I have always planned
-that Bacula should be able to handle all sorts
-of storage devices.
-
-So, I propose the following phases:
-
-1. OK from you to invest some time in testing
-   this as I implement it (requires that you
-   know how to download from the SourceForge
-   cvs -- which I imagine is a piece of cake
-   for you).
-
-2. Dumb implementation by allowing a device to
-   be a fifo for write only.
-   Reason: easy to implement, proof of concept.
-
-3. Try reading from fifo but with fixed block
-   sizes.
-   Reason: proof of concept, easy to implement.
-
-4. Extend reading from fifo (restores) to handle
-   variable blocks.
-   Reason: requires some delicate low level coding
-   which could destabilize all of Bacula.
-
-5. Implementation of above but to a program. E.g.
-    Device = "|program"  (not full pipeline).
-   Reason: routines already exist, and program can
-   be a shell script which contains anything.
-
-6. Add full pipeline as a possibility. E.g.
-    Device = "| gzip -c | rsh hsm dd of=path/file.tgz"
-   Reason: needs additional coding to implement full
-   pipeline (must fire off either a shell or all
-   programs and connect their pipes).
 
-There are a good number of details in each step
-that I have left out, but I will specify them at
-every stage, and there may be a few changes as things
-evolve. I expect that to get to stage 5 will take a
-few weeks, and at that point, you will have 
-everything you need (just inside a script).
-Stage 6 will probably take longer, but if this
-project pleases you, what we do for 5 should 
-be adequate for some time.
 
+=============================================
 
+========================================================== 
+    Unsaved File design
+For each Incremental job that is run, there may be files that
+were found but not saved because they were locked (this applies
+only to Windows). Such a system could send back to the Director
+a list of Unsaved files.
+Need:
+- New UnSavedFiles table that contains:
+  JobId
+  PathId
+  FilenameId
+- Then in the next Incremental job, the list of Unsaved Files will be
+  feed to the FD, who will ensure that they are explicitly chosen even
+  if standard date/time check would not have selected them.
+=============================================================
 
-=============================================
 
 Done: (see kernsdone for more)
-- Look into Pruning/purging problems or why there seem to
-  be so many files listed each night.
-- Fix cancel in find_one -- need jcr.
-- Cancel does not work for restore in FD.
-- Write SetJobStatus() function so cancel status not lost.
-- Add include list to end of chain in findlib
-- Zap sd_auth_key after use
-- Add Bar code reading capabilities (new mtx-changer)
-- Figure out some way to automatically backup all local partitions
-- Make hash table for linked files in findlib/find_one.c:161
-  (not necessary)
-- Rewrite find_one.c to use only pool_memory instead of 
-  alloca and malloc (probably not necessary).
-- Make sure btraceback goes into /sbin not sysconf directory.
-- InitVerify is getting pruned and it shouldn't (document it)
-- Make 1.28c release ??? NO do 1.29 directly
-- Set timeout on opening fifo for save or restore (findlib)
-- Document FIFO storage device.
-- Document fifo and | and <
-====== 1.30 =======
-- Implement SHA1
-- Get correct error status from run_program or open_bpipe().    
-- Restrict permissions on File Volumes (now 0640).                   
-- Umasked 022 daemons
-- Fix restore of hard linked file.
-- Figure out how to allow multiple simultaneous file Volumes on a single device.
-- Implement multiple simultaneous file Volumes on a single device.
-- Cleanup db_update_media and db_update_pool
-- Flush all the daemon messages at the end of every job.
-- Change stat1= fgets()!=NULL to stat1=fgest()==NULL; in 
-  run_program -- bpipe.c
-- Apparently cancel does not work for jobs waiting to be
-  scheduled.
-- Implement TCP/IP connection for MySQL
-- Pull a canceled job from the Scheduling queue.
-- Implement max_file_size in block.c (already done, just tweaked).
-- Look at purge jobs volume (at least document it, and see if it is
-  logical).
-- Add list volumes does all pools. list volumes pool=xxx now works.
-- Add pool= to "list media" in ua_output.c
-- Strip trailing slashes from Include directory names in the FD.
-- Fix Error: bnet.c:408 gethostbyname() for lpmatou failed: 
-     ERR=Operation not permited loop.
-- Add code if there is no mtio.h (cannot do -- too many ioctl defines needed)
-- Produce better error messages in when error/eof writing block.
-- Cancelling of a queued job does NOT work!!!!!!
-- Get two 
-rufus-dir: Volume used once. Marking Volume "File0003" as Used.
-rufus-sd: Recycled volume File0003 on device /home/kern/bacula/working, all previous data lost.
-rufus-dir: Volume used once. Marking Volume "File0003" as Used.
-- Ability to backup to a file then later transfer to a tape -- Migration.
-  Migration based on MaxJobs(MinJobs),MaxVols(MinVols),AgeJobs,MaxBytes(MinBytes)
-  (i.e. HighwaterMark, LowwaterMark).
-- Eugeny Fisher <efischer@vip-rus.com> wants to cycle through a
-  set of volumes recycling the oldest volume when it is needed.
-- gethostbyname failure in bnet_connect() continues
-  generating errors -- should stop.
-- Add chflags() code for FreeBSD file flags
-- Bevan Anderson suggests having a run queue for each device
-  so that multiple simultaneous jobs can run but each writing
-  to a different Volume.
-- Look at handling <> in smtp doesn't work with exim.
-- Need to specify MaximumConcurrentJobs in the Job resource.
-- ***test GetFileAttributexEx, and remove MessageBox at 335 of winservice.cpp ****
-- Implement finer multiprocessing options.
-- Implement | and < in Exclude statements.
-- Figure out some way to specify a retention period for files
-  that no longer exist on the machine -- so that we maintain
-  say backups for 30 days, but if the file is deleted, we maintain
-  the last copy for 1 year.  -- answer Volume retention.
-- Make non-zero status from RunJobBefore/After error the job.
-- Need define of int_least16_t in sha1.h for SuSE.
-- Implement bar code reader for autochangers
-- Document new MaximumConcurrentJob records (Job, Client, Storage) 
-- Write up how to use/manage disk Volume Storage. ******
-- Remove kern and kelvin from mysql_grant...
-- Install grant_mysql...
-- Strip trailing / from Include
-- add #define ENABLE_NLS for Gnome compile on SuSE.
-- Add Client FS/OS id (Linux, Win95/98, ...).
-- Concept of VolumeSet during restore which is a list
-  of Volume names needed.
-- Turn virutally all sprintfs into snprintfs.
-- Update volume=Test01 requests pool, then lists volumes.
-  **** Test select_pool_and_media ...
-- Document relabel
-- Add IP address to authentication failures. 
-- Add a default File storage so that new users can do backup
-  and restores right away.
-- Forbid sbindir and with-subsys-dir from being the same (otherwise
-  the binary gets deleted when the daemon is stopped in the
-  rc.d/inid.d directory.
-- Do not ignore SIGCHLD
-- Add Cleaning to list of volume statuses 
-- Implement run at "xxx"
+- Heartbeat between daemons.
+- Fix Dir heartbeat in restore and verify vol.  Be sure to make
+  bnet_recv() ignore BNET_HEARTBEAT.
+- Implement HEART_BEAT while SD waiting for tapes.
+- Include RunBeforeJob and RunAfterJob output in the message
+  stream.
+- Change M_INFO to M_RESTORED for all restored files.
+- Fix command prompt in gnome-console by checking on Ready.
+- Merge SQLite, MySQL, and Rel spec into a single file.
+- Fix config of "console"
+- Check if cancel works with FD (fixed).
+- Properly configure console and gconsole (currently for source not
+  configured for installation).
+- Error labeling tape from console gets Jmsg error because of no Job.
+- Test and implement get_pint and get_yesno.
+- Implement global with DB name and add to btraceback.gdb
+- Remove subsysdir from conf files (used only in autostart scripts).
+- Fix the following:
+  rufus-dir: Max configured use duration exceeded. Marking Volume "MatouBackup" as Used.
+   rufus-sd: Volume "" previously written, moving to end of data.
+   rufus-sd: Matou.2003-05-10_10.39.18 Error: I canot write on this volume because:
+      The number of files mismatch! Volume=1 Catalog=0
+   rufus-sd: Matou.2003-05-10_10.39.18 Error: askdir.c:155 NULL Volume name. This shouldn't happen!!!
+- Shell character expansion is failing occassionally.
+- Add a section to the doc on Manual cycling of Volumes.
+- Check if Job/File retentions apply to multivolume jobs.
+- Fix missing casette in autoloader during read:
+  14-May-2003 14:41 undef-sd: RestoreFiles.2003-05-14_14.41.00 Warning: acquire.c:106 Volume name mismatch. Wanted TestVolume0005 got TestVolume0010
+  14-May-2003 14:41 undef-sd: 3301 Issuing autochanger "loaded" command.
+  14-May-2003 14:41 undef-sd: 3302 Issuing autochanger "unload" command.
+  14-May-2003 14:42 undef-sd: 3303 Issuing autochanger "load slot 1" command.
+  14-May-2003 14:42 undef-sd: 3304 Autochanger "load slot 1" status is OK.
+  14-May-2003 14:42 undef-sd: RestoreFiles.2003-05-14_14.41.00 Warning: acquire.c:106 Volume name mismatch. Wanted TestVolume0005 got TestVolume0009
+  14-May-2003 14:42 undef-sd: 3301 Issuing autochanger "loaded" command.
+  14-May-2003 14:42 undef-sd: RestoreFiles.2003-05-14_14.41.00 Warning: acquire.c:106 Volume name mismatch. Wanted TestVolume0005 got TestVolume0009
+  14-May-2003 14:42 undef-sd: 3301 Issuing autochanger "loaded" command.
+  14-May-2003 14:42 undef-sd: RestoreFiles.2003-05-14_14.41.00 Warning: acquire.c:106 Volume name mismatch. Wanted TestVolume0005 got TestVolume0009
+  14-May-2003 14:42 undef-sd: 3301 Issuing autochanger "loaded" command.
+  14-May-2003 14:42 undef-sd: RestoreFiles.2003-05-14_14.41.00 Warning: acquire.c:106 Volume name mismatch. Wanted TestVolume0005 got TestVolume0009
+  14-May-2003 14:42 undef-sd: 3301 Issuing autochanger "loaded" command.
+  14-May-2003 14:42 undef-sd: RestoreFiles.2003-05-14_14.41.00 Fatal error: acquire.c:129 Too many errors trying to mount device "/dev/nrsa0".
+  14-May-2003 14:42 undef-dir: Bacula 1.31 (12May03): 14-May-2003 14:42
+- Fix problem reported by Christopher McCurdy <cmccurdy@eecis.udel.edu>
+   xeon-fd:      Could not stat c:/Documents and Settings/All 
+   Users/Application Data/Humc:\Documents and Settings\All User98_AIX.kbf: 
+   ERR=No such file or directory
+   Cannot reproduce.
+- The following  Re-read last block at EOT failed. ERR=block.c:523 Read zero bytes on device /dev/nrsa0.
+    undef-sd: block.c:523 Read zero bytes on device /dev/nrsa0.
+  apparently masks the standard EOM message.
+- BSD (probably) does not have strtoll()
+- BSD does not have ioctl() MTEOM
+- BSD defines a number of MT_xxx variables which conflict
+  with those defined by Bacula.
+- Make default duration days if no qualifier (e.g. s) is specified.
+- BSDI fix finding gcc version
+- When the FD errs (e.g. disk full) have a more graceful shutdown.
+- Make sure Bacula prunes/purges canceled and failed jobs too and all
+  jobs with zero JobFiles.
+- Implement Volume name checking.
+- Document what characters can go into Volume names.
+- Getting the following on all directories on Win32
+  19-May-2003 01:14 tibs-fd:      Could not access c:/cygwin/home/kern/rxvt: ERR=Permission denied
+- Cancellation caused JobMedia error:
+     babylon5-dir: Last FULL backup time not found. Doing FULL backup.               
+     babylon5-dir: Start Backup JobId 416, Job=Zocalo_Save.2003-05-19_02.15.06       
+     babylon5-sd: End of media on Volume VXA-V17-Inc-001 Bytes=31,982,900,672 Blocks=495,781.
+     babylon5-sd: Job Zocalo_Save.2003-05-19_02.15.06 waiting. Cannot find any appendable volumes.
+     babylon5-sd: Someone woke me up, but I cannot find any appendable volumes
+       for Job=Zocalo_Save.2003-05-19_02.15.06.                                
+     babylon5-sd: Zocalo_Save.2003-05-19_02.15.06 Fatal error: Job
+       Zocalo_Save.2003-05-19_02.15.06 canceled while waiting for mount on
+       Storage Device "Ecrix_VXA-1".
+     babylon5-sd: Zocalo_Save.2003-05-19_02.15.06 Fatal error: Cannot fixup device
+       error. Job Zocalo_Save.2003-05-19_02.15.06 canceled while waiting for
+       mount on Storage Device "Ecrix_VXA-1".
+                                                                                     
+     babylon5-dir: Zocalo_Save.2003-05-19_02.15.06 Error: Catalog error creating
+       JobMedia record. sql_create.c:125 Create JobMedia failed. Record already
+       exists.
+     babylon5-sd: Zocalo_Save.2003-05-19_02.15.06 Error: Error creating JobMedia
+       record: 1991 Update JobMedia error
+                                                                                     
+     babylon5-sd: Zocalo_Save.2003-05-19_02.15.06 Error: askdir.c:158 NULL Volume
+       name. This shouldn't happen!!!
+     zocalo-fd: Zocalo_Save.2003-05-19_02.15.06 Error: bnet.c:310 Write error
+       sending to Storage daemon:babylon5:9103: ERR=Broken pipe
+- Volume names with spaces get jammed into the catalog with 0x1 
+  i.e. the SD bashes the Volume but they are not unbased by Dir.
+  jerom-dir: MonthlySave.2003-05-10_17.12.01 Error: Unable to get Media
+  record for Volume Tape^A1: ERR=sql_get.c:788 Media record for Volume
+  "Tape^A1" not found.
+   jerom-sd: MonthlySave.2003-05-10_17.12.01 Error: Error updating Volume
+   Info: 1991 Catalog Request failed: sql_get.c:788 Media record for Volume
+   "Tape^A1" not found.
+- ChangeServiceConfig2A does not exist on WinNT (ADVAPI32.DLL).
+- Fix "access not allowed" for backup of files on WinXP.
+- Check for existence of all new Win32 API's.  See LoadLibrary in 
+  winservice.cpp
+- Count errors during restore and print them in the Job report.
+- Bug: fix access problems on files restored on WinXP.
+- Put system type returned by FD into catalog.
+- Finish WIN32_DATA stream code (bextract, check if can handle stream)
+- Make SD keep track of Files, Bytes during restore.
+- If you enter the userid by hand for restore, you get:
+  Enter JobId(s), comma separated, to restore: 74
+  You have selected the following JobId: 74
+  Building directory tree for JobId 74 ...
+  134645140 items inserted into the tree and marked for extraction.
+- Add SDWriteSeqNo to SD, and probably Read on FD side.
+- If bootstrap is non-zero for restore, do not show JobId in the
+  OK to run? (yes/mod/no): list.
+- When all cassettes in magazine are used, got:
+  22-May-2003 18:24 undef-sd: 3304 Autochanger "load slot 1" status is OK.
+  22-May-2003 18:24 undef-sd: NightlySave.2003-05-22_14.08.16 Warning: mount.c:245 Director wanted Volume "TestVolume0009".
+      Current Volume "TestVolume0005" not acceptable because:
+      1998 Volume "TestVolume0005" not Append or Recycle.
+  22-May-2003 18:24 undef-sd: NightlySave.2003-05-22_14.08.16 Error: Autochanger Volume "TestVolume0009" not found in slot 1.
+      Setting slot to zero in catalog.
+  22-May-2003 18:24 undef-sd: Please mount Volume "TestVolume0009" on Storage Device "ARCHIVE 4586" for Job NightlySave.2003-05-22_14
+  .08.16
+  Use "mount" command to release Job.
+  22-May-2003 19:24 undef-sd: Please mount Volume "TestVolume0009" on Storage Device "ARCHIVE 4586" for Job NightlySave.2003-05-22_14
+  .08.16
+  Use "mount" command to release Job.
+- Don't zero the Slot when the wrong volume is found -- simply ask
+  the operator.
+- Implement MTIOCERRSTAT on FreeBSD to clear tape error conditions.
+- Shell expansion fails for working_directory in SD from time to time.
+- File the Automatically selected: xxx
+  to say Automatically selected Pool: xxx
+- Default duration with no qualifier is sec should be 1 day
+- zap sd_auth_key in SD after FD connection.
+- Find a solution for the multiple FileSet problem (when it is changed). Add date?
+- Look at Python for a Bacula scripting language -- www.python.org
+- When Marking a file in Restore that is a hard link, also
+  mark the link so that the data will be reloaded.
+- Emergency restore info:
+  - Backup Bacula
+  - Backup working directory
+  - Backup Catalog
+- Why don't we get an error message from Win32 FD when bootstrap 
+  file cannot be created for restore command?
+- Fix Win2000 error with no messages during startup.
+- Make restore more robust in counting error and not immediately bailing
+  out. Also print error message once, but try to continue.
+- Add code to check that blocks are sequential on restore.
+- Remove "rufus" and such references from regress.
+- No READLINE_SRC if found in alternate directory.
+- If ./btape is called without /dev, assume argument is a Storage resource name.
+- Find general solution for sscanf size problems (as well as sprintf. Do at run time?
+- Bytes restored is wrong.
+- The "List last 20 Jobs run" doesnt work correctly in restore.
+  It doesnt show the last 20 jobs , but some older ones.
+- Fix Verify VolumeToCatalog to use BSRs -- it is broken.
+- Implement Release Storage=xxx
+- Fix restore on Win95/98  
+- Remove the Jmsg() in sql_find.c:102 or only print on hard error.
+- Implement FileSet VolIndex -- done, but must update old records.
+- Check this below from Phil.
+  This was SD reported data rather than FD data!
+  > When the job was done, Bacula reported 11084 files restored:
+  > 
+  > JobId:                  527                                                     
+  > Job:                    Zocalo_Restore.2003-06-05_16.42.01                      
+  > Client:                 Zocalo                                                  
+  > Start time:             05-Jun-2003 16:42                                       
+  > End time:               06-Jun-2003 01:21                                       
+  > Files Restored:         11,084                                                  
+  > Bytes Restored:         65,474,772                                              
+  > Rate:                   2.1 KB/s                                                
+  > FD termination status:  OK                                                      
+  > Termination:            Restore OK                                              
+  > 
+  > when it should probably have reported 11084 files scanned, 250 restored.
+  > The bytes restored count looks about right.
+  > 
+- Should Bacula make an Append tape as Purged when purging?
+- Use switch() in backup.c and restore.c in FD instead of giant if statement.
+- If during a restore, a hard linked file already exists (on option), delete
+  the file and re-link it.  This is to avoid the possibility that the
+  user had re-linked the file between the backup and the restore.
+  Do lstat() to see if it is already properly linked.
+  Same for symlinked file.
+  Make sure ifnewer, ifolder, never, ... apply correctly.
+- Flag so that no connect does not error, and Reschedule a job.
+- Implement "Reschedule OnError=yes interval=nnn times=xxx"
+- That restoring a hard link that already exists works correctly.
+  Same for soft link.
+- Make Pool resource handle Counter resources.
+- Fix first block number after label to be zero instead of 1 (reset after label).
+- Grep for Backup OK in regression script.
+- Do NOT reuse same JobId if tape written.
+- Implement non-blocking writes and bsock->terminate in heartbeat
+  thread, or set it in status.c cancel (used pthread_kill() instead of
+  non-blocking I/O.
+- Add restore to specific date.
+- Instrument use_count on DEVICE packets and ensure that the device is
+  being close()ed at the appropriate time.
+- Test long path names (>64 chars) in Windows -- crashes FD?
+- Implement fast block rejection: match_bsr_block().