mirror of
https://github.com/etcd-io/etcd.git
synced 2024-09-27 06:25:44 +00:00
concurrency, benchmark: read-committed STM isolation policy
This commit is contained in:
@@ -56,6 +56,12 @@ func NewSTMSerializable(ctx context.Context, c *v3.Client, apply func(STM) error
|
||||
return runSTM(s, apply)
|
||||
}
|
||||
|
||||
// NewSTMReadCommitted initiates a new read committed transaction.
|
||||
func NewSTMReadCommitted(ctx context.Context, c *v3.Client, apply func(STM) error) (*v3.TxnResponse, error) {
|
||||
s := &stmReadCommitted{stm{client: c, ctx: ctx, getOpts: []v3.OpOption{v3.WithSerializable()}}}
|
||||
return runSTM(s, apply)
|
||||
}
|
||||
|
||||
type stmResponse struct {
|
||||
resp *v3.TxnResponse
|
||||
err error
|
||||
@@ -234,6 +240,14 @@ func (s *stmSerializable) commit() *v3.TxnResponse {
|
||||
return nil
|
||||
}
|
||||
|
||||
type stmReadCommitted struct{ stm }
|
||||
|
||||
// commit always goes through when read committed
|
||||
func (s *stmReadCommitted) commit() *v3.TxnResponse {
|
||||
s.rset = nil
|
||||
return s.stm.commit()
|
||||
}
|
||||
|
||||
func isKeyCurrent(k string, r *v3.GetResponse) v3.Cmp {
|
||||
rev := r.Header.Revision + 1
|
||||
if len(r.Kvs) != 0 {
|
||||
|
||||
@@ -52,7 +52,7 @@ var (
|
||||
func init() {
|
||||
RootCmd.AddCommand(stmCmd)
|
||||
|
||||
stmCmd.Flags().StringVar(&stmIsolation, "isolation", "r", "Repeatable Reads (r) or Serializable (s)")
|
||||
stmCmd.Flags().StringVar(&stmIsolation, "isolation", "r", "Read Committed (c), Repeatable Reads (r), or Serializable (s)")
|
||||
stmCmd.Flags().IntVar(&stmKeyCount, "keys", 1, "Total unique keys accessible by the benchmark")
|
||||
stmCmd.Flags().IntVar(&stmTotal, "total", 10000, "Total number of completed STM transactions")
|
||||
stmCmd.Flags().IntVar(&stmKeysPerTxn, "keys-per-txn", 1, "Number of keys to access per transaction")
|
||||
@@ -78,6 +78,8 @@ func stmFunc(cmd *cobra.Command, args []string) {
|
||||
}
|
||||
|
||||
switch stmIsolation {
|
||||
case "c":
|
||||
mkSTM = v3sync.NewSTMReadCommitted
|
||||
case "r":
|
||||
mkSTM = v3sync.NewSTMRepeatable
|
||||
case "s":
|
||||
|
||||
Reference in New Issue
Block a user