Я использую Azure SDK версии 2.2. Я имею проблему, что в моем коде потенциально несколько машин называют этому кодAzure CloudPageBlob Create - как реализовать CreateIfNotExist
CloudPageBlob _pageBlob = .....
try
{
_pageBlob.FetchAttributes();
}
catch
{
//container does not exist
_pageBlob.Create(AllocatedBlobSize);
}
Я испытал это, и мой вывод, что несколько вызовов из _pageBlob.Create(AllocatedBlobSize);
очищают предыдущих данные. Как убедиться, что побеждает только одна машина и создает CloudPageBlob? (Я хочу, чтобы другие терпели неудачу) Я ожидал, что несколько вызовов Create
приведут к исключению, но это не то, что происходит :(
EDIT: В нашей архитектуре есть один лидер и X-последователи. Я использую CloudPageBlob + ETAG, чтобы избрать нового лидера (только одна машина сможет записать метаданные в CloudPageBlob = новый лидер). Но есть крайний случай, когда этот куб облачной страницы может быть поврежден + лидер умирает (или мы начинаем, и нет лидера пока). В этом случае мне нужно создать новый CloudPageBlob (нормальный лидер создает его) => каждая машина пытается его создать и писать ему метаданные (все хотят быть лидером). Теоретически, если 2 машины выполнялись этот код. Машина A вызывает _pageBlob.Create()
, без ошибок, пишет метаданные, думает, что это лидер. Machine B call _pageBlob.Create()
, без ошибок, метаданные ma chine A (+ потенциально больше данных) переписаны машиной B. Я хочу, чтобы машина B не сработала :). Самая большая проблема заключается в том, что я теряю данные.
Не могли бы вы описать сценарий, который вы пытаетесь решить? Возможно, есть лучший подход. :) – BrentDaCodeMonkey
описано, надеюсь, что это поможет. На самом деле самой большой проблемой является потеря данных – klesta