From 3b7cfe40c506f69423eece614e37798b57ca193b Mon Sep 17 00:00:00 2001 From: Piyush Chauhan <42397980+pyshx@users.noreply.github.com> Date: Thu, 25 Jul 2024 18:57:11 +0530 Subject: [PATCH] feat(mongox): support nearest read preference (#42) * feat(mongox): support nearest read preference * add read pref to client --- mongox/client.go | 8 +++++++- mongox/transaction.go | 9 ++++++++- 2 files changed, 15 insertions(+), 2 deletions(-) diff --git a/mongox/client.go b/mongox/client.go index 8b284c85..8b3f7516 100644 --- a/mongox/client.go +++ b/mongox/client.go @@ -6,6 +6,8 @@ import ( "github.com/reearth/reearthx/usecasex" "go.mongodb.org/mongo-driver/mongo" + "go.mongodb.org/mongo-driver/mongo/options" + "go.mongodb.org/mongo-driver/mongo/readpref" "go.mongodb.org/mongo-driver/x/mongo/driver/connstring" ) @@ -15,8 +17,12 @@ type Client struct { } func NewClient(database string, c *mongo.Client) *Client { + rp := readpref.Nearest() + + sessionOpts := options.Database().SetReadPreference(rp) + return &Client{ - db: c.Database(database), + db: c.Database(database, sessionOpts), transaction: &usecasex.NopTransaction{}, } } diff --git a/mongox/transaction.go b/mongox/transaction.go index 4f926f1e..d9f9e952 100644 --- a/mongox/transaction.go +++ b/mongox/transaction.go @@ -7,6 +7,7 @@ import ( "github.com/reearth/reearthx/usecasex" "go.mongodb.org/mongo-driver/mongo" "go.mongodb.org/mongo-driver/mongo/options" + "go.mongodb.org/mongo-driver/mongo/readpref" "go.mongodb.org/mongo-driver/x/mongo/driver" ) @@ -23,7 +24,13 @@ func NewTransaction(client *mongo.Client) *Transaction { } func (t *Transaction) Begin(ctx context.Context) (usecasex.Tx, error) { - s, err := t.client.StartSession(options.Session()) + // Set the read preference to Nearest + rp := readpref.Nearest() + + // Create session options with the Nearest read preference + sessionOpts := options.Session().SetDefaultReadPreference(rp) + + s, err := t.client.StartSession(sessionOpts) if err != nil { return nil, err }