package com.alibaba.doris.dataserver.action;
import com.alibaba.doris.common.data.Key;
import com.alibaba.doris.common.data.Value;
import com.alibaba.doris.common.data.impl.ValueImpl;
import com.alibaba.doris.dataserver.action.data.CompareAndDeleteActionData;
import com.alibaba.doris.dataserver.action.data.ErrorActionData;
import com.alibaba.doris.dataserver.action.data.SimpleActionData;
import com.alibaba.doris.dataserver.core.Request;
import com.alibaba.doris.dataserver.core.Response;
import com.alibaba.doris.dataserver.store.Storage;
import com.alibaba.doris.dataserver.store.exception.VersionConflictException;
/**
* @author ajun Email:jack.yuj@alibaba-inc.com
*/
public class DeleteAction extends BaseAction {
public void execute(Request request, Response response) {
SimpleActionData actionData = (SimpleActionData) request.getActionData();
try {
Storage storage = getStorage(request);
Key key = request.getKey();
boolean bResult = false;
if (actionData.isCas()) {
CompareAndDeleteActionData deleteCas = (CompareAndDeleteActionData) actionData;
Value value = new ValueImpl(null, deleteCas.getTimestamp());
bResult = storage.delete(key, value);
} else {
bResult = storage.delete(key);
}
actionData.setSuccess(bResult);
} catch (VersionConflictException e) {
actionData.setSuccess(false);
if (actionData.isCas()) {
CompareAndDeleteActionData deleteCas = (CompareAndDeleteActionData) actionData;
deleteCas.setDeleteFailed(true);
}
} catch (Exception e) {
ErrorActionData ad = new ErrorActionData(ErrorActionData.SERVER_ERROR);
ad.setErrorMessage("Execute " + actionData + " failed. Error message:" + e.getMessage());
response.write(ad);
return;
}
response.write(actionData);
}
}