Remove feature flags that are no longer remote capable.

master
Greyson Parrelli 2020-02-28 17:33:19 -05:00
parent 8e795c4177
commit 6813f47bc1
2 changed files with 92 additions and 25 deletions

View File

@ -149,7 +149,7 @@ public final class FeatureFlags {
SignalStore.remoteConfigValues().setPendingConfig(mapToJson(result.getDisk()));
REMOTE_VALUES.clear();
REMOTE_VALUES.putAll(result.getMemory());
triggerFlagChangeListeners(result.getChanges());
triggerFlagChangeListeners(result.getMemoryChanges());
SignalStore.remoteConfigValues().setLastFetchTime(System.currentTimeMillis());
@ -271,6 +271,17 @@ public final class FeatureFlags {
}
});
Stream.of(allKeys)
.filterNot(remoteCapable::contains)
.filterNot(key -> sticky.contains(key) && localDisk.get(key) == Boolean.TRUE)
.forEach(key -> {
newDisk.remove(key);
if (hotSwap.contains(key)) {
newMemory.remove(key);
}
});
return new UpdateResult(newMemory, newDisk, computeChanges(localMemory, newMemory));
}
@ -367,12 +378,12 @@ public final class FeatureFlags {
static final class UpdateResult {
private final Map<String, Boolean> memory;
private final Map<String, Boolean> disk;
private final Map<String, Change> changes;
private final Map<String, Change> memoryChanges;
UpdateResult(@NonNull Map<String, Boolean> memory, @NonNull Map<String, Boolean> disk, @NonNull Map<String, Change> changes) {
this.memory = memory;
this.disk = disk;
this.changes = changes;
UpdateResult(@NonNull Map<String, Boolean> memory, @NonNull Map<String, Boolean> disk, @NonNull Map<String, Change> memoryChanges) {
this.memory = memory;
this.disk = disk;
this.memoryChanges = memoryChanges;
}
public @NonNull Map<String, Boolean> getMemory() {
@ -383,8 +394,8 @@ public final class FeatureFlags {
return disk;
}
public @NonNull Map<String, Change> getChanges() {
return changes;
public @NonNull Map<String, Change> getMemoryChanges() {
return memoryChanges;
}
}

View File

@ -31,7 +31,7 @@ public class FeatureFlagsTest {
assertEquals(mapOf(), result.getMemory());
assertEquals(mapOf("A", true), result.getDisk());
assertTrue(result.getChanges().isEmpty());
assertTrue(result.getMemoryChanges().isEmpty());
}
@Test
@ -45,7 +45,7 @@ public class FeatureFlagsTest {
assertEquals(mapOf(), result.getMemory());
assertEquals(mapOf(A, true), result.getDisk());
assertTrue(result.getChanges().isEmpty());
assertTrue(result.getMemoryChanges().isEmpty());
}
@Test
@ -59,7 +59,7 @@ public class FeatureFlagsTest {
assertEquals(mapOf(A, true), result.getMemory());
assertEquals(mapOf(A, true), result.getDisk());
assertEquals(Change.ENABLED, result.getChanges().get(A));
assertEquals(Change.ENABLED, result.getMemoryChanges().get(A));
}
@Test
@ -73,7 +73,7 @@ public class FeatureFlagsTest {
assertEquals(mapOf(), result.getMemory());
assertEquals(mapOf(A, true), result.getDisk());
assertTrue(result.getChanges().isEmpty());
assertTrue(result.getMemoryChanges().isEmpty());
}
@Test
@ -87,7 +87,7 @@ public class FeatureFlagsTest {
assertEquals(mapOf(A, true), result.getMemory());
assertEquals(mapOf(A, true), result.getDisk());
assertEquals(Change.ENABLED, result.getChanges().get(A));
assertEquals(Change.ENABLED, result.getMemoryChanges().get(A));
}
@Test
@ -101,7 +101,7 @@ public class FeatureFlagsTest {
assertEquals(mapOf(A, false), result.getMemory());
assertEquals(mapOf(A, true), result.getDisk());
assertTrue(result.getChanges().isEmpty());
assertTrue(result.getMemoryChanges().isEmpty());
}
@Test
@ -115,7 +115,7 @@ public class FeatureFlagsTest {
assertEquals(mapOf(A, true), result.getMemory());
assertEquals(mapOf(A, true), result.getDisk());
assertEquals(Change.ENABLED, result.getChanges().get(A));
assertEquals(Change.ENABLED, result.getMemoryChanges().get(A));
}
@Test
@ -129,7 +129,7 @@ public class FeatureFlagsTest {
assertEquals(mapOf(A, true), result.getMemory());
assertEquals(mapOf(A, true), result.getDisk());
assertEquals(Change.ENABLED, result.getChanges().get(A));
assertEquals(Change.ENABLED, result.getMemoryChanges().get(A));
}
@Test
@ -143,7 +143,7 @@ public class FeatureFlagsTest {
assertEquals(mapOf(A, true), result.getMemory());
assertEquals(mapOf(A, true), result.getDisk());
assertTrue(result.getChanges().isEmpty());
assertTrue(result.getMemoryChanges().isEmpty());
}
@Test
@ -157,7 +157,21 @@ public class FeatureFlagsTest {
assertEquals(mapOf(A, true), result.getMemory());
assertEquals(mapOf(), result.getDisk());
assertTrue(result.getChanges().isEmpty());
assertTrue(result.getMemoryChanges().isEmpty());
}
@Test
public void updateInternal_removeValue_notRemoteCapable() {
UpdateResult result = FeatureFlags.updateInternal(mapOf(A, true),
mapOf(A, true),
mapOf(A, true),
setOf(),
setOf(),
setOf());
assertEquals(mapOf(A, true), result.getMemory());
assertEquals(mapOf(), result.getDisk());
assertTrue(result.getMemoryChanges().isEmpty());
}
@Test
@ -171,7 +185,21 @@ public class FeatureFlagsTest {
assertEquals(mapOf(), result.getMemory());
assertEquals(mapOf(), result.getDisk());
assertEquals(Change.REMOVED, result.getChanges().get(A));
assertEquals(Change.REMOVED, result.getMemoryChanges().get(A));
}
@Test
public void updateInternal_removeValue_hotSwap_notRemoteCapable() {
UpdateResult result = FeatureFlags.updateInternal(mapOf(A, true),
mapOf(A, true),
mapOf(A, true),
setOf(),
setOf(A),
setOf());
assertEquals(mapOf(), result.getMemory());
assertEquals(mapOf(), result.getDisk());
assertEquals(Change.REMOVED, result.getMemoryChanges().get(A));
}
@Test
@ -185,7 +213,7 @@ public class FeatureFlagsTest {
assertEquals(mapOf(A, true), result.getMemory());
assertEquals(mapOf(A, true), result.getDisk());
assertTrue(result.getChanges().isEmpty());
assertTrue(result.getMemoryChanges().isEmpty());
}
@Test
@ -199,7 +227,21 @@ public class FeatureFlagsTest {
assertEquals(mapOf(A, false), result.getMemory());
assertEquals(mapOf(), result.getDisk());
assertTrue(result.getChanges().isEmpty());
assertTrue(result.getMemoryChanges().isEmpty());
}
@Test
public void updateInternal_removeValue_stickyNotEnabled_notRemoteCapable() {
UpdateResult result = FeatureFlags.updateInternal(mapOf(A, true),
mapOf(A, false),
mapOf(A, false),
setOf(),
setOf(),
setOf(A));
assertEquals(mapOf(A, false), result.getMemory());
assertEquals(mapOf(), result.getDisk());
assertTrue(result.getMemoryChanges().isEmpty());
}
@Test
@ -213,7 +255,21 @@ public class FeatureFlagsTest {
assertEquals(mapOf(A, true), result.getMemory());
assertEquals(mapOf(A, true), result.getDisk());
assertTrue(result.getChanges().isEmpty());
assertTrue(result.getMemoryChanges().isEmpty());
}
@Test
public void updateInternal_removeValue_hotSwap_stickyAlreadyEnabled_notRemoteCapable() {
UpdateResult result = FeatureFlags.updateInternal(mapOf(A, true),
mapOf(A, true),
mapOf(A, true),
setOf(),
setOf(A),
setOf(A));
assertEquals(mapOf(A, true), result.getMemory());
assertEquals(mapOf(A, true), result.getDisk());
assertTrue(result.getMemoryChanges().isEmpty());
}
@Test
@ -227,7 +283,7 @@ public class FeatureFlagsTest {
assertEquals(mapOf(), result.getMemory());
assertEquals(mapOf(), result.getDisk());
assertEquals(Change.REMOVED, result.getChanges().get(A));
assertEquals(Change.REMOVED, result.getMemoryChanges().get(A));
}
@Test
@ -242,7 +298,7 @@ public class FeatureFlagsTest {
assertEquals(mapOf(), result.getMemory());
assertEquals(mapOf(A, true, B, false), result.getDisk());
assertTrue(result.getChanges().isEmpty());
assertTrue(result.getMemoryChanges().isEmpty());
}
@Test
@ -259,7 +315,7 @@ public class FeatureFlagsTest {
assertEquals(mapOf(A, true, B, true), result.getMemory());
assertEquals(mapOf(A, true, B, false), result.getDisk());
assertTrue(result.getChanges().isEmpty());
assertTrue(result.getMemoryChanges().isEmpty());
}
@Test