我想知道当我尝试删除我存储实体的表时,为什么尝试运行以下测试套件失败。我得到的错误是以下
1)Azure存储云存储操作“毕竟”挂钩: 错误:指定的资源不存在。请求ID:3745d709-fa5e-4a2b-b517-89edad3efdd2 时间:2013-12-03T22:26:39.5532356Z
如果我注释掉实际的数据插入,它每隔一段时间就会失败,如果我尝试插入数据,那么每次都会失败并显示“指定的表不存在。”。
对于第一种情况,这似乎表明在表创建中存在某种延迟,因此在每个其他测试中它都是成功的,而对于第二种情况,它似乎表明即使我的回调被调用之后表创建时,表仍未准备好插入数据。
测试套件和相关代码如下所示:
describe('cloud storage operations', function () {
var storage;
before(function (done) {
this.timeout(5000);
storage = AzureStorage.usingTable('TEST', done);
});
after(function (done) {
storage.deleteTable(done);
});
it('should store without trouble', function (done) {
storage.save(factory.createChangeSet()).then(done, done);
});
});
... //从azure.js剪掉
var AzureStorage = function (storageClient, tableName, callback) {
assert(storageClient && tableName && partitionKey, "Missing parameters");
this.storageClient = storageClient;
this.tableName = tableName;
var defaultCallback = function (err) { if (err) { throw error; } };
this.storageClient.createTableIfNotExists(this.tableName, function () {
callback();
} || defaultCallback);
};
AzureStorage.usingTable = function (tableName, callback) {
return new AzureStorage(
azure.createTableService(accountName, accountKey)
, tableName
, callback
);
};
AzureStorage.prototype.deleteTable = function (callback) {
this.storageClient.deleteTable(this.tableName, callback);
};
答案 0 :(得分:1)
我也使用c#库来解决这个问题,但我很确定错误消息表明无法创建表,因为同一个表的操作仍在进行中。考虑后端支持存储,有意义的是它不会是即时的。需要从3个本地副本以及配对数据中心中的副本中删除该表。
通过这种异步操作,建立一个足够快的撕裂以进行测试将是一项挑战。
解决方法可能是增加一个附加到“TEST”表名称的值,该值对于该测试运行是唯一的。