예제 #1
0
파일: smgr.go 프로젝트: umitanuki/bigpot
func (md *mdRelation) NBlocks() (system.BlockNumber, error) {
	relpath := system.RelPath(md.node)

	fi, err := os.Stat(relpath)
	if err != nil {
		return 0, err
	}
	return system.BlockNumber(fi.Size() / int64(system.BlockSize)), nil
}
예제 #2
0
파일: heap.go 프로젝트: umitanuki/bigpot
func (rel *HeapRelation) GetNumberOfBlocks() (system.BlockNumber, error) {
	relpath := system.RelPath(rel.RelNode)
	fi, err := os.Stat(relpath)
	if err != nil {
		return 0, err
	}
	size := fi.Size()
	if size%system.BlockSize != 0 {
		return 0, fmt.Errorf("size of %s = %d is not module BlockSize", size, relpath)
	}

	return system.BlockNumber(size / system.BlockSize), nil
}
예제 #3
0
파일: smgr.go 프로젝트: umitanuki/bigpot
func (md *mdRelation) openFile() error {
	// TODO: do we care concurrency?
	if md.file == nil {
		relpath := system.RelPath(md.node)
		file, err := os.OpenFile(relpath, os.O_RDWR, 0600)
		if err != nil {
			md.file = nil
			return err
		}
		md.file = file
	}

	return nil
}