Hi Simon,
On 8/20/21 10:39 AM, Simon Riggs wrote:
>> Yeah, but it is a change to the protocol which means that the client
>> drivers and middleware ecosystem needs to be updated to support that
>> message.
>
> No, because FE messages don't need to be handled by the client, they
> just send them.
Yes, but the middleware need to parse them in order to send a response.
> It is the server that needs to be updated to
> understand that these messages might be received and to ignore them,
> which is simple enough.
>
> If a client doesn't know about a message it COULD send, but doesn't,
> then there is no update required.
>
Agreed.
>> So, if the message was added to the protocol we could add another
>> message with the response to the request and make the protocol stricter, say
>>
>> FE/M
>> Int32 - Length
>> Int16 - Request type (0 == Query capability, 1 == Execute capability)
>> Int32 - Capability type (0 == Failover, 1 == ..., ...)
>
> This much detail is optional. It is up to the middleware to define if
> it supports capability requests, or how it handles requests that it
> cannot satisfy.
>
> I'm trying to come up with something generic that people can use for
> decades to come, not restrict their choices to a very small subset
> based upon our current vision.
>
>> BE/?
>> Int32 - Length
>> Int32 - Capability type
>> Byte - Support (0 == No, 1 == Yes)
>> Byten - Additional information
>
> If we add a new message from BE, then yes, we need to modify all
> drivers, which would be an immediate fail for this proposal.
>
> The message replies you foresee are optional; they are not required by
> all middleware.
>
> I've already suggested you use NoticeResponse, which is already
> defined to ignore unknown field types, so is suitable and extensible.
> We could add a new field type of 'm' to represent a message sent from
> middleware to the client.
>
When doing the PoC just keep in mind that middleware acting on a 'M'
message on a user authenticated connection could lead to a DoS attack.
Best regards,
Jesper