|Matthew Swift||Feb 5, 2009 10:00 am|
|Subject:||[OpenDS-dev] ASN1 branch merged to trunk in revision 4956|
|From:||Matthew Swift (Matt...@Sun.COM)|
|Date:||Feb 5, 2009 10:00:46 am|
I have just completed the merge of the ASN1 branch to the trunk. Please update your workspaces as soon as possible, since the changes are very numerous. The trunk now builds cleanly on both JDK5 and JDK6 and all unit tests pass for JDK6 (with the usual random exceptions). There are also no regressions in the functional tests.
Firstly, I'd like to thank Bo who has worked very hard over the past few months in order to make these new ASN1 APIs a reality. In addition, kudos should also go to Mike who also dived in and helped refactor some of the core IO stack.
These new APIs bring three things to OpenDS:
* improved performance: we have observed a 50% reduction in search rate etimes for all sizes of entries over 1KB. In addition, we have seen a significant improvement for modify rate etimes (the improvement here is less as a percentage because modrates spend a greater proportion of time performing non encode/decode related tasks).
* improved determinism: we now generate far less garbage per operation which results in a reduced garbage collection frequency for a given throughput.
* simpler, cleaner APIs: we now use a streams based approach for ASN1 encoding and decoding. The result is a much more compact and easier to use API.
What are the key changes? =========================
I have provided a quick summary of the changes on my nice new shiny blog at http://blogs.sun.com/mattswift. I never thought that I'd have a blog, but the day has finally come! :-) I'll be regularly updating this blog with news about core development in OpenDS so, if you're interested in the technical details, then be sure to take a look now and then.
Here's a quick getting started guide:
* org.opends.server.protocols.asn1 - package containing the new ASN1 classes and interfaces. The key APIs here are ASN1, ASN1Reader, and ASN1Writer.
* org.opends.server.types - there are new classes here for interacting with byte sequences. Use these classes if you want to construct attribute values, for example. In particular:
o AttributeValue - simplified attribute value interface o AttributeValues - factory class for creating AttributeValue instances o ByteSequence - a sequence of bytes (c.f. CharSequence) o ByteString - an immutable sequence of bytes (c.f. String) o ByteStringBuilder - an interface for incrementally building byte sequences (c.f. StringBuilder) o ByteSequenceReader - an interface for incrementally decoding byte sequences (c.f. StringReader)
Good luck and let us know if you have any questions,