Bug 9805 - не поддерживает закачку больших файлов (>2 Gb)
Summary: не поддерживает закачку больших файлов (>2 Gb)
Status: CLOSED FIXED
Alias: None
Product: Sisyphus
Classification: Development
Component: mldonkey-server (show other bugs)
Version: unstable
Hardware: all Linux
: P2 major
Assignee: Aeliya Grevnyov
QA Contact: qa-sisyphus
URL:
Keywords:
Depends on: 10243
Blocks:
  Show dependency tree
 
Reported: 2006-07-24 11:13 MSD by Andrei Bulava
Modified: 2006-12-13 11:12 MSK (History)
2 users (show)

See Also:


Attachments

Note You need to log in before you can comment on or make changes to this bug.
Description Andrei Bulava 2006-07-24 11:13:12 MSD
Несмотря на "explicitly enable largefile support" в %changelog,
mldonkey-server-2.7.6-alt1 завершается с ошибкой "File size limit exceeded"
сразу после добавления, к примеру,
ed2k://|file|Cubase.SX.v3.1.1.944-H2O.with.ED.SX3.Video.Tutorials-DELiRiUM.DVDr.UNOX.iso|3627241472|880EF74CB6975D4A41892F4E8A6D621A|/

К сожалению, ocaml - слишком путаный для меня язык, особенно с части "клея"
между ocaml и c. Возможно, проблема не столько в mldonkey, сколько в
неправильной сборке ocaml? Других идей у меня нет...
Comment 1 Konstantin A Lepikhov (L.A. Kostis) 2006-10-04 01:03:33 MSD
Как появится новый ocaml в сизифе, можно сделать повторный подход к снаряду :)
Comment 2 Konstantin Pavlov 2006-11-06 18:47:09 MSK
Без нового мантейнера он там не появится.
Comment 3 Grigory Batalov 2006-11-16 21:27:00 MSK
Добавил -D_FILE_OFFSET_BITS=64 в specfile OCaml, пакет можно собрать из моего
репозитария на git.alt.

Что касается mldonkey, есть вот такая дискуссия:
http://mldonkey.sourceforge.net/forums/viewtopic.php?p=23518#23518

Я проверил, симптомы совпадают:

[pid 16197] read(17, "dllink ed2k://|file|Cubase.SX.v3"..., 16384) = 143
[pid 16197] write(17, "\33[46;1H\33[2K\n\33[2K\33[46;1H", 23) = 23
[pid 16197] open("temp/urn_ed2k_880EF74CB6975D4A41892F4E8A6D621A",
O_RDWR|O_CREAT, 0664) = 19
[pid 16197] fstat64(19, {st_mode=S_IFREG|0644, st_size=0, ...}) = 0
[pid 16197] _llseek(19, 3627241471, [3627241471], SEEK_SET) = 0
[pid 16197] write(19, "\0", 1)          = -1 EFBIG (File too large)
[pid 16197] --- SIGXFSZ (File size limit exceeded) @ 0 (0) ---

Насколько я знаю, большие файлы следует открывать с помощью open64() или
open(... | O_LARGEFILE ), здесь этого нет. После упомянутой пересборки OCaml
требуемый флаг появляется:

[pid  5042] read(17, "dllink ed2k://|file|Cubase.SX.v3"..., 16384) = 143
[pid  5042] write(17, "\33[46;1H\33[2K\n\33[2K\33[46;1H", 23) = 23
[pid  5042] open("temp/urn_ed2k_880EF74CB6975D4A41892F4E8A6D621A",
O_RDWR|O_CREAT|O_LARGEFILE, 0664) = 19
[pid  5042] fstat64(19, {st_mode=S_IFREG|0644, st_size=0, ...}) = 0
[pid  5042] _llseek(19, 3627241471, [3627241471], SEEK_SET) = 0
[pid  5042] write(19, "\0", 1)          = 1

Так что вариант рабочий.
Смутило, что в configure от mldonkey предусмотрен ключ --enable-largefile
(AC_SYS_LARGEFILE), однако никакого влияния он не оказывает:
...
checking for special C compiler options needed for large files... no
checking for _FILE_OFFSET_BITS value needed for large files... 64
checking for _LARGE_FILES value needed for large files... no
...
Ещё почитаю на эту тему, может, просто не понял.

Да, в mldonkey используется модуль LargeFile:
http://caml.inria.fr/pub/docs/manual-ocaml/libref/UnixLabels.LargeFile.html , но
он не содержит реализации open, так что и повлиять на способ открытия файла не
может. Так что моё мнение: нужно пересобрать OCaml в Сизиф с -D_FILE_OFFSET_BITS=64.

Прошу высказываться =).
Comment 4 Andrei Bulava 2006-11-17 14:18:05 MSK
(In reply to comment #3)
> Добавил -D_FILE_OFFSET_BITS=64 в specfile OCaml, пакет можно собрать из моего
> репозитария на git.alt.
> 
> Что касается mldonkey, есть вот такая дискуссия:
> http://mldonkey.sourceforge.net/forums/viewtopic.php?p=23518#23518

<skip />

> Так что вариант рабочий.

Отлично!

> Смутило, что в configure от mldonkey предусмотрен ключ --enable-largefile
> (AC_SYS_LARGEFILE), однако никакого влияния он не оказывает:
> ...
> checking for special C compiler options needed for large files... no
> checking for _FILE_OFFSET_BITS value needed for large files... 64
> checking for _LARGE_FILES value needed for large files... no
> ...
> Ещё почитаю на эту тему, может, просто не понял.

AFAIR, сложность с Large File Support в glibc (вообще говоря, в GNU/Linux) как
раз и состоит в том, что все участвующие стороны (библиотеки и программы) должны
быть собраны с LFS, а иначе происходит "откат" на безопасный вариант.

> Так что моё мнение: нужно пересобрать OCaml в Сизиф с -D_FILE_OFFSET_BITS=64.
> 
> Прошу высказываться =).

+1
Comment 5 Konstantin A Lepikhov (L.A. Kostis) 2006-12-09 12:30:11 MSK
че высказываться, собирать надо!
Comment 6 Konstantin A Lepikhov (L.A. Kostis) 2006-12-09 17:17:48 MSK
Кстати, после пересборки ocaml с модификациями bga@ и обновлением до 3.09.3,
пересборки lablgtk2 и mldonkey с новым ocaml, все прекрасно заработало (в т.ч. и
BT).

Насчет ED2K и больших файлов все гораздо интереснее - текущая реализация
протокола в mldonkey поддерживает файлы до 4Gb, есть патчи для поддержки до
256Gb, но они считаются нестабильными (см. http://mldonkey.sourceforge.net/EDK4GB).
Comment 7 Konstantin A Lepikhov (L.A. Kostis) 2006-12-12 00:41:34 MSK
Новая версия mldonkey, пересобранная с новым ocaml, отправлена в i/S (2.8.2-alt0.1).
Comment 8 Andrei Bulava 2006-12-13 11:12:07 MSK
Полностью скачать не пробовал, но, по крайней мере, ничего не падает мгновенно
после добавления в очередь файла > 2 Gb.

Спасибо!