我正在使用 Azure SDK 2.2 版。我有问题,在我的代码中可能有多台机器调用此代码
CloudPageBlob _pageBlob = .....
try
{
_pageBlob.FetchAttributes();
}
catch
{
//container does not exist
_pageBlob.Create(AllocatedBlobSize);
}
我已经测试过了,我的结论是多次调用_pageBlob.Create(AllocatedBlobSize);
清除以前的数据。如何确保只有一台机器获胜并创建 CloudPageBlob?(我希望其他人失败)我期待多次Create
调用会导致异常,但事实并非如此:(。
编辑:在我们的架构中,有一个领导者和 X 个追随者。我正在使用 CloudPageBlob + ETAG 来选举新的领导者(只有一台机器能够将其元数据写入 CloudPageBlob = 新的领导者)。但是有一个极端的情况,当这个云页面 blob 可能被损坏 + 领导者死亡时(或者我们正在启动并且还没有领导者)。在这种情况下,我需要创建新的 CloudPageBlob(通常由领导者创建)=> 每台机器都在尝试创建它并将其元数据写入它(每个人都想成为领导者)。理论上,如果有 2 台机器正在执行此代码。机器 A 调用_pageBlob.Create()
,没有错误,写入元数据认为它是领导者。机器B调用_pageBlob.Create()
,没有错误,机器A的元数据(+可能更多的数据)被机器B重写。我希望机器B失败:)。最大的问题是我丢失了数据。