From e440ec77ea4b23ac6aef23c0c8dc2203f3723290 Mon Sep 17 00:00:00 2001 From: disksing Date: Fri, 30 Jun 2017 16:30:21 +0800 Subject: [PATCH] store/tikv: export LockResolver. (#3585) --- store/tikv/lock_resolver.go | 18 ++++++++++++++++++ 1 file changed, 18 insertions(+) diff --git a/store/tikv/lock_resolver.go b/store/tikv/lock_resolver.go index b72859dbf3..f43199626b 100644 --- a/store/tikv/lock_resolver.go +++ b/store/tikv/lock_resolver.go @@ -15,11 +15,13 @@ package tikv import ( "container/list" + "fmt" "sync" "github.com/juju/errors" "github.com/ngaut/log" "github.com/pingcap/kvproto/pkg/kvrpcpb" + "github.com/pingcap/pd/pd-client" "github.com/pingcap/tidb/store/tikv/tikvrpc" goctx "golang.org/x/net/context" ) @@ -46,6 +48,22 @@ func newLockResolver(store *tikvStore) *LockResolver { return r } +// NewLockResolver creates a LockResolver. +// It is exported for other services to use. For instance, binlog service needs +// to determine a transaction's commit state. +func NewLockResolver(etcdAddrs []string) (*LockResolver, error) { + pdCli, err := pd.NewClient(etcdAddrs) + if err != nil { + return nil, errors.Trace(err) + } + uuid := fmt.Sprintf("tikv-%v", pdCli.GetClusterID(goctx.TODO())) + s, err := newTikvStore(uuid, &codecPDClient{pdCli}, newRPCClient(), false) + if err != nil { + return nil, errors.Trace(err) + } + return s.lockResolver, nil +} + // TxnStatus represents a txn's final status. It should be Commit or Rollback. type TxnStatus uint64