func (*testSuite) TestT(c *C) { driver := localstore.Driver{Driver: goleveldb.MemoryDriver{}} store, err := driver.Open("memory") c.Assert(err, IsNil) defer store.Close() // For GenID txn, err := store.Begin() c.Assert(err, IsNil) key := []byte(meta.AutoIDKey(1)) id, err := meta.GenID(txn, key, 1) c.Assert(id, Equals, int64(1)) id, err = meta.GenID(txn, key, 2) c.Assert(id, Equals, int64(3)) id, err = meta.GenID(txn, []byte{}, 1) c.Assert(err, NotNil) // For DBMetaKey mkey := meta.DBMetaKey(1) c.Assert(mkey, Equals, "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") // For GenGlobalID id, err = meta.GenGlobalID(store) c.Assert(err, IsNil) c.Assert(id, Equals, int64(1)) id, err = meta.GenGlobalID(store) c.Assert(err, IsNil) c.Assert(id, Equals, int64(2)) }
// Alloc allocs the next autoID for table with tableID. // It gets a batch of autoIDs at a time. So it does not need to access storage for each call. func (alloc *allocator) Alloc(tableID int64) (int64, error) { if tableID == 0 { return 0, errors.New("Invalid tableID") } metaKey := meta.AutoIDKey(tableID) alloc.mu.Lock() defer alloc.mu.Unlock() if alloc.base == alloc.end { // step err := kv.RunInNewTxn(alloc.store, true, func(txn kv.Transaction) error { end, err := meta.GenID(txn, []byte(metaKey), step) if err != nil { return errors.Trace(err) } alloc.end = end alloc.base = alloc.end - step return nil }) if err != nil { return 0, errors.Trace(err) } } alloc.base++ log.Infof("Alloc id %d, table ID:%d, from %p, store ID:%s", alloc.base, tableID, alloc, alloc.store.UUID()) return alloc.base, nil }
func (d *ddl) deleteTableData(ctx context.Context, t table.Table) error { // Remove data err := t.Truncate(ctx) if err != nil { return errors.Trace(err) } txn, err := ctx.GetTxn(false) if err != nil { return errors.Trace(err) } // Remove indices for _, v := range t.Indices() { if v != nil && v.X != nil { if err = v.X.Drop(txn); err != nil { return errors.Trace(err) } } } // Remove auto ID key err = txn.Delete([]byte(meta.AutoIDKey(t.TableID()))) // Auto ID meta is created when the first time used, so it may not exist. if errors2.ErrorEqual(err, kv.ErrNotExist) { return nil } return errors.Trace(err) }