/*
* Copyright(C) 2010-2011 Alibaba Group Holding Limited All rights reserved. Licensed 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 com.alibaba.doris.dataserver.migrator.action;
import org.slf4j.Logger;
import org.slf4j.LoggerFactory;
import com.alibaba.doris.common.migrate.MigrateSubCommand;
import com.alibaba.doris.dataserver.Module;
import com.alibaba.doris.dataserver.ModuleContext;
import com.alibaba.doris.dataserver.action.Action;
import com.alibaba.doris.dataserver.config.ModuleConstances;
import com.alibaba.doris.dataserver.core.Request;
import com.alibaba.doris.dataserver.core.Response;
import com.alibaba.doris.dataserver.migrator.MigrationManager;
/**
* MigrationAction. 迁移指令执行器.
*
* @author Kun He (Raymond He), kun.hek@alibaba-inc.com
* @since 1.0 2011-5-25
*/
public class MigrationAction implements Action {
private static final Logger logger = LoggerFactory.getLogger(MigrationAction.class);
public static class Message {
public static final String UNKNOWN_MIGRATE_SUBCOMMAND = "UNKNOWN_MIGRATE_SUBCOMMAND";
public static final String INVALID_MIGRATE_COMMAND = "INVALID_MIGRATE_COMMAND";
public static final String MIGRATE_FAILED = "MIGRATE_FAILED";
public static final String MIGRATE_CANCELLED = "MIGRATE_CANCELLED";
}
private MigrationManager migrationManager;
public void setMigrationManager(MigrationManager migrationManager) {
this.migrationManager = migrationManager;
}
/**
* 执行迁移
*/
public void execute(Request request, Response response) {
if (migrationManager == null) {
Module module = request.getApplicationContext().getModuleByName(ModuleConstances.MIGRATION_MODULE);
ModuleContext moduleContext = module.getModuleContext();
migrationManager = (MigrationManager) moduleContext.getAttribute(MigrationManager._MigrationManager);
}
migrationManager.setPort(request.getServerPort());
MigrationActionData actionData = (MigrationActionData) request.getActionData();
if (logger.isInfoEnabled()) {
logger.info("Receive command, Type: " + actionData.getActionType() + "," + actionData.getSubcommand()
+ ", DataServer port: " + request.getServerPort());
}
if (!checkSubCommand(actionData)) {
if (logger.isDebugEnabled()) logger.debug("Invalid migrate subcommand " + actionData.getSubcommand());
response.write(actionData);
return;
}
String retMsg = null;
if (actionData.isCancelCommand()) {
retMsg = migrationManager.cancelMigrate(actionData);
} else if (actionData.isAllFinishedCommand()) {
retMsg = migrationManager.allFinishMigrate(actionData);
} else if (actionData.isStartCommand()) {
// start migration
retMsg = migrationManager.startMigrate(actionData);
} else if (actionData.isDataCleanCommand()) {
retMsg = migrationManager.dataClean(actionData);
} else {
// Default , take as queryStatus.
// if( actionData.isQueryStatus() )
retMsg = migrationManager.queryStatus(actionData);
}
// else {
// throw new IllegalArgumentException("Unkown migrate subcommand '" + actionData.getSubcommand() +"'.");
// }
// write response.
actionData.setReturnMessage(retMsg);
response.write(actionData);
}
/**
* 检查子命令
*
* @param actionData
* @return
*/
protected boolean checkSubCommand(MigrationActionData actionData) {
MigrateSubCommand subCommand = actionData.getSubcommand();
if (subCommand == null) {
actionData.setErrorMessage(Message.UNKNOWN_MIGRATE_SUBCOMMAND + " " + actionData.getSubcommand());
return false;
}
return true;
}
}