Retry problem

hi

I am trying to update the following method as the retry we have hard
coded to ensure the sql transaction retires three times does not work.

When we get a failure it rolls back but does not retry.

Is there another I can add a retry or correct the following code

Gurdipe

def export_data( table_nickname, output_data_file, column_headers )
  component,table_nickname = get_component(table_nickname)
  data_warehouse_class = component.class
  data_warehouse_instance = data_warehouse_class.instance
  # Get table name
  teradata_table_name =

data_warehouse_instance.send(table_nickname).to_s
start_time = Time.now()
# Create column list, with various casting and reformatting
column_list = []
column_headers.each do |column_header|
format = “”
if column_header.type == ‘DA’
format = “(format ‘YYYY/MM/DD’)”
end

    column_def = "CAST( COALESCE( TRIM( #{column_header.name} 

#{format}
) , ‘’) as VARCHAR(#{column_header.max_length+10}) )" # Some data types
need extra space so add 10 chars
column_list.push(column_def)
end

  •  tries = 3 # try three times and then give up*
    begin
    # Create fastexport definition
    fed = <<END_FED
    

    .logtable
    DXWI_PROD_CRORDER_PLAY_PEN.promo_fexp_#{Time.now.strftime("%Y%m%d%H%M%S")}_log;
    .logon
    tdpm/#{DATA_WAREHOUSE_CONFIG[‘username’]},#{DATA_WAREHOUSE_CONFIG[‘password’]};
    .begin export sessions 10;

    .export outfile #{output_data_file}
    format fastload
    mode record;

    /* FETCH DATA */
    SELECT
    #{column_list.join(" ,\n")}
    FROM #{teradata_table_name}
    ;

    /* END */
    .end export;

    /* LOGOFF */
    .logoff;

    /* DONE */
    END_FED

    # Write definition to a temporary file, because calling it from a
    

ruby pipe can cause blocks
# on tables with lots of columns (denorm_brag_report)
fed_file =
“#{GENERAL_SYSTEM_SETTINGS[‘fastexport_temp_dir’]}/#{teradata_table_name.downcase}_data.fed”
File.open(fed_file, ‘w’) {|f| f.write(fed) }

  RAILS_DEFAULT_LOGGER.info("FLA_FILE_PATH: <#{output_data_file}>")
  RAILS_DEFAULT_LOGGER.info("TERADATA_TABLE: 

<#{teradata_table_name}>")
RAILS_DEFAULT_LOGGER.info(“Fastexport Definition File:\n
#{fed_file}\n”)
RAILS_DEFAULT_LOGGER.info(“Fastexport Definition:\n #{fed}\n”)

  # Use fexp (fastexport) as system command
  RAILS_DEFAULT_LOGGER.info("Executing fastexport")

    output = nil
    open_return = IO.popen("fexp < #{fed_file}", "w+") do |pipe|
      pipe.close_write()
      output = pipe.read()
    end
  rescue
  •    tries -= 1*
      sleep(1) # since we sometime get a time stamp problem, wait one
    

second and then retry
retry if tries > 0
raise # re-raise the exception if it hasn’t been retried
end
# Check results
result = $?
if result == 0
RAILS_DEFAULT_LOGGER.info("–")
RAILS_DEFAULT_LOGGER.info(“Finished Extracting data from
Teradata
(#{Time.now()-start_time} seconds)”)
RAILS_DEFAULT_LOGGER.info("–")
else
RAILS_DEFAULT_LOGGER.info(“Failed Extracting data from Teradata
(#{Time.now()-start_time} seconds) - Error code: #{result}”)
RAILS_DEFAULT_LOGGER.info(“Output from FastExport:\n#{output}”)
raise(“ERROR: Export of Table <#{teradata_table_name}> failed -
Error Code #{result}.”)
end
return
end