[jcifs] Multiple Threads Causes Server Timeout

tim_wiffen at westlb.co.uk tim_wiffen at westlb.co.uk
Fri Apr 15 13:17:16 GMT 2005


Thanks for your input Mike.

I have tried again with 1.1.9trans JAR and get different exceptions. I 
think the output is a bit mixed up as the different threads report their 
exceptions. I have tried this with other servers and don't seem to get the 
same kind of errors, so it seems to be a problem with this particular 
server (a Win2k box) but exactly what is difficult to say. I've included 
the errors below in case your interested.

I have also met the concurrency error in my testing (possibly more likely 
on my dual Xeon Hyper Threaded setup) and this may be related but it 
something about this server seems more likely.

In trying 1.1.9trans I met some errors that do not occur in 1.19 which I 
have included below. I get these errors even on servers other than the 
problem one on our network.

I would like to use SmbFile.copyTo() but I couldn't see how to make it 
copy to a java.io.File which I need to do to create it on the local file 
system.

Regards

Tim Wiffen

==============================

jcifs.smb.SmbException: 
jcifs.util.transport.TransportException: Transport1 timedout waiting for 
response to SmbComClose[command=SMB_COM_CLOSE,received=false,errorCode=The 
operation completed 
successfully.,flags=0x0018,flags2=0xC003,signSeq=0,tid=2051,pid=45147,uid=2051,mid=32771,wordCount=3,byteCount=0,fid=32774,lastWriteTime=0]
        at jcifs.util.transport.Transport.sendrecv(Transport.java:74)
        at jcifs.smb.SmbTransport.send(SmbTransport.java:454)
        at jcifs.smb.SmbSession.send(SmbSession.java:261)
        at jcifs.smb.SmbTree.send(SmbTree.java:91)
        at jcifs.smb.SmbFile.send(SmbFile.java:687)
        at jcifs.smb.SmbFile.close(SmbFile.java:859)
        at jcifs.smb.SmbFile.close(SmbFile.java:865)
        at jcifs.smb.SmbFile.close(SmbFile.java:869)
        at jcifs.smb.SmbFileInputStream.close(SmbFileInputStream.java:80)
        at 
com.westlb.GOScheduler.util.TestFileManagement.jcifsCopy(TestFileManagement.java:242)
        at 
com.westlb.GOScheduler.util.TestFileManagement.access$000(TestFileManagement.java:27)
        at 
com.westlb.GOScheduler.util.TestFileManagement$2CopyThread.run(TestFileManagement.java:187)
        at java.lang.Thread.run(Thread.java:595)

        at jcifs.smb.SmbTransport.send(SmbTransport.java:459)
        at jcifs.smb.SmbSession.send(SmbSession.java:261)
        at jcifs.smb.SmbTree.send(SmbTree.java:91)
        at jcifs.smb.SmbFile.send(SmbFile.java:687)
        at jcifs.smb.SmbFile.close(SmbFile.java:859)
        at jcifs.smb.SmbFile.close(SmbFile.java:865)
        at jcifs.smb.SmbFile.close(SmbFile.java:869)
        at jcifs.smb.SmbFileInputStream.close(SmbFileInputStream.java:80)
        at 
com.westlb.GOScheduler.util.TestFileManagement.jcifsCopy(TestFileManagement.java:242)
        at 
com.westlb.GOScheduler.util.TestFileManagement.access$000(TestFileManagement.java:27)
        at 
com.westlb.GOScheduler.util.TestFileManagement$2CopyThread.run(TestFileManagement.java:187)
        at java.lang.Thread.run(Thread.java:595)
jcifs.smb.SmbException: 
jcifs.util.transport.TransportException: Transport1 timedout waiting for 
response to SmbComClose[command=SMB_COM_CLOSE,received=false,errorCode=The 
operation completed 
successfully.,flags=0x0018,flags2=0xC003,signSeq=0,tid=2051,pid=45147,uid=2051,mid=32772,wordCount=3,byteCount=0,fid=49161,lastWriteTime=0]
        at jcifs.util.transport.Transport.sendrecv(Transport.java:74)
        at jcifs.smb.SmbTransport.send(SmbTransport.java:454)
        at jcifs.smb.SmbSession.send(SmbSession.java:261)
        at jcifs.smb.SmbTree.send(SmbTree.java:91)
        at jcifs.smb.SmbFile.send(SmbFile.java:687)
        at jcifs.smb.SmbFile.close(SmbFile.java:859)
        at jcifs.smb.SmbFile.close(SmbFile.java:865)
        at jcifs.smb.SmbFile.close(SmbFile.java:869)
        at jcifs.smb.SmbFileInputStream.close(SmbFileInputStream.java:80)
        at 
com.westlb.GOScheduler.util.TestFileManagement.jcifsCopy(TestFileManagement.java:242)
        at 
com.westlb.GOScheduler.util.TestFileManagement.access$000(TestFileManagement.java:27)
        at 
com.westlb.GOScheduler.util.TestFileManagement$2CopyThread.run(TestFileManagement.java:187)
        at java.lang.Thread.run(Thread.java:595)

        at jcifs.smb.SmbTransport.send(SmbTransport.java:459)
        at jcifs.smb.SmbSession.send(SmbSession.java:261)
2005-04-15 09:33:22,682 INFO  [Worker0] util.TestFileManagement 
(TestFileManagement.java:226) -- Fetching 
smb://USERNAME:PASSWORD@eUSERNAME.emea.westlb.net/Extract/Current/f318af300_Lon
        at jcifs.smb.SmbTree.send(SmbTree.java:91)
        at jcifs.smb.SmbFile.send(SmbFile.java:687)
        at jcifs.smb.SmbFile.close(SmbFile.java:859)
        at jcifs.smb.SmbFile.close(SmbFile.java:865)
        at jcifs.smb.SmbFile.close(SmbFile.java:869)
        at jcifs.smb.SmbFileInputStream.close(SmbFileInputStream.java:80)
        at 
com.westlb.GOScheduler.util.TestFileManagement.jcifsCopy(TestFileManagement.java:242)
        at 
com.westlb.GOScheduler.util.TestFileManagement.access$000(TestFileManagement.java:27)
        at 
com.westlb.GOScheduler.util.TestFileManagement$2CopyThread.run(TestFileManagement.java:187)
        at java.lang.Thread.run(Thread.java:595)
jcifs.smb.SmbException: 
2005-04-15 09:33:22,698 INFO  [Worker2] util.TestFileManagement 
(TestFileManagement.java:226) -- Fetching 
smb://USERNAME:PASSWORD@someserver.aserver.net/Extract/Current/f318af300_Sin
jcifs.util.transport.TransportException: Transport1 timedout waiting for 
response to SmbComClose[command=SMB_COM_CLOSE,received=false,errorCode=The 
operation completed 
successfully.,flags=0x0018,flags2=0xC003,signSeq=0,tid=2051,pid=45147,uid=2051,mid=32773,wordCount=3,byteCount=0,fid=49160,lastWriteTime=0]
        at jcifs.util.transport.Transport.sendrecv(Transport.java:74)
        at jcifs.smb.SmbTransport.send(SmbTransport.java:454)
        at jcifs.smb.SmbSession.send(SmbSession.java:261)
        at jcifs.smb.SmbTree.send(SmbTree.java:91)
        at jcifs.smb.SmbFile.send(SmbFile.java:687)
        at jcifs.smb.SmbFile.close(SmbFile.java:859)
        at jcifs.smb.SmbFile.close(SmbFile.java:865)
        at jcifs.smb.SmbFile.close(SmbFile.java:869)
        at jcifs.smb.SmbFileInputStream.close(SmbFileInputStream.java:80)
        at 
com.westlb.GOScheduler.util.TestFileManagement.jcifsCopy(TestFileManagement.java:242)
        at 
com.westlb.GOScheduler.util.TestFileManagement.access$000(TestFileManagement.java:27)
        at 
com.westlb.GOScheduler.util.TestFileManagement$2CopyThread.run(TestFileManagement.java:187)
        at java.lang.Thread.run(Thread.java:595)

        at jcifs.smb.SmbTransport.send(SmbTransport.java:459)
        at jcifs.smb.SmbSession.send(SmbSession.java:261)
        at jcifs.smb.SmbTree.send(SmbTree.java:91)
        at jcifs.smb.SmbFile.send(SmbFile.java:687)
        at jcifs.smb.SmbFile.close(SmbFile.java:859)
        at jcifs.smb.SmbFile.close(SmbFile.java:865)
        at jcifs.smb.SmbFile.close(SmbFile.java:869)
        at jcifs.smb.SmbFileInputStream.close(SmbFileInputStream.java:80)
        at 
com.westlb.GOScheduler.util.TestFileManagement.jcifsCopy(TestFileManagement.java:242)
        at 
com.westlb.GOScheduler.util.TestFileManagement.access$000(TestFileManagement.java:27)
        at 
com.westlb.GOScheduler.util.TestFileManagement$2CopyThread.run(TestFileManagement.java:187)
        at java.lang.Thread.run(Thread.java:595)
2005-04-15 09:33:22,698 INFO  [Worker1] util.TestFileManagement 
(TestFileManagement.java:226) -- Fetching 
smb://USERNAME:PASSWORD@someserver.aserver.net/Extract/Current/f318fd1.ext.1
Exception in thread "Worker0" java.lang.NullPointerException
        at 
com.westlb.GOScheduler.util.TestFileManagement.jcifsCopy(TestFileManagement.java:241)
        at 
com.westlb.GOScheduler.util.TestFileManagement.access$000(TestFileManagement.java:27)
        at 
com.westlb.GOScheduler.util.TestFileManagement$2CopyThread.run(TestFileManagement.java:187)
        at java.lang.Thread.run(Thread.java:595)
Exception in thread "Worker2" java.lang.NullPointerException
        at 
com.westlb.GOScheduler.util.TestFileManagement.jcifsCopy(TestFileManagement.java:241)
        at 
com.westlb.GOScheduler.util.TestFileManagement.access$000(TestFileManagement.java:27)
        at 
com.westlb.GOScheduler.util.TestFileManagement$2CopyThread.run(TestFileManagement.java:187)
        at java.lang.Thread.run(Thread.java:595)
Exception in thread "Worker1" java.lang.NullPointerException
        at 
com.westlb.GOScheduler.util.TestFileManagement.jcifsCopy(TestFileManagement.java:241)
        at 
com.westlb.GOScheduler.util.TestFileManagement.access$000(TestFileManagement.java:27)
        at 
com.westlb.GOScheduler.util.TestFileManagement$2CopyThread.run(TestFileManagement.java:187)
        at java.lang.Thread.run(Thread.java:595)

As an aside I tried connecting to a different server with the 1.1.9trans 
jar and got this error which I don't get with 1.1.9:

jcifs.smb.SmbException: 
jcifs.util.transport.TransportException
java.net.ConnectException: Connection refused: connect
        at java.net.PlainSocketImpl.socketConnect(Native Method)
        at java.net.PlainSocketImpl.doConnect(PlainSocketImpl.java:333)
        at 
java.net.PlainSocketImpl.connectToAddress(PlainSocketImpl.java:195)
        at java.net.PlainSocketImpl.connect(PlainSocketImpl.java:182)
        at java.net.SocksSocketImpl.connect(SocksSocketImpl.java:364)
        at java.net.Socket.connect(Socket.java:507)
        at java.net.Socket.connect(Socket.java:457)
        at java.net.Socket.<init>(Socket.java:365)
        at java.net.Socket.<init>(Socket.java:238)
        at jcifs.smb.SmbTransport.doConnect(SmbTransport.java:200)
        at jcifs.util.transport.Transport.run(Transport.java:194)
        at java.lang.Thread.run(Thread.java:595)

        at jcifs.util.transport.Transport.run(Transport.java:210)
        at java.lang.Thread.run(Thread.java:595)

        at jcifs.smb.SmbTransport.connect(SmbTransport.java:196)
        at jcifs.smb.SmbTree.treeConnect(SmbTree.java:118)
        at jcifs.smb.SmbFile.connect(SmbFile.java:790)
        at jcifs.smb.SmbFile.connect0(SmbFile.java:760)
        at jcifs.smb.SmbFile.send(SmbFile.java:659)
        at jcifs.smb.SmbFile.doFindFirstNext(SmbFile.java:1677)
        at jcifs.smb.SmbFile.listFiles(SmbFile.java:1568)
        at jcifs.smb.SmbFile.listFiles(SmbFile.java:1476)






"Michael B Allen" <mba2000 at ioplex.com>



15/04/2005 00:41














To:     tim_wiffen at westlb.co.uk
cc:     jcifs at lists.samba.org
Subject:        Re: [jcifs] Multiple Threads Causes Server Timeout


tim_wiffen at westlb.co.uk said:
> jcifs version: 1.1.9
>
> I have some code that runs a pool of 3 threads that pick file requests 
off
> a list and fetch them. As a unit test I am using this to copy 300 files
> (total size of files 500MB)  in a directory on a remote server. However
> after copying about 50 files I start to get SmbExceptions but other 
files
> are copied successfully after these errors:
>
> jcifs.smb.SmbException: Timeout waiting for response from server:
> someserver.myserver.net/123.45.67.89
>         at jcifs.smb.SmbTransport.send(SmbTransport.java:671)

I can't reproduce this. Your example runs ok for me. I had to change the
path a little to point to a directory with files.

I have to wonder if maybe your network has a problem. For example, one
thing that could cause this kind of trouble is if your NIC is set to
half-duplex but the router wants full-duplex. Or visa-versa. Check it out.

Otherwise I ran your example several times on a large directory of files
and it worked 100%. I ran it with 20 threads a couple times and it worked
fine.

Note there is a known concurrency error that someone reported but at this
point I do not think your problem is related. Also, note the
jcifs-1.1.9trans.jar I pointed you to *does* fail your test in a very
similar way (timeout) but for entirely different reasons (bad mid
rollover).

Try your test on a different network.

Also, note your Iterator is not synchronized. I don't think that's a
problem but thought I would mention it.

Mike

PS: I realize you're just testing but for a variety of reasons any file
copying you do should always be done using SmbFile.copyTo().




This message is confidential and may be privileged. It is
intended solely for the named  addressee. If you are not the
intended recipient please inform us. Any unauthorised
dissemination, distribution or copying hereof is prohibited.
As we cannot guarantee the  genuineness or completeness of
the information contained in this message, the statements
set forth above are not legally binding. In connection
therewith, we also refer to the governing regulations of
WestLB concerning signatory authority published in the
standard bank signature lists with regard to the legally
binding effect of statements made with the intent to
obligate WestLB.

Diese Nachricht ist vertraulich. Sie ist ausschliesslich fuer
den im Adressfeld ausgewiesenen Adressaten bestimmt.
Sollten Sie nicht der vorgesehene Empfaenger sein, so bitten
wir um eine kurze Nachricht. Jede unbefugte Weiterleitung
oder Fertigung einer Kopie ist unzulaessig. Da wir nicht die
Echtheit oder Vollstaendigkeit der in dieser Nachricht
enthaltenen Informationen garantieren koennen, schliessen wir
die rechtliche Verbindlichkeit der vorstehenden Erklaerungen
und Aeusserungen aus. Wir verweisen in diesem Zusammenhang
auch auf die  fuer die Bank geltenden Regelungen ueber die
Verbindlichkeit von Willenserklaerungen mit verpflichtendem
Inhalt, die in den bankueblichen Unterschriftenverzeichnissen
bekannt gemacht werden.

-------------- next part --------------
HTML attachment scrubbed and removed


More information about the jcifs mailing list