Before, shard range container names were based on their upper
bound. Now they are based on their index so that any process finding N
shard ranges in potentially dissimilar replicas of a container will
use the same shard container names.
Before, the shard containers' account prefix was fixed as
'.sharded_'. Now it is '<prefix>shards_' where <prefix> is the
configurable autocreate account prefix.
Usually only one process would be expected to find shard
ranges. However, if more than one process is finding shard ranges
then, assuming they are using the same epoch and shard range number,
they will now create the same shard range containers. Each process is
likely to select different bounds for those shard ranges, but boundary
disputes can be resolved during replication. The fact that each
process created the same shard container means that only object rows
close to boundaries will need to be relocated.
A shard container name has the form:
<root-container-name>-H(parent-container-name)-<epoch>-<index>
where H is the md5 hash function.
The hash of the parent container is included to differentiate shards
of shard-x and shard-y if shard-x and shard-y were to be sharded at
the same epoch.
For example, the second shard range of a root container named 'foo'
would have container name:
shard-name = foo-H(foo)-<epoch>-1
The third shard-range of that shard would have name:
foo-H(shard-name)-<epoch>-2
Change-Id: I8cf5d72a9256ee2bae141ebdb892db2cb578f39a