chibenwa commented on code in PR #1707:
URL: https://github.com/apache/james-project/pull/1707#discussion_r1316819318
##########
server/protocols/webadmin/webadmin-mailbox/src/main/java/org/apache/james/webadmin/routes/UserQuotaRoutes.java:
##########
@@ -90,6 +100,24 @@ private static Optional<Integer> intQueryParameter(Request
request) {
"strictly positive optional integer", USERS_PER_SECOND),
e);
}
}
+
+ private static List<QuotaComponent> getQuotaComponent(Request request)
{
+ List<QuotaComponent> quotaComponents = new ArrayList<>();
+ String[] quotaComponentStrings =
request.queryParamsValues(QUOTA_COMPONENT);
+ if (Objects.isNull(quotaComponentStrings) ||
quotaComponentStrings.length == 0) {
Review Comment:
Use Optionnal
##########
mailbox/tools/quota-recompute/src/main/java/org/apache/james/mailbox/quota/task/RecomputeCurrentQuotasService.java:
##########
@@ -149,36 +165,49 @@ public Snapshot snapshot() {
private final UserQuotaRootResolver userQuotaRootResolver;
private final SessionProvider sessionProvider;
private final MailboxManager mailboxManager;
+ private final JMAPCurrentUploadUsageRecomputator
jmapCurrentUploadUsageRecomputator;
@Inject
public RecomputeCurrentQuotasService(UsersRepository usersRepository,
CurrentQuotaManager
storeCurrentQuotaManager,
CurrentQuotaCalculator
currentQuotaCalculator,
UserQuotaRootResolver
userQuotaRootResolver,
SessionProvider sessionProvider,
- MailboxManager mailboxManager) {
+ MailboxManager mailboxManager,
+ JMAPCurrentUploadUsageRecomputator
jmapCurrentUploadUsageRecomputator) {
this.usersRepository = usersRepository;
this.storeCurrentQuotaManager = storeCurrentQuotaManager;
this.currentQuotaCalculator = currentQuotaCalculator;
this.userQuotaRootResolver = userQuotaRootResolver;
this.sessionProvider = sessionProvider;
this.mailboxManager = mailboxManager;
+ this.jmapCurrentUploadUsageRecomputator =
jmapCurrentUploadUsageRecomputator;
}
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.getQuotaComponents(), 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> recomputeUserCurrentQuotas(Context context,
Username username) {
+ private Mono<Task.Result> recomputeQuotasOfUser(List<QuotaComponent>
quotaComponents, Context context, Username username) {
+ Map<QuotaComponent, Mono<Task.Result>> map =
ImmutableMap.of(QuotaComponent.MAILBOX,
recomputeMailboxUserCurrentQuotas(context, username),
+ QuotaComponent.JMAP_UPLOADS,
recomputeJMAPCurrentUploadUsage(username));
+ if (quotaComponents.isEmpty()) {
+ return Flux.merge(map.values()).reduce(Task.Result.COMPLETED,
Task::combine);
+ } else {
+ return
Flux.fromIterable(quotaComponents).flatMap(map::get).reduce(Task.Result.COMPLETED,
Task::combine);
Review Comment:
What if we ask for a component not in the map?
At the very least, this line of code is tightly coupled with input
validation.
Maybe something like
```suggestion
return Flux.fromIterable(quotaComponents)
.flatMap(c -> mapgetOrElse(c, Mono.just(PARTIAL))
.reduce(Task.Result.COMPLETED, Task::combine);
```
##########
server/protocols/webadmin/webadmin-mailbox/src/main/java/org/apache/james/webadmin/routes/UserQuotaRoutes.java:
##########
@@ -90,6 +100,24 @@ private static Optional<Integer> intQueryParameter(Request
request) {
"strictly positive optional integer", USERS_PER_SECOND),
e);
}
}
+
+ private static List<QuotaComponent> getQuotaComponent(Request request)
{
+ List<QuotaComponent> quotaComponents = new ArrayList<>();
+ String[] quotaComponentStrings =
request.queryParamsValues(QUOTA_COMPONENT);
+ if (Objects.isNull(quotaComponentStrings) ||
quotaComponentStrings.length == 0) {
+ return ImmutableList.of();
+ }
+ for (String quotaComponentString : quotaComponentStrings) {
Review Comment:
use java.util.Stream
##########
server/protocols/webadmin/webadmin-mailbox/src/main/java/org/apache/james/webadmin/routes/UserQuotaRoutes.java:
##########
@@ -90,6 +100,24 @@ private static Optional<Integer> intQueryParameter(Request
request) {
"strictly positive optional integer", USERS_PER_SECOND),
e);
}
}
+
+ private static List<QuotaComponent> getQuotaComponent(Request request)
{
+ List<QuotaComponent> quotaComponents = new ArrayList<>();
+ String[] quotaComponentStrings =
request.queryParamsValues(QUOTA_COMPONENT);
+ if (Objects.isNull(quotaComponentStrings) ||
quotaComponentStrings.length == 0) {
+ return ImmutableList.of();
+ }
+ for (String quotaComponentString : quotaComponentStrings) {
+ QuotaComponent quotaComponent =
QUOTA_COMPONENT_MAP.get(quotaComponentString);
+ if (Objects.isNull(quotaComponent)) {
Review Comment:
Use Optional
##########
mailbox/cassandra/src/test/java/org/apache/james/mailbox/cassandra/mail/task/CassandraRecomputeCurrentQuotasServiceTest.java:
##########
@@ -52,6 +53,7 @@
import org.junit.jupiter.api.Disabled;
import org.junit.jupiter.api.Test;
import org.junit.jupiter.api.extension.RegisterExtension;
+import org.mockito.Mockito;
Review Comment:
Why?
--
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]