Skip to content

Commit a86ab38

Browse files
author
Mike Ng
committed
Rename UserExperimentRecord to UserProfile.
1 parent 128dc80 commit a86ab38

File tree

5 files changed

+59
-59
lines changed

5 files changed

+59
-59
lines changed

core-api/src/main/java/com/optimizely/ab/Optimizely.java

Lines changed: 5 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -18,7 +18,7 @@
1818

1919
import com.optimizely.ab.annotations.VisibleForTesting;
2020
import com.optimizely.ab.bucketing.Bucketer;
21-
import com.optimizely.ab.bucketing.UserExperimentRecord;
21+
import com.optimizely.ab.bucketing.UserProfile;
2222
import com.optimizely.ab.config.Attribute;
2323
import com.optimizely.ab.config.EventType;
2424
import com.optimizely.ab.config.Experiment;
@@ -439,7 +439,7 @@ public static class Builder {
439439

440440
private String datafile;
441441
private Bucketer bucketer;
442-
private UserExperimentRecord userExperimentRecord;
442+
private UserProfile userProfile;
443443
private ErrorHandler errorHandler;
444444
private EventHandler eventHandler;
445445
private EventBuilder eventBuilder;
@@ -458,8 +458,8 @@ public Builder withErrorHandler(ErrorHandler errorHandler) {
458458
return this;
459459
}
460460

461-
public Builder withUserExperimentRecord(UserExperimentRecord userExperimentRecord) {
462-
this.userExperimentRecord = userExperimentRecord;
461+
public Builder withUserExperimentRecord(UserProfile userProfile) {
462+
this.userProfile = userProfile;
463463
return this;
464464
}
465465

@@ -496,7 +496,7 @@ public Optimizely build() throws ConfigParseException {
496496

497497
// use the default bucketer and event builder, if no overrides were provided
498498
if (bucketer == null) {
499-
bucketer = new Bucketer(projectConfig, userExperimentRecord);
499+
bucketer = new Bucketer(projectConfig, userProfile);
500500
}
501501

502502
if (clientEngine == null) {

core-api/src/main/java/com/optimizely/ab/bucketing/Bucketer.java

Lines changed: 13 additions & 13 deletions
Original file line numberDiff line numberDiff line change
@@ -47,7 +47,7 @@ public class Bucketer {
4747

4848
private final ProjectConfig projectConfig;
4949

50-
@Nullable private final UserExperimentRecord userExperimentRecord;
50+
@Nullable private final UserProfile userProfile;
5151

5252
private static final Logger logger = LoggerFactory.getLogger(Bucketer.class);
5353

@@ -63,9 +63,9 @@ public Bucketer(ProjectConfig projectConfig) {
6363
this(projectConfig, null);
6464
}
6565

66-
public Bucketer(ProjectConfig projectConfig, @Nullable UserExperimentRecord userExperimentRecord) {
66+
public Bucketer(ProjectConfig projectConfig, @Nullable UserProfile userProfile) {
6767
this.projectConfig = projectConfig;
68-
this.userExperimentRecord = userExperimentRecord;
68+
this.userProfile = userProfile;
6969
}
7070

7171
private String bucketToEntity(int bucketValue, List<TrafficAllocation> trafficAllocations) {
@@ -113,8 +113,8 @@ private Variation bucketToVariation(@Nonnull Experiment experiment,
113113
String combinedBucketId = userId + experimentId;
114114

115115
// If a user experiment record instance is present then check it for a saved variation
116-
if (userExperimentRecord != null) {
117-
String variationKey = userExperimentRecord.lookup(userId, experimentKey);
116+
if (userProfile != null) {
117+
String variationKey = userProfile.lookup(userId, experimentKey);
118118
if (variationKey != null) {
119119
logger.info("Returning previously activated variation \"{}\" of experiment \"{}\" "
120120
+ "for user \"{}\" from user experiment record.",
@@ -146,8 +146,8 @@ private Variation bucketToVariation(@Nonnull Experiment experiment,
146146
experimentKey);
147147

148148
// If a user experiment record is present give it a variation to store
149-
if (userExperimentRecord != null) {
150-
boolean saved = userExperimentRecord.save(userId, experiment.getKey(), variationKey);
149+
if (userProfile != null) {
150+
boolean saved = userProfile.save(userId, experiment.getKey(), variationKey);
151151
if (saved) {
152152
logger.info("Saved variation \"{}\" of experiment \"{}\" for user \"{}\".",
153153
variationKey, experimentKey, userId);
@@ -224,23 +224,23 @@ int generateBucketValue(int hashCode) {
224224
}
225225

226226
@Nullable
227-
public UserExperimentRecord getUserExperimentRecord() {
228-
return userExperimentRecord;
227+
public UserProfile getUserProfile() {
228+
return userProfile;
229229
}
230230

231231
/**
232-
* Gives implementations of {@link UserExperimentRecord} a chance to remove records
232+
* Gives implementations of {@link UserProfile} a chance to remove records
233233
* of experiments that are deleted or not running.
234234
*/
235235
public void cleanUserExperimentRecords() {
236-
if (userExperimentRecord != null) {
237-
Map<String, Map<String,String>> records = userExperimentRecord.getAllRecords();
236+
if (userProfile != null) {
237+
Map<String, Map<String,String>> records = userProfile.getAllRecords();
238238
if (records != null) {
239239
for (Map.Entry<String,Map<String,String>> record : records.entrySet()) {
240240
for (String experimentKey : record.getValue().keySet()) {
241241
Experiment experiment = projectConfig.getExperimentKeyMapping().get(experimentKey);
242242
if (experiment == null || !experiment.isRunning()) {
243-
userExperimentRecord.remove(record.getKey(), experimentKey);
243+
userProfile.remove(record.getKey(), experimentKey);
244244
}
245245
}
246246
}

core-api/src/main/java/com/optimizely/ab/bucketing/UserExperimentRecord.java renamed to core-api/src/main/java/com/optimizely/ab/bucketing/UserProfile.java

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -25,7 +25,7 @@
2525
* user experience after changing traffic allocations. Also, this interface gives users
2626
* a hook to keep track of activation history.
2727
*/
28-
public interface UserExperimentRecord {
28+
public interface UserProfile {
2929

3030
/**
3131
* Called when implementors should save an activation

core-api/src/test/java/com/optimizely/ab/OptimizelyBuilderTest.java

Lines changed: 4 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -16,7 +16,7 @@
1616
*/
1717
package com.optimizely.ab;
1818

19-
import com.optimizely.ab.bucketing.UserExperimentRecord;
19+
import com.optimizely.ab.bucketing.UserProfile;
2020
import com.optimizely.ab.config.ProjectConfigTestUtils;
2121
import com.optimizely.ab.config.parser.ConfigParseException;
2222
import com.optimizely.ab.error.ErrorHandler;
@@ -103,12 +103,12 @@ public void withDefaultErrorHandler() throws Exception {
103103

104104
@Test
105105
public void withUserExperimentRecord() throws Exception {
106-
UserExperimentRecord userExperimentRecord = mock(UserExperimentRecord.class);
106+
UserProfile userProfile = mock(UserProfile.class);
107107
Optimizely optimizelyClient = Optimizely.builder(validConfigJsonV2(), mockEventHandler)
108-
.withUserExperimentRecord(userExperimentRecord)
108+
.withUserExperimentRecord(userProfile)
109109
.build();
110110

111-
assertThat(optimizelyClient.bucketer.getUserExperimentRecord(), is(userExperimentRecord));
111+
assertThat(optimizelyClient.bucketer.getUserProfile(), is(userProfile));
112112
}
113113

114114
@Test

core-api/src/test/java/com/optimizely/ab/bucketing/BucketerTest.java

Lines changed: 36 additions & 36 deletions
Original file line numberDiff line numberDiff line change
@@ -447,106 +447,106 @@ public void bucketUserNotInOverlappingGroupExperiment() throws Exception {
447447

448448
/**
449449
* Verify that {@link Bucketer#bucket(Experiment,String)} saves a variation of an experiment for a user
450-
* when a {@link UserExperimentRecord} is present.
450+
* when a {@link UserProfile} is present.
451451
*/
452452
@Test public void bucketUserSaveActivationWithUserExperimentRecord() throws Exception {
453453
final AtomicInteger bucketValue = new AtomicInteger();
454-
UserExperimentRecord userExperimentRecord = mock(UserExperimentRecord.class);
455-
Bucketer algorithm = mockUserExperimentRecordAlgorithm(bucketValue, userExperimentRecord);
454+
UserProfile userProfile = mock(UserProfile.class);
455+
Bucketer algorithm = mockUserExperimentRecordAlgorithm(bucketValue, userProfile);
456456
bucketValue.set(3000);
457457

458458
ProjectConfig projectConfig = validProjectConfigV2();
459459
List<Experiment> groupExperiments = projectConfig.getGroups().get(0).getExperiments();
460460
Experiment groupExperiment = groupExperiments.get(0);
461461
final Variation variation = groupExperiment.getVariations().get(0);
462462

463-
when(userExperimentRecord.save("blah", groupExperiment.getKey(), variation.getKey())).thenReturn(true);
463+
when(userProfile.save("blah", groupExperiment.getKey(), variation.getKey())).thenReturn(true);
464464

465465
assertThat(algorithm.bucket(groupExperiment, "blah"), is(variation));
466466

467467
logbackVerifier.expectMessage(Level.INFO,
468468
"Saved variation \"e2_vtag1\" of experiment \"group_etag2\" for user \"blah\".");
469469

470-
verify(userExperimentRecord).save("blah", groupExperiment.getKey(), variation.getKey());
470+
verify(userProfile).save("blah", groupExperiment.getKey(), variation.getKey());
471471
}
472472

473473
/**
474474
* Verify that {@link Bucketer#bucket(Experiment,String)} logs correctly
475-
* when a {@link UserExperimentRecord} is present and fails to save an activation.
475+
* when a {@link UserProfile} is present and fails to save an activation.
476476
*/
477477
@Test public void bucketUserSaveActivationFailWithUserExperimentRecord() throws Exception {
478478
final AtomicInteger bucketValue = new AtomicInteger();
479-
UserExperimentRecord userExperimentRecord = mock(UserExperimentRecord.class);
480-
Bucketer algorithm = mockUserExperimentRecordAlgorithm(bucketValue, userExperimentRecord);
479+
UserProfile userProfile = mock(UserProfile.class);
480+
Bucketer algorithm = mockUserExperimentRecordAlgorithm(bucketValue, userProfile);
481481
bucketValue.set(3000);
482482

483483
ProjectConfig projectConfig = validProjectConfigV2();
484484
List<Experiment> groupExperiments = projectConfig.getGroups().get(0).getExperiments();
485485
Experiment groupExperiment = groupExperiments.get(0);
486486
final Variation variation = groupExperiment.getVariations().get(0);
487487

488-
when(userExperimentRecord.save("blah", groupExperiment.getKey(), variation.getKey())).thenReturn(false);
488+
when(userProfile.save("blah", groupExperiment.getKey(), variation.getKey())).thenReturn(false);
489489

490490
assertThat(algorithm.bucket(groupExperiment, "blah"), is(variation));
491491

492492
logbackVerifier.expectMessage(Level.WARN,
493493
"Failed to save variation \"e2_vtag1\" of experiment \"group_etag2\" for user \"blah\".");
494494

495-
verify(userExperimentRecord).save("blah", groupExperiment.getKey(), variation.getKey());
495+
verify(userProfile).save("blah", groupExperiment.getKey(), variation.getKey());
496496
}
497497

498498
/**
499499
* Verify that {@link Bucketer#bucket(Experiment,String)} returns a variation that is
500-
* stored in the provided {@link UserExperimentRecord}.
500+
* stored in the provided {@link UserProfile}.
501501
*/
502502
@Test public void bucketUserRestoreActivationWithUserExperimentRecord() throws Exception {
503503
final AtomicInteger bucketValue = new AtomicInteger();
504-
UserExperimentRecord userExperimentRecord = mock(UserExperimentRecord.class);
505-
Bucketer algorithm = mockUserExperimentRecordAlgorithm(bucketValue, userExperimentRecord);
504+
UserProfile userProfile = mock(UserProfile.class);
505+
Bucketer algorithm = mockUserExperimentRecordAlgorithm(bucketValue, userProfile);
506506
bucketValue.set(3000);
507507

508508
ProjectConfig projectConfig = validProjectConfigV2();
509509
List<Experiment> groupExperiments = projectConfig.getGroups().get(0).getExperiments();
510510
Experiment groupExperiment = groupExperiments.get(0);
511511
final Variation variation = groupExperiment.getVariations().get(0);
512512

513-
when(userExperimentRecord.lookup("blah", groupExperiment.getKey())).thenReturn(variation.getKey());
513+
when(userProfile.lookup("blah", groupExperiment.getKey())).thenReturn(variation.getKey());
514514

515515
assertThat(algorithm.bucket(groupExperiment, "blah"), is(variation));
516516

517517
logbackVerifier.expectMessage(Level.INFO,
518518
"Returning previously activated variation \"e2_vtag1\" of experiment \"group_etag2\""
519519
+ " for user \"blah\" from user experiment record.");
520520

521-
verify(userExperimentRecord).lookup("blah", groupExperiment.getKey());
521+
verify(userProfile).lookup("blah", groupExperiment.getKey());
522522
}
523523

524524
/**
525-
* Verify {@link Bucketer#bucket(Experiment,String)} handles a present {@link UserExperimentRecord}
525+
* Verify {@link Bucketer#bucket(Experiment,String)} handles a present {@link UserProfile}
526526
* returning null when looking up a variation.
527527
*/
528528
@Test public void bucketUserRestoreActivationNullWithUserExperimentRecord() throws Exception {
529529
final AtomicInteger bucketValue = new AtomicInteger();
530-
UserExperimentRecord userExperimentRecord = mock(UserExperimentRecord.class);
531-
Bucketer algorithm = mockUserExperimentRecordAlgorithm(bucketValue, userExperimentRecord);
530+
UserProfile userProfile = mock(UserProfile.class);
531+
Bucketer algorithm = mockUserExperimentRecordAlgorithm(bucketValue, userProfile);
532532
bucketValue.set(3000);
533533

534534
ProjectConfig projectConfig = validProjectConfigV2();
535535
List<Experiment> groupExperiments = projectConfig.getGroups().get(0).getExperiments();
536536
Experiment groupExperiment = groupExperiments.get(0);
537537
final Variation variation = groupExperiment.getVariations().get(0);
538538

539-
when(userExperimentRecord.lookup("blah", groupExperiment.getKey())).thenReturn(null);
539+
when(userProfile.lookup("blah", groupExperiment.getKey())).thenReturn(null);
540540

541541
assertThat(algorithm.bucket(groupExperiment, "blah"), is(variation));
542542

543543
logbackVerifier.expectMessage(Level.INFO, "No previously activated variation of experiment " +
544544
"\"group_etag2\" for user \"blah\" found in user experiment record.");
545-
verify(userExperimentRecord).lookup("blah", groupExperiment.getKey());
545+
verify(userProfile).lookup("blah", groupExperiment.getKey());
546546
}
547547

548548
/**
549-
* Verify {@link Bucketer#cleanUserExperimentRecords()} handles a null {@link UserExperimentRecord}.
549+
* Verify {@link Bucketer#cleanUserExperimentRecords()} handles a null {@link UserProfile}.
550550
*/
551551
@Test
552552
public void nullUserExperimentRecordWhenCleaning() {
@@ -562,16 +562,16 @@ public void nullUserExperimentRecordWhenCleaning() {
562562

563563
/**
564564
* Verify {@link Bucketer#cleanUserExperimentRecords()} handles a null returned from
565-
* {@link UserExperimentRecord#getAllRecords()}.
565+
* {@link UserProfile#getAllRecords()}.
566566
*/
567567
@Test
568568
public void nullUserExperimentRecords() {
569569
final AtomicInteger bucketValue = new AtomicInteger();
570-
UserExperimentRecord userExperimentRecord = mock(UserExperimentRecord.class);
571-
Bucketer algorithm = mockUserExperimentRecordAlgorithm(bucketValue, userExperimentRecord);
570+
UserProfile userProfile = mock(UserProfile.class);
571+
Bucketer algorithm = mockUserExperimentRecordAlgorithm(bucketValue, userProfile);
572572
bucketValue.set(3000);
573573

574-
when(userExperimentRecord.getAllRecords()).thenReturn(null);
574+
when(userProfile.getAllRecords()).thenReturn(null);
575575
try {
576576
algorithm.cleanUserExperimentRecords();
577577
} catch (NullPointerException e) {
@@ -586,19 +586,19 @@ public void nullUserExperimentRecords() {
586586
@Test
587587
public void cleanRemovesRecordsOfExperimentsThatNoLongerExist() {
588588
final AtomicInteger bucketValue = new AtomicInteger();
589-
UserExperimentRecord userExperimentRecord = mock(UserExperimentRecord.class);
590-
Bucketer algorithm = mockUserExperimentRecordAlgorithm(bucketValue, userExperimentRecord);
589+
UserProfile userProfile = mock(UserProfile.class);
590+
Bucketer algorithm = mockUserExperimentRecordAlgorithm(bucketValue, userProfile);
591591
bucketValue.set(3000);
592592

593593
Map<String,Map<String,String>> records = new HashMap<String, Map<String, String>>();
594594
Map<String,String> activation = new HashMap<String, String>();
595595
activation.put("exp1", "var1");
596596
records.put("blah", activation);
597-
when(userExperimentRecord.getAllRecords()).thenReturn(records);
597+
when(userProfile.getAllRecords()).thenReturn(records);
598598

599599
algorithm.cleanUserExperimentRecords();
600600

601-
verify(userExperimentRecord).remove("blah", "exp1");
601+
verify(userProfile).remove("blah", "exp1");
602602
}
603603

604604
/**
@@ -608,19 +608,19 @@ public void cleanRemovesRecordsOfExperimentsThatNoLongerExist() {
608608
@Test
609609
public void cleanRemovesRecordsOfExperimentsThatAreNotRunning() {
610610
final AtomicInteger bucketValue = new AtomicInteger();
611-
UserExperimentRecord userExperimentRecord = mock(UserExperimentRecord.class);
612-
Bucketer algorithm = mockUserExperimentRecordAlgorithm(bucketValue, userExperimentRecord);
611+
UserProfile userProfile = mock(UserProfile.class);
612+
Bucketer algorithm = mockUserExperimentRecordAlgorithm(bucketValue, userProfile);
613613
bucketValue.set(3000);
614614

615615
Map<String,Map<String,String>> records = new HashMap<String, Map<String, String>>();
616616
Map<String,String> activation = new HashMap<String, String>();
617617
activation.put("exp1", "var1");
618618
records.put("blah", activation);
619-
when(userExperimentRecord.getAllRecords()).thenReturn(records);
619+
when(userProfile.getAllRecords()).thenReturn(records);
620620

621621
algorithm.cleanUserExperimentRecords();
622622

623-
verify(userExperimentRecord).remove("blah", "exp1");
623+
verify(userProfile).remove("blah", "exp1");
624624
}
625625

626626
//======== Helper methods ========//
@@ -642,13 +642,13 @@ int generateBucketValue(int hashCode) {
642642
/**
643643
* Sets up a mock algorithm that returns an expected bucket value.
644644
*
645-
* Includes a composed {@link UserExperimentRecord} mock instance
645+
* Includes a composed {@link UserProfile} mock instance
646646
*
647647
* @param bucketValue the expected bucket value holder
648648
* @return the mock bucket algorithm
649649
*/
650-
private Bucketer mockUserExperimentRecordAlgorithm(final AtomicInteger bucketValue, final UserExperimentRecord userExperimentRecord) {
651-
return new Bucketer(validProjectConfigV2(), userExperimentRecord) {
650+
private Bucketer mockUserExperimentRecordAlgorithm(final AtomicInteger bucketValue, final UserProfile userProfile) {
651+
return new Bucketer(validProjectConfigV2(), userProfile) {
652652
@Override
653653
int generateBucketValue(int hashCode) {
654654
return bucketValue.get();

0 commit comments

Comments
 (0)