blob: 93b655e7012f1e745b8ca60b1b79b9899722803d [file] [log] [blame]
// 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.doris.common;
import org.apache.doris.proto.PStatus;
import org.apache.doris.thrift.TStatus;
import org.apache.doris.thrift.TStatusCode;
public class Status {
public static final Status OK = new Status();
public static final Status CANCELLED = new Status(TStatusCode.CANCELLED, "Cancelled");
public static final Status THRIFT_RPC_ERROR = new Status(TStatusCode.THRIFT_RPC_ERROR, "Thrift RPC failed");
public TStatusCode getErrorCode() {
return errorCode;
}
public String getErrorMsg() {
return errorMsg;
}
private TStatusCode errorCode; // anything other than OK
private String errorMsg;
public Status() {
this.errorCode = TStatusCode.OK;
this.errorMsg = null;
}
public Status(Status status) {
this(status.getErrorCode(), status.getErrorMsg());
}
public Status(TStatusCode code, final String errorMsg) {
this.errorCode = code;
this.errorMsg = errorMsg;
}
public Status(final TStatus status) {
this.errorCode = status.status_code;
if (status.isSetError_msgs()) {
this.errorMsg = status.error_msgs.get(0);
}
}
public boolean ok() {
return this.errorCode == TStatusCode.OK;
}
public boolean isCancelled() {
return this.errorCode == TStatusCode.CANCELLED;
}
public boolean isRpcError() {
return this.errorCode == TStatusCode.THRIFT_RPC_ERROR;
}
public void setStatus(Status status) {
this.errorCode = status.errorCode;
this.errorMsg = status.getErrorMsg();
}
public void setStatus(String msg) {
this.errorCode = TStatusCode.INTERNAL_ERROR;
this.errorMsg = msg;
}
public void setPstatus(PStatus status) {
this.errorCode = TStatusCode.findByValue(status.status_code);
if (status.error_msgs != null && !status.error_msgs.isEmpty()) {
this.errorMsg = status.error_msgs.get(0);
}
}
public void setRpcStatus(String msg) {
this.errorCode = TStatusCode.THRIFT_RPC_ERROR;
this.errorMsg = msg;
}
public void rewriteErrorMsg() {
if (ok()) {
return;
}
switch (errorCode) {
case CANCELLED: {
this.errorMsg = "Cancelled";
break;
} case ANALYSIS_ERROR: {
this.errorMsg = "Analysis_error";
break;
} case NOT_IMPLEMENTED_ERROR: {
this.errorMsg = "Not_implemented_error";
break;
} case RUNTIME_ERROR: {
this.errorMsg = "Runtime_error";
break;
} case MEM_LIMIT_EXCEEDED: {
this.errorMsg = "Mem_limit_error";
break;
} case INTERNAL_ERROR: {
this.errorMsg = "Internal_error";
break;
} case THRIFT_RPC_ERROR: {
this.errorMsg = "Thrift_rpc_error";
break;
} case TIMEOUT: {
this.errorMsg = "Timeout";
break;
} default: {
this.errorMsg = "Unknown_error";
break;
}
}
}
}