james-server-dev mailing list archives

Site index · List index
Message view « Date » · « Thread »
Top « Date » · « Thread »
From ieu...@apache.org
Subject svn commit: r1164966 [3/5] - in /james/mailbox/tags/apache-james-mailbox-0.3: ./ hbase/ hbase/src/ hbase/src/main/ hbase/src/main/config/ hbase/src/main/java/ hbase/src/main/java/org/ hbase/src/main/java/org/apache/ hbase/src/main/java/org/apache/james...
Date Sun, 04 Sep 2011 07:31:43 GMT
Added: james/mailbox/tags/apache-james-mailbox-0.3/hbase/src/main/java/org/apache/james/mailbox/hbase/user/HBaseSubscriptionMapper.java
URL: http://svn.apache.org/viewvc/james/mailbox/tags/apache-james-mailbox-0.3/hbase/src/main/java/org/apache/james/mailbox/hbase/user/HBaseSubscriptionMapper.java?rev=1164966&view=auto
==============================================================================
--- james/mailbox/tags/apache-james-mailbox-0.3/hbase/src/main/java/org/apache/james/mailbox/hbase/user/HBaseSubscriptionMapper.java
(added)
+++ james/mailbox/tags/apache-james-mailbox-0.3/hbase/src/main/java/org/apache/james/mailbox/hbase/user/HBaseSubscriptionMapper.java
Sun Sep  4 07:31:41 2011
@@ -0,0 +1,172 @@
+/****************************************************************
+ * 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.mailbox.hbase.user;
+
+import java.io.IOException;
+import java.util.ArrayList;
+import java.util.List;
+import org.apache.hadoop.conf.Configuration;
+import org.apache.hadoop.hbase.KeyValue;
+import org.apache.hadoop.hbase.client.Delete;
+import org.apache.hadoop.hbase.client.Get;
+import org.apache.hadoop.hbase.client.HTable;
+import org.apache.hadoop.hbase.client.Put;
+import org.apache.hadoop.hbase.client.Result;
+import org.apache.hadoop.hbase.util.Bytes;
+import org.apache.james.mailbox.SubscriptionException;
+import org.apache.james.mailbox.hbase.HBaseNonTransactionalMapper;
+import org.apache.james.mailbox.store.user.SubscriptionMapper;
+import org.apache.james.mailbox.store.user.model.Subscription;
+import org.apache.james.mailbox.store.user.model.impl.SimpleSubscription;
+
+import static org.apache.james.mailbox.hbase.HBaseUtils.*;
+import static org.apache.james.mailbox.hbase.HBaseNames.*;
+/**
+ * HBase implementation of a {@link SubscriptionMapper}. 
+ * I don't know if this class is thread-safe!
+ * 
+ */
+public class HBaseSubscriptionMapper extends HBaseNonTransactionalMapper implements SubscriptionMapper
{
+
+    /** Link to the HBase Configuration object and specific mailbox names */
+    private final Configuration conf;
+
+    public HBaseSubscriptionMapper(Configuration conf) {
+        this.conf = conf;
+    }
+
+    /*
+     * (non-Javadoc)
+     * @see org.apache.james.mailbox.store.user.SubscriptionMapper#findMailboxSubscriptionForUser(java.lang.String,
java.lang.String)
+     */
+    @Override
+    public Subscription findMailboxSubscriptionForUser(String user, String mailbox) throws
SubscriptionException {
+        HTable subscriptions = null;
+        try {
+            subscriptions = new HTable(conf, SUBSCRIPTIONS_TABLE);
+            Subscription subscription = null;
+            Get get = new Get(Bytes.toBytes(user));
+            get.addFamily(SUBSCRIPTION_CF);
+            Result result = subscriptions.get(get);
+
+            if (!result.isEmpty()) {
+                if (result.containsColumn(SUBSCRIPTION_CF, Bytes.toBytes(mailbox))) {
+                    subscription = new SimpleSubscription(user, mailbox);
+                    return subscription;
+                }
+            }
+            return null;
+        } catch (IOException e) {
+            throw new SubscriptionException(e);
+        } finally {
+            if (subscriptions != null) {
+                try {
+                    subscriptions.close();
+                } catch (IOException ex) {
+                    throw new SubscriptionException(ex);
+                }
+            }
+        }
+    }
+
+    /**
+     * @throws SubscriptionException 
+     * @see org.apache.james.mailbox.store.user.SubscriptionMapper#save(Subscription)
+     */
+    @Override
+    public void save(Subscription subscription) throws SubscriptionException {
+        //TODO: maybe switch to checkAndPut
+        HTable subscriptions = null;
+        try {
+            subscriptions = new HTable(conf, SUBSCRIPTIONS_TABLE);
+            Put put = toPut(subscription);
+            subscriptions.put(put);
+        } catch (IOException e) {
+            throw new SubscriptionException(e);
+        } finally {
+            if (subscriptions != null) {
+                try {
+                    subscriptions.close();
+                } catch (IOException ex) {
+                    throw new SubscriptionException(ex);
+                }
+            }
+        }
+    }
+
+    /**
+     * @throws SubscriptionException 
+     * @see org.apache.james.mailbox.store.user.SubscriptionMapper#findSubscriptionsForUser(java.lang.String)
+     */
+    @Override
+    public List<Subscription> findSubscriptionsForUser(String user) throws SubscriptionException
{
+        HTable subscriptions = null;
+        try {
+            subscriptions = new HTable(conf, SUBSCRIPTIONS_TABLE);
+            List<Subscription> subscriptionList = new ArrayList<Subscription>();
+            Get get = new Get(Bytes.toBytes(user));
+            get.addFamily(SUBSCRIPTION_CF);
+            Result result = subscriptions.get(get);
+            if (!result.isEmpty()) {
+                List<KeyValue> columns = result.list();
+                for (KeyValue key : columns) {
+                    subscriptionList.add(new SimpleSubscription(user, Bytes.toString(key.getQualifier())));
+                }
+            }
+            return subscriptionList;
+        } catch (IOException e) {
+            throw new SubscriptionException(e);
+        } finally {
+            if (subscriptions != null) {
+                try {
+                    subscriptions.close();
+                } catch (IOException ex) {
+                    throw new SubscriptionException(ex);
+                }
+            }
+        }
+    }
+
+    /**
+     * @throws SubscriptionException 
+     * @see org.apache.james.mailbox.store.user.SubscriptionMapper#delete(Subscription)
+     */
+    @Override
+    public void delete(Subscription subscription) throws SubscriptionException {
+        //TODO: maybe switch to checkAndDelete
+        HTable subscriptions = null;
+        try {
+            subscriptions = new HTable(conf, SUBSCRIPTIONS_TABLE);
+            Delete delete = new Delete(Bytes.toBytes(subscription.getUser()));
+            delete.deleteColumns(SUBSCRIPTION_CF, Bytes.toBytes(subscription.getMailbox()));
+            subscriptions.delete(delete);
+            subscriptions.close();
+        } catch (IOException e) {
+            throw new SubscriptionException(e);
+        } finally {
+            if (subscriptions != null) {
+                try {
+                    subscriptions.close();
+                } catch (IOException ex) {
+                    throw new SubscriptionException(ex);
+                }
+            }
+        }
+    }
+}

Added: james/mailbox/tags/apache-james-mailbox-0.3/hbase/src/reporting-site/site.xml
URL: http://svn.apache.org/viewvc/james/mailbox/tags/apache-james-mailbox-0.3/hbase/src/reporting-site/site.xml?rev=1164966&view=auto
==============================================================================
--- james/mailbox/tags/apache-james-mailbox-0.3/hbase/src/reporting-site/site.xml (added)
+++ james/mailbox/tags/apache-james-mailbox-0.3/hbase/src/reporting-site/site.xml Sun Sep
 4 07:31:41 2011
@@ -0,0 +1,29 @@
+<?xml version="1.0" encoding="ISO-8859-1"?>
+<!--
+    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.    
+-->
+<project name="${project.name}">
+
+    <body>
+
+        <menu ref="parent" />
+        <menu ref="reports" />
+
+    </body>
+
+</project>

Added: james/mailbox/tags/apache-james-mailbox-0.3/hbase/src/site/James HBase Mailbox Schema.mm
URL: http://svn.apache.org/viewvc/james/mailbox/tags/apache-james-mailbox-0.3/hbase/src/site/James%20HBase%20Mailbox%20Schema.mm?rev=1164966&view=auto
==============================================================================
--- james/mailbox/tags/apache-james-mailbox-0.3/hbase/src/site/James HBase Mailbox Schema.mm
(added)
+++ james/mailbox/tags/apache-james-mailbox-0.3/hbase/src/site/James HBase Mailbox Schema.mm
Sun Sep  4 07:31:41 2011
@@ -0,0 +1,130 @@
+<map version="0.9.0">
+<!--To view this file, download free mind mapping software Freeplane from http://freeplane.sourceforge.net
-->
+<node TEXT="James HBase Mailbox Schema" ID="ID_1522661448" CREATED="1312975673167" MODIFIED="1312977622133"
COLOR="#000000">
+<font NAME="Liberation Sans" SIZE="20" BOLD="true"/>
+<edge STYLE="linear" COLOR="#808080"/>
+<hook NAME="MapStyle" max_node_width="600"/>
+<hook NAME="accessories/plugins/HierarchicalIcons.properties"/>
+<hook NAME="accessories/plugins/AutomaticLayout.properties"/>
+<node TEXT="MESSAGES Table" POSITION="right" ID="ID_146373405" CREATED="1312975778142"
MODIFIED="1312977557964" COLOR="#0033ff" STYLE="bubble" HGAP="61" VSHIFT="118">
+<font NAME="SansSerif" SIZE="18"/>
+<edge STYLE="sharp_bezier" WIDTH="8"/>
+<attribute_layout NAME_WIDTH="46" VALUE_WIDTH="175"/>
+<node TEXT="Row Key" ID="ID_966504852" CREATED="1312977332638" MODIFIED="1312977901259"
COLOR="#00b439" HGAP="19" VSHIFT="6">
+<font SIZE="16"/>
+<edge STYLE="bezier" WIDTH="thin"/>
+<node TEXT="Row key is formed from mailbox ID, which is UUID folowed by message UID in
reverse (Long.MAX_VALUE - uid)" ID="ID_1211104185" CREATED="1312977912485" MODIFIED="1313936488925"
COLOR="#990000">
+<font SIZE="14"/>
+</node>
+</node>
+<node TEXT="Message MetaInformation Column Family" ID="ID_120928781" CREATED="1312977102333"
MODIFIED="1312977207614" COLOR="#00b439">
+<font SIZE="16"/>
+<edge STYLE="bezier" WIDTH="thin"/>
+<node TEXT="Contains information, about the message : flags, properties, message size,
etc. This information is stored in prefixed columns based on the information type. (e.g. system
flags columns begin with &apos;sf:&apos;, properties begin with &apos;p:&apos;),
etc." ID="ID_152445138" CREATED="1313936526013" MODIFIED="1313937393598" COLOR="#990000">
+<font SIZE="14"/>
+</node>
+<node TEXT="Columns" ID="ID_588307567" CREATED="1313936865973" MODIFIED="1313936870872"
COLOR="#990000">
+<font SIZE="14"/>
+<node TEXT="Meta columns are prefix with &apos;p:&apos; and record: body size,
content size, date, lineCount (if text message), message modSequence, media type, and media
sub type." ID="ID_1444672151" CREATED="1313936876285" MODIFIED="1313937027571" COLOR="#111111">
+<font SIZE="12"/>
+</node>
+<node TEXT="System flags columns: record the message system flags if present. Can be one
of: sf:A, sf:DE, sf:DR, sf:F, sf:R, sf:S, sf:U. Value is the MARKER (currently X)." ID="ID_530864854"
CREATED="1313937034469" MODIFIED="1313937378915" COLOR="#111111">
+<font SIZE="12"/>
+</node>
+<node TEXT="User flags columns: record message user flags if present. They begin with
&apos;uf:&apos; prefix and are followed by the user flag name. Value is not important."
ID="ID_1481299357" CREATED="1313937138884" MODIFIED="1313937361438" COLOR="#111111">
+<font SIZE="12"/>
+</node>
+<node TEXT="Message properties columns: record message properties. They begin with &apos;p:&apos;
prefix. The qualifier stores the properti namespace and local name separated by &apos;%%&apos;
and the value as the column value." ID="ID_124342919" CREATED="1313937255421" MODIFIED="1313937353208"
COLOR="#111111">
+<font SIZE="12"/>
+</node>
+</node>
+</node>
+<node TEXT="Message Header Column Family" ID="ID_997617928" CREATED="1312977160645" MODIFIED="1312977239847"
COLOR="#00b439">
+<font SIZE="16"/>
+<edge STYLE="bezier" WIDTH="thin"/>
+<node TEXT="Contains the message headers. This column family will merge with the message
body column family." ID="ID_1039713363" CREATED="1313936757869" MODIFIED="1313936799283" COLOR="#990000">
+<font SIZE="14"/>
+</node>
+<node TEXT="Columns" ID="ID_1702021503" CREATED="1313937404029" MODIFIED="1313937407488"
COLOR="#990000">
+<font SIZE="14"/>
+<node TEXT="Data is stored in chunks and written/read by ChunkOutputStream and CunkInputStream
classes. Column qualifiers are long values that start from 1." ID="ID_1495505366" CREATED="1313937411962"
MODIFIED="1313937583513" COLOR="#111111">
+<font SIZE="12"/>
+</node>
+</node>
+</node>
+<node TEXT="Message Body Column Family" ID="ID_1860200611" CREATED="1312977242189" MODIFIED="1312977252828"
COLOR="#00b439">
+<font SIZE="16"/>
+<edge STYLE="bezier" WIDTH="thin"/>
+<node TEXT="Contains the message body. This column family will be merged with the headers
column family." ID="ID_1200031498" CREATED="1313936802173" MODIFIED="1313936845530" COLOR="#990000">
+<font SIZE="14"/>
+</node>
+<node TEXT="Columns" ID="ID_1369792562" CREATED="1313937404029" MODIFIED="1313937407488"
COLOR="#990000">
+<font SIZE="14"/>
+<node TEXT="Data is stored in chunks and written/read by ChunkOutputStream and CunkInputStream
classes. Column qualifiers are long values that start from 1." ID="ID_982985469" CREATED="1313937411962"
MODIFIED="1313937587121" COLOR="#111111">
+<font SIZE="12"/>
+</node>
+</node>
+</node>
+</node>
+<node TEXT="MAILBOXES Table" POSITION="right" ID="ID_134161403" CREATED="1312975780902"
MODIFIED="1312977003712" COLOR="#0033ff" HGAP="52" VSHIFT="-42">
+<font NAME="SansSerif" SIZE="18"/>
+<edge STYLE="sharp_bezier" WIDTH="8"/>
+<node TEXT="Data Column Family" ID="ID_1623128385" CREATED="1312976367661" MODIFIED="1312977631456"
COLOR="#00b439" HGAP="28" VSHIFT="2">
+<font NAME="SansSerif" SIZE="16"/>
+<edge STYLE="bezier" WIDTH="thin"/>
+<node TEXT="Columns" ID="ID_800289567" CREATED="1312977641181" MODIFIED="1312977676246"
COLOR="#990000">
+<font SIZE="14"/>
+<node TEXT="Mailbox Name" ID="ID_846245417" CREATED="1312977678475" MODIFIED="1312977683828"
COLOR="#111111">
+<font SIZE="12"/>
+</node>
+<node TEXT="Mailbox User" ID="ID_1471784167" CREATED="1312977686803" MODIFIED="1312977694196"
COLOR="#111111">
+<font SIZE="12"/>
+</node>
+<node TEXT="Mailbox Namespace" ID="ID_71329885" CREATED="1312977707669" MODIFIED="1312977715693"
COLOR="#111111">
+<font SIZE="12"/>
+</node>
+<node TEXT="Mailbox Last Uid" ID="ID_1107277648" CREATED="1312977718997" MODIFIED="1312977728459"
COLOR="#111111">
+<font SIZE="12"/>
+</node>
+<node TEXT="Mailbox UIDValidity" ID="ID_197426098" CREATED="1312977733117" MODIFIED="1312977743239"
COLOR="#111111">
+<font SIZE="12"/>
+</node>
+<node TEXT="Mailbox Highest ModSeq" ID="ID_891220809" CREATED="1312977746739" MODIFIED="1312977754449"
COLOR="#111111">
+<font SIZE="12"/>
+</node>
+<node TEXT="Mailbox Message Count" ID="ID_682896631" CREATED="1312977757997" MODIFIED="1312978545892"
COLOR="#111111">
+<font NAME="SansSerif" SIZE="12" BOLD="false" ITALIC="false"/>
+</node>
+</node>
+</node>
+<node TEXT="Row Key" ID="ID_1967242452" CREATED="1312977644165" MODIFIED="1312977932107"
COLOR="#00b439">
+<font SIZE="16"/>
+<edge STYLE="bezier" WIDTH="thin"/>
+<node TEXT="Current row key is formed from the mailbox &#xa;ID which is implemented
with UUID" ID="ID_1704975170" CREATED="1312977787637" MODIFIED="1312977942914" COLOR="#990000"
HGAP="25" VSHIFT="17">
+<font SIZE="14"/>
+</node>
+</node>
+</node>
+<node TEXT="SUBSCRIPTIONS Table" POSITION="right" ID="ID_1342965000" CREATED="1312976873222"
MODIFIED="1312977003719" HGAP="58" VSHIFT="-193" COLOR="#0033ff">
+<font SIZE="18"/>
+<edge STYLE="sharp_bezier" WIDTH="8"/>
+<node TEXT="Data Column Family" ID="ID_1208761654" CREATED="1312977580421" MODIFIED="1312977589577"
COLOR="#00b439">
+<font SIZE="16"/>
+<edge STYLE="bezier" WIDTH="thin"/>
+<node TEXT="Columns" ID="ID_391778961" CREATED="1312978085189" MODIFIED="1312978189158"
COLOR="#990000">
+<font SIZE="14"/>
+<node TEXT="Each existing column name represents &#xa;a user subscription to that
particular mailbox." ID="ID_945378667" CREATED="1312978194157" MODIFIED="1312978307747" COLOR="#111111">
+<font SIZE="12"/>
+</node>
+</node>
+</node>
+<node TEXT="Row Key" ID="ID_337360536" CREATED="1312977976917" MODIFIED="1312977980928"
COLOR="#00b439">
+<font SIZE="16"/>
+<edge STYLE="bezier" WIDTH="thin"/>
+<node TEXT="the user name (String)" ID="ID_979588600" CREATED="1312977982538" MODIFIED="1313937720101"
COLOR="#990000" HGAP="22" VSHIFT="10">
+<font SIZE="14"/>
+</node>
+</node>
+</node>
+</node>
+</map>



---------------------------------------------------------------------
To unsubscribe, e-mail: server-dev-unsubscribe@james.apache.org
For additional commands, e-mail: server-dev-help@james.apache.org


Mime
View raw message