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