You are viewing a plain text version of this content. The canonical link for it is here.
Posted to server-dev@james.apache.org by bt...@apache.org on 2017/03/22 00:12:36 UTC
[3/7] james-project git commit: JAMES-1968 Separate Scripts
operations and quota operation on Cassandra Sieve storage
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 <bt...@linagora.com>
Authored: Thu Mar 16 19:54:48 2017 +0700
Committer: benwa <bt...@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-unsubscribe@james.apache.org
For additional commands, e-mail: server-dev-help@james.apache.org