sunjincheng created BEAM-7120:
---------------------------------

             Summary: Turn `WindowedValue<T>` into `T` for all the interfaces 
of Data Plane
                 Key: BEAM-7120
                 URL: https://issues.apache.org/jira/browse/BEAM-7120
             Project: Beam
          Issue Type: Improvement
          Components: runner-core, sdk-java-harness, sdk-py-harness
            Reporter: sunjincheng
            Assignee: sunjincheng


The main purpose of this JIRA is Turn `WindowedValue<T>` into `T` for all the 
interfaces of Data Plane.

The interface definitions for sending and receiving data in the code as follows:
 - org.apache.beam.runners.fnexecution.data.FnDataService
{code:java}
public interface FnDataService {
  <T> InboundDataClient receive(LogicalEndpoint inputLocation, 
Coder<WindowedValue<T>> coder, FnDataReceiver<WindowedValue<T>> listener);
  <T> CloseableFnDataReceiver<WindowedValue<T>> send(
      LogicalEndpoint outputLocation, Coder<WindowedValue<T>> coder);
}
{code}

 - org.apache.beam.fn.harness.data.BeamFnDataClient
{code:java}
public interface BeamFnDataClient {
  <T> InboundDataClient receive(ApiServiceDescriptor apiServiceDescriptor, 
LogicalEndpoint inputLocation, Coder<WindowedValue<T>> coder, 
FnDataReceiver<WindowedValue<T>> receiver);
  <T> CloseableFnDataReceiver<WindowedValue<T>> send(BeamFnDataGrpcClient 
Endpoints.ApiServiceDescriptor apiServiceDescriptor, LogicalEndpoint 
outputLocation, Coder<WindowedValue<T>> coder);
}
{code}

Both `Coder<WindowedValue<T>>` and `FnDataReceiver<WindowedValue<T>>` use 
`WindowedValue` as the data structure that both sides of Runner and SDK Harness 
know each other. Control Plane/Data Plane/State Plane/Logging is a highly 
abstraction, such as Control Plane and Logging, these are common requirements 
for all multi-language platforms. For example, the Flink community is also 
discussing how to support Python UDF, as well as how to deal with docker 
environment. how to data transfer, how to state access, how to logging etc. If 
Beam can further abstract these service interfaces, i.e., interface definitions 
are compatible with multiple engines, and finally provided to other projects in 
the form of class libraries, it definitely will help other platforms that want 
to support multiple languages. So we can further abstract the interface 
definition of FnDataService's BeamFnDataClient, take the FnDataService#receive 
interface as an example, and turn `WindowedValue<T>` into `T` so that other 
platforms can be extended arbitrarily, as follows:
{code:java}
<T> InboundDataClient receive(LogicalEndpoint inputLocation, Coder<T> coder, 
FnDataReceiver<T>> listener);
{code}
For details, see the mail discussion list:

[https://lists.apache.org/[email protected]:lte=1M:%5BDISCUSS%5D%20Turn%20%60WindowedValue]



--
This message was sent by Atlassian JIRA
(v7.6.3#76005)

Reply via email to