Closed huntc closed 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.
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
What filtering functionality should we support for this initial work in terms of initial and adaptive filters?