为什么创建和删除Azure表失败?

时间:2013-12-03 22:30:26

标签: javascript node.js azure azure-table-storage

我想知道当我尝试删除我存储实体的表时,为什么尝试运行以下测试套件失败。我得到的错误是以下

  

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);
};

1 个答案:

答案 0 :(得分:1)

我也使用c#库来解决这个问题,但我很确定错误消息表明无法创建表,因为同一个表的操作仍在进行中。考虑后端支持存储,有意义的是它不会是即时的。需要从3个本地副本以及配对数据中心中的副本中删除该表。

通过这种异步操作,建立一个足够快的撕裂以进行测试将是一项挑战。

解决方法可能是增加一个附加到“TEST”表名称的值,该值对于该测试运行是唯一的。