chibenwa commented on code in PR #1707:
URL: https://github.com/apache/james-project/pull/1707#discussion_r1312795413
##########
mailbox/tools/quota-recompute/src/main/java/org/apache/james/mailbox/quota/task/RecomputeCurrentQuotasService.java:
##########
@@ -149,35 +165,52 @@ public Snapshot snapshot() {
private final UserQuotaRootResolver userQuotaRootResolver;
private final SessionProvider sessionProvider;
private final MailboxManager mailboxManager;
+ private final CurrentUploadUsageRecomputator
currentUploadUsageRecomputator;
@Inject
public RecomputeCurrentQuotasService(UsersRepository usersRepository,
CurrentQuotaManager
storeCurrentQuotaManager,
CurrentQuotaCalculator
currentQuotaCalculator,
UserQuotaRootResolver
userQuotaRootResolver,
SessionProvider sessionProvider,
- MailboxManager mailboxManager) {
+ MailboxManager mailboxManager,
+ CurrentUploadUsageRecomputator
currentUploadUsageRecomputator) {
this.usersRepository = usersRepository;
this.storeCurrentQuotaManager = storeCurrentQuotaManager;
this.currentQuotaCalculator = currentQuotaCalculator;
this.userQuotaRootResolver = userQuotaRootResolver;
this.sessionProvider = sessionProvider;
this.mailboxManager = mailboxManager;
+ this.currentUploadUsageRecomputator = currentUploadUsageRecomputator;
}
public Mono<Task.Result> recomputeCurrentQuotas(Context context,
RunningOptions runningOptions) {
return Flux.from(usersRepository.listReactive())
.transform(ReactorUtils.<Username, Task.Result>throttle()
.elements(runningOptions.getUsersPerSecond())
.per(Duration.ofSeconds(1))
- .forOperation(username -> recomputeUserCurrentQuotas(context,
username)))
+ .forOperation(username ->
recomputeQuotasOfUser(runningOptions.quotaComponent, context, username)))
.reduce(Task.Result.COMPLETED, Task::combine)
.onErrorResume(UsersRepositoryException.class, e -> {
LOGGER.error("Error while accessing users from repository", e);
return Mono.just(Task.Result.PARTIAL);
});
}
+ private Mono<Task.Result> recomputeQuotasOfUser(Optional<QuotaComponent>
quotaComponentOptional, Context context, Username username) {
+ Mono<Task.Result> mono1 = recomputeUserCurrentQuotas(context,
username);
+ Mono<Task.Result> mono2 = recomputeCurrentUploadUsage(username);
+ if (quotaComponentOptional.isEmpty()) {
+ return Mono.zip(mono1, mono2).map(objects ->
Task.combine(objects.getT1(), objects.getT2()));
+ } else if
(QuotaComponent.MAILBOX.equals(quotaComponentOptional.get())) {
+ return mono1;
+ } else if
(QuotaComponent.JMAP_UPLOADS.equals(quotaComponentOptional.get())) {
+ return mono2;
+ } else {
+ throw new RuntimeException(String.format("Could not a matching
quota component for '%s'", quotaComponentOptional.get().getValue()));
+ }
+ }
Review Comment:
That is not beatiful code for sure.
Next time we add component what do we do? 9 if cases?
Suggestion:
```
Pair<Predicate<Optional<QuotaComponent>>, Mono<Task.Result>>
mailboxQuotaRecompute = ???
Pair<Predicate<Optional<QuotaComponent>>, Mono<Task.Result>>
jmapUploadsQuotaRecompute = ???
Flux.fromIterable(ImmutableList.of(mailboxQuotaRecompute,
jmapUploadsQuotaRecompute)
.filter(item -> item._1.test(quotaComponentOptional))
.concatMap(_._2)
.reduce(Task.Result::combine);
```
--
This is an automated message from the Apache Git Service.
To respond to the message, please log on to GitHub and use the
URL above to go to the specific comment.
To unsubscribe, e-mail: [email protected]
For queries about this service, please contact Infrastructure at:
[email protected]
---------------------------------------------------------------------
To unsubscribe, e-mail: [email protected]
For additional commands, e-mail: [email protected]