Experiment getExperimentIfExists(final Experiment.ID experimentID) { Experiment experiment = experiments.getExperiment(experimentID); if (experiment == null) { throw new ExperimentNotFoundException(experimentID); } return experiment; }
public List<Experiment.ID> cleanPriorityList(Application.Name applicationName, List<Experiment.ID> experimentIDs) { // Removing duplicates from the priority list Set<Experiment.ID> experimentSet = new LinkedHashSet<>(experimentIDs); // Removing the experiment ID's from the priority list that are invalid for (Experiment.ID experimentID : experimentIDs) { Experiment experiment = experiments.getExperiment(experimentID); // Remove DELETED experiments from the priorityList // Remove experiments not belonging to the pertinent application // Remove TERMINATED experiments from the priorityList if (experiment == null || !experiment.getApplicationName().equals(applicationName) || experiment.getState().equals(TERMINATED)) { experimentSet.remove(experimentID); } } // Adding valid (DRAFT, RUNNING, PAUSED) experiments from the experiment column family to the priorityList that // are missing List<Experiment> experimentList = experiments.getExperiments(applicationName); if (experimentList.size() != experimentSet.size()) { for (Experiment experiment : experimentList) { if (!experimentSet.contains(experiment.getID())) { experimentSet.add(experiment.getID()); } } } return new ArrayList<>(experimentSet); }
/** * {@inheritDoc} */ @Override public ExperimentPageList getExperimentPages(Experiment.ID experimentID) { Experiment experiment = experiments.getExperiment(experimentID); // Throw an exception if the experiment is not found if (experiment == null) { throw new ExperimentNotFoundException(experimentID); } return pagesRepository.getExperimentPages(experimentID); }
/** * {@inheritDoc} */ @Override public void appendToPriorityList(Experiment.ID experimentID) { Application.Name applicationName = experiments.getExperiment(experimentID).getApplicationName(); List<Experiment.ID> priorityList = prioritiesRepository.getPriorityList(applicationName); if (priorityList == null) { priorityList = new ArrayList<>(1); } // TODO: This current logic does not modify the priority list if the given experimentID already exists in the // priority list. Check if it would be better to move the given experiment to the end of the list if it // already exists if (!priorityList.contains(experimentID)) { priorityList.add(experimentID); prioritiesRepository.createPriorities(applicationName, priorityList); } }
/** * {@inheritDoc} */ @Override public ExperimentList getExclusions(Experiment.ID experimentID) { // Throw an exception if the input experiment is not valid final Experiment expID = experiments.getExperiment(experimentID); if (expID.getID() == null) { throw new ExperimentNotFoundException(experimentID); } return mutexRepository.getExclusions(experimentID); }
experiments.getExperiment(experimentID).getApplicationName(), READ);
/** * {@inheritDoc} */ @Override public void erasePageData(Application.Name applicationName, Experiment.ID experimentID, UserInfo user) { pagesRepository.erasePageData(applicationName, experimentID); Experiment experiment = experiments.getExperiment(experimentID); if (experiment != null) { eventLog.postEvent(new ExperimentChangeEvent(user, experiment, "pages", "all pages", null)); } }
Experiment getAuthorizedExperimentByName(final String authorizationHeader, final Application.Name applicationName, final Experiment.Label experimentLabel) { authorization.checkUserPermissions(authorization.getUser(authorizationHeader), applicationName, READ); Experiment experiment = experiments.getExperiment(applicationName, experimentLabel); if (experiment == null) { throw new ExperimentNotFoundException(experimentLabel); } return experiment; }
final String authorizationHeader) { try { Experiment experiment = experiments.getExperiment(experimentID);
Experiment experiment = experiments.getExperiment(experimentID);
private Application.Name getApplicationNameForModifyingPages(Experiment.ID experimentID) { Experiment experiment = experiments.getExperiment(experimentID); // Throw an exception if the experiment is not found if (experiment == null) { throw new ExperimentNotFoundException(experimentID); } Application.Name applicationName = experiment.getApplicationName(); // Throw an exception if the experiment is in a TERMINATED state if (experiment.getState() == TERMINATED) { throw new InvalidExperimentStateException("Experiment must be in DRAFT, RUNNING or PAUSED states\"" + experimentID); } // Throw an exception if the experiment's end time has passed if (experiment.getEndTime().before(NOW)) { throw new IllegalArgumentException("Cannot modify pages of the experiment \"" + experimentID + "\" that has passed its end time"); } return applicationName; }
try { Username userName = authorization.getUser(authorizationHeader); Experiment experiment = experiments.getExperiment(experimentID);
Experiment getAuthorizedExperimentById(final String authorizationHeader, final Experiment.ID experimentId) { UserInfo.Username userName = authorization.getUser(authorizationHeader); Experiment experiment = experiments.getExperiment(experimentId); if (experiment == null) { throw new ExperimentNotFoundException(experimentId); } authorization.checkUserPermissions(userName, experiment.getApplicationName(), READ); return experiment; }
/** * {@inheritDoc} */ @Override public void postPages(Experiment.ID experimentID, ExperimentPageList experimentPageList, UserInfo user) { Application.Name applicationName = getApplicationNameForModifyingPages(experimentID); pagesRepository.postPages(applicationName, experimentID, experimentPageList); Experiment experiment = experiments.getExperiment(experimentID); if (experiment != null) { List<String> pageNames = new ArrayList<>(); for (ExperimentPage experimentPage : experimentPageList.getPages()) { pageNames.add(experimentPage.getName().toString()); } String pageString = StringUtils.join(pageNames, ", "); eventLog.postEvent(new ExperimentChangeEvent(user, experiment, "pages", null, pageString)); LOGGER.info("event=EXPERIMENT_METADATA_CHANGE, message=PAGES_ADDED, applicationName={}, experimentName={}, configuration=[pages={}]", experiment.getApplicationName(), experiment.getLabel(), pageString); } }
/** * {@inheritDoc} */ @Override public void deleteExclusion(Experiment.ID expID_1, Experiment.ID expID_2, UserInfo user) { Experiment exp_1 = experiments.getExperiment(expID_1); Experiment exp_2 = experiments.getExperiment(expID_2); // Check that expID_1 is a valid experiment if (exp_1 == null) { throw new ExperimentNotFoundException(expID_1); } // Check that expID_2 is a valid experiment if (exp_2 == null) { throw new ExperimentNotFoundException(expID_2); } mutexRepository.deleteExclusion(expID_1, expID_2); eventLog.postEvent(new ExperimentChangeEvent(user, exp_1, "mutex", exp_2.getLabel().toString(), null)); LOGGER.info("event=EXPERIMENT_METADATA_CHANGE, message=MUTUAL_EXCLUSION_DELETED, applicationName={}, configuration=[experiment1={}, experiment2={}]", exp_1.getApplicationName(), exp_1.getLabel(), exp_2.getLabel()); }
/** * {@inheritDoc} */ @Override public void deletePage(Experiment.ID experimentID, Page.Name pageName, UserInfo user) { Application.Name applicationName = getApplicationNameForModifyingPages(experimentID); pagesRepository.deletePage(applicationName, experimentID, pageName); Experiment experiment = experiments.getExperiment(experimentID); if (experiment != null) { eventLog.postEvent(new ExperimentChangeEvent(user, experiment, "pages", pageName.toString(), null)); } LOGGER.info("event=EXPERIMENT_METADATA_CHANGE, message=PAGE_REMOVED, applicationName={}, experimentName={}, configuration=[pageName={}, userName={}]", experiment.getApplicationName(), experiment.getLabel(), pageName, user.getUsername()); }
/** * Gets the experiment for a given ID and checks if the user has permission. * If the user has READ permissions, the experiment is returned. Otherwise the authorization throws an exception. * <p> * Throws an exception if the experiment is not found. * * @param experimentID the experiment ID * @param username the username * @return the experiment */ /*test*/ Experiment getAuthorizedExperimentOrThrow(Experiment.ID experimentID, Username username) { Experiment experiment; if ((experiment = experiments.getExperiment(experimentID)) == null) { throw new ExperimentNotFoundException(experimentID); } authorization.checkUserPermissions(username, experiment.getApplicationName(), READ); // Hack: We need to make experiments compatible, converting CassandraExperiment experiment = Experiment.from(experiment).build(); return experiment; }
Experiment experimentInfoFromDB = experimentUtil.getExperiment(experiment.getID()); if (experimentInfoFromDB.getState().equals(Experiment.State.RUNNING)) { experimentUtil.updateExperimentState(experiment, Experiment.State.PAUSED);
/** * {@inheritDoc} */ @Override public Bucket createBucket(Experiment.ID experimentID, Bucket newBucket, UserInfo user) { Experiment experiment = experiments.getExperiment(experimentID); if (experiment == null) { throw new ExperimentNotFoundException(experimentID); } validateExperimentState(experiment); checkBucketConstraint(experiment, newBucket); LOGGER.debug("Add Bucket: adding new bucket to running experiment" + experiment.getID()); cassandraRepository.createBucket(newBucket); try { databaseRepository.createBucket(newBucket); } catch (RepositoryException e) { cassandraRepository.deleteBucket(newBucket.getExperimentID(), newBucket.getLabel()); throw e; } //if we just created an experiment in a running experiment, update the remaining allocation percentages if (!Experiment.State.DRAFT.equals(experiment.getState())) { eventLog.postEvent(new BucketCreateEvent(user, experiment, newBucket)); BucketList updates = buckets.adjustAllocationPercentages(experiment, newBucket); buckets.updateBucketAllocBatch(experimentID, updates); } return getBucket(experimentID, newBucket.getLabel()); }
UserInfo user) { Experiment experiment = experiments.getExperiment(experimentID); if (experiment == null) { throw new ExperimentNotFoundException(experimentID);