package notify const ( recordStreamMetadataCapBatchAckKey = "_notify.record_cap_batch_ack" recordStreamMetadataUseBatchAckKey = "_notify.record_use_batch_ack" recordStreamMetadataEnabledValue = "1" ) func advertiseRecordStreamOpenMetadata(metadata StreamMetadata) StreamMetadata { metadata = cloneStreamMetadata(metadata) if metadata == nil { metadata = make(StreamMetadata, 1) } metadata[recordStreamMetadataCapBatchAckKey] = recordStreamMetadataEnabledValue return metadata } func negotiateRecordStreamOpenMetadata(channel StreamChannel, metadata StreamMetadata) (StreamMetadata, StreamMetadata) { metadata = cloneStreamMetadata(metadata) if normalizeStreamChannel(channel) != StreamRecordChannel { return metadata, nil } if metadata[recordStreamMetadataCapBatchAckKey] != recordStreamMetadataEnabledValue { return metadata, nil } metadata[recordStreamMetadataUseBatchAckKey] = recordStreamMetadataEnabledValue return metadata, StreamMetadata{ recordStreamMetadataUseBatchAckKey: recordStreamMetadataEnabledValue, } } func mergeStreamMetadata(base StreamMetadata, overlay StreamMetadata) StreamMetadata { if len(base) == 0 && len(overlay) == 0 { return nil } merged := cloneStreamMetadata(base) if merged == nil { merged = make(StreamMetadata, len(overlay)) } for key, value := range overlay { merged[key] = value } return merged } func recordStreamUseBatchAck(metadata StreamMetadata) bool { return metadata[recordStreamMetadataUseBatchAckKey] == recordStreamMetadataEnabledValue }