diff options
author | 2006-06-18 16:57:09 +0000 | |
---|---|---|
committer | 2006-06-18 16:57:09 +0000 | |
commit | 6fa2e7d046096337d13e024fd043c2aae2c75581 (patch) | |
tree | 47991e44a3b7868c3736019abd75ae9febfcb955 /net-p2p | |
parent | Stable on ia64. (diff) | |
download | gentoo-2-6fa2e7d046096337d13e024fd043c2aae2c75581.tar.gz gentoo-2-6fa2e7d046096337d13e024fd043c2aae2c75581.tar.bz2 gentoo-2-6fa2e7d046096337d13e024fd043c2aae2c75581.zip |
Add patch which fixes a serious performance problem when MLDonkey downloads lots of new files or torrents with a lot (>100) subfiles, bug #136700
(Portage version: 2.1.1_pre1-r1)
Diffstat (limited to 'net-p2p')
-rw-r--r-- | net-p2p/mldonkey/ChangeLog | 9 | ||||
-rw-r--r-- | net-p2p/mldonkey/files/digest-mldonkey-2.7.6-r1 | 3 | ||||
-rw-r--r-- | net-p2p/mldonkey/files/mldonkey-2.7.6-magic.patch | 173 | ||||
-rw-r--r-- | net-p2p/mldonkey/mldonkey-2.7.6-r1.ebuild | 167 |
4 files changed, 351 insertions, 1 deletions
diff --git a/net-p2p/mldonkey/ChangeLog b/net-p2p/mldonkey/ChangeLog index 59ff78d9d709..30b2c75b7b99 100644 --- a/net-p2p/mldonkey/ChangeLog +++ b/net-p2p/mldonkey/ChangeLog @@ -1,6 +1,13 @@ # ChangeLog for net-p2p/mldonkey # Copyright 2002-2006 Gentoo Foundation; Distributed under the GPL v2 -# $Header: /var/cvsroot/gentoo-x86/net-p2p/mldonkey/ChangeLog,v 1.123 2006/06/09 13:48:52 sekretarz Exp $ +# $Header: /var/cvsroot/gentoo-x86/net-p2p/mldonkey/ChangeLog,v 1.124 2006/06/18 16:57:09 sekretarz Exp $ + +*mldonkey-2.7.6-r1 (18 Jun 2006) + + 18 Jun 2006; Karol Wojtaszek <sekretarz@gentoo.org> + +files/mldonkey-2.7.6-magic.patch, +mldonkey-2.7.6-r1.ebuild: + Add patch which fixes a serious performance problem when MLDonkey + downloads lots of new files or torrents with a lot (>100) subfiles, bug #136700 09 Jun 2006; Karol Wojtaszek <sekretarz@gentoo.org> -mldonkey-2.5.21-r2.ebuild, -mldonkey-2.6.5.ebuild, diff --git a/net-p2p/mldonkey/files/digest-mldonkey-2.7.6-r1 b/net-p2p/mldonkey/files/digest-mldonkey-2.7.6-r1 new file mode 100644 index 000000000000..51aedc0ddf3d --- /dev/null +++ b/net-p2p/mldonkey/files/digest-mldonkey-2.7.6-r1 @@ -0,0 +1,3 @@ +MD5 08e3cccce6fe65f5437a309276fe2c68 mldonkey-2.7.6.tar.bz2 2835134 +RMD160 8989e86e26b6b4ed4fc8f783093c6e187b6d5051 mldonkey-2.7.6.tar.bz2 2835134 +SHA256 ec5e5723cc54c4ac3ef93e0b78ed9da58c4e75ca09fa4b2de4c9a58740085fa8 mldonkey-2.7.6.tar.bz2 2835134 diff --git a/net-p2p/mldonkey/files/mldonkey-2.7.6-magic.patch b/net-p2p/mldonkey/files/mldonkey-2.7.6-magic.patch new file mode 100644 index 000000000000..04c570c360f8 --- /dev/null +++ b/net-p2p/mldonkey/files/mldonkey-2.7.6-magic.patch @@ -0,0 +1,173 @@ +diff -uwNr ./org/src/daemon/common/commonFile.ml ./mldonkey-2.7.6/src/daemon/common/commonFile.ml +--- src/daemon/common/commonFile.ml 2006-05-20 01:43:54.000000000 +0200 ++++ src/daemon/common/commonFile.ml 2006-06-13 21:50:56.000000000 +0200 +@@ -450,6 +450,18 @@ + None -> () + | Some magic -> (as_file_impl file).impl_file_magic <- Some (HashMagic.merge files_magic magic) + ++let check_magic file = ++ let check file = ++ match Magic.M.magic_fileinfo (file_disk_name file) false with ++ None -> () ++ | Some magic -> set_file_magic file (Some magic) ++ in ++ let magic = file_magic file in ++ match magic with ++ None -> check file ++ | Some magic when magic = "data" || magic = "empty" -> check file ++ | _ -> () ++ + let set_file_last_seen file age = + let impl = as_file_impl file in + impl.impl_file_last_seen <- age +diff -uwNr ./org/src/daemon/common/commonFile.mli ./mldonkey-2.7.6/src/daemon/common/commonFile.mli +--- src/daemon/common/commonFile.mli 2006-05-12 23:08:30.000000000 +0200 ++++ src/daemon/common/commonFile.mli 2006-06-13 21:50:56.000000000 +0200 +@@ -119,7 +119,7 @@ + val file_comment : CommonTypes.file -> string + val file_magic : CommonTypes.file -> string option + val set_file_magic : CommonTypes.file -> string option -> unit +- ++val check_magic : CommonTypes.file -> unit + val recover_bytes : CommonTypes.file -> (int64 * int64) list + val file_write : CommonTypes.file -> int64 -> string -> int -> int -> unit + val file_verify : CommonTypes.file -> +diff -uwNr ./org/src/daemon/common/commonSwarming.ml ./mldonkey-2.7.6/src/daemon/common/commonSwarming.ml +--- src/daemon/common/commonSwarming.ml 2006-05-20 01:43:54.000000000 +0200 ++++ src/daemon/common/commonSwarming.ml 2006-06-13 21:52:52.000000000 +0200 +@@ -1073,6 +1073,7 @@ + let set_verified_chunk t i = + t.t_nverified_blocks <- t.t_nverified_blocks + 1; + t.t_converted_verified_bitmap.[i] <- '3'; ++ if i = 0 && !Autoconf.magic_works then check_magic t.t_file; + let s = t.t_s in + if t.t_primary then begin + (* The primary is supposed to propagate verified chunks to the file *) +diff -uwNr ./org/src/daemon/driver/driverInteractive.ml ./mldonkey-2.7.6/src/daemon/driver/driverInteractive.ml +--- src/daemon/driver/driverInteractive.ml 2006-05-21 09:50:05.000000000 +0200 ++++ src/daemon/driver/driverInteractive.ml 2006-06-13 21:50:56.000000000 +0200 +@@ -123,23 +123,6 @@ + close_log () + end + +-let file_magic_check () = +- if !Autoconf.magic_works then begin +- if !verbose then lprintf_nl "computing file magic values"; +- let check_magic file = +- match Magic.M.magic_fileinfo (file_disk_name file) false with +- None -> () +- | Some magic -> set_file_magic file (Some magic) +- in +- List.iter (fun file -> +- let magic = file_magic file in +- match magic with +- None -> check_magic file +- | Some magic when magic = "data" -> check_magic file +- | _ -> () +- ) !!files +- end +- + (* ripped from gui_downloads *) + + let calc_file_eta f = +diff -uwNr ./org/src/daemon/driver/driverMain.ml ./mldonkey-2.7.6/src/daemon/driver/driverMain.ml +--- src/daemon/driver/driverMain.ml 2006-05-20 01:43:54.000000000 +0200 ++++ src/daemon/driver/driverMain.ml 2006-06-13 21:50:56.000000000 +0200 +@@ -68,7 +68,6 @@ + + let minute_timer () = + DriverInteractive.hdd_check (); +- DriverInteractive.file_magic_check (); + CommonShared.shared_check_files (); + CommonUploads.upload_credit_timer (); + CommonInteractive.force_download_quotas (); +@@ -436,7 +435,6 @@ + + (* lprintf "(1) CommonComplexOptions.load\n"; *) + CommonComplexOptions.load (); +- DriverInteractive.file_magic_check (); + CommonUploads.load (); + + (* lprintf "(2) CommonComplexOptions.load done\n"; *) +diff -uwNr ./org/src/networks/bittorrent/bTInteractive.ml ./mldonkey-2.7.6/src/networks/bittorrent/bTInteractive.ml +--- src/networks/bittorrent/bTInteractive.ml 2006-05-20 01:43:54.000000000 +0200 ++++ src/networks/bittorrent/bTInteractive.ml 2006-06-13 21:50:56.000000000 +0200 +@@ -256,14 +256,24 @@ + end in + print_first_tracker file.file_trackers; + ++ let check_magic file = ++ match Magic.M.magic_fileinfo file false with ++ None -> None ++ | Some s -> Some (HashMagic.merge CommonGlobals.files_magic s) ++ in + let cntr = ref 0 in +- List.iter (fun (filename, size, magic) -> ++ List.iter (fun (filename, size, _) -> + Printf.bprintf buf "\\</tr\\>\\<tr class=\\\"dl-%d\\\"\\>" (html_mods_cntr ()); + let fs = Printf.sprintf "File %d" !cntr in + let magic_string = +- match magic with ++ if !Autoconf.magic_works then ++ begin ++ let subfile = Filename.concat (file_disk_name file) filename in ++ match check_magic subfile with + None -> "" + | Some magic -> Printf.sprintf " / %s" magic ++ end ++ else "" + in + html_mods_td buf [ + (fs, "sr br", fs); +@@ -623,32 +633,6 @@ + lprintf_nl "ft_retry: exception %s" (Printexc2.to_string e) + ) ft_by_num + +-let file_magic_check () = +- if !Autoconf.magic_works then begin +- if !verbose then lprintf_nl "computing sub_file magic values"; +- let check_magic file = +- match Magic.M.magic_fileinfo file false with +- None -> None +- | Some s -> Some (HashMagic.merge CommonGlobals.files_magic s) +- in +- Hashtbl.iter (fun _ file -> +- let updated = ref false in +- let new_file_files = ref [] in +- List.iter (fun (filename, size, magic) -> +- let subfile = Filename.concat (file_disk_name file) filename in +- let new_magic = +- match magic with +- None -> check_magic subfile +- | Some magic when magic = "data" || magic = "empty" -> check_magic subfile +- | _ -> magic +- in +- if new_magic <> magic then updated := true; +- new_file_files := (filename, size, new_magic) :: !new_file_files +- ) file.file_files; +- if !updated then file.file_files <- !new_file_files +- ) files_by_uid +- end +- + let load_torrent_from_web r ft = + if !verbose then + lprintf_nl "Loading torrent from web"; +diff -uwNr ./org/src/networks/bittorrent/bTMain.ml ./mldonkey-2.7.6/src/networks/bittorrent/bTMain.ml +--- src/networks/bittorrent/bTMain.ml 2006-05-20 01:43:54.000000000 +0200 ++++ src/networks/bittorrent/bTMain.ml 2006-06-13 21:50:56.000000000 +0200 +@@ -115,7 +115,6 @@ + BTClients.recover_files (); + add_session_timer enabler 60.0 (fun timer -> + BTClients.recover_files (); +- BTInteractive.file_magic_check () + ); + + add_session_timer enabler 120.0 (fun timer -> +@@ -131,7 +130,6 @@ + ) !current_files; + ); + +- BTInteractive.file_magic_check (); + BTClients.listen (); + () + diff --git a/net-p2p/mldonkey/mldonkey-2.7.6-r1.ebuild b/net-p2p/mldonkey/mldonkey-2.7.6-r1.ebuild new file mode 100644 index 000000000000..53d2a399eda1 --- /dev/null +++ b/net-p2p/mldonkey/mldonkey-2.7.6-r1.ebuild @@ -0,0 +1,167 @@ +# Copyright 1999-2006 Gentoo Foundation +# Distributed under the terms of the GNU General Public License v2 +# $Header: /var/cvsroot/gentoo-x86/net-p2p/mldonkey/mldonkey-2.7.6-r1.ebuild,v 1.1 2006/06/18 16:57:09 sekretarz Exp $ + +inherit eutils flag-o-matic + +IUSE="gtk guionly batch gd doc" + +DESCRIPTION="mldonkey is a new client to access the eDonkey network. It is written in Objective-Caml, and comes with its own GTK GUI, an HTTP interface and a telnet interface." +HOMEPAGE="http://www.nongnu.org/mldonkey/" +SRC_URI="mirror://sourceforge/${PN}/${P}.tar.bz2" + +LICENSE="GPL-2" +SLOT="0" +KEYWORDS="~alpha ~amd64 ~hppa ~ia64 ~ppc ~x86" +RESTRICT="nomirror" + +RDEPEND="dev-lang/perl + guionly? ( >=gnome-base/librsvg-2.4.0 + >=dev-ml/lablgtk-2.6 ) + gtk? ( >=gnome-base/librsvg-2.4.0 + >=dev-ml/lablgtk-2.6 ) + gd? ( >=media-libs/gd-2.0.28 )" + +DEPEND="${RDEPEND} + >=sys-devel/autoconf-2.58 + !batch? ( >=dev-lang/ocaml-3.08.3 ) + batch? ( net-misc/wget )" + +MLUSER="p2p" + +pkg_setup() { + if use gtk; then + echo "" + einfo "If the compile with gui fails, and you have updated ocaml" + einfo "recently, you may have forgotten that you need to run" + einfo "/usr/portage/dev-lang/ocaml/files/ocaml-rebuild.sh" + einfo "to learn which ebuilds you need to recompile" + einfo "each time you update ocaml to a different version" + einfo "see the ocaml ebuild for details" + echo "" + fi + + if use gtk && !(built_with_use dev-ml/lablgtk svg); then + eerror "dev-ml/lablgtk must be built with the 'svg' USE flag to use the gtk gui" + die "Recompile dev-ml/lablgtk with enabled svg USE flag" + fi + + if use gd && !(built_with_use media-libs/gd truetype); then + eerror "media-libs/gd must be built with 'truetype' to compile" + eerror "mldonkey with gd support" + die "Recompile media-libs/gd with enabled truetype USE flag" + fi +} + +src_unpack() { + unpack ${A} + cd ${S} + + export WANT_AUTOCONF=2.5 + cd ${S}/config + autoconf + cd ${S} + epatch ${FILESDIR}/${P}-magic.patch +} + +src_compile() { + append-ldflags -Wl,-z,noexecstack + + # the dirs are not (yet) used, but it doesn't hurt to specify them anyway + + # batch Automatically download and build OCAML-3.08.3 for compiling itself + # onlygui Disable all nets support, build only chosen GUI + + if use gtk || use guionly; then + myconf="--enable-gui=newgui2" + else + myconf="--disable-gui" + fi + + if use guionly; then + myconf="${myconf} --disable-multinet --disable-donkey" + fi + + cd ${S} + econf \ + --sysconfdir=/etc/mldonkey \ + --sharedstatedir=/var/mldonkey \ + --localstatedir=/var/mldonkey \ + --enable-checks \ + `use_enable batch` \ + `use_enable gd` \ + ${myconf} || die "Configure Failed!" + + export OCAMLRUNPARAM="l=256M" + emake || die "Make Failed" + + if ! use guionly; then + emake utils || die "make utils failed" + fi; +} + +src_install() { + if ! use guionly; then + dobin mlnet mld_hash get_range copysources make_torrent subconv + dobin ${FILESDIR}/mldonkey + + insinto /etc/conf.d; newins ${FILESDIR}/mldonkey.confd mldonkey + exeinto /etc/init.d; newexe ${FILESDIR}/mldonkey.initd mldonkey + fi + + if use gtk; then + dobin mlgui mlguistarter mlchat mlim + domenu ${FILESDIR}/${PN}-gui.desktop + doicon ${FILESDIR}/${PN}.png + fi + + if use doc ; then + cd ${S}/distrib + dodoc ChangeLog *.txt + dohtml *.html + + insinto /usr/share/doc/${PF}/scripts + doins kill_mldonkey mldonkey_command mldonkey_previewer make_buginfo + + cd ${S}/docs + dodoc *.txt *.tex *.pdf + dohtml *.html + + cd ${S}/docs/developers + dodoc *.txt *.tex + + cd ${S}/docs/images + insinto /usr/share/doc/${PF}/html/images + doins * + fi +} + +pkg_preinst() { + if ! use guionly; then + enewuser ${MLUSER} -1 /bin/bash /home/p2p users + fi +} + +pkg_postinst() { + if ! use guionly; then + echo + einfo "Running \`mldonkey' will start the server inside ~/.mldonkey/" + einfo "If you want to start mldonkey in a particular working directory," + einfo "use the \`mlnet' command." + einfo "If you want to start mldonkey as a system service, use" + einfo "the /etc/init.d/mldonkey script. To control bandwidth, use" + einfo "the 'slow' and 'fast' arguments. Be sure to have a look at" + einfo "/etc/conf.d/mldonkey also." + echo + einfo "Attention: 2.6 has changed the inifiles structure, so downgrading" + einfo "will be problematic." + einfo "User settings (admin) are transferred to users.ini from " + einfo "downloads.ini" + einfo "Old ini files are automatically converted to the new format" + echo + else + echo + einfo "Simply run mlgui to start the chosen modonkey gui." + einfo "It puts its config files into ~/.mldonkey" + fi +} |