Skip to content

Commit 812cd64

Browse files
committed
CDRIVER-2815 fix client opts inheritance
1 parent fe2a0c1 commit 812cd64

File tree

2 files changed

+87
-1
lines changed

2 files changed

+87
-1
lines changed

src/libmongoc/src/mongoc/mongoc-client-session.c

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -601,7 +601,7 @@ _mongoc_client_session_new (mongoc_client_t *client,
601601
client->read_prefs);
602602

603603
if (opts) {
604-
_mongoc_session_opts_copy (opts, &session->opts);
604+
session->opts.flags = opts->flags;
605605
txn_opts_set (&session->opts.default_txn_opts,
606606
opts->default_txn_opts.read_concern,
607607
opts->default_txn_opts.write_concern,

src/libmongoc/tests/test-mongoc-transactions.c

Lines changed: 86 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -454,6 +454,86 @@ test_cursor_primary_read_pref (void *ctx)
454454
}
455455

456456

457+
/* test the fix to CDRIVER-2815. */
458+
void
459+
test_inherit_from_client (void *ctx)
460+
{
461+
mongoc_client_t *client;
462+
mongoc_client_session_t *session;
463+
bson_error_t error;
464+
mongoc_uri_t *uri;
465+
mongoc_read_concern_t *rc;
466+
const mongoc_read_concern_t *returned_rc;
467+
mongoc_read_prefs_t *rp;
468+
const mongoc_read_prefs_t *returned_rp;
469+
mongoc_write_concern_t *wc;
470+
const mongoc_write_concern_t *returned_wc;
471+
mongoc_session_opt_t *sopt;
472+
const mongoc_session_opt_t *returned_sopt;
473+
mongoc_transaction_opt_t *topt;
474+
const mongoc_transaction_opt_t *returned_topt;
475+
476+
uri = test_framework_get_uri ();
477+
478+
rc = mongoc_read_concern_new ();
479+
mongoc_read_concern_set_level (rc, MONGOC_READ_CONCERN_LEVEL_MAJORITY);
480+
mongoc_uri_set_read_concern (uri, rc);
481+
482+
rp = mongoc_read_prefs_new (MONGOC_READ_NEAREST);
483+
mongoc_uri_set_read_prefs_t (uri, rp);
484+
485+
wc = mongoc_write_concern_new ();
486+
mongoc_write_concern_set_w (wc, 0);
487+
mongoc_uri_set_write_concern (uri, wc);
488+
489+
client = mongoc_client_new_from_uri (uri);
490+
491+
sopt = mongoc_session_opts_new ();
492+
topt = mongoc_transaction_opts_new ();
493+
494+
mongoc_transaction_opts_set_read_concern (topt, rc);
495+
mongoc_transaction_opts_set_read_prefs (topt, rp);
496+
mongoc_transaction_opts_set_write_concern (topt, wc);
497+
498+
mongoc_session_opts_set_default_transaction_opts (sopt, topt);
499+
500+
session = mongoc_client_start_session (client, sopt, &error);
501+
ASSERT_OR_PRINT (session, error);
502+
503+
/* test that unacknowledged write concern is actually used, since it should
504+
* result in an error. */
505+
ASSERT (!mongoc_client_session_start_transaction (session, NULL, &error));
506+
ASSERT_ERROR_CONTAINS (
507+
error,
508+
MONGOC_ERROR_TRANSACTION,
509+
MONGOC_ERROR_TRANSACTION_INVALID_STATE,
510+
"Transactions do not support unacknowledged write concern");
511+
512+
returned_sopt = mongoc_client_session_get_opts (session);
513+
returned_topt =
514+
mongoc_session_opts_get_default_transaction_opts (returned_sopt);
515+
returned_rc = mongoc_transaction_opts_get_read_concern (returned_topt);
516+
returned_rp = mongoc_transaction_opts_get_read_prefs (returned_topt);
517+
returned_wc = mongoc_transaction_opts_get_write_concern (returned_topt);
518+
519+
BSON_ASSERT (strcmp (mongoc_read_concern_get_level (returned_rc),
520+
mongoc_read_concern_get_level (rc)) == 0);
521+
BSON_ASSERT (mongoc_write_concern_get_w (returned_wc) ==
522+
mongoc_write_concern_get_w (wc));
523+
BSON_ASSERT (mongoc_read_prefs_get_mode (returned_rp) ==
524+
mongoc_read_prefs_get_mode (rp));
525+
526+
mongoc_read_concern_destroy (rc);
527+
mongoc_read_prefs_destroy (rp);
528+
mongoc_write_concern_destroy (wc);
529+
mongoc_transaction_opts_destroy (topt);
530+
mongoc_session_opts_destroy (sopt);
531+
mongoc_client_session_destroy (session);
532+
mongoc_uri_destroy (uri);
533+
mongoc_client_destroy (client);
534+
}
535+
536+
457537
void
458538
test_transactions_install (TestSuite *suite)
459539
{
@@ -496,4 +576,10 @@ test_transactions_install (TestSuite *suite)
496576
NULL,
497577
NULL,
498578
test_framework_skip_if_no_txns);
579+
TestSuite_AddFull (suite,
580+
"/transactions/inherit_from_client",
581+
test_inherit_from_client,
582+
NULL,
583+
NULL,
584+
test_framework_skip_if_no_txns);
499585
}

0 commit comments

Comments
 (0)