func()

in datahub/batchrecord.go [104:141]


func (serializer *batchSerializer) serializeBatchRecord(batch *batchRecord) ([]byte, error) {
	calSize := batchRecordHeaderSize
	for _, bRecord := range batch.records {
		calSize += bRecord.getRecordSize()
	}

	writer := &bytes.Buffer{}
	writer.Grow(calSize)
	writer.Write(make([]byte, batchRecordHeaderSize))

	for _, bRecord := range batch.records {
		if err := serializer.bSerializer.serializeBinaryRecord(writer, bRecord); err != nil {
			return nil, err
		}
	}

	data := writer.Bytes()

	if batch.header == nil {
		batch.header = &batchRecordHeader{}
	}

	batch.header.magic = int(batchMagicNum)
	batch.header.version = 0
	batch.header.rawSize = len(data) - batchRecordHeaderSize
	batch.header.length = len(data)
	batch.header.attributes = int16(serializer.cType.toValue() & 3)
	batch.header.recordCount = len(batch.records)

	data, err := serializer.compressIfNeed(data, batch)
	if err != nil {
		return nil, err
	}

	batch.header.crc32 = calculateCrc32(data[batchRecordHeaderSize:])
	copy(data, serializer.serializeBatchHeader(batch.header))
	return data, nil
}