ClickHouse/dbms/src/Storages/MergeTree/RemoteDiskSpaceMonitor.cpp

69 lines
1.3 KiB
C++
Raw Normal View History

2016-01-28 01:00:27 +00:00
#include <DB/Storages/MergeTree/RemoteDiskSpaceMonitor.h>
#include <DB/Storages/MergeTree/DiskSpaceMonitor.h>
2016-01-28 01:00:42 +00:00
#include <DB/Interpreters/Context.h>
2016-01-28 01:00:27 +00:00
#include <DB/IO/ReadBufferFromHTTP.h>
#include <DB/IO/WriteHelpers.h>
#include <DB/IO/ReadHelpers.h>
namespace DB
{
namespace ErrorCodes
{
extern const int ABORTED;
}
namespace RemoteDiskSpaceMonitor
{
namespace
{
std::string getEndpointId(const std::string & node_id)
{
return "RemoteDiskSpaceMonitor:" + node_id;
}
}
2016-01-28 01:00:42 +00:00
Service::Service(const Context & context_)
: context(context_)
2016-01-28 01:00:27 +00:00
{
}
std::string Service::getId(const std::string & node_id) const
{
return getEndpointId(node_id);
}
void Service::processQuery(const Poco::Net::HTMLForm & params, WriteBuffer & out)
{
if (is_cancelled)
throw Exception("RemoteDiskSpaceMonitor service terminated", ErrorCodes::ABORTED);
2016-01-28 01:00:42 +00:00
size_t free_space = DiskSpaceMonitor::getUnreservedFreeSpace(context.getPath());
2016-01-28 01:00:27 +00:00
writeBinary(free_space, out);
out.next();
}
2016-01-28 01:00:42 +00:00
size_t Client::getFreeSpace(const InterserverIOEndpointLocation & location) const
2016-01-28 01:00:27 +00:00
{
ReadBufferFromHTTP::Params params =
{
{"endpoint", getEndpointId(location.name) },
{"compress", "false"}
};
ReadBufferFromHTTP in(location.host, location.port, params);
size_t free_disk_space;
readBinary(free_disk_space, in);
assertEOF(in);
return free_disk_space;
}
}
}