I am investigating HA support for the Go Avatica driver.
Let's assume a scenario where we have multiple Avatica servers behind a
load balancer and do not want to use sticky sessions.
Currently, these are some of the questions I have:
1. A connection with an id "123" opened. A server handles the request
and then fails immediately after. We then call a
PrepareAndExecuteRequest using the connection_id of "123". In this case,
what happens? ExecuteResponse does not appear to have a field telling us
the connection_id is invalid.
2. A connection with an id "456" is opened. A server handles the request
and we call PrepareAndExecuteRequest. This returns a resultset. The
server fails at this point. We then call a FetchRequest to fetch more
rows, but the server has no record of this query. If missing_statement
is true, we recreate the statement on a new connection. What is the
expected corrective action if missing_results is true? I am assuming we
use a SyncResultsRequest to sync the results, and if SyncResultResponse
has missing_statement set to true, because the server failed, we
recreate the statement and retry. Are there any cases where
missing_statement is false but missing_results is true (what causes this
scenario)? Also, how about missing_statement = true and missing_results
3. I noticed that with ExecuteRequest, FetchRequest and
ExecuteBatchRequest, there is sufficient information in the
statement_handle and other fields to allow Avatica to automatically
recreate the statement or result set on the server if it is missing. Is
there any reason why this is not being automatically handled by Avatica?