On Fri, Apr 16, 2010 at 08:19:27PM +0400, Alexander V. Lukyanov wrote:
> The reason is that retries variable is reset to 0 when some work is done.
> In this case lftp assumes that if it uploaded some data to the server then
> some work is done, but this assumption is incorrect.
Could you try this patch, please?
--
Alexander.
Index: FileCopy.cc
===================================================================
RCS file: /home/lav/cvsroot/lftp/src/FileCopy.cc,v
retrieving revision 1.155
diff -u -p -r1.155 FileCopy.cc
--- FileCopy.cc 21 Jan 2010 08:22:26 -0000 1.155
+++ FileCopy.cc 16 Apr 2010 16:39:15 -0000
@@ -848,6 +848,11 @@ int FileCopyPeerFA::Do()
{
try_time=session->GetTryTime();
retries=session->GetRetries();
+ off_t pos=session->GetRealPos();
+ if(upload_watermark<pos) {
+ upload_watermark=pos;
+ retries=-1;
+ }
Log::global->Format(10,"try_time=%ld,
retries=%d\n",(long)try_time,retries);
session->Close();
if(can_seek && seek_pos>0)
@@ -982,9 +987,9 @@ void FileCopyPeerFA::OpenSession()
session->SetLimit(range_limit);
if(mode==PUT)
{
- if(try_time!=0)
+ if(try_time!=NO_DATE)
session->SetTryTime(try_time);
- if(retries!=0)
+ if(retries>=0)
session->SetRetries(retries+1);
if(e_size!=NO_SIZE && e_size!=NO_SIZE_YET)
session->SetSize(e_size);
@@ -1105,8 +1110,8 @@ int FileCopyPeerFA::Get_LL(int len)
size=NO_SIZE_YET;
date=NO_DATE_YET;
- try_time=0;
- retries=0;
+ try_time=NO_DATE;
+ retries=-1;
current->Timeout(0); // retry with new location.
return 0;
}
@@ -1145,6 +1150,11 @@ int FileCopyPeerFA::Put_LL(const char *b
{
try_time=session->GetTryTime();
retries=session->GetRetries();
+ off_t pos=session->GetRealPos();
+ if(upload_watermark<pos) {
+ upload_watermark=pos;
+ retries=-1;
+ }
Log::global->Format(10,"try_time=%ld,
retries=%d\n",(long)try_time,retries);
session->Close();
if(can_seek && seek_pos>0)
@@ -1198,8 +1208,9 @@ off_t FileCopyPeerFA::GetRealPos()
void FileCopyPeerFA::Init()
{
fxp=false;
- try_time=0;
- retries=0;
+ try_time=NO_DATE;
+ retries=-1;
+ upload_watermark=0;
redirections=0;
can_seek=true;
can_seek0=true;
Index: FileCopy.h
===================================================================
RCS file: /home/lav/cvsroot/lftp/src/FileCopy.h,v
retrieving revision 1.82
diff -u -p -r1.82 FileCopy.h
--- FileCopy.h 3 Mar 2009 07:31:48 -0000 1.82
+++ FileCopy.h 16 Apr 2010 16:38:47 -0000
@@ -295,6 +295,7 @@ class FileCopyPeerFA : public FileCopyPe
time_t try_time;
int retries;
+ off_t upload_watermark;
int redirections;