Do not unnecessarily refresh known-unregistered users during migration.
This commit is contained in:
parent
af99753d47
commit
23579a9b1d
4 changed files with 35 additions and 8 deletions
|
@ -96,12 +96,15 @@ public final class GroupsV1MigrationUtil {
|
|||
throw new InvalidMigrationStateException();
|
||||
}
|
||||
|
||||
RecipientUtil.ensureUuidsAreAvailable(context, groupRecipient.getParticipants());
|
||||
groupRecipient = groupRecipient.fresh();
|
||||
|
||||
List<Recipient> registeredMembers = RecipientUtil.getEligibleForSending(groupRecipient.getParticipants());
|
||||
List<Recipient> possibleMembers = forced ? getMigratableManualMigrationMembers(registeredMembers)
|
||||
: getMigratableAutoMigrationMembers(registeredMembers);
|
||||
|
||||
if (RecipientUtil.ensureUuidsAreAvailable(context, registeredMembers)) {
|
||||
Log.i(TAG, "Newly-discovered UUIDs. Getting fresh recipients.");
|
||||
registeredMembers = Stream.of(registeredMembers).map(Recipient::fresh).toList();
|
||||
}
|
||||
|
||||
List<Recipient> possibleMembers = forced ? getMigratableManualMigrationMembers(registeredMembers)
|
||||
: getMigratableAutoMigrationMembers(registeredMembers);
|
||||
|
||||
if (!forced && possibleMembers.size() != registeredMembers.size()) {
|
||||
Log.w(TAG, "Not allowed to invite or leave registered users behind in an auto-migration! Skipping.");
|
||||
|
|
|
@ -61,6 +61,11 @@ public class GroupV1MigrationJob extends BaseJob {
|
|||
}
|
||||
|
||||
public static void enqueuePossibleAutoMigrate(@NonNull RecipientId recipientId) {
|
||||
if (!FeatureFlags.groupsV1MigrationJob()) {
|
||||
Log.w(TAG, "Migration job is disabled.");
|
||||
return;
|
||||
}
|
||||
|
||||
SignalExecutors.BOUNDED.execute(() -> {
|
||||
if (Recipient.resolved(recipientId).isPushV1Group()) {
|
||||
ApplicationDependencies.getJobManager().add(new GroupV1MigrationJob(recipientId));
|
||||
|
@ -69,6 +74,11 @@ public class GroupV1MigrationJob extends BaseJob {
|
|||
}
|
||||
|
||||
public static void enqueueRoutineMigrationsIfNecessary(@NonNull Application application) {
|
||||
if (!FeatureFlags.groupsV1MigrationJob()) {
|
||||
Log.w(TAG, "Migration job is disabled.");
|
||||
return;
|
||||
}
|
||||
|
||||
if (!SignalStore.registrationValues().isRegistrationComplete() ||
|
||||
!TextSecurePreferences.isPushRegistered(application) ||
|
||||
TextSecurePreferences.getLocalUuid(application) == null)
|
||||
|
@ -82,12 +92,15 @@ public class GroupV1MigrationJob extends BaseJob {
|
|||
return;
|
||||
}
|
||||
|
||||
long timeSinceRefresh = System.currentTimeMillis() - SignalStore.misc().getLastProfileRefreshTime();
|
||||
long timeSinceRefresh = System.currentTimeMillis() - SignalStore.misc().getLastGv1RoutineMigrationTime();
|
||||
|
||||
if (timeSinceRefresh < REFRESH_INTERVAL) {
|
||||
Log.i(TAG, "Too soon to refresh. Did the last refresh " + timeSinceRefresh + " ms ago.");
|
||||
return;
|
||||
}
|
||||
|
||||
SignalStore.misc().setLastGv1RoutineMigrationTime(System.currentTimeMillis());
|
||||
|
||||
SignalExecutors.BOUNDED.execute(() -> {
|
||||
JobManager jobManager = ApplicationDependencies.getJobManager();
|
||||
List<ThreadRecord> threads = DatabaseFactory.getThreadDatabase(application).getRecentV1Groups(ROUTINE_LIMIT);
|
||||
|
|
|
@ -93,7 +93,7 @@ public class RecipientUtil {
|
|||
.toList();
|
||||
}
|
||||
|
||||
public static void ensureUuidsAreAvailable(@NonNull Context context, @NonNull Collection<Recipient> recipients)
|
||||
public static boolean ensureUuidsAreAvailable(@NonNull Context context, @NonNull Collection<Recipient> recipients)
|
||||
throws IOException
|
||||
{
|
||||
List<Recipient> recipientsWithoutUuids = Stream.of(recipients)
|
||||
|
@ -103,6 +103,9 @@ public class RecipientUtil {
|
|||
|
||||
if (recipientsWithoutUuids.size() > 0) {
|
||||
DirectoryHelper.refreshDirectoryFor(context, recipientsWithoutUuids, false);
|
||||
return true;
|
||||
} else {
|
||||
return false;
|
||||
}
|
||||
}
|
||||
|
||||
|
|
|
@ -64,6 +64,7 @@ public final class FeatureFlags {
|
|||
private static final String GV1_AUTO_MIGRATE = "android.groupsV1Migration.auto.4";
|
||||
private static final String GV1_MANUAL_MIGRATE = "android.groupsV1Migration.manual";
|
||||
private static final String GV1_FORCED_MIGRATE = "android.groupsV1Migration.forced";
|
||||
private static final String GV1_MIGRATION_JOB = "android.groupsV1Migration.job";
|
||||
private static final String SEND_VIEWED_RECEIPTS = "android.sendViewedReceipts";
|
||||
|
||||
/**
|
||||
|
@ -81,6 +82,7 @@ public final class FeatureFlags {
|
|||
DONATE_MEGAPHONE,
|
||||
VIEWED_RECEIPTS,
|
||||
GV1_AUTO_MIGRATE,
|
||||
GV1_MIGRATION_JOB,
|
||||
GV1_MANUAL_MIGRATE,
|
||||
GV1_FORCED_MIGRATE,
|
||||
GROUP_CALLING,
|
||||
|
@ -107,7 +109,8 @@ public final class FeatureFlags {
|
|||
private static final Set<String> HOT_SWAPPABLE = SetUtil.newHashSet(
|
||||
VERIFY_V2,
|
||||
CLIENT_EXPIRATION,
|
||||
GROUP_CALLING
|
||||
GROUP_CALLING,
|
||||
GV1_MIGRATION_JOB
|
||||
);
|
||||
|
||||
/**
|
||||
|
@ -238,6 +241,11 @@ public final class FeatureFlags {
|
|||
return getBoolean(GV1_AUTO_MIGRATE, false);
|
||||
}
|
||||
|
||||
/** Whether or not we should run the job to proactively migrate groups. */
|
||||
public static boolean groupsV1MigrationJob() {
|
||||
return getBoolean(GV1_MIGRATION_JOB, false);
|
||||
}
|
||||
|
||||
/** Whether or not manual migration from GV1->GV2 is enabled. */
|
||||
public static boolean groupsV1ManualMigration() {
|
||||
return getBoolean(GV1_MANUAL_MIGRATE, false) && groupsV1AutoMigration();
|
||||
|
|
Loading…
Add table
Reference in a new issue