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 应该是一个同步操作。您应该不会看到上述示例的异常。
如果您可以提供具体的例外情况,这可能会提示需要修复的错误。
我正在使用 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 应该是一个同步操作。您应该不会看到上述示例的异常。
如果您可以提供具体的例外情况,这可能会提示需要修复的错误。