Skip to content

Commit

Permalink
store/tikv: add disableGC flag. (pingcap#1872)
Browse files Browse the repository at this point in the history
* store/tikv: add disableGC flag.
  • Loading branch information
disksing authored and ngaut committed Oct 25, 2016
1 parent 6ee738f commit 0eee7c8
Show file tree
Hide file tree
Showing 2 changed files with 30 additions and 6 deletions.
20 changes: 14 additions & 6 deletions store/tikv/kv.go
Original file line number Diff line number Diff line change
Expand Up @@ -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)
}
Expand All @@ -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)
}
Expand Down Expand Up @@ -248,16 +248,16 @@ 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 {
err = errors.Trace(err)
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)
Expand All @@ -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
}
Expand Down
16 changes: 16 additions & 0 deletions store/tikv/store_test.go
Original file line number Diff line number Diff line change
Expand Up @@ -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
Expand Down

0 comments on commit 0eee7c8

Please sign in to comment.