【问题标题】:Lease a blob while writing stream to blob until it completes在将流写入 blob 时租用 blob,直到它完成
【发布时间】:2012-10-07 11:21:48
【问题描述】:

我想在向它写入流的同时租用一个 blob,直到它完成。以下代码:

场景一:

  blob.AcquireLease();
  blob.UploadText("Content");
  blob.Release();

如果我首先获得 blob 的租约,由于 blob 已被锁定,因此需要将内容上传到的内容会引发异常。

场景二:

  blob.uploadText("Content");
  blob.AcquireLease();
  blob.Release();

由于我是同步上传内容到blob,blob.AcquireLease()语句只有在上传完成后才会执行。如果是这样的话,这样做有什么好处。

  1. 基本上,我正在寻找可以在开始上传内容之前锁定/租用 blob 并在上传完成时释放锁定的建议。
  2. 我们只能租用一个 blob 90 秒(默认情况下)。如果 blob.upload 需要超过 90 秒(考虑文件大小为 100MB),我想知道如何继续更新租约直到上传完成。

【问题讨论】:

    标签: azure azure-storage azure-blob-storage


    【解决方案1】:

    如果您拥有租约,则只能修改租用的 blob。这意味着您必须连同您的请求一起通过租约。

    类似这样的代码应该可以工作(警告:未经测试,甚至未编译):

    var leaseId = blob.AcquireLease();
    blob.UploadText("Content", Encoding.UTF8, AccessCondition.GenerateLeaseCondition(leaseId), null);
    blob.ReleaseLease(AccessCondition.GenerateLeaseCondition(leaseId));
    

    想一想,您上面的代码是否有效? ReleaseLease 至少需要一个参数,不是吗?

    对于您的第二个问题,我相信默认情况下租约最多为 60 秒(而不是 90 秒)。回到存储客户端库支持租约之前,我为此构建了自己的代码,并创建了一个名为AutoRenewLease 的类,它每 45 秒更新一次租约,以确保我不会丢失它。您可以在https://github.com/smarx/WazStorageExtensions 找到代码。类似的东西应该适合你。

    【讨论】:

    • 是否会出现续订失效(例如当您的箱子承受重载时)并且租约随后到期的情况?例如,对于 Node.js,任务的计时器仅保证任务不会提前启动,因此可能会发生这种情况。
    • 评论不是提出新问题的好地方(尤其是 5 年前的答案)。如果您想得到答案,请提交一个新问题。
    猜你喜欢
    • 2011-12-18
    • 2020-10-23
    • 2020-11-07
    • 2019-12-23
    • 2022-10-08
    • 2019-11-19
    • 2014-09-09
    • 2023-01-03
    • 2011-09-16
    相关资源
    最近更新 更多