Do not block Gerrit's event bus when queue is full

If rabbitmq goes down and the plugin cannot send messages for a long
enough time, the queue will eventually fill up. queue.put() will block
and wait for the publisher to start consuming from the queue and block
the event bus in Gerrit until queue is non-full.

Producer:
* If queue is full throw away incoming events instead of blocking.
Consumer:
* Wait for event to be available.
* If event is available: take event and wait for an open connection.
* If publish event fails and queue is full: throw away event.

Change-Id: Idbe6a344fbaa8ae8715a5ddac7a1b1e89204f436
3 files changed
tree: 58c925be59e3eb6ef6db4efb88c8f0c6eff3a319
  1. src/
  2. .gitignore
  3. BUILD
  4. external_plugin_deps.bzl
  5. LICENSE
  6. README.md
README.md

gerrit-rabbitmq-plugin: Gerrit event publish plugin via RabbitMQ

Synopsis

This is Gerrit plugin.

This can publish gerrit events to message queue provided by RabbitMQ. Published events are the same as Gerrit stream evnets.

This plugin works on Gerrit 2.8 - 2.13.

Environments

  • linux
  • java-1.8
  • Bazel

Reference

Minimum Configuration

  [amqp]
    uri = amqp://localhost
  [exchange]
    name = exchange-for-gerrit-queue
  [message]
    routingKey = com.foobar.www.gerrit
  [gerrit]
    name = foobar-gerrit
    hostname = www.foobar.com

History

  • 3.14 (Freezed)

    • New branch: stable-2.10
    • HEAD in master is permanently latest but would not be updated by author anymore.
  • 3.1

    • Fix README
  • 3.0

    • New feature: multi url support
    • Bump amqp-client to 3.5.0
    • Bump Gradle shadow plugin to 1.2.1
    • Add Gradle release plugin 2.0.2
    • Fix & improve connection handling
  • 2.0

    • The feature that configure queue/exchange/bind has been removed. Means messages are published to existing exhange only.
    • Allow event filter based on an existing user (Thanks @GLundh!)
    • Fix singletonize Properties class and fix typo (Thanks @hugares!)
    • Add API support: 2.9-2.10
    • Bumped default Gerrit API to 2.10
    • Bumped amqp-client to 3.4.4
    • Bumped Gradle to 2.3
    • Remove Buck support
  • 1.4

    • Binary release
    • Add gradle support
    • Remove maven support
  • 1.3

    • Build with Buck
    • Bumped api version to 2.8.3
  • 1.2

    • Fix repository location for gerrit-api
    • Update README
  • 1.1

    • Fix channel handling
    • Add property: monitor.failureCount
    • Update README and documents
  • 1.0

    • First release

License

The Apache Software License, Version 2.0

Copyright

Copyright (c) 2013 rinrinne a.k.a. rin_ne