Skip to content

Commit ecd4e1a

Browse files
committed
code polish
1 parent 89947bd commit ecd4e1a

File tree

8 files changed

+50
-411
lines changed

8 files changed

+50
-411
lines changed

internal/integration/client_test.go

Lines changed: 28 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -719,6 +719,11 @@ func TestClient(t *testing.T) {
719719
})
720720
}
721721
})
722+
}
723+
724+
func TestClient_BulkWrite(t *testing.T) {
725+
mt := mtest.New(t, noClientOpts)
726+
722727
mtBulkWriteOpts := mtest.NewOptions().MinServerVersion("8.0").AtlasDataLake(false).ClientType(mtest.Pinned)
723728
mt.RunOpts("bulk write with nil filter", mtBulkWriteOpts, func(mt *mtest.T) {
724729
mt.Parallel()
@@ -808,6 +813,29 @@ func TestClient(t *testing.T) {
808813
})
809814
}
810815
})
816+
var bulkWrites int
817+
cmdMonitor := &event.CommandMonitor{
818+
Started: func(_ context.Context, evt *event.CommandStartedEvent) {
819+
if evt.CommandName == "bulkWrite" {
820+
bulkWrites++
821+
}
822+
},
823+
}
824+
clientOpts := options.Client().SetMonitor(cmdMonitor)
825+
mt.RunOpts("bulk write with large messages", mtBulkWriteOpts.ClientOptions(clientOpts), func(mt *mtest.T) {
826+
mt.Parallel()
827+
828+
document := bson.D{{"largeField", strings.Repeat("a", 16777216-100)}} // Adjust size to account for BSON overhead
829+
writes := []mongo.ClientBulkWrite{
830+
{"db", "x", mongo.NewClientInsertOneModel().SetDocument(document)},
831+
{"db", "x", mongo.NewClientInsertOneModel().SetDocument(document)},
832+
{"db", "x", mongo.NewClientInsertOneModel().SetDocument(document)},
833+
}
834+
835+
_, err := mt.Client.BulkWrite(context.Background(), writes)
836+
require.NoError(t, err)
837+
assert.Equal(t, 2, bulkWrites, "expected %d bulkWrites, got %d", 2, bulkWrites)
838+
})
811839
}
812840

813841
func TestClient_BSONOptions(t *testing.T) {

internal/integration/crud_prose_test.go

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -775,8 +775,8 @@ func TestClientBulkWrite(t *testing.T) {
775775
assert.Error(mt, err, "expected a BulkWrite error")
776776
bwe, ok := err.(mongo.ClientBulkWriteException)
777777
require.True(mt, ok, "expected a BulkWriteException, got %T: %v", err, err)
778-
require.NotNil(mt, bwe.TopLevelError)
779-
assert.Equal(mt, 8, bwe.TopLevelError.Code, "expected top level error code: %d, got; %d", 8, bwe.TopLevelError.Code)
778+
require.NotNil(mt, bwe.WriteError)
779+
assert.Equal(mt, 8, bwe.WriteError.Code, "expected top level error code: %d, got; %d", 8, bwe.WriteError.Code)
780780
require.NotNil(mt, bwe.PartialResult)
781781
assert.Equal(mt, int64(2), bwe.PartialResult.UpsertedCount, "expected UpsertedCount: %d, got: %d", 2, bwe.PartialResult.UpsertedCount)
782782
assert.Len(mt, bwe.PartialResult.UpdateResults, 1, "expected %d UpdateResults, got: %d", 1, len(bwe.PartialResult.UpdateResults))

internal/integration/unified/error.go

Lines changed: 3 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -218,9 +218,9 @@ func extractErrorDetails(err error) (errorDetails, bool) {
218218
}
219219
details.labels = converted.Labels
220220
case mongo.ClientBulkWriteException:
221-
if converted.TopLevelError != nil {
222-
details.raw = converted.TopLevelError.Raw
223-
details.codes = append(details.codes, int32(converted.TopLevelError.Code))
221+
if converted.WriteError != nil {
222+
details.raw = converted.WriteError.Raw
223+
details.codes = append(details.codes, int32(converted.WriteError.Code))
224224
}
225225
default:
226226
return errorDetails{}, false

mongo/bulk_write.go

Lines changed: 6 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -295,11 +295,11 @@ func createDeleteDoc(
295295
bsonOpts *options.BSONOptions,
296296
registry *bson.Registry,
297297
) (bsoncore.Document, error) {
298+
if filter == nil {
299+
return nil, fmt.Errorf("delete filter cannot be nil")
300+
}
298301
f, err := marshal(filter, bsonOpts, registry)
299302
if err != nil {
300-
if filter == nil {
301-
return nil, fmt.Errorf("%w: filter is required", err)
302-
}
303303
return nil, err
304304
}
305305

@@ -430,11 +430,11 @@ type updateDoc struct {
430430
}
431431

432432
func (doc updateDoc) marshal(bsonOpts *options.BSONOptions, registry *bson.Registry) (bsoncore.Document, error) {
433+
if doc.filter == nil {
434+
return nil, fmt.Errorf("update filter cannot be nil")
435+
}
433436
f, err := marshal(doc.filter, bsonOpts, registry)
434437
if err != nil {
435-
if doc.filter == nil {
436-
return nil, fmt.Errorf("%w: filter is required", err)
437-
}
438438
return nil, err
439439
}
440440

mongo/client_bulk_write.go

Lines changed: 8 additions & 8 deletions
Original file line numberDiff line numberDiff line change
@@ -91,7 +91,7 @@ func (bw *clientBulkWrite) execute(ctx context.Context) error {
9191
var ce CommandError
9292
if errors.As(err, &ce) {
9393
exception = &ClientBulkWriteException{
94-
TopLevelError: &WriteError{
94+
WriteError: &WriteError{
9595
Code: int(ce.Code),
9696
Message: ce.Message,
9797
Raw: ce.Raw,
@@ -435,7 +435,7 @@ func (mb *modelBatches) processResponse(ctx context.Context, resp bsoncore.Docum
435435
}
436436
if !res.Ok {
437437
return ClientBulkWriteException{
438-
TopLevelError: &WriteError{
438+
WriteError: &WriteError{
439439
Code: int(res.Code),
440440
Message: res.Errmsg,
441441
Raw: bson.Raw(resp),
@@ -616,11 +616,11 @@ func (d *clientUpdateDoc) marshal(bsonOpts *options.BSONOptions, registry *bson.
616616

617617
doc = bsoncore.AppendInt32Element(doc, "update", int32(d.namespace))
618618

619+
if d.filter == nil {
620+
return nil, fmt.Errorf("update filter cannot be nil")
621+
}
619622
f, err := marshal(d.filter, bsonOpts, registry)
620623
if err != nil {
621-
if d.filter == nil {
622-
return nil, fmt.Errorf("%w: filter is required", err)
623-
}
624624
return nil, err
625625
}
626626
doc = bsoncore.AppendDocumentElement(doc, "filter", f)
@@ -676,11 +676,11 @@ func (d *clientDeleteDoc) marshal(bsonOpts *options.BSONOptions, registry *bson.
676676

677677
doc = bsoncore.AppendInt32Element(doc, "delete", int32(d.namespace))
678678

679+
if d.filter == nil {
680+
return nil, fmt.Errorf("delete filter cannot be nil")
681+
}
679682
f, err := marshal(d.filter, bsonOpts, registry)
680683
if err != nil {
681-
if d.filter == nil {
682-
return nil, fmt.Errorf("%w: filter is required", err)
683-
}
684684
return nil, err
685685
}
686686
doc = bsoncore.AppendDocumentElement(doc, "filter", f)

mongo/client_test.go

Lines changed: 0 additions & 36 deletions
Original file line numberDiff line numberDiff line change
@@ -11,7 +11,6 @@ import (
1111
"errors"
1212
"math"
1313
"os"
14-
"strings"
1514
"testing"
1615
"time"
1716

@@ -515,39 +514,4 @@ func TestClient(t *testing.T) {
515514
errmsg := `invalid value "-1s" for "Timeout": value must be positive`
516515
assert.Equal(t, errmsg, err.Error(), "expected error %v, got %v", errmsg, err.Error())
517516
})
518-
t.Run("bulkWrite with large messages", func(t *testing.T) {
519-
var bulkWrites int
520-
cmdMonitor := &event.CommandMonitor{
521-
Started: func(_ context.Context, evt *event.CommandStartedEvent) {
522-
if evt.CommandName == "bulkWrite" {
523-
bulkWrites++
524-
}
525-
},
526-
}
527-
cs := integtest.ConnString(t)
528-
clientOpts := options.Client().ApplyURI(cs.Original).SetMonitor(cmdMonitor)
529-
integtest.AddTestServerAPIVersion(clientOpts)
530-
client, err := Connect(clientOpts)
531-
assert.Nil(t, err, "Connect error: %v", err)
532-
defer func() {
533-
_ = client.Disconnect(bgCtx)
534-
}()
535-
536-
serverVersion, err := getServerVersion(client.Database("admin"))
537-
require.NoError(t, err)
538-
if compareVersions(serverVersion, "8.0.0") < 1 {
539-
t.Skip("skipping server version < 8.0")
540-
}
541-
542-
document := bson.D{{"largeField", strings.Repeat("a", 16777216-100)}} // Adjust size to account for BSON overhead
543-
writes := []ClientBulkWrite{
544-
{"db", "x", NewClientInsertOneModel().SetDocument(document)},
545-
{"db", "x", NewClientInsertOneModel().SetDocument(document)},
546-
{"db", "x", NewClientInsertOneModel().SetDocument(document)},
547-
}
548-
549-
_, err = client.BulkWrite(context.Background(), writes)
550-
require.NoError(t, err)
551-
assert.Equal(t, 2, bulkWrites, "expected %d bulkWrites, got %d", 2, bulkWrites)
552-
})
553517
}

mongo/errors.go

Lines changed: 3 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -619,7 +619,7 @@ type ClientBulkWriteException struct {
619619
// A top-level error that occurred when attempting to communicate with the server
620620
// or execute the bulk write. This value may not be populated if the exception was
621621
// thrown due to errors occurring on individual writes.
622-
TopLevelError *WriteError
622+
WriteError *WriteError
623623

624624
// The write concern errors that occurred.
625625
WriteConcernErrors []WriteConcernError
@@ -636,8 +636,8 @@ type ClientBulkWriteException struct {
636636
// Error implements the error interface.
637637
func (bwe ClientBulkWriteException) Error() string {
638638
causes := make([]string, 0, 4)
639-
if bwe.TopLevelError != nil {
640-
causes = append(causes, "top level error: "+bwe.TopLevelError.Error())
639+
if bwe.WriteError != nil {
640+
causes = append(causes, "top level error: "+bwe.WriteError.Error())
641641
}
642642
if len(bwe.WriteConcernErrors) > 0 {
643643
errs := make([]error, len(bwe.WriteConcernErrors))

0 commit comments

Comments
 (0)