chart/5.7.9
battermann
tagged this
12 Nov 14:08
* create rabbitmq exchange * set up DLX * wip * create user queues on client add/update * make it internal server error * make galley compile * make rabbitmq mandatory * fix integration tests * set correct DLX headers * wip * Add a WIP test to consume notifs via `GET /events` * cannon: Roughly implement subscribing notifs from RabbitMQ * gundeck: Start implementing push to rabbitmq * integration: Fix assertion to assert on a real event * integration: Use correct vHost in cannon * cannon: Ensure exchange exists and publish event correctly on WS * NotificationSubsystem: Align names for queues and extract them as top level bindings * gundeck: Push events to RabbitMQ for compatible clients * integration: Assert that acked events don't come back * cannon: Forward client acks to rabbitmq * WIP: Get rid of channel as an explicit param for NotificationSubsystem actions * Get galley to compile. * Fix some easy TODOs. * Use these library better. * resolve rebase conflict better. * fix ghc errors. * Extract rabbitmq channel lookup into helper. * Move setupConsumableNotificationsClient from subsystems to gundeck. * Revert "Get galley to compile." This reverts commit 8a1840d6092982e7c527ead11f276e3c22fa7030. * wire-subsystems: Fix compile errors in tests * gundeck: doesn't depend on wire-subsystems (yet?) * brig: Remove unnecessary import * cannon: Don't create the queue for clients, expect it to already be there * cannon: close ws connection when something goes wrong * Funky! * Undo funkiness: Create Wire.API.WebSocket with types for comms on the new websocket * WIP: cannon: try to use the new types from wire-api The case split is not the nicest, perhaps we can solve it with one these things: - Bring back the funkiness for couple of commits ago - Use separate types for server to client and client to server messages * wire-api: Cabal file * gen nix stuff * ormolu * Is this a good way of representing websocket messages? * Resolve TODO. amqp doesn't offer a bulk push operation. instead it makes individual pushes performant enough. https://www.rabbitmq.com/docs/publishers * Refactor test, extend coverage. * Suggestions for better module name; removed "websocket" reference from some names. * Roundtrip tests for Message*To*. * Source comments. * debug failing test [WIP] * refactor tests a bit, fix ack, fix typos * fix test, handle connection closed, format * ping pong test * Maintain stable connection to rabbitmq from cannon. [WIP] * Fix typo. * Tune tests. * Remove ping-pong stuff. * Revert "Maintain stable connection to rabbitmq from cannon. [WIP]" This reverts commit 861ee102beb5b065e98e58377cf6fc519e69e44b. problems with this approach: - there is a maximum number of chans / conn. - this is all very complicated and should be done separately. * Test multiple acks and out of order acks * cannon: Refactor code a little and more logging * integration: Deal with events websocket more gracefully, ensure all acks are sent * cannon: Easier to understand cleanup code * Add TODO for tomorrow * cannon: Ensure invalid messages don't accumulate * small re-org of code * Avoid using unsafeRange * Reduce top level functions * integration: Test that old and new clients can co-exist * gundeck: Optimize number of calls to brig * gundeck: Try to not kill brig * Fix typo * gundeck: Remove pairing comment * wire-api: Rename Wire.API.WebSocket -> Wire.API.Event.WebSocketProtocol * gundeck: Don't configure dead-lettering while declaring queues This should be done via Policies: https://www.rabbitmq.com/docs/parameters#policies When done with Policies, we can change our mind about how to deal with dead-lettering later because queues cannot be redeclared with with different headers. * More TODOs * Use direct exchange for user notifications Topic exchange is not very useful for our usecase * integration: Test that users only get notifs meant for them * integration/Notifications: Allow waiting for notifs without a client * Deflake newly written tests * cannon: Don't declare the exchange, its not needed * integration: Make cannon logLevel Warn again * integrations: Throw error if websocket responds with invalid JSON * Add ticket number to FUTUREWORK * Add notification Id to rabbitmq notifs This can be used by clients to detect duplicate deliveries. * Makefile/clean-rabbit: Also cleanup exchanges * gundeck: Get preexisting unit tests to pass * Set correct expiration on events pushed to RabbitMQ * fix a typo in the changelog * Fix a release note * Add changelogs for public and internal API changes * Move around routing key helper functions * Remove commented out code * Detect and flag missed notifications from RabbitMQ (#4317) * Update a change log to reflect changes from PR #4317 --------- Co-authored-by: Akshay Mankar <[email protected]> Co-authored-by: Matthias Fischmann <[email protected]> Co-authored-by: Marko Dimjašević <[email protected]> Co-authored-by: Igor Ranieri <[email protected]>