From mboxrd@z Thu Jan 1 00:00:00 1970 Return-Path: Date: Thu, 11 Jul 2019 22:23:46 +0300 (MSK) From: Ivan Zakharyaschev To: devel@lists.altlinux.org, community@lists.altlinux.org In-Reply-To: Message-ID: References: User-Agent: Alpine 2.20 (LFD 67 2015-01-07) MIME-Version: 1.0 Content-Type: multipart/mixed; BOUNDARY="1807885841-2009235102-1562873026=:15309" Cc: sotor@altlinux.org Subject: Re: [devel] I: rpm in p8 had problems reading *.rpm files X-BeenThere: devel@lists.altlinux.org X-Mailman-Version: 2.1.12 Precedence: list Reply-To: ALT Linux Team development discussions List-Id: ALT Linux Team development discussions List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , X-List-Received-Date: Thu, 11 Jul 2019 19:23:46 -0000 Archived-At: List-Archive: List-Post: This message is in MIME format. The first part should be readable text, while the remaining parts are likely unreadable without MIME-aware tools. --1807885841-2009235102-1562873026=:15309 Content-Type: text/plain; charset=KOI8-R Content-Transfer-Encoding: 8BIT On Thu, 11 Jul 2019, Ivan Zakharyaschev wrote: > Из отдела тестирования сообщили, что в Workstation 8.2 i586 наблюдаются > проблемы при чтении пакетов из репозитория p8, смонтированного по NFS. > > # /usr/lib/rpm/rpmq -q -i --list --verbose --package -q --qf "[* %{CHANGELOGNAME}\n %{CHANGELOGTEXT}\n]" /mnt/repo-nhcR/pub/distributions/ALTLinux/p8/branch/files/i586/RPMS/sssd-ad-1.16.4-alt1.M80P.1.i586.rpm > ошибка: ошибка запроса /mnt/repo-nhcR/pub/distributions/ALTLinux/p8/branch/files/i586/RPMS/sssd-ad-1.16.4-alt1.M80P.1.i586.rpm > > С обновлённым rpm-4.0.4-alt101.M80P.5.5 такой проблемы нет. > > Я примерно понял, какой код там выполняется, а какой с обновлённым rpm, > когда ошибки нет. (Они идут разным путём.) Проверил у себя на i586 обе версии rpm -- из Workstation 8.2 и обновлённую: rpm-4.0.4-alt101.M80P.1 и rpm-4.0.4-alt101.M80P.5.5. Разницы по strace в этом месте не видно. Проблема не воспроизводится. Как можно объяснить, я тоже не знаю. (То, что я написал, тоже не так -- исходя из вывода strace.) Странно, что у них она воспроизводится стабильно. > Когда ошибка случается, вывод strace -fy -s1000 перед этим такой: > > open("/mnt/repo-nhcR/pub/distributions/ALTLinux/p8/branch/files/i586/RPMS/sssd-ad-1.16.4-alt1.M80P.1.i586.rpm", > O_RDONLY) = > 3 > fcntl64(3, > F_SETFD, FD_CLOEXEC) = 0 > gettimeofday({tv_sec=1562834023, tv_usec=224425}, NULL) = 0 > fstat64(3, > {st_mode=S_IFREG|0644, st_size=122129, ...}) = 0 > _newselect(4, > [3], > NULL, NULL, {tv_sec=1, tv_usec=0}) = 1 (in [3], left {tv_sec=0, > tv_usec=999999}) > gettimeofday({tv_sec=1562834023, tv_usec=224634}, NULL) = 0 > read(3, > "\355\253\356\333\3\0\0\0\0\1sssd-ad-1.16.4-alt1.M80P.1\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\1\0\5\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0", > 96) = 96 > gettimeofday({tv_sec=1562834023, tv_usec=224766}, NULL) = 0 > _newselect(4, > [3], > NULL, NULL, {tv_sec=1, tv_usec=0}) = 1 (in [3], left {tv_sec=0, > tv_usec=999999}) > gettimeofday({tv_sec=1562834023, tv_usec=224870}, NULL) = 0 > read(3, > "\216\255\350\1\0\0\0\0\0\0\0\5\0\0\0\230", 16) = 16 > gettimeofday({tv_sec=1562834023, tv_usec=224953}, NULL) = 0 > _newselect(4, > [3], > NULL, NULL, {tv_sec=1, tv_usec=0}) = 1 (in [3], left {tv_sec=0, > tv_usec=999999}) > gettimeofday({tv_sec=1562834023, tv_usec=225069}, NULL) = 0 > read(3, > "\0\0\0>\0\0\0\7\0\0\0\210\0\0\0\20\0\0\1\r\0\0\0\6\0\0\0\0\0\0\0\1\0\0\3\350\0\0\0\4\0\0\0,\0\0\0\1\0\0\3\354\0\0\0\7\0\0\0000\0\0\0\20\0\0\3\355\0\0\0\7\0\0\0@\0\0\0H7ce3371ed3cb8e8bcea5a341a029ac364173f7ab\0\0\0\0\0\1\333\271\271v\nq\244\1\271&VY\242\257RH\260\220\210F\4\0\21\2\0\6\5\2]\33\225b\0\n\t\20\334\236\225\302#\21\24\263GF\0\237`,L\375\226t\370s\35\206\202\"\265k\364s:\206\v\31\0\240\256VMa\356w*M\352\36\374!Z^J\277\16\356\256?\0\0\0>\0\0\0\7\377\377\377\260\0\0\0\20", > 232) = 232 > gettimeofday({tv_sec=1562834023, tv_usec=225146}, NULL) = 0 > fstat64(3, > {st_mode=S_IFREG|0644, st_size=122129, ...}) = 0 > gettimeofday({tv_sec=1562834023, tv_usec=225226}, NULL) = 0 > close(3) > = 0 > > Когда ошибки нет, аналогичный кусок у меня (правда, на x86_64) такой: > Обращает на себя внимание наличие при работе старого rpm вызовов > gettimeofday(), а в обновлённом -- просто select(). Это свидетельствует, > что в обновлённом rpm используется набор функций для работы с файлами > "ufdio", а в старом -- "fdio". Наверное, "fdio" глючный. Вероятно, выбор в Вот как это выглядит у меня с rpm из workstation 8.2 на i586 3016 open("/ALT/p8/files/i586/RPMS/sssd-ad-1.16.4-alt1.M80P.1.i586.rpm", O_RDONLY) = 3 3016 fcntl64(3, F_SETFD, FD_CLOEXEC) = 0 3016 gettimeofday({1562871385, 345814}, NULL) = 0 3016 fstat64(3, {st_mode=S_IFREG|0644, st_size=122129, ...}) = 0 3016 fadvise64(3, 0, 0, POSIX_FADV_RANDOM) = 0 3016 _newselect(4, [3], NULL, NULL, {1, 0}) = 1 (in [3], left {0, 999998}) 3016 gettimeofday({1562871385, 345980}, NULL) = 0 3016 read(3, "\355\253\356\333\3\0\0\0\0\1sssd-ad-1.16.4-alt1.M8"..., 96) = 96 3016 gettimeofday({1562871385, 346037}, NULL) = 0 3016 _newselect(4, [3], NULL, NULL, {1, 0}) = 1 (in [3], left {0, 999998}) 3016 gettimeofday({1562871385, 346102}, NULL) = 0 3016 read(3, "\216\255\350\1\0\0\0\0\0\0\0\5\0\0\0\230", 16) = 16 3016 gettimeofday({1562871385, 346155}, NULL) = 0 3016 _newselect(4, [3], NULL, NULL, {1, 0}) = 1 (in [3], left {0, 999999}) 3016 gettimeofday({1562871385, 346223}, NULL) = 0 3016 read(3, "\0\0\0>\0\0\0\7\0\0\0\210\0\0\0\20\0\0\1\r\0\0\0\6\0\0\0\0\0\0\0\1"..., 232) = 232 3016 gettimeofday({1562871385, 346276}, NULL) = 0 3016 fstat64(3, {st_mode=S_IFREG|0644, st_size=122129, ...}) = 0 3016 open("/usr/share/locale/ru_RU.UTF-8/LC_MESSAGES/rpm.mo", O_RDONLY) = -1 ENOENT (No such file or directory) 3016 open("/usr/share/locale/ru_RU.utf8/LC_MESSAGES/rpm.mo", O_RDONLY) = -1 ENOENT (No such file or directory) 3016 open("/usr/share/locale/ru_RU/LC_MESSAGES/rpm.mo", O_RDONLY) = -1 ENOENT (No such file or directory) 3016 open("/usr/share/locale/ru.UTF-8/LC_MESSAGES/rpm.mo", O_RDONLY) = -1 ENOENT (No such file or directory) 3016 open("/usr/share/locale/ru.utf8/LC_MESSAGES/rpm.mo", O_RDONLY) = -1 ENOENT (No such file or directory) 3016 open("/usr/share/locale/ru/LC_MESSAGES/rpm.mo", O_RDONLY) = 4 3016 fstat64(4, {st_mode=S_IFREG|0644, st_size=94761, ...}) = 0 3016 mmap2(NULL, 94761, PROT_READ, MAP_PRIVATE, 4, 0) = 0xb7028000 3016 close(4) = 0 3016 _newselect(4, [3], NULL, NULL, {1, 0}) = 1 (in [3], left {0, 999998}) 3016 gettimeofday({1562871385, 346750}, NULL) = 0 3016 read(3, "\216\255\350\1\0\0\0\0\0\0\0004\0\0*`", 16) = 16 3016 gettimeofday({1562871385, 346803}, NULL) = 0 3016 _newselect(4, [3], NULL, NULL, {1, 0}) = 1 (in [3], left {0, 999998}) 3016 gettimeofday({1562871385, 346870}, NULL) = 0 3016 read(3, "\0\0\0?\0\0\0\7\0\0*P\0\0\0\20\0\0\0d\0\0\0\10\0\0\0\0\0\0\0\1"..., 11680) = 11680 3016 gettimeofday({1562871385, 346930}, NULL) = 0 3016 fadvise64(3, 0, 0, POSIX_FADV_NORMAL) = 0 3016 sysinfo({uptime=2981, loads=[3584, 1920, 320], totalram=2118459392, freeram=1635254272, sharedram=4005888, bufferram=32104448, totalswap=2117070848, freeswap=2117070848, procs=208, totalhigh=1216208896, freehigh=958918656, mem_unit=1}) = 0 3016 gettimeofday({1562871385, 347074}, NULL) = 0 3016 close(3) = 0 И вот как с обновлённым rpm: 3435 open("/ALT/p8/files/i586/RPMS/sssd-ad-1.16.4-alt1.M80P.1.i586.rpm", O_RDONLY|O_LARGEFILE) = 3 3435 fcntl64(3, F_SETFD, FD_CLOEXEC) = 0 3435 gettimeofday({1562871641, 593028}, NULL) = 0 3435 fstat64(3, {st_mode=S_IFREG|0644, st_size=122129, ...}) = 0 3435 fadvise64_64(3, 0, 0, POSIX_FADV_RANDOM) = 0 3435 _newselect(4, [3], NULL, NULL, {1, 0}) = 1 (in [3], left {0, 999998}) 3435 gettimeofday({1562871641, 593193}, NULL) = 0 3435 read(3, "\355\253\356\333\3\0\0\0\0\1sssd-ad-1.16.4-alt1.M8"..., 96) = 96 3435 gettimeofday({1562871641, 593272}, NULL) = 0 3435 _newselect(4, [3], NULL, NULL, {1, 0}) = 1 (in [3], left {0, 999999}) 3435 gettimeofday({1562871641, 593327}, NULL) = 0 3435 read(3, "\216\255\350\1\0\0\0\0\0\0\0\5\0\0\0\230", 16) = 16 3435 gettimeofday({1562871641, 593369}, NULL) = 0 3435 _newselect(4, [3], NULL, NULL, {1, 0}) = 1 (in [3], left {0, 999999}) 3435 gettimeofday({1562871641, 593423}, NULL) = 0 3435 read(3, "\0\0\0>\0\0\0\7\0\0\0\210\0\0\0\20\0\0\1\r\0\0\0\6\0\0\0\0\0\0\0\1"..., 232) = 232 3435 gettimeofday({1562871641, 593466}, NULL) = 0 3435 fstat64(3, {st_mode=S_IFREG|0644, st_size=122129, ...}) = 0 3435 open("/usr/share/locale/ru_RU.UTF-8/LC_MESSAGES/rpm.mo", O_RDONLY) = -1 ENOENT (No such file or directory) 3435 open("/usr/share/locale/ru_RU.utf8/LC_MESSAGES/rpm.mo", O_RDONLY) = -1 ENOENT (No such file or directory) 3435 open("/usr/share/locale/ru_RU/LC_MESSAGES/rpm.mo", O_RDONLY) = -1 ENOENT (No such file or directory) 3435 open("/usr/share/locale/ru.UTF-8/LC_MESSAGES/rpm.mo", O_RDONLY) = -1 ENOENT (No such file or directory) 3435 open("/usr/share/locale/ru.utf8/LC_MESSAGES/rpm.mo", O_RDONLY) = -1 ENOENT (No such file or directory) 3435 open("/usr/share/locale/ru/LC_MESSAGES/rpm.mo", O_RDONLY) = 4 3435 fstat64(4, {st_mode=S_IFREG|0644, st_size=94761, ...}) = 0 3435 mmap2(NULL, 94761, PROT_READ, MAP_PRIVATE, 4, 0) = 0xb706a000 3435 close(4) = 0 3435 _newselect(4, [3], NULL, NULL, {1, 0}) = 1 (in [3], left {0, 999999}) 3435 gettimeofday({1562871641, 593858}, NULL) = 0 3435 read(3, "\216\255\350\1\0\0\0\0\0\0\0004\0\0*`", 16) = 16 3435 gettimeofday({1562871641, 593900}, NULL) = 0 3435 _newselect(4, [3], NULL, NULL, {1, 0}) = 1 (in [3], left {0, 999999}) 3435 gettimeofday({1562871641, 593964}, NULL) = 0 3435 read(3, "\0\0\0?\0\0\0\7\0\0*P\0\0\0\20\0\0\0d\0\0\0\10\0\0\0\0\0\0\0\1"..., 11680) = 11680 3435 gettimeofday({1562871641, 594014}, NULL) = 0 3435 fadvise64_64(3, 0, 0, POSIX_FADV_NORMAL) = 0 3435 sysinfo({uptime=3237, loads=[21632, 11008, 3840], totalram=2118459392, freeram=1432961024, sharedram=4022272, bufferram=32686080, totalswap=2117070848, freeswap=2117070848, procs=208, totalhigh=1216208896, freehigh=840957952, mem_unit=1}) = 0 3435 gettimeofday({1562871641, 594145}, NULL) = 0 3435 close(3) = 0 Разницы в том, что возвращает read, нет (и существенной разницы в результатах прочих вызовов). Во всех трёх случаях. У них, когда ошибка случается, времени на последний read уходит побольше, чем у меня. Почему это сказаывается на поведении rpm, непонятно. > пользу "ufdio" поменялся в серии патчей Алексея Турбина at@ про Large File > Support. > > Вряд ли пакеты из репозитория как-то плохо сформированы, да этот пример > вроде и не очень большого файла пакета. > > Так что могу посоветовать всем пользователям p8 обновить сначала rpm, > чтобы избегать таких проблем. > > -- > Best regards, > Ivan --1807885841-2009235102-1562873026=:15309--