mirror of
https://github.com/ClickHouse/ClickHouse.git
synced 2024-12-17 11:52:27 +00:00
70d1adfe4b
* save format string for NetException * format exceptions * format exceptions 2 * format exceptions 3 * format exceptions 4 * format exceptions 5 * format exceptions 6 * fix * format exceptions 7 * format exceptions 8 * Update MergeTreeIndexGin.cpp * Update AggregateFunctionMap.cpp * Update AggregateFunctionMap.cpp * fix
41 lines
1.1 KiB
C++
41 lines
1.1 KiB
C++
#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;
|
|
}
|
|
|
|
void DiskFactory::registerDiskType(const String & disk_type, DB::DiskFactory::Creator creator)
|
|
{
|
|
if (!registry.emplace(disk_type, creator).second)
|
|
throw Exception(ErrorCodes::LOGICAL_ERROR, "DiskFactory: the disk type '{}' is not unique", disk_type);
|
|
}
|
|
|
|
DiskPtr DiskFactory::create(
|
|
const String & name,
|
|
const Poco::Util::AbstractConfiguration & config,
|
|
const String & config_prefix,
|
|
ContextPtr context,
|
|
const DisksMap & map) const
|
|
{
|
|
const auto disk_type = config.getString(config_prefix + ".type", "local");
|
|
|
|
const auto found = registry.find(disk_type);
|
|
if (found == registry.end())
|
|
throw Exception(ErrorCodes::UNKNOWN_ELEMENT_IN_CONFIG, "DiskFactory: the disk '{}' has unknown disk type: {}", name, disk_type);
|
|
|
|
const auto & disk_creator = found->second;
|
|
return disk_creator(name, config, config_prefix, context, map);
|
|
}
|
|
|
|
}
|