You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@rocketmq.apache.org by di...@apache.org on 2020/02/24 02:40:52 UTC
[rocketmq-client-go] branch native updated: feat: reuse
bytes.Buffer (#408)
This is an automated email from the ASF dual-hosted git repository.
dinglei pushed a commit to branch native
in repository https://gitbox.apache.org/repos/asf/rocketmq-client-go.git
The following commit(s) were added to refs/heads/native by this push:
new 2e05fc0 feat: reuse bytes.Buffer (#408)
2e05fc0 is described below
commit 2e05fc0598fd08e03d6f66f8dec98269d31042fe
Author: xujianhai666 <52...@users.noreply.github.com>
AuthorDate: Mon Feb 24 10:40:43 2020 +0800
feat: reuse bytes.Buffer (#408)
- use sync.pool of bytes.Buffer instead of new
closes #407
---
primitive/message.go | 11 ++++++-----
primitive/pool.go | 16 ++++++++++++++++
primitive/result_test.go | 15 +++++++++++++--
3 files changed, 35 insertions(+), 7 deletions(-)
diff --git a/primitive/message.go b/primitive/message.go
index 12f41cc..7d12edb 100644
--- a/primitive/message.go
+++ b/primitive/message.go
@@ -364,7 +364,7 @@ func DecodeMessage(data []byte) []*MessageExt {
}
count += 2 + int(propertiesLength)
- msg.MsgId = createMessageId(hostBytes, port, msg.CommitLogOffset)
+ msg.MsgId = CreateMessageId(hostBytes, port, msg.CommitLogOffset)
//count += 16
if msg.properties == nil {
msg.properties = make(map[string]string, 0)
@@ -436,11 +436,12 @@ type MessageID struct {
Offset int64
}
-func createMessageId(addr []byte, port int32, offset int64) string {
- buffer := new(bytes.Buffer)
+func CreateMessageId(addr []byte, port int32, offset int64) string {
+ buffer := GetBuffer()
+ defer BackBuffer(buffer)
buffer.Write(addr)
- binary.Write(buffer, binary.BigEndian, port)
- binary.Write(buffer, binary.BigEndian, offset)
+ _ = binary.Write(buffer, binary.BigEndian, port)
+ _ = binary.Write(buffer, binary.BigEndian, offset)
return strings.ToUpper(hex.EncodeToString(buffer.Bytes()))
}
diff --git a/primitive/pool.go b/primitive/pool.go
index 5f729e7..946c18e 100644
--- a/primitive/pool.go
+++ b/primitive/pool.go
@@ -18,15 +18,20 @@ limitations under the License.
package primitive
import (
+ "bytes"
"sync"
)
var headerPool = sync.Pool{}
+var bufferPool = sync.Pool{}
func init() {
headerPool.New = func() interface{} {
return make([]byte, 4)
}
+ bufferPool.New = func() interface{} {
+ return new(bytes.Buffer)
+ }
}
func GetHeader() []byte {
@@ -38,3 +43,14 @@ func GetHeader() []byte {
func BackHeader(d []byte) {
headerPool.Put(d)
}
+
+func GetBuffer() *bytes.Buffer {
+ b := bufferPool.Get().(*bytes.Buffer)
+ b.Reset()
+ return b
+}
+
+func BackBuffer(b *bytes.Buffer) {
+ b.Reset()
+ bufferPool.Put(b)
+}
diff --git a/primitive/result_test.go b/primitive/result_test.go
index c0dd97e..fcc03cf 100644
--- a/primitive/result_test.go
+++ b/primitive/result_test.go
@@ -41,11 +41,22 @@ func TestCreateMessageId(t *testing.T) {
b := []byte{10, 93, 233, 58}
port := int32(10911)
offset := int64(4391252)
- id := createMessageId(b, port, offset)
-
+ id := CreateMessageId(b, port, offset)
Convey("generated messageId should be equal to expected", func() {
assert.Equal(t, "0A5DE93A00002A9F0000000000430154", id)
})
+
+ b2 := []byte("127.0.0.1")
+ port2 := int32(11)
+ offset2 := int64(12)
+ id2 := CreateMessageId(b2, port2, offset2)
+ Convey("new generated messageId should be equal to expected", func() {
+ assert.Equal(t, "3132372E302E302E310000000B000000000000000C", id2)
+ })
+
+ Convey("ex-generated messageId should not change", func() {
+ assert.Equal(t, "0A5DE93A00002A9F0000000000430154", id)
+ })
})
}