Do not unnecessarily refresh known-unregistered users during migration.

fork-5.53.8
Greyson Parrelli 2020-12-10 12:20:10 -05:00
rodzic af99753d47
commit 23579a9b1d
4 zmienionych plików z 35 dodań i 8 usunięć

Wyświetl plik

@ -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.");

Wyświetl plik

@ -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);

Wyświetl plik

@ -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;
}
}

Wyświetl plik

@ -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();