>> A fix for intermittent test failures causing grief on Windows, particularly 
>> Windows 7 and 2008 systems:
>> http://cr.openjdk.java.net/~ddehaven/8004042/webrev.1/
>> 
>> The underlying cause is as of yet unknown, but I was able to create an 
>> environment that caused similar failures by running "watch -n 0.2 cat 
>> JTwork/scratch/atest.bat" in another shell then running jtreg. Without the 
>> patch it would fail very regularly (especially when isolated and looped 
>> 1,000 times), with the patch it always passes.
> 
> We had been discussing/speculating that the problem is the virus scanner 
> checking the old incarnation of the file at the same time we want to create a 
> new one. If so, and if it were to hold the file open with exclusive access, 
> that would explain the AccessDeniedException instead of 
> FileAlreadyExistsException (in the CREATE_NEW case).
> 
> (I still don't have an explanation for why the file deletion doesn't throw an 
> exception. That's what seems to cause jtreg some grief in its cleanup phase, 
> and for that reason we've added retry logic to jtreg.)

I see a lot of quirky filesystem behavior just using Windows 7, especially 
compared to Unixish systems … but maybe that's just me and my environment :)


> In any case I think backing off and retrying is probably what's getting us 
> the benefit, not the adjustment of the file creation flags.

I agree… I also think this is deeper than just the virus scanner, but I've not 
the expertise to validate that claim.


> In any case I'd increase the number of retry attempts. The test environment 
> is surprisingly hostile. In the RMI tests we try to open an unused network 
> port and retry 10 times if that fails, and sometimes that's not enough. (See 
> Jim Gish's recent changeset.)

For 8004317 (I think you pushed it yesterday)? I'll take a look at it.

That was my initial value. I backed it off thinking it was overly aggressive, 
but if the environment is that hostile perhaps it's not.


> InterruptedException shouldn't be ignored. Jtreg will interrupt the test if 
> it times out, so this interruption should be handled gracefully. Perhaps, 
> wrap the InterruptedException in an IOException and rethrow it? (Since the 
> caller is clearly prepared to handle IOException.) Terminating the loop and 
> returning normally doesn't seem right, since the file wasn't created 
> successfully.

Good point! I'll add that. I think I should through RuntimeException in both 
cases, to be consistent.


> This is only style, but perhaps it would be good to get rid of the 'done' 
> boolean and replace the 'done = true' statement with a 'return'. This 
> simplifies things a bit, I think.

I rewrote it to use a for loop instead and it's much cleaner. I'll post a new 
webrev later today.

-DrD-

Reply via email to