It looks like PortBindingChassisEvent is feeding itself with events.
When a PortBindingChassisEvent is received, the revision_number is incremented, port bindings are updated (with the only change being the revision_number), which triggers a new PortBindingChassisEvent.
When looking at the ddlog replay, the update of the revision_number in northd for logical_switch_port and logical_router_port, actually deletes and recreates the keys in the northbound db, which cause deletion and recreation of multicast_group and port_binding in the southbound db (so just a change of the revision_number does have some cost).
It looks like PortBindingChas sisEvent is feeding itself with events.
When a PortBindingChas sisEvent is received, the revision_number is incremented, port bindings are updated (with the only change being the revision_number), which triggers a new PortBindingChas sisEvent.
When looking at the ddlog replay, the update of the revision_number in northd for logical_switch_port and logical_ router_ port, actually deletes and recreates the keys in the northbound db, which cause deletion and recreation of multicast_group and port_binding in the southbound db (so just a change of the revision_number does have some cost).