akka / akka-edge-rs

Akka Edge support in Rust
https://doc.akka.io/docs/akka-edge/current/
Other
9 stars 1 forks source link

Need to consider filters #25

Closed huntc closed 1 year ago

huntc commented 1 year ago

What filtering functionality should we support for this initial work in terms of initial and adaptive filters?

patriknw commented 1 year ago

Consumer defined filters (Edge is consumer) is probably most important, so that an edge service can receive only the subset of events that it is interested in. Consumer filters are declarative, so you send the definitions over gRPC and it will be the JVM producer service that will evaluate them.

Take a look at https://doc.akka.io/docs/akka-projection/snapshot/grpc.html#filters (not the producer defined section).

I think dynamic consumer filters would be useful, but you could start with the static (initial) approach to get a feel of it.

Producer defined filter is easier, just a producerFilter: (EventEnvelope[Any]) => Boolean. The producer filter can be static, well the logic in the function can change at runtime.

patriknw commented 1 year ago

One addition to my previous statement about producer filter. The producerFilter function as mentioned, but we also have a consumer defined filter when edge is producer. That is passed in the ConsumerEventStart here https://github.com/akka/akka-projection/blob/231716fc3ed1e3f27f9649544d739d105b5e8ded/akka-projection-grpc/src/main/protobuf/akka/projection/grpc/event_consumer.proto#L58

That is the same type of FilterCriteria that you have implemented in previous PRs, but now they should be evaluated on the edge side (producer side). For reference, the scala impl of the filter evaluation is here https://github.com/akka/akka-projection/blob/231716fc3ed1e3f27f9649544d739d105b5e8ded/akka-projection-grpc/src/main/scala/akka/projection/grpc/internal/FilterStage.scala#L109