This commit is contained in:
Michael Kolupaev 2014-08-11 18:05:38 +04:00
parent 7b11fc4f6c
commit 5e0e9bbc00
3 changed files with 19 additions and 0 deletions

View File

@ -157,6 +157,8 @@ void StorageReplicatedMergeTree::createTableIfNotExists()
LOG_DEBUG(log, "Creating table " << zookeeper_path);
zookeeper->createAncestors(zookeeper_path);
/// Запишем метаданные таблицы, чтобы реплики могли сверять с ними параметры таблицы.
std::stringstream metadata;
metadata << "metadata format version: 1" << std::endl;

View File

@ -84,6 +84,10 @@ public:
*/
void createIfNotExists(const std::string & path, const std::string & data);
/** Создает всех еще не существующих предков ноды, с пустыми данными. Саму указанную ноду не создает.
*/
void createAncestors(const std::string & path);
/** Удалить ноду, если ее версия равна version (если -1, подойдет любая версия).
*/
void remove(const std::string & path, int32_t version = -1);

View File

@ -236,6 +236,19 @@ void ZooKeeper::createIfNotExists(const std::string & path, const std::string &
throw KeeperException(code, path);
}
void ZooKeeper::createAncestors(const std::string & path)
{
size_t pos = 1;
while (true)
{
pos = path.find('/', pos);
if (pos == std::string::npos)
break;
createIfNotExists(path.substr(0, pos), "");
++pos;
}
}
int32_t ZooKeeper::removeImpl(const std::string & path, int32_t version)
{
int32_t code = zoo_delete(impl, path.c_str(), version);