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 2015/11/28 18:08:44 UTC
svn commit: r1717000 - in /james/project/trunk/server/container:
cli/src/main/java/org/apache/james/cli/
cli/src/main/java/org/apache/james/cli/probe/
cli/src/main/java/org/apache/james/cli/probe/impl/
cli/src/main/java/org/apache/james/cli/type/ cli/s...
Author: btellier
Date: Sat Nov 28 17:08:44 2015
New Revision: 1717000
URL: http://svn.apache.org/viewvc?rev=1717000&view=rev
Log:
MAILBOX-257 Add CLI capability to re-index documents
Added:
james/project/trunk/server/container/mailbox-adapter/src/main/java/org/apache/james/adapter/mailbox/ReIndexerManagement.java
james/project/trunk/server/container/mailbox-adapter/src/main/java/org/apache/james/adapter/mailbox/ReIndexerManagementMBean.java
Modified:
james/project/trunk/server/container/cli/src/main/java/org/apache/james/cli/ServerCmd.java
james/project/trunk/server/container/cli/src/main/java/org/apache/james/cli/probe/ServerProbe.java
james/project/trunk/server/container/cli/src/main/java/org/apache/james/cli/probe/impl/JmxServerProbe.java
james/project/trunk/server/container/cli/src/main/java/org/apache/james/cli/type/CmdType.java
james/project/trunk/server/container/cli/src/test/java/org/apache/james/cli/ServerCmdTest.java
james/project/trunk/server/container/cli/src/test/java/org/apache/james/cli/type/CmdTypeTest.java
james/project/trunk/server/container/mailbox-adapter/pom.xml
james/project/trunk/server/container/spring/src/main/resources/META-INF/org/apache/james/spring-server.xml
Modified: james/project/trunk/server/container/cli/src/main/java/org/apache/james/cli/ServerCmd.java
URL: http://svn.apache.org/viewvc/james/project/trunk/server/container/cli/src/main/java/org/apache/james/cli/ServerCmd.java?rev=1717000&r1=1716999&r2=1717000&view=diff
==============================================================================
--- james/project/trunk/server/container/cli/src/main/java/org/apache/james/cli/ServerCmd.java (original)
+++ james/project/trunk/server/container/cli/src/main/java/org/apache/james/cli/ServerCmd.java Sat Nov 28 17:08:44 2015
@@ -259,6 +259,12 @@ public class ServerCmd {
case GETDEFAULTMAXMESSAGECOUNTQUOTA:
System.out.println("Default Maximum message count Quota : " + formatMessageValue(probe.getDefaultMaxMessageCount()));
break;
+ case REINDEXMAILBOX:
+ probe.reIndexMailbox(arguments[1], arguments[2], arguments[3]);
+ break;
+ case REINDEXALL:
+ probe.reIndexAll();
+ break;
default:
throw new UnrecognizedCommandException(cmdType.getCommand());
}
Modified: james/project/trunk/server/container/cli/src/main/java/org/apache/james/cli/probe/ServerProbe.java
URL: http://svn.apache.org/viewvc/james/project/trunk/server/container/cli/src/main/java/org/apache/james/cli/probe/ServerProbe.java?rev=1717000&r1=1716999&r2=1717000&view=diff
==============================================================================
--- james/project/trunk/server/container/cli/src/main/java/org/apache/james/cli/probe/ServerProbe.java (original)
+++ james/project/trunk/server/container/cli/src/main/java/org/apache/james/cli/probe/ServerProbe.java Sat Nov 28 17:08:44 2015
@@ -246,4 +246,8 @@ public interface ServerProbe extends Clo
void setDefaultMaxMessageCount(long maxDefaultMessageCount) throws MailboxException;
void setDefaultMaxStorage(long maxDefaultSize) throws MailboxException;
+
+ void reIndexMailbox(String namespace, String user, String name) throws Exception;
+
+ void reIndexAll() throws Exception;
}
Modified: james/project/trunk/server/container/cli/src/main/java/org/apache/james/cli/probe/impl/JmxServerProbe.java
URL: http://svn.apache.org/viewvc/james/project/trunk/server/container/cli/src/main/java/org/apache/james/cli/probe/impl/JmxServerProbe.java?rev=1717000&r1=1716999&r2=1717000&view=diff
==============================================================================
--- james/project/trunk/server/container/cli/src/main/java/org/apache/james/cli/probe/impl/JmxServerProbe.java (original)
+++ james/project/trunk/server/container/cli/src/main/java/org/apache/james/cli/probe/impl/JmxServerProbe.java Sat Nov 28 17:08:44 2015
@@ -33,6 +33,7 @@ import javax.management.remote.JMXServic
import org.apache.james.adapter.mailbox.MailboxCopierManagementMBean;
import org.apache.james.adapter.mailbox.MailboxManagerManagementMBean;
import org.apache.james.adapter.mailbox.QuotaManagementMBean;
+import org.apache.james.adapter.mailbox.ReIndexerManagementMBean;
import org.apache.james.adapter.mailbox.SerializableQuota;
import org.apache.james.cli.probe.ServerProbe;
import org.apache.james.domainlist.api.DomainListManagementMBean;
@@ -44,12 +45,13 @@ import org.apache.james.user.api.UsersRe
public class JmxServerProbe implements ServerProbe {
// TODO: Move this to somewhere else
- public final static String DOMAINLIST_OBJECT_NAME = "org.apache.james:type=component,name=domainlist";
- public final static String VIRTUALUSERTABLE_OBJECT_NAME = "org.apache.james:type=component,name=recipientrewritetable";
- public final static String USERSREPOSITORY_OBJECT_NAME = "org.apache.james:type=component,name=usersrepository";
- public final static String MAILBOXCOPIER_OBJECT_NAME = "org.apache.james:type=component,name=mailboxcopier";
- public final static String MAILBOXMANAGER_OBJECT_NAME = "org.apache.james:type=component,name=mailboxmanagerbean";
- public final static String QUOTAMANAGER_OBJECT_NAME = "org.apache.james:type=component,name=quotamanagerbean";
+ private final static String DOMAINLIST_OBJECT_NAME = "org.apache.james:type=component,name=domainlist";
+ private final static String VIRTUALUSERTABLE_OBJECT_NAME = "org.apache.james:type=component,name=recipientrewritetable";
+ private final static String USERSREPOSITORY_OBJECT_NAME = "org.apache.james:type=component,name=usersrepository";
+ private final static String MAILBOXCOPIER_OBJECT_NAME = "org.apache.james:type=component,name=mailboxcopier";
+ private final static String MAILBOXMANAGER_OBJECT_NAME = "org.apache.james:type=component,name=mailboxmanagerbean";
+ private final static String QUOTAMANAGER_OBJECT_NAME = "org.apache.james:type=component,name=quotamanagerbean";
+ private final static String REINDEXER_OBJECT_NAME = "org.apache.james:type=component,name=reindexerbean";
private JMXConnector jmxc;
@@ -59,6 +61,7 @@ public class JmxServerProbe implements S
private MailboxCopierManagementMBean mailboxCopierManagement;
private MailboxManagerManagementMBean mailboxManagerManagement;
private QuotaManagementMBean quotaManagement;
+ private ReIndexerManagementMBean reIndexerManagement;
private static final String fmtUrl = "service:jmx:rmi:///jndi/rmi://%s:%d/jmxrmi";
private static final int defaultPort = 9999;
@@ -119,6 +122,9 @@ public class JmxServerProbe implements S
name = new ObjectName(QUOTAMANAGER_OBJECT_NAME);
quotaManagement = MBeanServerInvocationHandler.newProxyInstance(
mbeanServerConn, name, QuotaManagementMBean.class, true);
+ name = new ObjectName(REINDEXER_OBJECT_NAME);
+ reIndexerManagement = MBeanServerInvocationHandler.newProxyInstance(
+ mbeanServerConn, name, ReIndexerManagementMBean.class, true);
} catch (MalformedObjectNameException e) {
throw new RuntimeException("Invalid ObjectName? Please report this as a bug.", e);
}
@@ -170,7 +176,7 @@ public class JmxServerProbe implements S
}
@Override
- public Map<String, Mappings> listMappings() throws Exception {
+ public Map<String, Mappings> listMappings() throws Exception {
return virtualUserTableProxy.getAllMappings();
}
@@ -185,7 +191,7 @@ public class JmxServerProbe implements S
}
@Override
- public Mappings listUserDomainMappings(String user, String domain) throws Exception {
+ public Mappings listUserDomainMappings(String user, String domain) throws Exception {
return virtualUserTableProxy.getUserDomainMappings(user, domain);
}
@@ -278,4 +284,14 @@ public class JmxServerProbe implements S
public void setDefaultMaxStorage(long maxDefaultSize) throws MailboxException {
quotaManagement.setDefaultMaxStorage(maxDefaultSize);
}
+
+ @Override
+ public void reIndexMailbox(String namespace, String user, String name) throws Exception {
+ reIndexerManagement.reIndex(namespace, user, name);
+ }
+
+ @Override
+ public void reIndexAll() throws Exception {
+ reIndexerManagement.reIndex();
+ }
}
Modified: james/project/trunk/server/container/cli/src/main/java/org/apache/james/cli/type/CmdType.java
URL: http://svn.apache.org/viewvc/james/project/trunk/server/container/cli/src/main/java/org/apache/james/cli/type/CmdType.java?rev=1717000&r1=1716999&r2=1717000&view=diff
==============================================================================
--- james/project/trunk/server/container/cli/src/main/java/org/apache/james/cli/type/CmdType.java (original)
+++ james/project/trunk/server/container/cli/src/main/java/org/apache/james/cli/type/CmdType.java Sat Nov 28 17:08:44 2015
@@ -51,7 +51,9 @@ public enum CmdType {
SETDEFAULTMAXSTORAGEQUOTA("setdefaultmaxstoragequota", "max_storage"),
SETDEFAULTMAXMESSAGECOUNTQUOTA("setdefaultmaxmessagecountquota", "max_message_count"),
GETDEFAULTMAXSTORAGEQUOTA("getdefaultmaxstoragequota"),
- GETDEFAULTMAXMESSAGECOUNTQUOTA("getdefaultmaxmessagecountquota");
+ GETDEFAULTMAXMESSAGECOUNTQUOTA("getdefaultmaxmessagecountquota"),
+ REINDEXMAILBOX("reindexmailbox", "namespace", "user", "name"),
+ REINDEXALL("reindexall");
private final String command;
private final String[] arguments;
Modified: james/project/trunk/server/container/cli/src/test/java/org/apache/james/cli/ServerCmdTest.java
URL: http://svn.apache.org/viewvc/james/project/trunk/server/container/cli/src/test/java/org/apache/james/cli/ServerCmdTest.java?rev=1717000&r1=1716999&r2=1717000&view=diff
==============================================================================
--- james/project/trunk/server/container/cli/src/test/java/org/apache/james/cli/ServerCmdTest.java (original)
+++ james/project/trunk/server/container/cli/src/test/java/org/apache/james/cli/ServerCmdTest.java Sat Nov 28 17:08:44 2015
@@ -480,6 +480,35 @@ public class ServerCmdTest {
control.verify();
}
+ @Test
+ public void reIndexAllQuotaCommandShouldWork() throws Exception {
+ String[] arguments = { "-h", "127.0.0.1", "-p", "9999", CmdType.REINDEXALL.getCommand()};
+ CommandLine commandLine = ServerCmd.parseCommandLine(arguments);
+
+ serverProbe.reIndexAll();
+ expectLastCall();
+
+ control.replay();
+ testee.executeCommandLine(commandLine);
+ control.verify();
+ }
+
+ @Test
+ public void reIndexMailboxCommandShouldWork() throws Exception {
+ String namespace = "#private";
+ String user = "btellier@apache.org";
+ String name = "INBOX";
+ String[] arguments = { "-h", "127.0.0.1", "-p", "9999", CmdType.REINDEXMAILBOX.getCommand(), namespace, user, name};
+ CommandLine commandLine = ServerCmd.parseCommandLine(arguments);
+
+ serverProbe.reIndexMailbox(namespace, user, name);
+ expectLastCall();
+
+ control.replay();
+ testee.executeCommandLine(commandLine);
+ control.verify();
+ }
+
@Test(expected = InvalidArgumentNumberException.class)
public void addDomainCommandShouldThrowOnMissingArguments() throws Exception {
String[] arguments = { "-h", "127.0.0.1", "-p", "9999", CmdType.ADDDOMAIN.getCommand()};
@@ -976,6 +1005,35 @@ public class ServerCmdTest {
CommandLine commandLine = ServerCmd.parseCommandLine(arguments);
control.replay();
+ try {
+ testee.executeCommandLine(commandLine);
+ } finally {
+ control.verify();
+ }
+ }
+
+ @Test(expected = InvalidArgumentNumberException.class)
+ public void reIndexAllCommandShouldThrowOnAdditionalArguments() throws Exception {
+ String[] arguments = { "-h", "127.0.0.1", "-p", "9999", CmdType.REINDEXALL.getCommand(), ADDITIONAL_ARGUMENT };
+ CommandLine commandLine = ServerCmd.parseCommandLine(arguments);
+
+ control.replay();
+ try {
+ testee.executeCommandLine(commandLine);
+ } finally {
+ control.verify();
+ }
+ }
+
+ @Test(expected = InvalidArgumentNumberException.class)
+ public void reIndexMailboxCommandShouldThrowOnAdditionalArguments() throws Exception {
+ String user = "user@domain";
+ String namespace = "#private";
+ String name = "INBOX.test";
+ String[] arguments = { "-h", "127.0.0.1", "-p", "9999", CmdType.REINDEXMAILBOX.getCommand(), namespace, user, name, ADDITIONAL_ARGUMENT };
+ CommandLine commandLine = ServerCmd.parseCommandLine(arguments);
+
+ control.replay();
try {
testee.executeCommandLine(commandLine);
} finally {
Modified: james/project/trunk/server/container/cli/src/test/java/org/apache/james/cli/type/CmdTypeTest.java
URL: http://svn.apache.org/viewvc/james/project/trunk/server/container/cli/src/test/java/org/apache/james/cli/type/CmdTypeTest.java?rev=1717000&r1=1716999&r2=1717000&view=diff
==============================================================================
--- james/project/trunk/server/container/cli/src/test/java/org/apache/james/cli/type/CmdTypeTest.java (original)
+++ james/project/trunk/server/container/cli/src/test/java/org/apache/james/cli/type/CmdTypeTest.java Sat Nov 28 17:08:44 2015
@@ -189,8 +189,13 @@ public class CmdTypeTest {
}
@Test
- public void lookupGetQuotaRootShouldReturnEnumValue() {
- assertThat(CmdType.lookup("getquotaroot")).isEqualTo(CmdType.GETQUOTAROOT);
+ public void lookupReIndexMailboxShouldReturnEnumValue() {
+ assertThat(CmdType.lookup("reindexall")).isEqualTo(CmdType.REINDEXALL);
+ }
+
+ @Test
+ public void lookupReIndexAllShouldReturnEnumValue() {
+ assertThat(CmdType.lookup("reindexmailbox")).isEqualTo(CmdType.REINDEXMAILBOX);
}
@Test
Modified: james/project/trunk/server/container/mailbox-adapter/pom.xml
URL: http://svn.apache.org/viewvc/james/project/trunk/server/container/mailbox-adapter/pom.xml?rev=1717000&r1=1716999&r2=1717000&view=diff
==============================================================================
--- james/project/trunk/server/container/mailbox-adapter/pom.xml (original)
+++ james/project/trunk/server/container/mailbox-adapter/pom.xml Sat Nov 28 17:08:44 2015
@@ -59,6 +59,10 @@
<artifactId>apache-james-mailbox-maildir</artifactId>
</dependency>
<dependency>
+ <groupId>org.apache.james</groupId>
+ <artifactId>apache-james-mailbox-tool</artifactId>
+ </dependency>
+ <dependency>
<groupId>org.slf4j</groupId>
<artifactId>slf4j-api</artifactId>
</dependency>
Added: james/project/trunk/server/container/mailbox-adapter/src/main/java/org/apache/james/adapter/mailbox/ReIndexerManagement.java
URL: http://svn.apache.org/viewvc/james/project/trunk/server/container/mailbox-adapter/src/main/java/org/apache/james/adapter/mailbox/ReIndexerManagement.java?rev=1717000&view=auto
==============================================================================
--- james/project/trunk/server/container/mailbox-adapter/src/main/java/org/apache/james/adapter/mailbox/ReIndexerManagement.java (added)
+++ james/project/trunk/server/container/mailbox-adapter/src/main/java/org/apache/james/adapter/mailbox/ReIndexerManagement.java Sat Nov 28 17:08:44 2015
@@ -0,0 +1,43 @@
+/****************************************************************
+ * 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.adapter.mailbox;
+
+import org.apache.james.mailbox.exception.MailboxException;
+import org.apache.james.mailbox.indexer.ReIndexer;
+import org.apache.james.mailbox.model.MailboxPath;
+
+public class ReIndexerManagement implements ReIndexerManagementMBean {
+
+ private final ReIndexer reIndexer;
+
+ public ReIndexerManagement(ReIndexer reIndexer) {
+ this.reIndexer = reIndexer;
+ }
+
+ @Override
+ public void reIndex(String namespace, String user, String name) throws MailboxException {
+ reIndexer.reIndex(new MailboxPath(namespace, user, name));
+ }
+
+ @Override
+ public void reIndex() throws MailboxException {
+ reIndexer.reIndex();
+ }
+}
Added: james/project/trunk/server/container/mailbox-adapter/src/main/java/org/apache/james/adapter/mailbox/ReIndexerManagementMBean.java
URL: http://svn.apache.org/viewvc/james/project/trunk/server/container/mailbox-adapter/src/main/java/org/apache/james/adapter/mailbox/ReIndexerManagementMBean.java?rev=1717000&view=auto
==============================================================================
--- james/project/trunk/server/container/mailbox-adapter/src/main/java/org/apache/james/adapter/mailbox/ReIndexerManagementMBean.java (added)
+++ james/project/trunk/server/container/mailbox-adapter/src/main/java/org/apache/james/adapter/mailbox/ReIndexerManagementMBean.java Sat Nov 28 17:08:44 2015
@@ -0,0 +1,32 @@
+/****************************************************************
+ * 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.adapter.mailbox;
+
+import org.apache.james.mailbox.exception.MailboxException;
+import org.apache.james.mailbox.indexer.ReIndexer;
+import org.apache.james.mailbox.model.MailboxPath;
+
+public interface ReIndexerManagementMBean {
+
+ void reIndex(String namespace, String user, String name) throws MailboxException;
+
+ void reIndex() throws MailboxException;
+
+}
Modified: james/project/trunk/server/container/spring/src/main/resources/META-INF/org/apache/james/spring-server.xml
URL: http://svn.apache.org/viewvc/james/project/trunk/server/container/spring/src/main/resources/META-INF/org/apache/james/spring-server.xml?rev=1717000&r1=1716999&r2=1717000&view=diff
==============================================================================
--- james/project/trunk/server/container/spring/src/main/resources/META-INF/org/apache/james/spring-server.xml (original)
+++ james/project/trunk/server/container/spring/src/main/resources/META-INF/org/apache/james/spring-server.xml Sat Nov 28 17:08:44 2015
@@ -247,12 +247,13 @@
-->
<entry key="org.apache.james:type=container,name=logprovider" value-ref="logprovider"/>
<entry key="org.apache.james:type=component,name=quotamanagerbean" value-ref="quotamanagermanagement"/>
+ <entry key="org.apache.james:type=component,name=reindexerbean" value-ref="reindexermanagement"/>
</map>
</property>
<property name="assembler">
<bean class="org.springframework.jmx.export.assembler.InterfaceBasedMBeanInfoAssembler">
<property name="managedInterfaces"
- value="org.apache.james.fetchmail.FetchSchedulerMBean,org.apache.james.domainlist.api.DomainListManagementMBean,org.apache.james.dnsservice.api.DNSServiceMBean,org.apache.james.rrt.api.RecipientRewriteTableManagementMBean,org.apache.james.user.api.UsersRepositoryManagementMBean,org.apache.james.adapter.mailbox.MailboxManagerManagementMBean,org.apache.james.adapter.mailbox.MailboxCopierManagementMBean,org.apache.james.mailetcontainer.api.jmx.MailSpoolerMBean,org.apache.james.container.spring.lifecycle.LogProviderManagementMBean,org.apache.james.adapter.mailbox.QuotaManagementMBean"/>
+ value="org.apache.james.fetchmail.FetchSchedulerMBean,org.apache.james.domainlist.api.DomainListManagementMBean,org.apache.james.dnsservice.api.DNSServiceMBean,org.apache.james.rrt.api.RecipientRewriteTableManagementMBean,org.apache.james.user.api.UsersRepositoryManagementMBean,org.apache.james.adapter.mailbox.MailboxManagerManagementMBean,org.apache.james.adapter.mailbox.MailboxCopierManagementMBean,org.apache.james.mailetcontainer.api.jmx.MailSpoolerMBean,org.apache.james.container.spring.lifecycle.LogProviderManagementMBean,org.apache.james.adapter.mailbox.QuotaManagementMBean,org.apache.james.adapter.mailbox.ReIndexerManagementMBean"/>
</bean>
</property>
</bean>
@@ -267,6 +268,9 @@
<property name="quotaRootResolver" ref="quotaRootResolver"/>
<property name="quotaManager" ref="quotaManager"/>
</bean>
+ <bean id="reindexermanagement" class="org.apache.james.adapter.mailbox.ReIndexerManagement">
+ <constructor-arg index="0" ref="reindexer"/>
+ </bean>
<!--
<bean id="james23importermanagement" class="org.apache.james.container.spring.tool.James23ImporterManagement" />
-->
---------------------------------------------------------------------
To unsubscribe, e-mail: server-dev-unsubscribe@james.apache.org
For additional commands, e-mail: server-dev-help@james.apache.org