Skip to content

Commit 52945ce

Browse files
committed
RDBC-1057 Issues with Compare Exchange API
1 parent a328843 commit 52945ce

2 files changed

Lines changed: 78 additions & 1 deletion

File tree

ravendb/documents/operations/compare_exchange/compare_exchange.py

Lines changed: 4 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -95,7 +95,10 @@ def get_value(
9595
else:
9696
entity = self.__original_value.value
9797

98-
value = CompareExchangeValue(self._key, self._index, entity)
98+
metadata = (
99+
self.__original_value.metadata if self.__original_value.has_metadata else None
100+
)
101+
value = CompareExchangeValue(self._key, self._index, entity, metadata)
99102
self.__value = value
100103
return value
101104

Lines changed: 74 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,74 @@
1+
from ravendb import SessionOptions, TransactionMode
2+
from ravendb.tests.test_base import TestBase, User
3+
4+
5+
class TestCompareExchangeSessionApi(TestBase):
6+
def setUp(self):
7+
super().setUp()
8+
9+
def test_get_compare_exchange_value_returns_metadata(self):
10+
key = "locks/happy-metadata"
11+
options = SessionOptions(transaction_mode=TransactionMode.CLUSTER_WIDE)
12+
13+
with self.store.open_session(session_options=options) as session:
14+
value = session.advanced.cluster_transaction.create_compare_exchange_value(
15+
key, User(name="Simon")
16+
)
17+
value.metadata["@expires"] = "2099-01-01T00:00:00.0000000Z"
18+
value.metadata["@created-at"] = "2026-04-15T12:27:51.556568Z"
19+
value.metadata["Custom-Tag"] = "hello"
20+
session.save_changes()
21+
22+
with self.store.open_session(session_options=options) as session:
23+
got = session.advanced.cluster_transaction.get_compare_exchange_value(key, User)
24+
25+
self.assertIsNotNone(got)
26+
self.assertEqual("Simon", got.value.name)
27+
self.assertTrue(got.has_metadata)
28+
self.assertEqual("2099-01-01T00:00:00.0000000Z", got.metadata["@expires"])
29+
self.assertEqual("2026-04-15T12:27:51.556568Z", got.metadata["@created-at"])
30+
self.assertEqual("hello", got.metadata["Custom-Tag"])
31+
32+
def test_delete_compare_exchange_value_removes_item(self):
33+
key = "locks/happy-delete"
34+
options = SessionOptions(transaction_mode=TransactionMode.CLUSTER_WIDE)
35+
36+
with self.store.open_session(session_options=options) as session:
37+
session.advanced.cluster_transaction.create_compare_exchange_value(
38+
key, User(name="Simon")
39+
)
40+
session.save_changes()
41+
42+
with self.store.open_session(session_options=options) as session:
43+
current = session.advanced.cluster_transaction.get_compare_exchange_value(key, User)
44+
self.assertIsNotNone(current)
45+
46+
session.advanced.cluster_transaction.delete_compare_exchange_value(current)
47+
session.save_changes()
48+
49+
with self.store.open_session(session_options=options) as session:
50+
after = session.advanced.cluster_transaction.get_compare_exchange_value(key, User)
51+
self.assertIsNone(after)
52+
53+
def test_delete_compare_exchange_value_by_key_and_index_removes_item(self):
54+
key = "locks/happy-delete-by-key"
55+
options = SessionOptions(transaction_mode=TransactionMode.CLUSTER_WIDE)
56+
57+
with self.store.open_session(session_options=options) as session:
58+
session.advanced.cluster_transaction.create_compare_exchange_value(
59+
key, User(name="Simon")
60+
)
61+
session.save_changes()
62+
63+
with self.store.open_session(session_options=options) as session:
64+
current = session.advanced.cluster_transaction.get_compare_exchange_value(key, User)
65+
self.assertIsNotNone(current)
66+
67+
session.advanced.cluster_transaction.delete_compare_exchange_value(
68+
current.key, current.index
69+
)
70+
session.save_changes()
71+
72+
with self.store.open_session(session_options=options) as session:
73+
after = session.advanced.cluster_transaction.get_compare_exchange_value(key, User)
74+
self.assertIsNone(after)

0 commit comments

Comments
 (0)