This repository has been archived by the owner on Apr 26, 2024. It is now read-only.
-
-
Notifications
You must be signed in to change notification settings - Fork 2.1k
Remove code which updates application_services_state.last_txn
#12680
Merged
Merged
Changes from all commits
Commits
Show all changes
3 commits
Select commit
Hold shift + click to select a range
File filter
Filter by extension
Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
There are no files selected for viewing
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Original file line number | Diff line number | Diff line change |
---|---|---|
@@ -0,0 +1 @@ | ||
Remove code which updates unused database column `application_services_state.last_txn`. |
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Original file line number | Diff line number | Diff line change |
---|---|---|
|
@@ -203,19 +203,29 @@ async def get_appservice_state( | |
"""Get the application service state. | ||
|
||
Args: | ||
service: The service whose state to set. | ||
service: The service whose state to get. | ||
Returns: | ||
An ApplicationServiceState or none. | ||
An ApplicationServiceState, or None if we have yet to attempt any | ||
transactions to the AS. | ||
""" | ||
result = await self.db_pool.simple_select_one( | ||
# if we have created transactions for this AS but not yet attempted to send | ||
# them, we will have a row in the table with state=NULL (recording the stream | ||
# positions we have processed up to). | ||
# | ||
# On the other hand, if we have yet to create any transactions for this AS at | ||
# all, then there will be no row for the AS. | ||
# | ||
# In either case, we return None to indicate "we don't yet know the state of | ||
# this AS". | ||
result = await self.db_pool.simple_select_one_onecol( | ||
"application_services_state", | ||
{"as_id": service.id}, | ||
["state"], | ||
retcol="state", | ||
allow_none=True, | ||
desc="get_appservice_state", | ||
) | ||
if result: | ||
return ApplicationServiceState(result.get("state")) | ||
return ApplicationServiceState(result) | ||
return None | ||
|
||
async def set_appservice_state( | ||
|
@@ -296,14 +306,6 @@ async def complete_appservice_txn( | |
""" | ||
|
||
def _complete_appservice_txn(txn: LoggingTransaction) -> None: | ||
# Set current txn_id for AS to 'txn_id' | ||
self.db_pool.simple_upsert_txn( | ||
txn, | ||
"application_services_state", | ||
{"as_id": service.id}, | ||
{"last_txn": txn_id}, | ||
) | ||
|
||
# Delete txn | ||
self.db_pool.simple_delete_txn( | ||
txn, | ||
|
@@ -452,16 +454,15 @@ async def set_appservice_stream_type_pos( | |
% (stream_type,) | ||
) | ||
|
||
def set_appservice_stream_type_pos_txn(txn: LoggingTransaction) -> None: | ||
stream_id_type = "%s_stream_id" % stream_type | ||
txn.execute( | ||
"UPDATE application_services_state SET %s = ? WHERE as_id=?" | ||
% stream_id_type, | ||
(pos, service.id), | ||
) | ||
|
||
await self.db_pool.runInteraction( | ||
"set_appservice_stream_type_pos", set_appservice_stream_type_pos_txn | ||
# this may be the first time that we're recording any state for this AS, so | ||
# we don't yet know if a row for it exists; hence we have to upsert here. | ||
await self.db_pool.simple_upsert( | ||
table="application_services_state", | ||
keyvalues={"as_id": service.id}, | ||
values={f"{stream_type}_stream_id": pos}, | ||
# no need to lock when emulating upsert: as_id is a unique key | ||
lock=False, | ||
desc="set_appservice_stream_type_pos", | ||
) | ||
Comment on lines
-455
to
466
There was a problem hiding this comment. Choose a reason for hiding this commentThe reason will be displayed to describe this comment to others. Learn more. I think this is actually fixing a previously-existing race. Since the row for Of course, removing the code to add the row when the txn was sent meant that the row never got added at all, so the race became a consistent failure. TL;DR: I assert this should have been an upsert all along. |
||
|
||
|
||
|
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Add this suggestion to a batch that can be applied as a single commit.
This suggestion is invalid because no changes were made to the code.
Suggestions cannot be applied while the pull request is closed.
Suggestions cannot be applied while viewing a subset of changes.
Only one suggestion per line can be applied in a batch.
Add this suggestion to a batch that can be applied as a single commit.
Applying suggestions on deleted lines is not supported.
You must change the existing code in this line in order to create a valid suggestion.
Outdated suggestions cannot be applied.
This suggestion has been applied or marked resolved.
Suggestions cannot be applied from pending reviews.
Suggestions cannot be applied on multi-line comments.
Suggestions cannot be applied while the pull request is queued to merge.
Suggestion cannot be applied right now. Please check back later.
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
this changes things so that if there is a row for the AS but it has
state IS NULL
, we returnNone
rather than raising an exception.And I think this is necessary because fixing the race in
set_appservice_stream_type_pos
now means that we hit this code at a point where we have a row with{stream_type}_stream_id
but not yet astate
. Previously, there would have (incorrectly) been no row at all.There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
It took me a second to understand that
ApplicationServiceState
is a enum, and so raises if given aNone
.We appear to have changed this behaviour #11488, and previously we returned
None
ifstate
wasNone
.