5.7.181. Bugzilla::Extension::Push

5.7.181.1. Name

Bugzilla::Extension::Push - Message Bus support for Bugzilla

5.7.181.2. Version

Version 1

5.7.181.3. Description

This module will allow you to configure your Bugzilla server to send message on several message buses.

The messages will only contain data an unprivileged user can see.

5.7.181.4. Configuration and Environment

This extension supports multiple connectors, only one of each connector type can be active at a time.

Each connector has it’s own configuration requirements.

Connectors

File

This connector will write messages to a file on ./data/ on the server, the defaul fil is ./data/push.log

STOMPL_SSL

Bugzilla will connect to a broker using STOMP over SSL.

An SSL Certificate and a Keyfile are required to establish the connection.

5.7.181.5. Messages

Each message can contain 2 items, and event and the change set, the change set index will be the name of the object changed. e.g. “bug” if a bug is created or it’s attributes changed, or “comment” if a comment is added or edited.

Event Format

The event object contains the basic information about the change.

The fields are:

  • routing_key
Takes the form $object_type + ‘.’ + $action where the object type can be bug, comment, or attachment, and the action can be create, modify, or update.
  • target
The object_type targeted by the event: bug, comment, or attachment.
  • bug_id
The ID of the bug affected.
  • change_set
The unique ID of the change.
  • time
The time of the change, without time zone.
  • action
The action of the event: crete, modify, or update.
  • user
The user who made the change.

Example for a comment creation event

{
  "event" : {
     "routing_key" : "comment.create",
     "target" : "comment",
     "bug_id" : 1386104,
     "change_set" : "3624.1480914009.90748",
     "time" : "2016-12-04T19:00:38",
     "action" : "create",
     "user" : {
        "real_name" : "Jeff Fearn",
        "login" : "jfearn@redhat.com",
        "id" : 193645
     }
  }
}

Public Messages

Public messages contain an “event” key and object key.

Example for a comment creation event

 {
   "event" : {
      "routing_key" : "comment.create",
      "target" : "comment",
      "bug_id" : 1386104,
      "action" : "create",
      "time" : "2016-12-04T18:49:51",
      "user" : {
         "real_name" : "Jeff Fearn",
         "id" : 193645,
         "login" : "jfearn@redhat.com"
      },
      "change_set" : "3550.1480913363.34313"
   },
   "comment" : {
      "id" : 1386104,
      "body" : "testing a public comment",
      "creation_time" : "2016-12-04T18:50:38",
      "number" : 2,
      "is_private" : false,
      "bug" : {
         "product" : {
            "id" : 35,
            "name" : "Bugzilla"
         },
         "alias" : [],
         "severity" : "medium",
         "reporter" : {
            "login" : "qgong@redhat.com",
            "id" : 331384,
            "real_name" : "Rony Gong"
         },
         "url" : "",
         "component" : {
            "id" : 1169,
            "name" : "Bugzilla General"
         },
         "operating_system" : "Unspecified",
         "is_private" : false,
         "version" : {
            "name" : "5.0",
            "id" : 3956
         },
         "flags" : [
         ],
         "summary" : "The quick search function in the documentation page doesn't work",
         "last_change_time" : "2016-10-18T20:51:16",
         "assigned_to" : {
            "id" : 193645,
            "login" : "jfearn@redhat.com",
            "real_name" : "Jeff Fearn"
         },
         "id" : 1386104,
         "keywords" : [],
         "status" : {
            "id" : 8,
            "name" : "MODIFIED"
         },
         "whiteboard" : "",
         "target_milestone" : null,
         "platform" : "Unspecified",
         "priority" : "unspecified",
         "resolution" : "",
         "qa_contact" : {
            "real_name" : "tools-bugs",
            "id" : 309088,
            "login" : "tools-bugs@redhat.com"
         },
         "classification" : "Community",
         "creation_time" : "2016-10-17T21:40:06"
      }
   }
}

Private Messages

Private messages only contain the event.

Example for a private comment creation event

{
  "event" : {
     "routing_key" : "comment.create",
     "target" : "comment",
     "bug_id" : 1386104,
     "change_set" : "3624.1480914009.90748",
     "time" : "2016-12-04T19:00:38",
     "action" : "create",
     "user" : {
        "real_name" : "Jeff Fearn",
        "login" : "jfearn@redhat.com",
        "id" : 193645
     }
  }
}

5.7.181.6. Multi-Connector Message Processing

The Push extension supports multiple connectors running simultaneously. Understanding the message processing flow is crucial for debugging delivery issues.

Message Processing Behavior

When a message is queued and multiple connectors are enabled (e.g., both Kafka and STOMP), each connector processes the message independently:

  1. Main Queue Processing
Each message is processed against ALL enabled connectors sequentially.
    1. Independent Results
Each connector can succeed or fail independently - one connector’s failure does not affect others.
    1. Backlog Management
Failed deliveries are added to the individual connector’s backlog queue, not a shared queue.
    1. Message Removal
The original message is removed from the main queue after ALL connectors have been attempted, regardless of individual results.

Example Scenario

Bug update creates a message in the main queue:

  • Kafka Connector
Delivers successfully to topic - no backlog entry created.
  • STOMP Connector
Network timeout occurs - message added to STOMP backlog queue.
  • Result
Kafka users see notification immediately. STOMP users will see notification when backlog is processed in the next poll cycle.

Key Design Benefits

  • Resilient
One failing connector does not block others from delivering messages.
  • No Duplicates
Successful deliveries are not repeated when other connectors fail.
  • Independent Retry
Each connector maintains its own backlog and retry policy.
  • Non-blocking
Main queue processing continues even when individual connectors fail.

5.7.181.7. Author

Red Hat patches by Jeff Fearn <jfearn@redhat.com>


This documentation undoubtedly has bugs; if you find some, please file them here.