Hi,

On 8/19/21 1:13 PM, Simon Riggs wrote:
We need to be able to send the middleware a message. Replies can be
sent as NoticeResponse, if needed, which already exists.


Yeah, but you need the client driver - of all languages - to understand that notice. And, if different middleware uses different codes then the problem is just pushed to the client;

Java: M|12|0 (Do you support failover ?) MW1: N|6|-|0 (meaning: yes)
Rust: M|12|0 (Do you support load balancing ?) MW2: N|6|-|0 (meaning: no)

Should the middleware guess the client driver based on the startup message ? Or are you thinking about having a class identifier group for each client driver and then a massive "switch/case" inside each middleware ?

Once you have established what is supported and what isn't you need the
client driver (libpq is the very easy part) - so lets include Java, C#,
Rust, golang, ... - to understand their environment to trigger the
correct message in the configured scenario. F.ex. how is multiple
application clusters connecting to the same middleware instance
(connection pool) going to coordinate their 'M' message ?

Each component can speak to the middleware to discover that, if it
wishes. The middleware can coordinate.


So, application cluster 1 (written in Java) detects that a failover is needed, and application cluster 2..N (written in Rust, C# and golang) should detect that mid-transaction - or rollback and send their 'M' for the same thing ?

I want to empower all future middleware, not just support one. Perhaps
we can take code or ideas from pgagroal and put it in core? Please
explain the binary protocol some more.


There is nothing fancy there (see management.c) - so the official protocol should be the focus.

Could you expand on typical scenarios that you want to see implemented ?

I see this as a generalized interface that can be used for a great many things.
* Failover managers
* Load Balancers
* Routing agents
* Things I haven't thought of yet, but others may have
etc..


Moving control to the client will make some of this harder. Maybe PeterE, Andrey and Tatsuo-san have additional feedback based on their experience.

We are currently limited by the messages we can send efficiently.


There are a lot of good ideas for the PostgreSQL protocol v4 already.

Best regards,
 Jesper



Reply via email to