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.