mirror of
https://github.com/signalapp/Signal-Server
synced 2026-04-20 07:08:05 +01:00
Allow experiments to exclude by ACI
This commit is contained in:
committed by
ravi-signal
parent
93515e5a0f
commit
9d980f36b0
@@ -26,8 +26,8 @@ public class DynamicExperimentEnrollmentConfiguration {
|
||||
/**
|
||||
* What percentage of enrolled UUIDs should the experiment be enabled for.
|
||||
* <p>
|
||||
* Unlike {@link this#enrollmentPercentage}, this is not stable by UUID. The same UUID may be
|
||||
* enrolled/unenrolled across calls.
|
||||
* Unlike {@link this#enrollmentPercentage}, this is not stable by UUID. The same UUID may be enrolled/unenrolled
|
||||
* across calls.
|
||||
*/
|
||||
@JsonProperty
|
||||
@Valid
|
||||
@@ -49,6 +49,14 @@ public class DynamicExperimentEnrollmentConfiguration {
|
||||
@NotNull
|
||||
private final UuidSelector uuidSelector = new UuidSelector();
|
||||
|
||||
|
||||
/**
|
||||
* UUIDs that the experiment should always be disabled for. This takes precedence over uuidSelector.
|
||||
*/
|
||||
@Valid
|
||||
@NotNull
|
||||
private final Set<UUID> excludedUuids = Collections.emptySet();
|
||||
|
||||
/**
|
||||
* If the UUID is not enrolled via {@link UuidSelector#uuids}, what is the percentage chance it should be enrolled.
|
||||
* <p>
|
||||
@@ -67,4 +75,9 @@ public class DynamicExperimentEnrollmentConfiguration {
|
||||
public UuidSelector getUuidSelector() {
|
||||
return uuidSelector;
|
||||
}
|
||||
|
||||
public Set<UUID> getExcludedUuids() {
|
||||
return excludedUuids;
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
@@ -5,11 +5,11 @@
|
||||
|
||||
package org.whispersystems.textsecuregcm.experiment;
|
||||
|
||||
import com.google.common.annotations.VisibleForTesting;
|
||||
import java.util.Optional;
|
||||
import java.util.Random;
|
||||
import java.util.UUID;
|
||||
import java.util.concurrent.ThreadLocalRandom;
|
||||
import com.google.common.annotations.VisibleForTesting;
|
||||
import org.whispersystems.textsecuregcm.configuration.dynamic.DynamicConfiguration;
|
||||
import org.whispersystems.textsecuregcm.configuration.dynamic.DynamicExperimentEnrollmentConfiguration;
|
||||
import org.whispersystems.textsecuregcm.configuration.dynamic.DynamicPreRegistrationExperimentEnrollmentConfiguration;
|
||||
@@ -47,6 +47,9 @@ public class ExperimentEnrollmentManager {
|
||||
}
|
||||
|
||||
Optional<Boolean> isAccountEnrolled(final UUID accountUuid, DynamicExperimentEnrollmentConfiguration config) {
|
||||
if (config.getExcludedUuids().contains(accountUuid)) {
|
||||
return Optional.of(false);
|
||||
}
|
||||
if (config.getUuidSelector().getUuids().contains(accountUuid)) {
|
||||
final int r = random.nextInt(100);
|
||||
return Optional.of(r < config.getUuidSelector().getUuidEnrollmentPercentage());
|
||||
|
||||
Reference in New Issue
Block a user