store/tikv: add disableGC flag. (#1872)
* store/tikv: add disableGC flag.
This commit is contained in:
@ -45,12 +45,12 @@ type Driver struct {
|
||||
}
|
||||
|
||||
// Open opens or creates an TiKV storage with given path.
|
||||
// Path example: tikv://etcd-node1:port,etcd-node2:port?cluster=1
|
||||
// Path example: tikv://etcd-node1:port,etcd-node2:port?cluster=1&disableGC=false
|
||||
func (d Driver) Open(path string) (kv.Storage, error) {
|
||||
mc.Lock()
|
||||
defer mc.Unlock()
|
||||
|
||||
etcdAddrs, clusterID, err := parsePath(path)
|
||||
etcdAddrs, clusterID, disableGC, err := parsePath(path)
|
||||
if err != nil {
|
||||
return nil, errors.Trace(err)
|
||||
}
|
||||
@ -64,7 +64,7 @@ func (d Driver) Open(path string) (kv.Storage, error) {
|
||||
if err != nil {
|
||||
return nil, errors.Trace(err)
|
||||
}
|
||||
s, err := newTikvStore(uuid, &codecPDClient{pdCli}, newRPCClient(), true)
|
||||
s, err := newTikvStore(uuid, &codecPDClient{pdCli}, newRPCClient(), !disableGC)
|
||||
if err != nil {
|
||||
return nil, errors.Trace(err)
|
||||
}
|
||||
@ -248,7 +248,7 @@ func (s *tikvStore) SendKVReq(bo *Backoffer, req *pb.Request, regionID RegionVer
|
||||
}
|
||||
}
|
||||
|
||||
func parsePath(path string) (etcdAddrs []string, clusterID uint64, err error) {
|
||||
func parsePath(path string) (etcdAddrs []string, clusterID uint64, disableGC bool, err error) {
|
||||
var u *url.URL
|
||||
u, err = url.Parse(path)
|
||||
if err != nil {
|
||||
@ -256,8 +256,8 @@ func parsePath(path string) (etcdAddrs []string, clusterID uint64, err error) {
|
||||
return
|
||||
}
|
||||
if strings.ToLower(u.Scheme) != "tikv" {
|
||||
log.Errorf("Uri scheme expected[tikv] but found [%s]", u.Scheme)
|
||||
err = errors.Trace(err)
|
||||
err = errors.Errorf("Uri scheme expected[tikv] but found [%s]", u.Scheme)
|
||||
log.Error(err)
|
||||
return
|
||||
}
|
||||
clusterID, err = strconv.ParseUint(u.Query().Get("cluster"), 10, 64)
|
||||
@ -266,6 +266,14 @@ func parsePath(path string) (etcdAddrs []string, clusterID uint64, err error) {
|
||||
err = errors.Trace(err)
|
||||
return
|
||||
}
|
||||
switch strings.ToLower(u.Query().Get("disableGC")) {
|
||||
case "true":
|
||||
disableGC = true
|
||||
case "false", "":
|
||||
default:
|
||||
err = errors.New("disableGC flag should be true/false")
|
||||
return
|
||||
}
|
||||
etcdAddrs = strings.Split(u.Host, ",")
|
||||
return
|
||||
}
|
||||
|
||||
@ -46,6 +46,22 @@ func (s *testStoreSuite) SetUpTest(c *C) {
|
||||
s.store = store
|
||||
}
|
||||
|
||||
func (s *testStoreSuite) TestParsePath(c *C) {
|
||||
etcdAddrs, clusterID, disableGC, err := parsePath("tikv://node1:2379,node2:2379?cluster=1")
|
||||
c.Assert(err, IsNil)
|
||||
c.Assert(etcdAddrs, DeepEquals, []string{"node1:2379", "node2:2379"})
|
||||
c.Assert(clusterID, Equals, uint64(1))
|
||||
c.Assert(disableGC, IsFalse)
|
||||
|
||||
_, _, _, err = parsePath("tikv://node1:2379")
|
||||
c.Assert(err, NotNil)
|
||||
_, _, _, err = parsePath("tidb://node1:2379?cluster=1")
|
||||
c.Assert(err, NotNil)
|
||||
_, _, disableGC, err = parsePath("tikv://node1:2379?cluster=1&disableGC=true")
|
||||
c.Assert(err, IsNil)
|
||||
c.Assert(disableGC, IsTrue)
|
||||
}
|
||||
|
||||
func (s *testStoreSuite) TestOracle(c *C) {
|
||||
o := &mockOracle{}
|
||||
s.store.oracle = o
|
||||
|
||||
Reference in New Issue
Block a user