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

--
You received this message because you are subscribed to the Google Groups "Ruby on Rails: Talk" group.
To view this discussion on the web visit https://groups.google.com/d/msg/rubyonrails-talk/-/G3xDSOMpEq0J.
To post to this group, send email to rubyonrails-talk@googlegroups.com.
To unsubscribe from this group, send email to rubyonrails-talk+unsubscribe@googlegroups.com.
For more options, visit this group at http://groups.google.com/group/rubyonrails-talk?hl=en-US.

Search Discussions

Related Discussions

Discussion Navigation
viewthread | post
Discussion Overview
grouprubyonrails-talk @
categoriesrubyonrails
postedJun 29, '12 at 7:42a
activeJun 29, '12 at 7:42a
posts1
users1
websiterubyonrails.org
irc#RubyOnRails

1 user in discussion

Gurdipe Dosanjh: 1 post

People

Translate

site design / logo © 2021 Grokbase