瀏覽代碼

Merge pull request #6804 from heyitsanthony/stm-conflict

grpcproxy: invalidate comparison keys after txn
Anthony Romano 9 年之前
父節點
當前提交
352d4fa3fa
共有 1 個文件被更改,包括 9 次插入1 次删除
  1. 9 1
      proxy/grpcproxy/kv.go

+ 9 - 1
proxy/grpcproxy/kv.go

@@ -89,7 +89,15 @@ func (p *kvProxy) Txn(ctx context.Context, r *pb.TxnRequest) (*pb.TxnResponse, e
 	}
 
 	resp, err := txn.If(cmps...).Then(thenops...).Else(elseops...).Commit()
-	return (*pb.TxnResponse)(resp), err
+
+	if err != nil {
+		return nil, err
+	}
+	// txn may claim an outdated key is updated; be safe and invalidate
+	for _, cmp := range r.Compare {
+		p.cache.Invalidate(cmp.Key, nil)
+	}
+	return (*pb.TxnResponse)(resp), nil
 }
 
 func (p *kvProxy) Compact(ctx context.Context, r *pb.CompactionRequest) (*pb.CompactionResponse, error) {