-
Notifications
You must be signed in to change notification settings - Fork 518
New issue
Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.
By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.
Already on GitHub? Sign in to your account
Invisible history records #3398
Merged
Merged
Conversation
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
SergeyGaluzo
added
Enhancement
Enhancement on existing functionality.
Azure Healthcare APIs
Label denotes that the issue or PR is relevant to the FHIR service in the Azure Healthcare APIs
labels
Jul 11, 2023
@SergeyGaluzo Just a general question Sergey, is there any problem with this change and the constraint we have on the Resource table to detect empty resources? |
feordin
reviewed
Jul 13, 2023
src/Microsoft.Health.Fhir.SqlServer/Features/Schema/Sql/Sprocs/HardDeleteResource.sql
Show resolved
Hide resolved
feordin
reviewed
Jul 13, 2023
src/Microsoft.Health.Fhir.SqlServer/Features/Schema/Sql/Tables/Resource.sql
Show resolved
Hide resolved
No. Resource is technically not empty (one byte 0xF), and it passes constraint check. In reply to: 1634916506 |
feordin
approved these changes
Jul 13, 2023
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment
Labels
Azure Healthcare APIs
Label denotes that the issue or PR is relevant to the FHIR service in the Azure Healthcare APIs
Enhancement
Enhancement on existing functionality.
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.
This PR provides ability to replace current events change capturing system, currently based on writing resource keys for changed resources to user tables, by querying Resource table based on processed transactions (old events system is still not removed and works AS-IS).
To enable above we need to hold resource versions for the event retention period, so events system can query Resource table and data is not missed. This works out of the box with versioned data policy and absence of hard deletes.
To cover no-version policy and hard deletes PR code delays physical deletes. It marks historical resource version as "invisible", i.e. sets raw resource to 0xF. As far as data size, setting raw resource to single byte is equivalent to retaining only resource keys in the old events tables, but without actual writes (other name of this feature is "events with no writes"). Note that these updates are scoped only to no-version & events enabled case. This magic 0xF value allows to filter out these resources from search (hence "invisible" name).
To finally remove these invisible historical resource keys, a new watchdog "InvisibleHistoryCleanupWatchdog" was added.
Main logic to set raw resource to 0xF is in the couple of lines added to MergeResources and HardDeleteResource stored procedures.