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