JAMES-1968 Separate Scripts operations and quota operation on Cassandra Sieve storage
Project: http://git-wip-us.apache.org/repos/asf/james-project/repo Commit: http://git-wip-us.apache.org/repos/asf/james-project/commit/39d5747d Tree: http://git-wip-us.apache.org/repos/asf/james-project/tree/39d5747d Diff: http://git-wip-us.apache.org/repos/asf/james-project/diff/39d5747d Branch: refs/heads/master Commit: 39d5747dd4c0d613d38780812f4965652edcdbf7 Parents: 027b0ca Author: benwa <btell...@linagora.com> Authored: Thu Mar 16 19:54:48 2017 +0700 Committer: benwa <btell...@linagora.com> Committed: Wed Mar 22 07:10:55 2017 +0700 ---------------------------------------------------------------------- .../cassandra/host/CassandraHostSystem.java | 5 +- .../sieve/cassandra/CassandraSieveDAO.java | 108 ------------- .../sieve/cassandra/CassandraSieveQuotaDAO.java | 157 +++++++++++++++++++ .../cassandra/CassandraSieveRepository.java | 30 ++-- .../cassandra/CassandraSieveRepositoryTest.java | 4 +- 5 files changed, 180 insertions(+), 124 deletions(-) ---------------------------------------------------------------------- http://git-wip-us.apache.org/repos/asf/james-project/blob/39d5747d/mpt/impl/managesieve/cassandra/src/test/java/org/apache/james/mpt/managesieve/cassandra/host/CassandraHostSystem.java ---------------------------------------------------------------------- diff --git a/mpt/impl/managesieve/cassandra/src/test/java/org/apache/james/mpt/managesieve/cassandra/host/CassandraHostSystem.java b/mpt/impl/managesieve/cassandra/src/test/java/org/apache/james/mpt/managesieve/cassandra/host/CassandraHostSystem.java index 40cff3f..fae007c 100644 --- a/mpt/impl/managesieve/cassandra/src/test/java/org/apache/james/mpt/managesieve/cassandra/host/CassandraHostSystem.java +++ b/mpt/impl/managesieve/cassandra/src/test/java/org/apache/james/mpt/managesieve/cassandra/host/CassandraHostSystem.java @@ -22,6 +22,7 @@ package org.apache.james.mpt.managesieve.cassandra.host; import org.apache.james.backends.cassandra.init.CassandraModuleComposite; import org.apache.james.mpt.host.JamesManageSieveHostSystem; import org.apache.james.sieve.cassandra.CassandraSieveDAO; +import org.apache.james.sieve.cassandra.CassandraSieveQuotaDAO; import org.apache.james.sieve.cassandra.CassandraSieveRepository; import org.apache.james.sieve.cassandra.CassandraSieveRepositoryModule; import org.apache.james.sieverepository.api.SieveRepository; @@ -40,7 +41,9 @@ public class CassandraHostSystem extends JamesManageSieveHostSystem { } protected static SieveRepository createSieveRepository() throws Exception { - return new CassandraSieveRepository(new CassandraSieveDAO(CASSANDRA_CLUSTER.getConf())); + return new CassandraSieveRepository( + new CassandraSieveDAO(CASSANDRA_CLUSTER.getConf()), + new CassandraSieveQuotaDAO(CASSANDRA_CLUSTER.getConf())); } protected static UsersRepository createUsersRepository() { http://git-wip-us.apache.org/repos/asf/james-project/blob/39d5747d/server/data/data-cassandra/src/main/java/org/apache/james/sieve/cassandra/CassandraSieveDAO.java ---------------------------------------------------------------------- diff --git a/server/data/data-cassandra/src/main/java/org/apache/james/sieve/cassandra/CassandraSieveDAO.java b/server/data/data-cassandra/src/main/java/org/apache/james/sieve/cassandra/CassandraSieveDAO.java index 3ba2810..31c3ee6 100644 --- a/server/data/data-cassandra/src/main/java/org/apache/james/sieve/cassandra/CassandraSieveDAO.java +++ b/server/data/data-cassandra/src/main/java/org/apache/james/sieve/cassandra/CassandraSieveDAO.java @@ -22,7 +22,6 @@ package org.apache.james.sieve.cassandra; import static com.datastax.driver.core.querybuilder.QueryBuilder.bindMarker; import static com.datastax.driver.core.querybuilder.QueryBuilder.delete; import static com.datastax.driver.core.querybuilder.QueryBuilder.eq; -import static com.datastax.driver.core.querybuilder.QueryBuilder.incr; import static com.datastax.driver.core.querybuilder.QueryBuilder.insertInto; import static com.datastax.driver.core.querybuilder.QueryBuilder.select; import static com.datastax.driver.core.querybuilder.QueryBuilder.set; @@ -38,9 +37,6 @@ import javax.inject.Inject; import org.apache.james.backends.cassandra.utils.CassandraAsyncExecutor; import org.apache.james.sieve.cassandra.model.ScriptContentAndActivation; -import org.apache.james.sieve.cassandra.tables.CassandraSieveClusterQuotaTable; -import org.apache.james.sieve.cassandra.tables.CassandraSieveQuotaTable; -import org.apache.james.sieve.cassandra.tables.CassandraSieveSpaceTable; import org.apache.james.sieve.cassandra.tables.CassandraSieveTable; import org.apache.james.sieverepository.api.ScriptSummary; import org.joda.time.DateTime; @@ -57,19 +53,11 @@ public class CassandraSieveDAO { private final PreparedStatement selectActiveScriptStatement; private final PreparedStatement selectActiveScriptMetadataStatement; private final PreparedStatement selectActiveScriptNameStatement; - private final PreparedStatement selectClusterQuotaStatement; private final PreparedStatement selectScriptsStatement; private final PreparedStatement selectScriptStatement; private final PreparedStatement selectScriptMetadataStatement; - private final PreparedStatement selectSpaceUsedByUserStatement; - private final PreparedStatement selectUserQuotaStatement; - private final PreparedStatement updateClusterQuotaStatement; - private final PreparedStatement updateUserQuotaStatement; private final PreparedStatement updateScriptActivationStatement; - private final PreparedStatement updateSpaceUsedStatement; - private final PreparedStatement deleteClusterQuotaStatement; private final PreparedStatement deleteScriptStatement; - private final PreparedStatement deleteUserQuotaStatement; @Inject public CassandraSieveDAO(Session session) { @@ -93,11 +81,6 @@ public class CassandraSieveDAO { selectActiveScriptNameStatement = session.prepare(getScriptQuery(CassandraSieveTable.SCRIPT_NAME) .and(eq(CassandraSieveTable.IS_ACTIVE, bindMarker(CassandraSieveTable.IS_ACTIVE)))); - selectClusterQuotaStatement = session.prepare( - select(CassandraSieveClusterQuotaTable.VALUE) - .from(CassandraSieveClusterQuotaTable.TABLE_NAME) - .where(eq(CassandraSieveClusterQuotaTable.NAME, bindMarker(CassandraSieveClusterQuotaTable.NAME)))); - selectScriptsStatement = session.prepare( select() .from(CassandraSieveTable.TABLE_NAME) @@ -109,21 +92,6 @@ public class CassandraSieveDAO { selectScriptMetadataStatement = session.prepare(getScriptQuery(CassandraSieveTable.SIZE, CassandraSieveTable.IS_ACTIVE, CassandraSieveTable.DATE) .and(eq(CassandraSieveTable.SCRIPT_NAME, bindMarker(CassandraSieveTable.SCRIPT_NAME)))); - selectSpaceUsedByUserStatement = session.prepare( - select(CassandraSieveSpaceTable.SPACE_USED) - .from(CassandraSieveSpaceTable.TABLE_NAME) - .where(eq(CassandraSieveSpaceTable.USER_NAME, bindMarker(CassandraSieveSpaceTable.USER_NAME)))); - - selectUserQuotaStatement = session.prepare( - select(CassandraSieveQuotaTable.QUOTA) - .from(CassandraSieveQuotaTable.TABLE_NAME) - .where(eq(CassandraSieveQuotaTable.USER_NAME, bindMarker(CassandraSieveQuotaTable.USER_NAME)))); - - updateClusterQuotaStatement = session.prepare( - update(CassandraSieveClusterQuotaTable.TABLE_NAME) - .with(set(CassandraSieveClusterQuotaTable.VALUE, bindMarker(CassandraSieveClusterQuotaTable.VALUE))) - .where(eq(CassandraSieveClusterQuotaTable.NAME, bindMarker(CassandraSieveClusterQuotaTable.NAME)))); - updateScriptActivationStatement = session.prepare( update(CassandraSieveTable.TABLE_NAME) .with(set(CassandraSieveTable.IS_ACTIVE, bindMarker(CassandraSieveTable.IS_ACTIVE))) @@ -131,34 +99,12 @@ public class CassandraSieveDAO { .and(eq(CassandraSieveTable.SCRIPT_NAME, bindMarker(CassandraSieveTable.SCRIPT_NAME))) .ifExists()); - updateSpaceUsedStatement = session.prepare( - update(CassandraSieveSpaceTable.TABLE_NAME) - .with(incr(CassandraSieveSpaceTable.SPACE_USED, bindMarker(CassandraSieveSpaceTable.SPACE_USED))) - .where(eq(CassandraSieveSpaceTable.USER_NAME, bindMarker(CassandraSieveSpaceTable.USER_NAME)))); - - updateUserQuotaStatement = session.prepare( - update(CassandraSieveQuotaTable.TABLE_NAME) - .with(set(CassandraSieveQuotaTable.QUOTA, bindMarker(CassandraSieveQuotaTable.QUOTA))) - .where(eq(CassandraSieveQuotaTable.USER_NAME, bindMarker(CassandraSieveQuotaTable.USER_NAME)))); - deleteScriptStatement = session.prepare( delete() .from(CassandraSieveTable.TABLE_NAME) .where(eq(CassandraSieveTable.USER_NAME, bindMarker(CassandraSieveTable.USER_NAME))) .and(eq(CassandraSieveTable.SCRIPT_NAME, bindMarker(CassandraSieveTable.SCRIPT_NAME))) .ifExists()); - - deleteClusterQuotaStatement = session.prepare( - delete() - .from(CassandraSieveClusterQuotaTable.TABLE_NAME) - .where(eq(CassandraSieveClusterQuotaTable.NAME, bindMarker(CassandraSieveClusterQuotaTable.NAME))) - .ifExists()); - - deleteUserQuotaStatement = session.prepare( - delete() - .from(CassandraSieveQuotaTable.TABLE_NAME) - .where(eq(CassandraSieveQuotaTable.USER_NAME, bindMarker(CassandraSieveQuotaTable.USER_NAME))) - .ifExists()); } private Select.Where getScriptQuery(String... selectedRows) { @@ -167,14 +113,6 @@ public class CassandraSieveDAO { .where(eq(CassandraSieveTable.USER_NAME, bindMarker(CassandraSieveTable.USER_NAME))); } - public CompletableFuture<Long> spaceUsedBy(String user) { - return cassandraAsyncExecutor.executeSingleRow( - selectSpaceUsedByUserStatement.bind() - .setString(CassandraSieveSpaceTable.USER_NAME, user)) - .thenApply(optional -> optional.map(row -> row.getLong(CassandraSieveSpaceTable.SPACE_USED)) - .orElse(0L)); - } - public CompletableFuture<Void> insertScript(String user, String name, String content, boolean isActive) { return cassandraAsyncExecutor.executeVoid( insertScriptStatement.bind() @@ -198,13 +136,6 @@ public class CassandraSieveDAO { .collect(Collectors.toList())); } - public CompletableFuture<Void> updateSpaceUsed(String user, long spaceUsed) { - return cassandraAsyncExecutor.executeVoid( - updateSpaceUsedStatement.bind() - .setLong(CassandraSieveSpaceTable.SPACE_USED, spaceUsed) - .setString(CassandraSieveSpaceTable.USER_NAME, user)); - } - public CompletableFuture<Boolean> updateScriptActivation(String user, String scriptName, boolean active) { return cassandraAsyncExecutor.executeReturnApplied( updateScriptActivationStatement.bind() @@ -250,32 +181,6 @@ public class CassandraSieveDAO { return getScriptSize(user, name).thenApply(Optional::isPresent); } - public CompletableFuture<Optional<Long>> getQuota() { - return cassandraAsyncExecutor.executeSingleRow( - selectClusterQuotaStatement.bind() - .setString(CassandraSieveClusterQuotaTable.NAME, CassandraSieveClusterQuotaTable.DEFAULT_NAME)) - .thenApply(optional -> optional.map(row -> row.getLong(CassandraSieveClusterQuotaTable.VALUE))); - } - - public CompletableFuture<Void> setQuota(long quota) { - return cassandraAsyncExecutor.executeVoid( - updateClusterQuotaStatement.bind() - .setLong(CassandraSieveClusterQuotaTable.VALUE, quota) - .setString(CassandraSieveClusterQuotaTable.NAME, CassandraSieveClusterQuotaTable.DEFAULT_NAME)); - } - - public CompletableFuture<Boolean> removeQuota() { - return cassandraAsyncExecutor.executeReturnApplied( - deleteClusterQuotaStatement.bind() - .setString(CassandraSieveClusterQuotaTable.NAME, CassandraSieveClusterQuotaTable.DEFAULT_NAME)); - } - - public CompletableFuture<Optional<Long>> getQuota(String user) { - return cassandraAsyncExecutor.executeSingleRow( - selectUserQuotaStatement.bind() - .setString(CassandraSieveQuotaTable.USER_NAME, user)) - .thenApply(optional -> optional.map(row -> row.getLong(CassandraSieveQuotaTable.QUOTA))); - } public CompletableFuture<Optional<String>> getActiveName(String user) { return cassandraAsyncExecutor.executeSingleRow( @@ -285,19 +190,6 @@ public class CassandraSieveDAO { .thenApply(optional -> optional.map(row -> row.getString(CassandraSieveTable.SCRIPT_NAME))); } - public CompletableFuture<Void> setQuota(String user, long quota) { - return cassandraAsyncExecutor.executeVoid( - updateUserQuotaStatement.bind() - .setLong(CassandraSieveQuotaTable.QUOTA, quota) - .setString(CassandraSieveQuotaTable.USER_NAME, user)); - } - - public CompletableFuture<Boolean> removeQuota(String user) { - return cassandraAsyncExecutor.executeReturnApplied( - deleteUserQuotaStatement.bind() - .setString(CassandraSieveQuotaTable.USER_NAME, user)); - } - public CompletableFuture<Optional<String>> getActive(String user) { return cassandraAsyncExecutor.executeSingleRow( selectActiveScriptStatement.bind() http://git-wip-us.apache.org/repos/asf/james-project/blob/39d5747d/server/data/data-cassandra/src/main/java/org/apache/james/sieve/cassandra/CassandraSieveQuotaDAO.java ---------------------------------------------------------------------- diff --git a/server/data/data-cassandra/src/main/java/org/apache/james/sieve/cassandra/CassandraSieveQuotaDAO.java b/server/data/data-cassandra/src/main/java/org/apache/james/sieve/cassandra/CassandraSieveQuotaDAO.java new file mode 100644 index 0000000..6dcbe6e --- /dev/null +++ b/server/data/data-cassandra/src/main/java/org/apache/james/sieve/cassandra/CassandraSieveQuotaDAO.java @@ -0,0 +1,157 @@ +/**************************************************************** + * Licensed to the Apache Software Foundation (ASF) under one * + * or more contributor license agreements. See the NOTICE file * + * distributed with this work for additional information * + * regarding copyright ownership. The ASF licenses this file * + * to you under the Apache License, Version 2.0 (the * + * "License"); you may not use this file except in compliance * + * with the License. You may obtain a copy of the License at * + * * + * http://www.apache.org/licenses/LICENSE-2.0 * + * * + * Unless required by applicable law or agreed to in writing, * + * software distributed under the License is distributed on an * + * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY * + * KIND, either express or implied. See the License for the * + * specific language governing permissions and limitations * + * under the License. * + ****************************************************************/ + +package org.apache.james.sieve.cassandra; + +import static com.datastax.driver.core.querybuilder.QueryBuilder.bindMarker; +import static com.datastax.driver.core.querybuilder.QueryBuilder.delete; +import static com.datastax.driver.core.querybuilder.QueryBuilder.eq; +import static com.datastax.driver.core.querybuilder.QueryBuilder.incr; +import static com.datastax.driver.core.querybuilder.QueryBuilder.select; +import static com.datastax.driver.core.querybuilder.QueryBuilder.set; +import static com.datastax.driver.core.querybuilder.QueryBuilder.update; + +import java.util.Optional; +import java.util.concurrent.CompletableFuture; + +import javax.inject.Inject; + +import org.apache.james.backends.cassandra.utils.CassandraAsyncExecutor; +import org.apache.james.sieve.cassandra.tables.CassandraSieveClusterQuotaTable; +import org.apache.james.sieve.cassandra.tables.CassandraSieveQuotaTable; +import org.apache.james.sieve.cassandra.tables.CassandraSieveSpaceTable; + +import com.datastax.driver.core.PreparedStatement; +import com.datastax.driver.core.Session; + +public class CassandraSieveQuotaDAO { + + private final CassandraAsyncExecutor cassandraAsyncExecutor; + private final PreparedStatement selectClusterQuotaStatement; + private final PreparedStatement selectSpaceUsedByUserStatement; + private final PreparedStatement selectUserQuotaStatement; + private final PreparedStatement updateClusterQuotaStatement; + private final PreparedStatement updateUserQuotaStatement; + private final PreparedStatement updateSpaceUsedStatement; + private final PreparedStatement deleteClusterQuotaStatement; + private final PreparedStatement deleteUserQuotaStatement; + + @Inject + public CassandraSieveQuotaDAO(Session session) { + this.cassandraAsyncExecutor = new CassandraAsyncExecutor(session); + + selectClusterQuotaStatement = session.prepare( + select(CassandraSieveClusterQuotaTable.VALUE) + .from(CassandraSieveClusterQuotaTable.TABLE_NAME) + .where(eq(CassandraSieveClusterQuotaTable.NAME, bindMarker(CassandraSieveClusterQuotaTable.NAME)))); + + selectSpaceUsedByUserStatement = session.prepare( + select(CassandraSieveSpaceTable.SPACE_USED) + .from(CassandraSieveSpaceTable.TABLE_NAME) + .where(eq(CassandraSieveSpaceTable.USER_NAME, bindMarker(CassandraSieveSpaceTable.USER_NAME)))); + + selectUserQuotaStatement = session.prepare( + select(CassandraSieveQuotaTable.QUOTA) + .from(CassandraSieveQuotaTable.TABLE_NAME) + .where(eq(CassandraSieveQuotaTable.USER_NAME, bindMarker(CassandraSieveQuotaTable.USER_NAME)))); + + updateClusterQuotaStatement = session.prepare( + update(CassandraSieveClusterQuotaTable.TABLE_NAME) + .with(set(CassandraSieveClusterQuotaTable.VALUE, bindMarker(CassandraSieveClusterQuotaTable.VALUE))) + .where(eq(CassandraSieveClusterQuotaTable.NAME, bindMarker(CassandraSieveClusterQuotaTable.NAME)))); + + updateSpaceUsedStatement = session.prepare( + update(CassandraSieveSpaceTable.TABLE_NAME) + .with(incr(CassandraSieveSpaceTable.SPACE_USED, bindMarker(CassandraSieveSpaceTable.SPACE_USED))) + .where(eq(CassandraSieveSpaceTable.USER_NAME, bindMarker(CassandraSieveSpaceTable.USER_NAME)))); + + updateUserQuotaStatement = session.prepare( + update(CassandraSieveQuotaTable.TABLE_NAME) + .with(set(CassandraSieveQuotaTable.QUOTA, bindMarker(CassandraSieveQuotaTable.QUOTA))) + .where(eq(CassandraSieveQuotaTable.USER_NAME, bindMarker(CassandraSieveQuotaTable.USER_NAME)))); + + deleteClusterQuotaStatement = session.prepare( + delete() + .from(CassandraSieveClusterQuotaTable.TABLE_NAME) + .where(eq(CassandraSieveClusterQuotaTable.NAME, bindMarker(CassandraSieveClusterQuotaTable.NAME))) + .ifExists()); + + deleteUserQuotaStatement = session.prepare( + delete() + .from(CassandraSieveQuotaTable.TABLE_NAME) + .where(eq(CassandraSieveQuotaTable.USER_NAME, bindMarker(CassandraSieveQuotaTable.USER_NAME))) + .ifExists()); + } + + public CompletableFuture<Long> spaceUsedBy(String user) { + return cassandraAsyncExecutor.executeSingleRow( + selectSpaceUsedByUserStatement.bind() + .setString(CassandraSieveSpaceTable.USER_NAME, user)) + .thenApply(optional -> optional.map(row -> row.getLong(CassandraSieveSpaceTable.SPACE_USED)) + .orElse(0L)); + } + + public CompletableFuture<Void> updateSpaceUsed(String user, long spaceUsed) { + return cassandraAsyncExecutor.executeVoid( + updateSpaceUsedStatement.bind() + .setLong(CassandraSieveSpaceTable.SPACE_USED, spaceUsed) + .setString(CassandraSieveSpaceTable.USER_NAME, user)); + } + + public CompletableFuture<Optional<Long>> getQuota() { + return cassandraAsyncExecutor.executeSingleRow( + selectClusterQuotaStatement.bind() + .setString(CassandraSieveClusterQuotaTable.NAME, CassandraSieveClusterQuotaTable.DEFAULT_NAME)) + .thenApply(optional -> optional.map(row -> row.getLong(CassandraSieveClusterQuotaTable.VALUE))); + } + + public CompletableFuture<Void> setQuota(long quota) { + return cassandraAsyncExecutor.executeVoid( + updateClusterQuotaStatement.bind() + .setLong(CassandraSieveClusterQuotaTable.VALUE, quota) + .setString(CassandraSieveClusterQuotaTable.NAME, CassandraSieveClusterQuotaTable.DEFAULT_NAME)); + } + + public CompletableFuture<Boolean> removeQuota() { + return cassandraAsyncExecutor.executeReturnApplied( + deleteClusterQuotaStatement.bind() + .setString(CassandraSieveClusterQuotaTable.NAME, CassandraSieveClusterQuotaTable.DEFAULT_NAME)); + } + + public CompletableFuture<Optional<Long>> getQuota(String user) { + return cassandraAsyncExecutor.executeSingleRow( + selectUserQuotaStatement.bind() + .setString(CassandraSieveQuotaTable.USER_NAME, user)) + .thenApply(optional -> optional.map(row -> row.getLong(CassandraSieveQuotaTable.QUOTA))); + } + + public CompletableFuture<Void> setQuota(String user, long quota) { + return cassandraAsyncExecutor.executeVoid( + updateUserQuotaStatement.bind() + .setLong(CassandraSieveQuotaTable.QUOTA, quota) + .setString(CassandraSieveQuotaTable.USER_NAME, user)); + } + + public CompletableFuture<Boolean> removeQuota(String user) { + return cassandraAsyncExecutor.executeReturnApplied( + deleteUserQuotaStatement.bind() + .setString(CassandraSieveQuotaTable.USER_NAME, user)); + } + +} http://git-wip-us.apache.org/repos/asf/james-project/blob/39d5747d/server/data/data-cassandra/src/main/java/org/apache/james/sieve/cassandra/CassandraSieveRepository.java ---------------------------------------------------------------------- diff --git a/server/data/data-cassandra/src/main/java/org/apache/james/sieve/cassandra/CassandraSieveRepository.java b/server/data/data-cassandra/src/main/java/org/apache/james/sieve/cassandra/CassandraSieveRepository.java index a597ae5..0dd3153 100644 --- a/server/data/data-cassandra/src/main/java/org/apache/james/sieve/cassandra/CassandraSieveRepository.java +++ b/server/data/data-cassandra/src/main/java/org/apache/james/sieve/cassandra/CassandraSieveRepository.java @@ -43,10 +43,12 @@ import org.joda.time.DateTime; public class CassandraSieveRepository implements SieveRepository { private final CassandraSieveDAO cassandraSieveDAO; + private final CassandraSieveQuotaDAO cassandraSieveQuotaDAO; @Inject - public CassandraSieveRepository(CassandraSieveDAO cassandraSieveDAO) { + public CassandraSieveRepository(CassandraSieveDAO cassandraSieveDAO, CassandraSieveQuotaDAO cassandraSieveQuotaDAO) { this.cassandraSieveDAO = cassandraSieveDAO; + this.cassandraSieveQuotaDAO = cassandraSieveQuotaDAO; } @Override @@ -62,9 +64,9 @@ public class CassandraSieveRepository implements SieveRepository { } private void throwOnOverQuota(String user, CompletableFuture<Long> sizeDifference) throws QuotaExceededException, StorageException { - CompletableFuture<Optional<Long>> userQuotaFuture = cassandraSieveDAO.getQuota(user); - CompletableFuture<Optional<Long>> globalQuotaFuture = cassandraSieveDAO.getQuota(); - CompletableFuture<Long> spaceUsedFuture = cassandraSieveDAO.spaceUsedBy(user); + CompletableFuture<Optional<Long>> userQuotaFuture = cassandraSieveQuotaDAO.getQuota(user); + CompletableFuture<Optional<Long>> globalQuotaFuture = cassandraSieveQuotaDAO.getQuota(); + CompletableFuture<Long> spaceUsedFuture = cassandraSieveQuotaDAO.spaceUsedBy(user); new SieveQuota(spaceUsedFuture.join(), limitToUse(userQuotaFuture, globalQuotaFuture)).checkOverQuotaUponModification(sizeDifference.join()); } @@ -96,7 +98,7 @@ public class CassandraSieveRepository implements SieveRepository { if (spaceUsed == 0) { return CompletableFuture.completedFuture(null); } - return cassandraSieveDAO.updateSpaceUsed(user, spaceUsed); + return cassandraSieveQuotaDAO.updateSpaceUsed(user, spaceUsed); } @Override @@ -186,34 +188,34 @@ public class CassandraSieveRepository implements SieveRepository { @Override public boolean hasQuota() { - return cassandraSieveDAO.getQuota() + return cassandraSieveQuotaDAO.getQuota() .join() .isPresent(); } @Override public long getQuota() throws QuotaNotFoundException { - return cassandraSieveDAO.getQuota() + return cassandraSieveQuotaDAO.getQuota() .join() .orElseThrow(QuotaNotFoundException::new); } @Override public void setQuota(long quota) { - cassandraSieveDAO.setQuota(quota).join(); + cassandraSieveQuotaDAO.setQuota(quota).join(); } @Override public void removeQuota() throws QuotaNotFoundException { - if (!cassandraSieveDAO.removeQuota().join()) { + if (!cassandraSieveQuotaDAO.removeQuota().join()) { throw new QuotaNotFoundException(); } } @Override public boolean hasQuota(String user) { - CompletableFuture<Boolean> userQuotaIsPresent = cassandraSieveDAO.getQuota(user).thenApply(Optional::isPresent); - CompletableFuture<Boolean> globalQuotaIsPresent = cassandraSieveDAO.getQuota().thenApply(Optional::isPresent); + CompletableFuture<Boolean> userQuotaIsPresent = cassandraSieveQuotaDAO.getQuota(user).thenApply(Optional::isPresent); + CompletableFuture<Boolean> globalQuotaIsPresent = cassandraSieveQuotaDAO.getQuota().thenApply(Optional::isPresent); CompletableFuture.allOf(userQuotaIsPresent, globalQuotaIsPresent).join(); return userQuotaIsPresent.join() || globalQuotaIsPresent.join(); @@ -221,19 +223,19 @@ public class CassandraSieveRepository implements SieveRepository { @Override public long getQuota(String user) throws QuotaNotFoundException { - return cassandraSieveDAO.getQuota(user) + return cassandraSieveQuotaDAO.getQuota(user) .join() .orElseThrow(QuotaNotFoundException::new); } @Override public void setQuota(String user, long quota) { - cassandraSieveDAO.setQuota(user, quota).join(); + cassandraSieveQuotaDAO.setQuota(user, quota).join(); } @Override public void removeQuota(String user) throws QuotaNotFoundException { - if (!cassandraSieveDAO.removeQuota(user).join()) { + if (!cassandraSieveQuotaDAO.removeQuota(user).join()) { throw new QuotaNotFoundException(); } } http://git-wip-us.apache.org/repos/asf/james-project/blob/39d5747d/server/data/data-cassandra/src/test/java/org/apache/james/sieve/cassandra/CassandraSieveRepositoryTest.java ---------------------------------------------------------------------- diff --git a/server/data/data-cassandra/src/test/java/org/apache/james/sieve/cassandra/CassandraSieveRepositoryTest.java b/server/data/data-cassandra/src/test/java/org/apache/james/sieve/cassandra/CassandraSieveRepositoryTest.java index b40b513..bf1fd34 100644 --- a/server/data/data-cassandra/src/test/java/org/apache/james/sieve/cassandra/CassandraSieveRepositoryTest.java +++ b/server/data/data-cassandra/src/test/java/org/apache/james/sieve/cassandra/CassandraSieveRepositoryTest.java @@ -42,7 +42,9 @@ public class CassandraSieveRepositoryTest extends AbstractSieveRepositoryTest { @Override protected SieveRepository createSieveRepository() throws Exception { - return new CassandraSieveRepository(new CassandraSieveDAO(cassandra.getConf())); + return new CassandraSieveRepository( + new CassandraSieveDAO(cassandra.getConf()), + new CassandraSieveQuotaDAO(cassandra.getConf())); } @Override --------------------------------------------------------------------- To unsubscribe, e-mail: server-dev-unsubscr...@james.apache.org For additional commands, e-mail: server-dev-h...@james.apache.org