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]

Reply via email to