chibenwa commented on code in PR #1707:
URL: https://github.com/apache/james-project/pull/1707#discussion_r1312796517
##########
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:
Input validation should be done at the edge of the system. Please do it when
parsing QuotaComponent.
Even better: intruduce a dedicated anum to embed this knowledge/
--
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]