diff --git a/adapter/test_util.go b/adapter/test_util.go index 95ea22c..c70ed11 100644 --- a/adapter/test_util.go +++ b/adapter/test_util.go @@ -243,6 +243,14 @@ func createNode(t *testing.T, n int) ([]Node, []string, []string) { return nodes[0].raft.State() == raft.Leader }, waitTimeout, waitInterval) + for i := 1; i < len(nodes); i++ { + f := nodes[0].raft.AddNonvoter(raft.ServerID(strconv.Itoa(i)), raft.ServerAddress(nodes[i].raftAddress), 0, 0) + assert.NoError(t, f.Error()) + assert.Eventually(t, func() bool { + return nodes[i].raft.State() == raft.Follower + }, waitTimeout, waitInterval) + } + return nodes, grpcAdders, redisAdders } diff --git a/kv/transaction.go b/kv/transaction.go index cd81e5c..678a2fa 100644 --- a/kv/transaction.go +++ b/kv/transaction.go @@ -38,12 +38,19 @@ func (t *TransactionManager) Commit(reqs []*pb.Request) (*TransactionResponse, e } af := t.raft.Apply(b, time.Second) - if af.Error() != nil { - return 0, errors.WithStack(af.Error()) + if err := af.Error(); err != nil { + return 0, errors.WithStack(err) + } + + if resp := af.Response(); resp != nil { + if err, ok := resp.(error); ok && err != nil { + return 0, errors.WithStack(err) + } } + f := t.raft.Barrier(time.Second) - if f.Error() != nil { - return 0, errors.WithStack(f.Error()) + if err := f.Error(); err != nil { + return 0, errors.WithStack(err) } commitIndex = af.Index() }