Example #1
0
func fillBufFile(bufFile *BufFile, off int64, fileSize int64, client *oss.Client, fileName string) error {
	endOff := off + int64(bufFile.cacheSize)
	if endOff > fileSize {
		endOff = fileSize
	}
	_, reader, err := client.GetObjectRange(bufFile.bucket, fileName, off, endOff-1)
	log.Printf("q %d endoff %d \n", off, endOff-1)
	//callNum = callNum + 1
	//if callNum > 1000000 {
	//	return fmt.Errorf("call num exceed!")
	//}
	data := make([]byte, endOff-off)
	if err != nil {
		log.Printf("make failed!len(data):%d, endoff:%d, off:%d", len(data), endOff, off)
		return err
	}
	num := 0
	for {
		l, err := reader.Read(data[num:])
		if err != nil && err != io.EOF {
			log.Printf("reader.Read failed len(data):%d, num:%d\n", err, len(data), num)
			return err
		}
		num = num + l
		if num == len(data) {
			bufFile.data = data
			bufFile.endOff = endOff
			bufFile.off = off
			bufFile.size = int(endOff - off)
			return nil
		}
	}
}