Browse Source
# dolphinscheduler-remote/src/main/java/org/apache/dolphinscheduler/remote/NettyRemotingClient.java # dolphinscheduler-remote/src/main/java/org/apache/dolphinscheduler/remote/command/ExecuteTaskRequestCommand.java # dolphinscheduler-remote/src/main/java/org/apache/dolphinscheduler/remote/command/ExecuteTaskResponseCommand.java # dolphinscheduler-remote/src/main/java/org/apache/dolphinscheduler/remote/command/Ping.java # dolphinscheduler-remote/src/main/java/org/apache/dolphinscheduler/remote/command/log/GetLogBytesRequestCommand.java # dolphinscheduler-remote/src/main/java/org/apache/dolphinscheduler/remote/command/log/RollViewLogRequestCommand.java # dolphinscheduler-remote/src/main/java/org/apache/dolphinscheduler/remote/command/log/ViewLogRequestCommand.java # dolphinscheduler-remote/src/main/java/org/apache/dolphinscheduler/remote/handler/NettyClientHandler.javapull/2/head
qiaozhanwei
5 years ago
16 changed files with 261 additions and 345 deletions
@ -1 +1 @@ |
|||||||
/*
* Licensed to the Apache Software Foundation (ASF) under one or more
* contributor license agreements. See the NOTICE file distributed with
* this work for additional information regarding copyright ownership.
* The ASF licenses this file to You under the Apache License, Version 2.0
* (the "License"); you may not use this file except in compliance with
* the License. You may obtain a copy of the License at
*
* http://www.apache.org/licenses/LICENSE-2.0
*
* Unless required by applicable law or agreed to in writing, software
* distributed under the License is distributed on an "AS IS" BASIS,
* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
* See the License for the specific language governing permissions and
* limitations under the License.
*/
package org.apache.dolphinscheduler.remote.command;
import org.apache.dolphinscheduler.remote.utils.FastJsonSerializer;
import java.io.Serializable;
import java.util.List;
import java.util.concurrent.atomic.AtomicLong;
/**
* execute task request command
*/
public class ExecuteTaskRequestCommand implements Serializable {
private static final AtomicLong REQUEST = new AtomicLong(1);
/**
* task id
*/
private String taskId;
/**
* attempt id
*/
cm">/**
* execute task request command
/**
cm">/**
*/
*/
cm">/**
public class ExecuteTaskRequestCommand implements Serializable {
/**
* group name
*/
private String groupName;
/**
* task name
*/
private String taskName;
/**
* connect port
*/
* execute task request command
/**
* execute task request command
cm">/**
*/
* execute task request command
* execute task request command
/**
* execute task request command
*/
*/
* execute task request command
public class ExecuteTaskRequestCommand implements Serializable {
/**
* execute task request command
*/
* execute task request command
private static final AtomicLong REQUEST = new AtomicLong(1);
/**
* execute task request command
/**
*/
* execute task request command
* task id
/**
* execute task request command
*/
*/
>
private List<Integer> shardItems;
public List<Integer> getShardItems() {
return shardItems;
}
public void setShardItems(List<Integer> shardItems) {
this.shardItems = shardItems;
}
public String getParams() {
return params;
}
public void setParams(String params) {
this.params = params;
}
public String getTaskId() {
return taskId;
}
public void setTaskId(String taskId) {
this.taskId = taskId;
}
public String getApplicationName() {
return applicationName;
}
public void setApplicationName(String applicationName) {
this.applicationName = applicationName;
}
public String getGroupName() {
return groupName;
}
public void setGroupName(String groupName) {
this.groupName = groupName;
}
public String getTaskName() {
return taskName;
}
public void setTaskName(String taskName) {
this.taskName = taskName;
}
public int getConnectorPort() {
return connectorPort;
}
public void setConnectorPort(int connectorPort) {
this.connectorPort = connectorPort;
}
public String getDescription() {
return description;
}
public void setDescription(String description) {
this.description = description;
}
public String getClassName() {
return className;
}
public void setClassName(String className) {
this.className = className;
}
public String getMethodName() {
return methodName;
}
public void setMethodName(String methodName) {
this.methodName = methodName;
}
/**
* package request command
*
* @return command
*/
public Command convert2Command(){
Command command = new Command(REQUEST.getAndIncrement());
command.setType(CommandType.EXECUTE_TASK_REQUEST);
byte[] body = FastJsonSerializer.serialize(this);
command.setBody(body);
return command;
}
} |
/*
* Licensed to the Apache Software Foundation (ASF) under one or more
* contributor license agreements. See the NOTICE file distributed with
* this work for additional information regarding copyright ownership.
* The ASF licenses this file to You under the Apache License, Version 2.0
* (the "License"); you may not use this file except in compliance with
* the License. You may obtain a copy of the License at
*
* http://www.apache.org/licenses/LICENSE-2.0
*
* Unless required by applicable law or agreed to in writing, software
* distributed under the License is distributed on an "AS IS" BASIS,
* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
* See the License for the specific language governing permissions and
* limitations under the License.
*/
package org.apache.dolphinscheduler.remote.command;
import org.apache.dolphinscheduler.remote.utils.FastJsonSerializer;
import java.io.Serializable;
import java.util.List;
import java.util.concurrent.atomic.AtomicLong;
*/
cm">/**
*/
* execute task request command
*/
*/
*/
* execute task request command
*/
public class ExecuteTaskRequestCommand implements Serializable {
*/
* execute task request command
*/
*/
* execute task request command
private String groupName;
*/
* execute task request command
*/
/**
*/
* execute task request command
private int connectorPort;
*/
* execute task request command
*/
*/
*/
* execute task request command
private String className;
*/
* execute task request command
private String methodName;
*/
* execute task request command
public class ExecuteTaskRequestCommand implements Serializable {
* execute task request command
public class ExecuteTaskRequestCommand implements Serializable {
*/
>
private List<Integer> shardItems;
public List<Integer> getShardItems() {
return shardItems;
}
public void setShardItems(List<Integer> shardItems) {
this.shardItems = shardItems;
}
public String getParams() {
return params;
}
public void setParams(String params) {
this.params = params;
}
public String getTaskId() {
return taskId;
}
public void setTaskId(String taskId) {
this.taskId = taskId;
}
public String getApplicationName() {
return applicationName;
}
public void setApplicationName(String applicationName) {
this.applicationName = applicationName;
}
public String getGroupName() {
return groupName;
}
public void setGroupName(String groupName) {
this.groupName = groupName;
}
public String getTaskName() {
return taskName;
}
public void setTaskName(String taskName) {
this.taskName = taskName;
}
public int getConnectorPort() {
return connectorPort;
}
public void setConnectorPort(int connectorPort) {
this.connectorPort = connectorPort;
}
public String getDescription() {
return description;
}
public void setDescription(String description) {
this.description = description;
}
public String getClassName() {
return className;
}
public void setClassName(String className) {
this.className = className;
}
public String getMethodName() {
return methodName;
}
public void setMethodName(String methodName) {
this.methodName = methodName;
}
public Command convert2Command(){
Command command = new Command();
command.setType(CommandType.EXECUTE_TASK_REQUEST);
byte[] body = FastJsonSerializer.serialize(this);
command.setBody(body);
return command;
}
} |
@ -1 +1 @@ |
|||||||
/*
* Licensed to the Apache Software Foundation (ASF) under one or more
* contributor license agreements. See the NOTICE file distributed with
* this work for additional information regarding copyright ownership.
* The ASF licenses this file to You under the Apache License, Version 2.0
* (the "License"); you may not use this file except in compliance with
* the License. You may obtain a copy of the License at
*
* http://www.apache.org/licenses/LICENSE-2.0
*
* Unless required by applicable law or agreed to in writing, software
* distributed under the License is distributed on an "AS IS" BASIS,
* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
* See the License for the specific language governing permissions and
* limitations under the License.
*/
package org.apache.dolphinscheduler.remote.command;
import org.apache.dolphinscheduler.remote.utils.FastJsonSerializer;
import java.io.Serializable;
import java.util.concurrent.atomic.AtomicLong;
/**
* execute taks response command
*/
public class ExecuteTaskResponseCommand implements Serializable {
private static final AtomicLong REQUEST = new AtomicLong(1);
/**
* task id
*/
private String taskId;
/**
* attempt id
*/
cm">/**
* execute taks response command
/**
* result info
*/
cm">/**
public class ExecuteTaskResponseCommand implements Serializable {
/**
cm">/**
*/
cm">/**
private static final AtomicLong REQUEST = new AtomicLong(1);
/**
* execute count
*/
private int executeCount;
/**
* execute time
* execute taks response command
>
private long executeTime;
public String getAttemptId() {
return attemptId;
}
public void setAttemptId(String attemptId) {
this.attemptId = attemptId;
}
public String getTaskId() {
return taskId;
}
public void setTaskId(String taskId) {
this.taskId = taskId;
}
public Object getResult() {
return result;
}
public void setResult(Object result) {
this.result = result;
}
public long getReceivedTime() {
return receivedTime;
}
public void setReceivedTime(long receivedTime) {
this.receivedTime = receivedTime;
}
public int getExecuteCount() {
return executeCount;
}
public void setExecuteCount(int executeCount) {
this.executeCount = executeCount;
}
public long getExecuteTime() {
return executeTime;
}
public void setExecuteTime(long executeTime) {
this.executeTime = executeTime;
}
/**
* package response command
*
* @return command
*/
public Command convert2Command(){
Command command = new Command(REQUEST.getAndIncrement());
command.setType(CommandType.EXECUTE_TASK_RESPONSE);
byte[] body = FastJsonSerializer.serialize(this);
command.setBody(body);
return command;
}
} |
/*
* Licensed to the Apache Software Foundation (ASF) under one or more
* contributor license agreements. See the NOTICE file distributed with
* this work for additional information regarding copyright ownership.
* The ASF licenses this file to You under the Apache License, Version 2.0
* (the "License"); you may not use this file except in compliance with
* the License. You may obtain a copy of the License at
*
* http://www.apache.org/licenses/LICENSE-2.0
*
* Unless required by applicable law or agreed to in writing, software
* distributed under the License is distributed on an "AS IS" BASIS,
* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
* See the License for the specific language governing permissions and
* limitations under the License.
*/
package org.apache.dolphinscheduler.remote.command;
import org.apache.dolphinscheduler.remote.utils.FastJsonSerializer;
import java.io.Serializable;
import java.util.concurrent.atomic.AtomicLong;
* execute taks response command
cm">/**
* execute taks response command
* execute taks response command
* execute taks response command
*/
* execute taks response command
public class ExecuteTaskResponseCommand implements Serializable {
* execute taks response command
* execute taks response command
private static final AtomicLong REQUEST = new AtomicLong(1);
* execute taks response command
/**
* execute taks response command
* task id
>
private long executeTime;
public String getAttemptId() {
return attemptId;
}
public void setAttemptId(String attemptId) {
this.attemptId = attemptId;
}
public String getTaskId() {
return taskId;
}
public void setTaskId(String taskId) {
this.taskId = taskId;
}
public Object getResult() {
return result;
}
public void setResult(Object result) {
this.result = result;
}
public long getReceivedTime() {
return receivedTime;
}
public void setReceivedTime(long receivedTime) {
this.receivedTime = receivedTime;
}
public int getExecuteCount() {
return executeCount;
}
public void setExecuteCount(int executeCount) {
this.executeCount = executeCount;
}
public long getExecuteTime() {
return executeTime;
}
public void setExecuteTime(long executeTime) {
this.executeTime = executeTime;
}
public Command convert2Command(long opaque){
Command command = new Command();
command.setType(CommandType.EXECUTE_TASK_RESPONSE);
byte[] body = FastJsonSerializer.serialize(this);
command.setBody(body);
return command;
}
} |
@ -0,0 +1,20 @@ |
|||||||
|
package org.apache.dolphinscheduler.remote.exceptions; |
||||||
|
|
||||||
|
/** |
||||||
|
* @Author: Tboy |
||||||
|
*/ |
||||||
|
public class RemotingTimeoutException extends RemotingException{ |
||||||
|
|
||||||
|
public RemotingTimeoutException(String message) { |
||||||
|
super(message); |
||||||
|
} |
||||||
|
|
||||||
|
|
||||||
|
public RemotingTimeoutException(String address, long timeoutMillis) { |
||||||
|
this(address, timeoutMillis, null); |
||||||
|
} |
||||||
|
|
||||||
|
public RemotingTimeoutException(String address, long timeoutMillis, Throwable cause) { |
||||||
|
super(String.format("wait response on the channel %s timeout %s", address, timeoutMillis), cause); |
||||||
|
} |
||||||
|
} |
@ -0,0 +1,10 @@ |
|||||||
|
package org.apache.dolphinscheduler.remote.future; |
||||||
|
|
||||||
|
/** |
||||||
|
* @Author: Tboy |
||||||
|
*/ |
||||||
|
public interface InvokeCallback { |
||||||
|
|
||||||
|
void operationComplete(final ResponseFuture responseFuture); |
||||||
|
|
||||||
|
} |
@ -0,0 +1,101 @@ |
|||||||
|
package org.apache.dolphinscheduler.remote.future; |
||||||
|
|
||||||
|
import org.apache.dolphinscheduler.remote.command.Command; |
||||||
|
|
||||||
|
import java.util.concurrent.ConcurrentHashMap; |
||||||
|
import java.util.concurrent.CountDownLatch; |
||||||
|
import java.util.concurrent.TimeUnit; |
||||||
|
|
||||||
|
/** |
||||||
|
* @Author: Tboy |
||||||
|
*/ |
||||||
|
public class ResponseFuture { |
||||||
|
|
||||||
|
private final static ConcurrentHashMap<Long,ResponseFuture> FUTURE_TABLE = new ConcurrentHashMap<>(256); |
||||||
|
|
||||||
|
private final long opaque; |
||||||
|
|
||||||
|
private final long timeoutMillis; |
||||||
|
|
||||||
|
private final InvokeCallback invokeCallback; |
||||||
|
|
||||||
|
private final CountDownLatch latch = new CountDownLatch(1); |
||||||
|
|
||||||
|
private final long beginTimestamp = System.currentTimeMillis(); |
||||||
|
|
||||||
|
private volatile Command responseCommand; |
||||||
|
|
||||||
|
private volatile boolean sendOk = true; |
||||||
|
|
||||||
|
private volatile Throwable cause; |
||||||
|
|
||||||
|
|
||||||
|
public ResponseFuture(long opaque, long timeoutMillis, InvokeCallback invokeCallback) { |
||||||
|
this.opaque = opaque; |
||||||
|
this.timeoutMillis = timeoutMillis; |
||||||
|
this.invokeCallback = invokeCallback; |
||||||
|
FUTURE_TABLE.put(opaque, this); |
||||||
|
} |
||||||
|
|
||||||
|
public Command waitResponse() throws InterruptedException { |
||||||
|
this.latch.await(timeoutMillis, TimeUnit.MILLISECONDS); |
||||||
|
return this.responseCommand; |
||||||
|
} |
||||||
|
|
||||||
|
public void putResponse(final Command responseCommand) { |
||||||
|
this.responseCommand = responseCommand; |
||||||
|
this.latch.countDown(); |
||||||
|
FUTURE_TABLE.remove(opaque); |
||||||
|
} |
||||||
|
|
||||||
|
public static ResponseFuture getFuture(long opaque){ |
||||||
|
return FUTURE_TABLE.get(opaque); |
||||||
|
} |
||||||
|
|
||||||
|
public boolean isTimeout() { |
||||||
|
long diff = System.currentTimeMillis() - this.beginTimestamp; |
||||||
|
return diff > this.timeoutMillis; |
||||||
|
} |
||||||
|
|
||||||
|
public void executeInvokeCallback() { |
||||||
|
if (invokeCallback != null) { |
||||||
|
invokeCallback.operationComplete(this); |
||||||
|
} |
||||||
|
} |
||||||
|
|
||||||
|
public boolean isSendOK() { |
||||||
|
return sendOk; |
||||||
|
} |
||||||
|
|
||||||
|
public void setSendOk(boolean sendOk) { |
||||||
|
this.sendOk = sendOk; |
||||||
|
} |
||||||
|
|
||||||
|
public void setCause(Throwable cause) { |
||||||
|
this.cause = cause; |
||||||
|
} |
||||||
|
|
||||||
|
public Throwable getCause() { |
||||||
|
return cause; |
||||||
|
} |
||||||
|
|
||||||
|
public long getOpaque() { |
||||||
|
return opaque; |
||||||
|
} |
||||||
|
|
||||||
|
public long getTimeoutMillis() { |
||||||
|
return timeoutMillis; |
||||||
|
} |
||||||
|
|
||||||
|
public long getBeginTimestamp() { |
||||||
|
return beginTimestamp; |
||||||
|
} |
||||||
|
|
||||||
|
public Command getResponseCommand() { |
||||||
|
return responseCommand; |
||||||
|
} |
||||||
|
|
||||||
|
public InvokeCallback getInvokeCallback() { |
||||||
|
return invokeCallback; |
||||||
|
} |
||||||
|
} |
Loading…
Reference in new issue