javaee / grizzly

Writing scalable server applications in the Java™ programming language has always been difficult. Before the advent of the Java New I/O API (NIO), thread management issues made it impossible for a server to scale to thousands of users. The Grizzly NIO framework has been designed to help developers to take advantage of the Java™ NIO API.
https://javaee.github.io/grizzly/
Other
221 stars 60 forks source link

gfv3 upload timeouts at 30seconds #804

Closed glassfishrobot closed 14 years ago

glassfishrobot commented 14 years ago

first observed with client dnload/gfv3 upload of file over dsl modem – when took more than 30 seconds got a file that was short of proper file length.

developed small java pgm to HttpURLConnection/GET a file locally from gfv3 – where i can Thread.sleep the dnload/upload in the GET java pgm.

worked with a 5MByte file – usually with a Thread.sleep(100) – will only get about 794363 byte of 5247825 byte length file.

occasionally succeeds — rarely.

gfv3 close seems to be called because of expire in grizzly-1-9-18k\trunk\code\modules\http\src\main\java\ com\sun\grizzly\http\SelectorThreadKeyHandler.java

the timeout there is 30000 – 30 seconds

gfv3 build 74.2, manifest of grizzly jars in modules says version 1.9.18k

Environment

Operating System: All Platform: All

Affected Versions

[1.9.18]

glassfishrobot commented 14 years ago

Reported by emiddio@java.net

glassfishrobot commented 14 years ago

emiddio@java.net said: sample program used for testing locally,

/*

import java.io.BufferedInputStream; import java.io.BufferedReader; import java.io.File; import java.io.FileOutputStream; import java.io.IOException; import java.io.InputStream; import java.io.InputStreamReader; import java.io.OutputStream; import java.io.OutputStreamWriter; import java.io.Reader; import java.lang.reflect.Proxy; import java.net.HttpURLConnection; import java.net.InetSocketAddress; import java.net.MalformedURLException; import java.net.SocketAddress; import java.net.URL;

/*

static byte[] ba = new byte[1024]; private static boolean POST = false;

/**

Object o = huc.getContent(); System.out.println("Content.toString:" + o.toString()); if (false)

{ InputStreamReader isr = new InputStreamReader(is); Reader reader = new InputStreamReader(is); BufferedReader br = new BufferedReader(isr); }

BufferedInputStream bis = new BufferedInputStream(is); File f = new File("wgfaSftCapture3.wmv"); FileOutputStream fos = new FileOutputStream(f);

int c; int rc = 0; int cnt = 0; if (false) { while ((c = bis.read()) != -1)

{ cnt++; fos.write(c); //System.out.print((char) c); }

} System.out.println(new java.util.Date().toString()); try { while ((c = bis.read(ba)) != -1)

{ rc++; cnt += c; fos.write(ba); Thread.sleep(100); }

} catch (Exception e)

{ System.out.println(e.toString()); }

System.out.println(new java.util.Date().toString());

bis.close(); fos.close(); System.out.format("rc:%d, cnt:%d\n", rc, cnt); } }

glassfishrobot commented 14 years ago

emiddio@java.net said: used same test program with gfv211 – there are no problems with gfv211;

there are with gfv3.

glassfishrobot commented 14 years ago

oleksiys@java.net said: I've just tested your client code on out-of-the-box GFv3 and it works fine... I tried sleep(100) and sleep(1000) and didn't see any timeout for 20+ mins. Are you using default GFv3 configuration?

glassfishrobot commented 14 years ago

emiddio@java.net said: using default gfv3; have not tested with a different gfv3 installation; tested with gfv2.1.1 worked fine;

also – initially discovered by using over internet to dnload file from my gfv3 server – always was getting short files; before testing with this program discovered if use firefox – dnload manager and pause the dnload every say 25seconds – before the 30second timeout – i was able to dnload the 80MByte file i wasnted to dnload/upload; otherwise with 768KBit upload only got about 2.5--3MByte of file; – and error occurred at 30seconds.

i trapped later the close from a timeout in the grizzly – at gfv3 close seems to be called because of expire in grizzly-1-9-18k\trunk\code\modules\http\src\main\java\ com\sun\grizzly\http\SelectorThreadKeyHandler.java

deggging showed the timeout having expired at 30seconds;

the upload/dnload and test program work find on same win 7 64bit – 64bit jdk 1.6.0_17 with gfv2.1.1 – no issues;

i experimented with some changes – to many to mention – but sometimes was able to get to work - however – even after i thougt i have fixed with some -D jvm options – if i ran the program with multiple instances do dnload/uploads at time time – it would always fail.

very reproduce able except for some reason it works for you –

gfv3 build 74.2 grizlly 1.x.18k

gary

glassfishrobot commented 14 years ago

emiddio@java.net said: try running multiple instances at same time – force the dnload/uploads to take more than 30seconds.

gary

glassfishrobot commented 14 years ago

emiddio@java.net said: tested again on a new win 7 pc – it worked – fresh install of gfv3 74.2;

after return to home tested and it also worked – was prepared to re-install gfv3 – but it worked – that was yesterday after returning from a 2wk trip.

today does not work – issue seems to be if gfv3 is started in debug mode;

i usually run in debug mode; yest tested in non-debug mode – worked; today tested in debug mode – failed; then restarted in non-debug mode – works without issues.

issue appears related to debug / non-debug mode

please re-test with provided program.

gary

glassfishrobot commented 14 years ago

cheeser@java.net said: We've recently fixed a bug with timeout settings. Are you able to build the grizzly tree at all? if so, take the jar in modules/config and drop it in place of the grizzly-config.jar in glassfish/modules and restart. Run your test with that and see if things still break. I'll try in the morning and see if I can reproduce this with the latest trunk code.

glassfishrobot commented 14 years ago

oleksiys@java.net said: Hi Gary,

I suspect it's not related to debug , it looks like some racing issue.

i trapped later the close from a timeout in the grizzly – at gfv3 close seems to be called because of expire in grizzly-1-9-18k\trunk\code\modules\http\src\main\java\ com\sun\grizzly\http\SelectorThreadKeyHandler.java"

Strange, normally it shouldn't happen with the connection, which is being processed. Do you see any exception in the GFv3 log after connection gets prematurely closed?

glassfishrobot commented 14 years ago

emiddio@java.net said: typical output from my test pgm when fails when in debug mode – netbeans output – there is NO output in the gfv3 log.

init: Deleting: G:\Sun\JavaProjects\nb67\httpFileGet1\build\built-jar.properties deps-jar: Updating property file: G:\Sun\JavaProjects\nb67\httpFileGet1\build\built- jar.properties compile: run: DoInput default:true DoOutput default:false ContentEncoding:null ContentType:video/x-ms-wmv ContentLength:5247825 ConnectTimeout:0 ReadTimeout:0 Content.toString:sun.net.www.protocol.http.HttpURLConnection$HttpInputStream@2fe 4cbc4 Mon Mar 29 12:50:45 PDT 2010 Mon Mar 29 12:51:19 PDT 2010 rc:3336, cnt:3415803 BUILD SUCCESSFUL (total time: 33 seconds)

typical output when running NON-Debug mode – successful

init: Deleting: G:\Sun\JavaProjects\nb67\httpFileGet1\build\built-jar.properties deps-jar: Updating property file: G:\Sun\JavaProjects\nb67\httpFileGet1\build\built- jar.properties compile: run: DoInput default:true DoOutput default:false ContentEncoding:null ContentType:text/plain;charset=iso-8859-1 ContentLength:5247825 ConnectTimeout:0 ReadTimeout:0 Content.toString:sun.net.www.content.text.PlainTextInputStream@40133796 Mon Mar 29 12:55:40 PDT 2010 Mon Mar 29 12:56:31 PDT 2010 rc:5125, cnt:5247825 BUILD SUCCESSFUL (total time: 51 seconds)

glassfishrobot commented 14 years ago

emiddio@java.net said: there are much newer builds of grizzly than 1.9.18k –

which version do you want me to build grizzly-config.jar from ?

gary

glassfishrobot commented 14 years ago

emiddio@java.net said: do i need to build grizzly-config.jar – can i simply download the jar – such as grizzly-config-1.9.19-SNAPSHOT.jar

thanks

glassfishrobot commented 14 years ago

emiddio@java.net said: i updated my grizzly 1.8.18-k checkout and built everything.

assumed i could simply keep a copy of the gfv3 modules directory so made a copy of it, and then replaced some grizzly jars with the new jars i had built;

initially kept the new filenames, deleting the old jars; initially tried replacing all jars starting with grizzly where i had new ones.

gfv3 startup failed with errors similar to the following: Error while starting bundle: file:/G:/Sun/sges- v3/glassfish/modules/autostart/osgi-web-container.jar: org.osgi.framework.BundleException: Unresolved constraint in bundle com.sun.grizzly.utils [230]: package; (package=com.sun.grizzly.lzma.compression.lzma) org.osgi.framework.BundleException: Unresolved constraint in bundle com.sun.grizzly.utils [230]: package; (package=com.sun.grizzly.lzma.compression.lzma) at org.apache.felix.framework.Felix.resolveBundle(Felix.java:3263) at org.apache.felix.framework.Felix.startBundle(Felix.java:1597) at org.apache.felix.framework.BundleImpl.start(BundleImpl.java:915) at org.apache.felix.framework.BundleImpl.start(BundleImpl.java:902) at org.apache.felix.fileinstall.internal.DirectoryWatcher.start(DirectoryWatcher.ja va:1027) at org.apache.felix.fileinstall.internal.DirectoryWatcher.start(DirectoryWatcher.ja va:1013) at org.apache.felix.fileinstall.internal.DirectoryWatcher.startAllBundles(Directory Watcher.java:1006) at org.apache.felix.fileinstall.internal.DirectoryWatcher.process(DirectoryWatcher. java:396)


so then tried to recover by restoring the modules directory to the original contents – the copy i had made;

no way to start gfv3 now without getting errors like above;

do not understand why cannot simply restore the modules directory – and recover gfv3's ability to run correctly ????

will now have to re-install gfv3 and try some experiments again;

perhaps keeping a full copy of gfv3 will enable a quicker recovery ???

glassfishrobot commented 14 years ago

emiddio@java.net said: i updated my grizzly 1.9.18-k checkout and built everything.

i updated my grizzly 1.8.18-k checkout and built everything – was a typo.

glassfishrobot commented 14 years ago

emiddio@java.net said: Created an attachment (id=122) discussion – copied from a post

glassfishrobot commented 14 years ago

cheeser@java.net said: the LongDownloadTest in modules/http shows that this is not a bug but a configuration issues. A new test in the glassfish devtests confirm that, with the correct configuration, long download times are allowable. The default transaction timeout (http.timeout-seconds) is 30 seconds which is why your download dies after that time.

glassfishrobot commented 14 years ago

File: gfv3Info2.txt Attached By: emiddio@java.net

glassfishrobot commented 14 years ago

Was assigned to cheeser@java.net

glassfishrobot commented 7 years ago

This issue was imported from java.net JIRA GRIZZLY-804

glassfishrobot commented 14 years ago

Marked as incomplete on Wednesday, April 14th 2010, 6:05:43 am