Committed a simplification of migration against this issue.
Previously migration was a 5 step process. Ensuring each individual step had the right set of classes to hand proved too much for my small brain. Complexity was compounded by fact that some classes were self-migrating. Things got extra messy when test migration did a forward migrate, junked the version file, and then ran a new forward migration top the old.
To get this patch in, I first stripped migration to a minimum. Now, the migration script in TRUNK will only migrate between an hbase 0.1.x install and an hbase 0.2.x install. This removed one step. That leaves the addition of the regionhistorian column family and the bloom filter cleanup.
Plan is to make the migration one-step doing bloomfilter cleanup and migration of HTD, etc., all in the one step.
Going forward, we shouldn't be too bad now the important classes all have versions but if we think we're going to run into this awkward mix of classes in the future, we should do something like have each step run in its own JVM invocation so we have chance to doctor CLASSPATH per migration step.