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 2018/07/03 08:51:39 UTC
[1/7] james-project git commit: JAMES-2445 Adding/removing
groups/forwards should be indempotent
Repository: james-project
Updated Branches:
refs/heads/master 21bb9757b -> 8992243e9
JAMES-2445 Adding/removing groups/forwards should be indempotent
Project: http://git-wip-us.apache.org/repos/asf/james-project/repo
Commit: http://git-wip-us.apache.org/repos/asf/james-project/commit/5d70b940
Tree: http://git-wip-us.apache.org/repos/asf/james-project/tree/5d70b940
Diff: http://git-wip-us.apache.org/repos/asf/james-project/diff/5d70b940
Branch: refs/heads/master
Commit: 5d70b940011af916daf329d10b27e12654991a48
Parents: 21bb975
Author: benwa <bt...@linagora.com>
Authored: Mon Jul 2 12:16:47 2018 +0700
Committer: benwa <bt...@linagora.com>
Committed: Tue Jul 3 15:49:54 2018 +0700
----------------------------------------------------------------------
.../rrt/api/MappingAlreadyExistsException.java | 30 ++++++++++++++++++++
.../rrt/lib/AbstractRecipientRewriteTable.java | 3 +-
.../james/webadmin/routes/ForwardRoutes.java | 15 ++++++++--
.../james/webadmin/routes/GroupsRoutes.java | 23 ++++++++++-----
.../routes/DomainMappingsRoutesTest.java | 16 +++++++++++
.../webadmin/routes/ForwardRoutesTest.java | 26 ++++++++++++-----
.../james/webadmin/routes/GroupsRoutesTest.java | 26 ++++++++++++-----
src/site/markdown/server/manage-webadmin.md | 8 +++---
8 files changed, 118 insertions(+), 29 deletions(-)
----------------------------------------------------------------------
http://git-wip-us.apache.org/repos/asf/james-project/blob/5d70b940/server/data/data-api/src/main/java/org/apache/james/rrt/api/MappingAlreadyExistsException.java
----------------------------------------------------------------------
diff --git a/server/data/data-api/src/main/java/org/apache/james/rrt/api/MappingAlreadyExistsException.java b/server/data/data-api/src/main/java/org/apache/james/rrt/api/MappingAlreadyExistsException.java
new file mode 100644
index 0000000..4d80ad8
--- /dev/null
+++ b/server/data/data-api/src/main/java/org/apache/james/rrt/api/MappingAlreadyExistsException.java
@@ -0,0 +1,30 @@
+/****************************************************************
+ * 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.rrt.api;
+
+public class MappingAlreadyExistsException extends RecipientRewriteTableException {
+
+ public MappingAlreadyExistsException(String msg) {
+ super(msg);
+ }
+
+ public MappingAlreadyExistsException(String msg, Throwable t) {
+ super(msg, t);
+ }
+}
http://git-wip-us.apache.org/repos/asf/james-project/blob/5d70b940/server/data/data-library/src/main/java/org/apache/james/rrt/lib/AbstractRecipientRewriteTable.java
----------------------------------------------------------------------
diff --git a/server/data/data-library/src/main/java/org/apache/james/rrt/lib/AbstractRecipientRewriteTable.java b/server/data/data-library/src/main/java/org/apache/james/rrt/lib/AbstractRecipientRewriteTable.java
index bb42e52..328de7a 100644
--- a/server/data/data-library/src/main/java/org/apache/james/rrt/lib/AbstractRecipientRewriteTable.java
+++ b/server/data/data-library/src/main/java/org/apache/james/rrt/lib/AbstractRecipientRewriteTable.java
@@ -34,6 +34,7 @@ import org.apache.james.core.User;
import org.apache.james.domainlist.api.DomainList;
import org.apache.james.domainlist.api.DomainListException;
import org.apache.james.lifecycle.api.Configurable;
+import org.apache.james.rrt.api.MappingAlreadyExistsException;
import org.apache.james.rrt.api.RecipientRewriteTable;
import org.apache.james.rrt.api.RecipientRewriteTableException;
import org.apache.james.rrt.lib.Mapping.Type;
@@ -313,7 +314,7 @@ public abstract class AbstractRecipientRewriteTable implements RecipientRewriteT
private void checkDuplicateMapping(MappingSource source, Mapping mapping) throws RecipientRewriteTableException {
Mappings mappings = getUserDomainMappings(source);
if (mappings != null && mappings.contains(mapping)) {
- throw new RecipientRewriteTableException("Mapping " + mapping + " for " + source.asString() + " already exist!");
+ throw new MappingAlreadyExistsException("Mapping " + mapping + " for " + source.asString() + " already exist!");
}
}
http://git-wip-us.apache.org/repos/asf/james-project/blob/5d70b940/server/protocols/webadmin/webadmin-data/src/main/java/org/apache/james/webadmin/routes/ForwardRoutes.java
----------------------------------------------------------------------
diff --git a/server/protocols/webadmin/webadmin-data/src/main/java/org/apache/james/webadmin/routes/ForwardRoutes.java b/server/protocols/webadmin/webadmin-data/src/main/java/org/apache/james/webadmin/routes/ForwardRoutes.java
index 935f88a..8ea0ec0 100644
--- a/server/protocols/webadmin/webadmin-data/src/main/java/org/apache/james/webadmin/routes/ForwardRoutes.java
+++ b/server/protocols/webadmin/webadmin-data/src/main/java/org/apache/james/webadmin/routes/ForwardRoutes.java
@@ -41,6 +41,7 @@ import javax.ws.rs.Produces;
import org.apache.james.core.MailAddress;
import org.apache.james.core.User;
import org.apache.james.domainlist.api.DomainListException;
+import org.apache.james.rrt.api.MappingAlreadyExistsException;
import org.apache.james.rrt.api.RecipientRewriteTable;
import org.apache.james.rrt.api.RecipientRewriteTableException;
import org.apache.james.rrt.lib.Mapping;
@@ -167,8 +168,16 @@ public class ForwardRoutes implements Routes {
ensureUserExist(forwardBaseAddress);
MailAddress destinationAddress = parseMailAddress(request.params(FORWARD_DESTINATION_ADDRESS));
MappingSource source = MappingSource.fromUser(User.fromLocalPartWithDomain(forwardBaseAddress.getLocalPart(), forwardBaseAddress.getDomain()));
- recipientRewriteTable.addForwardMapping(source, destinationAddress.asString());
- return halt(HttpStatus.CREATED_201);
+ addForward(source, destinationAddress);
+ return halt(HttpStatus.NO_CONTENT_204);
+ }
+
+ private void addForward(MappingSource source, MailAddress destinationAddress) throws RecipientRewriteTableException {
+ try {
+ recipientRewriteTable.addForwardMapping(source, destinationAddress.asString());
+ } catch (MappingAlreadyExistsException e) {
+ // ignore
+ }
}
private void ensureUserExist(MailAddress mailAddress) throws UsersRepositoryException {
@@ -201,7 +210,7 @@ public class ForwardRoutes implements Routes {
MailAddress destinationAddressToBeRemoved = parseMailAddress(request.params(FORWARD_DESTINATION_ADDRESS));
MappingSource source = MappingSource.fromUser(User.fromLocalPartWithDomain(baseAddress.getLocalPart(), baseAddress.getDomain()));
recipientRewriteTable.removeForwardMapping(source, destinationAddressToBeRemoved.asString());
- return halt(HttpStatus.OK_200);
+ return halt(HttpStatus.NO_CONTENT_204);
}
@GET
http://git-wip-us.apache.org/repos/asf/james-project/blob/5d70b940/server/protocols/webadmin/webadmin-data/src/main/java/org/apache/james/webadmin/routes/GroupsRoutes.java
----------------------------------------------------------------------
diff --git a/server/protocols/webadmin/webadmin-data/src/main/java/org/apache/james/webadmin/routes/GroupsRoutes.java b/server/protocols/webadmin/webadmin-data/src/main/java/org/apache/james/webadmin/routes/GroupsRoutes.java
index 2625a46..85771f8 100644
--- a/server/protocols/webadmin/webadmin-data/src/main/java/org/apache/james/webadmin/routes/GroupsRoutes.java
+++ b/server/protocols/webadmin/webadmin-data/src/main/java/org/apache/james/webadmin/routes/GroupsRoutes.java
@@ -43,6 +43,7 @@ import org.apache.james.core.MailAddress;
import org.apache.james.core.User;
import org.apache.james.domainlist.api.DomainList;
import org.apache.james.domainlist.api.DomainListException;
+import org.apache.james.rrt.api.MappingAlreadyExistsException;
import org.apache.james.rrt.api.RecipientRewriteTable;
import org.apache.james.rrt.api.RecipientRewriteTableException;
import org.apache.james.rrt.lib.Mapping;
@@ -55,7 +56,6 @@ import org.apache.james.webadmin.Constants;
import org.apache.james.webadmin.Routes;
import org.apache.james.webadmin.utils.ErrorResponder;
import org.apache.james.webadmin.utils.ErrorResponder.ErrorType;
-import org.apache.james.webadmin.utils.JsonExtractException;
import org.apache.james.webadmin.utils.JsonTransformer;
import org.eclipse.jetty.http.HttpStatus;
import org.slf4j.Logger;
@@ -64,6 +64,7 @@ import org.slf4j.LoggerFactory;
import com.github.steveash.guavate.Guavate;
import com.google.common.annotations.VisibleForTesting;
import com.google.common.collect.ImmutableSortedSet;
+
import io.swagger.annotations.Api;
import io.swagger.annotations.ApiImplicitParam;
import io.swagger.annotations.ApiImplicitParams;
@@ -149,22 +150,30 @@ public class GroupsRoutes implements Routes {
MAILADDRESS_ASCII_DISCLAIMER)
})
@ApiResponses(value = {
- @ApiResponse(code = HttpStatus.OK_200, message = "OK", response = List.class),
+ @ApiResponse(code = HttpStatus.NO_CONTENT_204, message = "OK", response = List.class),
@ApiResponse(code = HttpStatus.BAD_REQUEST_400, message = GROUP_ADDRESS + " or group structure format is not valid"),
@ApiResponse(code = HttpStatus.FORBIDDEN_403, message = "server doesn't own the domain"),
@ApiResponse(code = HttpStatus.CONFLICT_409, message = "requested group address is already used for another purpose"),
@ApiResponse(code = HttpStatus.INTERNAL_SERVER_ERROR_500,
message = "Internal server error - Something went bad on the server side.")
})
- public HaltException addToGroup(Request request, Response response) throws JsonExtractException, AddressException, RecipientRewriteTableException, UsersRepositoryException, DomainListException {
+ public HaltException addToGroup(Request request, Response response) throws RecipientRewriteTableException, UsersRepositoryException, DomainListException {
MailAddress groupAddress = parseMailAddress(request.params(GROUP_ADDRESS));
Domain domain = groupAddress.getDomain();
ensureRegisteredDomain(domain);
ensureNotShadowingAnotherAddress(groupAddress);
MailAddress userAddress = parseMailAddress(request.params(USER_ADDRESS));
MappingSource source = MappingSource.fromUser(User.fromLocalPartWithDomain(groupAddress.getLocalPart(), domain));
- recipientRewriteTable.addGroupMapping(source, userAddress.asString());
- return halt(HttpStatus.CREATED_201);
+ addGroupMember(source, userAddress);
+ return halt(HttpStatus.NO_CONTENT_204);
+ }
+
+ private void addGroupMember(MappingSource source, MailAddress userAddress) throws RecipientRewriteTableException {
+ try {
+ recipientRewriteTable.addGroupMapping(source, userAddress.asString());
+ } catch (MappingAlreadyExistsException e) {
+ // do nothing
+ }
}
private void ensureRegisteredDomain(Domain domain) throws DomainListException {
@@ -202,14 +211,14 @@ public class GroupsRoutes implements Routes {
@ApiResponse(code = HttpStatus.INTERNAL_SERVER_ERROR_500,
message = "Internal server error - Something went bad on the server side.")
})
- public HaltException removeFromGroup(Request request, Response response) throws JsonExtractException, AddressException, RecipientRewriteTableException {
+ public HaltException removeFromGroup(Request request, Response response) throws RecipientRewriteTableException {
MailAddress groupAddress = parseMailAddress(request.params(GROUP_ADDRESS));
MailAddress userAddress = parseMailAddress(request.params(USER_ADDRESS));
MappingSource source = MappingSource
.fromUser(
User.fromLocalPartWithDomain(groupAddress.getLocalPart(), groupAddress.getDomain()));
recipientRewriteTable.removeGroupMapping(source, userAddress.asString());
- return halt(HttpStatus.OK_200);
+ return halt(HttpStatus.NO_CONTENT_204);
}
@GET
http://git-wip-us.apache.org/repos/asf/james-project/blob/5d70b940/server/protocols/webadmin/webadmin-data/src/test/java/org/apache/james/webadmin/routes/DomainMappingsRoutesTest.java
----------------------------------------------------------------------
diff --git a/server/protocols/webadmin/webadmin-data/src/test/java/org/apache/james/webadmin/routes/DomainMappingsRoutesTest.java b/server/protocols/webadmin/webadmin-data/src/test/java/org/apache/james/webadmin/routes/DomainMappingsRoutesTest.java
index b41c1ba..0d36762 100644
--- a/server/protocols/webadmin/webadmin-data/src/test/java/org/apache/james/webadmin/routes/DomainMappingsRoutesTest.java
+++ b/server/protocols/webadmin/webadmin-data/src/test/java/org/apache/james/webadmin/routes/DomainMappingsRoutesTest.java
@@ -23,6 +23,7 @@ import static com.jayway.restassured.RestAssured.delete;
import static com.jayway.restassured.RestAssured.given;
import static com.jayway.restassured.RestAssured.put;
import static com.jayway.restassured.RestAssured.when;
+import static com.jayway.restassured.RestAssured.with;
import static org.apache.james.webadmin.WebAdminServer.NO_CONFIGURATION;
import static org.assertj.core.api.Assertions.assertThat;
import static org.assertj.core.api.Assertions.entry;
@@ -106,6 +107,21 @@ class DomainMappingsRoutesTest {
}
@Test
+ void addDomainMappingShouldBeIdempotent() {
+ with()
+ .body("to.com")
+ .put("from.com");
+
+ given()
+ .body("to.com")
+ .when()
+ .put("from.com")
+ .then()
+ .statusCode(HttpStatus.NO_CONTENT_204)
+ .body(isEmptyString());
+ }
+
+ @Test
void getDomainMappingsShouldReturnAllDomainMappings() throws RecipientRewriteTableException {
String alias1 = "to_1.com";
String alias2 = "to_2.com";
http://git-wip-us.apache.org/repos/asf/james-project/blob/5d70b940/server/protocols/webadmin/webadmin-data/src/test/java/org/apache/james/webadmin/routes/ForwardRoutesTest.java
----------------------------------------------------------------------
diff --git a/server/protocols/webadmin/webadmin-data/src/test/java/org/apache/james/webadmin/routes/ForwardRoutesTest.java b/server/protocols/webadmin/webadmin-data/src/test/java/org/apache/james/webadmin/routes/ForwardRoutesTest.java
index 27fc7ab..89d9ded 100644
--- a/server/protocols/webadmin/webadmin-data/src/test/java/org/apache/james/webadmin/routes/ForwardRoutesTest.java
+++ b/server/protocols/webadmin/webadmin-data/src/test/java/org/apache/james/webadmin/routes/ForwardRoutesTest.java
@@ -19,6 +19,7 @@
package org.apache.james.webadmin.routes;
+import static com.jayway.restassured.RestAssured.given;
import static com.jayway.restassured.RestAssured.when;
import static com.jayway.restassured.RestAssured.with;
import static org.apache.james.webadmin.Constants.SEPARATOR;
@@ -173,19 +174,30 @@ class ForwardRoutesTest {
}
@Test
- void putUserInForwardShouldReturnCreated() {
+ void putUserInForwardShouldReturnNoContent() {
when()
.put(ALICE + SEPARATOR + "targets" + SEPARATOR + BOB)
.then()
- .statusCode(HttpStatus.CREATED_201);
+ .statusCode(HttpStatus.NO_CONTENT_204);
}
@Test
- void putUserWithSlashInForwardShouldReturnCreated() {
+ void putUserShouldBeIdempotent() {
+ given()
+ .put(ALICE + SEPARATOR + "targets" + SEPARATOR + BOB);
+
+ when()
+ .put(ALICE + SEPARATOR + "targets" + SEPARATOR + BOB)
+ .then()
+ .statusCode(HttpStatus.NO_CONTENT_204);
+ }
+
+ @Test
+ void putUserWithSlashInForwardShouldReturnNoContent() {
when()
.put(BOB + SEPARATOR + "targets" + SEPARATOR + ALICE_WITH_ENCODED_SLASH)
.then()
- .statusCode(HttpStatus.CREATED_201);
+ .statusCode(HttpStatus.NO_CONTENT_204);
}
@Test
@@ -215,11 +227,11 @@ class ForwardRoutesTest {
}
@Test
- void putUserInForwardWithEncodedSlashShouldReturnCreated() {
+ void putUserInForwardWithEncodedSlashShouldReturnNoContent() {
when()
.put(ALICE_WITH_ENCODED_SLASH + SEPARATOR + "targets" + SEPARATOR + BOB)
.then()
- .statusCode(HttpStatus.CREATED_201);
+ .statusCode(HttpStatus.NO_CONTENT_204);
}
@Test
@@ -337,7 +349,7 @@ class ForwardRoutesTest {
when()
.delete(ALICE + SEPARATOR + "targets" + SEPARATOR + BOB)
.then()
- .statusCode(HttpStatus.OK_200);
+ .statusCode(HttpStatus.NO_CONTENT_204);
}
@Test
http://git-wip-us.apache.org/repos/asf/james-project/blob/5d70b940/server/protocols/webadmin/webadmin-data/src/test/java/org/apache/james/webadmin/routes/GroupsRoutesTest.java
----------------------------------------------------------------------
diff --git a/server/protocols/webadmin/webadmin-data/src/test/java/org/apache/james/webadmin/routes/GroupsRoutesTest.java b/server/protocols/webadmin/webadmin-data/src/test/java/org/apache/james/webadmin/routes/GroupsRoutesTest.java
index 61fb855..5da0d8c 100644
--- a/server/protocols/webadmin/webadmin-data/src/test/java/org/apache/james/webadmin/routes/GroupsRoutesTest.java
+++ b/server/protocols/webadmin/webadmin-data/src/test/java/org/apache/james/webadmin/routes/GroupsRoutesTest.java
@@ -21,6 +21,7 @@ package org.apache.james.webadmin.routes;
import static com.jayway.restassured.RestAssured.given;
import static com.jayway.restassured.RestAssured.when;
+import static com.jayway.restassured.RestAssured.with;
import static org.apache.james.webadmin.Constants.SEPARATOR;
import static org.apache.james.webadmin.WebAdminServer.NO_CONFIGURATION;
import static org.assertj.core.api.Assertions.assertThat;
@@ -141,6 +142,17 @@ class GroupsRoutesTest {
}
@Test
+ void putShouldBeIdempotent() {
+ with()
+ .put(GROUP1 + SEPARATOR + USER_A);
+
+ given()
+ .put(GROUP1 + SEPARATOR + USER_A)
+ .then()
+ .statusCode(HttpStatus.NO_CONTENT_204);
+ }
+
+ @Test
void getNotRegisteredGroupShouldReturnNotFound() {
Map<String, Object> errors = when()
.get("unknown@domain.travel")
@@ -159,19 +171,19 @@ class GroupsRoutesTest {
}
@Test
- void putUserInGroupShouldReturnCreated() {
+ void putUserInGroupShouldReturnNoContent() {
when()
.put(GROUP1 + SEPARATOR + USER_A)
.then()
- .statusCode(HttpStatus.CREATED_201);
+ .statusCode(HttpStatus.NO_CONTENT_204);
}
@Test
- void putUserWithSlashInGroupShouldReturnCreated() {
+ void putUserWithSlashInGroupShouldReturnNoContent() {
when()
.put(GROUP1 + SEPARATOR + USER_WITH_ENCODED_SLASH)
.then()
- .statusCode(HttpStatus.CREATED_201);
+ .statusCode(HttpStatus.NO_CONTENT_204);
}
@Test
@@ -211,11 +223,11 @@ class GroupsRoutesTest {
}
@Test
- void putUserInGroupWithEncodedSlashShouldReturnCreated() {
+ void putUserInGroupWithEncodedSlashShouldReturnNoContent() {
when()
.put(GROUP_WITH_ENCODED_SLASH + SEPARATOR + USER_A)
.then()
- .statusCode(HttpStatus.CREATED_201);
+ .statusCode(HttpStatus.NO_CONTENT_204);
}
@Test
@@ -344,7 +356,7 @@ class GroupsRoutesTest {
when()
.delete(GROUP1 + SEPARATOR + USER_A)
.then()
- .statusCode(HttpStatus.OK_200);
+ .statusCode(HttpStatus.NO_CONTENT_204);
}
@Test
http://git-wip-us.apache.org/repos/asf/james-project/blob/5d70b940/src/site/markdown/server/manage-webadmin.md
----------------------------------------------------------------------
diff --git a/src/site/markdown/server/manage-webadmin.md b/src/site/markdown/server/manage-webadmin.md
index a161a97..8600ae5 100644
--- a/src/site/markdown/server/manage-webadmin.md
+++ b/src/site/markdown/server/manage-webadmin.md
@@ -1100,7 +1100,7 @@ Will add member@domain.com to group@domain.com, creating the group if needed
Response codes:
- - 200: Success
+ - 204: Success
- 400: Group structure or member is not valid
- 403: Server does not own the requested domain
- 409: Requested group address is already used for another purpose
@@ -1115,7 +1115,7 @@ Will remove member@domain.com from group@domain.com, removing the group if group
Response codes:
- - 200: Success
+ - 204: Success
- 400: Group structure or member is not valid
## Creating address forwards
@@ -1187,7 +1187,7 @@ Will add destination@domain.com to user@domain.com, creating the forward if need
Response codes:
- - 200: Success
+ - 204: Success
- 400: Forward structure or member is not valid
- 403: Server does not own the requested domain
- 404: Requested forward address does not match an existing user
@@ -1202,7 +1202,7 @@ Will remove destination@domain.com from user@domain.com, removing the forward if
Response codes:
- - 200: Success
+ - 204: Success
- 400: Forward structure or member is not valid
## Administrating mail repositories
---------------------------------------------------------------------
To unsubscribe, e-mail: server-dev-unsubscribe@james.apache.org
For additional commands, e-mail: server-dev-help@james.apache.org
[4/7] james-project git commit: JAMES-2446 Avoid double creation
trial in tests
Posted by bt...@apache.org.
JAMES-2446 Avoid double creation trial in tests
Project: http://git-wip-us.apache.org/repos/asf/james-project/repo
Commit: http://git-wip-us.apache.org/repos/asf/james-project/commit/7a9a514e
Tree: http://git-wip-us.apache.org/repos/asf/james-project/tree/7a9a514e
Diff: http://git-wip-us.apache.org/repos/asf/james-project/diff/7a9a514e
Branch: refs/heads/master
Commit: 7a9a514ed21da2823f2d751e0ef827ea111ffbea
Parents: b7e2dae
Author: benwa <bt...@linagora.com>
Authored: Fri Jun 29 17:51:14 2018 +0700
Committer: benwa <bt...@linagora.com>
Committed: Tue Jul 3 15:50:45 2018 +0700
----------------------------------------------------------------------
.../cassandra/init/SessionWithInitializedTablesFactory.java | 2 +-
.../org/apache/james/backends/cassandra/CassandraCluster.java | 4 +++-
2 files changed, 4 insertions(+), 2 deletions(-)
----------------------------------------------------------------------
http://git-wip-us.apache.org/repos/asf/james-project/blob/7a9a514e/backends-common/cassandra/src/main/java/org/apache/james/backends/cassandra/init/SessionWithInitializedTablesFactory.java
----------------------------------------------------------------------
diff --git a/backends-common/cassandra/src/main/java/org/apache/james/backends/cassandra/init/SessionWithInitializedTablesFactory.java b/backends-common/cassandra/src/main/java/org/apache/james/backends/cassandra/init/SessionWithInitializedTablesFactory.java
index ebfd70b..d87b41b 100644
--- a/backends-common/cassandra/src/main/java/org/apache/james/backends/cassandra/init/SessionWithInitializedTablesFactory.java
+++ b/backends-common/cassandra/src/main/java/org/apache/james/backends/cassandra/init/SessionWithInitializedTablesFactory.java
@@ -41,7 +41,7 @@ public class SessionWithInitializedTablesFactory implements Provider<Session> {
this.session = createSession(cluster, clusterConfiguration.getKeyspace());
}
- public Session createSession(Cluster cluster, String keyspace) {
+ private Session createSession(Cluster cluster, String keyspace) {
Session session = cluster.connect(keyspace);
try {
new CassandraTypesCreator(module, session)
http://git-wip-us.apache.org/repos/asf/james-project/blob/7a9a514e/backends-common/cassandra/src/test/java/org/apache/james/backends/cassandra/CassandraCluster.java
----------------------------------------------------------------------
diff --git a/backends-common/cassandra/src/test/java/org/apache/james/backends/cassandra/CassandraCluster.java b/backends-common/cassandra/src/test/java/org/apache/james/backends/cassandra/CassandraCluster.java
index 8e20b52..cc885ef 100644
--- a/backends-common/cassandra/src/test/java/org/apache/james/backends/cassandra/CassandraCluster.java
+++ b/backends-common/cassandra/src/test/java/org/apache/james/backends/cassandra/CassandraCluster.java
@@ -93,7 +93,9 @@ public final class CassandraCluster implements AutoCloseable {
.replicationFactor(REPLICATION_FACTOR)
.disableDurableWrites()
.clusterWithInitializedKeyspace();
- return Optional.of(new SessionWithInitializedTablesFactory(clusterConfiguration, clusterWithInitializedKeyspace, module).createSession(clusterWithInitializedKeyspace, keyspace));
+
+ return Optional.of(new SessionWithInitializedTablesFactory(clusterConfiguration, clusterWithInitializedKeyspace, module)
+ .get());
} catch (NoHostAvailableException exception) {
sleep(SLEEP_BEFORE_RETRY);
return Optional.empty();
---------------------------------------------------------------------
To unsubscribe, e-mail: server-dev-unsubscribe@james.apache.org
For additional commands, e-mail: server-dev-help@james.apache.org
[3/7] james-project git commit: JAMES-2446 Disable assertions (modest
performance benefit)
Posted by bt...@apache.org.
JAMES-2446 Disable assertions (modest performance benefit)
Project: http://git-wip-us.apache.org/repos/asf/james-project/repo
Commit: http://git-wip-us.apache.org/repos/asf/james-project/commit/dbb6039c
Tree: http://git-wip-us.apache.org/repos/asf/james-project/tree/dbb6039c
Diff: http://git-wip-us.apache.org/repos/asf/james-project/diff/dbb6039c
Branch: refs/heads/master
Commit: dbb6039c0f41b181063ccaee22dcd1d0e286c81e
Parents: 5d70b94
Author: Antoine Duprat <ad...@linagora.com>
Authored: Tue Jun 26 12:01:57 2018 +0200
Committer: benwa <bt...@linagora.com>
Committed: Tue Jul 3 15:50:37 2018 +0700
----------------------------------------------------------------------
.../org/apache/james/backends/cassandra/DockerCassandraRule.java | 2 ++
1 file changed, 2 insertions(+)
----------------------------------------------------------------------
http://git-wip-us.apache.org/repos/asf/james-project/blob/dbb6039c/backends-common/cassandra/src/test/java/org/apache/james/backends/cassandra/DockerCassandraRule.java
----------------------------------------------------------------------
diff --git a/backends-common/cassandra/src/test/java/org/apache/james/backends/cassandra/DockerCassandraRule.java b/backends-common/cassandra/src/test/java/org/apache/james/backends/cassandra/DockerCassandraRule.java
index a612e86..5a8ea95 100644
--- a/backends-common/cassandra/src/test/java/org/apache/james/backends/cassandra/DockerCassandraRule.java
+++ b/backends-common/cassandra/src/test/java/org/apache/james/backends/cassandra/DockerCassandraRule.java
@@ -86,6 +86,8 @@ public class DockerCassandraRule implements TestRule {
.run("echo auto_bootstrap: false >> " + CASSANDRA_YAML)
.run("echo \"-Xms1500M\" >> " + JVM_OPTIONS)
.run("echo \"-Xmx1500M\" >> " + JVM_OPTIONS)
+ // disable assertions (modest performance benefit)
+ .run("sed -i -e 's/JVM_OPTS=\"$JVM_OPTS -ea\"/JVM_OPTS=\"$JVM_OPTS -da\"/' " + CASSANDRA_ENV)
.build()))
.withCreateContainerCmdModifier(cmd -> cmd.getHostConfig().withBinds(new Binds(new Bind(tmpFsName, new Volume("/var/lib/cassandra")))))
.withCreateContainerCmdModifier(cmd -> cmd.withMemory(2000 * 1024 * 1024L))
---------------------------------------------------------------------
To unsubscribe, e-mail: server-dev-unsubscribe@james.apache.org
For additional commands, e-mail: server-dev-help@james.apache.org
[6/7] james-project git commit: JAMES-2446 Avoid instanciating
several time mapperFactory
Posted by bt...@apache.org.
JAMES-2446 Avoid instanciating several time mapperFactory
It leads to preparing several time Cassandra queries
Project: http://git-wip-us.apache.org/repos/asf/james-project/repo
Commit: http://git-wip-us.apache.org/repos/asf/james-project/commit/8992243e
Tree: http://git-wip-us.apache.org/repos/asf/james-project/tree/8992243e
Diff: http://git-wip-us.apache.org/repos/asf/james-project/diff/8992243e
Branch: refs/heads/master
Commit: 8992243e9f554e931ca6215d98490ab54683c952
Parents: 5a65aff
Author: benwa <bt...@linagora.com>
Authored: Sat Jun 30 19:52:01 2018 +0700
Committer: benwa <bt...@linagora.com>
Committed: Tue Jul 3 15:50:45 2018 +0700
----------------------------------------------------------------------
.../cassandra/mail/CassandraMapperProvider.java | 17 +++++++++--------
1 file changed, 9 insertions(+), 8 deletions(-)
----------------------------------------------------------------------
http://git-wip-us.apache.org/repos/asf/james-project/blob/8992243e/mailbox/cassandra/src/test/java/org/apache/james/mailbox/cassandra/mail/CassandraMapperProvider.java
----------------------------------------------------------------------
diff --git a/mailbox/cassandra/src/test/java/org/apache/james/mailbox/cassandra/mail/CassandraMapperProvider.java b/mailbox/cassandra/src/test/java/org/apache/james/mailbox/cassandra/mail/CassandraMapperProvider.java
index f8b772b..968d72d 100644
--- a/mailbox/cassandra/src/test/java/org/apache/james/mailbox/cassandra/mail/CassandraMapperProvider.java
+++ b/mailbox/cassandra/src/test/java/org/apache/james/mailbox/cassandra/mail/CassandraMapperProvider.java
@@ -50,12 +50,13 @@ public class CassandraMapperProvider implements MapperProvider {
private final MessageUidProvider messageUidProvider;
private final CassandraModSeqProvider cassandraModSeqProvider;
private final MockMailboxSession mailboxSession = new MockMailboxSession("benwa");
-
+ private CassandraMailboxSessionMapperFactory mapperFactory;
public CassandraMapperProvider(CassandraCluster cassandra) {
this.cassandra = cassandra;
messageUidProvider = new MessageUidProvider();
cassandraModSeqProvider = new CassandraModSeqProvider(this.cassandra.getConf());
+ mapperFactory = createMapperFactory();
}
@Override
@@ -65,17 +66,17 @@ public class CassandraMapperProvider implements MapperProvider {
@Override
public MailboxMapper createMailboxMapper() throws MailboxException {
- return createMapperFactory().getMailboxMapper(mailboxSession);
+ return mapperFactory.getMailboxMapper(mailboxSession);
}
@Override
public MessageMapper createMessageMapper() throws MailboxException {
- return createMapperFactory().getMessageMapper(mailboxSession);
+ return mapperFactory.getMessageMapper(mailboxSession);
}
@Override
public MessageIdMapper createMessageIdMapper() throws MailboxException {
- return createMapperFactory().getMessageIdMapper(mailboxSession);
+ return mapperFactory.getMessageIdMapper(mailboxSession);
}
private CassandraMailboxSessionMapperFactory createMapperFactory() {
@@ -85,8 +86,8 @@ public class CassandraMapperProvider implements MapperProvider {
}
@Override
- public AttachmentMapper createAttachmentMapper() throws MailboxException {
- return createMapperFactory().createAttachmentMapper(mailboxSession);
+ public AttachmentMapper createAttachmentMapper() {
+ return mapperFactory.createAttachmentMapper(mailboxSession);
}
@Override
@@ -95,7 +96,7 @@ public class CassandraMapperProvider implements MapperProvider {
}
@Override
- public void clearMapper() throws MailboxException {
+ public void clearMapper() {
cassandra.close();
}
@@ -106,7 +107,7 @@ public class CassandraMapperProvider implements MapperProvider {
@Override
public AnnotationMapper createAnnotationMapper() throws MailboxException {
- return createMapperFactory().getAnnotationMapper(mailboxSession);
+ return mapperFactory.getAnnotationMapper(mailboxSession);
}
@Override
---------------------------------------------------------------------
To unsubscribe, e-mail: server-dev-unsubscribe@james.apache.org
For additional commands, e-mail: server-dev-help@james.apache.org
[7/7] james-project git commit: JAMES-2446 Avoid reading several time
Keyspace metadata
Posted by bt...@apache.org.
JAMES-2446 Avoid reading several time Keyspace metadata
Project: http://git-wip-us.apache.org/repos/asf/james-project/repo
Commit: http://git-wip-us.apache.org/repos/asf/james-project/commit/b7e2dae1
Tree: http://git-wip-us.apache.org/repos/asf/james-project/tree/b7e2dae1
Diff: http://git-wip-us.apache.org/repos/asf/james-project/diff/b7e2dae1
Branch: refs/heads/master
Commit: b7e2dae16899d4959f37966fd0e5ca33f9687353
Parents: 9ac970d
Author: benwa <bt...@linagora.com>
Authored: Fri Jun 29 17:50:15 2018 +0700
Committer: benwa <bt...@linagora.com>
Committed: Tue Jul 3 15:50:45 2018 +0700
----------------------------------------------------------------------
.../cassandra/init/CassandraTypesProvider.java | 14 ++++++--------
1 file changed, 6 insertions(+), 8 deletions(-)
----------------------------------------------------------------------
http://git-wip-us.apache.org/repos/asf/james-project/blob/b7e2dae1/backends-common/cassandra/src/main/java/org/apache/james/backends/cassandra/init/CassandraTypesProvider.java
----------------------------------------------------------------------
diff --git a/backends-common/cassandra/src/main/java/org/apache/james/backends/cassandra/init/CassandraTypesProvider.java b/backends-common/cassandra/src/main/java/org/apache/james/backends/cassandra/init/CassandraTypesProvider.java
index 356c7ac..3600f0d 100644
--- a/backends-common/cassandra/src/main/java/org/apache/james/backends/cassandra/init/CassandraTypesProvider.java
+++ b/backends-common/cassandra/src/main/java/org/apache/james/backends/cassandra/init/CassandraTypesProvider.java
@@ -26,6 +26,7 @@ import javax.inject.Inject;
import org.apache.james.backends.cassandra.components.CassandraModule;
import org.apache.james.backends.cassandra.components.CassandraType;
+import com.datastax.driver.core.KeyspaceMetadata;
import com.datastax.driver.core.Session;
import com.datastax.driver.core.UserType;
import com.github.steveash.guavate.Guavate;
@@ -36,18 +37,15 @@ public class CassandraTypesProvider {
@Inject
public CassandraTypesProvider(CassandraModule module, Session session) {
+ KeyspaceMetadata keyspaceMetadata = session.getCluster()
+ .getMetadata()
+ .getKeyspace(session.getLoggedKeyspace());
+
userTypes = module.moduleTypes()
.stream()
.collect(Guavate.toImmutableMap(
CassandraType::getName,
- type -> getSessionType(session, type)));
- }
-
- private UserType getSessionType(Session session, CassandraType type) {
- return session.getCluster()
- .getMetadata()
- .getKeyspace(session.getLoggedKeyspace())
- .getUserType(type.getName());
+ type -> keyspaceMetadata.getUserType(type.getName())));
}
public UserType getDefinedUserType(String typeName) {
---------------------------------------------------------------------
To unsubscribe, e-mail: server-dev-unsubscribe@james.apache.org
For additional commands, e-mail: server-dev-help@james.apache.org
[5/7] james-project git commit: JAMES-2446 CassandraCluster wait
interval should be smaller
Posted by bt...@apache.org.
JAMES-2446 CassandraCluster wait interval should be smaller
Keep waiting period the same
Project: http://git-wip-us.apache.org/repos/asf/james-project/repo
Commit: http://git-wip-us.apache.org/repos/asf/james-project/commit/5a65aff0
Tree: http://git-wip-us.apache.org/repos/asf/james-project/tree/5a65aff0
Diff: http://git-wip-us.apache.org/repos/asf/james-project/diff/5a65aff0
Branch: refs/heads/master
Commit: 5a65aff0f33edb58813b681127cd388ab7578db5
Parents: 7a9a514
Author: benwa <bt...@linagora.com>
Authored: Fri Jun 29 17:52:45 2018 +0700
Committer: benwa <bt...@linagora.com>
Committed: Tue Jul 3 15:50:45 2018 +0700
----------------------------------------------------------------------
.../org/apache/james/backends/cassandra/CassandraCluster.java | 4 ++--
1 file changed, 2 insertions(+), 2 deletions(-)
----------------------------------------------------------------------
http://git-wip-us.apache.org/repos/asf/james-project/blob/5a65aff0/backends-common/cassandra/src/test/java/org/apache/james/backends/cassandra/CassandraCluster.java
----------------------------------------------------------------------
diff --git a/backends-common/cassandra/src/test/java/org/apache/james/backends/cassandra/CassandraCluster.java b/backends-common/cassandra/src/test/java/org/apache/james/backends/cassandra/CassandraCluster.java
index cc885ef..8e9df5b 100644
--- a/backends-common/cassandra/src/test/java/org/apache/james/backends/cassandra/CassandraCluster.java
+++ b/backends-common/cassandra/src/test/java/org/apache/james/backends/cassandra/CassandraCluster.java
@@ -41,8 +41,8 @@ public final class CassandraCluster implements AutoCloseable {
private static final int REPLICATION_FACTOR = 1;
- private static final long SLEEP_BEFORE_RETRY = 200;
- private static final int MAX_RETRY = 2000;
+ private static final long SLEEP_BEFORE_RETRY = 20;
+ private static final int MAX_RETRY = 20000;
private final CassandraModule module;
private Session session;
---------------------------------------------------------------------
To unsubscribe, e-mail: server-dev-unsubscribe@james.apache.org
For additional commands, e-mail: server-dev-help@james.apache.org
[2/7] james-project git commit: JAMES-2446 Use caches for keys & rows
Posted by bt...@apache.org.
JAMES-2446 Use caches for keys & rows
Project: http://git-wip-us.apache.org/repos/asf/james-project/repo
Commit: http://git-wip-us.apache.org/repos/asf/james-project/commit/9ac970d8
Tree: http://git-wip-us.apache.org/repos/asf/james-project/tree/9ac970d8
Diff: http://git-wip-us.apache.org/repos/asf/james-project/diff/9ac970d8
Branch: refs/heads/master
Commit: 9ac970d85b0ec1d0be841dd9ebd45fb90497bdd2
Parents: dbb6039
Author: Antoine Duprat <ad...@linagora.com>
Authored: Tue Jun 26 12:02:12 2018 +0200
Committer: benwa <bt...@linagora.com>
Committed: Tue Jul 3 15:50:37 2018 +0700
----------------------------------------------------------------------
.../org/apache/james/backends/cassandra/DockerCassandraRule.java | 3 +++
1 file changed, 3 insertions(+)
----------------------------------------------------------------------
http://git-wip-us.apache.org/repos/asf/james-project/blob/9ac970d8/backends-common/cassandra/src/test/java/org/apache/james/backends/cassandra/DockerCassandraRule.java
----------------------------------------------------------------------
diff --git a/backends-common/cassandra/src/test/java/org/apache/james/backends/cassandra/DockerCassandraRule.java b/backends-common/cassandra/src/test/java/org/apache/james/backends/cassandra/DockerCassandraRule.java
index 5a8ea95..38ca0eb 100644
--- a/backends-common/cassandra/src/test/java/org/apache/james/backends/cassandra/DockerCassandraRule.java
+++ b/backends-common/cassandra/src/test/java/org/apache/james/backends/cassandra/DockerCassandraRule.java
@@ -88,6 +88,9 @@ public class DockerCassandraRule implements TestRule {
.run("echo \"-Xmx1500M\" >> " + JVM_OPTIONS)
// disable assertions (modest performance benefit)
.run("sed -i -e 's/JVM_OPTS=\"$JVM_OPTS -ea\"/JVM_OPTS=\"$JVM_OPTS -da\"/' " + CASSANDRA_ENV)
+ // use caches for keys & rows
+ .run("sed -i -e \"s/key_cache_size_in_mb:/key_cache_size_in_mb: 256/\" " + CASSANDRA_YAML)
+ .run("sed -i -e \"s/row_cache_size_in_mb: 0/row_cache_size_in_mb: 512/\" " + CASSANDRA_YAML)
.build()))
.withCreateContainerCmdModifier(cmd -> cmd.getHostConfig().withBinds(new Binds(new Bind(tmpFsName, new Volume("/var/lib/cassandra")))))
.withCreateContainerCmdModifier(cmd -> cmd.withMemory(2000 * 1024 * 1024L))
---------------------------------------------------------------------
To unsubscribe, e-mail: server-dev-unsubscribe@james.apache.org
For additional commands, e-mail: server-dev-help@james.apache.org