Skip to content

Commit f117429

Browse files
authored
remove support for legacy ups (#468)
Support for legacy UserProfileService is removed. It's 7yrs old, so not expected in any devices.
1 parent 599ce89 commit f117429

File tree

5 files changed

+15
-263
lines changed

5 files changed

+15
-263
lines changed

user-profile/src/androidTest/java/com/optimizely/ab/android/user_profile/DefaultUserProfileServiceTest.java

Lines changed: 1 addition & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -51,7 +51,6 @@ public class DefaultUserProfileServiceTest {
5151
private UserProfileCache.DiskCache diskCache;
5252
private ExecutorService executor;
5353
private Logger logger;
54-
private UserProfileCache.LegacyDiskCache legacyDiskCache;
5554
private Map<String, Map<String, Object>> memoryCache;
5655
private String projectId;
5756
private UserProfileCache userProfileCache;
@@ -66,11 +65,10 @@ public void setup() {
6665
logger = mock(Logger.class);
6766
cache = new Cache(InstrumentationRegistry.getInstrumentation().getTargetContext(), logger);
6867
executor =Executors.newSingleThreadExecutor();
69-
legacyDiskCache = new UserProfileCache.LegacyDiskCache(cache, executor, logger, projectId);
7068
memoryCache = new ConcurrentHashMap<>();
7169
projectId = "123";
7270
diskCache = new UserProfileCache.DiskCache(cache, executor, logger, projectId);
73-
userProfileCache = new UserProfileCache(diskCache, logger, memoryCache, legacyDiskCache);
71+
userProfileCache = new UserProfileCache(diskCache, logger, memoryCache);
7472
userProfileService = new DefaultUserProfileService(userProfileCache, logger);
7573

7674
// Test data.

user-profile/src/androidTest/java/com/optimizely/ab/android/user_profile/LegacyDiskCacheTest.java

Lines changed: 0 additions & 132 deletions
This file was deleted.

user-profile/src/androidTest/java/com/optimizely/ab/android/user_profile/UserProfileCacheTest.java

Lines changed: 1 addition & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -53,7 +53,6 @@ public class UserProfileCacheTest {
5353
private Logger logger;
5454
private Cache cache;
5555
private UserProfileCache.DiskCache diskCache;
56-
private UserProfileCache.LegacyDiskCache legacyDiskCache;
5756
private Map<String, Map<String, Object>> memoryCache;
5857
private String projectId;
5958
private UserProfileCache userProfileCache;
@@ -69,9 +68,8 @@ public void setup() throws JSONException {
6968
projectId = "1";
7069
cache = new Cache(InstrumentationRegistry.getInstrumentation().getTargetContext(), logger);
7170
diskCache = new UserProfileCache.DiskCache(cache, executor, logger, projectId);
72-
legacyDiskCache = new UserProfileCache.LegacyDiskCache(cache, executor, logger, projectId);
7371
memoryCache = new ConcurrentHashMap<>();
74-
userProfileCache = new UserProfileCache(diskCache, logger, memoryCache, legacyDiskCache);
72+
userProfileCache = new UserProfileCache(diskCache, logger, memoryCache);
7573

7674
// Test data.
7775
userId1 = "user_1";

user-profile/src/main/java/com/optimizely/ab/android/user_profile/DefaultUserProfileService.java

Lines changed: 10 additions & 7 deletions
Original file line numberDiff line numberDiff line change
@@ -62,14 +62,17 @@ public class DefaultUserProfileService implements UserProfileService {
6262
*/
6363
public static UserProfileService newInstance(@NonNull String projectId, @NonNull Context context) {
6464
UserProfileCache userProfileCache = new UserProfileCache(
65-
new UserProfileCache.DiskCache(new Cache(context, LoggerFactory.getLogger(Cache.class)),
66-
Executors.newSingleThreadExecutor(), LoggerFactory.getLogger(UserProfileCache.DiskCache.class),
67-
projectId),
65+
new UserProfileCache.DiskCache(
66+
new Cache(
67+
context,
68+
LoggerFactory.getLogger(Cache.class)
69+
),
70+
Executors.newSingleThreadExecutor(),
71+
LoggerFactory.getLogger(UserProfileCache.DiskCache.class),
72+
projectId
73+
),
6874
LoggerFactory.getLogger(UserProfileCache.class),
69-
new ConcurrentHashMap<String, Map<String, Object>>(),
70-
new UserProfileCache.LegacyDiskCache(new Cache(context, LoggerFactory.getLogger(Cache.class)),
71-
Executors.newSingleThreadExecutor(),
72-
LoggerFactory.getLogger(UserProfileCache.LegacyDiskCache.class), projectId));
75+
new ConcurrentHashMap<String, Map<String, Object>>());
7376

7477
return new DefaultUserProfileService(userProfileCache,
7578
LoggerFactory.getLogger(DefaultUserProfileService.class));

user-profile/src/main/java/com/optimizely/ab/android/user_profile/UserProfileCache.java

Lines changed: 3 additions & 118 deletions
Original file line numberDiff line numberDiff line change
@@ -47,15 +47,13 @@ class UserProfileCache {
4747
@NonNull @VisibleForTesting protected final DiskCache diskCache;
4848
@NonNull private final Logger logger;
4949
@NonNull private final Map<String, Map<String, Object>> memoryCache;
50-
@NonNull private final LegacyDiskCache legacyDiskCache;
5150

52-
UserProfileCache(@NonNull DiskCache diskCache, @NonNull Logger logger,
53-
@NonNull Map<String, Map<String, Object>> memoryCache,
54-
@NonNull LegacyDiskCache legacyDiskCache) {
51+
UserProfileCache(@NonNull DiskCache diskCache,
52+
@NonNull Logger logger,
53+
@NonNull Map<String, Map<String, Object>> memoryCache) {
5554
this.logger = logger;
5655
this.diskCache = diskCache;
5756
this.memoryCache = memoryCache;
58-
this.legacyDiskCache = legacyDiskCache;
5957
}
6058

6159
/**
@@ -85,49 +83,6 @@ Map<String, Object> lookup(String userId) {
8583
return memoryCache.get(userId);
8684
}
8785

88-
/**
89-
* Migrate legacy user profiles if found.
90-
* <p>
91-
* Note: this will overwrite a newer `UserProfile` cache in the unlikely event that a legacy cache and new cache
92-
* both exist on disk.
93-
*/
94-
@VisibleForTesting
95-
void migrateLegacyUserProfiles() {
96-
JSONObject legacyUserProfilesJson = legacyDiskCache.load();
97-
98-
if (legacyUserProfilesJson == null) {
99-
logger.info("No legacy user profiles to migrate.");
100-
return;
101-
}
102-
103-
try {
104-
Iterator<String> userIdIterator = legacyUserProfilesJson.keys();
105-
while (userIdIterator.hasNext()) {
106-
String userId = userIdIterator.next();
107-
JSONObject legacyUserProfileJson = legacyUserProfilesJson.getJSONObject(userId);
108-
109-
Map<String, Map<String, String>> experimentBucketMap = new ConcurrentHashMap<>();
110-
Iterator<String> experimentIdIterator = legacyUserProfileJson.keys();
111-
while (experimentIdIterator.hasNext()) {
112-
String experimentId = experimentIdIterator.next();
113-
String variationId = legacyUserProfileJson.getString(experimentId);
114-
Map<String, String> decisionMap = new ConcurrentHashMap<>();
115-
decisionMap.put(variationIdKey, variationId);
116-
experimentBucketMap.put(experimentId, decisionMap);
117-
}
118-
119-
Map<String, Object> userProfileMap = new ConcurrentHashMap<>();
120-
userProfileMap.put(userIdKey, userId);
121-
userProfileMap.put(experimentBucketMapKey, experimentBucketMap);
122-
save(userProfileMap);
123-
}
124-
} catch (JSONException e) {
125-
logger.warn("Unable to deserialize legacy user profiles. Will delete legacy user profile cache file.", e);
126-
} finally {
127-
legacyDiskCache.delete();
128-
}
129-
}
130-
13186
/**
13287
* Remove a user profile.
13388
*
@@ -218,9 +173,6 @@ void save(Map<String, Object> userProfileMap) {
218173
* Load the cache from disk to memory.
219174
*/
220175
void start() {
221-
// Migrate legacy user profiles if found.
222-
migrateLegacyUserProfiles();
223-
224176
try {
225177
JSONObject userProfilesJson = diskCache.load();
226178
Map<String, Map<String, Object>> userProfilesMap = UserProfileCacheUtils.convertJSONObjectToMap
@@ -295,71 +247,4 @@ protected Boolean doInBackground(Void[] params) {
295247
task.executeOnExecutor(executor);
296248
}
297249
}
298-
299-
/**
300-
* Stores a map of userIds to a map of expIds to variationIds in a file.
301-
*
302-
* @deprecated This class is only used to migrate legacy user profiles to the new {@link UserProfileCache}.
303-
*/
304-
static class LegacyDiskCache {
305-
306-
private static final String FILE_NAME = "optly-user-profile-%s.json";
307-
@NonNull private final Cache cache;
308-
@NonNull private final Executor executor;
309-
@NonNull private final Logger logger;
310-
@NonNull private final String projectId;
311-
312-
LegacyDiskCache(@NonNull Cache cache, @NonNull Executor executor, @NonNull Logger logger,
313-
@NonNull String projectId) {
314-
this.cache = cache;
315-
this.executor = executor;
316-
this.logger = logger;
317-
this.projectId = projectId;
318-
}
319-
320-
@VisibleForTesting
321-
String getFileName() {
322-
return String.format(FILE_NAME, projectId);
323-
}
324-
325-
/**
326-
* Load legacy user profiles from disk if found.
327-
*/
328-
@Nullable
329-
JSONObject load() {
330-
String cacheString = cache.load(getFileName());
331-
332-
if (cacheString == null) {
333-
logger.info("Legacy user profile cache not found.");
334-
return null;
335-
}
336-
337-
try {
338-
return new JSONObject(cacheString);
339-
} catch (JSONException e) {
340-
logger.warn("Unable to parse legacy user profiles. Will delete legacy user profile cache file.", e);
341-
delete();
342-
return null;
343-
}
344-
}
345-
346-
/**
347-
* Delete the legacy user profile cache from disk in a background thread.
348-
*/
349-
void delete() {
350-
AsyncTask<Void, Void, Boolean> task = new AsyncTask<Void, Void, Boolean>() {
351-
@Override
352-
protected Boolean doInBackground(Void[] params) {
353-
Boolean deleted = cache.delete(getFileName());
354-
if (deleted) {
355-
logger.info("Deleted legacy user profile from disk.");
356-
} else {
357-
logger.warn("Unable to delete legacy user profile from disk.");
358-
}
359-
return deleted;
360-
}
361-
};
362-
task.executeOnExecutor(executor);
363-
}
364-
}
365250
}

0 commit comments

Comments
 (0)