Kathey Marsden wrote:

Rick Hillegas wrote:


I'm afraid I don't understand why we would want to revert our tests to the old behavior. It seems to me that our tests are practicing stunts which we strongly discourage: changing Derby properties on the fly. In general, there will always be Heisenbugs for applications which do this and we should discourage this practice in the strongest possible terms. What is the benefit of reverting the test behavior?

I think the scope of the problem is beyond generating derby.properties on the fly. I think the greater risk is anyone setting system properties to affect derby behaviour. The biggest trouble maker I am guessing would be derby.system.home. The new requirement (I think) is that you set derby.system.home before any driver is autoloaded and would have the symptoms described in this mail.
Is that description correct?

http://www.nabble.com/Re%3A--jira--Commented%3A-%28DERBY-930%29-Add-support-for-autoloading-of-Derby-client-drivers-p4909085.html

I find it not uncommon to see code like this:

System.setProperty("derby.system.home", MY_DERBY_DIR);
Class.forName("org.apache.derby.jdbc.EmbeddedDriver").newInstance();

You are right, that there are multiple ways to get to the bug. One way is to regenerate derby.properties itself in the directory indicated by derby.system.home. Another way to trigger the behavior is to reset the value of derby.system.home so that it points to a directory with a different derby.properties. I defer to your experience as to which of these is the more travelled route.


If I understand the problem correctly, this will no longer reliably work if any other code in the same JVM (or is it classloader context?) makes a database connection to any database.
Is that correct?

Right. It does not reliably work today if the VM runs more than one embedded derby application, one of which is self-configuring. That's bug DERBY-1428. JDBC4 introduces a new scenario for the bug, as you describe: the bug can turn up if jdk1.6 runs a self-configuring Derby application together with another application, which connects to some database. That's DERBY-1429.



The point of seeing if we can keep the tests the same is to see if we can avoid user impact. We should olnly change the tests if and when we decide the behavior change is ok. If later we add better tests that more accurately reflect actual user scemarios like the one above instead, that would be great, but the bottom line is just like the tests, USERS DO STRANGE THINGS and expect things to still work. If they upgrade and things suddenly don't work, they want the old behaviour back and we can't give it to them because new users depend on the new behaviour. We trap ourselves into a very ugly corner.and this is a very bad and messy thing. It is better to keep things working if we can. Every time we change a test to adapt to some new usage requirement it should be a huge red flag that someone is going to hit the problem.

Kathey


Thanks for the explanation. I'm looking forward to your analysis and to more feedback from the user community so that we can decide what to do here.

Reply via email to