File tree 5 files changed +47
-4
lines changed
5 files changed +47
-4
lines changed Original file line number Diff line number Diff line change 4
4
"encoding/binary"
5
5
"fmt"
6
6
"hash/crc32"
7
+ "sync"
7
8
)
8
9
9
10
type crcPolynomial int8
@@ -13,6 +14,22 @@ const (
13
14
crcCastagnoli
14
15
)
15
16
17
+ var crc32FieldPool = sync.Pool {}
18
+
19
+ func acquireCrc32Field (polynomial crcPolynomial ) * crc32Field {
20
+ val := crc32FieldPool .Get ()
21
+ if val != nil {
22
+ c := val .(* crc32Field )
23
+ c .polynomial = polynomial
24
+ return c
25
+ }
26
+ return newCRC32Field (polynomial )
27
+ }
28
+
29
+ func releaseCrc32Field (c * crc32Field ) {
30
+ crc32FieldPool .Put (c )
31
+ }
32
+
16
33
var castagnoliTable = crc32 .MakeTable (crc32 .Castagnoli )
17
34
18
35
// crc32Field implements the pushEncoder and pushDecoder interfaces for calculating CRC32s.
Original file line number Diff line number Diff line change 1
1
package sarama
2
2
3
- import "encoding/binary"
3
+ import (
4
+ "encoding/binary"
5
+ "sync"
6
+ )
4
7
5
8
// LengthField implements the PushEncoder and PushDecoder interfaces for calculating 4-byte lengths.
6
9
type lengthField struct {
7
10
startOffset int
8
11
length int32
9
12
}
10
13
14
+ var lengthFieldPool = sync.Pool {}
15
+
16
+ func acquireLengthField () * lengthField {
17
+ val := lengthFieldPool .Get ()
18
+ if val != nil {
19
+ return val .(* lengthField )
20
+ }
21
+ return & lengthField {}
22
+ }
23
+
24
+ func releaseLengthField (m * lengthField ) {
25
+ lengthFieldPool .Put (m )
26
+ }
27
+
11
28
func (l * lengthField ) decode (pd packetDecoder ) error {
12
29
var err error
13
30
l .length , err = pd .getInt32 ()
Original file line number Diff line number Diff line change @@ -103,7 +103,10 @@ func (m *Message) encode(pe packetEncoder) error {
103
103
}
104
104
105
105
func (m * Message ) decode (pd packetDecoder ) (err error ) {
106
- err = pd .push (newCRC32Field (crcIEEE ))
106
+ crc32Decoder := acquireCrc32Field (crcIEEE )
107
+ defer releaseCrc32Field (crc32Decoder )
108
+
109
+ err = pd .push (crc32Decoder )
107
110
if err != nil {
108
111
return err
109
112
}
Original file line number Diff line number Diff line change @@ -29,7 +29,10 @@ func (msb *MessageBlock) decode(pd packetDecoder) (err error) {
29
29
return err
30
30
}
31
31
32
- if err = pd .push (& lengthField {}); err != nil {
32
+ lengthDecoder := acquireLengthField ()
33
+ defer releaseLengthField (lengthDecoder )
34
+
35
+ if err = pd .push (lengthDecoder ); err != nil {
33
36
return err
34
37
}
35
38
Original file line number Diff line number Diff line change @@ -116,7 +116,10 @@ func (b *RecordBatch) decode(pd packetDecoder) (err error) {
116
116
return err
117
117
}
118
118
119
- if err = pd .push (& crc32Field {polynomial : crcCastagnoli }); err != nil {
119
+ crc32Decoder := acquireCrc32Field (crcCastagnoli )
120
+ defer releaseCrc32Field (crc32Decoder )
121
+
122
+ if err = pd .push (crc32Decoder ); err != nil {
120
123
return err
121
124
}
122
125
You can’t perform that action at this time.
0 commit comments