Browse Source

clientv3: do not retry on modifications

Xiang Li 10 years ago
parent
commit
a9bd30b4af
1 changed files with 16 additions and 13 deletions
  1. 16 13
      clientv3/kv.go

+ 16 - 13
clientv3/kv.go

@@ -122,21 +122,18 @@ func (kv *kv) Delete(key string) (*DeleteResponse, error) {
 }
 }
 
 
 func (kv *kv) Compact(rev int64) error {
 func (kv *kv) Compact(rev int64) error {
-	for {
-		r := &pb.CompactionRequest{Revision: rev}
-		_, err := kv.getRemote().Compact(context.TODO(), r)
-		if err == nil {
-			return nil
-		}
-
-		if isRPCError(err) {
-			return err
-		}
+	r := &pb.CompactionRequest{Revision: rev}
+	_, err := kv.getRemote().Compact(context.TODO(), r)
+	if err == nil {
+		return nil
+	}
 
 
-		if nerr := kv.switchRemote(err); nerr != nil {
-			return nerr
-		}
+	if isRPCError(err) {
+		return err
 	}
 	}
+
+	go kv.switchRemote(err)
+	return nil
 }
 }
 
 
 func (kv *kv) Txn() Txn {
 func (kv *kv) Txn() Txn {
@@ -187,6 +184,12 @@ func (kv *kv) do(op Op) (*pb.ResponseUnion, error) {
 			return nil, err
 			return nil, err
 		}
 		}
 
 
+		// do not retry on modifications
+		if op.t != tRange {
+			go kv.switchRemote(err)
+			return nil, err
+		}
+
 		if nerr := kv.switchRemote(err); nerr != nil {
 		if nerr := kv.switchRemote(err); nerr != nil {
 			return nil, nerr
 			return nil, nerr
 		}
 		}