-
-
Notifications
You must be signed in to change notification settings - Fork 89
Add SqliteMessageQueue and related tests #526
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
base: main
Are you sure you want to change the base?
Conversation
Summary of ChangesHello @2chanhaeng, I'm Gemini Code Assist1! I'm currently reviewing this pull request and will post my feedback shortly. In the meantime, here's a summary to help you and other reviewers quickly get up to speed! This pull request significantly enhances the message queuing capabilities by introducing a new SQLite-based message queue implementation. Concurrently, it establishes a robust and standardized testing framework for message queues, which has been applied to existing implementations. This dual approach not only expands the available message queue options but also improves the consistency, reliability, and maintainability of message queue tests across the project, making future integrations and testing more efficient. Highlights
Using Gemini Code AssistThe full guide for Gemini Code Assist can be found on our documentation page, here are some quick tips. Invoking Gemini You can request assistance from Gemini at any point by creating a comment using either
Customization To customize Gemini Code Assist for GitHub experience, repository maintainers can create a configuration file and/or provide a custom code review style guide (such as PEP-8 for Python) by creating and adding files to a Limitations & Feedback Gemini Code Assist may make mistakes. Please leave feedback on any instances where its feedback is incorrect or counter productive. You can react with 👍 and 👎 on @gemini-code-assist comments. If you're interested in giving your feedback about your experience with Gemini Code Assist for Github and other Google products, sign up here. You can also get AI-powered code generation, chat, as well as code reviews directly in the IDE at no cost with the Gemini Code Assist IDE Extension. Footnotes
|
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.
Code Review
This pull request introduces a new SqliteMessageQueue and a standardized testing utility, testMessageQueue, to unify message queue tests across the repository. The refactoring of existing tests to use this new utility is a great step towards reducing code duplication and ensuring consistent test coverage.
My review focuses on the new implementations. I've found a couple of critical issues in the SqliteMessageQueue related to race conditions and error handling that could lead to message loss and listener crashes. I've also identified areas for improvement in the new testMessageQueue utility to make it more robust and align with the MessageQueue interface. Additionally, I've suggested a minor improvement to the SQLite test to ensure proper cleanup of temporary database files.
Codecov Report❌ Patch coverage is
... and 2 files with indirect coverage changes 🚀 New features to boost your workflow:
|
- Remove `let Temporal ...` - Export `@fedify/sqlite` - Add missing dependencies
| } | ||
|
|
||
| const dbUrl = process.env.DATABASE_URL; | ||
| const dbUrl = process.env.POSTGRES_URL; |
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.
If this renaming is intentional, could you explain why this is needed?
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.
The other database URL variable names are matched with their respective database names.(e.g. REDIS_URL for redis) Therefore, to avoid confusion, I've also modified this one to match the naming convention.
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.
Aha, and that won't have side-effects, right? It's an environment variable so I just worried about that. If that's fine then I got no worries.
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.
Well, I checked again, and then I found more DATABASE_URL! Because of you, I could check one more time. Thanks!
Fixed at df0e05a!
|
How about adding |
That's a good idea, but it seems to go beyond #477. How about you create a separate issue for it? |
SqliteMessageQueue.listen fedify-dev#526 (comment)
Well, the cleanup method belongs to |
2chanhaeng
left a comment
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.
How about adding
[Symbol.dispose]()for consistency with other MessageQueue implementations?That's a good idea, but it seems to go beyond #477. How about you create a separate issue for it?
Well, the cleanup method belongs to
sqlite/src/ mq.tsso i don't think that's out of scope if you implement it for only SqliteMessageQueue. It seems quite simple but caring other message queues should be handled in other PR like you said. (Neither amqp has that)
Oh, OK. I added it at 80e11c6!
| @@ -0,0 +1,169 @@ | |||
| import type { MessageQueue } from "@fedify/fedify"; | |||
| import { test as defaultTest } from "@fedify/fixture"; | |||
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.
Hmm, it makes @fedify/testing (which is public) depend on @fedify/fixture, which is not public. I guess we should either:
- Extract
@fedify/testing/mq-testerinto@fedify/fixture/mq-tester, or - Make it depend on
node:testinstead of@fedify/fixture.
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.
How about removing the default value of TestMessageQueueOptions.test and making it non-optional? Then the dependency can be removed.
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.
Turns out that's… quite unnecessarily too abstract! How about letting it be used like:
test("...", () => testMessageQueue());… instead of:
testMessageQueue("...", { test });which seem an unneeded IoC?
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.
Yeah, that will be more useful!
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.
Yeah, that will be more useful!
Summary
Introduce the
SqliteMessageQueueclass along with a testing framework formessage queues. Refactor existing tests to utilize the new
testMessageQueueutility for improved test structure and readability.
Related issue
SqliteMessageQueuefor single-node deployments #477Changes
SqliteMessageQueueclass to@fedify/sqlitepackage implementingthe
MessageQueueinterface using SQLite as the backing storetestMessageQueue()utility function to@fedify/testingpackagefor standardized testing of
MessageQueueimplementationswaitFor()andgetRandomKey()helper functions to@fedify/testingtestMessageQueue:@fedify/amqp@fedify/denokv@fedify/postgres@fedify/redisSqliteMessageQueueBenefits
a reusable test harness
MessageQueueimplementationsMessageQueueimplementations in the futurewith standardized testing
Checklist
mise teston your machine?