MCPcopy Create free account
hub / github.com/ByConity/ByConity / nextImpl

Method nextImpl

src/IO/WriteBufferFromFileDescriptor.cpp:64–98  ·  view source on GitHub ↗

Source from the content-addressed store, hash-verified

62
63
64void WriteBufferFromFileDescriptor::nextImpl()
65{
66 if (!offset())
67 return;
68
69 Stopwatch watch;
70
71 if (throttler)
72 throttler->add(offset());
73
74 size_t bytes_written = 0;
75 while (bytes_written != offset())
76 {
77 ProfileEvents::increment(ProfileEvents::WriteBufferFromFileDescriptorWrite);
78
79 ssize_t res = 0;
80 {
81 CurrentMetrics::Increment metric_increment{CurrentMetrics::Write};
82 res = ::write(fd, working_buffer.begin() + bytes_written, offset() - bytes_written);
83 }
84
85 if ((-1 == res || 0 == res) && errno != EINTR)
86 {
87 ProfileEvents::increment(ProfileEvents::WriteBufferFromFileDescriptorWriteFailed);
88 throwFromErrnoWithPath("Cannot write to file " + getFileName(), getFileName(),
89 ErrorCodes::CANNOT_WRITE_TO_FILE_DESCRIPTOR);
90 }
91
92 if (res > 0)
93 bytes_written += res;
94 }
95
96 ProfileEvents::increment(ProfileEvents::DiskWriteElapsedMicroseconds, watch.elapsedMicroseconds());
97 ProfileEvents::increment(ProfileEvents::WriteBufferFromFileDescriptorWriteBytes, bytes_written);
98}
99
100
101/// Name or some description of file.

Callers

nothing calls this directly

Calls 6

throwFromErrnoWithPathFunction · 0.85
incrementFunction · 0.50
writeFunction · 0.50
addMethod · 0.45
beginMethod · 0.45
elapsedMicrosecondsMethod · 0.45

Tested by

no test coverage detected