Grrr, my 4th attempt at a reply without delivery ...
On Jul 8, 2008, at 6:57 PM, Alexey Tourbin wrote:
On Mon, Jul 07, 2008 at 11:44:07PM +0200, Jeff Johnson wrote:
- make gzdio.c standalone.
BTW, I have rsyncable gzdio implemntation (this does not require
patched zlib, one only has to call gzflush() at certain sync points).
I'd like to not carry internal zlib.
You are absolutely correct that the --rsyncable issue is calling
gzflush() at
certain sync points.
It is known to work well. Please review the patches and tell me
whether you want it or not.
http://git.altlinux.org/people/at/packages/rpm.git?
a=commitdiff;h=c761902b
http://git.altlinux.org/people/at/packages/rpm.git?
a=commitdiff;h=f7b5ee1e
http://git.altlinux.org/people/at/packages/rpm.git?
a=commitdiff;h=8d5e355e
http://git.altlinux.org/people/at/packages/rpm.git?
a=commitdiff;h=52b2499a
OTOH, here are other fundamental issues that are relevant:
0) No one understands why --rsyncable is important, or why gzip != zlib,
or why the "fuzzy" name patch in rsync would be a tremendous bandwidth
saving for *.rpm packages. I've been tracking the issue for like 6+
years,
and what is fundamentally needed is a very clear demonstration,
including
publicized benchmarks and likely a drop-in "production" ready transport
implementation, for any --rsyncable code to be worth the effort. JMHO
based on 6+ years of explaining ...
So "Using unpatched zlib external!" is the wrong reason to justify
the changes.
One needs to make the fundamental reasons for the changes more
obvious to
end lusers.
1) Your changes add 2-3 new wrapper layers (at least cpio/rsync) to
an already complex code base (with stacked I/O handlers accessed
through libio,
and with emulated libio for non-glibc portability).
I personally dunno whether I can debug rpm problems if your
additional patches are added.
(OTOH, I have no problems at all with an alternative gzdio
implementation,
or with #ifdef'd additions, just not the main "production" RPM code
path please).
2) From a fundamental coding design POV, adding --rsyncable to rpmio
code is just
plain wrong. That's as true for the patched internal zlib as it is
for your gzdio
patches. The issue of when gzflush() is called is fundamentally a
compression
and rsync transport, not a *.rpm payload packaging, issue.
So isn't a pure API/ABI drop-in replacement for gzio(3), with a
"gzwrite" rather
than a "rsyncable_gzwrite" symbol a better approach? There are many
applications,
not just rpm, that _MUST_ participate in an efficient *.rpm
distribution framework,
so patching gzdio in rpmio is just a tiny piece of a much bigger
puzzle, where "gzwrite"
rather than "rsyncable_gzwrite" is likelier to be successful. JMHO,
YMMV, as always.
3) As sole developer/designer of RPMIO, I also believe that my
choice to use the
gzopen(3) API was a design brain fart. The gzopen(3) API is/was
appealingly simple
at the time (1999), but increasingly is becoming _THE_ roadblock to
adding additional
functionality, like XAR and network transport. to RPMIO.
This code (from rpm2cpio.c an insanely simple program) breaks if
handlers, rather than
plain old integer fdno's, are used with RPMIO:
gzdi = Fdopen(fdi, rpmio_flags); /* XXX gzdi == fdi */
if (gzdi == NULL) {
fprintf(stderr, _("cannot re-open payload: %s\n"), Fstrerror
(gzdi));
exit(EXIT_FAILURE);
}
Note that neon and XAR handlers are not based on fdno's, rather
opaque pointers, and so
interoperate badly with gzdio/bzdio/lzdio pointer handlers. There's
no provision
for say, pushing neon under a compression library, and RPMIO <-> XAR
have
dueling compression stacks.
Which is why I call the choice of using gzopen(3) a "brain fart", a
compression layer
doesn't need heavt gzopen(3) I/O methods, only buffer compress/
decompress methods.
(aside) See XAR and rsync implementations using gzip/bzip2/lzma to
see more precisely
what I think RPMIO needs to do instead of using the gzopen(3) API.
In summary, your patches are quite nicely done and extremely clever,
but I'm not
sure that RPMIO could/should use them, as I've tried to describe above.
I'm most certainly willing to be convinced otherwise however.
73 de Jeff
______________________________________________________________________
RPM Package Manager http://rpm5.org
Developer Communication List rpm-devel@rpm5.org