Sunday, November 07, 2004
QVCS-Enterprise 1.0.0.16 published
A week late, but better late than too early, at least for software publishing.
The week's delay gave me a chance to fix some things that I should have caught earlier. As a result, this build is the best Enterprise release to date, and is much more stable than earlier releases.
In getting things buttoned up today, I ran across another bug that had been lurking since the beginning. When I create a release, I use the custom Ant task of the product to create the build. This is both a convenience, and a simple way to test the functionality of the custom Ant task. In earlier builds, the custom Ant task would usually work and I had enough other things going on that I never took the time to figure out what was the cause of the problem. This time around, I decided I'd had enough -- time to slay this inconsistent behavior.
After several false starts, I finally figured out the source of the problem: it was a race condition that would only occur if the moon aligned a certain way -- i.e. it fit the observed behavior exactly, since prior to the fix, the Ant task usually worked correctly. Since the fix, the custom Ant task behaves very predictably, and I'm a much less frustrated user.
Among the other clean up things that made it into this release, the most significant bug fix has got to be the clean up of some subtle memory leaks. The largest source of leaks was within some code that made use of the Java ObjectOutputStream and ObjectInputStream. As it turns out, both of these classes hold on to references of the objects that are serialized through the streams so that if you are serializing an object tree, the serialization plumbing doesn't have to serialize the same object more than once. This makes these streams efficient for sending an object from one place to another, but it makes for a subtle memory leak if you leave the streams open for a long time and use the streams to serialize bunches of unrelated objects.... which is exactly what QVCS-Enterprise does when sending data back and forth between the server and the client. Of course, all this is documented after a fashion -- you just need to make sure to call the reset() method on the ObjectOutputStream in order to get the stream to discard any references that it is holding on to. The code does that now; it did not do it in earlier releases.
To verify that the memory leaks have been fixed, I tested the application with a project that contained over 11,000 files. Both server and client survived, and while client performance for a project of that size is slower than I'd like, it did work, and did not suffer from an Out of Memory exception. The same can be said of the server. Prior to these fixes, neither server nor client could handle projects of that size.
Wednesday, November 03, 2004
QVCS-Enterprise build 1.0.0.16 will be out by November 7
Well, I had thought that 1.0.0.16 would be released by now. I was wrong.
It turns out that I had to be out of town on a business trip over the weekend, and as a result didn't have the time to wrap things up for the build.
This, in hindsight was a good thing, since it gave me some time to profile both the server and the client application. That effort produced a happy result: I found several fairly significant memory leaks in both the server and client. Those memory leaks are now fixed, making the server much less likely to run out of memory than in earlier builds.
I also had a chance to put in a new splash screen, and add some useful information to the 'About' box. You'll get to see the results by Sunday, November 7.