3030class NoTransactionError (Exception ): ...
3131
3232
33- class InvalidTransactionStateError (Exception ): ...
33+ class DoubleStartTransactionError (Exception ): ...
34+
35+
36+ class TransactionCommittingError (Exception ): ...
37+
38+
39+ class TransactionNotCommittingError (Exception ): ...
3440
3541
3642class HorizonAlwaysWithoutTransactionsError (Exception ): ...
@@ -76,12 +82,12 @@ def start_transaction(
7682 ) -> XID :
7783 """
7884 :raises tgdb.entities.horizon.horizon.NotMonotonicTimeError:
79- :raises tgdb.entities.horizon.horizon.InvalidTransactionStateError :
85+ :raises tgdb.entities.horizon.horizon.DoubleStartTransactionError :
8086 """
8187
8288 assert_ (
8389 all (xid not in map for map in self ._transaction_maps ()),
84- else_ = InvalidTransactionStateError ,
90+ else_ = DoubleStartTransactionError ,
8591 )
8692
8793 started_transaction = start_transaction (
@@ -107,25 +113,32 @@ def include(
107113 """
108114 :raises tgdb.entities.horizon.horizon.NotMonotonicTimeError:
109115 :raises tgdb.entities.horizon.horizon.NoTransactionError:
110- :raises tgdb.entities.horizon.horizon.InvalidTransactionStateError :
116+ :raises tgdb.entities.horizon.horizon.TransactionCommittingError :
111117 """
112118
113119 self .move_to_future (time )
114120
115121 transaction = self ._transaction (
116- xid , SerializableTransactionState .active
122+ xid ,
123+ SerializableTransactionState .active ,
124+ else_ = TransactionCommittingError ,
117125 )
118126 transaction .include (effect )
119127
120128 def rollback_transaction (self , time : LogicTime , xid : XID ) -> None :
121129 """
122130 :raises tgdb.entities.horizon.horizon.NotMonotonicTimeError:
123131 :raises tgdb.entities.horizon.horizon.NoTransactionError:
132+ :raises tgdb.entities.horizon.horizon.TransactionCommittingError:
124133 """
125134
126135 self .move_to_future (time )
127136
128- transaction = self ._transaction (xid )
137+ transaction = self ._transaction (
138+ xid ,
139+ SerializableTransactionState .active ,
140+ else_ = TransactionCommittingError ,
141+ )
129142 transaction .rollback ()
130143 del self ._transaction_map (transaction )[transaction .xid ()]
131144
@@ -138,14 +151,15 @@ def commit_transaction(
138151 """
139152 :raises tgdb.entities.horizon.horizon.NotMonotonicTimeError:
140153 :raises tgdb.entities.horizon.horizon.NoTransactionError:
141- :raises tgdb.entities.horizon.horizon.InvalidTransactionStateError :
154+ :raises tgdb.entities.horizon.horizon.TransactionCommittingError :
142155 :raises tgdb.entities.horizon.transaction.ConflictError:
143156 """
144157
145158 self .move_to_future (time )
146159
147160 transaction = self ._transaction (
148- xid , SerializableTransactionState .active
161+ xid , SerializableTransactionState .active ,
162+ else_ = TransactionCommittingError (),
149163 )
150164
151165 for effect in effects :
@@ -165,14 +179,15 @@ def commit_transaction(
165179 def complete_commit (self , time : LogicTime , xid : XID ) -> Commit :
166180 """
167181 :raises tgdb.entities.horizon.horizon.NoTransactionError:
168- :raises tgdb.entities.horizon.horizon.InvalidTransactionStateError :
182+ :raises tgdb.entities.horizon.horizon.TransactionNotCommittingError :
169183 """
170184
171185 self .move_to_future (time )
172186
173187 transaction = self ._serializable_transaction (
174188 xid ,
175189 SerializableTransactionState .prepared ,
190+ else_ = TransactionNotCommittingError ,
176191 )
177192
178193 commit = transaction .commit ()
@@ -236,10 +251,12 @@ def _serializable_transaction(
236251 self ,
237252 xid : XID ,
238253 state : SerializableTransactionState | None = None ,
254+ * ,
255+ else_ : Exception | type [Exception ],
239256 ) -> SerializableTransaction :
240257 """
241258 :raises tgdb.entities.horizon.horizon.NoTransactionError:
242- :raises tgdb.entities.horizon.horizon.InvalidTransactionStateError :
259+ :raises else_ :
243260 """
244261
245262 transaction = self ._serializable_transaction_map .get (xid )
@@ -251,7 +268,7 @@ def _serializable_transaction(
251268 transaction .rollback ()
252269 del self ._serializable_transaction_map [xid ]
253270
254- raise InvalidTransactionStateError
271+ raise else_
255272
256273 return transaction
257274
@@ -273,16 +290,18 @@ def _transaction(
273290 self ,
274291 xid : XID ,
275292 state : SerializableTransactionState | None = None ,
293+ * ,
294+ else_ : Exception | type [Exception ],
276295 ) -> Transaction :
277296 """
278297 :raises tgdb.entities.horizon.horizon.NoTransactionError:
279- :raises tgdb.entities.horizon.horizon.InvalidTransactionStateError :
298+ :raises else_ :
280299 """
281300
282301 with suppress (NoTransactionError ):
283302 return self ._non_serializable_read_transaction (xid )
284303
285- return self ._serializable_transaction (xid , state )
304+ return self ._serializable_transaction (xid , state , else_ = else_ )
286305
287306 def _transaction_maps (self ) -> Iterable [Mapping [XID , Transaction ]]:
288307 yield self ._serializable_transaction_map
0 commit comments