rp = new MWMResourcePlan(rpName, queryParallelism, Status.DISABLED); } else { rp = new MWMResourcePlan(rpName, null, Status.DISABLED); rp.setNs(resourcePlan.getNs()); try { openTransaction(); MWMPool defaultPool = new MWMPool(rp, "default", 1.0, defaultPoolSize, null); pm.makePersistent(defaultPool); rp.setPools(Sets.newHashSet(defaultPool)); rp.setDefaultPool(defaultPool);
private void copyRpContents(MWMResourcePlan dest, MWMResourcePlan src) { dest.setQueryParallelism(src.getQueryParallelism()); dest.setNs(src.getNs()); Map<String, MWMPool> pools = new HashMap<>(); Map<String, Set<MWMPool>> triggersToPools = new HashMap<>(); for (MWMPool copyPool : src.getPools()) { MWMPool pool = new MWMPool(dest, copyPool.getPath(), copyPool.getAllocFraction(), copyPool.getQueryParallelism(), copyPool.getSchedulingPolicy()); dest.setPools(new HashSet<>(pools.values())); if (src.getDefaultPool() != null) { dest.setDefaultPool(pools.get(src.getDefaultPool().getPath())); for (MWMMapping copyMapping : src.getMappings()) { MWMPool pool = null; if (copyMapping.getPool() != null) { mappings.add(mapping); dest.setMappings(mappings); Set<MWMTrigger> triggers = new HashSet<>(); for (MWMTrigger copyTrigger : src.getTriggers()) { Set<MWMPool> p2t = triggersToPools.get(copyTrigger.getName()); if (p2t == null) { dest.setTriggers(triggers);
MWMResourcePlan plan = name == null ? getActiveMWMResourcePlan(ns) : getMWMResourcePlan(name, ns, !changes.isSetStatus()); boolean hasNsChange = changes.isSetNs() && !changes.getNs().equals(getNsOrDefault(plan.getNs())); if (hasNsChange) { throw new InvalidOperationException("Cannot change ns; from " + getNsOrDefault(plan.getNs()) + " to " + changes.getNs()); if (changes.isSetStatus()) { throw new InvalidOperationException("Cannot change values during status switch."); } else if (plan.getStatus() != MWMResourcePlan.Status.DISABLED) { throw new InvalidOperationException("Resource plan must be disabled to edit it."); throw new InvalidOperationException("Cannot rename to empty value."); if (!newName.equals(plan.getName())) { plan.setName(newName); throw new InvalidOperationException("queryParallelism should be positive."); plan.setQueryParallelism(changes.getQueryParallelism()); } else { plan.setQueryParallelism(null); if (changes.isSetDefaultPoolPath()) { MWMPool pool = getPool(plan, changes.getDefaultPoolPath()); plan.setDefaultPool(pool); } else { plan.setDefaultPool(null);
private WMResourcePlan fromMResourcePlan(MWMResourcePlan mplan) { if (mplan == null) { return null; } WMResourcePlan rp = new WMResourcePlan(); rp.setName(mplan.getName()); rp.setNs(mplan.getNs()); rp.setStatus(WMResourcePlanStatus.valueOf(mplan.getStatus().name())); if (mplan.getQueryParallelism() != null) { rp.setQueryParallelism(mplan.getQueryParallelism()); } if (mplan.getDefaultPool() != null) { rp.setDefaultPoolPath(mplan.getDefaultPool().getPath()); } return rp; }
private WMFullResourcePlan fullFromMResourcePlan(MWMResourcePlan mplan) { if (mplan == null) { return null; } WMFullResourcePlan rp = new WMFullResourcePlan(); rp.setPlan(fromMResourcePlan(mplan)); for (MWMPool mPool : mplan.getPools()) { rp.addToPools(fromMPool(mPool, mplan.getName())); for (MWMTrigger mTrigger : mPool.getTriggers()) { rp.addToPoolTriggers(new WMPoolTrigger(mPool.getPath(), mTrigger.getName())); } } for (MWMTrigger mTrigger : mplan.getTriggers()) { rp.addToTriggers(fromMWMTrigger(mTrigger, mplan.getName())); } for (MWMMapping mMapping : mplan.getMappings()) { rp.addToMappings(fromMMapping(mMapping, mplan.getName())); } return rp; }
@Override public void dropResourcePlan(String name, String ns) throws NoSuchObjectException, MetaException { name = normalizeIdentifier(name); boolean commited = false; Query query = null; try { query = createGetResourcePlanQuery(); MWMResourcePlan resourcePlan = (MWMResourcePlan) query.execute(name, getNsOrDefault(ns)); pm.retrieve(resourcePlan); // TODO: why do some codepaths call retrieve and some don't? if (resourcePlan == null) { throw new NoSuchObjectException("There is no resource plan named: " + name + " in " + ns); } if (resourcePlan.getStatus() == Status.ACTIVE) { throw new MetaException("Cannot drop an active resource plan"); } // First, drop all the dependencies. resourcePlan.setDefaultPool(null); pm.deletePersistentAll(resourcePlan.getTriggers()); pm.deletePersistentAll(resourcePlan.getMappings()); pm.deletePersistentAll(resourcePlan.getPools()); pm.deletePersistent(resourcePlan); commited = commitTransaction(); } finally { rollbackAndCleanup(commited, query); } }
MWMResourcePlan plan = getMWMResourcePlan(name, ns, false); if (replacedPlan.getName().equals(plan.getName())) { throw new InvalidOperationException("A plan cannot replace itself"); String oldNs = getNsOrDefault(replacedPlan.getNs()), newNs = getNsOrDefault(plan.getNs()); if (!oldNs.equals(newNs)) { throw new InvalidOperationException("Cannot change the namespace; replacing " String newName = replacedPlan.getName(); int i = 0; String copyName = generateOldPlanName(newName, i); replacedPlan.setName(copyName); plan.setName(newName); plan.setStatus(replacedPlan.getStatus()); replacedPlan.setStatus(MWMResourcePlan.Status.DISABLED); return plan.getStatus() == Status.ACTIVE ? fullFromMResourcePlan(plan) : null;
private WMFullResourcePlan switchStatus(String name, MWMResourcePlan mResourcePlan, String status, boolean canActivateDisabled, boolean canDeactivate) throws InvalidOperationException { Status currentStatus = mResourcePlan.getStatus(); Status newStatus = null; try { case ENABLED: if (newStatus == Status.DISABLED) { mResourcePlan.setStatus(newStatus); return null; // A simple case. deactivateActiveResourcePlan(mResourcePlan.getNs()); mResourcePlan.setStatus(newStatus); return fullFromMResourcePlan(mResourcePlan); } else { mResourcePlan.setStatus(newStatus);
rp = new MWMResourcePlan(rpName, queryParallelism, Status.DISABLED); } else { rp = new MWMResourcePlan(rpName, null, Status.DISABLED); MWMPool defaultPool = new MWMPool(rp, "default", 1.0, defaultPoolSize, null); pm.makePersistent(defaultPool); rp.setPools(Sets.newHashSet(defaultPool)); rp.setDefaultPool(defaultPool);
response.setErrors(new ArrayList()); response.setWarnings(new ArrayList()); Integer rpParallelism = mResourcePlan.getQueryParallelism(); if (rpParallelism != null && rpParallelism < 1) { response.addToErrors("Query parallelism should for resource plan be positive. Got: " + for (MWMPool pool : mResourcePlan.getPools()) { PoolData currentPoolData = getPoolData(poolInfo, pool.getPath()); currentPoolData.found = true;
private WMFullResourcePlan switchStatus(String name, MWMResourcePlan mResourcePlan, String status, boolean canActivateDisabled, boolean canDeactivate) throws InvalidOperationException { Status currentStatus = mResourcePlan.getStatus(); Status newStatus = null; try { case ENABLED: if (newStatus == Status.DISABLED) { mResourcePlan.setStatus(newStatus); return null; // A simple case. mResourcePlan.setStatus(newStatus); return fullFromMResourcePlan(mResourcePlan); } else { mResourcePlan.setStatus(newStatus);
private MWMResourcePlan getMWMResourcePlan(String name, String ns, boolean editCheck, boolean mustExist) throws NoSuchObjectException, InvalidOperationException { MWMResourcePlan resourcePlan; boolean commited = false; Query query = null; name = normalizeIdentifier(name); try { query = createGetResourcePlanQuery(); ns = getNsOrDefault(ns); resourcePlan = (MWMResourcePlan) query.execute(name, ns); pm.retrieve(resourcePlan); commited = commitTransaction(); } finally { rollbackAndCleanup(commited, query); } if (mustExist && resourcePlan == null) { throw new NoSuchObjectException("There is no resource plan named: " + name + " in " + ns); } if (editCheck && resourcePlan != null && resourcePlan.getStatus() != MWMResourcePlan.Status.DISABLED) { throw new InvalidOperationException("Resource plan must be disabled to edit it."); } return resourcePlan; }
openTransaction(); MWMResourcePlan resourcePlan = getMWMResourcePlan(resourcePlanName, ns, true); if (resourcePlan.getDefaultPool() != null && resourcePlan.getDefaultPool().getPath().equals(poolPath)) { throw new InvalidOperationException("Cannot drop default pool of a resource plan");
@Override public void dropResourcePlan(String name) throws NoSuchObjectException, MetaException { name = normalizeIdentifier(name); boolean commited = false; Query query = null; try { openTransaction(); query = pm.newQuery(MWMResourcePlan.class, "name == rpname"); query.declareParameters("java.lang.String rpname"); query.setUnique(true); MWMResourcePlan resourcePlan = (MWMResourcePlan) query.execute(name); pm.retrieve(resourcePlan); if (resourcePlan == null) { throw new NoSuchObjectException("There is no resource plan named: " + name); } if (resourcePlan.getStatus() == Status.ACTIVE) { throw new MetaException("Cannot drop an active resource plan"); } // First, drop all the dependencies. resourcePlan.setDefaultPool(null); pm.deletePersistentAll(resourcePlan.getTriggers()); pm.deletePersistentAll(resourcePlan.getMappings()); pm.deletePersistentAll(resourcePlan.getPools()); pm.deletePersistent(resourcePlan); commited = commitTransaction(); } finally { rollbackAndCleanup(commited, query); } }
private WMResourcePlan fromMResourcePlan(MWMResourcePlan mplan) { if (mplan == null) { return null; } WMResourcePlan rp = new WMResourcePlan(); rp.setName(mplan.getName()); rp.setStatus(WMResourcePlanStatus.valueOf(mplan.getStatus().name())); if (mplan.getQueryParallelism() != null) { rp.setQueryParallelism(mplan.getQueryParallelism()); } if (mplan.getDefaultPool() != null) { rp.setDefaultPoolPath(mplan.getDefaultPool().getPath()); } return rp; }
MWMResourcePlan plan = getMWMResourcePlan(name, false); if (replacedPlan.getName().equals(plan.getName())) { throw new InvalidOperationException("A plan cannot replace itself"); String newName = replacedPlan.getName(); int i = 0; String copyName = generateOldPlanName(newName, i); replacedPlan.setName(copyName); plan.setName(newName); plan.setStatus(replacedPlan.getStatus()); replacedPlan.setStatus(MWMResourcePlan.Status.DISABLED); return plan.getStatus() == Status.ACTIVE ? fullFromMResourcePlan(plan) : null;
private WMFullResourcePlan fullFromMResourcePlan(MWMResourcePlan mplan) { if (mplan == null) { return null; } WMFullResourcePlan rp = new WMFullResourcePlan(); rp.setPlan(fromMResourcePlan(mplan)); for (MWMPool mPool : mplan.getPools()) { rp.addToPools(fromMPool(mPool, mplan.getName())); for (MWMTrigger mTrigger : mPool.getTriggers()) { rp.addToPoolTriggers(new WMPoolTrigger(mPool.getPath(), mTrigger.getName())); } } for (MWMTrigger mTrigger : mplan.getTriggers()) { rp.addToTriggers(fromMWMTrigger(mTrigger, mplan.getName())); } for (MWMMapping mMapping : mplan.getMappings()) { rp.addToMappings(fromMMapping(mMapping, mplan.getName())); } return rp; }
response.setErrors(new ArrayList()); response.setWarnings(new ArrayList()); Integer rpParallelism = mResourcePlan.getQueryParallelism(); if (rpParallelism != null && rpParallelism < 1) { response.addToErrors("Query parallelism should for resource plan be positive. Got: " + for (MWMPool pool : mResourcePlan.getPools()) { PoolData currentPoolData = getPoolData(poolInfo, pool.getPath()); currentPoolData.found = true;
private MWMResourcePlan getMWMResourcePlan(String name, boolean editCheck, boolean mustExist) throws NoSuchObjectException, InvalidOperationException { MWMResourcePlan resourcePlan; boolean commited = false; Query query = null; name = normalizeIdentifier(name); try { openTransaction(); query = pm.newQuery(MWMResourcePlan.class, "name == rpname"); query.declareParameters("java.lang.String rpname"); query.setUnique(true); resourcePlan = (MWMResourcePlan) query.execute(name); pm.retrieve(resourcePlan); commited = commitTransaction(); } finally { rollbackAndCleanup(commited, query); } if (mustExist && resourcePlan == null) { throw new NoSuchObjectException("There is no resource plan named: " + name); } if (editCheck && resourcePlan != null && resourcePlan.getStatus() != MWMResourcePlan.Status.DISABLED) { throw new InvalidOperationException("Resource plan must be disabled to edit it."); } return resourcePlan; }
openTransaction(); MWMResourcePlan resourcePlan = getMWMResourcePlan(resourcePlanName, true); if (resourcePlan.getDefaultPool() != null && resourcePlan.getDefaultPool().getPath().equals(poolPath)) { throw new InvalidOperationException("Cannot drop default pool of a resource plan");