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
}