in spanner-data-validator-java/src/main/java/com/google/migration/ShardSpecList.java [70:112]
private static List<ShardSpec> getShardSpecsFromShardSpecJsonDef(ShardSpecJsonDef ssDef,
Boolean verboseLogging) {
ArrayList<ShardSpec> shardSpecs = new ArrayList<>();
Integer hostCount = ssDef.getHostCount();
Integer shardCount = ssDef.getShardCount();
Integer shardsPerHost = shardCount/hostCount;
String hostDigitFormat = "%s%0" + ssDef.getHostnameSuffixDigits() + "d";
String shardDigitFormat = "%s%0" + ssDef.getShardSuffixDigits() + "d";
for(int i = 0; i < hostCount; i++) {
String hostname = String.format(hostDigitFormat,
ssDef.getHostnamePrefix(),
ssDef.getHostnameSuffixStart() + i);
String shardStaticSuffix = ssDef.getShardStaticSuffix();
if(!Helpers.isNullOrEmpty(shardStaticSuffix)) {
hostname = String.format("%s%s", hostname, shardStaticSuffix);
}
for(int j = 0; j < shardsPerHost; j++) {
String db = String.format(shardDigitFormat,
ssDef.getDbNamePrefix(),
ssDef.getShardSuffixStart() + j + (i * shardsPerHost));
ShardSpec spec = new ShardSpec(hostname,
ssDef.getUsername(),
ssDef.getPassword(),
db,
String.valueOf((i * shardsPerHost) + j),
(i * shardsPerHost) + j);
if(verboseLogging) {
LOG.info(String.format("Hostname: %s, shard (db): %s", spec.getHost(), spec.getDb()));
}
shardSpecs.add(spec);
} // for
}
return shardSpecs;
}