|
|
@@ -4,7 +4,28 @@
|
|
|
//This file will be the future home for more policies
|
|
|
package gocql
|
|
|
|
|
|
-// RetryPolicy represents the retry behavour for a query.
|
|
|
-type RetryPolicy struct {
|
|
|
+//RetryableQuery is an interface that represents a query or batch statement that
|
|
|
+//exposes the correct functions for the retry policy logic to evaluate correctly.
|
|
|
+type RetryableQuery interface {
|
|
|
+ Attempts() int
|
|
|
+}
|
|
|
+
|
|
|
+// RetryPolicy interace is used by gocql to determine if a query can be attempted
|
|
|
+// again after a retryable error has been received. The interface allows gocql
|
|
|
+// users to implement their own logic to determine if a query can be attempted
|
|
|
+// again.
|
|
|
+// See SimpleRetryPolicy as an example of implementing the RetryPolicy interface.
|
|
|
+type RetryPolicy interface {
|
|
|
+ Attempt(RetryableQuery) bool
|
|
|
+}
|
|
|
+
|
|
|
+// SimpleRetryPolicy has simple logic for attempting a query a fixed number of times.
|
|
|
+type SimpleRetryPolicy struct {
|
|
|
NumRetries int //Number of times to retry a query
|
|
|
}
|
|
|
+
|
|
|
+// Attempt tells gocql to attempt the query again based on query.Attempts being less
|
|
|
+// than the NumRetries defined in the policy.
|
|
|
+func (s *SimpleRetryPolicy) Attempt(q RetryableQuery) bool {
|
|
|
+ return q.Attempts() <= s.NumRetries
|
|
|
+}
|