From 2229b3fb32786e018cbe1a038b78c65c2c0ecf3d Mon Sep 17 00:00:00 2001 From: Ward Wouts Date: Wed, 8 May 2002 22:08:32 +0000 Subject: [PATCH] betere error handling? --- trunk/ripnews/news/article.rb | 40 +++++++++++++++++++++++++++++++---- 1 file changed, 36 insertions(+), 4 deletions(-) diff --git a/trunk/ripnews/news/article.rb b/trunk/ripnews/news/article.rb index 9f8fa54..cdd6f5c 100644 --- a/trunk/ripnews/news/article.rb +++ b/trunk/ripnews/news/article.rb @@ -35,6 +35,11 @@ def initialize(nntpservers, groupname, newsrc="~/.newsrc") } end +def reconnect(server) + print "Trying to reconnect to #{server}...\n" + @connections[server]["nntp"] = Net::NNTP.new(server) +end + def add(messid, id, server, subject) # print "Messid: #{messid}\n" # print "Id: #{id}\n" @@ -150,12 +155,22 @@ def get_group_body(subj) resp, id, messid, list = @connections[@groups[subj]["servers"][i]]["nntp"].body(@groups[subj]["messages"][i]) rescue Net::NNTPReplyError print "Caught Net::NNTPReplyError in get_group_body reading article #{@groups[subj]["messages"][0]}\n" + print "mess-id i: #{@groups[subj]["messages"][i]}\n" + print "mess-id i+1: #{@groups[subj]["messages"][i+1]}\n" if (i+1 < @groups[subj]["messages"].length) and (@groups[subj]["messages"][i] == @groups[subj]["messages"][i+1]) print "Trying next server\n" - next + i += 1 + retry + else print "message-id not on another server :(\n" + return false end return false + rescue Errno::EPIPE, Errno::ECONNRESET + print "Caught Errno::EPIPE reading from server #{@groups[subj]["servers"][i]}\n" + print "Error: #{$!}\n" + reconnect(@groups[subj]["servers"][i]) + retry end @gotten[ @groups[subj]["messages"][i] ] = true result = list @@ -179,11 +194,16 @@ def get_group_body_first(subj) print "Caught Net::NNTPReplyError in get_group_body_first reading article #{@groups[subj]["messages"][0]}\n" if (i+1 < @groups[subj]["messages"].length) and (@groups[subj]["messages"][i] == @groups[subj]["messages"][i+1]) - print "Trying next server\n" + print "Trying next server...\n" i += 1 next end return false + rescue Errno::EPIPE, Errno::ECONNRESET + print "Caught Errno::EPIPE reading from server #{@groups[subj]["servers"][i]}\n" + print "Error: #{$!}\n" + reconnect(@groups[subj]["servers"][i]) + retry end @gotten[@groups[subj]["messages"][i]] = true end @@ -207,12 +227,24 @@ def get_group_body_rest(subj, file=nil) end rescue Net::NNTPReplyError print "Caught Net::NNTPReplyError in get_group_body_rest reading article #{@groups[subj]["messages"][0]}\n" + print "Error: #{$!}\n" + print "mess-id i: #{@groups[subj]["messages"][i]}\n" + print "mess-id i+1: #{@groups[subj]["messages"][i+1]}\n" if (i+1 < @groups[subj]["messages"].length) and (@groups[subj]["messages"][i] == @groups[subj]["messages"][i+1]) - print "Trying next server\n" - next + print "Trying next server...\n" + i += 1 + retry + else + print "Message-id not on another server :( Skipping...\n" + return false end return false + rescue Errno::EPIPE, Errno::ECONNRESET + print "Caught Errno::EPIPE reading from server #{@groups[subj]["servers"][i]}\n" + print "Error: #{$!}\n" + reconnect(@groups[subj]["servers"][i]) + retry end @gotten[ @groups[subj]["messages"][i] ] = true if file