mirror of
https://github.com/ClickHouse/ClickHouse.git
synced 2024-11-22 15:42:02 +00:00
Merge pull request #68488 from ClickHouse/misc-databases
Miscellaneous changes in database engines
This commit is contained in:
commit
bd035e7eb4
@ -52,7 +52,7 @@ DatabaseLazy::DatabaseLazy(const String & name_, const String & metadata_path_,
|
|||||||
|
|
||||||
void DatabaseLazy::loadStoredObjects(ContextMutablePtr local_context, LoadingStrictnessLevel /*mode*/)
|
void DatabaseLazy::loadStoredObjects(ContextMutablePtr local_context, LoadingStrictnessLevel /*mode*/)
|
||||||
{
|
{
|
||||||
iterateMetadataFiles(local_context, [this, &local_context](const String & file_name)
|
iterateMetadataFiles([this, &local_context](const String & file_name)
|
||||||
{
|
{
|
||||||
const std::string table_name = unescapeForFileName(file_name.substr(0, file_name.size() - 4));
|
const std::string table_name = unescapeForFileName(file_name.substr(0, file_name.size() - 4));
|
||||||
|
|
||||||
|
@ -12,7 +12,7 @@ class DatabaseLazyIterator;
|
|||||||
class Context;
|
class Context;
|
||||||
|
|
||||||
/** Lazy engine of databases.
|
/** Lazy engine of databases.
|
||||||
* Works like DatabaseOrdinary, but stores in memory only the cache.
|
* Works like DatabaseOrdinary, but stores only recently accessed tables in memory.
|
||||||
* Can be used only with *Log engines.
|
* Can be used only with *Log engines.
|
||||||
*/
|
*/
|
||||||
class DatabaseLazy final : public DatabaseOnDisk
|
class DatabaseLazy final : public DatabaseOnDisk
|
||||||
|
@ -568,14 +568,14 @@ void DatabaseOnDisk::drop(ContextPtr local_context)
|
|||||||
assert(TSA_SUPPRESS_WARNING_FOR_READ(tables).empty());
|
assert(TSA_SUPPRESS_WARNING_FOR_READ(tables).empty());
|
||||||
if (local_context->getSettingsRef().force_remove_data_recursively_on_drop)
|
if (local_context->getSettingsRef().force_remove_data_recursively_on_drop)
|
||||||
{
|
{
|
||||||
(void)fs::remove_all(local_context->getPath() + getDataPath());
|
(void)fs::remove_all(std::filesystem::path(getContext()->getPath()) / data_path);
|
||||||
(void)fs::remove_all(getMetadataPath());
|
(void)fs::remove_all(getMetadataPath());
|
||||||
}
|
}
|
||||||
else
|
else
|
||||||
{
|
{
|
||||||
try
|
try
|
||||||
{
|
{
|
||||||
(void)fs::remove(local_context->getPath() + getDataPath());
|
(void)fs::remove(std::filesystem::path(getContext()->getPath()) / data_path);
|
||||||
(void)fs::remove(getMetadataPath());
|
(void)fs::remove(getMetadataPath());
|
||||||
}
|
}
|
||||||
catch (const fs::filesystem_error & e)
|
catch (const fs::filesystem_error & e)
|
||||||
@ -613,7 +613,7 @@ time_t DatabaseOnDisk::getObjectMetadataModificationTime(const String & object_n
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
void DatabaseOnDisk::iterateMetadataFiles(ContextPtr local_context, const IteratingFunction & process_metadata_file) const
|
void DatabaseOnDisk::iterateMetadataFiles(const IteratingFunction & process_metadata_file) const
|
||||||
{
|
{
|
||||||
auto process_tmp_drop_metadata_file = [&](const String & file_name)
|
auto process_tmp_drop_metadata_file = [&](const String & file_name)
|
||||||
{
|
{
|
||||||
@ -621,7 +621,7 @@ void DatabaseOnDisk::iterateMetadataFiles(ContextPtr local_context, const Iterat
|
|||||||
static const char * tmp_drop_ext = ".sql.tmp_drop";
|
static const char * tmp_drop_ext = ".sql.tmp_drop";
|
||||||
const std::string object_name = file_name.substr(0, file_name.size() - strlen(tmp_drop_ext));
|
const std::string object_name = file_name.substr(0, file_name.size() - strlen(tmp_drop_ext));
|
||||||
|
|
||||||
if (fs::exists(local_context->getPath() + getDataPath() + '/' + object_name))
|
if (fs::exists(std::filesystem::path(getContext()->getPath()) / data_path / object_name))
|
||||||
{
|
{
|
||||||
fs::rename(getMetadataPath() + file_name, getMetadataPath() + object_name + ".sql");
|
fs::rename(getMetadataPath() + file_name, getMetadataPath() + object_name + ".sql");
|
||||||
LOG_WARNING(log, "Object {} was not dropped previously and will be restored", backQuote(object_name));
|
LOG_WARNING(log, "Object {} was not dropped previously and will be restored", backQuote(object_name));
|
||||||
@ -638,7 +638,7 @@ void DatabaseOnDisk::iterateMetadataFiles(ContextPtr local_context, const Iterat
|
|||||||
std::vector<std::pair<String, bool>> metadata_files;
|
std::vector<std::pair<String, bool>> metadata_files;
|
||||||
|
|
||||||
fs::directory_iterator dir_end;
|
fs::directory_iterator dir_end;
|
||||||
for (fs::directory_iterator dir_it(getMetadataPath()); dir_it != dir_end; ++dir_it)
|
for (fs::directory_iterator dir_it(metadata_path); dir_it != dir_end; ++dir_it)
|
||||||
{
|
{
|
||||||
String file_name = dir_it->path().filename();
|
String file_name = dir_it->path().filename();
|
||||||
/// For '.svn', '.gitignore' directory and similar.
|
/// For '.svn', '.gitignore' directory and similar.
|
||||||
|
@ -64,7 +64,7 @@ public:
|
|||||||
time_t getObjectMetadataModificationTime(const String & object_name) const override;
|
time_t getObjectMetadataModificationTime(const String & object_name) const override;
|
||||||
|
|
||||||
String getDataPath() const override { return data_path; }
|
String getDataPath() const override { return data_path; }
|
||||||
String getTableDataPath(const String & table_name) const override { return data_path + escapeForFileName(table_name) + "/"; }
|
String getTableDataPath(const String & table_name) const override { return std::filesystem::path(data_path) / escapeForFileName(table_name) / ""; }
|
||||||
String getTableDataPath(const ASTCreateQuery & query) const override { return getTableDataPath(query.getTable()); }
|
String getTableDataPath(const ASTCreateQuery & query) const override { return getTableDataPath(query.getTable()); }
|
||||||
String getMetadataPath() const override { return metadata_path; }
|
String getMetadataPath() const override { return metadata_path; }
|
||||||
|
|
||||||
@ -83,7 +83,7 @@ protected:
|
|||||||
|
|
||||||
using IteratingFunction = std::function<void(const String &)>;
|
using IteratingFunction = std::function<void(const String &)>;
|
||||||
|
|
||||||
void iterateMetadataFiles(ContextPtr context, const IteratingFunction & process_metadata_file) const;
|
void iterateMetadataFiles(const IteratingFunction & process_metadata_file) const;
|
||||||
|
|
||||||
ASTPtr getCreateTableQueryImpl(
|
ASTPtr getCreateTableQueryImpl(
|
||||||
const String & table_name,
|
const String & table_name,
|
||||||
|
@ -55,7 +55,7 @@ static constexpr size_t METADATA_FILE_BUFFER_SIZE = 32768;
|
|||||||
static constexpr const char * const CONVERT_TO_REPLICATED_FLAG_NAME = "convert_to_replicated";
|
static constexpr const char * const CONVERT_TO_REPLICATED_FLAG_NAME = "convert_to_replicated";
|
||||||
|
|
||||||
DatabaseOrdinary::DatabaseOrdinary(const String & name_, const String & metadata_path_, ContextPtr context_)
|
DatabaseOrdinary::DatabaseOrdinary(const String & name_, const String & metadata_path_, ContextPtr context_)
|
||||||
: DatabaseOrdinary(name_, metadata_path_, "data/" + escapeForFileName(name_) + "/", "DatabaseOrdinary (" + name_ + ")", context_)
|
: DatabaseOrdinary(name_, metadata_path_, std::filesystem::path("data") / escapeForFileName(name_) / "", "DatabaseOrdinary (" + name_ + ")", context_)
|
||||||
{
|
{
|
||||||
}
|
}
|
||||||
|
|
||||||
@ -265,7 +265,7 @@ void DatabaseOrdinary::loadTablesMetadata(ContextPtr local_context, ParsedTables
|
|||||||
}
|
}
|
||||||
};
|
};
|
||||||
|
|
||||||
iterateMetadataFiles(local_context, process_metadata);
|
iterateMetadataFiles(process_metadata);
|
||||||
|
|
||||||
size_t objects_in_database = metadata.parsed_tables.size() - prev_tables_count;
|
size_t objects_in_database = metadata.parsed_tables.size() - prev_tables_count;
|
||||||
size_t dictionaries_in_database = metadata.total_dictionaries - prev_total_dictionaries;
|
size_t dictionaries_in_database = metadata.total_dictionaries - prev_total_dictionaries;
|
||||||
|
Loading…
Reference in New Issue
Block a user