Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

flink rest api client 解析服务端返回的结果有类无法反序列化 #268

Closed
baisui1981 opened this issue Sep 23, 2023 · 0 comments
Labels
bug Something isn't working
Milestone

Comments

@baisui1981
Copy link
Member

baisui1981 commented Sep 23, 2023

Caused by: java.util.concurrent.ExecutionException: org.apache.flink.runtime.concurrent.FutureUtils$RetryException: Could not complete the operation. Number of retries has been exhausted.
	at java.util.concurrent.CompletableFuture.reportGet(CompletableFuture.java:357)
	at java.util.concurrent.CompletableFuture.get(CompletableFuture.java:1908)
	at com.qlangtech.tis.plugins.flink.client.FlinkClient.lambda$null$1(FlinkClient.java:103)
	at org.apache.flink.client.ClientUtils.waitUntilJobInitializationFinished(ClientUtils.java:164)
	... 9 common frames omitted
Caused by: java.io.IOException: Failed to deserialize org.apache.flink.util.SerializedThrowable
	at org.apache.flink.runtime.rest.messages.json.SerializedThrowableDeserializer.deserialize(SerializedThrowableDeserializer.java:53)
	at org.apache.flink.runtime.rest.messages.json.JobResultDeserializer.deserialize(JobResultDeserializer.java:106)
	at org.apache.flink.runtime.rest.messages.json.JobResultDeserializer.deserialize(JobResultDeserializer.java:50)
	at org.apache.flink.shaded.jackson2.com.fasterxml.jackson.databind.deser.SettableBeanProperty.deserialize(SettableBeanProperty.java:542)
	at org.apache.flink.shaded.jackson2.com.fasterxml.jackson.databind.deser.BeanDeserializer._deserializeWithErrorWrapping(BeanDeserializer.java:565)
	at org.apache.flink.shaded.jackson2.com.fasterxml.jackson.databind.deser.BeanDeserializer._deserializeUsingPropertyBased(BeanDeserializer.java:449)
	at org.apache.flink.shaded.jackson2.com.fasterxml.jackson.databind.deser.BeanDeserializerBase.deserializeFromObjectUsingNonDefault(BeanDeserializerBase.java:1390)
	at org.apache.flink.shaded.jackson2.com.fasterxml.jackson.databind.deser.BeanDeserializer.deserializeFromObject(BeanDeserializer.java:362)
	at org.apache.flink.shaded.jackson2.com.fasterxml.jackson.databind.deser.BeanDeserializer.deserialize(BeanDeserializer.java:195)
	at org.apache.flink.shaded.jackson2.com.fasterxml.jackson.databind.deser.DefaultDeserializationContext.readRootValue(DefaultDeserializationContext.java:322)
	at org.apache.flink.shaded.jackson2.com.fasterxml.jackson.databind.ObjectMapper._readValue(ObjectMapper.java:4569)
	at org.apache.flink.shaded.jackson2.com.fasterxml.jackson.databind.ObjectMapper.readValue(ObjectMapper.java:2867)
	at org.apache.flink.runtime.rest.RestClient.parseResponse(RestClient.java:475)
	... 7 common frames omitted
Caused by: java.lang.ClassNotFoundException: org.apache.flink.util.SerializedThrowable
	at java.net.URLClassLoader.findClass(URLClassLoader.java:387)
	at java.lang.ClassLoader.loadClass(ClassLoader.java:418)
	at sun.misc.Launcher$AppClassLoader.loadClass(Launcher.java:355)
	at java.lang.ClassLoader.loadClass(ClassLoader.java:351)
	at java.lang.Class.forName0(Native Method)
	at java.lang.Class.forName(Class.java:348)
	at org.apache.flink.util.InstantiationUtil$ClassLoaderObjectInputStream.resolveClass(InstantiationUtil.java:76)
	at java.io.ObjectInputStream.readNonProxyDesc(ObjectInputStream.java:2011)
	at java.io.ObjectInputStream.readClassDesc(ObjectInputStream.java:1875)
	at java.io.ObjectInputStream.readOrdinaryObject(ObjectInputStream.java:2209)

原因是 org.apache.flink.runtime.rest.messages.json.SerializedThrowableDeserializer 类中无法从classloader中加载flink的类:

public class SerializedThrowableDeserializer extends StdDeserializer<SerializedThrowable> {
    private static final long serialVersionUID = 1L;

    public SerializedThrowableDeserializer() {
        super(SerializedThrowable.class);
    }

    public SerializedThrowable deserialize(JsonParser p, DeserializationContext ctxt) throws IOException {
        JsonNode root = (JsonNode)p.readValueAsTree();
        byte[] serializedException = root.get("serialized-throwable").binaryValue();

        try {
            return (SerializedThrowable)InstantiationUtil.deserializeObject(serializedException, ClassLoader.getSystemClassLoader());
        } catch (ClassNotFoundException var6) {
            throw new IOException("Failed to deserialize " + SerializedThrowable.class.getCanonicalName(), var6);
        }
    }
}
@baisui1981 baisui1981 added the bug Something isn't working label Sep 23, 2023
@baisui1981 baisui1981 added this to the v4.0.0 milestone Sep 23, 2023
@baisui1981 baisui1981 added this to To do in TIS Work Plan Oct 18, 2023
TIS Work Plan automation moved this from To do to Done Feb 29, 2024
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment
Labels
bug Something isn't working
Projects
TIS Work Plan
  
Done
Development

No branches or pull requests

1 participant