Commit Graph

22 Commits

Author SHA1 Message Date
Anton Popov
ae1fc94fb5 add unit test 2022-02-06 20:45:59 +00:00
Anton Popov
10b8684003 fix rare bug in reading of empty arrays 2022-02-06 20:45:59 +00:00
Azat Khuzhin
2cdc5b37e3 Do not try to read pass EOF (to workaround a bug in a kernel)
For unaligned offset pread() may return EINVAL even if the offset pass
EOF, although it should not, since otherwise there is no abiliity to
rely on read() == 0 is EOF (with pread() loop).

Here is a reproducer for the problem on 4.9.0-12-amd64:

    $ head -c27 /dev/urandom > /tmp/pread.issue
    $ xfs_io
    xfs_io> open -d /tmp/pread.issue
    xfs_io> pread 1000 4096
    pread: Invalid argument

And this is how it should work:

    xfs_io> pread 29 4096
    read 0/4096 bytes at offset 29

Note, here I use interactive mode since we had old xfs_io that does not
allow to execute multiple commands at once, and to avoid EMFILE issue

Here is some history of a patches that affects this behaviour in the
linux kernel:

- the issue had been introduced in
  torvalds/linux@9fe55eea7e v3.14
  ("Fix race when checking i_size on direct i/o read")
- an attempt to fix it had been made in
  torvalds/linux@74cedf9b6c v4.4
  ("direct-io: Fix negative return from dio read beyond eof")
- but this wasn't enough, since alignment check was earlier, so
  eventually fixed in
  torvalds/linux@41b21af388 v5.10
  ("direct-io: defer alignment check until after the EOF check")

Someone may ask why CI does not shows the issue, since:
- it had 4.19 kernel when CI was in yandex
- now it has 5.4 when CI is in AWS
Since both of those kernels does not have the last patch.

But, this bug requires the following conditions to met:
- index_granularity_bytes=0
- min_merge_bytes_to_use_direct_io=1
Which was not covered by CI yet.
2022-01-04 10:53:17 +03:00
Azat Khuzhin
b0f9112696 Do not allow zero-length reads
Since this may create pretty odd issues, since reading 0 bytes will
return 0, and some code may not be ready for this.

v0: add a check in ReadBuffer ctor
v2: Do not create empty ReadBuffer from BufferWithOwnMemory with empty size
v3:
- revert "Do not create empty ReadBuffer from BufferWithOwnMemory with empty size"
- Replace INVALID_SETTING_VALUE with LOGICAL_ERROR
- Move the check for empty buffer in ReadBuffer into reading because of MMapReadBufferFromFile
v4: replace with assert of internal_buffer.size()
v5: move assertion to implementations since there are exceptions for
    nested readers, like LimitReadBuffer and similar.
2021-10-27 22:25:03 +03:00
Denis Glazachev
ca7b69b0f3 Manipulate with -Wreserved-identifier only if HAS_RESERVED_IDENTIFIER has been detected 2021-10-03 17:42:36 +04:00
Sergei Semin
39929e52bd add ignore of -Wreserved-identifier into LineReader.cpp, ThreadFuzzer.cpp, ReadBufferFromFileDescriptor.cpp 2021-09-09 23:51:47 +03:00
Alexey Milovidov
8f57216180 Progress on development 2021-08-25 00:45:58 +03:00
Alexey Milovidov
91173b8934 Improve performance 2021-08-04 03:07:04 +03:00
Alexey Milovidov
1974ed9d5c Fix build 2021-07-28 02:59:56 +03:00
Alexey Milovidov
5c3f5cb35a Experiment with asynchronous readers 2021-07-26 03:34:36 +03:00
Alexey Milovidov
822cc0fec3 Lowered amount of syscalls in AsynchronousMetrics 2021-07-12 04:12:34 +03:00
Alexey Milovidov
e0effad4d1 Fix tiny issue 2021-07-12 03:33:13 +03:00
Alexey Milovidov
d3cdae1211 Fix build 2021-07-11 22:07:17 +03:00
Alexey Milovidov
2d02a3a45d Fix errors 2021-07-11 05:43:54 +03:00
Alexey Milovidov
29624436ff Return back O_DIRECT 2021-07-11 03:35:43 +03:00
Alexey Milovidov
935e0327a5 Development 2021-07-04 06:03:49 +03:00
kssenii
c25be65ebf Refactor progress bar, adjust progress indication for reading from file 2021-05-14 06:16:31 +00:00
kssenii
c33f358a9a Better way to track progress, display progress for ch-client 2021-04-28 19:12:28 +00:00
Ivan Lezhankin
8953fe1eb2 Fix seekable buffer 2021-02-06 19:30:46 +03:00
Alexander Kuzmenkov
efb09d7ff5 Cleanup for #12999. NFC. 2020-07-31 17:53:41 +03:00
Alexey Milovidov
5afe441324 Whitespaces 2020-07-13 03:45:42 +03:00
Ivan Lezhankin
06446b4f08 dbms/ → src/ 2020-04-03 18:14:31 +03:00