Re: libpq compression (part 3) - Mailing list pgsql-hackers
From | Jacob Burroughs |
---|---|
Subject | Re: libpq compression (part 3) |
Date | |
Msg-id | CACzsqT5dSZGzY5cmO88jiCd+T_B1xUCi1LWk6iXsd-Q9Xc=KXA@mail.gmail.com Whole thread Raw |
In response to | Re: libpq compression (part 3) (Robert Haas <robertmhaas@gmail.com>) |
Responses |
Re: libpq compression (part 3)
|
List | pgsql-hackers |
On Wed, May 15, 2024 at 8:38 AM Robert Haas <robertmhaas@gmail.com> wrote: > > I agree with that goal, but I'm somewhat confused by how your proposal > achieves it. You had > libpq_compression=lzma:client_to_server=off;gzip:server_to_client=off, > so how do we parse that? Is that two completely separate > specifications, one for lzma and one for gzip, and each of those has > one option which is set to off? And then they are separated from each > other by a semicolon? That actually does make sense, and I think it > may do a better job allowing for compression options than my proposal, > but it also seems a bit weird, because client_to_server and > server_to_client are not really compression options at all. They're > framing when this compression specification applies, rather than what > it does when it applies. In a way it's a bit like the fact that you > can prefix a pg_basebackup's --compress option with client- or server- > to specify where the compression should happen. But we can't quite > reuse that idea here, because in that case there's no question of > doing it in both places, whereas here, you might want one thing for > upstream and another thing for downstream. Your interpretation is correct, but I don't disagree that it ends up feeling confusing. > I'm not a fan of three settings; I could go with two settings, one for > each direction, and if you want both you have to set both. Or, another > idea, what if we just separated the two directions with a slash, > SEND/RECEIVE, and if there's no slash, then it applies to both > directions. So you could say > connection_compression='gzip:level=9/lzma' or whatever. > > But now I'm wondering whether these options should really be symmetric > on the client and server sides? Isn't it for the server just to > specify a list of acceptable algorithms, and the client to set the > compression options? If both sides are trying to set the compression > level, for example, who wins? Compression options really only ever apply to the side doing the compressing, and at least as I had imagined things each party (client/server) only used its own level/other compression params. That leaves me thinking, maybe we really want two independent GUCs, one for "what algorithms are enabled/negotiable" and one for "how should I configure my compressors" and then we reduce the dimensions we are trying to shove into one GUC and each one ends up with a very clear purpose: connection_compression=(yes|no|alg1,alg2:server_to_client=alg1,alg2:client_to_server=alg3) connection_compression_opts=gzip:level=2 -- Jacob Burroughs | Staff Software Engineer E: jburroughs@instructure.com
pgsql-hackers by date: