ClickHouse/src/Disks/DiskFactory.cpp

Ignoring revisions in .git-blame-ignore-revs. Click here to bypass and see the normal blame view.

46 lines
1.2 KiB
C++
Raw Normal View History

2019-11-27 09:39:44 +00:00
#include "DiskFactory.h"
namespace DB
{
namespace ErrorCodes
{
extern const int LOGICAL_ERROR;
extern const int UNKNOWN_ELEMENT_IN_CONFIG;
}
DiskFactory & DiskFactory::instance()
{
static DiskFactory factory;
return factory;
}
2024-01-10 12:14:10 +00:00
void DiskFactory::registerDiskType(const String & disk_type, Creator creator)
2019-11-27 09:39:44 +00:00
{
if (!registry.emplace(disk_type, creator).second)
throw Exception(ErrorCodes::LOGICAL_ERROR, "DiskFactory: the disk type '{}' is not unique", disk_type);
2019-11-27 09:39:44 +00:00
}
DiskPtr DiskFactory::create(
2019-11-27 09:39:44 +00:00
const String & name,
const Poco::Util::AbstractConfiguration & config,
const String & config_prefix,
ContextPtr context,
2024-01-16 13:25:09 +00:00
const DisksMap & map,
bool attach,
bool custom_disk) const
2019-11-27 09:39:44 +00:00
{
const auto disk_type = config.getString(config_prefix + ".type", "local");
const auto found = registry.find(disk_type);
if (found == registry.end())
2024-01-10 12:14:10 +00:00
{
throw Exception(ErrorCodes::UNKNOWN_ELEMENT_IN_CONFIG,
"DiskFactory: the disk '{}' has unknown disk type: {}", name, disk_type);
}
2019-11-27 09:39:44 +00:00
const auto & disk_creator = found->second;
2024-01-16 13:25:09 +00:00
return disk_creator(name, config, config_prefix, context, map, attach, custom_disk);
2019-11-27 09:39:44 +00:00
}
}