/** * {@inheritDoc} */ @Override // Isolate the scope of this bucket retrieval public Bucket.Builder getBucketBuilder(Experiment.ID experimentID, Bucket.Label bucketLabel) { Bucket bucket = getBucket(experimentID, bucketLabel); if (bucket == null) { throw new BucketNotFoundException(bucketLabel); } return Bucket.from(bucket); }
Bucket bucket = getBucket(experimentID, bucketLabel); if (bucket == null) { throw new BucketNotFoundException(bucketLabel); desiredState == Bucket.State.EMPTY)) { BucketList bucketList = getBuckets(experimentID, false /* don't check experiment again */); Double bucketB = roundToTwo(bucket.getAllocationPercent()); newPct = roundToTwo(1. - totalAlloc); } else { newPct = roundToTwo(newPct); totalAlloc += newPct; Bucket.Builder builder = getBucketBuilder(experimentID, buck.getLabel()); builder.withAllocationPercent(newPct); builder.withState(newState);
/** * {@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()); }
Bucket bucket = getBucket(experimentID, bucketLabel); if (bucket == null) { throw new BucketNotFoundException(bucketLabel); Bucket.Builder builder = getBucketBuilder(experimentID, bucketLabel);
/** * {@inheritDoc} */ @Override public BucketList adjustAllocationPercentages(Experiment experiment, Bucket newBucket) { double remainingAlloc = 1. - newBucket.getAllocationPercent(); BucketList bucketList = buckets.getBuckets(experiment.getID(), false /* don't check experiment again */); BucketList newBuckets = new BucketList(); for (Bucket bucket : bucketList.getBuckets()) { if (bucket.getLabel().equals(newBucket.getLabel())) { continue; } double newAlloc = roundToTwo(remainingAlloc * bucket.getAllocationPercent()); LOGGER.debug("Add Bucket: setting allocation percentage for bucket " + bucket.getLabel() + " in experiment " + experiment.getID() + " to: " + newAlloc); Bucket.Builder builder = Bucket.from(bucket).withAllocationPercent(newAlloc); Bucket updatedBucket = builder.build(); newBuckets.addBucket(updatedBucket); if (!Experiment.State.DRAFT.equals(experiment.getState()) && Double.compare(bucket.getAllocationPercent(), updatedBucket.getAllocationPercent()) != 0) { // this is a system event, so no user needed eventLog.postEvent(new BucketChangeEvent(experiment, updatedBucket, "allocation", String.valueOf(bucket.getAllocationPercent()), String.valueOf(updatedBucket.getAllocationPercent()))); } } return newBuckets; }