|
14 | 14 |
|
15 | 15 | """MongoDB documentation examples in Python."""
|
16 | 16 |
|
17 |
| -import threading |
| 17 | +import datetime |
18 | 18 | import sys
|
| 19 | +import threading |
19 | 20 |
|
20 | 21 | sys.path[0:0] = [""]
|
21 | 22 |
|
22 | 23 | import pymongo
|
23 | 24 | from pymongo.errors import ConnectionFailure, OperationFailure
|
24 | 25 | from pymongo.read_concern import ReadConcern
|
| 26 | +from pymongo.read_preferences import ReadPreference |
25 | 27 | from pymongo.write_concern import WriteConcern
|
| 28 | + |
26 | 29 | from test import client_context, unittest, IntegrationTest
|
27 | 30 | from test.utils import rs_or_single_client
|
28 | 31 |
|
@@ -1114,5 +1117,41 @@ def shipment_transaction(session):
|
1114 | 1117 | # End Beta Transaction Example 3
|
1115 | 1118 |
|
1116 | 1119 |
|
| 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 | + |
1117 | 1156 | if __name__ == "__main__":
|
1118 | 1157 | unittest.main()
|
0 commit comments