[
https://issues.apache.org/jira/browse/IGNITE-22644?page=com.atlassian.jira.plugin.system.issuetabpanels:all-tabpanel
]
Aleksandr updated IGNITE-22644:
-------------------------------
Description:
Compute API provides JobDescriptor in java
https://github.com/apache/ignite-3/blob/7dedc06ea25b9c63dcdfb69290c7862c754a0d8f/modules/api/src/main/java/org/apache/ignite/compute/JobDescriptor.java#L29
With this api I can define argument and result marshallers in the java client:
{code:java}
String result = compute.execute(
JobTarget.node(targetNode),
JobDescriptor.builder(ArgMarshalingJob.class)
.argumentMarshaller(new ArgumentStringMarshaller())
.resultMarshaller(new ResultStringUnMarshaller())
.build(),
"Input"
);
// ...
static class ArgumentStringMarshaller implements ByteArrayMarshaler<String> {
@Override
public byte @Nullable [] marshal(@Nullable String object) {
return ByteArrayMarshaler.super.marshal(object +
":marshalledOnClient");
}
}
static class ResultStringUnMarshaller implements ByteArrayMarshaler<String>
{
@Override
public @Nullable String unmarshal(byte @Nullable [] raw) {
return ByteArrayMarshaler.super.unmarshal(raw) +
":unmarshalledOnClient";
}
}
{code}
Argument marshaller is called on the client side during job argument packing,
so, the argument is sent as marshalled byte[]. Result marhaller unmarshalls the
result from the job from byte[] to the target type.
Invariant: If one has defined argument/result marshaller in JobDescriptor then
they must define argument/result marshaller in the compute job.
By default marshallers are null everywhere. Null means "No marshaller defined",
the existing serialization is used. More in IEP:
https://cwiki.apache.org/confluence/display/IGNITE/IEP-124%3A+User+Object+Serialization
was:tbd
> .NET Client Marshaler API
> -------------------------
>
> Key: IGNITE-22644
> URL: https://issues.apache.org/jira/browse/IGNITE-22644
> Project: Ignite
> Issue Type: Improvement
> Reporter: Aleksandr
> Assignee: Pavel Tupitsyn
> Priority: Major
> Labels: ignite-3
>
> Compute API provides JobDescriptor in java
> https://github.com/apache/ignite-3/blob/7dedc06ea25b9c63dcdfb69290c7862c754a0d8f/modules/api/src/main/java/org/apache/ignite/compute/JobDescriptor.java#L29
>
> With this api I can define argument and result marshallers in the java
> client:
> {code:java}
> String result = compute.execute(
> JobTarget.node(targetNode),
> JobDescriptor.builder(ArgMarshalingJob.class)
> .argumentMarshaller(new ArgumentStringMarshaller())
> .resultMarshaller(new ResultStringUnMarshaller())
> .build(),
> "Input"
> );
> // ...
> static class ArgumentStringMarshaller implements ByteArrayMarshaler<String> {
> @Override
> public byte @Nullable [] marshal(@Nullable String object) {
> return ByteArrayMarshaler.super.marshal(object +
> ":marshalledOnClient");
> }
> }
> static class ResultStringUnMarshaller implements
> ByteArrayMarshaler<String> {
> @Override
> public @Nullable String unmarshal(byte @Nullable [] raw) {
> return ByteArrayMarshaler.super.unmarshal(raw) +
> ":unmarshalledOnClient";
> }
> }
> {code}
> Argument marshaller is called on the client side during job argument packing,
> so, the argument is sent as marshalled byte[]. Result marhaller unmarshalls
> the result from the job from byte[] to the target type.
> Invariant: If one has defined argument/result marshaller in JobDescriptor
> then they must define argument/result marshaller in the compute job.
> By default marshallers are null everywhere. Null means "No marshaller
> defined", the existing serialization is used. More in IEP:
> https://cwiki.apache.org/confluence/display/IGNITE/IEP-124%3A+User+Object+Serialization
>
--
This message was sent by Atlassian Jira
(v8.20.10#820010)