Fix disk using the same path

This commit is contained in:
zhongyuankai 2022-01-23 16:07:44 +08:00
parent d1431fffd2
commit 040b71617c

View File

@ -29,6 +29,7 @@ namespace ErrorCodes
extern const int CANNOT_TRUNCATE_FILE; extern const int CANNOT_TRUNCATE_FILE;
extern const int CANNOT_UNLINK; extern const int CANNOT_UNLINK;
extern const int CANNOT_RMDIR; extern const int CANNOT_RMDIR;
extern const int BAD_ARGUMENTS;
} }
std::mutex DiskLocal::reservation_mutex; std::mutex DiskLocal::reservation_mutex;
@ -458,10 +459,16 @@ void registerDiskLocal(DiskFactory & factory)
const Poco::Util::AbstractConfiguration & config, const Poco::Util::AbstractConfiguration & config,
const String & config_prefix, const String & config_prefix,
ContextPtr context, ContextPtr context,
const DisksMap & /*map*/) -> DiskPtr { const DisksMap & map) -> DiskPtr {
String path; String path;
UInt64 keep_free_space_bytes; UInt64 keep_free_space_bytes;
loadDiskLocalConfig(name, config, config_prefix, context, path, keep_free_space_bytes); loadDiskLocalConfig(name, config, config_prefix, context, path, keep_free_space_bytes);
for (const auto & [disk_name, disk_ptr] : map)
{
if (path == disk_ptr->getPath())
throw Exception("Disk " + name + " and Disk " + disk_name + " cannot have the same path" + " (" + path + ")", ErrorCodes::BAD_ARGUMENTS);
}
return std::make_shared<DiskLocal>(name, path, keep_free_space_bytes); return std::make_shared<DiskLocal>(name, path, keep_free_space_bytes);
}; };
factory.registerDiskType("local", creator); factory.registerDiskType("local", creator);