/** * {@inheritDoc} */ public List<Experiment> getRecursiveMutualExclusions(Experiment experiment) { List<Experiment> visitedExperiments = new ArrayList<>(); Set<Experiment> unvisitedExperiments = new HashSet<>(); unvisitedExperiments.add(experiment); do { Set<Experiment> newUnvisitedExperiments = new HashSet<>(); for (Experiment tempExperiment : unvisitedExperiments) { visitedExperiments.add(tempExperiment); newUnvisitedExperiments.addAll( this.getExclusions(tempExperiment.getID()) .getExperiments() // Hack: We need to make experiments compatible, converting CassandraExperiments .parallelStream() .map(ce -> Experiment.from(ce).build()) .collect(Collectors.toList()) ); } unvisitedExperiments.addAll(newUnvisitedExperiments); unvisitedExperiments.removeAll(visitedExperiments); } while (!unvisitedExperiments.isEmpty()); return visitedExperiments; } }
Experiment updatedExperiment = from(experiment).withState(DELETED).build();
.withApplicationName(Application.Name.valueOf((String) experimentMap.get("app_name"))) .withSamplingPercent((Double) experimentMap.get("sampling_percent")) .build();
.withApplicationName(Application.Name.valueOf((String) experimentMap.get("app_name"))) .withSamplingPercent((Double) experimentMap.get("sampling_percent")) .build(); } catch (WasabiException e) { throw e;
State.valueOf( Preconditions.checkNotNull(experimentPojo.getState())) ).build();
/** * {@inheritDoc} */ @Override public Experiment updateExperimentState(Experiment experiment, State state) { LOGGER.debug("Updating experiment {} state {} ", new Object[]{experiment, state}); validator.validateExperiment(experiment); try { // Note that this timestamp gets serialized as mulliseconds from // the epoch, so timezone is irrelevant final Date NOW = new Date(); experimentAccessor.updateExperiment(state.name(), NOW, experiment.getID().getRawID()); experiment = Experiment.from(experiment).withState(state).build(); // Point the experiment index to this experiment updateExperimentLabelIndex(experiment.getID(), experiment.getApplicationName(), experiment.getLabel(), experiment.getStartTime(), experiment.getEndTime(), experiment.getState()); updateStateIndex(experiment); } catch (Exception e) { LOGGER.error("Error while updating experiment {} state {} ", new Object[]{experiment, state}, e); throw new RepositoryException("Could not update experiment with ID \"" + experiment.getID() + "\"" + " to state " + state.toString(), e); } return experiment; }
/** * 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; }