DatabaseCloud: development [#METR-19998].

This commit is contained in:
Alexey Milovidov 2016-03-26 07:44:49 +03:00
parent e8f2afe899
commit fc99c6a3ae
5 changed files with 14 additions and 13 deletions

View File

@ -93,7 +93,7 @@ public:
bool empty() const override; bool empty() const override;
void createTable(const String & table_name, const StoragePtr & table, const ASTPtr & query, const String & engine) override; void createTable(const String & table_name, const StoragePtr & table, const ASTPtr & query, const String & engine) override;
StoragePtr removeTable(const String & table_name) override; void removeTable(const String & table_name) override;
void attachTable(const String & table_name, const StoragePtr & table) override; void attachTable(const String & table_name, const StoragePtr & table) override;
StoragePtr detachTable(const String & table_name) override; StoragePtr detachTable(const String & table_name) override;

View File

@ -34,7 +34,7 @@ public:
bool empty() const override; bool empty() const override;
void createTable(const String & table_name, const StoragePtr & table, const ASTPtr & query, const String & engine) override; void createTable(const String & table_name, const StoragePtr & table, const ASTPtr & query, const String & engine) override;
StoragePtr removeTable(const String & table_name) override; void removeTable(const String & table_name) override;
void attachTable(const String & table_name, const StoragePtr & table) override; void attachTable(const String & table_name, const StoragePtr & table) override;
StoragePtr detachTable(const String & table_name) override; StoragePtr detachTable(const String & table_name) override;

View File

@ -57,7 +57,7 @@ public:
virtual void createTable(const String & name, const StoragePtr & table, const ASTPtr & query, const String & engine) = 0; virtual void createTable(const String & name, const StoragePtr & table, const ASTPtr & query, const String & engine) = 0;
/// Удалить таблицу из базы данных и вернуть её. Удалить метаданные. /// Удалить таблицу из базы данных и вернуть её. Удалить метаданные.
virtual StoragePtr removeTable(const String & name) = 0; virtual void removeTable(const String & name) = 0;
/// Добавить таблицу в базу данных, но не прописывать её в метаданных. БД может не поддерживать этот метод. /// Добавить таблицу в базу данных, но не прописывать её в метаданных. БД может не поддерживать этот метод.
virtual void attachTable(const String & name, const StoragePtr & table) = 0; virtual void attachTable(const String & name, const StoragePtr & table) = 0;

View File

@ -55,9 +55,10 @@ void DatabaseCloud::createZookeeperNodes()
else else
throw zkutil::KeeperException(code); throw zkutil::KeeperException(code);
zookeeper->createIfNotExists(zookeeper_path + "/tables/" + name); zookeeper->createIfNotExists(zookeeper_path + "/tables/" + name, "");
zookeeper->createIfNotExists(zookeeper_path + "/local_tables/" + name); zookeeper->createIfNotExists(zookeeper_path + "/local_tables/" + name, "");
zookeeper->createIfNotExists(zookeeper_path + "/nodes/" + hostname); zookeeper->createIfNotExists(zookeeper_path + "/nodes/" + hostname, "");
zookeeper->createIfNotExists(zookeeper_path + "/nodes/" + hostname + "/datacenter", datacenter_name);
} }
@ -434,7 +435,7 @@ bool DatabaseCloud::empty() const
ASTPtr DatabaseCloud::getCreateQuery(const String & table_name) const ASTPtr DatabaseCloud::getCreateQuery(const String & table_name) const
{ {
zkutil::ZooKeeperPtr zookeeper = context.getZooKeeper(); zkutil::ZooKeeperPtr zookeeper = context.getZooKeeper();
String definition; Hash definition_hash;
String table_name_escaped = escapeForFileName(table_name); String table_name_escaped = escapeForFileName(table_name);
if (Poco::File(data_path + table_name_escaped).exists()) if (Poco::File(data_path + table_name_escaped).exists())
@ -443,7 +444,7 @@ ASTPtr DatabaseCloud::getCreateQuery(const String & table_name) const
zookeeper_path + "/local_tables/" + name + "/" + getNameOfNodeWithTables(table_name))); zookeeper_path + "/local_tables/" + name + "/" + getNameOfNodeWithTables(table_name)));
Hash table_hash = getTableHash(table_name); Hash table_hash = getTableHash(table_name);
definition = getTableDefinitionFromHash(local_tables_info.map.at(table_hash)); definition_hash = local_tables_info.map.at(table_hash);
} }
else else
{ {
@ -451,12 +452,14 @@ ASTPtr DatabaseCloud::getCreateQuery(const String & table_name) const
zookeeper_path + "/tables/" + name + "/" + getNameOfNodeWithTables(table_name))); zookeeper_path + "/tables/" + name + "/" + getNameOfNodeWithTables(table_name)));
const TableDescription & description = tables_info.at(table_name); const TableDescription & description = tables_info.at(table_name);
definition = getTableDefinitionFromHash(description.definition_hash); definition_hash = description.definition_hash;
} }
String definition = getTableDefinitionFromHash(definition_hash);
ParserCreateQuery parser; ParserCreateQuery parser;
ASTPtr ast = parseQuery(parser, definition.data(), definition.data() + definition.size(), ASTPtr ast = parseQuery(parser, definition.data(), definition.data() + definition.size(),
"in zookeeper node " + zookeeper_path + "/table_definitions/" + hashToHex(description.definition_hash)); "in zookeeper node " + zookeeper_path + "/table_definitions/" + hashToHex(definition_hash));
ASTCreateQuery & ast_create_query = typeid_cast<ASTCreateQuery &>(*ast); ASTCreateQuery & ast_create_query = typeid_cast<ASTCreateQuery &>(*ast);
ast_create_query.attach = false; ast_create_query.attach = false;

View File

@ -332,7 +332,7 @@ StoragePtr DatabaseOrdinary::detachTable(const String & table_name)
} }
StoragePtr DatabaseOrdinary::removeTable(const String & table_name) void DatabaseOrdinary::removeTable(const String & table_name)
{ {
StoragePtr res = detachTable(table_name); StoragePtr res = detachTable(table_name);
@ -348,8 +348,6 @@ StoragePtr DatabaseOrdinary::removeTable(const String & table_name)
attachTable(table_name, res); attachTable(table_name, res);
throw; throw;
} }
return res;
} }