Skip to content

Commit 88ab7ed

Browse files
DOC: add manual example for causal consistency (mongodb#368)
* DOC: add manual example for causal consistency
1 parent 98ce687 commit 88ab7ed

File tree

1 file changed

+40
-1
lines changed

1 file changed

+40
-1
lines changed

test/test_examples.py

Lines changed: 40 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -14,15 +14,18 @@
1414

1515
"""MongoDB documentation examples in Python."""
1616

17-
import threading
17+
import datetime
1818
import sys
19+
import threading
1920

2021
sys.path[0:0] = [""]
2122

2223
import pymongo
2324
from pymongo.errors import ConnectionFailure, OperationFailure
2425
from pymongo.read_concern import ReadConcern
26+
from pymongo.read_preferences import ReadPreference
2527
from pymongo.write_concern import WriteConcern
28+
2629
from test import client_context, unittest, IntegrationTest
2730
from test.utils import rs_or_single_client
2831

@@ -1114,5 +1117,41 @@ def shipment_transaction(session):
11141117
# End Beta Transaction Example 3
11151118

11161119

1120+
class TestCausalConsistencyExamples(IntegrationTest):
1121+
@client_context.require_version_min(3, 6, 0)
1122+
@client_context.require_secondaries_count(1)
1123+
def test_causal_consistency(self):
1124+
# Causal consistency examples
1125+
client = self.client
1126+
self.addCleanup(client.drop_database, 'test')
1127+
client.test.drop_collection('items')
1128+
client.test.items.insert_one({
1129+
'sku': "111", 'name': 'Peanuts',
1130+
'start':datetime.datetime.today()})
1131+
1132+
# Start Causal Consistency Example 1
1133+
with client.start_session(causal_consistency=True) as s1:
1134+
current_date = datetime.datetime.today()
1135+
items = client.get_database('test').items
1136+
items.update_one(
1137+
{'sku': "111", 'end': None},
1138+
{'$set': {'end': current_date}}, session=s1)
1139+
items.insert_one(
1140+
{'sku': "nuts-111", 'name': "Pecans",
1141+
'start': current_date}, session=s1)
1142+
# End Causal Consistency Example 1
1143+
1144+
# Start Causal Consistency Example 2
1145+
with client.start_session(causal_consistency=True) as s2:
1146+
s2.advance_cluster_time(s1.cluster_time)
1147+
s2.advance_operation_time(s1.operation_time)
1148+
1149+
items = client.get_database(
1150+
'test', read_preference=ReadPreference.SECONDARY).items
1151+
for item in items.find({'end': None}, session=s2):
1152+
print(item)
1153+
# End Causal Consistency Example 2
1154+
1155+
11171156
if __name__ == "__main__":
11181157
unittest.main()

0 commit comments

Comments
 (0)