Merge pull request #315 from pingcap/goroutine/meta-refactor
meta: Make sure meta key always less then other key
This commit is contained in:
24
meta/meta.go
24
meta/meta.go
@ -21,18 +21,24 @@ import (
|
||||
"github.com/pingcap/tidb/kv"
|
||||
)
|
||||
|
||||
const (
|
||||
var (
|
||||
// SchemaMetaPrefix is the prefix for database meta key prefix.
|
||||
SchemaMetaPrefix = "mDB:"
|
||||
SchemaMetaPrefix = string(MakeMetaKey("mDB:"))
|
||||
|
||||
// TableMetaPrefix is the prefix for table meta key prefix.
|
||||
TableMetaPrefix = "mTable:"
|
||||
TableMetaPrefix = MakeMetaKey("mTable:")
|
||||
|
||||
// SchemaMetaVersionKey is used as lock for changing schema
|
||||
SchemaMetaVersionKey = MakeMetaKey("mSchemaVersion")
|
||||
|
||||
// globalIDPrefix is used as key of global ID
|
||||
globalIDKey = MakeMetaKey("mNextGlobalID")
|
||||
)
|
||||
|
||||
var (
|
||||
nextGlobalIDPrefix = []byte("mNextGlobalID")
|
||||
// SchemaMetaVersionKey is used as lock for changing schema
|
||||
SchemaMetaVersionKey = []byte("mSchemaVersion")
|
||||
)
|
||||
// MakeMetaKey creates meta key
|
||||
func MakeMetaKey(key string) []byte {
|
||||
return append([]byte{0x0}, key...)
|
||||
}
|
||||
|
||||
// GenID adds step to the value for key and returns the sum.
|
||||
func GenID(txn kv.Transaction, key []byte, step int) (int64, error) {
|
||||
@ -67,7 +73,7 @@ func AutoIDKey(tableID int64) string {
|
||||
// GenGlobalID generates the next id in the store scope.
|
||||
func GenGlobalID(store kv.Storage) (ID int64, err error) {
|
||||
err = kv.RunInNewTxn(store, true, func(txn kv.Transaction) error {
|
||||
ID, err = GenID(txn, []byte(nextGlobalIDPrefix), 1)
|
||||
ID, err = GenID(txn, globalIDKey, 1)
|
||||
if err != nil {
|
||||
return errors.Trace(err)
|
||||
}
|
||||
|
||||
@ -49,14 +49,14 @@ func (*testSuite) TestT(c *C) {
|
||||
c.Assert(err, NotNil)
|
||||
|
||||
// For DBMetaKey
|
||||
mkey := meta.DBMetaKey(1)
|
||||
c.Assert(mkey, Equals, "mDB::1")
|
||||
mkey := []byte(meta.DBMetaKey(1))
|
||||
c.Assert(mkey, DeepEquals, meta.MakeMetaKey("mDB::1"))
|
||||
|
||||
//For AutoIDKey
|
||||
mkey = meta.AutoIDKey(1)
|
||||
c.Assert(mkey, Equals, "mTable::1_autoID")
|
||||
mkey = meta.AutoIDKey(0)
|
||||
c.Assert(mkey, Equals, "mTable::0_autoID")
|
||||
mkey = []byte(meta.AutoIDKey(1))
|
||||
c.Assert(mkey, DeepEquals, meta.MakeMetaKey("mTable::1_autoID"))
|
||||
mkey = []byte(meta.AutoIDKey(0))
|
||||
c.Assert(mkey, DeepEquals, meta.MakeMetaKey("mTable::0_autoID"))
|
||||
|
||||
// For GenGlobalID
|
||||
id, err = meta.GenGlobalID(store)
|
||||
|
||||
@ -534,6 +534,10 @@ func (t *Table) IterRecords(ctx context.Context, startKey string, cols []*column
|
||||
}
|
||||
defer it.Close()
|
||||
|
||||
if !it.Valid() {
|
||||
return nil
|
||||
}
|
||||
|
||||
log.Debugf("startKey %q, key:%q,value:%q", startKey, it.Key(), it.Value())
|
||||
|
||||
prefix := t.KeyPrefix()
|
||||
|
||||
Reference in New Issue
Block a user