Merge pull request #315 from pingcap/goroutine/meta-refactor

meta: Make sure meta key always less then other key
This commit is contained in:
dongxu
2015-10-08 12:03:45 +08:00
3 changed files with 25 additions and 15 deletions

View File

@ -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)
}

View File

@ -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)

View File

@ -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()