Commit Graph

352 Commits

Author SHA1 Message Date
Arnaud Cogoluègnes 8868ad97b3
Add logging to stream subscription 2021-02-11 16:16:26 +01:00
Arnaud Cogoluègnes d63756ed67
Set correct offset metrics on stream consumer creation 2021-02-09 11:36:20 +01:00
Arnaud Cogoluègnes 3de198845f
Disable stream failure test 2021-01-27 17:54:35 +01:00
Arnaud Cogoluègnes b921ac11a8
Merge pull request #2712 from rabbitmq/rabbitmq-stream-prometheus
Add stream prometheus plugin
2021-01-27 16:46:37 +01:00
Arnaud Cogoluègnes 268bc7257c
Merge pull request #2729 from rabbitmq/rabbitmq-stream-consumers-in-queue-details
Report stream consumers as regular consumers in management
2021-01-27 16:06:59 +01:00
Arnaud Cogoluègnes ce7851b470
Disable stream failure test until coordinator is fixed 2021-01-21 16:35:13 +01:00
Arnaud Cogoluègnes 78b723d7c3
Report stream consumers as regular consumers in management
This helps to see that a queue is consumed from.

WIP
2021-01-20 15:36:16 +01:00
Arnaud Cogoluègnes e87581f14c
Remove unnecessary dependencies 2021-01-19 15:04:59 +01:00
Arnaud Cogoluègnes 2f903843e0
Add list_stream_publishers CLI command 2021-01-19 14:49:30 +01:00
Arnaud Cogoluègnes 1e6244990c
Add list_stream_consumers CLI command 2021-01-19 11:31:39 +01:00
Arnaud Cogoluègnes a559c79b8c
Add response codes to stream protocol page 2021-01-18 14:25:24 +01:00
Arnaud Cogoluègnes b5315c0166
Merge branch 'master' into rabbitmq-stream-prometheus 2021-01-18 11:26:06 +01:00
Arnaud Cogoluègnes 0d73b58be0
Re-order stream command constants
The order is more usage-oriented.
2021-01-18 11:25:21 +01:00
Arnaud Cogoluègnes 52aa2963f5
Bump test dependencies in stream plugins 2021-01-14 17:58:38 +01:00
Arnaud Cogoluègnes bf72683eb2
Add stream prometheus plugin 2021-01-11 16:49:56 +01:00
Arnaud Cogoluègnes 5f0df3bdb0
Format stream and stream management plugins code 2021-01-06 15:47:27 +01:00
Arnaud Cogoluègnes 07b9e68ff5
Add logs to some stream tests 2021-01-06 14:38:02 +01:00
dcorbacho fc88f3ba21 Check that the queue exists before calling declare
Rabbit channels are responsible of this check before calling declare,
skipping it on the manager meant that the queue was partly redeclared
and a new data directory created. The old one was still on disk with
a different timestamp, but from the user point of view the queue data
has been erased.
2020-12-23 12:18:33 +01:00
Arnaud Cogoluègnes c0bb7ec4a7
Add offset & consumed metrics to stream consumer 2020-12-15 15:37:26 +01:00
Arnaud Cogoluègnes c4d07467da
Merge branch 'master' into rabbitmq-stream-management 2020-12-09 12:00:56 +01:00
Arnaud Cogoluègnes 9a590647b3
Add chunk header parameter to send_file callback 2020-12-09 11:33:28 +01:00
Arnaud Cogoluègnes e5ed53c5e2
Merge branch 'master' into rabbitmq-stream-management 2020-12-08 11:41:22 +01:00
Arnaud Cogoluègnes 87837f857d
Fix failure tests in stream plugin 2020-12-08 11:40:38 +01:00
Arnaud Cogoluègnes 846b36bec6
Fix metrics table GC test in stream plugin 2020-12-08 09:47:38 +01:00
Arnaud Cogoluègnes 2b45d8635b
Add publisher reference to stream endpoint 2020-12-07 10:17:01 +01:00
Arnaud Cogoluègnes 1faeaad499
Add publisher REST endpoint to stream consumer management 2020-12-04 17:22:14 +01:00
Arnaud Cogoluègnes 224e9914b2
Merge branch 'master' into rabbitmq-stream-management 2020-12-04 10:26:42 +01:00
Arnaud Cogoluègnes c51e060a07
Wait longer for replicas to come up in stream plugin 2020-12-04 09:48:56 +01:00
Arnaud Cogoluègnes 88b4ddb6c2
Track publishers in stream plugin 2020-12-03 17:57:48 +01:00
Arnaud Cogoluègnes c14c9bb6da
Fix some dialyzer warnings in stream plugin 2020-12-03 10:09:29 +01:00
Arnaud Cogoluègnes 66867a4062
Add GC to stream consumer monitoring table 2020-12-02 18:12:45 +01:00
Arnaud Cogoluègnes 41160210ab
Start stream consumer REST endpoint 2020-12-01 18:23:22 +01:00
Arnaud Cogoluègnes 08891a734e
Merge branch 'master' into rabbitmq-stream-management 2020-11-30 09:42:54 +01:00
Arnaud Cogoluègnes 67308be13c
Remove stream field from publish command
Only the publisher ID is necessary now the publisher declaration is
mandatory before publishing.
2020-11-27 11:07:10 +01:00
Arnaud Cogoluègnes bfa541a095
Include publisher state management 2020-11-26 18:18:43 +01:00
Arnaud Cogoluègnes 8cf5fb0775
Enforce publisher ID uniqueness 2020-11-26 15:19:02 +01:00
Arnaud Cogoluègnes 59bc60fe36
Add query publisher sequence 2020-11-26 10:02:13 +01:00
Arnaud Cogoluègnes 9859714f0e
Declare publisher in stream test 2020-11-24 18:18:14 +01:00
Arnaud Cogoluègnes 8f97ea400a
Start adding publishing dedup support for streams 2020-11-24 17:48:41 +01:00
Arnaud Cogoluègnes 584811582b
Add first tests for stream management
They are using Java to have a proper stream client.
2020-11-23 11:23:29 +01:00
Arnaud Cogoluègnes 580beb21bf
Include publish dedup in stream protocol 2020-11-20 11:43:04 +01:00
Arnaud Cogoluègnes c8249a304f
Filter stream connections where metrics are disabled
This implied defining the protocol field in tracked connection to be
able to filter out non-stream connections.
2020-11-20 09:29:55 +01:00
Arnaud Cogoluègnes e516aab737
Display only stream connections in plugin 2020-11-19 17:02:35 +01:00
Arnaud Cogoluègnes 23d7e8114c
Introduce stream management plugin 2020-11-19 14:48:25 +01:00
Arnaud Cogoluègnes 1ed8f76eed
Check if member processes are alive in metadata command
In case the Mnesia record is stale.
2020-11-17 10:15:09 +01:00
Arnaud Cogoluègnes 29e74cbfca Move some code to utils module 2020-11-05 15:33:13 +01:00
Arnaud Cogoluègnes fa586140d3 Call rabbit_log:warning/2 2020-11-03 18:04:22 +01:00
Arnaud Cogoluègnes d2eda4cb79 Update rabbitmq-components.mk 2020-11-03 14:27:50 +01:00
Arnaud Cogoluègnes 0f569d705a Return Erlang node long name in metadata
Fixes #2
2020-11-03 11:45:22 +01:00
Arnaud Cogoluègnes 2813356682 Use non_amqp_connection name for force_refresh_event 2020-10-23 15:37:07 +02:00
Arnaud Cogoluègnes a2f05f5b75 Support shutdown call from management plugin 2020-10-23 11:14:04 +02:00
Arnaud Cogoluègnes bd191cf40d Register connections and handle force_event_refresh
For existing connections that must emit stats when the management plugin
is enabled.

References rabbitmq/rabbitmq-server#2481
2020-10-23 10:17:39 +02:00
Arnaud Cogoluègnes bb510b0e14 Merge branch 'master' into management-integration
Conflicts:
	src/rabbit_stream_manager.erl
2020-10-22 15:41:42 +02:00
Arnaud Cogoluègnes dd8b3ea008 Check stats timer in listen loop 2020-10-22 14:27:06 +02:00
Arnaud Cogoluègnes 43898e59b1 Support max-age in stream creation 2020-10-22 13:42:33 +02:00
Arnaud Cogoluègnes a1f6006356 Support leader locator strategies
References rabbitmq/rabbitmq-server#2471
2020-10-21 15:25:31 +02:00
Arnaud Cogoluègnes 20681aca63 Add event notification during authentication 2020-10-20 18:20:03 +02:00
Arnaud Cogoluègnes 184f177d78 Emit stats for management
WIP
2020-10-20 15:09:34 +02:00
Arnaud Cogoluègnes cc030ac195 Support initial-cluster-size argument on creation
See rabbitmq/rabbitmq-server#2467
2020-10-16 14:07:19 +02:00
Arnaud Cogoluègnes b704e2f8ef Check stream name before creation
Should not start with "amq.", be empty. Strips also newline
and carriage return characters.
2020-10-16 11:22:16 +02:00
Arnaud Cogoluègnes 27d06e8021 Add CLI command to list stream connections 2020-10-16 09:18:36 +02:00
Arnaud Cogoluègnes 9e6008a362 Add rabbitmq_ct_client_helpers dependency 2020-10-12 17:58:42 +02:00
Arnaud Cogoluègnes c85f98cb7f Add ct_client_helpers dependency 2020-10-12 17:51:17 +02:00
Arnaud Cogoluègnes 685164be64 Add INI-type configuration support 2020-10-12 17:29:38 +02:00
Arnaud Cogoluègnes 4420c77e8b Set default heartbeat to 60 seconds 2020-10-12 16:05:34 +02:00
Arnaud Cogoluègnes 5e80aa9f39 Add correlation ID field in commit offset frame
Not used yet, but can avoid a command version change if the command
should have confirm response.
2020-10-02 14:16:22 +02:00
Arnaud Cogoluègnes b8bdb5ae7b Bump dependencies in Java test suite
And apply Google Java Format with Maven Spotless plugin.
2020-09-29 12:05:29 +02:00
Arnaud Cogoluègnes 03a11e0771 Adapt failure tests
They are a bit more defensive. The subscription is also now more
reliable by returning a stream-not-available code if necessary.

Using also Aten poll interval to 1 second (bumped to 5 seconds in master
now).
2020-09-29 11:29:56 +02:00
Arnaud Cogoluègnes 04e981e9e6 Use rabbit_durable_queue to check if stream exists
This is done after checking rabbit_queue and if it returns that the
queue does not exist. The coordinator may be recovering the queue, so
thanks to this double check we know the queue exists but is not
available, instead of thinking it does not exist at all.
2020-09-17 09:30:20 +02:00
Arnaud Cogoluègnes cf5e99cd29 Add offset tracking commands 2020-09-15 17:52:05 +02:00
Arnaud Cogoluègnes c25d89d67a Adapt test to additional chunk type field in chunk 2020-09-03 13:46:57 +02:00
Arnaud Cogoluègnes 21d9aea96c Add publisher ID 2020-09-02 15:13:37 +02:00
Arnaud Cogoluègnes b2f30a55ba Use byte for sub ID in credit notification 2020-09-01 18:14:07 +02:00
Arnaud Cogoluègnes 9a788362dd Change sub ID to byte in protocol reference 2020-09-01 18:13:41 +02:00
Arnaud Cogoluègnes db93e14932 Use byte for subscription ID
Instead of integer. This is to be consistent with the introduction of a
similar ID for publishers (which will be a byte as well).
2020-09-01 18:07:27 +02:00
Arnaud Cogoluègnes ea2636cbb3 Add debug log during deletion 2020-08-07 16:43:34 +02:00
Arnaud Cogoluègnes 58f6ebff2e Refactor Java tests after Client package change 2020-08-06 14:01:02 +02:00
Arnaud Cogoluègnes 40f2db4291 Add function to kill connection based on name
For test purposes.
2020-08-05 14:43:07 +02:00
Arnaud Cogoluègnes 02d87cab5d Fix frame reading in test 2020-07-23 11:40:20 +02:00
Arnaud Cogoluègnes a886cd8872 Send heartbeat from the reader process
If the heartbeat frame is sent from a dedicated process, it interleaves
between 2 socket calls from the reader process. Frames are typically
sent in one call, so this is fine, but a chunk is delivered with 2
calls, one for the frame header and one send_file for the chunk. So the
heartbeat frame can sneak in between these 2 calls, which makes clients
fail to parse frames.
2020-07-10 09:42:00 +02:00
Arnaud Cogoluègnes 92ebb825cb Handle error case when creating a stream 2020-07-10 09:24:24 +02:00
Arnaud Cogoluègnes 7740fee13e Pass in monitor reference, not stream name 2020-07-09 11:33:44 +02:00
Arnaud Cogoluègnes 4714f682e5 Add consumer failure test
The node the consumer is connected to fails, the consumer connects
and starts consuming where it left off.
2020-07-06 17:42:46 +02:00
Arnaud Cogoluègnes 4f01776a65 Add publishing failure test
Stream leader node fails while publisher is publishing, publisher
reconnects on the new leader. A consumer should read all the confirmed
messages afterwards.
2020-07-03 16:10:38 +02:00
Arnaud Cogoluègnes af2dcf7f57 Handle publishing sub-entries (batch) 2020-06-30 17:29:28 +02:00
Arnaud Cogoluègnes 1597bdf14a Disable failure test 2020-06-29 10:51:31 +02:00
Arnaud Cogoluègnes 7270125c0b Fix closing sequence
When server sends close, it would not listen on the socket for the
client confirmation.
2020-06-26 16:33:39 +02:00
Arnaud Cogoluègnes 30e51ca4cb Add failure test 2020-06-25 16:25:02 +02:00
Arnaud Cogoluègnes 4a05b6b62a Ignore non-responding brokers in metadata command 2020-06-25 15:32:33 +02:00
Arnaud Cogoluègnes 1d3978ae40 Change response code label
From "stream deleted" to "stream not available". It covers now the
deletion of a stream and the unavailibility due to a failure. This is up
to the client to find out what to do (typically send a metadata request
about the stream and see if it's still there).
2020-06-23 10:51:34 +02:00
Arnaud Cogoluègnes 7b3d8c4ad0 Use Erlang monitor to detect stream deletion/failure 2020-06-22 18:33:54 +02:00
Arnaud Cogoluègnes 5bd352737c Pass in node information to Java test suite 2020-06-22 16:35:07 +02:00
Arnaud Cogoluègnes 2fd743f2bd Add credit response to protocol reference 2020-06-19 15:27:46 +02:00
Arnaud Cogoluègnes f8074a9f93 Notify client when it credits an unknown subscription 2020-06-19 15:19:39 +02:00
Arnaud Cogoluègnes 27c4e1e707 Add authorisation on publishing 2020-06-18 17:00:02 +02:00
Arnaud Cogoluègnes 5f69ef7cf7 Add authorisation for subscription 2020-06-18 16:13:14 +02:00
Arnaud Cogoluègnes 397c5ca078 Add authorisation for creation/deletion 2020-06-18 15:25:50 +02:00
Arnaud Cogoluègnes 3c18498734 Clean manager listener code
Now the manager uses the coordinator to know about deleted streams.
2020-06-18 10:57:01 +02:00
Arnaud Cogoluègnes ad165d78da Adjust licensing 2020-06-18 09:44:30 +02:00
Arnaud Cogoluègnes a1314a13c9 Use coordinator to get notified on stream deletion 2020-06-18 08:58:59 +02:00
Arnaud Cogoluègnes 625eaec004 Use rabbit_log 2020-06-15 11:17:27 +02:00
Arnaud Cogoluègnes 50581b2255 Fix cluster tests 2020-06-11 18:12:31 +02:00
Arnaud Cogoluègnes 157808ca8f Make max_frame consistent between makefile and application 2020-06-11 16:53:14 +02:00
Arnaud Cogoluègnes d3aa774156 Add Java-based tests for clustering 2020-06-11 15:38:07 +02:00
Arnaud Cogoluègnes 6a07d385ae Add specs t stream manager 2020-06-11 11:05:02 +02:00
Arnaud Cogoluègnes bb5efad9ef Fix dialyzer errors 2020-06-10 18:13:55 +02:00
Arnaud Cogoluègnes 76162b18a2 Add type specifications 2020-06-10 16:24:18 +02:00
Arnaud Cogoluègnes 19a1eb4013 Remove some unnecessary comments 2020-06-10 15:06:51 +02:00
Arnaud Cogoluègnes 16288a2596 Separate changing state from (almost) immutable state 2020-06-10 15:04:31 +02:00
Arnaud Cogoluègnes c39852fa72 Introduce PeerProperties command
To exchange client/server properties at the beginning of the connection.
2020-06-10 10:42:29 +02:00
Arnaud Cogoluègnes d2a29c5aef Support client properties 2020-06-09 17:48:23 +02:00
Arnaud Cogoluègnes 121f0e3575 Improve readme 2020-06-09 13:53:49 +02:00
Arnaud Cogoluègnes 6ef10c8573 Use MPL 2.0 2020-06-08 09:54:33 +02:00
Arnaud Cogoluègnes a56cf4013c Support first/last/next/offset/timestamp offset spec 2020-06-02 16:35:00 +02:00
Arnaud Cogoluègnes 9536d74f9d Update link to osiris for data format 2020-06-02 11:13:19 +02:00
Arnaud Cogoluègnes ecf47a8a42 Fix typo 2020-06-02 10:47:46 +02:00
Arnaud Cogoluègnes 2ab7e864dc Consume from a local member 2020-05-28 11:59:13 +02:00
Arnaud Cogoluègnes efc6fbc089 Add advertised host/port settings
This allows to communicate whatever it's appropriate to clients when
they issue the metadata command.
2020-05-28 10:47:30 +02:00
Arnaud Cogoluègnes 2f8559ae41 Polish documentation 2020-05-25 17:56:02 +02:00
Arnaud Cogoluègnes 838ef21b0d Document authentication sequence 2020-05-25 17:53:34 +02:00
Arnaud Cogoluègnes 4faa853b00 Fix link in documentation 2020-05-25 17:04:00 +02:00
Arnaud Cogoluègnes 0f86e54b61 Cover all commands in protocol documentation 2020-05-25 17:02:43 +02:00
Arnaud Cogoluègnes b7f70c6598 Fix links in documentation 2020-05-25 15:57:16 +02:00
Arnaud Cogoluègnes 848c95a181 Start documenting protocol 2020-05-25 15:55:51 +02:00
Arnaud Cogoluègnes b54026aa32 Add arguments for stream creation
To handle retention settings.
2020-05-19 18:18:30 +02:00
Arnaud Cogoluègnes 55adca1b44 Make sure queue is stream queue 2020-05-07 11:00:45 +02:00
Arnaud Cogoluègnes c2e35eb55f Use stream coordinator to manage streams 2020-05-06 17:35:41 +02:00
Arnaud Cogoluègnes 2d19e85925 Use stream instead of target 2020-05-06 09:15:16 +02:00
Arnaud Cogoluègnes b61a79b9ff Credit value is signed 2020-04-03 11:00:35 +02:00
Arnaud Cogoluègnes 204f61399b Handle client heartbeat 2020-04-01 10:08:32 +02:00
Arnaud Cogoluègnes 8c97d442ce Add heartbeat 2020-03-31 14:43:06 +02:00
Arnaud Cogoluègnes ece2a4770f Refactoring before introducing heartbeat
Introduce a level of supervisors to have a parent PID for the heartbeat
process.
2020-03-31 10:12:35 +02:00
Arnaud Cogoluègnes b693f71c5d Add todo task 2020-03-30 17:46:27 +02:00
Arnaud Cogoluègnes 47d46d145b Send close when client sends frame too large 2020-03-30 15:18:57 +02:00
Arnaud Cogoluègnes e899bdfb3e Refactor tune
Use int32 for both max frame size and bump max frame size to 1 MB.
2020-03-27 15:55:57 +01:00
Arnaud Cogoluègnes 670f5f639b Add test for close 2020-03-27 09:26:02 +01:00
Arnaud Cogoluègnes 9667525cd7 Update test for opening sequence 2020-03-26 17:52:54 +01:00
Arnaud Cogoluègnes 4e035dfbdb Add support to send close 2020-03-26 16:56:53 +01:00
Arnaud Cogoluègnes a26962cfcb Handle close command from client 2020-03-26 14:52:19 +01:00
Arnaud Cogoluègnes 7c33112f25 Check virtual host access in open 2020-03-26 09:53:28 +01:00
Arnaud Cogoluègnes 728a017f9e Add skeleton for tune and open 2020-03-25 17:06:04 +01:00
Arnaud Cogoluègnes 1fd5270d01 Use constants in tests 2020-03-25 10:22:16 +01:00
Arnaud Cogoluègnes b84de96d0b Add test for authentication 2020-03-25 10:08:10 +01:00
Arnaud Cogoluègnes 55a836b488 Refactor to pre/post authentication frame handling 2020-03-24 17:42:10 +01:00
Arnaud Cogoluègnes 6ae44768f3 Handle null binary in SASL authenticate 2020-03-24 16:40:05 +01:00
Arnaud Cogoluègnes 22dc72c9d9 Handle SASL authenticate 2020-03-24 11:47:50 +01:00
Arnaud Cogoluègnes e2f11fdafc Handle SASL handshake 2020-03-23 14:54:59 +01:00
Arnaud Cogoluègnes 1f42faeab8 Refactor after some Osiris changes 2020-03-23 10:48:46 +01:00
Arnaud Cogoluègnes 9f64d3d490 Add instructions to build and run 2020-03-17 11:37:04 +01:00
Arnaud Cogoluègnes 4e8a801e8d Add license information 2020-03-17 10:59:37 +01:00
Arnaud Cogoluègnes ab98aecd17 Initial import 2020-03-16 16:40:02 +01:00
Arnaud Cogoluègnes b9de5bc80b Initial commit 2020-03-16 16:21:18 +01:00