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 2019/01/23 10:41:29 UTC
[13/13] james-project git commit: JAMES-2648 cassandra list sources
support implementation
JAMES-2648 cassandra list sources support implementation
Project: http://git-wip-us.apache.org/repos/asf/james-project/repo
Commit: http://git-wip-us.apache.org/repos/asf/james-project/commit/9799f43a
Tree: http://git-wip-us.apache.org/repos/asf/james-project/tree/9799f43a
Diff: http://git-wip-us.apache.org/repos/asf/james-project/diff/9799f43a
Branch: refs/heads/master
Commit: 9799f43a896474ee0caea82a8573b1a2ed6133c4
Parents: 2160369
Author: Rene Cordier <rc...@linagora.com>
Authored: Tue Jan 22 17:18:58 2019 +0700
Committer: Benoit Tellier <bt...@linagora.com>
Committed: Wed Jan 23 17:40:41 2019 +0700
----------------------------------------------------------------------
.../james/rrt/api/RecipientRewriteTable.java | 7 +-
.../CassandraRecipientRewriteTable.java | 30 ++++++-
.../CassandraRecipientRewriteTableTest.java | 71 ----------------
.../CassandraRecipientRewriteTableV6Test.java | 89 ++++++++++++++++++++
.../CassandraRecipientRewriteTableV7Test.java | 89 ++++++++++++++++++++
.../james/rrt/cassandra/CassandraStepdefs.java | 10 ++-
.../james/webadmin/routes/AliasRoutes.java | 1 -
7 files changed, 217 insertions(+), 80 deletions(-)
----------------------------------------------------------------------
http://git-wip-us.apache.org/repos/asf/james-project/blob/9799f43a/server/data/data-api/src/main/java/org/apache/james/rrt/api/RecipientRewriteTable.java
----------------------------------------------------------------------
diff --git a/server/data/data-api/src/main/java/org/apache/james/rrt/api/RecipientRewriteTable.java b/server/data/data-api/src/main/java/org/apache/james/rrt/api/RecipientRewriteTable.java
index ec0b363..1f067c5 100644
--- a/server/data/data-api/src/main/java/org/apache/james/rrt/api/RecipientRewriteTable.java
+++ b/server/data/data-api/src/main/java/org/apache/james/rrt/api/RecipientRewriteTable.java
@@ -20,7 +20,6 @@ package org.apache.james.rrt.api;
import java.util.Comparator;
import java.util.EnumSet;
-import java.util.List;
import java.util.Map;
import java.util.stream.Stream;
@@ -30,7 +29,6 @@ import org.apache.james.rrt.lib.MappingSource;
import org.apache.james.rrt.lib.Mappings;
import org.apache.james.rrt.lib.MappingsImpl;
-import com.github.steveash.guavate.Guavate;
import com.google.common.base.Preconditions;
import com.google.common.collect.ImmutableSet;
@@ -115,15 +113,14 @@ public interface RecipientRewriteTable {
*/
Map<MappingSource, Mappings> getAllMappings() throws RecipientRewriteTableException;
- default List<MappingSource> listSources(Mapping mapping) throws RecipientRewriteTableException {
+ default Stream<MappingSource> listSources(Mapping mapping) throws RecipientRewriteTableException {
Preconditions.checkArgument(listSourcesSupportedType.contains(mapping.getType()),
String.format("Not supported mapping of type %s", mapping.getType()));
return getAllMappings()
.entrySet().stream()
.filter(entry -> entry.getValue().contains(mapping))
- .map(Map.Entry::getKey)
- .collect(Guavate.toImmutableList());
+ .map(Map.Entry::getKey);
}
default Stream<MappingSource> getSourcesForType(Mapping.Type type) throws RecipientRewriteTableException {
http://git-wip-us.apache.org/repos/asf/james-project/blob/9799f43a/server/data/data-cassandra/src/main/java/org/apache/james/rrt/cassandra/CassandraRecipientRewriteTable.java
----------------------------------------------------------------------
diff --git a/server/data/data-cassandra/src/main/java/org/apache/james/rrt/cassandra/CassandraRecipientRewriteTable.java b/server/data/data-cassandra/src/main/java/org/apache/james/rrt/cassandra/CassandraRecipientRewriteTable.java
index 0a51ec1..bcd7283 100644
--- a/server/data/data-cassandra/src/main/java/org/apache/james/rrt/cassandra/CassandraRecipientRewriteTable.java
+++ b/server/data/data-cassandra/src/main/java/org/apache/james/rrt/cassandra/CassandraRecipientRewriteTable.java
@@ -19,10 +19,15 @@
package org.apache.james.rrt.cassandra;
import java.util.Map;
+import java.util.stream.Stream;
import javax.inject.Inject;
+import org.apache.james.backends.cassandra.versions.CassandraSchemaVersionDAO;
+import org.apache.james.backends.cassandra.versions.CassandraSchemaVersionManager;
+import org.apache.james.backends.cassandra.versions.SchemaVersion;
import org.apache.james.core.Domain;
+import org.apache.james.rrt.api.RecipientRewriteTableException;
import org.apache.james.rrt.lib.AbstractRecipientRewriteTable;
import org.apache.james.rrt.lib.Mapping;
import org.apache.james.rrt.lib.MappingSource;
@@ -31,15 +36,22 @@ import org.apache.james.rrt.lib.MappingsImpl;
import org.apache.james.util.OptionalUtils;
import com.github.steveash.guavate.Guavate;
+import com.google.common.base.Preconditions;
public class CassandraRecipientRewriteTable extends AbstractRecipientRewriteTable {
+ private static final SchemaVersion MAPPINGS_SOURCES_SUPPORTED_VERSION = new SchemaVersion(7);
+
private final CassandraRecipientRewriteTableDAO cassandraRecipientRewriteTableDAO;
private final CassandraMappingsSourcesDAO cassandraMappingsSourcesDAO;
+ private final CassandraSchemaVersionDAO cassandraSchemaVersionDAO;
@Inject
- public CassandraRecipientRewriteTable(CassandraRecipientRewriteTableDAO cassandraRecipientRewriteTableDAO, CassandraMappingsSourcesDAO cassandraMappingsSourcesDAO) {
+ public CassandraRecipientRewriteTable(CassandraRecipientRewriteTableDAO cassandraRecipientRewriteTableDAO,
+ CassandraMappingsSourcesDAO cassandraMappingsSourcesDAO,
+ CassandraSchemaVersionDAO cassandraSchemaVersionDAO) {
this.cassandraRecipientRewriteTableDAO = cassandraRecipientRewriteTableDAO;
this.cassandraMappingsSourcesDAO = cassandraMappingsSourcesDAO;
+ this.cassandraSchemaVersionDAO = cassandraSchemaVersionDAO;
}
@Override
@@ -80,4 +92,20 @@ public class CassandraRecipientRewriteTable extends AbstractRecipientRewriteTabl
() -> cassandraRecipientRewriteTableDAO.retrieveMappings(MappingSource.fromDomain(domain)).blockOptional())
.orElse(MappingsImpl.empty());
}
+
+ @Override
+ public Stream<MappingSource> listSources(Mapping mapping) throws RecipientRewriteTableException {
+ Preconditions.checkArgument(listSourcesSupportedType.contains(mapping.getType()),
+ String.format("Not supported mapping of type %s", mapping.getType()));
+
+ SchemaVersion schemaVersion = cassandraSchemaVersionDAO.getCurrentSchemaVersion()
+ .join()
+ .orElse(CassandraSchemaVersionManager.MIN_VERSION);
+
+ if (schemaVersion.isBefore(MAPPINGS_SOURCES_SUPPORTED_VERSION)) {
+ return super.listSources(mapping);
+ }
+
+ return cassandraMappingsSourcesDAO.retrieveSources(mapping).toStream();
+ }
}
http://git-wip-us.apache.org/repos/asf/james-project/blob/9799f43a/server/data/data-cassandra/src/test/java/org/apache/james/rrt/cassandra/CassandraRecipientRewriteTableTest.java
----------------------------------------------------------------------
diff --git a/server/data/data-cassandra/src/test/java/org/apache/james/rrt/cassandra/CassandraRecipientRewriteTableTest.java b/server/data/data-cassandra/src/test/java/org/apache/james/rrt/cassandra/CassandraRecipientRewriteTableTest.java
deleted file mode 100644
index f9d27a1..0000000
--- a/server/data/data-cassandra/src/test/java/org/apache/james/rrt/cassandra/CassandraRecipientRewriteTableTest.java
+++ /dev/null
@@ -1,71 +0,0 @@
-/****************************************************************
- * 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.cassandra;
-
-import org.apache.commons.configuration.DefaultConfigurationBuilder;
-import org.apache.james.backends.cassandra.CassandraCluster;
-import org.apache.james.backends.cassandra.DockerCassandraRule;
-import org.apache.james.backends.cassandra.utils.CassandraUtils;
-import org.apache.james.rrt.lib.AbstractRecipientRewriteTable;
-import org.apache.james.rrt.lib.AbstractRecipientRewriteTableTest;
-import org.junit.After;
-import org.junit.AfterClass;
-import org.junit.Before;
-import org.junit.BeforeClass;
-import org.junit.ClassRule;
-
-public class CassandraRecipientRewriteTableTest extends AbstractRecipientRewriteTableTest {
-
- @ClassRule public static DockerCassandraRule cassandraServer = new DockerCassandraRule();
-
- private static CassandraCluster cassandra;
-
- @BeforeClass
- public static void setUpClass() {
- cassandra = CassandraCluster.create(CassandraRRTModule.MODULE, cassandraServer.getHost());
- }
-
- @Override
- @Before
- public void setUp() throws Exception {
- super.setUp();
- }
-
- @Override
- @After
- public void tearDown() throws Exception {
- super.tearDown();
- cassandra.clearTables();
- }
-
- @AfterClass
- public static void tearDownClass() {
- cassandra.closeCluster();
- }
-
- @Override
- protected AbstractRecipientRewriteTable getRecipientRewriteTable() throws Exception {
- CassandraRecipientRewriteTable rrt = new CassandraRecipientRewriteTable(
- new CassandraRecipientRewriteTableDAO(cassandra.getConf(), CassandraUtils.WITH_DEFAULT_CONFIGURATION),
- new CassandraMappingsSourcesDAO(cassandra.getConf()));
- rrt.configure(new DefaultConfigurationBuilder());
- return rrt;
- }
-
-}
http://git-wip-us.apache.org/repos/asf/james-project/blob/9799f43a/server/data/data-cassandra/src/test/java/org/apache/james/rrt/cassandra/CassandraRecipientRewriteTableV6Test.java
----------------------------------------------------------------------
diff --git a/server/data/data-cassandra/src/test/java/org/apache/james/rrt/cassandra/CassandraRecipientRewriteTableV6Test.java b/server/data/data-cassandra/src/test/java/org/apache/james/rrt/cassandra/CassandraRecipientRewriteTableV6Test.java
new file mode 100644
index 0000000..31a32e8
--- /dev/null
+++ b/server/data/data-cassandra/src/test/java/org/apache/james/rrt/cassandra/CassandraRecipientRewriteTableV6Test.java
@@ -0,0 +1,89 @@
+/****************************************************************
+ * 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.cassandra;
+
+import org.apache.commons.configuration.DefaultConfigurationBuilder;
+import org.apache.james.backends.cassandra.CassandraCluster;
+import org.apache.james.backends.cassandra.DockerCassandraRule;
+import org.apache.james.backends.cassandra.components.CassandraModule;
+import org.apache.james.backends.cassandra.utils.CassandraUtils;
+import org.apache.james.backends.cassandra.versions.CassandraSchemaVersionDAO;
+import org.apache.james.backends.cassandra.versions.CassandraSchemaVersionModule;
+import org.apache.james.backends.cassandra.versions.SchemaVersion;
+import org.apache.james.rrt.lib.AbstractRecipientRewriteTable;
+import org.apache.james.rrt.lib.AbstractRecipientRewriteTableTest;
+import org.junit.After;
+import org.junit.AfterClass;
+import org.junit.Before;
+import org.junit.BeforeClass;
+import org.junit.ClassRule;
+
+public class CassandraRecipientRewriteTableV6Test extends AbstractRecipientRewriteTableTest {
+ private static final SchemaVersion SCHEMA_VERSION_V6 = new SchemaVersion(6);
+
+ private static final CassandraModule MODULE = CassandraModule.aggregateModules(
+ CassandraRRTModule.MODULE,
+ CassandraSchemaVersionModule.MODULE);
+
+ @ClassRule
+ public static DockerCassandraRule cassandraServer = new DockerCassandraRule();
+
+ protected static CassandraCluster cassandra;
+
+ @BeforeClass
+ public static void setUpClass() {
+ cassandra = CassandraCluster.create(MODULE, cassandraServer.getHost());
+ }
+
+ @Override
+ @Before
+ public void setUp() throws Exception {
+ super.setUp();
+ }
+
+ @Override
+ @After
+ public void tearDown() throws Exception {
+ super.tearDown();
+ cassandra.clearTables();
+ }
+
+ @AfterClass
+ public static void tearDownClass() {
+ cassandra.closeCluster();
+ }
+
+ @Override
+ protected AbstractRecipientRewriteTable getRecipientRewriteTable() throws Exception {
+ CassandraSchemaVersionDAO cassandraSchemaVersionDAO = new CassandraSchemaVersionDAO(
+ cassandra.getConf(),
+ CassandraUtils.WITH_DEFAULT_CONFIGURATION);
+
+ CassandraRecipientRewriteTable rrt = new CassandraRecipientRewriteTable(
+ new CassandraRecipientRewriteTableDAO(cassandra.getConf(), CassandraUtils.WITH_DEFAULT_CONFIGURATION),
+ new CassandraMappingsSourcesDAO(cassandra.getConf()),
+ cassandraSchemaVersionDAO);
+ rrt.configure(new DefaultConfigurationBuilder());
+
+ cassandraSchemaVersionDAO.updateVersion(SCHEMA_VERSION_V6);
+
+ return rrt;
+ }
+}
http://git-wip-us.apache.org/repos/asf/james-project/blob/9799f43a/server/data/data-cassandra/src/test/java/org/apache/james/rrt/cassandra/CassandraRecipientRewriteTableV7Test.java
----------------------------------------------------------------------
diff --git a/server/data/data-cassandra/src/test/java/org/apache/james/rrt/cassandra/CassandraRecipientRewriteTableV7Test.java b/server/data/data-cassandra/src/test/java/org/apache/james/rrt/cassandra/CassandraRecipientRewriteTableV7Test.java
new file mode 100644
index 0000000..c7711b1
--- /dev/null
+++ b/server/data/data-cassandra/src/test/java/org/apache/james/rrt/cassandra/CassandraRecipientRewriteTableV7Test.java
@@ -0,0 +1,89 @@
+/****************************************************************
+ * 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.cassandra;
+
+import org.apache.commons.configuration.DefaultConfigurationBuilder;
+import org.apache.james.backends.cassandra.CassandraCluster;
+import org.apache.james.backends.cassandra.DockerCassandraRule;
+import org.apache.james.backends.cassandra.components.CassandraModule;
+import org.apache.james.backends.cassandra.utils.CassandraUtils;
+import org.apache.james.backends.cassandra.versions.CassandraSchemaVersionDAO;
+import org.apache.james.backends.cassandra.versions.CassandraSchemaVersionModule;
+import org.apache.james.backends.cassandra.versions.SchemaVersion;
+import org.apache.james.rrt.lib.AbstractRecipientRewriteTable;
+import org.apache.james.rrt.lib.AbstractRecipientRewriteTableTest;
+import org.junit.After;
+import org.junit.AfterClass;
+import org.junit.Before;
+import org.junit.BeforeClass;
+import org.junit.ClassRule;
+
+public class CassandraRecipientRewriteTableV7Test extends AbstractRecipientRewriteTableTest {
+ private static final SchemaVersion SCHEMA_VERSION_V7 = new SchemaVersion(7);
+
+ private static final CassandraModule MODULE = CassandraModule.aggregateModules(
+ CassandraRRTModule.MODULE,
+ CassandraSchemaVersionModule.MODULE);
+
+ @ClassRule
+ public static DockerCassandraRule cassandraServer = new DockerCassandraRule();
+
+ protected static CassandraCluster cassandra;
+
+ @BeforeClass
+ public static void setUpClass() {
+ cassandra = CassandraCluster.create(MODULE, cassandraServer.getHost());
+ }
+
+ @Override
+ @Before
+ public void setUp() throws Exception {
+ super.setUp();
+ }
+
+ @Override
+ @After
+ public void tearDown() throws Exception {
+ super.tearDown();
+ cassandra.clearTables();
+ }
+
+ @AfterClass
+ public static void tearDownClass() {
+ cassandra.closeCluster();
+ }
+
+ @Override
+ protected AbstractRecipientRewriteTable getRecipientRewriteTable() throws Exception {
+ CassandraSchemaVersionDAO cassandraSchemaVersionDAO = new CassandraSchemaVersionDAO(
+ cassandra.getConf(),
+ CassandraUtils.WITH_DEFAULT_CONFIGURATION);
+
+ CassandraRecipientRewriteTable rrt = new CassandraRecipientRewriteTable(
+ new CassandraRecipientRewriteTableDAO(cassandra.getConf(), CassandraUtils.WITH_DEFAULT_CONFIGURATION),
+ new CassandraMappingsSourcesDAO(cassandra.getConf()),
+ cassandraSchemaVersionDAO);
+ rrt.configure(new DefaultConfigurationBuilder());
+
+ cassandraSchemaVersionDAO.updateVersion(SCHEMA_VERSION_V7);
+
+ return rrt;
+ }
+}
http://git-wip-us.apache.org/repos/asf/james-project/blob/9799f43a/server/data/data-cassandra/src/test/java/org/apache/james/rrt/cassandra/CassandraStepdefs.java
----------------------------------------------------------------------
diff --git a/server/data/data-cassandra/src/test/java/org/apache/james/rrt/cassandra/CassandraStepdefs.java b/server/data/data-cassandra/src/test/java/org/apache/james/rrt/cassandra/CassandraStepdefs.java
index d9aeac4..c609267 100644
--- a/server/data/data-cassandra/src/test/java/org/apache/james/rrt/cassandra/CassandraStepdefs.java
+++ b/server/data/data-cassandra/src/test/java/org/apache/james/rrt/cassandra/CassandraStepdefs.java
@@ -20,7 +20,10 @@ package org.apache.james.rrt.cassandra;
import org.apache.commons.configuration.DefaultConfigurationBuilder;
import org.apache.james.backends.cassandra.CassandraCluster;
+import org.apache.james.backends.cassandra.components.CassandraModule;
import org.apache.james.backends.cassandra.utils.CassandraUtils;
+import org.apache.james.backends.cassandra.versions.CassandraSchemaVersionDAO;
+import org.apache.james.backends.cassandra.versions.CassandraSchemaVersionModule;
import org.apache.james.rrt.lib.AbstractRecipientRewriteTable;
import org.apache.james.rrt.lib.RewriteTablesStepdefs;
@@ -39,7 +42,9 @@ public class CassandraStepdefs {
@Before
public void setup() throws Throwable {
- cassandra = CassandraCluster.create(CassandraRRTModule.MODULE, RewriteTablesTest.cassandraServer.getHost());
+ cassandra = CassandraCluster.create(
+ CassandraModule.aggregateModules(CassandraRRTModule.MODULE, CassandraSchemaVersionModule.MODULE),
+ RewriteTablesTest.cassandraServer.getHost());
mainStepdefs.rewriteTable = getRecipientRewriteTable();
}
@@ -51,7 +56,8 @@ public class CassandraStepdefs {
private AbstractRecipientRewriteTable getRecipientRewriteTable() throws Exception {
CassandraRecipientRewriteTable rrt = new CassandraRecipientRewriteTable(
new CassandraRecipientRewriteTableDAO(cassandra.getConf(), CassandraUtils.WITH_DEFAULT_CONFIGURATION),
- new CassandraMappingsSourcesDAO(cassandra.getConf()));
+ new CassandraMappingsSourcesDAO(cassandra.getConf()),
+ new CassandraSchemaVersionDAO(cassandra.getConf(), CassandraUtils.WITH_DEFAULT_CONFIGURATION));
rrt.configure(new DefaultConfigurationBuilder());
return rrt;
}
http://git-wip-us.apache.org/repos/asf/james-project/blob/9799f43a/server/protocols/webadmin/webadmin-data/src/main/java/org/apache/james/webadmin/routes/AliasRoutes.java
----------------------------------------------------------------------
diff --git a/server/protocols/webadmin/webadmin-data/src/main/java/org/apache/james/webadmin/routes/AliasRoutes.java b/server/protocols/webadmin/webadmin-data/src/main/java/org/apache/james/webadmin/routes/AliasRoutes.java
index 475a428..8a7ffd9 100644
--- a/server/protocols/webadmin/webadmin-data/src/main/java/org/apache/james/webadmin/routes/AliasRoutes.java
+++ b/server/protocols/webadmin/webadmin-data/src/main/java/org/apache/james/webadmin/routes/AliasRoutes.java
@@ -219,7 +219,6 @@ public class AliasRoutes implements Routes {
MailAddress destinationAddress = MailAddressParser.parseMailAddress(request.params(ALIAS_DESTINATION_ADDRESS), ADDRESS_TYPE);
return recipientRewriteTable.listSources(Mapping.alias(destinationAddress.asString()))
- .stream()
.sorted(Comparator.comparing(MappingSource::asMailAddressString))
.map(AliasSourcesResponse::new)
.collect(Guavate.toImmutableSet());
---------------------------------------------------------------------
To unsubscribe, e-mail: server-dev-unsubscribe@james.apache.org
For additional commands, e-mail: server-dev-help@james.apache.org