ID: |
6242
|
Fixed in: |
|
Issue Date: |
2011-08-22 12:19 AEST
|
Owner: | Arthur Barrett
|
Last Modified: | 2011-08-29 17:28 AEST | Reporter: | Arthur Barrett
|
Current Est. | 0.0 hours
| % Complete: | 0.0
|
Status: | ASSIGNED /
|
Severity: | normal
|
Affected: | 2.8.01
|
Description: | client: timeout after 1 second, trace info may be incorrect
|
Actions:
|
2011-08-22 12:19 AEST by Arthur Barrett - If the client is writing a large file to the server, the timeout may be as short as 1 second. The trace also
may show incorrect values.
09:09:49: -> Sending binary file of size '39313704' to server unencoded without md5.
09:09:49: -> send_to_server_untranslated: size > 100k, calling buf_send_immediate
09:09:49: -> tcp_write(245,1792)
09:09:49: -> tcp_write(39313704,1792)
09:09:49: -> tcp_write(38265128) got WSAEWOULDBLOCK so wait using WSAEventSelect(FD_WRITE)
09:09:49: -> tcp_write(38265128) -1000 ms timeout
09:09:49: -> client_buffer_output() Error writing to server WSAECONNRESET
cvs [commit aborted]: Error writing to server WSAECONNRESET
Note: the 1000ms value appears to be the RCV value not the correct SND value - from
protocols/common.cpp in the function tcp_write (occurs twice):
waitres = WaitForSingleObject((dowthreads)?eventback:eventbackw, (tcp_wswaitx==-1)?INFINITE:
(tcp_wswaitx));
.
.
.
CServerIo::trace(4,"tcp_write(%d) wait timeout %s",length,(tcp_wswaitx==-1)?"infinite":stcp_wrwaitx);
server_error(0,"write waiting on buffer...");
.
.
.
CServerIo::trace(4,"tcp_write(%d) %s timeout",length,(tcp_wswaitx==-1)?"infinite":stcp_wrwaitx); |
|
2011-08-22 12:19 AEST by Arthur Barrett - Created an attachment (id=2142)
client trace (localhost) with sspi
The value of tcp_wswaitx is only set by set_timeout (via tcp_set_timeout_ms).
Otherwise it is initialised to -1 in tcp_connect_bind(). Neither information
is available in the customer trace because it was generated with t4 wheras we
need t99 (ie: ClientTraceFile set in registry):
cvs -t -t -t -t -t commit -R -m "AMP_Drop_98"
|
|
2011-08-22 14:04 AEST by Arthur Barrett - Whats -1*1000? I'm not sure this code in protocols/common.cpp tcp_set_timeout_sock_ms() makes
sense..
if (wrwait==-1)
{
// set this too short and something like rtag suffers badly!
if(!CGlobalSettings::GetGlobalValue("cvsnt","PServer","ClientRCVTIMEO",bufferw,sizeof(bufferw)))
wrwait = atoi(bufferw);
else
wrwait=-1 /*120*/;
}
.
.
.
if (wrwaitms!=-1)
tcp_wrwaitx = wrwaitms;
else
tcp_wrwaitx = wrwaitx*1000;
|
|
2011-08-29 18:25 AEST by Arthur Barrett - Created an attachment (id=2152)
patch to create test code
commit patch - test code - use the registry setting RECVSleep (dword) on the
server to test, eg set to 5 (for a 5 second delay) then commit. testing on
windows xp x64 does not show any problem, but should probably test on windows
2003 server (as per customer description) to be sure. |
|
2011-08-29 18:26 AEST by Arthur Barrett - Checking in src/cvs.h;
/cvs/cvsnt/src/cvs.h,v <-- cvs.h
new revision: 1.93.2.208.6.29.2.16; previous revision: 1.93.2.208.6.29.2.15
done
Checking in src/main.cpp;
/cvs/cvsnt/src/main.c,v <-- main.cpp
new revision: 1.71.2.151.6.54.2.23; previous revision: 1.71.2.151.6.54.2.22
done
Checking in src/server.cpp;
/cvs/cvsnt/src/server.c,v <-- server.cpp
new revision: 1.106.2.210.6.99.2.44; previous revision: 1.106.2.210.6.99.2.43
done |
|
2011-08-29 18:28 AEST by Arthur Barrett - Note; delay will only occur once, when c:\recvwait.txt file exists. After the
wait has been completed this file will be deleted. |
|