package com.alibaba.doris.dataserver.action.parser;
import com.alibaba.doris.common.data.util.ByteUtils;
import com.alibaba.doris.dataserver.action.data.ActionData;
import com.alibaba.doris.dataserver.action.data.ErrorActionData;
import com.alibaba.doris.dataserver.net.ByteBufferWrapper;
import com.alibaba.doris.dataserver.net.protocol.text.ProtocolConstant;
/**
* @author ajun Email:jack.yuj@alibaba-inc.com
*/
public class ErrorActionParser extends BaseActionParser {
public void writeHead(ByteBufferWrapper buffer, ActionData actionData) {
ErrorActionData md = (ErrorActionData) actionData;
switch (md.getCode()) {
case ErrorActionData.CLIENT_ERROR: {
buffer.writeBytes(ProtocolConstant.CLIENT_ERROR);
String errorMessage = md.getErrorMessage();
buffer.writeByte(ProtocolConstant.SPACE);
if (null != errorMessage) {
buffer.writeBytes(ByteUtils.stringToByte(errorMessage));
} else {
buffer.writeBytes(ProtocolConstant.ERROR);
}
buffer.writeBytes(ProtocolConstant.CRLF);
break;
}
case ErrorActionData.VERSION_OUT_OF_DATE: {
buffer.writeBytes(ProtocolConstant.VERSION_OUT_OF_DATE);
buffer.writeByte(ProtocolConstant.SPACE);
String errorMessage = md.getErrorMessage();
if (null != errorMessage) {
buffer.writeBytes(ByteUtils.stringToByte(errorMessage));
}
buffer.writeBytes(ProtocolConstant.CRLF);
break;
}
case ErrorActionData.SERVER_ERROR: {
buffer.writeBytes(ProtocolConstant.SERVER_ERROR);
String errorMessage = md.getErrorMessage();
buffer.writeByte(ProtocolConstant.SPACE);
if (null != errorMessage) {
buffer.writeBytes(ByteUtils.stringToByte(errorMessage));
} else {
buffer.writeBytes(ProtocolConstant.ERROR);
}
buffer.writeBytes(ProtocolConstant.CRLF);
break;
}
case ErrorActionData.UNKNOWN_COMMAND: {
buffer.writeBytes(ProtocolConstant.ERROR);
buffer.writeByte(ProtocolConstant.SPACE);
if (md.getErrorMessage() != null) {
buffer.writeBytes(ByteUtils.stringToByte(md.getErrorMessage()));
}
buffer.writeBytes(ProtocolConstant.CRLF);
break;
}
default: {
buffer.writeBytes(ProtocolConstant.ERROR);
buffer.writeBytes(ProtocolConstant.CRLF);
}
}
}
public ActionData readHead(byte[] header, int startPos) {
// Error action data是内部产生的数据,无需从命令行解析数据。此方法永远不会被调用。
return null;
}
}