Having trouble getting rateLimit working in Argo Events sensor trigger

435 Views Asked by At

I'm trying to limit the number of Argo workflows started per minute in an Argo events sensor trigger using the rateLimit parameter as specified in https://argoproj.github.io/argo-events/sensors/more-about-sensors-and-triggers/. But no luck so far.

Here's a snippet of my sensor YAML test script:

apiVersion: argoproj.io/v1alpha1
kind: Sensor
metadata:
  name: amqp-level0
spec:
  template:
    serviceAccountName: operate-workflow-sa
  dependencies:
    - name: test-dep
      eventSourceName: amqp-interval
      eventName: interval
  triggers:
    - rateLimit:
        unit: Minute
        requestsPerUnit: 5
    - template:
        name: amqp-workflow-trigger
        k8s:
          operation: create
          source:
            resource:
              apiVersion: argoproj.io/v1alpha1
              kind: Workflow
              ...

Without the rateLimit block, the sensor loads into k8s fine. But with that block, it doesn't run, and I see the following in the controller-manager logs:

{"level":"error","ts":1680700596.098304,"logger":"argo-events.eventbus-controller","caller":"sensor/controller.go:74","msg":"reconcile error","namespace":"argo-events","sensor":"amqp-level0","error":"trigger template can't be nil","stacktrace":"github.com/argoproj/argo-events/controllers/sensor.(*reconciler).Reconcile\n\t/home/runner/work/argo-events/argo-events/controllers/sensor/controller.go:74\nsigs.k8s.io/controller-runtime/pkg/internal/controller.(*Controller).Reconcile\n\t/home/runner/go/pkg/mod/sigs.k8s.io/[email protected]/pkg/internal/controller/controller.go:114\nsigs.k8s.io/controller-runtime/pkg/internal/controller.(*Controller).reconcileHandler\n\t/home/runner/go/pkg/mod/sigs.k8s.io/[email protected]/pkg/internal/controller/controller.go:311\nsigs.k8s.io/controller-runtime/pkg/internal/controller.(*Controller).processNextWorkItem\n\t/home/runner/go/pkg/mod/sigs.k8s.io/[email protected]/pkg/internal/controller/controller.go:266\nsigs.k8s.io/controller-runtime/pkg/internal/controller.(*Controller).Start.func2.2\n\t/home/runner/go/pkg/mod/sigs.k8s.io/[email protected]/pkg/internal/controller/controller.go:227"}

(Note the "trigger template can't be nil", which seems to be the issue, but I haven't figured out how to resolve.)

The Argo events installed is 1.7.6, and Argo is

> argo version
argo: v3.4.6
  BuildDate: 2023-03-31T19:53:49Z
  GitCommit: 988706dd131cf98808f09fb7cc03780e2af94c73
  GitTreeState: clean
  GitTag: v3.4.6
  GoVersion: go1.18.10
  Compiler: gc
  Platform: linux/amd64

Any ideas? Thanks.

1

There are 1 best solutions below

0
ldjohn On BEST ANSWER

Ok, finally got back to this and figured out the proper nomenclature. The rateLimit block needs to be entered with (or at least works with) the following syntax:

triggers:
  - template:
      name: amqp-workflow-trigger
      k8s:
        operation: create
        source:
          ...

    rateLimit:
      unit: Minutes
      requestsPerUnit: 5

With that, the sensor is reading event messages at the prescribed rate.