public class org.apache.dubbo.rpc.cluster.support.ForkingClusterInvoker extends org.apache.dubbo.rpc.cluster.support.AbstractClusterInvoker
{
private final java.util.concurrent.ExecutorService executor;
public void <init>(org.apache.dubbo.rpc.cluster.Directory)
{
org.apache.dubbo.rpc.cluster.Directory v;
org.apache.dubbo.rpc.cluster.support.ForkingClusterInvoker v;
java.util.concurrent.ExecutorService v;
org.apache.dubbo.common.threadlocal.NamedInternalThreadFactory v;
v := @this: org.apache.dubbo.rpc.cluster.support.ForkingClusterInvoker;
v := @parameter: org.apache.dubbo.rpc.cluster.Directory;
specialinvoke v.<org.apache.dubbo.rpc.cluster.support.AbstractClusterInvoker: void <init>(org.apache.dubbo.rpc.cluster.Directory)>(v);
v = new org.apache.dubbo.common.threadlocal.NamedInternalThreadFactory;
specialinvoke v.<org.apache.dubbo.common.threadlocal.NamedInternalThreadFactory: void <init>(java.lang.String,boolean)>("forking-cluster-timer", 1);
v = staticinvoke <java.util.concurrent.Executors: java.util.concurrent.ExecutorService newCachedThreadPool(java.util.concurrent.ThreadFactory)>(v);
v.<org.apache.dubbo.rpc.cluster.support.ForkingClusterInvoker: java.util.concurrent.ExecutorService executor> = v;
return;
}
public org.apache.dubbo.rpc.Result doInvoke(org.apache.dubbo.rpc.Invocation, java.util.List, org.apache.dubbo.rpc.cluster.LoadBalance) throws org.apache.dubbo.rpc.RpcException
{
java.lang.Runnable v;
org.apache.dubbo.common.URL v, v;
java.util.concurrent.atomic.AtomicInteger v;
boolean v, v, v, v;
org.apache.dubbo.rpc.cluster.support.ForkingClusterInvoker v;
org.apache.dubbo.rpc.RpcException v, v;
java.util.concurrent.LinkedBlockingQueue v;
java.util.List v, v;
java.lang.Throwable v, v, v, v;
org.apache.dubbo.rpc.cluster.LoadBalance v;
org.apache.dubbo.rpc.RpcContext v, v, v;
org.apache.dubbo.rpc.Invocation v;
org.apache.dubbo.rpc.Invoker v;
java.util.ArrayList v;
int v, v, v, v, v;
java.lang.String v, v, v, v;
java.util.concurrent.ExecutorService v;
java.util.Iterator v;
java.util.concurrent.TimeUnit v;
java.lang.InterruptedException v;
java.lang.Object v, v;
v := @this: org.apache.dubbo.rpc.cluster.support.ForkingClusterInvoker;
v := @parameter: org.apache.dubbo.rpc.Invocation;
v := @parameter: java.util.List;
v := @parameter: org.apache.dubbo.rpc.cluster.LoadBalance;
label:
virtualinvoke v.<org.apache.dubbo.rpc.cluster.support.ForkingClusterInvoker: void checkInvokers(java.util.List,org.apache.dubbo.rpc.Invocation)>(v, v);
v = virtualinvoke v.<org.apache.dubbo.rpc.cluster.support.ForkingClusterInvoker: org.apache.dubbo.common.URL getUrl()>();
v = virtualinvoke v.<org.apache.dubbo.common.URL: int getParameter(java.lang.String,int)>("forks", 2);
v = virtualinvoke v.<org.apache.dubbo.rpc.cluster.support.ForkingClusterInvoker: org.apache.dubbo.common.URL getUrl()>();
v = virtualinvoke v.<org.apache.dubbo.common.URL: int getParameter(java.lang.String,int)>("timeout", 1000);
if v <= 0 goto label;
v = interfaceinvoke v.<java.util.List: int size()>();
if v < v goto label;
label:
v = v;
goto label;
label:
v = new java.util.ArrayList;
specialinvoke v.<java.util.ArrayList: void <init>(int)>(v);
v = v;
label:
v = interfaceinvoke v.<java.util.List: int size()>();
if v >= v goto label;
v = virtualinvoke v.<org.apache.dubbo.rpc.cluster.support.ForkingClusterInvoker: org.apache.dubbo.rpc.Invoker select(org.apache.dubbo.rpc.cluster.LoadBalance,org.apache.dubbo.rpc.Invocation,java.util.List,java.util.List)>(v, v, v, v);
v = interfaceinvoke v.<java.util.List: boolean contains(java.lang.Object)>(v);
if v != 0 goto label;
interfaceinvoke v.<java.util.List: boolean add(java.lang.Object)>(v);
goto label;
label:
v = staticinvoke <org.apache.dubbo.rpc.RpcContext: org.apache.dubbo.rpc.RpcContext getContext()>();
virtualinvoke v.<org.apache.dubbo.rpc.RpcContext: org.apache.dubbo.rpc.RpcContext setInvokers(java.util.List)>(v);
v = new java.util.concurrent.atomic.AtomicInteger;
specialinvoke v.<java.util.concurrent.atomic.AtomicInteger: void <init>()>();
v = new java.util.concurrent.LinkedBlockingQueue;
specialinvoke v.<java.util.concurrent.LinkedBlockingQueue: void <init>()>();
v = interfaceinvoke v.<java.util.List: java.util.Iterator iterator()>();
label:
v = interfaceinvoke v.<java.util.Iterator: boolean hasNext()>();
if v == 0 goto label;
v = interfaceinvoke v.<java.util.Iterator: java.lang.Object next()>();
v = v.<org.apache.dubbo.rpc.cluster.support.ForkingClusterInvoker: java.util.concurrent.ExecutorService executor>;
v = staticinvoke <org.apache.dubbo.rpc.cluster.support.ForkingClusterInvoker$lambda_doInvoke_0__123: java.lang.Runnable bootstrap$(org.apache.dubbo.rpc.Invoker,org.apache.dubbo.rpc.Invocation,java.util.concurrent.BlockingQueue,java.util.concurrent.atomic.AtomicInteger,java.util.List)>(v, v, v, v, v);
interfaceinvoke v.<java.util.concurrent.ExecutorService: void execute(java.lang.Runnable)>(v);
goto label;
label:
v = <java.util.concurrent.TimeUnit: java.util.concurrent.TimeUnit MILLISECONDS>;
v = interfaceinvoke v.<java.util.concurrent.BlockingQueue: java.lang.Object poll(long,java.util.concurrent.TimeUnit)>(v, v);
v = v instanceof java.lang.Throwable;
if v == 0 goto label;
v = new org.apache.dubbo.rpc.RpcException;
v = v instanceof org.apache.dubbo.rpc.RpcException;
if v == 0 goto label;
v = virtualinvoke v.<org.apache.dubbo.rpc.RpcException: int getCode()>();
goto label;
label:
v = 0;
label:
v = virtualinvoke v.<java.lang.Throwable: java.lang.String getMessage()>();
v = dynamicinvoke "makeConcatWithConstants" <java.lang.String (java.util.List,java.lang.String)>(v, v) <java.lang.invoke.StringConcatFactory: java.lang.invoke.CallSite makeConcatWithConstants(java.lang.invoke.MethodHandles$Lookup,java.lang.String,java.lang.invoke.MethodType,java.lang.String,java.lang.Object[])>("Failed to forking invoke provider \u, but no luck to perform the invocation. Last error is: \u0001");
v = virtualinvoke v.<java.lang.Throwable: java.lang.Throwable getCause()>();
if v == null goto label;
v = virtualinvoke v.<java.lang.Throwable: java.lang.Throwable getCause()>();
goto label;
label:
v = v;
label:
specialinvoke v.<org.apache.dubbo.rpc.RpcException: void <init>(int,java.lang.String,java.lang.Throwable)>(v, v, v);
throw v;
label:
v = staticinvoke <org.apache.dubbo.rpc.RpcContext: org.apache.dubbo.rpc.RpcContext getContext()>();
virtualinvoke v.<org.apache.dubbo.rpc.RpcContext: void clearAttachments()>();
return v;
label:
v := @caughtexception;
v = new org.apache.dubbo.rpc.RpcException;
v = virtualinvoke v.<java.lang.InterruptedException: java.lang.String getMessage()>();
v = dynamicinvoke "makeConcatWithConstants" <java.lang.String (java.util.List,java.lang.String)>(v, v) <java.lang.invoke.StringConcatFactory: java.lang.invoke.CallSite makeConcatWithConstants(java.lang.invoke.MethodHandles$Lookup,java.lang.String,java.lang.invoke.MethodType,java.lang.String,java.lang.Object[])>("Failed to forking invoke provider \u, but no luck to perform the invocation. Last error is: \u0001");
specialinvoke v.<org.apache.dubbo.rpc.RpcException: void <init>(java.lang.String,java.lang.Throwable)>(v, v);
throw v;
label:
v := @caughtexception;
v = staticinvoke <org.apache.dubbo.rpc.RpcContext: org.apache.dubbo.rpc.RpcContext getContext()>();
virtualinvoke v.<org.apache.dubbo.rpc.RpcContext: void clearAttachments()>();
throw v;
catch java.lang.InterruptedException from label to label with label;
catch java.lang.Throwable from label to label with label;
}
}