Skip to content

Commit 509ccd4

Browse files
Revert "GODRIVER-3533 Optimize value reader and writer (#2022)"
This reverts commit 8c453d2.
1 parent faa7fe7 commit 509ccd4

File tree

4 files changed

+6
-90
lines changed

4 files changed

+6
-90
lines changed

bson/marshal.go

Lines changed: 1 addition & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -74,10 +74,7 @@ func Marshal(val interface{}) ([]byte, error) {
7474
}
7575
}()
7676
sw.Reset()
77-
78-
vw := getDocumentWriter(sw)
79-
defer putDocumentWriter(vw)
80-
77+
vw := NewDocumentWriter(sw)
8178
enc := encPool.Get().(*Encoder)
8279
defer encPool.Put(enc)
8380
enc.Reset(vw)

bson/unmarshal.go

Lines changed: 1 addition & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -42,9 +42,7 @@ type ValueUnmarshaler interface {
4242
// When unmarshaling BSON, if the BSON value is null and the Go value is a
4343
// pointer, the pointer is set to nil without calling UnmarshalBSONValue.
4444
func Unmarshal(data []byte, val interface{}) error {
45-
vr := getDocumentReader(bytes.NewReader(data))
46-
defer putDocumentReader(vr)
47-
45+
vr := newDocumentReader(bytes.NewReader(data))
4846
if l, err := vr.peekLength(); err != nil {
4947
return err
5048
} else if int(l) != len(data) {

bson/value_reader.go

Lines changed: 4 additions & 60 deletions
Original file line numberDiff line numberDiff line change
@@ -13,7 +13,6 @@ import (
1313
"fmt"
1414
"io"
1515
"math"
16-
"sync"
1716
)
1817

1918
var _ ValueReader = &valueReader{}
@@ -30,20 +29,6 @@ type vrState struct {
3029
end int64
3130
}
3231

33-
var bufioReaderPool = sync.Pool{
34-
New: func() interface{} {
35-
return bufio.NewReader(nil)
36-
},
37-
}
38-
39-
var vrPool = sync.Pool{
40-
New: func() interface{} {
41-
return &valueReader{
42-
stack: make([]vrState, 1, 5),
43-
}
44-
},
45-
}
46-
4732
// valueReader is for reading BSON values.
4833
type valueReader struct {
4934
r *bufio.Reader
@@ -53,33 +38,6 @@ type valueReader struct {
5338
frame int64
5439
}
5540

56-
func getDocumentReader(r io.Reader) *valueReader {
57-
vr := vrPool.Get().(*valueReader)
58-
59-
vr.offset = 0
60-
vr.frame = 0
61-
62-
vr.stack = vr.stack[:1]
63-
vr.stack[0] = vrState{mode: mTopLevel}
64-
65-
br := bufioReaderPool.Get().(*bufio.Reader)
66-
br.Reset(r)
67-
vr.r = br
68-
69-
return vr
70-
}
71-
72-
func putDocumentReader(vr *valueReader) {
73-
if vr == nil {
74-
return
75-
}
76-
77-
bufioReaderPool.Put(vr.r)
78-
vr.r = nil
79-
80-
vrPool.Put(vr)
81-
}
82-
8341
// NewDocumentReader returns a ValueReader using b for the underlying BSON
8442
// representation.
8543
func NewDocumentReader(r io.Reader) ValueReader {
@@ -295,28 +253,14 @@ func (vr *valueReader) appendNextElement(dst []byte) ([]byte, error) {
295253
return nil, err
296254
}
297255

298-
buf, err := vr.r.Peek(int(length))
256+
buf := make([]byte, length)
257+
_, err = io.ReadFull(vr.r, buf)
299258
if err != nil {
300-
if err == bufio.ErrBufferFull {
301-
temp := make([]byte, length)
302-
if _, err = io.ReadFull(vr.r, temp); err != nil {
303-
return nil, err
304-
}
305-
dst = append(dst, temp...)
306-
vr.offset += int64(len(temp))
307-
return dst, nil
308-
}
309-
310259
return nil, err
311260
}
312-
313261
dst = append(dst, buf...)
314-
if _, err = vr.r.Discard(int(length)); err != nil {
315-
return nil, err
316-
}
317-
318-
vr.offset += int64(length)
319-
return dst, nil
262+
vr.offset += int64(len(buf))
263+
return dst, err
320264
}
321265

322266
func (vr *valueReader) readValueBytes(dst []byte) (Type, []byte, error) {

bson/value_writer.go

Lines changed: 0 additions & 23 deletions
Original file line numberDiff line numberDiff line change
@@ -33,29 +33,6 @@ func putValueWriter(vw *valueWriter) {
3333
}
3434
}
3535

36-
var documentWriterPool = sync.Pool{
37-
New: func() interface{} {
38-
return newDocumentWriter(nil)
39-
},
40-
}
41-
42-
func getDocumentWriter(w io.Writer) *valueWriter {
43-
vw := documentWriterPool.Get().(*valueWriter)
44-
45-
vw.reset(vw.buf)
46-
vw.buf = vw.buf[:0]
47-
vw.w = w
48-
49-
return vw
50-
}
51-
52-
func putDocumentWriter(vw *valueWriter) {
53-
if vw != nil {
54-
vw.w = nil // don't leak the writer
55-
documentWriterPool.Put(vw)
56-
}
57-
}
58-
5936
// This is here so that during testing we can change it and not require
6037
// allocating a 4GB slice.
6138
var maxSize = math.MaxInt32

0 commit comments

Comments
 (0)