-
Notifications
You must be signed in to change notification settings - Fork 502
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
fix: transaction ...: in use: for query #2278
fix: transaction ...: in use: for query #2278
Conversation
- Fixes unkeyed#2197 - The error is caused by the cache revalidation happening in the background, so we have a racecondition with the other queries we are running in the insertGenericAuditLogs function
|
@Flo4604 is attempting to deploy a commit to the Unkey Team on Vercel. A member of the Team first needs to authorize it. |
📝 Walkthrough📝 WalkthroughWalkthroughThe changes in this pull request focus on the Changes
Assessment against linked issues
Possibly related PRs
Suggested reviewers
Thank you for using CodeRabbit. We offer it for free to the OSS community and would appreciate your support in helping us grow. If you find it useful, would you consider giving us a shout-out on your favorite social media? 🪧 TipsChatThere are 3 ways to chat with CodeRabbit:
Note: Be mindful of the bot's finite context window. It's strongly recommended to break down tasks such as reading entire modules into smaller chunks. For a focused discussion, use review comments to chat about specific files and their changes, instead of using the PR comments. CodeRabbit Commands (Invoked using PR comments)
Other keywords and placeholders
CodeRabbit Configuration File (
|
The latest updates on your projects. Learn more about Vercel for Git ↗︎
|
Thank you for following the naming conventions for pull request titles! 🙏 |
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.
Actionable comments posted: 0
🧹 Outside diff range and nitpick comments (3)
apps/api/src/pkg/audit.ts (3)
57-63
: Improved code readabilityThe addition of empty lines enhances the code's readability without altering its functionality. This change aligns with good coding practices and makes the code easier to understand and maintain.
102-102
: Consistent formatting improvementThe addition of this empty line is consistent with the previous formatting changes. It effectively separates the audit log insertion from the audit log target insertion, further enhancing the code's readability.
Line range hint
1-115
: Summary of changes and suggestion for further optimizationThe changes in this file effectively address the reported issue of transaction conflicts during the re-validation of AuditlogBucket. The main functional change, using
db.readonly
for querying the audit log bucket, prevents interference with ongoing transactions. The additional formatting improvements enhance code readability.While these changes are excellent, there might be an opportunity for further optimization:
Consider implementing a more robust error handling mechanism for the cache retrieval and database operations. This could include retrying failed operations or implementing a circuit breaker pattern to prevent cascading failures.
The caching logic could potentially be optimized by implementing a write-through or write-behind caching strategy, which could reduce the number of database queries in high-traffic scenarios.
Would you like me to provide more detailed suggestions on implementing these optimizations?
📜 Review details
Configuration used: CodeRabbit UI
Review profile: CHILL
📒 Files selected for processing (1)
- apps/api/src/pkg/audit.ts (2 hunks)
🧰 Additional context used
🔇 Additional comments (1)
apps/api/src/pkg/audit.ts (1)
49-53
: Excellent change to prevent transaction conflictsThe switch from
tx ?? db.primary
todb.readonly
for querying the audit log bucket is a great solution. This change addresses the reported issue of transaction conflicts during role creation and other operations. By using a read-only connection, we ensure that the query doesn't interfere with ongoing transactions, thus preventing the "Transaction in use" error.
well now that I see this, using the transaction is obviously a bad idea lol |
also bulk insert auditLogs and auditLogTargets
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.
Actionable comments posted: 1
📜 Review details
Configuration used: CodeRabbit UI
Review profile: CHILL
📒 Files selected for processing (1)
- apps/api/src/pkg/audit.ts (5 hunks)
🧰 Additional context used
🔇 Additional comments (3)
apps/api/src/pkg/audit.ts (3)
44-46
: Good Practice: Implementing Batch Inserts for EfficiencyIntroducing
auditLogsInserts
andauditLogTargetInserts
arrays to accumulate audit log entries for batch insertion enhances performance by reducing the number of database operations. This change is efficient and aligns with best practices for handling bulk data inserts.
52-54
: Appropriate Use of Read-Only Database InstanceUsing
db.readonly
outside of the transaction to fetch the audit log bucket is a sensible approach to avoid race conditions, as noted in the comments. This ensures that read operations do not interfere with transaction scopes, which can help maintain data integrity.
124-126
: Verify Intentional Fallback to Non-Transactional InsertsThe batch insert operations use
(tx ?? db.primary)
, which means they will proceed without a transaction iftx
is undefined. Verify that this behavior is intentional. If atomicity is required across these insert operations, it would be advisable to ensure that a transaction is always used.If necessary, you might want to enforce the use of a transaction or handle the absence of a transaction explicitly.
we're working this out with flo in discord btw |
Awarding Flo4604: 300 points 🕹️ Well done! Check out your new contribution on oss.gg/Flo4604 |
* fix: transaction ...: in use: for query - Fixes unkeyed#2197 - The error is caused by the cache revalidation happening in the background, so we have a racecondition with the other queries we are running in the insertGenericAuditLogs function * docs: explain for future self * fix: another racecondition also bulk insert auditLogs and auditLogTargets * [autofix.ci] apply automated fixes --------- Co-authored-by: chronark <dev@chronark.com> Co-authored-by: autofix-ci[bot] <114827586+autofix-ci[bot]@users.noreply.github.com>
* fix: transaction ...: in use: for query - Fixes unkeyed#2197 - The error is caused by the cache revalidation happening in the background, so we have a racecondition with the other queries we are running in the insertGenericAuditLogs function * docs: explain for future self * fix: another racecondition also bulk insert auditLogs and auditLogTargets * [autofix.ci] apply automated fixes --------- Co-authored-by: chronark <dev@chronark.com> Co-authored-by: autofix-ci[bot] <114827586+autofix-ci[bot]@users.noreply.github.com>
* fix:breadcrum-cache-issue * chore:rename-revalidateMytag * refactor: move-revalidateTag * refactor: extract tags into reusable utility * feat: add template * Update 3_follow_the_unkey_x_account.md (#2323) * fix: capture uniqueness error and return it correctly (#2337) * docs: getVerifications instead of get (#2329) * Update 3_follow_the_unkey_x_account.md (#2324) Followed unkey on Twitter Co-authored-by: Andreas Thomas <dev@chronark.com> * fix: transaction ...: in use: for query (#2278) * fix: transaction ...: in use: for query - Fixes #2197 - The error is caused by the cache revalidation happening in the background, so we have a racecondition with the other queries we are running in the insertGenericAuditLogs function * docs: explain for future self * fix: another racecondition also bulk insert auditLogs and auditLogTargets * [autofix.ci] apply automated fixes --------- Co-authored-by: chronark <dev@chronark.com> Co-authored-by: autofix-ci[bot] <114827586+autofix-ci[bot]@users.noreply.github.com> * fix: handle undefined ratelimits * Update 3_follow_the_unkey_x_account.md (#2338) * fix: handle case when blogs array is empty * [oss.gg] side quest : added another framework; hono on cloudflare workers. (#2345) * fix: weird spacing in changelog by removing the extra gap (#2340) * fix: weird spacing in changelog * feat: formatted * oss.gg: create a template for ratelimiting a oak server in deno with unkey (#2308) Co-authored-by: Andreas Thomas <dev@chronark.com> * follow unkey on X #2252 (#2315) Co-authored-by: Your Name <you@example.com> * Follow the Unkey X account: @unkeydev Complete! (#2332) * Update 3_follow_the_unkey_x_account.md * Update 3_follow_the_unkey_x_account.md --------- Co-authored-by: Andreas Thomas <dev@chronark.com> * fix(www): analytics bento code snippet is not readable (#2311) - add hover effect to analytics bento removing gradient background - make copy code button sticky to top-right corner - impl independent vertical scrolls for language switcher and code editor * Update 7_create_a_template.md * Update 7_create_a_template.md * chore(deps-dev): bump @content-collections/core from 0.6.2 to 0.7.2 (#2255) Bumps @content-collections/core from 0.6.2 to 0.7.2. --- updated-dependencies: - dependency-name: "@content-collections/core" dependency-type: direct:development update-type: version-update:semver-minor ... Signed-off-by: dependabot[bot] <support@github.com> Co-authored-by: dependabot[bot] <49699333+dependabot[bot]@users.noreply.github.com> * fix: order audit logs by time, show latest on top (#2295) * feat: add template * feat: Unkey FastAPI boilerplate (#2307) * feat: add template * feat: follow unkey on X (#2357) * Update 6_record_onboarding.md (#2301) * fix: reset input fields in API delete dialog after reopening (#2316) * fix: reset input fields in API delete dialog after reopening * refactor: remove unnecessary useEffect and utilize existing onOpenChange function for dialog * refactor: removed unused imports * Update 3_follow_the_unkey_x_account.md (#2364) Added name to the followed list. Co-authored-by: Andreas Thomas <dev@chronark.com> * ci: add label * feat: add hover to input fields * Added gaps and width for md (#2371) * docs: update overview.mdx (#2384) avaliable -> available * oss.gg side quest 3_follow_the_unkey_x_account.md (#2399) Followed the unkey x account * feat: Following unkey acc on twitter #2407 (#2408) * Feat: Followed Unkey on X * Feat: Followed Unkey on Twitter --------- Co-authored-by: Andreas Thomas <dev@chronark.com> * resolve merge conflicts * resolve merge conflicts --------- Signed-off-by: dependabot[bot] <support@github.com> Co-authored-by: chronark <dev@chronark.com> Co-authored-by: Emily Marie Ahtúnan <86572370+Emmarie-Ahtunan@users.noreply.github.com> Co-authored-by: Harsh Shrikant Bhat <90265455+harshsbhat@users.noreply.github.com> Co-authored-by: Aritra Sadhukhan <60315087+aritradevelops@users.noreply.github.com> Co-authored-by: Flo <53355483+Flo4604@users.noreply.github.com> Co-authored-by: autofix-ci[bot] <114827586+autofix-ci[bot]@users.noreply.github.com> Co-authored-by: Devang Rakholiya <116096508+Devang0907@users.noreply.github.com> Co-authored-by: Prabin <42871240+prabincankod@users.noreply.github.com> Co-authored-by: ZiaCodes <72739794+Khaan25@users.noreply.github.com> Co-authored-by: Devansh Baghel <77718741+Devansh-Baghel@users.noreply.github.com> Co-authored-by: Shreenarayan jaiswal <127131074+shreenarayan123@users.noreply.github.com> Co-authored-by: Your Name <you@example.com> Co-authored-by: Chirag Arora <chirag8023@gmail.com> Co-authored-by: Nazar Poshtarenko <32395926+unrenamed@users.noreply.github.com> Co-authored-by: dependabot[bot] <49699333+dependabot[bot]@users.noreply.github.com> Co-authored-by: Saketh Pavan Goti <44170829+Sakethpavan@users.noreply.github.com> Co-authored-by: Teddy ASSIH <110066080+Ionfinisher@users.noreply.github.com> Co-authored-by: Vardhaman Bhandari <97441447+Vardhaman619@users.noreply.github.com> Co-authored-by: Atharva_404 <72994819+Atharva-3000@users.noreply.github.com> Co-authored-by: Rishi <rishipatel0826@gmail.com> Co-authored-by: Ikko Eltociear Ashimine <eltociear@gmail.com> Co-authored-by: Ayan Mondal <ayanmondal1805@gmail.com> Co-authored-by: Kunal Arya <105645118+kunalarya873@users.noreply.github.com>
What does this PR do?
This fixes a transaction error that sometimes occurs when re-validating the AuditlogBucket.
In this case, we were querying the database with the transaction in the background, and at the same time, the transaction was used to insert into the auditLogTarget or auditLog tables.
This would lead to a transaction ...: in use: for query query and a internal server error code.
Fixes #2197
Type of change
How should this be tested?
This can be tested by running the API locally and then:
Checklist
Required
pnpm build
pnpm fmt
console.logs
git pull origin main
Appreciated
Summary by CodeRabbit