// CreateBPlusTree 创建一棵B+树, 并返回其bootUUID. func Create(dm dm.DataManager) (utils.UUID, error) { rawRoot := newNilRootRaw() rootUUID, err := dm.Insert(tm.SUPER_XID, rawRoot) if err != nil { return utils.NilUUID, err } bootUUID, err := dm.Insert(tm.SUPER_XID, utils.UUIDToRaw(rootUUID)) if err != nil { return utils.NilUUID, err } return bootUUID, nil }
// updaterootUUID 更新该树的根节点 func (bt *bPlusTree) updateRootUUID(left, right, rightKey utils.UUID) error { bt.bootLock.Lock() defer bt.bootLock.Unlock() rootRaw := newRootRaw(left, right, rightKey) newRootUUID, err := bt.DM.Insert(tm.SUPER_XID, rootRaw) if err != nil { return err } bt.bootDataitem.Before() copy(bt.bootDataitem.Data(), utils.UUIDToRaw(newRootUUID)) bt.bootDataitem.After(tm.SUPER_XID) return nil }
func XIDToRaw(xid XID) []byte { return utils.UUIDToRaw(utils.UUID(xid)) }