in tablestore/src/main/java/com/alicloud/openservices/tablestore/DefaultTableStoreWriter.java [149:194]
private void initialize() {
logger.info("Start initialize ots writer, table name: {}.", tableName);
DescribeTableRequest request = new DescribeTableRequest();
request.setTableName(tableName);
Future<DescribeTableResponse> result = ots.describeTable(request, null);
DescribeTableResponse res = null;
try {
res = result.get();
} catch (Exception e) {
throw new ClientException(e);
}
if (res.getIndexMeta() != null && res.getIndexMeta().size() > 0) {
allowDuplicatePkInBatchRequest = false;
logger.info("Table [{}] has globalIndex, allowDuplicatePkInBatchRequest will be overwrite by [false]", tableName);
}
this.tableMeta = res.getTableMeta();
logger.info("End initialize with table meta: {}.", tableMeta);
buckets = new Bucket[writerConfig.getBucketCount()];
for (int i = 0; i < writerConfig.getBucketCount(); i++) {
BucketConfig bucketConfig = new BucketConfig(
i,
this.tableMeta.getTableName(),
this.writerConfig.getWriteMode(),
this.allowDuplicatePkInBatchRequest);
buckets[i] = new Bucket(bucketConfig, ots, writerConfig, resultCallback, executor, writerStatistics, semaphore);
}
switch (writerConfig.getDispatchMode()) {
case HASH_PARTITION_KEY:
dispatcher = new HashPartitionKeyDispatcher(writerConfig.getBucketCount());
break;
case ROUND_ROBIN:
dispatcher = new RoundRobinDispatcher(writerConfig.getBucketCount());
break;
case HASH_PRIMARY_KEY:
dispatcher = new HashPrimaryKeyDispatcher(writerConfig.getBucketCount());
break;
default:
throw new ClientException(String.format("The dispatch mode [%s] not supported", writerConfig.getDispatchMode()));
}
startFlushTimer(writerConfig.getFlushInterval());
startLogTimer(writerConfig.getLogInterval());
}