mirror of
https://github.com/ClickHouse/ClickHouse.git
synced 2024-12-20 05:05:38 +00:00
Merge pull request #6853 from yandex/pipe-capacity-very-old-kernels
Returned support for very old Linux kernels (that lack of F_GETPIPE_SZ fcntl)
(cherry picked from commit 46e7b4f925
)
This commit is contained in:
parent
9f15ebf3fd
commit
da44d9fd9b
@ -49,15 +49,26 @@ TraceCollector::TraceCollector(std::shared_ptr<TraceLog> & trace_log_)
|
|||||||
#if !defined(__FreeBSD__)
|
#if !defined(__FreeBSD__)
|
||||||
/** Increase pipe size to avoid slowdown during fine-grained trace collection.
|
/** Increase pipe size to avoid slowdown during fine-grained trace collection.
|
||||||
*/
|
*/
|
||||||
constexpr int max_pipe_capacity_to_set = 1048576;
|
|
||||||
int pipe_size = fcntl(trace_pipe.fds_rw[1], F_GETPIPE_SZ);
|
int pipe_size = fcntl(trace_pipe.fds_rw[1], F_GETPIPE_SZ);
|
||||||
if (-1 == pipe_size)
|
if (-1 == pipe_size)
|
||||||
throwFromErrno("Cannot get pipe capacity", ErrorCodes::CANNOT_FCNTL);
|
{
|
||||||
for (errno = 0; errno != EPERM && pipe_size < max_pipe_capacity_to_set; pipe_size *= 2)
|
if (errno == EINVAL)
|
||||||
if (-1 == fcntl(trace_pipe.fds_rw[1], F_SETPIPE_SZ, pipe_size * 2) && errno != EPERM)
|
{
|
||||||
throwFromErrno("Cannot increase pipe capacity to " + toString(pipe_size * 2), ErrorCodes::CANNOT_FCNTL);
|
LOG_INFO(log, "Cannot get pipe capacity, " << errnoToString(ErrorCodes::CANNOT_FCNTL) << ". Very old Linux kernels have no support for this fcntl.");
|
||||||
|
/// It will work nevertheless.
|
||||||
|
}
|
||||||
|
else
|
||||||
|
throwFromErrno("Cannot get pipe capacity", ErrorCodes::CANNOT_FCNTL);
|
||||||
|
}
|
||||||
|
else
|
||||||
|
{
|
||||||
|
constexpr int max_pipe_capacity_to_set = 1048576;
|
||||||
|
for (errno = 0; errno != EPERM && pipe_size < max_pipe_capacity_to_set; pipe_size *= 2)
|
||||||
|
if (-1 == fcntl(trace_pipe.fds_rw[1], F_SETPIPE_SZ, pipe_size * 2) && errno != EPERM)
|
||||||
|
throwFromErrno("Cannot increase pipe capacity to " + toString(pipe_size * 2), ErrorCodes::CANNOT_FCNTL);
|
||||||
|
|
||||||
LOG_TRACE(log, "Pipe capacity is " << formatReadableSizeWithBinarySuffix(std::min(pipe_size, max_pipe_capacity_to_set)));
|
LOG_TRACE(log, "Pipe capacity is " << formatReadableSizeWithBinarySuffix(std::min(pipe_size, max_pipe_capacity_to_set)));
|
||||||
|
}
|
||||||
#endif
|
#endif
|
||||||
|
|
||||||
thread = ThreadFromGlobalPool(&TraceCollector::run, this);
|
thread = ThreadFromGlobalPool(&TraceCollector::run, this);
|
||||||
|
Loading…
Reference in New Issue
Block a user