zkutil: add remove with retries [#METR-16024]

This commit is contained in:
Pavel Kartavyy 2015-05-15 17:53:39 +03:00
parent be684446bd
commit 8d0e842dde
2 changed files with 14 additions and 0 deletions

View File

@ -100,6 +100,11 @@ public:
*/ */
void remove(const std::string & path, int32_t version = -1); void remove(const std::string & path, int32_t version = -1);
/** Удаляет ноду. В случае сетевых ошибок пробует удалять повторно.
* Ошибка ZNONODE для второй и последующих попыток игнорируется
*/
void removeWithRetries(const std::string & path, int32_t version = -1);
/** Не бросает исключение при следующих ошибках: /** Не бросает исключение при следующих ошибках:
* - Такой ноды нет. * - Такой ноды нет.
* - У ноды другая версия. * - У ноды другая версия.

View File

@ -294,6 +294,15 @@ void ZooKeeper::remove(const std::string & path, int32_t version)
check(tryRemove(path, version), path); check(tryRemove(path, version), path);
} }
void ZooKeeper::removeWithRetries(const std::string & path, int32_t version)
{
size_t attempt;
int code = tryRemoveWithRetries(path, version, &attempt);
if (!(code == ZOK || (code == ZNONODE && attempt > 0)))
throw KeeperException(code, path);
}
int32_t ZooKeeper::tryRemove(const std::string & path, int32_t version) int32_t ZooKeeper::tryRemove(const std::string & path, int32_t version)
{ {
int32_t code = removeImpl(path, version); int32_t code = removeImpl(path, version);