Java application hangs on I/O
807603Nov 29 2007 — edited Nov 29 2007Hello,
Could use some help as I've been racking my brain and going crazy. I have a Java application who's sole purpose in life is to monitor a QFS file system for when it goes bad. This main process kicks off a thread(we'll call it thread A) which lives indefinitely. This thread wakes up every so often and kicks off a thread to write a file, and then a thread to read that file back in, and then a thread to delete that file. Thread A has no interaction back to the main process but does monitor each of it's subthreads. This process works great for all testing that you can do, like unmounting the file system and pulling network cables etc. The problem lies when the QFS servers start doing their server not responding routine(basically a real failure and not a purposely inflicted one. What happens is that the whole Java application hangs. The main process, and the parent thread(thread A) all grind to a hault. From the command line anything you try to do in that file system also hangs but you can ctrl-c out of it(like a ls or cd to it. I have been experimenting with all the ways I can think of to fix this, like thread.interupt(), using Runtime.exec instead of I/O objects and trying to control the Process object, and I've tried exposing the FileInputStream and FileOutputStream objects in order to call close() on them. I've been reading that the interupt() method doesn't work for all intense purposes and that the latter method I tried is the way to do it, although, these postings say that that doesn't necessarily always work on Linux. Unfortunately, I am running this application on a Solaris 10 X86 platform which has a lot of similarities to Linux and am experiencing this not working. Has anybody had to do anything like this or handle cases like this that could maybe point me in the direction that they were successful in?
Thanks