<?xml version="1.0" encoding="UTF-8" ?>

<bugzilla version="5.2"
          urlbase="https://bugzilla.altlinux.org/"
          
          maintainer="jenya@basealt.ru"
>

    <bug>
          <bug_id>32805</bug_id>
          
          <creation_ts>2016-11-24 22:00:20 +0300</creation_ts>
          <short_desc>i586: fts_read: Value too large for defined data type</short_desc>
          <delta_ts>2017-11-08 08:28:25 +0300</delta_ts>
          <reporter_accessible>1</reporter_accessible>
          <cclist_accessible>1</cclist_accessible>
          <classification_id>4</classification_id>
          <classification>Development</classification>
          <product>Sisyphus</product>
          <component>osec</component>
          <version>unstable</version>
          <rep_platform>all</rep_platform>
          <op_sys>Linux</op_sys>
          <bug_status>CLOSED</bug_status>
          <resolution>FIXED</resolution>
          
          
          <bug_file_loc></bug_file_loc>
          <status_whiteboard></status_whiteboard>
          <keywords></keywords>
          <priority>P3</priority>
          <bug_severity>normal</bug_severity>
          <target_milestone>---</target_milestone>
          
          
          <everconfirmed>1</everconfirmed>
          <reporter name="Sergey Y. Afonin">asy</reporter>
          <assigned_to name="Alexey Gladkov">legion</assigned_to>
          <cc>glebfm</cc>
    
    <cc>legion</cc>
          
          <qa_contact>qa-sisyphus</qa_contact>

      

      

      

          <comment_sort_order>oldest_to_newest</comment_sort_order>  
          <long_desc isprivate="0" >
    <commentid>160193</commentid>
    <comment_count>0</comment_count>
    <who name="Sergey Y. Afonin">asy</who>
    <bug_when>2016-11-24 22:00:20 +0300</bug_when>
    <thetext>При испытаниях 1.2.7 наткнулся на

osec: /foo/foo.zip: fts_read: Value too large for defined data type
Program (/usr/bin/osec) exited abnormally, exit code = 1

Объём файла, конечно, знатный: 2540425259.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>160204</commentid>
    <comment_count>1</comment_count>
    <who name="Sergey Y. Afonin">asy</who>
    <bug_when>2016-11-25 00:20:30 +0300</bug_when>
    <thetext>/foo/foo.zip в exclude.conf не спасает. Обработка файла раньше происходит, получается, чем exclude работает ?</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>160216</commentid>
    <comment_count>2</comment_count>
    <who name="Alexey Gladkov">legion</who>
    <bug_when>2016-11-25 13:11:46 +0300</bug_when>
    <thetext>$ dd if=/dev/zero of=/tmp/5/foo bs=1024 count=5000000
5000000+0 записей получено
5000000+0 записей отправлено
 скопировано 5120000000 байт (5,1 GB), 95,1987 c, 53,8 MB/c

$ ./osec -D /tmp/osec -R /tmp/5/
Init database for /tmp/5 ...
/tmp/5	stat	new	 uid=legion gid=legion mode=40755 inode=14814011
/tmp/5/foo	checksum	new	 checksum=4f42574db865484f66b08f38c0ee3ed145f1d445
/tmp/5/foo	stat	new	 uid=legion gid=legion mode=100644 inode=14821585

И повторный

$ ./osec -D /tmp/osec -R /tmp/5/
Processing /tmp/5 ...</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>160217</commentid>
    <comment_count>3</comment_count>
    <who name="Alexey Gladkov">legion</who>
    <bug_when>2016-11-25 13:12:27 +0300</bug_when>
    <thetext>У меня не воспроизводится. Как воспроизвести ?</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>160218</commentid>
    <comment_count>4</comment_count>
    <who name="Alexey Gladkov">legion</who>
    <bug_when>2016-11-25 13:17:21 +0300</bug_when>
    <thetext>(В ответ на комментарий №1)
&gt; /foo/foo.zip в exclude.conf не спасает. Обработка файла раньше происходит,
&gt; получается, чем exclude работает ?

На каталоги первого уровня exclude до процесса создания базы. На файлы/каталоги которые попадают в определённую базу exclude действует после fts_read.

Вы собирали osec сами ?</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>160223</commentid>
    <comment_count>5</comment_count>
    <who name="Sergey Y. Afonin">asy</who>
    <bug_when>2016-11-25 16:16:06 +0300</bug_when>
    <thetext>(In reply to comment #4)

&gt; На каталоги первого уровня exclude до процесса создания базы.
&gt; На файлы/каталоги которые попадают в определённую базу exclude
&gt; действует после fts_read.

Понятно. Тогда я зря не указал точнее. Это второй уровень: /home/user/foo.zip. И, теоретически, такое может и глубже оказаться.

&gt; Вы собирали osec сами ?

Да. А вот как воспроизвести... Попробую в разных вариантах. Кстати, вот что может быть существенно. Это в OpenVZ контейнере (но failcnt все по нулям правда) и i586.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>160224</commentid>
    <comment_count>6</comment_count>
    <who name="Alexey Gladkov">legion</who>
    <bug_when>2016-11-25 16:36:00 +0300</bug_when>
    <thetext>(В ответ на комментарий №5)
&gt; Понятно. Тогда я зря не указал точнее. Это второй уровень: /home/user/foo.zip.
&gt; И, теоретически, такое может и глубже оказаться.

Тогда exclude будет работать после fts_read.

&gt; &gt; Вы собирали osec сами ?
&gt; 
&gt; Да. А вот как воспроизвести... Попробую в разных вариантах. Кстати, вот что
&gt; может быть существенно. Это в OpenVZ контейнере (но failcnt все по нулям
&gt; правда) и i586.

Такое ощущение, что вам не хватает AC_SYS_LARGEFILE.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>160229</commentid>
    <comment_count>7</comment_count>
    <who name="Sergey Y. Afonin">asy</who>
    <bug_when>2016-11-25 17:02:47 +0300</bug_when>
    <thetext>(In reply to comment #6)

&gt; &gt; И, теоретически, такое может и глубже оказаться.
&gt; 
&gt; Тогда exclude будет работать после fts_read.

А на сколько сложно сделать, чтобы было до ? С этим архивом частный случай, но хотелось бы, чтобы работало с вариантом

/var/www/vhosts/*/log
/var/www/vhosts/*/log/*</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>160234</commentid>
    <comment_count>8</comment_count>
    <who name="Alexey Gladkov">legion</who>
    <bug_when>2016-11-25 22:20:10 +0300</bug_when>
    <thetext>(В ответ на комментарий №7)
&gt; А на сколько сложно сделать, чтобы было до ?

Так можно сделать только если реализовывать обход дерева руками. Это глобальное переписывание кода и скорее всего будет потеря в скорости.

&gt; С этим архивом частный случай, но хотелось бы, чтобы работало с вариантом
&gt; 
&gt; /var/www/vhosts/*/log
&gt; /var/www/vhosts/*/log/*

Я не очень понял.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>160241</commentid>
    <comment_count>9</comment_count>
    <who name="Sergey Y. Afonin">asy</who>
    <bug_when>2016-11-26 13:41:30 +0300</bug_when>
    <thetext>(In reply to comment #8)

&gt; &gt; С этим архивом частный случай, но хотелось бы, чтобы работало с вариантом
&gt; &gt; 
&gt; &gt; /var/www/vhosts/*/log
&gt; &gt; /var/www/vhosts/*/log/*
&gt; 
&gt; Я не очень понял.

В смысле, чтобы быстро работало, слово не дописал. Исходя из #4 я так понял, что логи обсчитываются, раз они глубже первого уровня, а это время. Ещё может быть вариант с кэшами, и т.п.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>160243</commentid>
    <comment_count>10</comment_count>
    <who name="Alexey Gladkov">legion</who>
    <bug_when>2016-11-26 15:14:31 +0300</bug_when>
    <thetext>(В ответ на комментарий №9)
&gt; В смысле, чтобы быстро работало, слово не дописал. Исходя из #4 я так понял,
&gt; что логи обсчитываются, раз они глубже первого уровня, а это время. Ещё может
&gt; быть вариант с кэшами, и т.п.

Вы не знаете что такое fts(3). Это не чтение файлов, а обход дерева каталогов.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>160268</commentid>
    <comment_count>11</comment_count>
    <who name="Sergey Y. Afonin">asy</who>
    <bug_when>2016-11-28 18:46:21 +0300</bug_when>
    <thetext>(In reply to comment #2)

&gt; $ dd if=/dev/zero of=/tmp/5/foo bs=1024 count=5000000
&gt; 5000000+0 записей получено
&gt; 5000000+0 записей отправлено
&gt;  скопировано 5120000000 байт (5,1 GB), 95,1987 c, 53,8 MB/c
&gt; 
&gt; $ ./osec -D /tmp/osec -R /tmp/5/

Уменя на таком файле воспроизводится на i586. На x86_64 работает нормально.

(In reply to comment #6)

&gt; Такое ощущение, что вам не хватает AC_SYS_LARGEFILE.

Вероятно. Просто добавление AC_SYS_LARGEFILE в configure.ac не помогает, хотя при сборке появляется:

checking for _FILE_OFFSET_BITS value needed for large files... 64

&quot;#define _FILE_OFFSET_BITS 64&quot; должен как-то в коде учитываться ?</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>160270</commentid>
    <comment_count>12</comment_count>
    <who name="Sergey Y. Afonin">asy</who>
    <bug_when>2016-11-28 18:48:49 +0300</bug_when>
    <thetext>(In reply to comment #10)

&gt; Вы не знаете что такое fts(3). Это не чтение файлов, а обход дерева каталогов.

Не знаю, но я не про это, наверное. На этот файл тратится время на обсчёт контрольной суммы при том, что он попадает в паттерн исключений. Кстати, может отдельный фичереквест повесить на эту тему ? А там уж как пойдёт.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>160271</commentid>
    <comment_count>13</comment_count>
    <who name="Alexey Gladkov">legion</who>
    <bug_when>2016-11-28 19:42:02 +0300</bug_when>
    <thetext>&gt; Уменя на таком файле воспроизводится на i586. На x86_64 работает нормально.

Какая у вас версия glibc ? до 2.23 или после.

$ readelf -sW /lib64/libc.so.6 | grep fts64
   323: 00000000000df000   36 FUNC WEAK DEFAULT 13 fts64_set@@GLIBC_2.23
   343: 00000000000df030  321 FUNC WEAK DEFAULT 13 fts64_children@@GLIBC_2.23
   559: 00000000000de670  823 FUNC WEAK DEFAULT 13 fts64_open@@GLIBC_2.23
  2066: 00000000000deaa0 1368 FUNC WEAK DEFAULT 13 fts64_read@@GLIBC_2.23
  2248: 00000000000de9b0  237 FUNC WEAK DEFAULT 13 fts64_close@@GLIBC_2.23

&gt; Не знаю, но я не про это, наверное. На этот файл тратится время на обсчёт
&gt; контрольной суммы при том, что он попадает в паттерн исключений.

fts это рекурсивный обход дерева. В этот момент не происходит чтения самого
файла. Оно происходет позже, когда exclude уже применился. Так что единственные
лишние операции будут stat на исключённые файлы.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>160280</commentid>
    <comment_count>14</comment_count>
    <who name="Sergey Y. Afonin">asy</who>
    <bug_when>2016-11-29 00:25:24 +0300</bug_when>
    <thetext>(In reply to comment #13)

&gt; &gt; Уменя на таком файле воспроизводится на i586. На x86_64 работает нормально.
&gt; 
&gt; Какая у вас версия glibc ? до 2.23 или после.

glibc-core-2.23-alt3

Собственно, я могу доступ дать в OVZ-контейнер i586, где всё это воспроизводится, если i586 под руками нет.

&gt; Так что единственные лишние операции будут stat на исключённые файлы.

Понятно.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>160292</commentid>
    <comment_count>15</comment_count>
    <who name="Sergey Y. Afonin">asy</who>
    <bug_when>2016-11-29 12:39:04 +0300</bug_when>
    <thetext>(In reply to comment #14)

&gt; &gt; Какая у вас версия glibc ? до 2.23 или после.
&gt; 
&gt; glibc-core-2.23-alt3

Это в p8 и текущем Сизифе сейчас. Пересборка в i586 p7 с glibc-2.17-alt8.M70P.1 даёт тот же самый эффект.

Я правильно понимаю, что проблема в строке &quot;while ((p = fts_read(t)))&quot; в osec.c ? А раз p определена как FTSENT из fts.h, то следы проблемы ведут в glibc, и, похоже, там и остаются, так как bits/stat.h (struct stat, используящаяся в FTSENT) тоже из glibc.

Глядя на (bits/stat.h)

#if defined __x86_64__ || !defined __USE_FILE_OFFSET64
    __off_t st_size;                    /* Size of file, in bytes.  */
#else

Создаётся впечатление, что AC_SYS_LARGEFILE должно быть достаточно. Ладно, но если проблемы в glibc, то как iso многогигабайтные на флешки и DVD пишутся ?.. Да и без AC_SYS_LARGEFILE предполагается off64_t. 

Непонятно, на чём должен баг висеть.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>160295</commentid>
    <comment_count>16</comment_count>
    <who name="Sergey Y. Afonin">asy</who>
    <bug_when>2016-11-29 14:13:49 +0300</bug_when>
    <thetext>В osec.c config.h инклудится после fts.h, потому AC_SYS_LARGEFILE на него не действует. Только лучше от понимания этого не стало. После переноса config.h до fts.h сборке вылезло:

/usr/include/fts.h:41:3: error: #error &quot;&lt;fts.h&gt; cannot be used with -D_FILE_OFFSET_BITS==64&quot;

bin/du то как работает тогда ? Пишут, что там тоже fts_read используется...</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>160297</commentid>
    <comment_count>17</comment_count>
    <who name="Sergey Y. Afonin">asy</who>
    <bug_when>2016-11-29 14:46:42 +0300</bug_when>
    <thetext>(In reply to comment #16)

&gt; bin/du то как работает тогда ? Пишут, что там тоже fts_read используется...

А du использует не fts.h из glibc, а fts_.h из gnulib. И там нет 

#ifdef __USE_FILE_OFFSET64
# error &quot;&lt;fts.h&gt; cannot be used with -D_FILE_OFFSET_BITS==64&quot;
#endif</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>160298</commentid>
    <comment_count>18</comment_count>
    <who name="Gleb F-Malinovskiy">glebfm</who>
    <bug_when>2016-11-29 14:58:29 +0300</bug_when>
    <thetext>(В ответ на комментарий №14)
&gt; glibc-core-2.23-alt3

(В ответ на комментарий №16)
&gt; fts.h сборке вылезло:
&gt; 
&gt; /usr/include/fts.h:41:3: error: #error &quot;&lt;fts.h&gt; cannot be used with
&gt; -D_FILE_OFFSET_BITS==64&quot;

$ grep &apos;cannot be used with&apos; /usr/include/fts.h
$ rpm -qf /usr/include/fts.h
glibc-devel-2.23-alt3.x86_64

Не уверен, что так бывает.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>160301</commentid>
    <comment_count>19</comment_count>
    <who name="Sergey Y. Afonin">asy</who>
    <bug_when>2016-11-29 15:43:02 +0300</bug_when>
    <thetext>(In reply to comment #18)

&gt; Не уверен, что так бывает.

Бывает в glibc-devel-2.17-alt8.M70P.1. На p7 разбор заканчивал...

И чудо случилось. :-) В Сизифе на i586 работает.

Правда, в Сизифе AC_SYS_LARGEFILE не сработал почему-то:
checking for _FILE_OFFSET_BITS value needed for large files... no

Зато сработал %add_optflags -D_FILE_OFFSET_BITS=64 в спеке.

В общем, если в p7 портировать, надо fts_.h из gnulib, а в p8 можно уже glibc обойтись.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>160307</commentid>
    <comment_count>20</comment_count>
    <who name="Sergey Y. Afonin">asy</who>
    <bug_when>2016-11-29 17:35:02 +0300</bug_when>
    <thetext>С AC_SYS_LARGEFILE что-то непонятное. Вчера же добавлялся _FILE_OFFSET_BITS в config.h. Сейчас ещё раз попробовал, добавился. Единственное предположение - консольки днём перепутал, где пробовал.

Но, всё равно, не сработало, хотя #include &quot;config.h&quot; на первом месте в osec.c, и #define _FILE_OFFSET_BITS 64 есть в config.h. Если из спека %add_optflags -D_FILE_OFFSET_BITS=64 убрать, то не работает. Но это же, по идее, одно и то же, что в config.h, что в параметре компилятора ?</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>160609</commentid>
    <comment_count>21</comment_count>
    <who name="Sergey Y. Afonin">asy</who>
    <bug_when>2016-12-09 09:12:28 +0300</bug_when>
    <thetext>На свежеобновлённом сизифе i586:

osec: /home/test/foo: fts_read: Value too large for defined data type
Program (/usr/bin/osec) exited abnormally, exit code = 1

И /etc/osec/exclude.conf: Not found, parameter EXCLUDE will be ignored

-mv -- etc/dirs.conf .%_datadir/pipe.conf etc/osec/
+mv -- etc/dirs.conf etc/exclude.conf .%_datadir/pipe.conf etc/osec/</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>160650</commentid>
    <comment_count>22</comment_count>
    <who name="Alexey Gladkov">legion</who>
    <bug_when>2016-12-10 19:27:18 +0300</bug_when>
    <thetext>(В ответ на комментарий №21)
&gt; На свежеобновлённом сизифе i586:
&gt; 
&gt; osec: /home/test/foo: fts_read: Value too large for defined data type
&gt; Program (/usr/bin/osec) exited abnormally, exit code = 1

В сизиф уехала сборка с _FILE_OFFSET_BITS=64

http://webery.altlinux.org/log/sisyphus/tested/174238/build/100/i586/log#L188
 
&gt; И /etc/osec/exclude.conf: Not found, parameter EXCLUDE will be ignored

$ rpm2cpio osec-cronjob-1.2.7-alt2.i586.rpm |cpio -t |grep exclude
./etc/osec/exclude.conf</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>160653</commentid>
    <comment_count>23</comment_count>
    <who name="Sergey Y. Afonin">asy</who>
    <bug_when>2016-12-10 22:17:35 +0300</bug_when>
    <thetext>(In reply to comment #22)

&gt; &gt; osec: /home/test/foo: fts_read: Value too large for defined data type
&gt; &gt; Program (/usr/bin/osec) exited abnormally, exit code = 1
&gt; 
&gt; В сизиф уехала сборка с _FILE_OFFSET_BITS=64

Взял из archive/done/_170/174238. Не работает. Вернул сборку с %add_optflags -D_FILE_OFFSET_BITS=64</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>160655</commentid>
    <comment_count>24</comment_count>
    <who name="Alexey Gladkov">legion</who>
    <bug_when>2016-12-11 01:40:48 +0300</bug_when>
    <thetext>(В ответ на комментарий №23)
&gt; Взял из archive/done/_170/174238. Не работает. Вернул сборку с %add_optflags
&gt; -D_FILE_OFFSET_BITS=64

Попробуйте пожалуйста osec-1.2.7-alt3 из задания #174267</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>160829</commentid>
    <comment_count>25</comment_count>
    <who name="Repository Robot">repository-robot</who>
    <bug_when>2016-12-15 23:49:05 +0300</bug_when>
    <thetext>osec-1.2.7-alt3 -&gt; sisyphus:

* Sat Dec 10 2016 Alexey Gladkov &lt;legion@altlinux&gt; 1.2.7-alt3
- Use _FILE_OFFSET_BITS=64 (ALT#32805).
- Add default value to identify parser error (ALT#28770).</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>160834</commentid>
    <comment_count>26</comment_count>
    <who name="Sergey Y. Afonin">asy</who>
    <bug_when>2016-12-16 08:51:16 +0300</bug_when>
    <thetext>Теперь работает.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>167050</commentid>
    <comment_count>27</comment_count>
    <who name="Sergey Y. Afonin">asy</who>
    <bug_when>2017-11-08 08:28:25 +0300</bug_when>
    <thetext>(In reply to comment #18)

&gt; &gt; Не уверен, что так бывает.
&gt; 
&gt; Бывает в glibc-devel-2.17-alt8.M70P.1. На p7 разбор заканчивал...

На всякий случай ссылка: Bug #34093</thetext>
  </long_desc>
      
      

    </bug>

</bugzilla>