This is an automated email from the ASF dual-hosted git repository.

zeroshade pushed a commit to branch main
in repository https://gitbox.apache.org/repos/asf/arrow.git


The following commit(s) were added to refs/heads/main by this push:
     new 1cad7a7878 GH-35328: [Go][FlightSQL] Fix flaky test for FlightSql 
driver (#38044)
1cad7a7878 is described below

commit 1cad7a787847add45261abe5acdd3ba080e54a75
Author: Matt Topol <[email protected]>
AuthorDate: Thu Oct 5 12:49:15 2023 -0400

    GH-35328: [Go][FlightSQL] Fix flaky test for FlightSql driver (#38044)
    
    
    
    ### Rationale for this change
    Fixing a flaky test that is *very* difficult to reproduce.
    
    ### What changes are included in this PR?
    Adding an explicit call to drain the remaining batches from the parameter 
batch reader in the `DoPutPreparedStatementQuery` of the `MockServer` in the 
tests. This ensures that the gRPC connection doesn't close on us in between the 
client writing the schema message and writing the record batch message 
producing an `io.EOF` error. This is an extremely rare occurence based on 
goroutine scheduling due to the client and mockserver both running in the same 
process for the tests, in local te [...]
    
    ### Are there any user-facing changes?
    No
    
    * Closes: #35328
    
    Authored-by: Matt Topol <[email protected]>
    Signed-off-by: Matt Topol <[email protected]>
---
 go/arrow/flight/flightsql/driver/driver_test.go | 11 +++++++++++
 1 file changed, 11 insertions(+)

diff --git a/go/arrow/flight/flightsql/driver/driver_test.go 
b/go/arrow/flight/flightsql/driver/driver_test.go
index 3ec8533979..4449b39097 100644
--- a/go/arrow/flight/flightsql/driver/driver_test.go
+++ b/go/arrow/flight/flightsql/driver/driver_test.go
@@ -812,6 +812,17 @@ func (s *MockServer) DoPutPreparedStatementQuery(ctx 
context.Context, qry flight
                return fmt.Errorf("parameter schema: %w", arrow.ErrInvalid)
        }
 
+       // GH-35328: it's rare, but this function can complete execution and 
return
+       // closing the reader *after* the schema is written but *before* the 
parameter batch
+       // is written (race condition based on goroutine scheduling). In that 
situation,
+       // the client call to Write the parameter record batch will return an 
io.EOF because
+       // this end of the connection will have closed before it attempted to 
send the batch.
+       // This created a flaky test situation that was difficult to reproduce 
(1-4 failures
+       // in 5000 runs). We can avoid this flakiness by simply *explicitly* 
draining the
+       // record batch messages from the reader before returning.
+       for r.Next() {
+       }
+
        return nil
 }
 

Reply via email to