protected Cluster.Action getAction (int fromServer, int fromRegion, int toServer, int toRegion) { if (fromServer < 0 || toServer < 0) { return Cluster.NullAction; } if (fromRegion > 0 && toRegion > 0) { return new Cluster.SwapRegionsAction(fromServer, fromRegion, toServer, toRegion); } else if (fromRegion > 0) { return new Cluster.MoveRegionAction(fromRegion, fromServer, toServer); } else if (toRegion > 0) { return new Cluster.MoveRegionAction(toRegion, toServer, fromServer); } else { return Cluster.NullAction; } }
/** Called once per cluster Action to give the cost function * an opportunity to update it's state. postAction() is always * called at least once before cost() is called with the cluster * that this action is performed on. */ void postAction(Action action) { switch (action.type) { case NULL: break; case ASSIGN_REGION: AssignRegionAction ar = (AssignRegionAction) action; regionMoved(ar.region, -1, ar.server); break; case MOVE_REGION: MoveRegionAction mra = (MoveRegionAction) action; regionMoved(mra.region, mra.fromServer, mra.toServer); break; case SWAP_REGIONS: SwapRegionsAction a = (SwapRegionsAction) action; regionMoved(a.fromRegion, a.fromServer, a.toServer); regionMoved(a.toRegion, a.toServer, a.fromServer); break; default: throw new RuntimeException("Uknown action:" + action.type); } }
protected Cluster.Action getAction(int fromServer, int fromRegion, int toServer, int toRegion) { if (fromServer < 0 || toServer < 0) { return Cluster.NullAction; } if (fromRegion > 0 && toRegion > 0) { return new Cluster.SwapRegionsAction(fromServer, fromRegion, toServer, toRegion); } else if (fromRegion > 0) { return new Cluster.MoveRegionAction(fromRegion, fromServer, toServer); } else if (toRegion > 0) { return new Cluster.MoveRegionAction(toRegion, toServer, fromServer); } else { return Cluster.NullAction; } }