mirror of
https://github.com/Sheldan/abstracto.git
synced 2026-04-16 20:29:08 +00:00
[AB-25] changing member loading to be partitioned
This commit is contained in:
@@ -9,6 +9,7 @@ import dev.sheldan.abstracto.core.service.management.ServerManagementService;
|
|||||||
import dev.sheldan.abstracto.core.service.management.UserInServerManagementService;
|
import dev.sheldan.abstracto.core.service.management.UserInServerManagementService;
|
||||||
import dev.sheldan.abstracto.core.templating.model.MessageToSend;
|
import dev.sheldan.abstracto.core.templating.model.MessageToSend;
|
||||||
import dev.sheldan.abstracto.core.templating.service.TemplateService;
|
import dev.sheldan.abstracto.core.templating.service.TemplateService;
|
||||||
|
import dev.sheldan.abstracto.core.utils.CompletableFutureList;
|
||||||
import dev.sheldan.abstracto.core.utils.FutureUtils;
|
import dev.sheldan.abstracto.core.utils.FutureUtils;
|
||||||
import dev.sheldan.abstracto.experience.config.ExperienceFeatureConfig;
|
import dev.sheldan.abstracto.experience.config.ExperienceFeatureConfig;
|
||||||
import dev.sheldan.abstracto.experience.config.ExperienceFeatureDefinition;
|
import dev.sheldan.abstracto.experience.config.ExperienceFeatureDefinition;
|
||||||
@@ -28,6 +29,7 @@ import lombok.extern.slf4j.Slf4j;
|
|||||||
import net.dv8tion.jda.api.entities.Member;
|
import net.dv8tion.jda.api.entities.Member;
|
||||||
import net.dv8tion.jda.api.entities.Message;
|
import net.dv8tion.jda.api.entities.Message;
|
||||||
import net.dv8tion.jda.api.entities.channel.middleman.MessageChannel;
|
import net.dv8tion.jda.api.entities.channel.middleman.MessageChannel;
|
||||||
|
import org.apache.commons.collections4.ListUtils;
|
||||||
import org.springframework.beans.factory.annotation.Autowired;
|
import org.springframework.beans.factory.annotation.Autowired;
|
||||||
import org.springframework.beans.factory.annotation.Qualifier;
|
import org.springframework.beans.factory.annotation.Qualifier;
|
||||||
import org.springframework.core.task.TaskExecutor;
|
import org.springframework.core.task.TaskExecutor;
|
||||||
@@ -183,18 +185,32 @@ public class AUserExperienceServiceBean implements AUserExperienceService {
|
|||||||
CompletableFuture<Void> returnFuture = new CompletableFuture<>();
|
CompletableFuture<Void> returnFuture = new CompletableFuture<>();
|
||||||
Long serverId = server.getId();
|
Long serverId = server.getId();
|
||||||
int supposedUserCount = userIds.size();
|
int supposedUserCount = userIds.size();
|
||||||
memberService.getMembersInServerAsync(server.getId(), userIds).whenComplete((members, throwable) -> {
|
|
||||||
if(throwable != null) {
|
List<List<Long>> partitionedUserIds = ListUtils.partition(userIds, 100);
|
||||||
log.warn("Failed to load all members in server {} for syncing experience. We started with {} and got {}.",
|
List<CompletableFuture<List<Member>>> memberLoadingFutures = new ArrayList<>();
|
||||||
serverId, supposedUserCount, members.size(), throwable);
|
partitionedUserIds.forEach(userIdsPart -> {
|
||||||
}
|
memberLoadingFutures.add(memberService.getMembersInServerAsync(server.getId(), userIdsPart));
|
||||||
self.syncUsers(members, serverId, messageChannel).thenAccept(unused -> {
|
});
|
||||||
log.info("Finished syncing users for experience roles.");
|
CompletableFutureList<List<Member>> listCompletableFutureList = new CompletableFutureList<>(memberLoadingFutures);
|
||||||
returnFuture.complete(null);
|
listCompletableFutureList.getMainFuture().whenComplete((result, throwable) -> {
|
||||||
}).exceptionally(throwable1 -> {
|
List<Member> members = new ArrayList<>();
|
||||||
|
listCompletableFutureList.getFutures().forEach(listCompletableFuture -> members.addAll(listCompletableFuture.join()));
|
||||||
|
if(throwable != null) {
|
||||||
|
log.warn("Failed to load all members in server {} for syncing experience. We started with {} and got {}.",
|
||||||
|
serverId, supposedUserCount, members.size(), throwable);
|
||||||
|
}
|
||||||
|
self.syncUsers(members, serverId, messageChannel).thenAccept(unused -> {
|
||||||
|
log.info("Finished syncing users for experience roles.");
|
||||||
|
returnFuture.complete(null);
|
||||||
|
}).exceptionally(throwable1 -> {
|
||||||
|
log.error("Failed to sync members.", throwable);
|
||||||
|
returnFuture.complete(null);
|
||||||
|
return null;
|
||||||
|
});
|
||||||
|
}).exceptionally(throwable -> {
|
||||||
|
log.error("Failed to load members.", throwable);
|
||||||
returnFuture.complete(null);
|
returnFuture.complete(null);
|
||||||
return null;
|
return null;
|
||||||
});
|
|
||||||
});
|
});
|
||||||
return returnFuture;
|
return returnFuture;
|
||||||
}
|
}
|
||||||
|
|||||||
Reference in New Issue
Block a user