Skip to content

Commit 7071f87

Browse files
authored
Merge branch 'main' into dependabot/go_modules/go.mongodb.org/mongo-driver-1.11.6
2 parents b6691d8 + 418465f commit 7071f87

File tree

8 files changed

+62
-15
lines changed

8 files changed

+62
-15
lines changed

config/configuration.go

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -50,6 +50,7 @@ const (
5050
HeartBtIntOverride string = "HeartBtIntOverride"
5151
FileLogPath string = "FileLogPath"
5252
FileStorePath string = "FileStorePath"
53+
FileStoreSync string = "FileStoreSync"
5354
SQLStoreDriver string = "SQLStoreDriver"
5455
SQLStoreDataSourceName string = "SQLStoreDataSourceName"
5556
SQLStoreConnMaxLifetime string = "SQLStoreConnMaxLifetime"

field_map.go

Lines changed: 8 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -227,6 +227,14 @@ func (m *FieldMap) SetString(tag Tag, value string) *FieldMap {
227227
return m.SetBytes(tag, []byte(value))
228228
}
229229

230+
// Remove removes a tag from field map.
231+
func (m *FieldMap) Remove(tag Tag) {
232+
m.rwLock.Lock()
233+
defer m.rwLock.Unlock()
234+
235+
delete(m.tagLookup, tag)
236+
}
237+
230238
// Clear purges all fields from field map.
231239
func (m *FieldMap) Clear() {
232240
m.rwLock.Lock()

field_map_test.go

Lines changed: 12 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -190,3 +190,15 @@ func TestFieldMap_CopyInto(t *testing.T) {
190190
assert.Nil(t, err)
191191
assert.Equal(t, "a", s)
192192
}
193+
194+
func TestFieldMap_Remove(t *testing.T) {
195+
var fMap FieldMap
196+
fMap.init()
197+
198+
fMap.SetField(1, FIXString("hello"))
199+
fMap.SetField(2, FIXString("world"))
200+
201+
fMap.Remove(1)
202+
assert.False(t, fMap.Has(1))
203+
assert.True(t, fMap.Has(2))
204+
}

filestore.go

Lines changed: 28 additions & 11 deletions
Original file line numberDiff line numberDiff line change
@@ -52,6 +52,7 @@ type fileStore struct {
5252
sessionFile *os.File
5353
senderSeqNumsFile *os.File
5454
targetSeqNumsFile *os.File
55+
fileSync bool
5556
}
5657

5758
// NewFileStoreFactory returns a file-based implementation of MessageStoreFactory.
@@ -77,10 +78,19 @@ func (f fileStoreFactory) Create(sessionID SessionID) (msgStore MessageStore, er
7778
if err != nil {
7879
return nil, err
7980
}
80-
return newFileStore(sessionID, dirname)
81+
var fsync bool
82+
if sessionSettings.HasSetting(config.FileStoreSync) {
83+
fsync, err = sessionSettings.BoolSetting(config.FileStoreSync)
84+
if err != nil {
85+
return nil, err
86+
}
87+
} else {
88+
fsync = true //existing behavior is to fsync writes
89+
}
90+
return newFileStore(sessionID, dirname, fsync)
8191
}
8292

83-
func newFileStore(sessionID SessionID, dirname string) (*fileStore, error) {
93+
func newFileStore(sessionID SessionID, dirname string, fileSync bool) (*fileStore, error) {
8494
if err := os.MkdirAll(dirname, os.ModePerm); err != nil {
8595
return nil, err
8696
}
@@ -96,6 +106,7 @@ func newFileStore(sessionID SessionID, dirname string) (*fileStore, error) {
96106
sessionFname: path.Join(dirname, fmt.Sprintf("%s.%s", sessionPrefix, "session")),
97107
senderSeqNumsFname: path.Join(dirname, fmt.Sprintf("%s.%s", sessionPrefix, "senderseqnums")),
98108
targetSeqNumsFname: path.Join(dirname, fmt.Sprintf("%s.%s", sessionPrefix, "targetseqnums")),
109+
fileSync: fileSync,
99110
}
100111

101112
if err := store.Refresh(); err != nil {
@@ -232,8 +243,10 @@ func (store *fileStore) setSession() error {
232243
if _, err := store.sessionFile.Write(data); err != nil {
233244
return fmt.Errorf("unable to write to file: %s: %s", store.sessionFname, err.Error())
234245
}
235-
if err := store.sessionFile.Sync(); err != nil {
236-
return fmt.Errorf("unable to flush file: %s: %s", store.sessionFname, err.Error())
246+
if store.fileSync {
247+
if err := store.sessionFile.Sync(); err != nil {
248+
return fmt.Errorf("unable to flush file: %s: %s", store.sessionFname, err.Error())
249+
}
237250
}
238251
return nil
239252
}
@@ -245,8 +258,10 @@ func (store *fileStore) setSeqNum(f *os.File, seqNum int) error {
245258
if _, err := fmt.Fprintf(f, "%019d", seqNum); err != nil {
246259
return fmt.Errorf("unable to write to file: %s: %s", f.Name(), err.Error())
247260
}
248-
if err := f.Sync(); err != nil {
249-
return fmt.Errorf("unable to flush file: %s: %s", f.Name(), err.Error())
261+
if store.fileSync {
262+
if err := f.Sync(); err != nil {
263+
return fmt.Errorf("unable to flush file: %s: %s", f.Name(), err.Error())
264+
}
250265
}
251266
return nil
252267
}
@@ -313,11 +328,13 @@ func (store *fileStore) SaveMessage(seqNum int, msg []byte) error {
313328
if _, err := store.bodyFile.Write(msg); err != nil {
314329
return fmt.Errorf("unable to write to file: %s: %s", store.bodyFname, err.Error())
315330
}
316-
if err := store.bodyFile.Sync(); err != nil {
317-
return fmt.Errorf("unable to flush file: %s: %s", store.bodyFname, err.Error())
318-
}
319-
if err := store.headerFile.Sync(); err != nil {
320-
return fmt.Errorf("unable to flush file: %s: %s", store.headerFname, err.Error())
331+
if store.fileSync {
332+
if err := store.bodyFile.Sync(); err != nil {
333+
return fmt.Errorf("unable to flush file: %s: %s", store.bodyFname, err.Error())
334+
}
335+
if err := store.headerFile.Sync(); err != nil {
336+
return fmt.Errorf("unable to flush file: %s: %s", store.headerFname, err.Error())
337+
}
321338
}
322339

323340
store.offsets[seqNum] = msgDef{offset: offset, size: len(msg)}

go.mod

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -7,7 +7,7 @@ require (
77
github.com/mattn/go-sqlite3 v1.14.16
88
github.com/pkg/errors v0.9.1
99
github.com/shopspring/decimal v1.3.1
10-
github.com/stretchr/testify v1.8.1
10+
github.com/stretchr/testify v1.8.2
1111
go.mongodb.org/mongo-driver v1.11.6
1212
golang.org/x/net v0.5.0
1313
)

go.sum

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -37,8 +37,8 @@ github.com/stretchr/objx v0.5.0/go.mod h1:Yh+to48EsGEfYuaHDzXPcE3xhTkx73EhmCGUpE
3737
github.com/stretchr/testify v1.6.1/go.mod h1:6Fq8oRcR53rry900zMqJjRRixrwX3KX962/h/Wwjteg=
3838
github.com/stretchr/testify v1.7.1/go.mod h1:6Fq8oRcR53rry900zMqJjRRixrwX3KX962/h/Wwjteg=
3939
github.com/stretchr/testify v1.8.0/go.mod h1:yNjHg4UonilssWZ8iaSj1OCr/vHnekPRkoO+kdMU+MU=
40-
github.com/stretchr/testify v1.8.1 h1:w7B6lhMri9wdJUVmEZPGGhZzrYTPvgJArz7wNPgYKsk=
41-
github.com/stretchr/testify v1.8.1/go.mod h1:w2LPCIKwWwSfY2zedu0+kehJoqGctiVI29o6fzry7u4=
40+
github.com/stretchr/testify v1.8.2 h1:+h33VjcLVPDHtOdpUCuF+7gSuG3yGIftsP1YvFihtJ8=
41+
github.com/stretchr/testify v1.8.2/go.mod h1:w2LPCIKwWwSfY2zedu0+kehJoqGctiVI29o6fzry7u4=
4242
github.com/tidwall/pretty v1.0.0 h1:HsD+QiTn7sK6flMKIvNmpqz1qrpP3Ps6jOKIKMooyg4=
4343
github.com/tidwall/pretty v1.0.0/go.mod h1:XNkn88O1ChpSDQmQeStsy+sBenx6DDtFZJxhVysOjyk=
4444
github.com/xdg-go/pbkdf2 v1.0.0 h1:Su7DPu48wXMwC3bs7MCNG+z4FhcyEuz5dlvchbq0B0c=

message.go

Lines changed: 8 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -272,7 +272,6 @@ func ParseMessageWithDataDictionary(
272272
}
273273

274274
return
275-
276275
}
277276

278277
func isHeaderField(tag Tag, dataDict *datadictionary.DataDictionary) bool {
@@ -390,6 +389,14 @@ func extractField(parsedFieldBytes *TagValue, buffer []byte) (remBytes []byte, e
390389
return buffer[(endIndex + 1):], err
391390
}
392391

392+
func (m *Message) Bytes() []byte {
393+
if m.rawMessage != nil {
394+
return m.rawMessage.Bytes()
395+
}
396+
397+
return m.build()
398+
}
399+
393400
func (m *Message) String() string {
394401
if m.rawMessage != nil {
395402
return m.rawMessage.String()

message_test.go

Lines changed: 2 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -222,12 +222,14 @@ func (s *MessageSuite) TestCopyIntoMessage() {
222222
s.Nil(ParseMessage(s.msg, bytes.NewBufferString(newMsgString)))
223223
s.True(s.msg.IsMsgTypeOf("A"))
224224
s.Equal(s.msg.String(), newMsgString)
225+
s.Equal(string(s.msg.Bytes()), newMsgString)
225226

226227
// clear the source buffer also
227228
msgBuf.Reset()
228229

229230
s.True(dest.IsMsgTypeOf("D"))
230231
s.Equal(dest.String(), renderedString)
232+
s.Equal(string(dest.Bytes()), renderedString)
231233
}
232234

233235
func checkFieldInt(s *MessageSuite, fields FieldMap, tag, expected int) {

0 commit comments

Comments
 (0)