ENCP release notes, from v3_1 to v3_2

Encp changes:
=============

Added a "FILE WAS MODIFIED" error to encp when it notices that the file
it is reading/writing has been modified by another program.

When writing to enstore, if the output pnfs file is moved to a new location 
or renamed then encp will use the pnfs id to find the new location. If the 
pnfs file is removed, then the behavior is unchanged; the transfer fails. 

A new option for encp was created: --bypass-filesystem-max-filesize-check
On some systems (notably: Fermi Linux 7.1 and 7.3) the OS will lie about
the maximum size file a filesystem can handle.  It reports (2GB - 1) bytes
when in reality it is much larger.  When reading a large file out of enstore
on one of these systems encp will falsely faile the transfer.  Including
this switch will cause encp to skip the check and procede anyway.  Use this
switch with care.

When a file is written/read to/from dcache, encp obtains the CRC calculated
by dCache and compares it with its own CRC value.  This is a new check
to prevent data corruption.

Misc.:
======

A new server was added to Enstore.  This is the info_server.  It is a read-only
server for the file and volume databases.  In conjunction with this, there
is a new enstore command "info" the supersedes the "file" and "volume"
commands.  The "file" and "volume" commands still work, but users are
stronly encouraged to witch to using the new "info" command.  See
"enstore info --help" for more information.

An incompatible change was made to the file and volume clerks.  This broke
some enstore commands.  These commands have been fixed to work with the
updated clerks.  Note: These commands have been deprecated; see preceding
paragraph.

                      Detailed cvs commit logs


========== delete_at_exit.py ====================================================================================

Explicitly flush out standard out and standard in when quiting. 

Added trace calls to make debugging easier. 

========== alarm.py ====================================================================================

remove embedded double quotes when generating ticket 

add print to help in debugging invalid parameter error 

========== alarm_server.py ====================================================================================

add a new log msg to help connect alarms raised with their resolution 

========== backup.py ====================================================================================

do not backup BerkeleyDB any more 

fix a typo 

use -F c for pg_dump -- the dump is already compressed 

work around db_archive bug that ignores files > 2GB 

make pgdb=1 default 

mv journal tar to dbHome if pgdb is on 

add pgdb backup 

========== callback.py ====================================================================================

log read_tcp_raw errors 

========== e_errors.py ====================================================================================

Moved CRC_ENCP_ERROR to email_alarm_error from raise_alarm_error list. 

Added CONFLICT to raise_alarm_errors. 

Added the FILE_MODIFIED non-retriable error for encp. 

modified mover not to intrepret double fm as a 0 length file 

========== encp.py ====================================================================================

Fixed a bug. Copy paste error in transfer_file() from when the bytes_not_transfered fix was done. 

bumping version to v3_2 because of encpCut 

Added timeout to the get_brand() and get_bfid() file clerk client calls. 

Fixed an inconsistancy in the way the bytes_not_transfered was utilized from EXfer. 

Commented out a no longer useful log message. Modified the check for looking for inconsistancies between the files pnfs layers and the file database on reads. 

Included some information in the exceptions raised when testing for valid filenames, filesystem filesize limitations, library filesize limitations, etc. that includes the filenames for the print_data_access_layer_format(). 

Modifications to hit pnfs less frequently. There were far more stats happening than needed to be. 

When writing to enstore, if the output pnfs file is moved to a new location or renamed then encp will use the pnfs id to find the new location. If the pnfs file is removed, then the behavior is unchanged; the transfer fails. 

When an error occurs writing to enstore via dcache, layer 1 and layer 4 are now cleared. 

More fixes like in revision 1.657. 

Added a pstatinfo() (really a pstatdecode()) call to the verify_file_size() function. This should force the filesize to be decoded before it is used. 

At some point the "get" option --sequential-filenames was broken. Now fixed. 

Fixed the order things are done for creating the wrapper sub ticket. Mode should come from the local file when writting to enstore, but was getting overridden by the mode for the directory where the pnfs file would be created. 

Modified what gets logged when sending request to the LM. Some difference if the error was retriable or non-retriable. If the error was e_errors.MALFORMED then the entire ticket that was sent is logged. 

Fixed a holdover bug from previous commit. It did work with /dev/null as the output directory when I tested it, but didn't work with a real directory until now. Added comments on the large if...elif...else statement in create_read_requests() and what to keep in mind when modifying a branch within it. 

Fixed a bug for "get". There was a variable that could be referenced before being defined when there was no metadata available. 

Modified the code to remove unecessary pnfs queries. 

Changed how the default wrapper fields are filled in. 

Added some flush() calls to keep the terminal output up to date. 

Added a \n to a message to standard out. 

Added check to make sure that the fcc.server_address and vcc.server_address values are legit and not None. 

Modified the warning/information message given when sdsscp/get reads a tape for the first time when no metadata is known. 

Add support for get to have a --sequential-filenames option to override any existing filename metadata and use sequentially numbered filenames instead. 

Fixed two bugs related to less than perfect handling of the default enstore system "going away" (i.e. stopped, shutdown, powered off). The first resulted in a confusing warning message. The other resulted in a traceback when trying to resumit a request. 

Attempt to handle "connection reset by peer" errors on the data socket with shutdown(). Added the string 'mover' and 'encp' to the crc mismatch error messages. Tweeked transfer_file() for use by get. Added the crc to the MSG_TYPE=ENCP_XFER log messages. 

Fixed a bug when the requested volume is not known to any enstore system. Fixed a bug that could cause "get" to miss a renamed file and create a duplicate filename entry. 

Fixed a bug in handle_retries. If there were 3 errors and the new "error" was RESUBMITTING it would incorrectly interpret it as a TOO_MANY_RETRIES. It should have remained a RESUBMITTING "error." 

Added SystemExit to occurances of KeyboardInterrupt before blanket excepts. Socket creation failures (from callback mostly) are now handled. Volume requests to the volume clerk for None volumes has been stopped. 

Fixed a bug that would raise an alarm when fcc.set_pnfsid() fails, but would not abort the transfer. This would result in complete metadata. Only observed in get transfers though. The tags in the "command line" info message on --put-cache writes now display correct info, instead of "unknown". The accounting server is now sent the version when a transfer completes. 

Moved a trace message to contain accurate information with respect to location on the tape. 

Two fixes. One, one call of tape_ticket remained that tried to turn the tape_ticket['tape_list'] from a dictionary into a list. Newer fcc return this as a list already. Two, stopped using fcc.get_bfids() for volume (aka "get") transfers. 

Removed a debugging print statement. Added a raise of KeyError so a warning message will get displayed for "get". 

Added one more reason to the comment describing what can cause the pnfs filesystem to be unwriteable. This reason was that the node was not in the trusted list of nodes. 

Fixed a bug that caused encp to ask the volume clerk about the volume consiting of the empty string, instead of a string containing the volume name. 

This modification handles re-raising exceptions correctly. If you call "raise sys.exc_info()" it does not work (as far as I can tell it should). They have been replaced with: raise sys.exc_info()[0], sys.exc_info()[1], sys.exc_info()[2] to re-raise the exception without creating tracebacks. 

Attempting to fix a problem with a traceback on stkendca8a. A mod for get to correctly handle unknown files. 

Lower-level functions won't exit out directly. They pass the error up to higher levels for processing. More cleanup/optimization of the volume with list code in create_read_requests(). 

Encp now remembers the inode of the file when first stat()ed. This required splitting create_zero_length_files() into create_zero_length_pnfs_files() and create_zero_length_local_files(). verify_file_size() and open_local_file() now have checks in them using inode values. Since all of the direct i/o code is now in EXfer, old/unused code was removed from open_local_file(). 

Added two new functions, get_vcc() and get_fcc(). They work similar to get_csc() in that a cached global variable is stored after the first call. The access_check() function is placed in more places. This will hopefully reduce automounting pnfs related errors (when --pnfs-is-automounted is used). Handles exceptions raised from select.select(). 

Last few bugs w.r.t. get working. Added some log messages for the few errors that remain. 

Major fixes for get to work: accounting_client.py accounting_client.pyc accounting.py accounting.pyc accounting_query.py accounting_query.pyc accounting_server.py aci.py alarm_client.py alarm_client.pyc alarm.py alarm.pyc alarm_server.py alarm_server.pyc aml2_log.py aml2.py atomic.py atomic.py~ atomic.pyc backup_backup.py backup_client.py backup_client.pyc backup.py backup.pyc bfid_db.py callback.py callback.pyc cern_wrapper.py change_loc_cookie.py change_s_i.py charset.py charset.py~ charset.pyc checkBackedUpDatabases.pyc checkdb.py checkdbs.py check_pnfs_db.py cleanUDP.py cleanUDP.pyc configuration_client.py configuration_client.pyc configuration_server.py configuration_server.py~ configuration_server.pyc core cpio_odc_wrapper.py create_sg_db.py CVS db_compare.py db_dump.py db.py db.pyc db_retrieve_backup.py dbs.py dbs.pyc dcache_make_queue_plot_page.py delete_at_exit.py delete_at_exit.py~ delete_at_exit.pyc discipline.py discipline.pyc disk_driver.py disk_driver.pyc dispatching_worker.py dispatching_worker.pyc drivestat2.py drivestat_client.py drivestat_client.pyc drivestat_server.py edb.py edb.pyc e_errors.py e_errors.py~ e_errors.pyc ejournal.py ejournal.pyc encp_admin.py ENCPBIN encp.py encp.py~ encp.pyc encp_ticket.py encp_ticket.py~ encp_ticket.pyc encp_user.py enmail.py enmv.py enmv.py~ enmv.pyc enstore_admin.py enstore_alarm_cgi.py enstore_alarm_search_cgi.py enstore_constants.py enstore_constants.pyc enstore_display.py enstore_display.py~ enstore_display.pyc enstore_erc_functions.py enstore_erc_functions.pyc enstore_files.py enstore_files.pyc enstore_functions2.py enstore_functions2.pyc enstore_functions.py enstore_functions.pyc enstore_html.py enstore_html.pyc enstore_log_file_search_cgi.py enstore_make_log_calendar.py enstore_make_plot_page.py enstore_overall_status.py enstore_plots.py enstore_plots.pyc enstore.py enstore.pyc enstore_restart.py enstore_restart.pyc enstore_saag_network.py enstore_saag_network.pyc enstore_saag.py enstore_saag.pyc enstore_show_inventory_cgi.py enstore_show_inv_summary_cgi.py enstore_start.py enstore_start.pyc enstore_status.py enstore_status.pyc enstore_stop.py enstore_stop.pyc enstore_up_down.py enstore_up_down.pyc enstore_user_cgi.py enstore_user.py enstore_utils_cgi.py ensync_admin.py ensync.py ensync_user.py ENTV_BIN entv.py entv.py~ entv.pyc esgdb.py esgdb.pyc espion.py estart.py estop.py event_relay_client.py event_relay_client.pyc event_relay_messages.py event_relay_messages.pyc event_relay.py fdbdump.py file_clerk_client.py file_clerk_client.pyc file_clerk.py file_clerk.py-1.217 fileinfo.py ftt_driver.py ftt.py generic_alarm.py generic_client.py generic_client.pyc generic_driver.py generic_driver.pyc generic_server.py generic_server.pyc get_all_bytes_counter.py GETBIN GET_BIN get_cron_title.py get.py get.py~ get.pyc get_total_bytes_counter.py hostaddr.py hostaddr.py~ hostaddr.pyc host_config.py host_config.py~ host_config.pyc host_config.py.new idlemovers.py info_client.py info_client.pyc info_server.py inquisitor_client.py inquisitor_client.pyc inquisitor_plots.py inquisitor_plots.pyc inquisitor.py interface.py interface.pyc inventory.py journal.py journal.pyc label_tape.py library_manager_client.py library_manager_client.py~ library_manager_client.pyc library_manager.py libtpshelve.pyc lintit lm_list.py lm_list.pyc log_client.py log_client.pyc log_finish_event.py log_server.py log_start_event.py log_trans_fail.py m2.py Makefile Makefile~ makeplot.py manage_queue.py manage_queue.pyc match_syslog.py media_changer_client.py media_changer_client.pyc media_changer.py media_changer_test.py module_trace.py monitor_client.py monitor_client.py~ monitor_client.pyc monitored_server.py monitored_server.pyc monitor_server.py monitor_server.py~ monitor_server.pyc mounts_plot.py movcmd_mc.py mover_client.py mover_client.pyc mover_constants.py mover_constants.pyc mover-nanny.py mover.py mover.py~ mover.pyc mpq.py mpq.pyc multiple_interface.py multiple_interface.py~ multiple_interface.pyc net_driver.py null_driver.py null_wrapper.py on-call.py option.py option.py~ option.pyc plotter.py pnfs_backup_plot.py pnfs.py pnfs.py~ pnfs.pyc priority_selector.py priority_selector.pyc quickquota.py quota.py ratekeeper_client.py ratekeeper_client.pyc ratekeeper.py ratemeter.py rate_test.py readonly_volumes.py report_volume_quotas.py restore.py rm_volmap.py run1.py safe_dict.py scanfiles.py send_alive.py set_lm_noread.py setpath.py setpath.pyc sg_db.py sgdb.pyc show_file_cgi.py show_volume_cgi.py stethoscope.py string_driver.py string_driver.pyc time_fifo.py timeofday.py timeofday.pyc Trace.py Trace.pyc udp_client.py udp_client.pyc udp_common.py udp_common.pyc udp_server.py udp_server.pyc vdbdump.py verify_db.pyc verify.py volume_assert.py volume_clerk_client.py volume_clerk_client.pyc volume_clerk.py volume_clerk.py-1.349 volume_family.py volume_family.pyc www_server.py www_server.pyc yank.py Fixed a bug that determines the correct CS knowing the volume. accounting_client.py accounting_client.pyc accounting.py accounting.pyc accounting_query.py accounting_query.pyc accounting_server.py aci.py alarm_client.py alarm_client.pyc alarm.py alarm.pyc alarm_server.py alarm_server.pyc aml2_log.py aml2.py atomic.py atomic.py~ atomic.pyc backup_backup.py backup_client.py backup_client.pyc backup.py backup.pyc bfid_db.py callback.py callback.pyc cern_wrapper.py change_loc_cookie.py change_s_i.py charset.py charset.py~ charset.pyc checkBackedUpDatabases.pyc checkdb.py checkdbs.py check_pnfs_db.py cleanUDP.py cleanUDP.pyc configuration_client.py configuration_client.pyc configuration_server.py configuration_server.py~ configuration_server.pyc core cpio_odc_wrapper.py create_sg_db.py CVS db_compare.py db_dump.py db.py db.pyc db_retrieve_backup.py dbs.py dbs.pyc dcache_make_queue_plot_page.py delete_at_exit.py delete_at_exit.py~ delete_at_exit.pyc discipline.py discipline.pyc disk_driver.py disk_driver.pyc dispatching_worker.py dispatching_worker.pyc drivestat2.py drivestat_client.py drivestat_client.pyc drivestat_server.py edb.py edb.pyc e_errors.py e_errors.py~ e_errors.pyc ejournal.py ejournal.pyc encp_admin.py ENCPBIN encp.py encp.py~ encp.pyc encp_ticket.py encp_ticket.py~ encp_ticket.pyc encp_user.py enmail.py enmv.py enmv.py~ enmv.pyc enstore_admin.py enstore_alarm_cgi.py enstore_alarm_search_cgi.py enstore_constants.py enstore_constants.pyc enstore_display.py enstore_display.py~ enstore_display.pyc enstore_erc_functions.py enstore_erc_functions.pyc enstore_files.py enstore_files.pyc enstore_functions2.py enstore_functions2.pyc enstore_functions.py enstore_functions.pyc enstore_html.py enstore_html.pyc enstore_log_file_search_cgi.py enstore_make_log_calendar.py enstore_make_plot_page.py enstore_overall_status.py enstore_plots.py enstore_plots.pyc enstore.py enstore.pyc enstore_restart.py enstore_restart.pyc enstore_saag_network.py enstore_saag_network.pyc enstore_saag.py enstore_saag.pyc enstore_show_inventory_cgi.py enstore_show_inv_summary_cgi.py enstore_start.py enstore_start.pyc enstore_status.py enstore_status.pyc enstore_stop.py enstore_stop.pyc enstore_up_down.py enstore_up_down.pyc enstore_user_cgi.py enstore_user.py enstore_utils_cgi.py ensync_admin.py ensync.py ensync_user.py ENTV_BIN entv.py entv.py~ entv.pyc esgdb.py esgdb.pyc espion.py estart.py estop.py event_relay_client.py event_relay_client.pyc event_relay_messages.py event_relay_messages.pyc event_relay.py fdbdump.py file_clerk_client.py file_clerk_client.pyc file_clerk.py file_clerk.py-1.217 fileinfo.py ftt_driver.py ftt.py generic_alarm.py generic_client.py generic_client.pyc generic_driver.py generic_driver.pyc generic_server.py generic_server.pyc get_all_bytes_counter.py GETBIN GET_BIN get_cron_title.py get.py get.py~ get.pyc get_total_bytes_counter.py hostaddr.py hostaddr.py~ hostaddr.pyc host_config.py host_config.py~ host_config.pyc host_config.py.new idlemovers.py info_client.py info_client.pyc info_server.py inquisitor_client.py inquisitor_client.pyc inquisitor_plots.py inquisitor_plots.pyc inquisitor.py interface.py interface.pyc inventory.py journal.py journal.pyc label_tape.py library_manager_client.py library_manager_client.py~ library_manager_client.pyc library_manager.py libtpshelve.pyc lintit lm_list.py lm_list.pyc log_client.py log_client.pyc log_finish_event.py log_server.py log_start_event.py log_trans_fail.py m2.py Makefile Makefile~ makeplot.py manage_queue.py manage_queue.pyc match_syslog.py media_changer_client.py media_changer_client.pyc media_changer.py media_changer_test.py module_trace.py monitor_client.py monitor_client.py~ monitor_client.pyc monitored_server.py monitored_server.pyc monitor_server.py monitor_server.py~ monitor_server.pyc mounts_plot.py movcmd_mc.py mover_client.py mover_client.pyc mover_constants.py mover_constants.pyc mover-nanny.py mover.py mover.py~ mover.pyc mpq.py mpq.pyc multiple_interface.py multiple_interface.py~ multiple_interface.pyc net_driver.py null_driver.py null_wrapper.py on-call.py option.py option.py~ option.pyc plotter.py pnfs_backup_plot.py pnfs.py pnfs.py~ pnfs.pyc priority_selector.py priority_selector.pyc quickquota.py quota.py ratekeeper_client.py ratekeeper_client.pyc ratekeeper.py ratemeter.py rate_test.py readonly_volumes.py report_volume_quotas.py restore.py rm_volmap.py run1.py safe_dict.py scanfiles.py send_alive.py set_lm_noread.py setpath.py setpath.pyc sg_db.py sgdb.pyc show_file_cgi.py show_volume_cgi.py stethoscope.py string_driver.py string_driver.pyc time_fifo.py timeofday.py timeofday.pyc Trace.py Trace.pyc udp_client.py udp_client.pyc udp_common.py udp_common.pyc udp_server.py udp_server.pyc vdbdump.py verify_db.pyc verify.py volume_assert.py volume_clerk_client.py volume_clerk_client.pyc volume_clerk.py volume_clerk.py-1.349 volume_family.py volume_family.pyc www_server.py www_server.pyc yank.py Removed costly requests of the file/volume clerk for volume w/ list transfers. It now uses tape_ticket values. accounting_client.py accounting_client.pyc accounting.py accounting.pyc accounting_query.py accounting_query.pyc accounting_server.py aci.py alarm_client.py alarm_client.pyc alarm.py alarm.pyc alarm_server.py alarm_server.pyc aml2_log.py aml2.py atomic.py atomic.py~ atomic.pyc backup_backup.py backup_client.py backup_client.pyc backup.py backup.pyc bfid_db.py callback.py callback.pyc cern_wrapper.py change_loc_cookie.py change_s_i.py charset.py charset.py~ charset.pyc checkBackedUpDatabases.pyc checkdb.py checkdbs.py check_pnfs_db.py cleanUDP.py cleanUDP.pyc configuration_client.py configuration_client.pyc configuration_server.py configuration_server.py~ configuration_server.pyc core cpio_odc_wrapper.py create_sg_db.py CVS db_compare.py db_dump.py db.py db.pyc db_retrieve_backup.py dbs.py dbs.pyc dcache_make_queue_plot_page.py delete_at_exit.py delete_at_exit.py~ delete_at_exit.pyc discipline.py discipline.pyc disk_driver.py disk_driver.pyc dispatching_worker.py dispatching_worker.pyc drivestat2.py drivestat_client.py drivestat_client.pyc drivestat_server.py edb.py edb.pyc e_errors.py e_errors.py~ e_errors.pyc ejournal.py ejournal.pyc encp_admin.py ENCPBIN encp.py encp.py~ encp.pyc encp_ticket.py encp_ticket.py~ encp_ticket.pyc encp_user.py enmail.py enmv.py enmv.py~ enmv.pyc enstore_admin.py enstore_alarm_cgi.py enstore_alarm_search_cgi.py enstore_constants.py enstore_constants.pyc enstore_display.py enstore_display.py~ enstore_display.pyc enstore_erc_functions.py enstore_erc_functions.pyc enstore_files.py enstore_files.pyc enstore_functions2.py enstore_functions2.pyc enstore_functions.py enstore_functions.pyc enstore_html.py enstore_html.pyc enstore_log_file_search_cgi.py enstore_make_log_calendar.py enstore_make_plot_page.py enstore_overall_status.py enstore_plots.py enstore_plots.pyc enstore.py enstore.pyc enstore_restart.py enstore_restart.pyc enstore_saag_network.py enstore_saag_network.pyc enstore_saag.py enstore_saag.pyc enstore_show_inventory_cgi.py enstore_show_inv_summary_cgi.py enstore_start.py enstore_start.pyc enstore_status.py enstore_status.pyc enstore_stop.py enstore_stop.pyc enstore_up_down.py enstore_up_down.pyc enstore_user_cgi.py enstore_user.py enstore_utils_cgi.py ensync_admin.py ensync.py ensync_user.py ENTV_BIN entv.py entv.py~ entv.pyc esgdb.py esgdb.pyc espion.py estart.py estop.py event_relay_client.py event_relay_client.pyc event_relay_messages.py event_relay_messages.pyc event_relay.py fdbdump.py file_clerk_client.py file_clerk_client.pyc file_clerk.py file_clerk.py-1.217 fileinfo.py ftt_driver.py ftt.py generic_alarm.py generic_client.py generic_client.pyc generic_driver.py generic_driver.pyc generic_server.py generic_server.pyc get_all_bytes_counter.py GETBIN GET_BIN get_cron_title.py get.py get.py~ get.pyc get_total_bytes_counter.py hostaddr.py hostaddr.py~ hostaddr.pyc host_config.py host_config.py~ host_config.pyc host_config.py.new idlemovers.py info_client.py info_client.pyc info_server.py inquisitor_client.py inquisitor_client.pyc inquisitor_plots.py inquisitor_plots.pyc inquisitor.py interface.py interface.pyc inventory.py journal.py journal.pyc label_tape.py library_manager_client.py library_manager_client.py~ library_manager_client.pyc library_manager.py libtpshelve.pyc lintit lm_list.py lm_list.pyc log_client.py log_client.pyc log_finish_event.py log_server.py log_start_event.py log_trans_fail.py m2.py Makefile Makefile~ makeplot.py manage_queue.py manage_queue.pyc match_syslog.py media_changer_client.py media_changer_client.pyc media_changer.py media_changer_test.py module_trace.py monitor_client.py monitor_client.py~ monitor_client.pyc monitored_server.py monitored_server.pyc monitor_server.py monitor_server.py~ monitor_server.pyc mounts_plot.py movcmd_mc.py mover_client.py mover_client.pyc mover_constants.py mover_constants.pyc mover-nanny.py mover.py mover.py~ mover.pyc mpq.py mpq.pyc multiple_interface.py multiple_interface.py~ multiple_interface.pyc net_driver.py null_driver.py null_wrapper.py on-call.py option.py option.py~ option.pyc plotter.py pnfs_backup_plot.py pnfs.py pnfs.py~ pnfs.pyc priority_selector.py priority_selector.pyc quickquota.py quota.py ratekeeper_client.py ratekeeper_client.pyc ratekeeper.py ratemeter.py rate_test.py readonly_volumes.py report_volume_quotas.py restore.py rm_volmap.py run1.py safe_dict.py scanfiles.py send_alive.py set_lm_noread.py setpath.py setpath.pyc sg_db.py sgdb.pyc show_file_cgi.py show_volume_cgi.py stethoscope.py string_driver.py string_driver.pyc time_fifo.py timeofday.py timeofday.pyc Trace.py Trace.pyc udp_client.py udp_client.pyc udp_common.py udp_common.pyc udp_server.py udp_server.pyc vdbdump.py verify_db.pyc verify.py volume_assert.py volume_clerk_client.py volume_clerk_client.pyc volume_clerk.py volume_clerk.py-1.349 volume_family.py volume_family.pyc www_server.py www_server.pyc yank.py Fixed an error handling bug that would increase each resubmission by 2. accounting_client.py accounting_client.pyc accounting.py accounting.pyc accounting_query.py accounting_query.pyc accounting_server.py aci.py alarm_client.py alarm_client.pyc alarm.py alarm.pyc alarm_server.py alarm_server.pyc aml2_log.py aml2.py atomic.py atomic.py~ atomic.pyc backup_backup.py backup_client.py backup_client.pyc backup.py backup.pyc bfid_db.py callback.py callback.pyc cern_wrapper.py change_loc_cookie.py change_s_i.py charset.py charset.py~ charset.pyc checkBackedUpDatabases.pyc checkdb.py checkdbs.py check_pnfs_db.py cleanUDP.py cleanUDP.pyc configuration_client.py configuration_client.pyc configuration_server.py configuration_server.py~ configuration_server.pyc core cpio_odc_wrapper.py create_sg_db.py CVS db_compare.py db_dump.py db.py db.pyc db_retrieve_backup.py dbs.py dbs.pyc dcache_make_queue_plot_page.py delete_at_exit.py delete_at_exit.py~ delete_at_exit.pyc discipline.py discipline.pyc disk_driver.py disk_driver.pyc dispatching_worker.py dispatching_worker.pyc drivestat2.py drivestat_client.py drivestat_client.pyc drivestat_server.py edb.py edb.pyc e_errors.py e_errors.py~ e_errors.pyc ejournal.py ejournal.pyc encp_admin.py ENCPBIN encp.py encp.py~ encp.pyc encp_ticket.py encp_ticket.py~ encp_ticket.pyc encp_user.py enmail.py enmv.py enmv.py~ enmv.pyc enstore_admin.py enstore_alarm_cgi.py enstore_alarm_search_cgi.py enstore_constants.py enstore_constants.pyc enstore_display.py enstore_display.py~ enstore_display.pyc enstore_erc_functions.py enstore_erc_functions.pyc enstore_files.py enstore_files.pyc enstore_functions2.py enstore_functions2.pyc enstore_functions.py enstore_functions.pyc enstore_html.py enstore_html.pyc enstore_log_file_search_cgi.py enstore_make_log_calendar.py enstore_make_plot_page.py enstore_overall_status.py enstore_plots.py enstore_plots.pyc enstore.py enstore.pyc enstore_restart.py enstore_restart.pyc enstore_saag_network.py enstore_saag_network.pyc enstore_saag.py enstore_saag.pyc enstore_show_inventory_cgi.py enstore_show_inv_summary_cgi.py enstore_start.py enstore_start.pyc enstore_status.py enstore_status.pyc enstore_stop.py enstore_stop.pyc enstore_up_down.py enstore_up_down.pyc enstore_user_cgi.py enstore_user.py enstore_utils_cgi.py ensync_admin.py ensync.py ensync_user.py ENTV_BIN entv.py entv.py~ entv.pyc esgdb.py esgdb.pyc espion.py estart.py estop.py event_relay_client.py event_relay_client.pyc event_relay_messages.py event_relay_messages.pyc event_relay.py fdbdump.py file_clerk_client.py file_clerk_client.pyc file_clerk.py file_clerk.py-1.217 fileinfo.py ftt_driver.py ftt.py generic_alarm.py generic_client.py generic_client.pyc generic_driver.py generic_driver.pyc generic_server.py generic_server.pyc get_all_bytes_counter.py GETBIN GET_BIN get_cron_title.py get.py get.py~ get.pyc get_total_bytes_counter.py hostaddr.py hostaddr.py~ hostaddr.pyc host_config.py host_config.py~ host_config.pyc host_config.py.new idlemovers.py info_client.py info_client.pyc info_server.py inquisitor_client.py inquisitor_client.pyc inquisitor_plots.py inquisitor_plots.pyc inquisitor.py interface.py interface.pyc inventory.py journal.py journal.pyc label_tape.py library_manager_client.py library_manager_client.py~ library_manager_client.pyc library_manager.py libtpshelve.pyc lintit lm_list.py lm_list.pyc log_client.py log_client.pyc log_finish_event.py log_server.py log_start_event.py log_trans_fail.py m2.py Makefile Makefile~ makeplot.py manage_queue.py manage_queue.pyc match_syslog.py media_changer_client.py media_changer_client.pyc media_changer.py media_changer_test.py module_trace.py monitor_client.py monitor_client.py~ monitor_client.pyc monitored_server.py monitored_server.pyc monitor_server.py monitor_server.py~ monitor_server.pyc mounts_plot.py movcmd_mc.py mover_client.py mover_client.pyc mover_constants.py mover_constants.pyc mover-nanny.py mover.py mover.py~ mover.pyc mpq.py mpq.pyc multiple_interface.py multiple_interface.py~ multiple_interface.pyc net_driver.py null_driver.py null_wrapper.py on-call.py option.py option.py~ option.pyc plotter.py pnfs_backup_plot.py pnfs.py pnfs.py~ pnfs.pyc priority_selector.py priority_selector.pyc quickquota.py quota.py ratekeeper_client.py ratekeeper_client.pyc ratekeeper.py ratemeter.py rate_test.py readonly_volumes.py report_volume_quotas.py restore.py rm_volmap.py run1.py safe_dict.py scanfiles.py send_alive.py set_lm_noread.py setpath.py setpath.pyc sg_db.py sgdb.pyc show_file_cgi.py show_volume_cgi.py stethoscope.py string_driver.py string_driver.pyc time_fifo.py timeofday.py timeofday.pyc Trace.py Trace.pyc udp_client.py udp_client.pyc udp_common.py udp_common.pyc udp_server.py udp_server.pyc vdbdump.py verify_db.pyc verify.py volume_assert.py volume_clerk_client.py volume_clerk_client.pyc volume_clerk.py volume_clerk.py-1.349 volume_family.py volume_family.pyc www_server.py www_server.pyc yank.py Split get_clerk_info() functionality into get_file_clerk_info() and get_volume_clerk_info(). The original is now implemented using the to new functions. "Get" can use the newer versions more efficently. accounting_client.py accounting_client.pyc accounting.py accounting.pyc accounting_query.py accounting_query.pyc accounting_server.py aci.py alarm_client.py alarm_client.pyc alarm.py alarm.pyc alarm_server.py alarm_server.pyc aml2_log.py aml2.py atomic.py atomic.py~ atomic.pyc backup_backup.py backup_client.py backup_client.pyc backup.py backup.pyc bfid_db.py callback.py callback.pyc cern_wrapper.py change_loc_cookie.py change_s_i.py charset.py charset.py~ charset.pyc checkBackedUpDatabases.pyc checkdb.py checkdbs.py check_pnfs_db.py cleanUDP.py cleanUDP.pyc configuration_client.py configuration_client.pyc configuration_server.py configuration_server.py~ configuration_server.pyc core cpio_odc_wrapper.py create_sg_db.py CVS db_compare.py db_dump.py db.py db.pyc db_retrieve_backup.py dbs.py dbs.pyc dcache_make_queue_plot_page.py delete_at_exit.py delete_at_exit.py~ delete_at_exit.pyc discipline.py discipline.pyc disk_driver.py disk_driver.pyc dispatching_worker.py dispatching_worker.pyc drivestat2.py drivestat_client.py drivestat_client.pyc drivestat_server.py edb.py edb.pyc e_errors.py e_errors.py~ e_errors.pyc ejournal.py ejournal.pyc encp_admin.py ENCPBIN encp.py encp.py~ encp.pyc encp_ticket.py encp_ticket.py~ encp_ticket.pyc encp_user.py enmail.py enmv.py enmv.py~ enmv.pyc enstore_admin.py enstore_alarm_cgi.py enstore_alarm_search_cgi.py enstore_constants.py enstore_constants.pyc enstore_display.py enstore_display.py~ enstore_display.pyc enstore_erc_functions.py enstore_erc_functions.pyc enstore_files.py enstore_files.pyc enstore_functions2.py enstore_functions2.pyc enstore_functions.py enstore_functions.pyc enstore_html.py enstore_html.pyc enstore_log_file_search_cgi.py enstore_make_log_calendar.py enstore_make_plot_page.py enstore_overall_status.py enstore_plots.py enstore_plots.pyc enstore.py enstore.pyc enstore_restart.py enstore_restart.pyc enstore_saag_network.py enstore_saag_network.pyc enstore_saag.py enstore_saag.pyc enstore_show_inventory_cgi.py enstore_show_inv_summary_cgi.py enstore_start.py enstore_start.pyc enstore_status.py enstore_status.pyc enstore_stop.py enstore_stop.pyc enstore_up_down.py enstore_up_down.pyc enstore_user_cgi.py enstore_user.py enstore_utils_cgi.py ensync_admin.py ensync.py ensync_user.py ENTV_BIN entv.py entv.py~ entv.pyc esgdb.py esgdb.pyc espion.py estart.py estop.py event_relay_client.py event_relay_client.pyc event_relay_messages.py event_relay_messages.pyc event_relay.py fdbdump.py file_clerk_client.py file_clerk_client.pyc file_clerk.py file_clerk.py-1.217 fileinfo.py ftt_driver.py ftt.py generic_alarm.py generic_client.py generic_client.pyc generic_driver.py generic_driver.pyc generic_server.py generic_server.pyc get_all_bytes_counter.py GETBIN GET_BIN get_cron_title.py get.py get.py~ get.pyc get_total_bytes_counter.py hostaddr.py hostaddr.py~ hostaddr.pyc host_config.py host_config.py~ host_config.pyc host_config.py.new idlemovers.py info_client.py info_client.pyc info_server.py inquisitor_client.py inquisitor_client.pyc inquisitor_plots.py inquisitor_plots.pyc inquisitor.py interface.py interface.pyc inventory.py journal.py journal.pyc label_tape.py library_manager_client.py library_manager_client.py~ library_manager_client.pyc library_manager.py libtpshelve.pyc lintit lm_list.py lm_list.pyc log_client.py log_client.pyc log_finish_event.py log_server.py log_start_event.py log_trans_fail.py m2.py Makefile Makefile~ makeplot.py manage_queue.py manage_queue.pyc match_syslog.py media_changer_client.py media_changer_client.pyc media_changer.py media_changer_test.py module_trace.py monitor_client.py monitor_client.py~ monitor_client.pyc monitored_server.py monitored_server.pyc monitor_server.py monitor_server.py~ monitor_server.pyc mounts_plot.py movcmd_mc.py mover_client.py mover_client.pyc mover_constants.py mover_constants.pyc mover-nanny.py mover.py mover.py~ mover.pyc mpq.py mpq.pyc multiple_interface.py multiple_interface.py~ multiple_interface.pyc net_driver.py null_driver.py null_wrapper.py on-call.py option.py option.py~ option.pyc plotter.py pnfs_backup_plot.py pnfs.py pnfs.py~ pnfs.pyc priority_selector.py priority_selector.pyc quickquota.py quota.py ratekeeper_client.py ratekeeper_client.pyc ratekeeper.py ratemeter.py rate_test.py readonly_volumes.py report_volume_quotas.py restore.py rm_volmap.py run1.py safe_dict.py scanfiles.py send_alive.py set_lm_noread.py setpath.py setpath.pyc sg_db.py sgdb.pyc show_file_cgi.py show_volume_cgi.py stethoscope.py string_driver.py string_driver.pyc time_fifo.py timeofday.py timeofday.pyc Trace.py Trace.pyc udp_client.py udp_client.pyc udp_common.py udp_common.pyc udp_server.py udp_server.pyc vdbdump.py verify_db.pyc verify.py volume_assert.py volume_clerk_client.py volume_clerk_client.pyc volume_clerk.py volume_clerk.py-1.349 volume_family.py volume_family.pyc www_server.py www_server.pyc yank.py Moved where items are removed from the ticket to subit_one_request() from handle_retries(). 

Fixed a bug that prevented encp from handling CRCs that did not fit in a C-style signed int. 

Fixed a problem with the crc check. The values are compared in hex, but encp did not correctly handle zero padded hex strings versus non zero padded hex string. Thus the comparisons would not match despite being correct. 

Fixed a recently introduced bug in encp. The change was added for "Get". The broken change prevented normal encps from updating their metadata correctly. Now it correctly handles the situation for encp and get cases. 

Fixed bug(s) relating to detecting the correct enstore system to use based on the volume. 

Address error handling in the new layer 2 crc check. 

Added a working check for encp to compare the crc with the crc stored in layer 2 from dcache. 

Added the CRC comparison with the layer 2 dcache crc. This code is left commented out, because of an issue with the seed value used to calulate the crcs. Also, did some cleanup because a newer pychecker complained about things. 

Changed the way emailable alarms are handled. Previously, emailable alarms were also sent a normal alarm copy. Now only the normal alarm is sent when the error is not emailable. 

1) Fixed bug when writing large files from dcache. 2) create_zero_length_files() will raise exceptions instead of quiting (the default) if an argument is specifed. (Need for get). 3) Added additional verbose messages to set_pnfs_settings(). 4) For "get" with --list, basename is applied to specified files. 

Moved the signal setup calls to earlier in the code. Also, fixed a bug the prevented encp from finding the correct enstore system for volume reads. 

Added some verbose output for some get debugging. 

Fixed a traceback that would occur if the pnfs id specifed with dcache writing/reading did not exists. Now an error message is given. Also, another dcache related fix. When writing (with --put-cache) encp will now check to make sure the filesizes of the input file matches that of the output file. Dcache is supposed to set the output filesize before starting encp, but that may not always be happening. 

Added the --bypass-filesystem-max-filesize_check option to avoid failing a transfer because the filesystem does not support large files. 

Fixed a bug for encp --volume or Get when the request volume is not declared in any enstore system. Instead of tracebacking, the user will get a NOVOLUME error. 

Fixed a bug that broke encp's ability to switch between the different pnfs paths on reads. 

Modified the set_pnfs_settings() function to use the file family from the volume family rather than from unreliable existance of a stand alone file family element in the dictionary. 

Minor change to the list of exceptions that are more likely to happen. 

Fixed some problems with the formation of valid requests. Specifically dealing with known metadata that contains different filename information that what is passed to "Get" via --list. 

Modification to handle an error situation when the file does not exist on --get-bfid reads. A traceback was generated that should have been caught. This type of error was found when trying to read a file file a valid i-node but the directory entry (supposidly) pointing to it was broken (too many i-nodes for valid directory entries problem of CDF). 

Speeded up the create_read_request() function for volume based transfers. 

Fixed a spelling error. 

Finished modifying the ability to determine which enstore system a particular volume belongs to. This is used for "Get" and the encp --volume option. 

Changed submition to submission. Also, made a change to submit_one_request() to change the 'method' ticket item to "read_tape_start". Retries were failing because it was still holding 'read_next'. 

More "Get" fixes. Currently, files without metadata and --list is specified can be read. 

Added two return statements so that the real error gets returned right away for set_pnfs_settings(). 

Changed some log messages. "Waiting" -> "Listening" 

These changes are for get to properly determine what metadata is available. 

More edits for "Get". These include more create_read_request() changes in encp.py and a go-back-to-step-one loop in get.py. 

========== enstore.py ====================================================================================

remove dbs from it 

adding info_server 

use sudo to kill mover process, become enstore if root when doing enstore Estart or Estop 

========== enstore_constants.py ====================================================================================

add new rates to encp history page 

monitor info_server with inq 

add file family to queue line 

add more states and fix double declaration of DEAD and ALIVE 

adding info_server 

Fixed a spelling error. 

========== enstore_files.py ====================================================================================

add new rates to encp history page 

add remove method 

use os.path.exists 

add exists method to enfile 

get rid of lock file and close seen_down and schedule file 

========== enstore_html.py ====================================================================================

switch rates on encp page to correctr cols 

add new rates to encp history page 

fix location of file family info 

add file family to queue line 

add to NO_INFO_STATES 

change spam to enstore 

========== enstore_up_down.py ====================================================================================

generate a pageable ticket 

change test ticket message 

========== entv.py ====================================================================================

Added --version switch to entv. 

Small change to correctly work with a change to accuratly have enstore_display toggle the animation on and off at the request of the user. 

Forgot to add self.profile decloration to the entv interface class. 

Added support of the --profile option in entv. This option will have entv print out profile information on exit. 

Removed hardcoding the use of the screen ":0.0". 

When entv first starts without any .entvrc file, it starts with the entire screen filled. 

========== ftt_driver.py ====================================================================================

return -1 if close fails 

replaced import of driver with import of generic_driver 

fixed a problem with ftt open returning None 

if ftt is closed do not flush 

========== hostaddr.py ====================================================================================

Moved some traces from level 9 to 19. 

========== inquisitor.py ====================================================================================

test new cvs repository location 

monitor info_server with inq 

add support for more timed out states 

fix bug in reporting mover up/down email 

send mail when marking something down or up 

if sched file not there it is ok 

fix it so do not need outage or schedule file on startup 

========== inquisitor_client.py ====================================================================================

add option for enstore sched, reason 

========== inquisitor_plots.py ====================================================================================

fix ALIVE 

========== interface.py ====================================================================================

fixed convert_version 

========== inventory.py ====================================================================================

use os.path.join() rather than string concatnation 

massive code clean up 

add more debugging info 

add more debugging info 

add more debugging info 

new inventory that goes live against postgresql database 

temporary fix for a volume_clerk bug 

meaningful remark 

fix a bug 

consider never written volume; add line number 

change de_file format 

add Date to DECLARACTION_ERROR 

take care ov eval-b; clean up checking for b library 

fix the total size 

raise 9940B capacity to > 180G 

bug fix 

fix blank volume and calculation of total size 

fix (1) cleaning tape (2) Migration library and (3) zero written 

check volume declaration 

========== monitored_server.py ====================================================================================

monitor info_server with inq 

========== mover.py ====================================================================================

set mover offline in case of FTT_EUNRECOVERED 

introduced DRIVE type of error. Go offline if error type is DRIVE 

pychecker inspired corrections 

the # sign was missing in the 1st line 

too long in ACTIVE was not fixed in the prev. release. It is now, I think 

fixed too long in ACTIVE 

more diagn added 

more diagn added 

some changes detected with pychecker 

added dignostic meccages to investigate the cause of too long in state alarm. Remove when fixed 

When seeking and the EOD is reached, return as error (READ_ERROR, READ_EOD) instead of (POSITIONING_ERROR, posistioning error FTT_EBLANK). This change reflex a fix made in read_tape() for the same problem. 

added firmware recording to DB 

set default value for send_stats to 1 

replaced import of driver with import of generic_driver 

process exception generated when 1 byte is sent by tape_write 

make have bound working for get requests 

changed diagn. message 

added detail for raise in stream_write 

added detail for raise in stream_write 

Make the LM address reassgnment after communicating with get to avoid messages being sent to get out of the sequesnce. 

added more diagnostics 

added more diagnostics 

added traces on Michaels request 

added traces on Michaels request 

delete pipe object for cleanup reason 

fixed location for CRC check after write for cern wrapper 

fixed location for CRC check after write for cern wrapper 

enable 0 lenth file for read_next 

added processing for None returned with OK in create_bit_file 

fixed a bug in selective crc check part of write_tape. Nothing serious but mover was failing when FTT_EBLANK was raised due to a firmware bug 

some minor fixes 

flush file when write_tape is interrupted otherwise next request fails to positon tape 

more information for CRC error alarms 

some fixes in error processing while communigating with get 

minor change 

some mods for 0-length file 

some mods for 0-length file 

modified mover not to intrepret double fm as a 0 length file 

If mover starts in the OFFLINE state and there is a tape in the drive, dismount it, so that it becomes available. 

1. Deal with 0-length files that were seen on sdss DLT tapes. 2. Update volume DB after file is read using "read_next" method (sdss and ktev tapes). 3. Do not import ftt on a fly. Rather make it importted into a class. 

mover now can read files with variable block size, but only for get requests 

added some log messages in attempt to undetstand what causes connection reset by peer error on the client side 

fixed a bug 

minor mods 

fixed start in disk mover 

first working code for ktev tape ingest 

fixed convert_version 

========== mover_client.py ====================================================================================

Modified these clients to print the full --help output when no options are given. (i.e. "enstore library") It used to print just the shorter usage help output. This is to have all the server clients conform to a single look and feel. 

========== net_driver.py ====================================================================================

replaced import of driver with import of generic_driver 

========== null_driver.py ====================================================================================

replaced import of driver with import of generic_driver 

========== string_driver.py ====================================================================================

replaced import of driver with import of generic_driver 

========== volume_clerk.py ====================================================================================

deal with Traceback in dropped tcp connection 

put str() around exc_type and exc_value 

now records RECYCLED and modified 

guard against broken database connection 

add change_state() for is_vol_full() 

add history and write protect stuff 

remove rename_volume from file clerk 

break away from BerkeleyDB 

fix a bug 

add more trace; work around tcp connection drop problem 

switch to postgresql 

fix logging error 

log more often 

set si_time whenever the volume is set full 

========== pnfs.py ====================================================================================

Fixed a call to utime that was hosing enmv. I don't know why it was though. Moved some of the KeyboardInterupt exception catching lines to also catch SystemExit. 

Fixed a comment to match the code. 

Modifications made to hit pnfs with fewer os.stat() calls. These extraneous ones were performance killers. 

There was a recursive function call situation when trying to get the size of large files. This would ultimatly end up with the size being -1 after python gave up from too many functions on the stack. pstat_decode() now calls get_xreference() directly instead of get_file_size() (get_file_size() did call pstatinfo()->pstat_decode()). 

Fixed a bug from last commit. 

Added a Trace.log to record the internal sizes found in get_file_size() to help debug a problem. 

Modified an error message to give more usefull information about the filesize corruption errors. 

Made changes to verify_exixtance() and get_file_size() to avoid unecessary file stats/access. 

Modified the code to remove unecessary pnfs queries. 

Made changes related to stat()ing a file. They should reduce race condition problems when stat()ing the pnfs files metadata. 

fix a bug 

Modifications to cleanup the code that a newer version of pychecker warned about. 

Fixed some --help messages. The help text for --file-family commands were also listed for the --file-family-width and --file-family-wrapper commands. 

More fixes for the "more i-modes in a directory than is in the directory listing" problem. 

When a new pnfs database is first configured, there are no existing tags. This fix allows one to create these tags. A bug was recently introduced that required the tag to exist before they could be modified. The change only requires that the directory exist (obviously) and not the tag file. 

do not write empty crc to layer 4 

change default complete_crc to '' 

add complete_crc to class File 

========== option.py ====================================================================================

add enable-disable for quota 

add quota options 

configurable monitor server port 

Added --version switch to entv. 

Added support of the --profile option in entv. This option will have entv print out profile information on exit. 

add --fins-same-file 

add --query 

Add support for get to have a --sequential-filenames option to override any existing filename metadata and use sequentially numbered filenames instead. 

add mark-bad, unmark-bad and show-bad 

add history and write protect stuff 

add HISTORY = "history" 

add option for enstore sched, reason 

Made some cleanup modifications after trying out a newer pychecker. 

Added the --bypass-filesystem-max-filesize-check option for encp. 

Added comment for "Get" --list option. 

========== monitor_client.py ====================================================================================

configurable monitor server port 

configurable monitor server port 

configurable monitor server port 

Bug fix to prevent non existant hosts (with --host) to cause a traceback. Bug fix to prevent a string being passed to os.strerror() which caused tracebacks. Added code to catch ^-C without tracebacking. Made changes to minimize pychecker warnings. 

Fixed some potential network error handling bugs. Also, fixed some things that a newer version of pychecker noticed. 

========== volume_assert.py ====================================================================================

Fixed a spelling error. 

Fixed some more error handling. Also, played with the volume clerk locating code to try and speed things up. 

Handle some errors that happen when the mover closes the control socket early. 

========== enstore_restart.py ====================================================================================

adding info_server 

add drivestat, include accounting server in general start/stop 

========== library_manager_client.py ====================================================================================

exit wit 1 not -1 

========== generic_client.py ====================================================================================

exit wit 1 not -1 

========== quickquota.py ====================================================================================

change enstore vol --vols to enstore info --vols 

fix if no volumes in robot 

========== monitor_server.py ====================================================================================

Made changes to minimize pychecker warnings. 

Fixed some potential network error handling bugs. Also, fixed some things that a newer version of pychecker noticed. 

========== enstore_show_inventory_cgi.py ====================================================================================

switch to info server 

add DECLARATION_ERROR 

========== file_clerk.py ====================================================================================

avoid throwing traceback in get_user_sockets() 

make get_all_bfids() sorted by location_cookies 

add code to trace __erase_volume() exception 

put str() around exc_type and exc_value 

add --mark-bad --unmark-bad --show-bad 

alarm for dataabse connection; bug fix for sys.exc_type, sys.exc_value 

add more trace for erase failed 

remove rename_volume from file clerk 

do not list empty file in ls-active 

remove old and obsolete restore_file 

let tape_listing sorted by server 

break away from BerkeleyDB 

set initial deleted state to unknown 

switch to postgresql 

bug fix for missing msg 

========== accounting.py ====================================================================================

add encp_version field 

========== accounting_client.py ====================================================================================

add encp_version field 

========== event_relay_client.py ====================================================================================

If the node was multihomed and contained an enstore.conf file; the event relay client would not previously pick up the hostip line in the enstore.conf file. 

changed default TO and select TO 

========== enstore_start.py ====================================================================================

do not start db_checkpoint and db_deadlock 

adding info_server 

increased sleep time for starting config server 

========== drivestat2.py ====================================================================================

add firmware_version 

========== drivestat_client.py ====================================================================================

add firmware_version 

========== drivestat_server.py ====================================================================================

to be backward compatible again 

to be backward compatible 

add firmware_version 

========== enstore_display.py ====================================================================================

There was a subtle bug left over from the recent performance fixes. An undefined variable would get referenced when the display got reinitalized. Rewrote how the toggling of the connection animation would work. It now correctly matches the checkbutton's "check state" with the "animate state." 

Fixed a bug that could allow entv to miss removing an unused client from the display. The search for unconnected clients is now done once a second instead of every 30 milliseconds. Another performace boost was to combine the scheduled tasks of connection animation and event processing into one event. Yet another performance boost was to schedule timer updates for once a second instead of every 30 milliseconds. Big time performance improvement. 

Modified the condition under which a "transfer" message is ignored. It now will keep a soft limit of the minimum of 20 messages or the number movers. 

Entv will now actually wait 5 seconds, as advertised, before removing a client from the display after all transfer to/from it have completed. When 100% of the file is transfered, the animation of the connection will stop. Previously, it would continue the animation until the 5 seconds of animation had completed; even if it said it was already done. 

Fixed a bug when the window is scrunched small. The height_wanted for fonts was zero and wasn't getting into the while loop in get_font(). Fixed bugs that caused the geometry to be invalid numbers. Adjusted the rate that the callback that removes stale clients get called. It is up from the the initial 30 milliseconds to 500 milliseconds (or 0.5 sec). 

There was a math bug in the number of rows per column caluations. This could (and in fact did) result in movers being incorrectly assinged to an unseen (n+1)th collunm. The error was tracked to the use of a round() function call that was replaced with a math.ceil() call. 

Fix the previous commit to actually let the different label colors take effect. 

Modified the mover label color when in error or offline state. 

When entv first starts without any .entvrc file, it starts with the entire screen filled. 

Moved the mover label to inside the mover rectangle. 

Cleaned up some of the tcl/tk library search code. 

add ENTV_DIR 

Removed the import of entv.py. This was not necessary and after the previous update broke certain enstore/tk/python configurations. 

Reduced the number of items in the command queue before 'transfer' messages get dropped. 

Attempted to address the problem where the list of actions could grow without bound. This is likely the source of the reported problem of movers continuing to show data movement 'after' it is known to be offline/error. Also, a number of tweeks were made to make a newer version of pychecker complain less. No functionality changes were made. 

========== fileinfo.py ====================================================================================

add layer 2 crc 

========== enstore_status.py ====================================================================================

add new rates to encp history page 

init varialbes in case is invalid encp line 

========== enstore_stop.py ====================================================================================

do care db_checkpoint and db_deadlock any more 

adding info_server 

removed confusing and annoying message 

use sudo to kill mover process, become enstore if root when doing enstore Estart or Estop 

========== file_clerk_client.py ====================================================================================

honor timeout and retry in get_brand() and bfid_info() 

move user commands to info server 

fix a bug 

add --mark-bad --unmark-bad --show-bad 

remove rename_volume() 

remove old and obsolete restore_file 

let tape_listing sorted by server 

redo --restore 

========== discipline.py ====================================================================================

fix e bug 

get host name from the callback address if exists 

========== disk_driver.py ====================================================================================

replaced import of driver with import of generic_driver 

========== enstore_functions2.py ====================================================================================

fix ALIVE 

========== show_file_cgi.py ====================================================================================

switch to info server 

========== show_volume_cgi.py ====================================================================================

switch to info server 

========== accounting_server.py ====================================================================================

add encp_version field 

========== scanfiles.py ====================================================================================

take care of /pnfs/fs/... 

take care of /pnfs/fs/... 

switch to info server; fix empty driver 

========== volume_clerk_client.py ====================================================================================

move users commands to info server 

add history and write protect stuff 

fix a typo 

change the way file listing is handled 

remove non_del_file from listing 

========== enstore_overall_status.py ====================================================================================

fix ALIVE 

========== enstore_show_inv_summary_cgi.py ====================================================================================

add DECLARATION_ERROR 

========== library_manager.py ====================================================================================

fixed a bug causing lm hang 

added some diagnostics 

changes to please pychecker 

For idle mover request. If request has a restriction from discipline (restrict_host_access), get next request from the same request group, and repeat it until this group is finished or request, picked up from this group does not have a host restriction. Then proceed with the next request group. 

fixed a problem with bound volume when requests qith restricted host access would not go to the mover 

added trace 

fix encp_ticket call 

fix encp_ticket call 

allow have_bound request processing for read_tape_start method 

check ticket for the consistancy 

log message added 

some modes to make restrict_host_access working again 

fix e bug 

get host name from the callback address if exists 

allow more FTT_SUCCESS along with FTT_EBLANK before setting volume to NOACCESS 

fixed bug introduced in the last rev 

added some diagn. and exception proc 

fixed a bug 

do not remove from volumes_at_movers for ENCP_GONE while state of the mover is HAVE_BOUND in mover_error. Otherwise it may cause a request for already mounted tape to go to another mover 

even though conver_version is not used, fix it 

do not put NOTALLOWED in the busy volumes list 

tape ingest changes, trace added 

========== enstore_plots.py ====================================================================================

make plots more readable 

========== manage_queue.py ====================================================================================

added trace 

fixed a problem with bound volume when requests qith restricted host access would not go to the mover 

new method sprint added 

added try ... except to understand and possibly treat the problem with deleting a ref 

========== udp_server.py ====================================================================================

Added more information to the reply_*() Trace.trace() functions called.