private List<PSSAction> processActions(List<PSSAction> actions, ActionType actionType) throws PSSException { ArrayList<PSSAction> results = new ArrayList<PSSAction>(); for (PSSAction action : actions) { ResDetails res = null; switch (actionType) { case MODIFY: res = action.getRequest().getModifyReq().getReservation(); break; case SETUP: res = action.getRequest().getSetupReq().getReservation(); break; case TEARDOWN: res = action.getRequest().getTeardownReq().getReservation(); break; case STATUS: res = action.getRequest().getSetupReq().getReservation(); break; default: throw new PSSException("invalid actiontype: " + actionType); } this.prepareAction(action, res); String srcDeviceId = EoMPLSUtils.getDeviceId(res, false); String dstDeviceId = EoMPLSUtils.getDeviceId(res, true); boolean sameDevice = srcDeviceId.equals(dstDeviceId); if (!sameDevice) { log.debug("source edge device id is: " + srcDeviceId + ", starting " + actionType); action = this.processActionForDevice(action, srcDeviceId); log.debug("destination edge device id is: " + dstDeviceId + ", starting " + actionType); action = this.processActionForDevice(action, dstDeviceId); } else { log.debug("only device id is: " + srcDeviceId + ", starting same-device " + actionType); action = this.processActionForDevice(action, dstDeviceId); } action.setStatus(ActionStatus.SUCCESS); results.add(action); // this notifies the coordinator we have succeeded ClassFactory.getInstance().getWorkflow().update(action); // now if there's a post-commit for this action, do it if (!sameDevice) { processPostCommitActionForDevice(action, srcDeviceId); log.debug( "destination edge device id is: " + dstDeviceId + ", starting " + actionType + " post-commit command"); processPostCommitActionForDevice(action, dstDeviceId); } else { log.debug( "only device id is: " + srcDeviceId + ", starting same-device " + actionType + " post-commit command"); processPostCommitActionForDevice(action, dstDeviceId); } } return results; }
public void prepareAction(PSSAction action, ResDetails res) throws PSSException { ActionType actionType = action.getActionType(); switch (actionType) { case SETUP: break; case TEARDOWN: break; case MODIFY: return; case STATUS: return; } List<String> deviceIds = new ArrayList<String>(); String srcDeviceId = EoMPLSUtils.getDeviceId(res, false); String dstDeviceId = EoMPLSUtils.getDeviceId(res, true); deviceIds.add(srcDeviceId); if (!srcDeviceId.equals(dstDeviceId)) deviceIds.add(dstDeviceId); String gri = res.getGlobalReservationId(); HashMap<String, VplsImplementation> implMap = VPLS_RequestParams.getImplementationMap(deviceIds); boolean all_supported = true; boolean one_supported = false; boolean one_alu = false; boolean may_need_secondary_vpls_id = false; for (String deviceId : deviceIds) { log.debug(deviceId + " implementation: " + implMap.get(deviceId)); if (implMap.get(deviceId).equals(VplsImplementation.UNSUPPORTED)) { all_supported = false; } else { one_supported = true; } if (implMap.get(deviceId).equals(VplsImplementation.ALU)) { one_alu = true; } } if (one_supported && !all_supported) { throw new PSSException("VPLS implementation mismatch"); } if (!all_supported) return; if (one_alu) { may_need_secondary_vpls_id = true; } VPLS_RequestParamHolder holder = VPLS_RequestParamHolder.getInstance(); VPLS_RequestParams rp = new VPLS_RequestParams(); switch (actionType) { case SETUP: rp.reserve(res, may_need_secondary_vpls_id); break; case TEARDOWN: rp.release(res); break; } holder.getRequestParams().put(gri, rp); }