@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 (!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());
}