func()

in datahub/batchrecord.go [187:217]


func (deserializer *batchDeserializer) deserializeBatchHeader(data []byte) (*batchRecordHeader, error) {
	if len(data) < batchRecordHeaderSize {
		return nil, fmt.Errorf("read batch header fail")
	}

	header := &batchRecordHeader{}
	header.magic = int(binary.LittleEndian.Uint32(data[0:]))
	header.version = int(binary.LittleEndian.Uint32(data[4:]))
	header.length = int(binary.LittleEndian.Uint32(data[8:]))
	header.rawSize = int(binary.LittleEndian.Uint32(data[12:]))
	header.crc32 = binary.LittleEndian.Uint32(data[16:])
	header.attributes = int16(binary.LittleEndian.Uint16(data[20:]))
	header.recordCount = int(binary.LittleEndian.Uint32(data[22:]))

	if header.magic != batchMagicNum {
		return nil, fmt.Errorf("check magic number fail")
	}

	if header.length != len(data) {
		return nil, fmt.Errorf("check payload length fail")
	}

	if header.crc32 != 0 {
		calCrc := calculateCrc32(data[batchRecordHeaderSize:header.length])
		if calCrc != header.crc32 {
			return nil, fmt.Errorf("check crc fail. expect:%d, real:%d", header.crc32, calCrc)
		}
	}

	return header, nil
}