Skip to content

Commit 0d1a4ce

Browse files
committed
Merge remote-tracking branch 'origin/dev' into release-2.5.0
2 parents 68f31a9 + 126e0e7 commit 0d1a4ce

File tree

2 files changed

+23
-2
lines changed

2 files changed

+23
-2
lines changed

cmd/pbm-agent/agent.go

Lines changed: 3 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -103,6 +103,9 @@ func (a *Agent) Start(ctx context.Context) error {
103103
logger := log.FromContext(ctx)
104104
logger.Printf("pbm-agent:\n%s", version.Current().All(""))
105105
logger.Printf("node: %s/%s", a.brief.SetName, a.brief.Me)
106+
logger.Printf("conn level ReadConcern: %v; WriteConcern: %v",
107+
a.leadConn.MongoOptions().ReadConcern.Level,
108+
a.leadConn.MongoOptions().WriteConcern.W)
106109

107110
c, cerr := ctrl.ListenCmd(ctx, a.leadConn, a.closeCMD)
108111

pbm/connect/connect.go

Lines changed: 20 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -41,14 +41,25 @@ func Direct(direct bool) MongoOption {
4141
// If the option is not specified the default is: [readconcern.Majority].
4242
func ReadConcern(readConcern *readconcern.ReadConcern) MongoOption {
4343
return func(opts *options.ClientOptions) error {
44-
if readConcern == nil {
45-
return errors.New("ReadConcern not specified")
44+
if err := validateReadConcern(readConcern); err != nil {
45+
return err
4646
}
4747
opts.SetReadConcern(readConcern)
4848
return nil
4949
}
5050
}
5151

52+
func validateReadConcern(readConcern *readconcern.ReadConcern) error {
53+
if readConcern == nil {
54+
return errors.New("ReadConcern not specified")
55+
}
56+
if readConcern.Level != readconcern.Local().Level &&
57+
readConcern.Level != readconcern.Majority().Level {
58+
return errors.New("ReadConcern level is not allowed")
59+
}
60+
return nil
61+
}
62+
5263
// WriteConcern option sets level of acknowledgment for write operation.
5364
// For PBM typically use: [writeconcern.W1] or [writeconcern.Majority].
5465
// If the option is not specified the default is: [writeconcern.Majority].
@@ -147,6 +158,13 @@ func validateConnStringOpts(opts *options.ClientOptions) error {
147158
if err = validateWriteConcern(opts.WriteConcern); err != nil {
148159
return err
149160
}
161+
if err = validateReadConcern(opts.ReadConcern); err != nil {
162+
return err
163+
}
164+
if opts.ReadConcern.Level == readconcern.Majority().Level &&
165+
opts.WriteConcern.W == writeconcern.W1().W {
166+
return errors.New("ReadConcern majority and WriteConcern 1 is not allowed")
167+
}
150168

151169
return nil
152170
}

0 commit comments

Comments
 (0)