Prechádzať zdrojové kódy

query executor: better handling of errors for host selection

We cannot mark the host as failed in case of logical errors, whether it is from
gocql itself or from the context package.
Thomas Meson 6 rokov pred
rodič
commit
d9b5b8c364
1 zmenil súbory, kde vykonal 9 pridanie a 1 odobranie
  1. 9 1
      query_executor.go

+ 9 - 1
query_executor.go

@@ -112,7 +112,15 @@ func (q *queryExecutor) do(ctx context.Context, qry ExecutableQuery) *Iter {
 		iter = q.attemptQuery(ctx, qry, conn)
 		iter = q.attemptQuery(ctx, qry, conn)
 		iter.host = selectedHost.Info()
 		iter.host = selectedHost.Info()
 		// Update host
 		// Update host
-		selectedHost.Mark(iter.err)
+		switch iter.err {
+		case context.Canceled, context.DeadlineExceeded, ErrNotFound:
+			// those errors represents logical errors, they should not count
+			// toward removing a node from the pool
+			selectedHost.Mark(nil)
+			return iter
+		default:
+			selectedHost.Mark(iter.err)
+		}
 
 
 		// Exit if the query was successful
 		// Exit if the query was successful
 		// or no retry policy defined or retry attempts were reached
 		// or no retry policy defined or retry attempts were reached