Accumulo TableOperations.createTable 是同步的吗?

Is Accumulo TableOperations.createTable synchronous?

我正在使用 Accumulo 1.6.2,我看到一个问题,似乎 TableOperations.createTable 可能 return 无一例外,但 table 仍然不是准备好了。

例如在下面的代码中:

String tableName = "foo";
TableOperations operations = connector.tableOperations();

if(!operations.exists(tableName))
{
  operations.createTable(tableName);
}

//Make a bunch of mutations that write to the table
BatchWriter batchWriter = connector.createBatchWriter(tableName, someConfig);

batchWriter.addMutations(mutations);
batchWriter.close();

当我用上面的代码运行进行单元测试时,有时会得到一个异常提示table foo不存在。但是,代码刚刚创建 table foo.

我唯一能想到的是,在 createTable() return 之后的 window 时间里 table 可能仍然不存在。

Javadoc 没有解释该行为。我也读过 Orielly 的 Accumulo 书的早期发行副本,但它也没有说。

这里正确的模式是什么?我可以添加如下内容:

//Make table    
while(!operations.exists(tableName){}
//Do stuff with table

然而,这似乎是一件非常丑陋且可能容易出错的事情。我希望这里有更好的模式。

创建 table 应该是一个同步操作。您应该不会看到上述示例的异常。

如果您可以提供具体的例外情况,这可能会提示需要修复的错误。