public class BeamFnDataGrpcMultiplexer
extends java.lang.Object
implements java.lang.AutoCloseable
Endpoints.ApiServiceDescriptor
.
Multiplexes data for inbound consumers based upon their instructionId
.
Multiplexing inbound and outbound streams is as thread safe as the consumers of those streams. For inbound streams, this is as thread safe as the inbound observers. For outbound streams, this is as thread safe as the underlying stream observer.
TODO: Add support for multiplexing over multiple outbound observers by stickying the output location with a specific outbound observer.
Constructor and Description |
---|
BeamFnDataGrpcMultiplexer(org.apache.beam.model.pipeline.v1.Endpoints.ApiServiceDescriptor apiServiceDescriptor,
OutboundObserverFactory outboundObserverFactory,
OutboundObserverFactory.BasicFactory<org.apache.beam.model.fnexecution.v1.BeamFnApi.Elements,org.apache.beam.model.fnexecution.v1.BeamFnApi.Elements> baseOutboundObserverFactory) |
Modifier and Type | Method and Description |
---|---|
void |
close() |
org.apache.beam.vendor.grpc.v1p69p0.io.grpc.stub.StreamObserver<org.apache.beam.model.fnexecution.v1.BeamFnApi.Elements> |
getInboundObserver() |
org.apache.beam.vendor.grpc.v1p69p0.io.grpc.stub.StreamObserver<org.apache.beam.model.fnexecution.v1.BeamFnApi.Elements> |
getOutboundObserver() |
void |
poisonInstructionId(java.lang.String instructionId)
Poisons an instruction id.
|
void |
registerConsumer(java.lang.String instructionId,
CloseableFnDataReceiver<org.apache.beam.model.fnexecution.v1.BeamFnApi.Elements> receiver)
Registers a consumer for the specified instruction id.
|
java.lang.String |
toString() |
void |
unregisterConsumer(java.lang.String instructionId)
Unregisters a previously registered consumer.
|
public BeamFnDataGrpcMultiplexer(org.apache.beam.model.pipeline.v1.Endpoints.ApiServiceDescriptor apiServiceDescriptor, OutboundObserverFactory outboundObserverFactory, OutboundObserverFactory.BasicFactory<org.apache.beam.model.fnexecution.v1.BeamFnApi.Elements,org.apache.beam.model.fnexecution.v1.BeamFnApi.Elements> baseOutboundObserverFactory)
public java.lang.String toString()
toString
in class java.lang.Object
public org.apache.beam.vendor.grpc.v1p69p0.io.grpc.stub.StreamObserver<org.apache.beam.model.fnexecution.v1.BeamFnApi.Elements> getInboundObserver()
public org.apache.beam.vendor.grpc.v1p69p0.io.grpc.stub.StreamObserver<org.apache.beam.model.fnexecution.v1.BeamFnApi.Elements> getOutboundObserver()
public void registerConsumer(java.lang.String instructionId, CloseableFnDataReceiver<org.apache.beam.model.fnexecution.v1.BeamFnApi.Elements> receiver)
The BeamFnDataGrpcMultiplexer
partitions BeamFnApi.Elements
with multiple
instruction ids ensuring that the receiver will only see BeamFnApi.Elements
with a
single instruction id.
The caller must either unregister the consumer
when all messages
have been processed or poison the instruction
if messages
for the instruction should be dropped.
public void unregisterConsumer(java.lang.String instructionId)
public void poisonInstructionId(java.lang.String instructionId)
Any records for the instruction on the inbound observer will be dropped for the next POISONED_INSTRUCTION_ID_CACHE_TIMEOUT
.
public void close() throws java.lang.Exception
close
in interface java.lang.AutoCloseable
java.lang.Exception