From: <jj...@us...> - 2004-02-04 08:45:06
|
Update of /cvsroot/ngetsuite/ngetsuite/ngetsuite In directory sc8-pr-cvs1.sourceforge.net:/tmp/cvs-serv16067/ngetsuite Modified Files: downloader.rb downloadmanager.rb Log Message: daemon and manager handles shutdown, added 'FAILED' status for downloaded file Index: downloader.rb =================================================================== RCS file: /cvsroot/ngetsuite/ngetsuite/ngetsuite/downloader.rb,v retrieving revision 1.17 retrieving revision 1.18 diff -C2 -d -r1.17 -r1.18 *** downloader.rb 2 Feb 2004 17:44:19 -0000 1.17 --- downloader.rb 3 Feb 2004 21:29:38 -0000 1.18 *************** *** 90,98 **** } rescue Exception => e ! puts "Exception : " + e ! puts " => " + e.message print e.backtrace.join("\n") rescue Error => e ! puts "Error : " + e print e.backtrace.join("\n") rescue DBI::DatabaseError => e --- 90,97 ---- } rescue Exception => e ! puts "Exception : #{e} => " + e.message print e.backtrace.join("\n") rescue Error => e ! puts 'Error : ' + e print e.backtrace.join("\n") rescue DBI::DatabaseError => e *************** *** 111,115 **** def stop # oh no they killed kenny ! ! Process.kill("SIGTERM", @io.pid) @io.close @t.exit --- 110,114 ---- def stop # oh no they killed kenny ! ! Process.kill('SIGTERM', @io.pid) @io.close @t.exit *************** *** 126,132 **** time = Time.now.to_s $dbh.do 'lock tables queue write' ! $dbh.do "update queue set `status` = 'FINISHED', `date_finished`=NOW() where `id` = '#{@id}'" $dbh.do 'unlock tables' ! log "Download finished for queue #{@value}, group #{@group}" end --- 125,132 ---- time = Time.now.to_s $dbh.do 'lock tables queue write' ! newstatus = success ? 'FINISHED' : 'FAILED' ! $dbh.do "update queue set `status` = '#{newstatus}', `date_finished`=NOW() where `id` = '#{@id}'" $dbh.do 'unlock tables' ! log "Download #{newstatus.downcase} for queue #{@value}, group #{@group}" end Index: downloadmanager.rb =================================================================== RCS file: /cvsroot/ngetsuite/ngetsuite/ngetsuite/downloadmanager.rb,v retrieving revision 1.14 retrieving revision 1.15 diff -C2 -d -r1.14 -r1.15 *** downloadmanager.rb 2 Feb 2004 17:44:19 -0000 1.14 --- downloadmanager.rb 3 Feb 2004 21:29:38 -0000 1.15 *************** *** 24,65 **** def start ! if (@started == false) ! log "Starting manager" ! @started = true ! @mainThread = Thread.new { ! begin ! loop do ! # log "current : #{@current_dlers}, max : #{@max_dlers}" ! if (@current_dlers < @max_dlers) ! start_new_downloader ! end ! check_finished_dls ! sleep(@poll_interval) ! end ! rescue Exception => e ! puts "Exception : " + e ! puts " => " + e.message ! print e.backtrace.join("\n") ! rescue Error => e ! puts "Error : " + e ! print e.backtrace.join("\n") ! rescue DBI::DatabaseError => e ! puts 'An error occurred' ! puts 'Error code: ' + e.err ! puts 'Error message: ' + e.errstr ! end ! } ! else debug 'Already started' end end def start_new_downloader ! row = $dbh.select_one('select * from queue where `status` = ! \'PENDING\' order by `priority` desc limit 1') ! if row == nil ! return false ! end @current_dlers += 1 --- 24,62 ---- def start ! unless @started == false debug 'Already started' + return end + @started = true + log 'Starting manager' + @mainThread = Thread.new { + begin + while @started do + log "current : #{@current_dlers}, max : #{@max_dlers}" if @lastlog_current != @current_dlers or @lastlog_max != @max_dlers + @lastlog_current, @lastlog_max = @current_dlers, @max_dlers + if (@current_dlers < @max_dlers) + start_new_downloader + end + check_finished_dls + sleep(@poll_interval) + end + rescue Exception => e + puts "Exception : #{e} => #{e.message}" + print e.backtrace.join("\n") + rescue Error => e + puts 'Error : ' + e + print e.backtrace.join("\n") + rescue DBI::DatabaseError => e + puts 'An error occurred' + puts 'Error code: ' + e.err + puts 'Error message: ' + e.errstr + end + } end def start_new_downloader ! row = $dbh.select_one("select * from queue where `status`='PENDING' order by `priority` desc limit 1") ! return false if row == nil @current_dlers += 1 *************** *** 67,72 **** log "found #{value} for group #{group}\n" ! dler = Downloader.new(id, type, value, ! group, @basedir + '/' + subdir, prio) @dlers[id] = dler dler.start --- 64,68 ---- log "found #{value} for group #{group}\n" ! dler = Downloader.new(id, type, value, group, @basedir + File::Separator + subdir, prio) @dlers[id] = dler dler.start *************** *** 86,96 **** end def check_finished_dls @dlers.each {|id, dler| ! if dler.finished? ! dler.finish(true) ! @dlers.delete(id) ! @current_dlers -= 1 ! end } end --- 82,111 ---- end + def shutdown + log 'Shutdown' + if @started + @started = false + @dlers.each { |d| + d.stop + } + @mainThread.run + 10.times do |i| + sleep 0.1 + break unless @mainThread.alive? + if i == 9 + log 'Killing manager thread' + @mainThread.kill + end + end + end + end + def check_finished_dls @dlers.each {|id, dler| ! next unless dler.finished? ! dler.finish(true) ! @dlers.delete(id) ! log "Finished download of queue #{dlers.value}" ! @current_dlers -= 1 } end |