*:generate local schema ID for memory table. (#1094)

* *:generate local schema ID for memory table.

* meta/autoid: reorder import
This commit is contained in:
Ewan Chou
2016-04-13 10:29:16 +08:00
parent a85c94501e
commit 708c195782
4 changed files with 24 additions and 76 deletions

View File

@ -19,7 +19,6 @@ import (
"github.com/juju/errors"
"github.com/pingcap/tidb/kv"
"github.com/pingcap/tidb/meta"
"github.com/pingcap/tidb/meta/autoid"
"github.com/pingcap/tidb/model"
"github.com/pingcap/tidb/mysql"
@ -234,23 +233,13 @@ func NewHandle(store kv.Storage) *Handle {
store: store,
}
// init memory tables
initMemoryTables(store)
initPerfSchema(store)
initMemoryTables()
initPerfSchema()
return h
}
func initPerfSchema(store kv.Storage) {
perfHandle = perfschema.NewPerfHandle(store)
}
func genGlobalID(store kv.Storage) (int64, error) {
var globalID int64
err := kv.RunInNewTxn(store, true, func(txn kv.Transaction) error {
var err error
globalID, err = meta.NewMeta(txn).GenGlobalID()
return errors.Trace(err)
})
return globalID, errors.Trace(err)
func initPerfSchema() {
perfHandle = perfschema.NewPerfHandle()
}
var (
@ -271,39 +260,21 @@ var (
perfHandle perfschema.PerfSchema
)
func setColumnID(meta *model.TableInfo, store kv.Storage) error {
var err error
for _, c := range meta.Columns {
c.ID, err = genGlobalID(store)
if err != nil {
return errors.Trace(err)
}
}
return nil
}
func initMemoryTables(store kv.Storage) error {
func initMemoryTables() error {
// Init Information_Schema
var (
err error
tbl table.Table
)
dbID, err := genGlobalID(store)
if err != nil {
return errors.Trace(err)
}
dbID := autoid.GenLocalSchemaID()
nameToTable = make(map[string]table.Table)
isTables := make([]*model.TableInfo, 0, len(tableNameToColumns))
for name, cols := range tableNameToColumns {
meta := buildTableMeta(name, cols)
isTables = append(isTables, meta)
meta.ID, err = genGlobalID(store)
if err != nil {
return errors.Trace(err)
}
err = setColumnID(meta, store)
if err != nil {
return errors.Trace(err)
meta.ID = autoid.GenLocalSchemaID()
for _, c := range meta.Columns {
c.ID = autoid.GenLocalSchemaID()
}
alloc := autoid.NewMemoryAllocator(dbID)
tbl, err = createMemoryTable(meta, alloc)

View File

@ -14,7 +14,9 @@
package autoid
import (
"math"
"sync"
"sync/atomic"
"github.com/juju/errors"
"github.com/ngaut/log"
@ -184,3 +186,10 @@ func NewMemoryAllocator(dbID int64) Allocator {
//autoid error codes.
const codeInvalidTableID terror.ErrCode = 1
var localSchemaID int64 = math.MaxInt64
// GenLocalSchemaID generates a local schema ID.
func GenLocalSchemaID() int64 {
return atomic.AddInt64(&localSchemaID, -1)
}

View File

@ -15,8 +15,6 @@ package perfschema
import (
"github.com/juju/errors"
"github.com/pingcap/tidb/kv"
"github.com/pingcap/tidb/meta"
"github.com/pingcap/tidb/meta/autoid"
"github.com/pingcap/tidb/model"
"github.com/pingcap/tidb/mysql"
@ -190,27 +188,6 @@ var stagesCurrentCols = []columnInfo{
{mysql.TypeEnum, -1, 0, nil, []string{"TRANSACTION", "STATEMENT", "STAGE"}},
}
func setColumnID(meta *model.TableInfo, store kv.Storage) error {
var err error
for _, c := range meta.Columns {
c.ID, err = genGlobalID(store)
if err != nil {
return errors.Trace(err)
}
}
return nil
}
func genGlobalID(store kv.Storage) (int64, error) {
var globalID int64
err := kv.RunInNewTxn(store, true, func(txn kv.Transaction) error {
var err error
globalID, err = meta.NewMeta(txn).GenGlobalID()
return errors.Trace(err)
})
return globalID, errors.Trace(err)
}
func createMemoryTable(meta *model.TableInfo, alloc autoid.Allocator) (table.Table, error) {
tbl, _ := tables.MemoryTableFromMeta(alloc, meta)
return tbl, nil
@ -219,29 +196,21 @@ func createMemoryTable(meta *model.TableInfo, alloc autoid.Allocator) (table.Tab
func (ps *perfSchema) buildTables() error {
tbls := make([]*model.TableInfo, 0, len(ps.tables))
ps.mTables = make(map[string]table.Table, len(ps.tables))
dbID, err := genGlobalID(ps.store)
if err != nil {
return errors.Trace(err)
}
dbID := autoid.GenLocalSchemaID()
// Set PKIsHandle
// TableStmtsCurrent use THREAD_ID as PK and handle
tb := ps.tables[TableStmtsHistory]
tb.PKIsHandle = true
tb.Columns[0].Flag = tb.Columns[0].Flag | mysql.PriKeyFlag
var tbl table.Table
for name, meta := range ps.tables {
tbls = append(tbls, meta)
meta.ID, err = genGlobalID(ps.store)
if err != nil {
return errors.Trace(err)
}
err = setColumnID(meta, ps.store)
if err != nil {
return errors.Trace(err)
meta.ID = autoid.GenLocalSchemaID()
for _, c := range meta.Columns {
c.ID = autoid.GenLocalSchemaID()
}
alloc := autoid.NewMemoryAllocator(dbID)
tbl, err = createMemoryTable(meta, alloc)
tbl, err := createMemoryTable(meta, alloc)
if err != nil {
return errors.Trace(err)
}

View File

@ -67,9 +67,8 @@ var (
)
// NewPerfHandle creates a new perfSchema on store.
func NewPerfHandle(store kv.Storage) PerfSchema {
func NewPerfHandle() PerfSchema {
schema := PerfHandle.(*perfSchema)
schema.store = store
schema.historyHandles = make([]int64, 0, stmtsHistoryElemMax)
err := schema.initialize()
if err != nil {