Lost response while transfering large file to FTP server


#1

When I used Net::FTP to put large files(about 200MB) to FTP server, the
program always lost response. The file was actually transferred
correctly later on, but the ftp.put method failed to return, preventing
the code after that method from executing. And the ruby process was not
terminated.

The ruby version is 1.8.6 on Ubuntu 8.10 64 bit server

Anyone know the problem?


#2

On 04.01.2009 09:47, Clive Lin wrote:

When I used Net::FTP to put large files(about 200MB) to FTP server, the
program always lost response. The file was actually transferred
correctly later on, but the ftp.put method failed to return, preventing
the code after that method from executing. And the ruby process was not
terminated.

The ruby version is 1.8.6 on Ubuntu 8.10 64 bit server

Anyone know the problem?

Maybe you executed it in a thread and that died silently. You can make
the error explicit if you like:

Robert@babelfish2 ~
$ irb
irb(main):001:0> t = Thread.new { raise “silent death” }
=> #<Thread:0x100106d4 dead>
irb(main):002:0> t.join
RuntimeError: silent death
from (irb):1
from (irb):2:in join' from (irb):2 from :0 irb(main):003:0> Thread.abort_on_exception = true => true irb(main):004:0> t = Thread.new { raise "interpreter kill" } (irb):4:inirb_binding’: interpreter kill (RuntimeError)
from (irb):4:in initialize' from (irb):4:innew’
from (irb):4:in irb_binding' from /usr/lib/ruby/1.8/irb/workspace.rb:52:inirb_binding’
from :0

Robert@babelfish2 ~
$ echo $?
1

Robert@babelfish2 ~
$

Kind regards

robert


#3

Thanks for reply.
I didn’t create a new thread to do the ftp job; it’s in main thread. I
think any exception will be throw to the console, but nothing happened.
And the file was actually transferred without any error I am aware of.
ftp.put just couldn’t return.

I attach the source file.

Robert K. wrote:

On 04.01.2009 09:47, Clive Lin wrote:

When I used Net::FTP to put large files(about 200MB) to FTP server, the
program always lost response. The file was actually transferred
correctly later on, but the ftp.put method failed to return, preventing
the code after that method from executing. And the ruby process was not
terminated.

The ruby version is 1.8.6 on Ubuntu 8.10 64 bit server

Anyone know the problem?

Maybe you executed it in a thread and that died silently. You can make
the error explicit if you like:

Robert@babelfish2 ~
$ irb
irb(main):001:0> t = Thread.new { raise “silent death” }
=> #<Thread:0x100106d4 dead>
irb(main):002:0> t.join
RuntimeError: silent death
from (irb):1
from (irb):2:in join' from (irb):2 from :0 irb(main):003:0> Thread.abort_on_exception = true => true irb(main):004:0> t = Thread.new { raise "interpreter kill" } (irb):4:inirb_binding’: interpreter kill (RuntimeError)
from (irb):4:in initialize' from (irb):4:innew’
from (irb):4:in irb_binding' from /usr/lib/ruby/1.8/irb/workspace.rb:52:inirb_binding’
from :0

Robert@babelfish2 ~
$ echo $?
1

Robert@babelfish2 ~
$

Kind regards

robert


#4

Clive Lin wrote:

When I used Net::FTP to put large files(about 200MB) to FTP server, the
program always lost response. The file was actually transferred
correctly later on, but the ftp.put method failed to return, preventing
the code after that method from executing. And the ruby process was not
terminated.

The ruby version is 1.8.6 on Ubuntu 8.10 64 bit server

Anyone know the problem?

I replaced the ftp.put with the following code:
ftp_info=%x{
pftp -n #{FTP_HOST} <<SCRIPT
user #{FTP_USER} #{FTP_PWD}
put #{BACKUP_FILE}
quit
SCRIPT
}
$logger.info(ftp_info)
It still failed to return, without any logger information.


#5

Clive Lin wrote:

I replaced the ftp.put with the following code:
ftp_info=%x{
pftp -n #{FTP_HOST} <<SCRIPT
user #{FTP_USER} #{FTP_PWD}
put #{BACKUP_FILE}
quit
SCRIPT
}
$logger.info(ftp_info)
It still failed to return, without any logger information.

And at this time, the backup file still got transferred successfully