Exemplo n.º 1
0
// 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
}
Exemplo n.º 2
0
// 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
}
Exemplo n.º 3
0
func XIDToRaw(xid XID) []byte {
	return utils.UUIDToRaw(utils.UUID(xid))
}