diff options
| author | chrislu <chris.lu@gmail.com> | 2022-09-25 11:19:05 -0700 |
|---|---|---|
| committer | chrislu <chris.lu@gmail.com> | 2022-09-25 11:19:05 -0700 |
| commit | 600d2f92a44b8fb76653ef0547bce5a406e82eb8 (patch) | |
| tree | 7e45cf7c4e38540728e1049ccf21fbaec3675fa7 /weed/mq/messages/message_buffer.go | |
| parent | 15b6c7a6f0adad7d0638b770c082d73f8a612c89 (diff) | |
| download | seaweedfs-600d2f92a44b8fb76653ef0547bce5a406e82eb8.tar.xz seaweedfs-600d2f92a44b8fb76653ef0547bce5a406e82eb8.zip | |
add message pipeline
Diffstat (limited to 'weed/mq/messages/message_buffer.go')
| -rw-r--r-- | weed/mq/messages/message_buffer.go | 53 |
1 files changed, 53 insertions, 0 deletions
diff --git a/weed/mq/messages/message_buffer.go b/weed/mq/messages/message_buffer.go new file mode 100644 index 000000000..9e61d0dfb --- /dev/null +++ b/weed/mq/messages/message_buffer.go @@ -0,0 +1,53 @@ +package messages + +import ( + flatbuffers "github.com/google/flatbuffers/go" + "github.com/seaweedfs/seaweedfs/weed/mq/segment" +) + +type MessageBuffer struct { + fbsBuffer *flatbuffers.Builder + sequenceBase int64 + counter int64 + bb *segment.MessageBatchBuilder + isSealed bool +} + +func NewMessageBuffer() *MessageBuffer { + t := &MessageBuffer{ + fbsBuffer: flatbuffers.NewBuilder(4 * 1024 * 1024), + } + t.bb = segment.NewMessageBatchBuilder(t.fbsBuffer) + return t +} + +func (mb *MessageBuffer) Reset(sequenceBase int64) { + mb.sequenceBase = sequenceBase + mb.counter = 0 + mb.bb.Reset() +} + +func (mb *MessageBuffer) AddMessage(message *Message) { + mb.bb.AddMessage(mb.sequenceBase, message.Ts.UnixMilli(), message.Properties, message.Key, message.Content) + mb.sequenceBase++ + mb.counter++ +} + +func (mb *MessageBuffer) Len() int { + return int(mb.counter) +} + +func (mb *MessageBuffer) Seal(producerId int32, + producerEpoch int32, + segmentId int32, + flags int32) { + mb.isSealed = true + mb.bb.BuildMessageBatch(producerId, producerEpoch, segmentId, flags) +} + +func (mb *MessageBuffer) Bytes() []byte { + if !mb.isSealed { + return nil + } + return mb.bb.GetBytes() +} |
