bug? -z option and large compressed data

Yasuoka Masahiko yasuoka at yasuoka.net
Fri Jul 4 05:24:29 EST 2003


On Thu, 3 Jul 2003 10:02:33 -0700
Wayne Davison <wayned at samba.org> wrote:
> > In addition to, tx_strm context keeps pending output.  It must be
> > flushed here.
> 
> It seems weird to me that the code was not flushing the output, but I am
> worried that changing this will make us incompatible with older rsync
> versions (since this data affects the compressor on each side without
> actually sending any of it over the socket).  I also haven't seen any
> failures using Z_INSERT_ONLY instead of Z_SYNC_FLUSH.  Did you encounter
> a failure case without flushing?

Yes, I encountered in my second patch.  When tx_strm.avail_out is not
enough size, deflate() returns Z_OK even if there is pending output
in tx_strm internal.   If this occurs, next time send_deflated_token()
is called with "token != -2", those pending output (that was created
by Z_INSERT_ONLY) will be sent to receiver.  This will make failure on
receiver's side.

But your patch seems to have enough size to avoid this problem.

> > Please check below patch.
> 
> I think I'd prefer a little simpler approach to fixing this.  Here's a
> patch that expands the obuf to a larger size and just uses this larger
> size in this one part of the token compression code.  This avoids the
> problem in your first patch where you affected too many things (by
> changing the value of MAX_DATA_COUNT) and avoids adding an extra loop
> as well.  In my testing this fixed a compression failure when syncing
> a large iso.

Your patch is good and simple.  This fixed all my failure cases.

Thank you very much,

--yasuoka

    Yasuoka Masahiko (yasuoka at second-software.com)
    Second Software Inc.   http://www.second-software.com/



More information about the rsync mailing list