execution expired - timeout

L

Luis G.

Hello guys.

I have one problem with some ruby script I developed. This look a basic
issue to solve, but I did try several things and till now I didn't find
a solution...
This script is basically to do some http requests to trackers. I'm
getting this following exception some time after I start the script:

/usr/lib/ruby/1.8/timeout.rb:60:in `extract_information': execution
expired
from /home/user/NetBeansProjects/trackers/lib/trackers.rb:113:in `run'
from /usr/lib/ruby/1.8/timeout.rb:62:in `timeout'
from /home/user/NetBeansProjects/trackers/lib/trackers.rb:111:in `run'
from /home/user/NetBeansProjects/trackers/lib/trackers.rb:103:in `each'
from /home/user/NetBeansProjects/trackers/lib/trackers.rb:103:in `run'
from /home/user/NetBeansProjects/trackers/lib/trackers.rb:76:in `each'
from /home/user/NetBeansProjects/trackers/lib/trackers.rb:76:in `run'
from /home/user/NetBeansProjects/trackers/lib/main.rb:11

So, the script starts but after a while (the time varies) I get the
above exception.

The structure of the code is like this:

run()
...
infohash.each{ |hash,info|
...
trackers.each{ |t|
url = ...
a, b = extract_information(url) #<----------------- Error line(113)
}
}
end

extract_information(url)
begin
Timeout::timeout(3) do
#http call to url
end
rescue Timeout::Error => e
rescue SystemCallError => e
...
end
end

So, as you can see in extract_information(url) function I handled the
Timeout::Error, so I dont get why is giving the Timeout error. I also
added a timeout in run() function to handle the extract_information(url)
call, like this:

...
begin
Timeout::timeout(60) do
a, b = foo(url) #<------------ Error line
end
rescue Timeout::Error =>e
rescue SystemCallError => e
end

but the result was the same...
Any clues?

Thanks,

Luis
 
B

Brian Candler

Luis G. wrote in post #976533:
Any clues?

1. Write a standalone test program which demonstrates the problem. I
tried the following, but it works fine:

require 'timeout'
require 'open-uri'

begin
Timeout::timeout(1) do
open("http://1.1.1.1/foo").read
end
rescue Timeout::Error
puts "Rescued"
end

If it works for you too, then keep adjusting it until you find what it
is about your full code which causes the problem.

2. Describe the details of your system. I ran the above under
ruby 1.8.7 (2010-01-10 patchlevel 249) [x86_64-linux]
(Ubuntu 10.04 x86_64)

3. I see your backtrace doesn't include function 'extract_information',
so I suspect that the error is actually being raised from somewhere
other than where you think.

Regards,

Brian.
 
B

botp

=A0rescue Timeout::Error =3D> e
=A0rescue SystemCallError =3D> e
=A0...
=A0end
end

So, as you can see in extract_information(url) function I handled the
Timeout::Error, so I dont get why is giving the Timeout error. I also

maybe it's another error

try capturing it w a generic,

rescue Exception =3D>e


best regards -botp
 
L

Luis G.

Hello guys

Just to tell ya that with

rescue Exception =>e

I can handle the exception, the script keeps running and the error
message I got in 'e' is, of course, the same I said in the first port.

As I told you, this just happens sometimes. So, I'm gonna try to build
an example when I get the exception, put in a file and post it here, so
you can check.

Thanks a lot,

Luis
 
L

Luis G.

Hey again.

Here is an example to explain you the problem.
In attachment there are 2 files. Put both in the same directory run the
main.rb.

$ruby main.rb

Maybe you need to install some gems... Just check the imports I do in
example.rb
A log file will be created in the same directory. Do a 'tail -f' in the
log file so you can check what is going on.

You should get the execution exception - timeout exception:

E, [2011-01-24T12:13:53.045896 #8446] ERROR -- : execution expired
(#<Class:0xb6dac7ec>)
/usr/lib/ruby/1.8/timeout.rb:60:in `extract_information'
/example.rb:61:in `run'
/usr/lib/ruby/1.8/timeout.rb:62:in `timeout'
/example.rb:60:in `run'
/example.rb:52:in `each'
/example.rb:52:in `run'
/example.rb:37:in `each'
/example.rb:37:in `run'
main.rb:6

for tracker: 'http://tracker4.finalgear.com/announce'

And if you check the code I have the following exception handling in
extract_information(url, log) function:

rescue Timeout::Error => e
(...)
end

So, if it's a timeout exception, why the code don't enter in the
Timeout::Error => e exception handling?

what I'm doing wrong?

Attachments:
http://www.ruby-forum.com/attachment/5783/main.rb
http://www.ruby-forum.com/attachment/5784/example.rb
 
B

botp


i tested these, and the program is capturing the Timeout error.. note,
i edited some logging info to include file/lineno and retry counts set
to 3. i also moved the rescue timeout block before the rescue
exception...

mine times out because of dns error...

eg,

$ grep ^E log_2011-01-25.txt
E, [2011-01-25T10:35:17.457225 #29426] ERROR -- : [ FILE:
/disk2_2/home/botp/example.rb LINE: 129 ] Fail saving the file
http://tracker.torrentbay.to:6969/a...%15%D2%AC%9B%2F%14%FF%E3_%F9%07%DDN%C5%09%22d
(Timeout::Error).
E, [2011-01-25T10:35:22.577837 #29426] ERROR -- : [ FILE:
/disk2_2/home/botp/example.rb LINE: 138 ] Fail saving the file
http://tracker4.finalgear.com/annou...%15%D2%AC%9B%2F%14%FF%E3_%F9%07%DDN%C5%09%22d
(General Exception).
E, [2011-01-25T10:35:22.579054 #29426] ERROR -- : [ FILE:
/disk2_2/home/botp/example.rb LINE: 138 ] Fail saving the file
http://tracker4.finalgear.com/annou...%15%D2%AC%9B%2F%14%FF%E3_%F9%07%DDN%C5%09%22d
(General Exception).
E, [2011-01-25T10:35:22.580162 #29426] ERROR -- : [ FILE:
/disk2_2/home/botp/example.rb LINE: 138 ] Fail saving the file
http://tracker4.finalgear.com/annou...%15%D2%AC%9B%2F%14%FF%E3_%F9%07%DDN%C5%09%22d
(General Exception).
E, [2011-01-25T10:35:22.580250 #29426] ERROR -- : [ FILE:
/disk2_2/home/botp/example.rb LINE: 143 ] Fail saving the file
http://tracker4.finalgear.com/annou...%15%D2%AC%9B%2F%14%FF%E3_%F9%07%DDN%C5%09%22d
(General Exception)[(3)retries failed].
E, [2011-01-25T10:35:22.580434 #29426] ERROR -- : [ FILE:
/disk2_2/home/botp/example.rb LINE: 144 ] getaddrinfo: Name or
service not known["/usr/local/lib/ruby/1.9.1/net/http.rb:644:in
`initialize'", "/usr/local/lib/ruby/1.9.1/net/http.rb:644:in `open'",
"/usr/local/lib/ruby/1.9.1/net/http.rb:644:in `block in connect'",
"/usr/local/lib/ruby/1.9.1/timeout.rb:44:in `timeout'",
"/usr/local/lib/ruby/1.9.1/timeout.rb:87:in `timeout'",
"/usr/local/lib/ruby/1.9.1/net/http.rb:644:in `connect'",
"/usr/local/lib/ruby/1.9.1/net/http.rb:637:in `do_start'",
"/usr/local/lib/ruby/1.9.1/net/http.rb:632:in `start'",
"/usr/local/lib/ruby/gems/1.9.1/gems/mechanize-1.0.0/lib/mechanize.rb:527:in
`fetch_page'", "/usr/local/lib/ruby/gems/1.9.1/gems/mechanize-1.0.0/lib/mechanize.rb:259:in
`get'", "/disk2_2/home/botp/example.rb:114:in `block in
extract_information'", "/usr/local/lib/ruby/1.9.1/timeout.rb:57:in
`timeout'", "/disk2_2/home/botp/example.rb:112:in
`extract_information'", "/disk2_2/home/botp/example.rb:64:in `block (3
levels) in run'", "/usr/local/lib/ruby/1.9.1/timeout.rb:57:in
`timeout'", "/disk2_2/home/botp/example.rb:63:in `block (2 levels) in
run'", "/disk2_2/home/botp/example.rb:55:in `each'",
"/disk2_2/home/botp/example.rb:55:in `block in run'",
"/disk2_2/home/botp/example.rb:40:in `each'",
"/disk2_2/home/botp/example.rb:40:in `run'", "main.rb:6:in `<main>'"]

best regards -botp
 

Ask a Question

Want to reply to this thread or ask your own question?

You'll need to choose a username for the site, which only take a couple of moments. After that, you can post your question and our members will help you out.

Ask a Question

Members online

No members online now.

Forum statistics

Threads
473,955
Messages
2,570,117
Members
46,705
Latest member
v_darius

Latest Threads

Top