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 = false?

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?

Cheers,
Francis

Reply via email to