You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@omid.apache.org by ik...@apache.org on 2016/04/21 02:03:03 UTC

[46/52] [abbrv] incubator-omid git commit: Add infrastructure to create Omid website

Add infrastructure to create Omid website

The site is generated with the Apache site plugin and uses the
fluido skin, which is based on Twitter's bootstrap. The main pom file
contains its configuration and the site generation has been blocked
in the submodules, as they are not independent projects. All the site-related
configuration and documentation can be found in the "site" directory
and the generated static content to deploy that is generated with
mvn site:site and mvn site:staging is put to the "website" and "website-staging"
directories respectively.

When using mvn site:deploy, the website is directly pushed to the
Apache github repo by using the wagon-git extension (See wagon-git
extension in main pom.xml)

Change-Id: I55cb5bd9a0d1921433aec0ccdf2213f48221ebbe


Project: http://git-wip-us.apache.org/repos/asf/incubator-omid/repo
Commit: http://git-wip-us.apache.org/repos/asf/incubator-omid/commit/05d69d9a
Tree: http://git-wip-us.apache.org/repos/asf/incubator-omid/tree/05d69d9a
Diff: http://git-wip-us.apache.org/repos/asf/incubator-omid/diff/05d69d9a

Branch: refs/heads/master
Commit: 05d69d9a0e6d0e3c2e5f0388d258889f330721b2
Parents: fd8ca18
Author: Francisco Perez-Sorrosal <fp...@yahoo-inc.com>
Authored: Wed Apr 13 14:00:24 2016 -0700
Committer: Francisco Perez-Sorrosal <fp...@yahoo-inc.com>
Committed: Tue Apr 19 13:51:57 2016 -0700

----------------------------------------------------------------------
 .gitignore                                      |   8 +-
 benchmarks/pom.xml                              |   9 +
 codahale-metrics/pom.xml                        |  16 ++
 commit-table/pom.xml                            |   8 +
 common/pom.xml                                  |   8 +
 doc/site/markdown/basic-algorithm.md            |  29 ++
 doc/site/markdown/basic-concepts.md             |  79 ++++++
 doc/site/markdown/basic-examples.md             | 264 +++++++++++++++++++
 doc/site/markdown/client-failure-management.md  |  30 +++
 doc/site/markdown/coding-guide-and-style.md     |  56 ++++
 doc/site/markdown/index.md                      |  94 +++++++
 doc/site/markdown/mailing-lists.md              |  13 +
 doc/site/markdown/omid-components.md            |  96 +++++++
 doc/site/markdown/quickstart.md                 | 203 ++++++++++++++
 doc/site/resources/css/site.css                 | 103 ++++++++
 doc/site/resources/images/about-omid.png        | Bin 0 -> 3402 bytes
 doc/site/resources/images/architecture.png      | Bin 0 -> 77416 bytes
 doc/site/resources/images/basic-alg.png         | Bin 0 -> 30454 bytes
 doc/site/resources/images/contact.png           | Bin 0 -> 2899 bytes
 doc/site/resources/images/getting-started.png   | Bin 0 -> 4328 bytes
 .../resources/images/omid-logo-transparent.png  | Bin 0 -> 13867 bytes
 doc/site/resources/images/omid-logo.png         | Bin 0 -> 23473 bytes
 .../resources/images/snapshot-isolation.png     | Bin 0 -> 22535 bytes
 .../images/technical-documentation.png          | Bin 0 -> 2857 bytes
 doc/site/site.xml                               |  85 ++++++
 examples/pom.xml                                |   8 +
 hbase-client/pom.xml                            |   7 +
 hbase-commit-table/pom.xml                      |  16 ++
 hbase-common/pom.xml                            |  16 ++
 hbase-coprocessor/pom.xml                       |   8 +
 hbase-shims/pom.xml                             |  16 ++
 hbase-tools/pom.xml                             |  16 ++
 metrics/pom.xml                                 |  16 ++
 pom.xml                                         | 111 +++++++-
 statemachine/pom.xml                            |  16 ++
 timestamp-storage/pom.xml                       |  16 ++
 transaction-client/pom.xml                      |  16 ++
 tso-server/pom.xml                              |   8 +
 38 files changed, 1362 insertions(+), 9 deletions(-)
----------------------------------------------------------------------


http://git-wip-us.apache.org/repos/asf/incubator-omid/blob/05d69d9a/.gitignore
----------------------------------------------------------------------
diff --git a/.gitignore b/.gitignore
index 03517e6..c5d7a96 100644
--- a/.gitignore
+++ b/.gitignore
@@ -15,6 +15,12 @@ lib/
 *~
 *.swp
 
+# Generated website files
+generated-website/
+generated-website-staging/
+
 # TestNG
 */test-output/
-common/src/main/java/org/apache/omid/proto/
+
+# Protobuf generated classes
+common/src/main/java/com/yahoo/omid/proto/

http://git-wip-us.apache.org/repos/asf/incubator-omid/blob/05d69d9a/benchmarks/pom.xml
----------------------------------------------------------------------
diff --git a/benchmarks/pom.xml b/benchmarks/pom.xml
index 8ec06db..1b8d49d 100644
--- a/benchmarks/pom.xml
+++ b/benchmarks/pom.xml
@@ -102,6 +102,15 @@
                 </configuration>
             </plugin>
 
+            <!-- Disable maven site plugin -->
+            <plugin>
+                <artifactId>maven-site-plugin</artifactId>
+                <configuration>
+                    <skip>true</skip>
+                </configuration>
+            </plugin>
+
+
         </plugins>
 
     </build>

http://git-wip-us.apache.org/repos/asf/incubator-omid/blob/05d69d9a/codahale-metrics/pom.xml
----------------------------------------------------------------------
diff --git a/codahale-metrics/pom.xml b/codahale-metrics/pom.xml
index a34204f..1fddbcd 100644
--- a/codahale-metrics/pom.xml
+++ b/codahale-metrics/pom.xml
@@ -46,4 +46,20 @@
 
     </dependencies>
 
+    <build>
+
+        <plugins>
+
+            <!-- Disable maven site plugin -->
+            <plugin>
+                <artifactId>maven-site-plugin</artifactId>
+                <configuration>
+                    <skip>true</skip>
+                </configuration>
+            </plugin>
+
+        </plugins>
+
+    </build>
+
 </project>
\ No newline at end of file

http://git-wip-us.apache.org/repos/asf/incubator-omid/blob/05d69d9a/commit-table/pom.xml
----------------------------------------------------------------------
diff --git a/commit-table/pom.xml b/commit-table/pom.xml
index ad5c100..47afe60 100644
--- a/commit-table/pom.xml
+++ b/commit-table/pom.xml
@@ -55,6 +55,14 @@
                 </executions>
             </plugin>
 
+            <!-- Disable maven site plugin -->
+            <plugin>
+                <artifactId>maven-site-plugin</artifactId>
+                <configuration>
+                    <skip>true</skip>
+                </configuration>
+            </plugin>
+
         </plugins>
 
     </build>

http://git-wip-us.apache.org/repos/asf/incubator-omid/blob/05d69d9a/common/pom.xml
----------------------------------------------------------------------
diff --git a/common/pom.xml b/common/pom.xml
index d776e2b..3952b3d 100644
--- a/common/pom.xml
+++ b/common/pom.xml
@@ -120,6 +120,14 @@
                 </executions>
             </plugin>
 
+            <!-- Disable maven site plugin -->
+            <plugin>
+                <artifactId>maven-site-plugin</artifactId>
+                <configuration>
+                    <skip>true</skip>
+                </configuration>
+            </plugin>
+
         </plugins>
     </build>
 

http://git-wip-us.apache.org/repos/asf/incubator-omid/blob/05d69d9a/doc/site/markdown/basic-algorithm.md
----------------------------------------------------------------------
diff --git a/doc/site/markdown/basic-algorithm.md b/doc/site/markdown/basic-algorithm.md
new file mode 100644
index 0000000..4b0d4cd
--- /dev/null
+++ b/doc/site/markdown/basic-algorithm.md
@@ -0,0 +1,29 @@
+# Basic Transaction Algorithm
+
+A simplified version of the algorithm for performing transactional operations in a non-faulty scenario is depicted 
+in the following figure:
+
+![Basic algorithm for managing transactions](images/basic-alg.png)
+
+Initially, a user application (not shown in the figure for the sake of simplicity) starts a new transaction using 
+the Transactional Client API, which in turn acquires a start timestamp from the TSO.
+
+Then, the user application logic, also through the Transactional Client API, performs a series of read and write 
+operations in the snapshot provided by the transactional context recently acquired.
+
+In the case of reads, if the cells read have shadow cells and their value is in the snapshot for the transaction, 
+their value is taken directly. If the commit timestamp is missed in the shadow cell, the Transactional Client will 
+try to find it in the commit table. If the commit timestamp is found in there and the cell value is in the snapshot, 
+the cell value is taken. However, if the commit timestamp is missed, the shadow cell is re-checked. If it still does 
+not exist, the cell is ignored and another version that matches the snapshot will be retrieved from the datastore.
+
+When the application commits the transaction, the Transactional Client contacts the TSO in order to check the possible 
+conflicts of the transaction. If the writeset does not conflict with other concurrent transactions, the transaction is
+committed, the TSO updates the commit table and replies back to the Transactional Client, which in turn, returns the 
+control to the user application.
+
+Finally, the Transactional Client, on receiving the commit acknowledgement, updates the shadow cells with the required 
+data. After this, it can also remove safely the entry added by the TSO in the commit table.
+
+In case the TSO detects conflicts, the transaction is aborted (not shown in the figure), the Transactional Client will 
+clean up the data written to the datastore, and will inform the user application throwing a rollback exception.
\ No newline at end of file

http://git-wip-us.apache.org/repos/asf/incubator-omid/blob/05d69d9a/doc/site/markdown/basic-concepts.md
----------------------------------------------------------------------
diff --git a/doc/site/markdown/basic-concepts.md b/doc/site/markdown/basic-concepts.md
new file mode 100644
index 0000000..2aaa35d
--- /dev/null
+++ b/doc/site/markdown/basic-concepts.md
@@ -0,0 +1,79 @@
+# Basic Concepts
+
+Omid started as a research project in 2011 at Yahoo Labs, with the aim of adding transactions to HBase.
+While Omid was designed with HBase in mind, we have been careful to not bind ourselves to a particular big 
+datastore. As a consequence, Omid can be potentially adapted to be used with any other multiversioned key-value
+datastore with some additional extensions.
+
+In the next sections, we introduce two basic concepts that have driven Omid's design.
+
+## Locking vs Lock-Free
+
+When solving the **conflict detection** problem in transactional systems, there are two main approaches that
+transaction managers may implement: *locking* and *lock-free*.
+
+With a locking mechanism, the client managing the transaction attempts to acquire a lock on each cell in the writeset
+(the set of changes in data performed by the transaction) before committing. If it succeeds in acquiring the lock, and
+no other transaction has written to the cells since the start of the client's transaction, it can commit, as it knows 
+that no other transaction can write to the cell after the lock has been acquired. Once the commit has completed, the 
+client can release the locks on the cells. If the client fails to acquire the lock on any cell or some other transaction
+has written to it since the start of the transaction, then the transaction is aborted. 
+
+For example, [Google Percolator](http://research.google.com/pubs/pub36726.html) uses a locking mechanism in its 
+transactional system, and so do other subsequent academic and open source transaction managers for NoSQL datastores.
+
+Locking systems can be problematic in a distributed setting and in the presence of process failures. If a client fails
+while holding a lock another process must clean up the locks held by that client. However, it is impossible to detect 
+reliably if a client has failed or is just being slow. Normally this is dealt with using timeouts, after which the 
+client is invalidated and its locks released. However, the timeout must be high enough to ensure that valid clients 
+are not invalidated.
+
+In lock-based systems, it is also possible for two transactions to repeatedly conflict with each other over multiple 
+retries as there is no defined order in which locks must be acquired.
+
+In a lock-free implementation, this type of livelock is not possible. Transactions can always make progress. A lock-free
+implementation has a centralized conflict-detection mechanism. To commit a transaction, each transaction writeset is sent
+to this mechanism to check for conflicts with the writesets of other concurrent transactions. If none of those transaction
+has written to any of the cells of the writeset since the start of the transaction, the transaction can commit. Otherwise
+the transaction is aborted. Omid uses a lock-free mechanism for conflict detection.
+
+## Snapshot Isolation
+
+Isolation in ACID refers to the ability for multiple clients to act on a database without interfering with each other. 
+There are various isolation levels, each making a different tradeoff between isolation and concurrent access to the database. 
+Omid is only concerned with Snapshot Isolation.
+
+**[Snapshot Isolation (SI)](http://research.microsoft.com/pubs/69541/tr-95-51.pdf)** provides the users of a database with 
+a consistent view of the database and the ability to detect write-write conficts between transactions. When a client starts a 
+transaction, it is given a *"snapshot view"* of the database. A value read from a cell within this snapshot will always be 
+the same, unless the transaction itself updates the cell.
+
+To successfully commit a transaction within snapshot isolation, the system must ensure that no other transaction has written to 
+any of the transaction's written cells (that is, its writeset) since the start of the transaction.
+
+That is, transactions with SI guarantees should read from their own data snapshot, being a data snapshot:
+
+* Immutable
+* Identified by creation time
+* Containing values committed before creation time
+
+In Omid, transactions conflict iff:
+
+* Overlap in time, and...
+* ... write to the same cell of a particular row
+
+The following figure describes SI with an example:
+![Snapshot Isolation](images/snapshot-isolation.png)
+
+As depicted in the figure, transaction T2 overlaps in time with T1 and T3, but spatially:
+
+* T1 ∩ T2 = ∅
+* T2 ∩ T3 = { R4 }
+
+So, transactions T1 and T2, despite overlaping in time, they do not overlap in the elements they modify, so they do not conflict. 
+However, transactions T2 and T3 have a conflict because they overlap both in space (both modify R4) and time. Finally, Transaction 
+T4 does not has conflicts with other transactions.
+
+Compared to other isolation levels, SI offers good-enough consistency guarantees -although some anomalies may appear on data, e.g. 
+write-skew- and performance, mainly due to the fact transactions are not aborted due to read-write conflicts. We took this into 
+consideration and we decided to implement SI as the default isolation level for Omid.

http://git-wip-us.apache.org/repos/asf/incubator-omid/blob/05d69d9a/doc/site/markdown/basic-examples.md
----------------------------------------------------------------------
diff --git a/doc/site/markdown/basic-examples.md b/doc/site/markdown/basic-examples.md
new file mode 100644
index 0000000..3a0b679
--- /dev/null
+++ b/doc/site/markdown/basic-examples.md
@@ -0,0 +1,264 @@
+# Code Examples
+
+This section guides the developer of Omid-based transactional applications over the different steps required to 
+execute multi-row transactions on HBase and the different APIs involved in the process.
+
+## Transactional Contexts and Operations with Omid
+
+Applications requiring transactions will use the interfaces provided by the Omid _Transactional Client_. These interfaces
+are provided by the _TransactionManager_ and _TTable_ classes described below.
+
+When starting a transaction, the Omid _Transactional Client_ requests a _start timestamp_ from the _TSO_. This 
+timestamp marks the beginning of a transactional context, that is, a transaction. From that point on, the client 
+application can perform transactional read and write operations on the data source:
+
+* **Read Ops**. The client first checks if the cell has a _Shadow Cell (SC)_. If the cell has a _SC_ and the 
+_commit timestamp_ is lower than the _start timestamp_ of the reading transaction, then the client can "see" the 
+cell, that is, it's in its snapshot. If there is no _SC_, the _Commit Table (CT)_ is consulted to find the 
+_commit timestamp_ of the cell. If the _commit timestamp_ does not exist in the _CT_, then the cell is assumed to 
+below to an aborted transaction.
+* **Write Ops**. The client directly writes optimistically in the data source any data cells it wishes adding 
+the _start timestamp_ as the version of each data cell. The metadata of each cell written is added also to the 
+so-called _write-set_ of the transaction.
+
+To commit a transaction, the client sends the _write-set_ of the transaction to the _TSO_, which will check for 
+conflicts in the transaction _write-set_ with other transactions executing concurrently:
+
+* **Conflicts**. The transaction is aborted and the _roll-back_ outcome is returned to the client.
+* **No conflicts**. The TSO assigns a _commit timestamp_ to the transaction, writes the mapping 
+_start timestamp -> commit timestamp_ to the _CT_ and returns _commit_ as an outcome for the transaction to the client.
+
+On receiving the outcome for the transaction, the client:
+
+* **For roll-backs**, it clears the written cells.
+* **For commits**, it updates the _shadow cells_ for the cells in the _write-set_ and clears the entry for that
+transaction in the _CT_.
+
+The following sections show step-by-step the process for creating transactions in client applications with the Omid APIs.
+
+## Obtaining the Transaction Manager
+
+In order to use transactions, a client application needs to create an instance of the `TransactionManager` interface
+with is part of the Transactional Client described in the architecture. The current Omid version offers an 
+implementation of a transaction manager for HBase. Please, make sure `core-site.xml` and `hbase-site.xml` HBase 
+configuration files are present in the CLASSPATH of your client application.
+
+To create a transaction manager just add the following code to your application:
+
+```java
+
+    ...
+    TransactionManager tm = HBaseTransactionManager.newInstance();
+    ...
+
+```
+
+If nothing is specified, the HBase transaction manager instance is created with default configuration settings 
+loaded from the `default-hbase-omid-client-config.yml` file included in the HBase Omid client jar. To change the 
+client default settings, there are two possibilities:
+
+1) Put the specific configuration settings in a file named `hbase-omid-client-config.yml` and include it in the 
+CLASSPATH. The file has the following format:
+
+```
+
+# HBase related
+commitTableName: MY_OWN_OMID_COMMIT_TABLE_NAME
+
+# TSO/ZK connection
+omidClientConfiguration: !!com.yahoo.omid.tso.client.OmidClientConfiguration
+    connectionType: !!com.yahoo.omid.tso.client.OmidClientConfiguration$ConnType ZK
+    connectionString: "my_zk_cluster_conn_string"
+
+# Instrumentation
+metrics: !!com.yahoo.omid.metrics.NullMetricsProvider [ ]
+
+```
+
+2) Create an instance of the `HBaseOmidClientConfiguration` class in the application code and pass it in the creation
+of the transaction manager instance:
+
+```java
+    ...    
+    HBaseOmidClientConfiguration omidClientConfiguration = new HBaseOmidClientConfiguration();
+    omidClientConfiguration.setConnectionType(DIRECT);
+    omidClientConfiguration.setConnectionString("my_tso_server_host:54758");
+    omidClientConfiguration.setRetryDelayMs(3000);
+    
+    TransactionManager tm = HBaseTransactionManager.newInstance(omidClientConfiguration);
+    ...
+```
+
+Please, refer to the [ConfigurationExample](https://github.com/yahoo/omid/blob/master/examples/src/main/java/com/yahoo/omid/examples/ConfigurationExample.java)
+in the source code to experiment with the configuration options.
+
+## Creating Transactions
+
+Once the `TransactionManager` is created, client applications can use its interface to demarcate transactional boundaries.
+
+In order to create a transaction the `TransactionManager.begin()` method is used:
+
+```java
+
+    ...
+    Transaction tx = tm.begin();
+    ...
+
+```
+
+The transaction manager will return an instance of the `Transaction` interface representing the recently created 
+transaction. This instance is necessary to instruct the operations on the data source, in which transactional context
+they should operate (See next section).
+
+## Executing Transactional Operations
+
+In order to perform transaction operations on data, the client application requires to use a wrapper on the HBase's 
+`HTableInterface` abstraction. The wrapper is called `TTable` and is also part of what is described as Transactional
+Client in the Omid architecture (See section [[About Omid]]). `TTable` basically offers the same interface as 
+`HTableInterface` enhanced with a parameter representing the transactional context. As was previously described, a
+`Transaction` instance is obtained on return of `TransactionManager.begin()` method calls.
+
+```java
+
+    ...
+    TTable txTable = new TTable(conf, "EXAMPLE_TABLE"); 
+    ...
+
+```
+
+Once the access point to the data has been created, applications can use it to trigger transactional operations:
+
+```java
+
+    private final byte[] family = Bytes.toBytes("EXAMPLE_CF");    
+    private final byte[] qualifier = Bytes.toBytes("foo");
+    ...
+    
+    // Retrieve transactionally a specific cell
+    Get get = new Get(Bytes.toBytes("EXAMPLE_ROW");
+    get.add(family, qualifier);
+    Result txGetResult = txTable.get(tx, get);
+    ...
+
+    // Add a new cell value inside a transactional context
+    Put updatedRow = new Put(Bytes.toBytes("EXAMPLE_ROW");
+    updatedRow.add(family, qualifier, Bytes.toBytes("Another_value"));
+    txTable.put(tx, updatedRow);
+    ...
+
+```
+
+## Committing and Aborting Transactions
+
+Once the client application has finished reading/writting from/into the datasource, it must decide whether to make the
+changes visible or to discard them. In order to do this, it must instruct the Omid `TransactionManager` either to
+`commit()` or to `rollback()` the transactional context where the changes were produced. In case of commit, the TSO
+server will be notified to perform the SI validation phase. If the validation succeeds the changes will be visible to
+new transactions started from that point on. Otherwise, it will roll back the changes.
+
+In order to commit the data, the client application should do something like this:
+
+```java
+
+    ...
+    try {
+        ...
+        tm.commit(tx);
+    } catch (RollbackException e) {
+
+        // Here the transaction was rolled-back when
+        // trying to commit due to conflicts with other
+        // some other concurrent transaction
+        // 
+        // The client application should do whatever is
+        // required according to its business logic
+        ...
+    }
+
+```
+
+A transaction can also be specifically aborted, for example if something goes wrong when executing the business logic:
+
+```java
+
+    ...
+    try {
+        ...
+        if( ! some_business_logic_condition ) {
+            tm.rollback(tx);
+            throw AnyApplicationException("Changes aborted due to...");
+        } 
+        tm.commit(tx);
+    } catch (RollbackException e) {
+        ...
+    }
+
+```
+
+## Complete Example
+
+The following example summarizes the steps described above.
+
+```java
+
+import org.apache.hadoop.hbase.client.Put;
+import org.apache.hadoop.hbase.util.Bytes;
+import com.yahoo.omid.transaction.HBaseTransactionManager;
+import com.yahoo.omid.transaction.TTable;
+import com.yahoo.omid.transaction.Transaction;
+import com.yahoo.omid.transaction.TransactionManager;
+
+public class Example {
+
+    public static final byte[] exampleRow = Bytes.toBytes("EXAMPLE_ROW");
+    public static final byte[] family = Bytes.toBytes("EXAMPLE_CF");
+    public static final byte[] qualifier = Bytes.toBytes("foo");
+    public static final byte[] dataValueToAvoid = Bytes.toBytes("valToAvoid");
+    public static final byte[] dataValue = Bytes.toBytes("val");
+
+    public static void main(String[] args) throws Exception {
+
+        try (TransactionManager tm = HBaseTransactionManager.newInstance();
+             TTable txTable = new TTable("EXAMPLE_TABLE")) {
+
+            Transaction tx = tm.begin();
+            System.out.printl("Transaction started");
+
+            // Retrieve data transactionally
+            Get get = new Get(exampleRow);
+            get.add(family, qualifier);
+            Result txGetResult = txTable.get(tx, get);
+            byte[] retrievedValue = txGetResult.getValue(family, qualifier);
+
+            // Add a condition in the application logic to show explicit transaction
+            // aborts just for illustrative purposes
+            if (Bytes.equals(retrievedValue, dataValueToAvoid)) {
+                tm.rollback(tx);
+                throw new RuntimeException("Illegal value found in database!");
+            }
+
+            // Otherwise, add a value in other column and try to commit the transaction
+            try {
+                Put putOnRow = new Put(exampleRow);
+                putOnRow.add(family, qualifier, dataValue);
+        	    txTable.put(tx, putOnRow);
+                tm.commit(tx);
+                System.out.println("Transaction committed. New value written to example row");
+            } catch(RollbackException e) {
+                System.out.println("Transaction aborted due to conflicts. Changes to row aborted");
+            }
+
+        }
+
+    }
+
+}
+
+```
+
+## Additional Examples
+
+The `examples` module contains [complete examples](https://github.com/yahoo/omid/tree/master/examples/src/main/java/com/yahoo/omid/examples) 
+showing the Omid functionality that can be executed in your Omid+HBase environment. Just clone the Omid project, go
+to the `examples` module and execute `mvn clean package` to create a tar.gz file that includes all the examples. 
+In order to execute each example, just execute the `run.sh` script and follow the instructions.
\ No newline at end of file

http://git-wip-us.apache.org/repos/asf/incubator-omid/blob/05d69d9a/doc/site/markdown/client-failure-management.md
----------------------------------------------------------------------
diff --git a/doc/site/markdown/client-failure-management.md b/doc/site/markdown/client-failure-management.md
new file mode 100644
index 0000000..9ca984e
--- /dev/null
+++ b/doc/site/markdown/client-failure-management.md
@@ -0,0 +1,30 @@
+# Management of Client Failures
+
+Upon user application crashes, Transactional Clients may leave some orphaned data in the datastore, even though 
+the data in the datastore is kept in a consistent state. When another Transactional Client comes across this data, 
+it will check whether the associated transaction was committed or not. If the data belongs to a transaction which 
+has not been committed, and the transaction id is lower than the low watermark, then the data is deleted, since it 
+belongs to a transaction that can never be committed.
+
+If data belongs to a transaction that was already committed, this means that the Transactional Client crashed between 
+sending the commit request and completing the transaction in the commit table. This means that shadow cells have not 
+been deleted. The Transactional Client reading  will write the shadow cell for the orphan data. However, it is not able 
+to complete the transaction in the commit table as it can not guarantee that shadow cells have been written for all cells 
+in the transaction, since only the crashed client knew which cells it had written to. Consequently, this means that the 
+commit table can grow indefinitely. Initially, this flaw should not cause many problems, since:
+
+* the amount of data stored is small (16 bytes)
+* the number of clients expected to fail between commit and completion is low
+* the data is stored on persistent storage. It is not bounded by memory.
+
+For example, if 1% of all Transactional Clients are expected to crash at this exact point in time, while the system is 
+writing, on average, 100,000 transactions per second, the amount of data required to store these commit table entries 
+for a whole year would be around 500 GB. A single disk could hold this.
+
+In any case, it would be desirable a mechanism to sanitize the Commit Table. If we can guarantee that all orphan data 
+has been cleaned-up up to a certain low watermark, then all commit table entries whose start timestamp is lower than 
+this low watermark can be deleted.
+
+In the case of HBase, there is already have a compactor which proactively cleans up transactions older than the low 
+watermark. This could easily be extended to store the low watermark for each region it compacts, so then another process 
+could clean up the commit table based on the minimum low watermark that was stored.
\ No newline at end of file

http://git-wip-us.apache.org/repos/asf/incubator-omid/blob/05d69d9a/doc/site/markdown/coding-guide-and-style.md
----------------------------------------------------------------------
diff --git a/doc/site/markdown/coding-guide-and-style.md b/doc/site/markdown/coding-guide-and-style.md
new file mode 100644
index 0000000..504094f
--- /dev/null
+++ b/doc/site/markdown/coding-guide-and-style.md
@@ -0,0 +1,56 @@
+# Coding Guide
+
+The basic principle is to always write code that is testable, easy to understand, extensible, resistant to bugs. Code is written once but read by many people so we need to focus also on the next person that will read it:
+
+* Keep it simple
+* Test your code
+* [Single responsibility principle](http://programmer.97things.oreilly.com/wiki/index.php/The_Single_Responsibility_Principle)
+* Try to maintain components [loosely coupled](http://programmer.97things.oreilly.com/wiki/index.php/Cohesion_and_Coupling_matter)
+* Do not abuse of comments:
+    * Choose names that reveal intent for modules, packages, classes, methods, variables, constants, etc.
+    * Do not use comments for excuse bad code or when appropriate naming is enough
+    * Comments are good when they provide context (Explain why, not how) or explain things that happen in the real world
+* Follow the [Boy Scout Rule](http://programmer.97things.oreilly.com/wiki/index.php/The_Boy_Scout_Rule)
+* Don't reinvent the wheel:
+    * Use patterns when possible
+    * Use proven libraries for (e.g. Apache commons, guava, etc.)
+* Refactor when necessary
+    * When adding a new feature and the context is not appropriate, refactor first in a separate commit/s
+
+# Coding Style
+Omid coding style shoud follow [Oracle's Code Conventions for Java](http://www.oracle.com/technetwork/java/javase/documentation/codeconvtoc-136057.html), with the following modifications:
+
+* Lines can be up to 120 characters long
+* Indentation should be:
+    * 4 spaces
+    * Tabs not allowed
+* Always use curly braces for code blocks, even for single-line 'ifs' and 'elses'
+* Do not include @author tags in any javadoc
+* Use TestNG for testing
+* Import ordering and spacing:
+    * Try to organize imports alphabetically in blocks with this format:
+        * A first block of imports from external libraries
+        * A second block of imports from Java libraries
+        * Finally a third block with `static` imports
+    * Example:
+  
+```java
+    import com.google.common.base.Charsets;
+    import com.yahoo.omid.zk.ZKUtils.ZKException;
+    import com.yahoo.statemachine.StateMachine.Event;
+    import com.yahoo.statemachine.StateMachine.Fsm;
+    import com.yahoo.statemachine.StateMachine.State;
+    import org.apache.commons.configuration.Configuration;
+    import org.slf4j.Logger;
+    import org.slf4j.LoggerFactory;
+    ...
+
+    import java.io.IOException;
+    import java.net.InetSocketAddress;
+    import java.util.ArrayDeque;
+    ...
+
+    import static com.yahoo.omid.ZKConstants.CURRENT_TSO_PATH;
+    import static com.yahoo.omid.zk.ZKUtils.provideZookeeperClient;
+    ...
+```

http://git-wip-us.apache.org/repos/asf/incubator-omid/blob/05d69d9a/doc/site/markdown/index.md
----------------------------------------------------------------------
diff --git a/doc/site/markdown/index.md b/doc/site/markdown/index.md
new file mode 100644
index 0000000..207d18c
--- /dev/null
+++ b/doc/site/markdown/index.md
@@ -0,0 +1,94 @@
+# What is Omid?
+
+**Apache Omid (Optimistically transaction Management In Datastores)** is a flexible, reliable, high performant
+and scalable transactional framework that allows Big Data applications to execute ACID transactions on top of 
+MVCC key/value NoSQL datastores.
+
+The current implementation provides multi-row transactions on top of Apache HBase, but Omid's design is 
+flexible enough to support other datastore implementations as long as they provide MVCC features in their API.
+
+The following sections introduce the motivation behind Omid and its high-level architecture and 
+basic concepts. If you want to jump to a more hands-on approach to Omid, please jump to the [[Quickstart]] section. 
+On the other hand, if you want more information about Omid's design and its internals, please refer to the 
+sections in the Technical Documentation menuf.
+
+# Why Omid?
+
+A *transaction* comprises a set of data manipulation operations on the state of a database system managed as a single 
+unit of work, so all the operations must either entirely be completed (committed) or have no effect (aborted). In other 
+words, partial executions of the transaction are not permitted (nor desired in general) because the final state of the 
+database can be corrupted.
+
+Without the support for transactions, developers are burdened with ensuring atomic execution of scattered changes in 
+data upon failures as well as when there are concurrent accesses to the same data by multiple clients.
+
+In order to process transactions, database systems provide a specific component called the *Transaction Manager*. 
+The goal of transaction managers in general is to guarantee the so-called **ACID properties** of transactions: 
+*Atomicity*, *Consistency*, *Isolation* and *Durability*. However, ACID properties are hard to scale when databases
+have to deal with very large amounts of data and thousands of concurrent users, because the data must be partitioned, 
+distributed and replicated. That was the main reason why, with the advent of NoSQL big data stores, transactions were
+initially left out of the equation. HBase, Dynamo, BigTable, PNUTS, Cassandra, etc. lacked this precious feature 
+initially. However, with the popularization of NoSQL big datastores in many areas of the industry, the need for 
+transactions has become a must for certain applications.
+
+Omid fills this gap and provides lock-free transactional support on top of HBase with snapshot isolation guarantees.
+Omid enables BigData applications to benefit from the best of both worlds: the scalability provided by NoSQL 
+datastores such as HBase, and the concurrency and atomicity provided by transaction processing systems.
+
+## Benefits
+
+The benefits that Omid provides include:
+
+1. Omid allows multi-row/multi-table transactions on top of HBase.
+2. Omid is lock-free. In lock-based approaches, the locks on data that are held by the incomplete transactions of 
+a failed client prevent others from progressing. In Omid, if a client is slow or faulty, it does not slow down the 
+other clients.
+3. Omid provides [Snapshot Isolation](basic-concepts.html#Snapshot_Isolation) (SI) guarantees.
+4. Omid does not require any modification into HBase code. All the transactional logic is implemented in the framework
+components.
+5. Omid does not require any change into HBase table schema. Omid uses the HBase metadata -the cell timestamp in 
+particular- to store the transaction timestamp of each value inserted, updated or deleted in a cell. This enables 
+concurrent transactions to read data from the right snapshot.
+6. Omid is being used internally at Yahoo in production systems, exhibiting good performance and reliability.
+
+# Architecture Overview
+
+The main architectural components are represented in the figure below and described briefly below in the following
+paragraphs.
+
+![Omid's architecture](images/architecture.png)
+
+For a detailed picture of the Omid architecture, please refer to the [[Omid Components]] section in the Technical Documentation.
+
+## Component Roles
+
+Omid benefits from a centralized scheme in which a single server, called Transactional Status Oracle (TSO), monitors the
+modified rows/cells by transactions and use that to detect write-write conflicts. 
+
+User applications are allowed to begin, commit or abort transactions by means of Transactional Clients (TC), which 
+enable remote communication to the TSO and allow to perform transactional operations on the data stored in the datastore.
+
+When a transaction is created, a unique start timestamp is assigned by the Timestamp Oracle (TO). This start timestamp
+serves as a transaction identifier and is used by the TSO to guarantee SI by detecting conflicts in the writesset of 
+a committing transaction with other concurrent transactions. Upon, finishing conflict detection successfully, the 
+TSO assigns the transaction a commit timestamp and writes the mapping start/commit timestamp in the Commit Table (CT)
+before returning the response to the client. When receiving the response. the transactional client, adds a Shadow 
+Cell (SC) per cell in the transaction writeset in order to allow to resolve the right snapshot for further read 
+operations without disturbing the TSO.
+
+The main functionality provided by each component depicted in the figure above can be summarized as follows:
+
+* **Timestamp Oracle (TO)** It assigns the _start_ and _commit timestamps_ that demarcate transactional contexts.
+* **Transaction Status Oracle (TSO)**. Its the central element of the Omid architecture on the server-side. Its main
+task is to resolve conflicts between concurrent transactions.
+* **Commit Table (CT)** It stores a temporary mapping from the start timestamp to the commit timestamp of every 
+committed transaction.
+* **Transactional Client (TC)** It allows client applications to demarcate transaction boundaries through the so-called
+_Transaction Manager_ and to perform transactional read/write operations on data through _Transactional Tables_.
+* **Shadow Cells (SC)** These special metadata cells are written alongside data cells in the data store to allow the
+transactional clients to resolve read snapshots without consulting the Commit Table. They contain the transactional 
+boundaries of the last transaction in writing to the data cell.
+
+For a more in-depth description of how Omid works, please refer to the sections in the Technical Documentation menu.
+
+**Do you want to try Omid now?** Please, go to the [[Quickstart]] section.

http://git-wip-us.apache.org/repos/asf/incubator-omid/blob/05d69d9a/doc/site/markdown/mailing-lists.md
----------------------------------------------------------------------
diff --git a/doc/site/markdown/mailing-lists.md b/doc/site/markdown/mailing-lists.md
new file mode 100644
index 0000000..adddf1d
--- /dev/null
+++ b/doc/site/markdown/mailing-lists.md
@@ -0,0 +1,13 @@
+# Mailing Lists @ Apache Incubator
+
+| Developers                       | Commits                               |
+| -------------------------------- | --------------------------------------|
+| dev@omid.incubator.apache.org    | commits@omid.incubator.apache.org     |
+
+## Subscribe
+
+In order to subscribe to a list, please add the '-subscribe' suffix to the identifier in each list and send an email. 
+For example use dev-subscribe@omid.incubator.apache.org to subscribe to the list of developers.
+
+## Unsubscribe
+Use the '-unsubscribe' suffix to unsubscribe from a list.
\ No newline at end of file

http://git-wip-us.apache.org/repos/asf/incubator-omid/blob/05d69d9a/doc/site/markdown/omid-components.md
----------------------------------------------------------------------
diff --git a/doc/site/markdown/omid-components.md b/doc/site/markdown/omid-components.md
new file mode 100644
index 0000000..2739a23
--- /dev/null
+++ b/doc/site/markdown/omid-components.md
@@ -0,0 +1,96 @@
+# Omid Architecture and Component Description
+
+The following figure depicts the current Omid architecture presented in the section presenting Omid:
+
+![Omid's architecture](images/architecture.png)
+
+The following sections describe more in deep the most important components and elements in the Omid architecture.
+
+## Transactional Clients (TCs)
+**Transactional Clients (TCs)** are the entry point to user applications using transactions with Omid. They allow 
+applications to *demarcate transactional boundaries* and *read/write transactionally from/to the data source*, 
+HBase in this case.
+
+There are two main interfaces/classes that compose the Transactional Client:
+
+1. The Transaction Manager interface (represented by the `TransactionManager` interface in the current implementation): 
+Allows user applications to demarcate transactional contexts, providing methods to begin(), commit(), rollback() 
+and markRollbackOnly() transactions.
+2. The Data Operation interface (represented by the `TTable` class in the HBase implementation): Allows user applications 
+to trigger transactional operations to the datasource. For example in the HBase, put, get and scan operations.
+  
+Examples about how to add transactions using these interfaces are described in the [[Basic Examples]] section.
+
+## Timestamp Oracle (TO)
+The single responsibility of the Timestamp Oracle is to manage transaction timestamps. Transaction timestamps serve as a 
+logical clock and are used mainly to preserve the time-related guarantees required for Snapshot Isolation.
+
+The TO allocates and delivers transaction timestamps when required by the TSO. To achieve this task, it maintains a 
+monotonically increasing counter. Transaction timestamps are allocated when a transaction begins and right after a transaction 
+willing to commit has passed the writeset validation. The start timestamp is also used as transaction identifier. 
+
+In order to guarantee that all timestamps are unique, the TO has to persist a value after every N timestamp allocations. This 
+value will be used for recovering the TSO in case of crashes. The value persisted is the current timestamp value plus N, N being 
+a congurable property. From that point on, the TO is then free to safely allocate timestamps up to that value.
+
+In the current implementation, the maximum allocated timestamp value can be persisted/stored in:
+
+* ZooKeeper
+* In its own HBase table
+
+## The Server Oracle (TSO)
+The TSO is the core component in Omid. There is a single instance of the TSO (Although a high availability protocol is currently 
+a WIP). Its unique responsibility is to resolve conflicts between concurrent transactions. The TSO must maintain the last allocated 
+timestamp, the so-called low watermark and a conflict map for detecting conflicts in the writesets of concurrent transactions. It 
+also delegates the update and persistence of a list of committed transactions to the commit table component (see Figure). Aborted and 
+uncommitted transactions are not tracked. Maintaining the TSO state to the minimum allows us to avoid contention in many cases and 
+provides fast recovery upon crashes.
+
+As mentioned before, conflict resolution for transactions is the primary function of the TSO. To achieve this task, it uses a large 
+map structure of (cellId -> lastCommittedTransaction) pairs called the conflict map. When the client commits a transaction, it sends 
+the cell ids of the cells being committed, i.e. its writeset, to the TSO, which checks possible conflicts when other transactions 
+that were concurrent using the conflict map. If no conflicts are found, a commit timestamp is allocated and the lastCommittedTransaction 
+for each cell id in the transaction is updated to this timestamp.
+
+Confict detection is implemented by comparing the hash of the cell ids in the writeset, not the actual cell id value. As
+the conflict map does not have a one to one mapping with each cell in cell in the database, this means that there's a possibility of 
+false aborts in the system. The probability of false aborts is a variant of the [birthday problem](http://en.wikipedia.org/wiki/Birthday_problem) 
+and basically translates into the fact that long-running transactions are more likely to have false aborts.
+
+The low watermark is only updated when a value is replaced in the conflict map. The current implementation of the conflict map uses an 
+open addressing type mechanism, using linear probing with a limit to the amount of probing. When a cell is checked it is hashed to a 
+location in the map. If the location occupied, the location is checked and so on. If the cell finds an entry which matches its cell id, 
+it replaces it. Otherwise, if the process gets to the end of the probe without finding an empty location, it replaces the cell with 
+the oldest commit timestamp. The oldest commit timestamp then becomes the low watermark in the TSO. This must occur to ensure that 
+conflicts are not missed, as it would be possible for a row to not find a potential conflict that had been overridden if the low watermark 
+was not updated.
+
+### Processing Commit Requests
+When processing the commit request for a transaction, the TSO first checks if the start timestamp is greater the low watermark and if so,
+if there was another concurrent transaction whose writeset overlapped and whose commit timestamp is greater the start timestamp of 
+the requesting transaction. If no conflicts are found, a commit timestamp is generated for the request transaction which is added 
+to the conflict map for the writeset, the commit is added to the commit table and finally the client is notified about the successful 
+commit. Otherwise, the commit fails and the client is notied on the rollback of the transaction.
+
+## Commit Table (CT)
+It contains a transient mapping from start timestamp to commit timestamp for recently committed transactions. The commit table is 
+stored on a different set of nodes to the TSO. When a transaction is committed on the TSO it must be stored in the commit table 
+before a response is sent to the client. As the key value mapping in the commit table are completely independent of each other, the 
+table can be trivially scaled by sharding the values over multiple nodes.
+
+The commit table provides two services to the Transactional Client. Firstly, it is used to check if a transaction has been committed 
+or not. The client should not need to consult the commit table in the common case as the status of a read cell should be available 
+from its shadow cell (see below).
+
+The other service provided by the commit table is that transaction clients can delete commits from it. This only occurs once the writing 
+client has updated shadow cells for each of the cells written in the transaction. We call this commit or transaction completion. It is 
+possible that a client will crash between a transaction being committed and being completed. In this case, the transaction will stay in 
+the commit table forever. However as the commit table is not stored in memory and the window of opportunity for such a crash is quite 
+low, we don't expect this to be a problem.
+
+## Shadow Cells (SCs)
+Shadow cells contain a mapping from start timestamp to commit timestamp of the last committed transaction that modified the cell. Upon 
+receiving a commit timestamp after a successful transaction commit, the Transactional Client adds/updates these special cells to each 
+modified cell in the writeset of the committed transaction. The purpose of this, is that Transactional Clients can then query the 
+corresponding shadow cell when they read each cell to check if the data they find in the cell has been committed or not and whether 
+it is within the snapshot of the reading transaction.
\ No newline at end of file

http://git-wip-us.apache.org/repos/asf/incubator-omid/blob/05d69d9a/doc/site/markdown/quickstart.md
----------------------------------------------------------------------
diff --git a/doc/site/markdown/quickstart.md b/doc/site/markdown/quickstart.md
new file mode 100644
index 0000000..5976db8
--- /dev/null
+++ b/doc/site/markdown/quickstart.md
@@ -0,0 +1,203 @@
+# Quickstart
+
+Below are instructions to quickly set up an environment to test Omid in your local machine.
+
+## Requirements
+
+1. Maven 3.x
+2. Java 7
+3. HBase 0.98
+4. Protobuf 2.5.0
+
+## TSO Setup
+
+### 1. Download and Install the Required HBase Version
+You can find HBase distributions in [this page](http://www.apache.org/dyn/closer.cgi/hbase/).
+Then start HBase in [standalone mode](https://hbase.apache.org/book.html#quickstart).
+
+### 2. Clone the [Omid repository](https://github.com/francisco-perez-sorrosal/omid) and Build the TSO Package:
+
+```sh
+$ git clone git@github.com:yahoo/omid.git
+$ cd omid
+$ mvn clean install
+```
+This will generate a binary package containing all dependencies for the TSO in tso-server/target/tso-server-\<VERSION\>-bin.tar.gz. 
+
+**Be aware** Unit tests use HBase mini cluster, it typically fails to start if you are on VPN, thus unit test fail.
+Unit tests coverage is also quite extensive and take a while to run on each build (~15min at the moment of writing). So, consider using
+`mvn clean install -DskipTests` to speed temporal builds. Note that `-Dmaven.test.skip=true` [is NOT an equivalent](http://ericlefevre.net/wordpress/2008/02/21/skipping-tests-with-maven/).
+
+As an alternative to clone the project, you can download the required version for the TSO tar.gz package from the [release repository](https://bintray.com/yahoo/maven/omid/view).
+
+You can also see the [build history here](https://github.com/yahoo/omid/tags).
+
+### 3. Extract the TSO Package
+
+```sh
+$ tar zxvf tso-server-<VERSION>-bin.tar.gz
+$ cd tso-server-<VERSION>
+```
+
+### 4. Create Omid Tables
+Ensure that the setting for hbase.zookeeper.quorum in conf/hbase-site.xml points to your zookeeper instance, and create the 
+Timestamp Table and the Commit Table using the omid.sh script included in the bin directory of the tso server:
+      
+```sh
+$ bin/omid.sh create-hbase-commit-table -numRegions 16
+$ bin/omid.sh create-hbase-timestamp-table
+```
+
+These two tables are required by Omid and they must not be accessed by client applications.
+
+### 5. Start the TSO Server
+
+```sh
+$ bin/omid.sh tso
+```
+
+This starts the TSO server that in turn will connect to HBase to store information in HBase. By default the TSO listens on 
+port 54758. If you want to change the TSO configuration, you can modify the contents in the conf/omid.conf file.
+
+## HBase Client Usage
+
+### 1. Create a New Java Application
+Use your favorite IDE an create a new project.
+
+### 2. Add hbase-client Dependency
+Choose the right version of the hbase-client jar. For example, in a Maven-based app add the following dependency in the
+pom.xml file:
+
+```xml
+<dependency>
+   <groupId>com.yahoo.omid</groupId>
+   <artifactId>hbase-client</artifactId>
+   <version>${hbase_client.version}</version>
+</dependency>
+```
+
+### 3. Start Coding Using the Omid Client Interfaces
+In Omid there are two client interfaces: `TTable` and `TransactionManager` (_These interfaces will likely change slightly 
+in future._):
+
+1. The `TransactionManager` is used for creating transactional contexts, that is, transactions. A builder is provided in 
+the `HBaseTransactionManager` class in order to get the TransactionManager interface.
+
+2. `TTable` is used for putting, getting and scanning entries in a HBase table. TTable's
+interface is similar to the standard `HTableInterface`, and only requires passing the transactional context as a
+first parameter in the transactional aware methods (e.g. `put(Transaction tx, Put put)`)
+
+## Example Application
+
+Below is provided a sample application accessing data transactionally. Its a dummy application that writes two cells in two 
+different rows of a table in a transactional context, but is enough to show how the different Omid client APIs are used. A 
+detailed explanation of the client interfaces can be found in the [Basic Examples] section.
+
+```java
+import org.apache.hadoop.hbase.client.Put;
+import org.apache.hadoop.hbase.util.Bytes;
+import com.yahoo.omid.transaction.HBaseTransactionManager;
+import com.yahoo.omid.transaction.TTable;
+import com.yahoo.omid.transaction.Transaction;
+import com.yahoo.omid.transaction.TransactionManager;
+
+public class OmidExample {
+
+    public static final byte[] family = Bytes.toBytes("MY_CF");
+    public static final byte[] qualifier = Bytes.toBytes("MY_Q");
+
+    public static void main(String[] args) throws Exception {
+
+        try (TransactionManager tm = HBaseTransactionManager.newInstance();
+             TTable txTable = new TTable("MY_TX_TABLE")) {
+
+            Transaction tx = tm.begin();
+
+            Put row1 = new Put(Bytes.toBytes("EXAMPLE_ROW1"));
+            row1.add(family, qualifier, Bytes.toBytes("val1"));
+            txTable.put(tx, row1);
+
+            Put row2 = new Put(Bytes.toBytes("EXAMPLE_ROW2"));
+            row2.add(family, qualifier, Bytes.toBytes("val2"));
+            txTable.put(tx, row2);
+
+            tm.commit(tx);
+
+        }
+
+    }
+
+}
+``` 
+
+To run the application, make sure `core-site.xml` and `hbase-site.xml` for your HBase cluster are present in your 
+CLASSPATH. The default configuration settings for the Omid client are loaded from the `default-hbase-omid-client-config.yml` 
+file. In order to change the client default settings, you can either; 1) put your specific configuration settings 
+in a file named `hbase-omid-client-config.yml` and include it in the CLASSPATH; or 2) do it programmatically in 
+the application code by creating an instance of the `HBaseOmidClientConfiguration` class and passing it in the 
+creation of the transaction manager:
+
+```java
+    import com.yahoo.omid.transaction.HBaseOmidClientConfiguration;
+
+    ...
+    
+    HBaseOmidClientConfiguration omidClientConfiguration = new HBaseOmidClientConfiguration();
+    omidClientConfiguration.setConnectionType(DIRECT);
+    omidClientConfiguration.setConnectionString("my_tso_server_host:54758");
+    omidClientConfiguration.setRetryDelayMs(3000);
+    
+    try (TransactionManager tm = HBaseTransactionManager.newInstance(omidClientConfiguration);
+             TTable txTable = new TTable("MY_TX_TABLE")) {
+    
+    ...
+```
+
+Also, you will need to create a HBase table "MY_TX_TABLE", with column family "MY_CF", and with `TTL` disabled and
+`VERSIONS` set to `Integer.MAX_VALUE`. For example using the HBase shell:
+
+```
+create 'MY_TX_TABLE', {NAME => 'MY_CF', VERSIONS => '2147483647', TTL => '2147483647'}
+```
+
+This example assumes non-secure communication with HBase. If your HBase cluster is secured with Kerberos, you will need to 
+use the `UserGroupInformation` API to log in securely.
+
+## The Omid Compactor Coprocessor
+
+Omid includes a jar with an HBase coprocessor for performing data cleanup that operates during compactions, both minor and
+major. Specifically, it does the following:
+
+* Cleans up garbage data from aborted transactions
+* Purges deleted cells. Omid deletes work by placing a special tombstone marker in cells. The compactor
+  detects these and actually purges data when it is safe to do so (i.e. when there are no committable transactions
+  that may read the data).
+* 'Heals' committed cells for which the writer failed to write shadow cells.
+
+To deploy the coprocessor, the coprocessor jar must be placed in a location (typically on HDFS) that is accessible
+by HBase region servers. The coprocessor may then be enabled on a transactional table by the following steps in the HBase shell:
+
+**1) Disable the table**
+
+```
+disable 'MY_TX_TABLE'
+```
+
+**2) Add a coprocessor specification to the table via a "coprocessor" attribute. The coprocessor spec may (and usually will)
+also include the name of the Omid commit table**
+
+```
+alter 'MY_TX_TABLE', METHOD => 'table_att', 'coprocessor'=>'<path_to_omid_coprocessor>/omid-hbase-coprocessor-<coprocessor_version>.jar|com.yahoo.omid.transaction.OmidCompactor|1001|omid.committable.tablename=OMID_COMMIT_TABLE'
+```
+
+**3) Add an "OMID_ENABLED => true" flag to any column families which the co-processor should work on**
+
+```
+alter 'MY_TX_TABLE', { NAME => 'MY_CF', METADATA =>  {'OMID_ENABLED' => 'true'}}
+```
+
+**4) Re-enable the table**
+
+```
+enable 'MY_TX_TABLE'
+```
\ No newline at end of file

http://git-wip-us.apache.org/repos/asf/incubator-omid/blob/05d69d9a/doc/site/resources/css/site.css
----------------------------------------------------------------------
diff --git a/doc/site/resources/css/site.css b/doc/site/resources/css/site.css
new file mode 100644
index 0000000..7b37a01
--- /dev/null
+++ b/doc/site/resources/css/site.css
@@ -0,0 +1,103 @@
+/* Basics */
+
+a {
+  color: #B9140A;
+}
+
+body {
+    font-size: 16px;
+    font-family: 'Ubuntu', sans-serif;
+}
+
+/* Navigation Bar */
+
+.navbar .container {
+  color: white;
+  background-color: #B9140A;
+  background-image: none;
+}
+
+.navbar .nav>li>a {
+    color: white;
+    text-shadow: 0px 0px 10px black;
+}
+
+.navbar .nav li.dropdown.open>.dropdown-toggle {
+    color: #08C;
+    text-shadow: none;
+}
+
+.navbar .nav>li>a:focus, .navbar .nav>li>a:hover, .navbar .nav>li>a:active {
+    color: white;
+    text-shadow: 0px 0px 20px white;
+}
+
+
+/* Tables */
+
+table td, table th {
+    border: 1px solid #333;
+    padding: 0 .5em;
+}
+
+table th {
+    background: #CCC;
+    padding: 0 .5em;
+}
+
+table {
+    margin-top: 20px;
+    margin-bottom: 20px;
+}
+
+
+/* Footer */
+
+footer {
+    color: white;
+    text-shadow: 0px 0px 10px black;
+    background-color: #B9140A;
+}
+
+footer .container {
+    background-color: #B9140A;
+    background-image: none;
+}
+
+footer .container a {
+    color: white;
+    text-shadow: 0px 0px 10px black;
+    text-decoration: underline;
+}
+
+footer .pull-right {
+    color: white;
+    text-shadow: 0px 0px 10px black;
+}
+
+/* Others */
+
+.row {
+    margin-top: 20px;
+}
+
+.breadcrumb {
+    padding: 20px 15px;
+    background-color: #B9140A;
+}
+
+
+#search-form {
+    margin-left: 9px;
+    margin-right: 40px;
+}
+
+#publishDate {
+    color: white;
+    text-shadow: 0px 0px 10px black;
+}
+
+#projectVersion {
+    color: white;
+    text-shadow: 0px 0px 10px black;
+}
\ No newline at end of file

http://git-wip-us.apache.org/repos/asf/incubator-omid/blob/05d69d9a/doc/site/resources/images/about-omid.png
----------------------------------------------------------------------
diff --git a/doc/site/resources/images/about-omid.png b/doc/site/resources/images/about-omid.png
new file mode 100644
index 0000000..2875c7c
Binary files /dev/null and b/doc/site/resources/images/about-omid.png differ

http://git-wip-us.apache.org/repos/asf/incubator-omid/blob/05d69d9a/doc/site/resources/images/architecture.png
----------------------------------------------------------------------
diff --git a/doc/site/resources/images/architecture.png b/doc/site/resources/images/architecture.png
new file mode 100644
index 0000000..9afe38b
Binary files /dev/null and b/doc/site/resources/images/architecture.png differ

http://git-wip-us.apache.org/repos/asf/incubator-omid/blob/05d69d9a/doc/site/resources/images/basic-alg.png
----------------------------------------------------------------------
diff --git a/doc/site/resources/images/basic-alg.png b/doc/site/resources/images/basic-alg.png
new file mode 100644
index 0000000..82054f0
Binary files /dev/null and b/doc/site/resources/images/basic-alg.png differ

http://git-wip-us.apache.org/repos/asf/incubator-omid/blob/05d69d9a/doc/site/resources/images/contact.png
----------------------------------------------------------------------
diff --git a/doc/site/resources/images/contact.png b/doc/site/resources/images/contact.png
new file mode 100644
index 0000000..e1329e8
Binary files /dev/null and b/doc/site/resources/images/contact.png differ

http://git-wip-us.apache.org/repos/asf/incubator-omid/blob/05d69d9a/doc/site/resources/images/getting-started.png
----------------------------------------------------------------------
diff --git a/doc/site/resources/images/getting-started.png b/doc/site/resources/images/getting-started.png
new file mode 100644
index 0000000..c7ac001
Binary files /dev/null and b/doc/site/resources/images/getting-started.png differ

http://git-wip-us.apache.org/repos/asf/incubator-omid/blob/05d69d9a/doc/site/resources/images/omid-logo-transparent.png
----------------------------------------------------------------------
diff --git a/doc/site/resources/images/omid-logo-transparent.png b/doc/site/resources/images/omid-logo-transparent.png
new file mode 100644
index 0000000..842f30b
Binary files /dev/null and b/doc/site/resources/images/omid-logo-transparent.png differ

http://git-wip-us.apache.org/repos/asf/incubator-omid/blob/05d69d9a/doc/site/resources/images/omid-logo.png
----------------------------------------------------------------------
diff --git a/doc/site/resources/images/omid-logo.png b/doc/site/resources/images/omid-logo.png
new file mode 100644
index 0000000..ccce0ef
Binary files /dev/null and b/doc/site/resources/images/omid-logo.png differ

http://git-wip-us.apache.org/repos/asf/incubator-omid/blob/05d69d9a/doc/site/resources/images/snapshot-isolation.png
----------------------------------------------------------------------
diff --git a/doc/site/resources/images/snapshot-isolation.png b/doc/site/resources/images/snapshot-isolation.png
new file mode 100644
index 0000000..7ede9ee
Binary files /dev/null and b/doc/site/resources/images/snapshot-isolation.png differ

http://git-wip-us.apache.org/repos/asf/incubator-omid/blob/05d69d9a/doc/site/resources/images/technical-documentation.png
----------------------------------------------------------------------
diff --git a/doc/site/resources/images/technical-documentation.png b/doc/site/resources/images/technical-documentation.png
new file mode 100644
index 0000000..23c1f7a
Binary files /dev/null and b/doc/site/resources/images/technical-documentation.png differ

http://git-wip-us.apache.org/repos/asf/incubator-omid/blob/05d69d9a/doc/site/site.xml
----------------------------------------------------------------------
diff --git a/doc/site/site.xml b/doc/site/site.xml
new file mode 100644
index 0000000..0afdb73
--- /dev/null
+++ b/doc/site/site.xml
@@ -0,0 +1,85 @@
+<project name="Apache Omid">
+
+    <skin>
+        <groupId>org.apache.maven.skins</groupId>
+        <artifactId>maven-fluido-skin</artifactId>
+        <version>1.5</version>
+    </skin>
+
+    <custom>
+        <fluidoSkin>
+
+            <topBarEnabled>true</topBarEnabled>
+            <topBarContainerStyle>width: 100%;</topBarContainerStyle>
+            <sideBarEnabled>false</sideBarEnabled>
+
+            <twitter>
+                <user>apacheomid</user>
+                <showUser>true</showUser>
+                <showFollowers>true</showFollowers>
+            </twitter>
+
+            <googleSearch/>
+
+        </fluidoSkin>
+    </custom>
+
+    <bannerLeft>
+        <name>Omid</name>
+        <src>images/omid-logo.png</src>
+        <href>http://omid.incubator.apache.org</href>
+        <width>200</width>
+    </bannerLeft>
+
+    <bannerRight>
+        <name>Apache Incubator</name>
+        <src>http://incubator.apache.org/images/egg-logo2.png</src>
+        <href>http://incubator.apache.org/</href>
+        <width>200</width>
+    </bannerRight>
+
+    <publishDate position="right"/>
+    <!-- Do not publish version as it shows the current SNAPSHOT -->
+    <!-- version position="right"/ -->
+
+    <poweredBy>
+        <logo name="Maven" href="http://maven.apache.org/" img="http://maven.apache.org/images/logos/maven-feather.png"/>
+    </poweredBy>
+
+    <body>
+
+        <menu name="Home">
+            <item name="Overview" href="index.html" />
+            <item name="License" href="license.html" />
+        </menu>
+
+        <menu name="Download">
+            <item name="Omid Sources" href="https://github.com/yahoo/omid" />
+            <item name="Bintray Repository" href="https://bintray.com/yahoo/maven/omid/_latestVersion" />
+        </menu>
+
+        <menu name="User Guide &amp; API">
+            <item name="Quickstart" href="quickstart.html" />
+            <item name="API and Code Examples" href="basic-examples.html" />
+        </menu>
+
+        <menu name="Technical Docs">
+            <item name="Basic Concepts" href="basic-concepts.html" />
+            <item name="Omid Components" href="omid-components.html" />
+            <item name="Basic Algorithm" href="basic-algorithm.html" />
+            <item name="Management of Client Failures" href="client-failure-management.html" />
+            <item name="Blog Entries" href="http://yahoohadoop.tumblr.com/tagged/HBase" />
+        </menu>
+
+        <menu name="Contribute">
+            <item name="Source Code" href="https://git-wip-us.apache.org/repos/asf/incubator-omid.git" />
+            <item name="JIRA" href="https://issues.apache.org/jira/browse/Omid" />
+            <item name="Mailing Lists" href="mailing-lists.html" />
+            <item name="Coding Guide and Style" href="coding-guide-and-style.html" />
+        </menu>
+
+        <menu name="Project Reports" ref="reports" />
+
+    </body>
+
+</project>
\ No newline at end of file

http://git-wip-us.apache.org/repos/asf/incubator-omid/blob/05d69d9a/examples/pom.xml
----------------------------------------------------------------------
diff --git a/examples/pom.xml b/examples/pom.xml
index 192f414..a39d652 100644
--- a/examples/pom.xml
+++ b/examples/pom.xml
@@ -99,6 +99,14 @@
                 </configuration>
             </plugin>
 
+            <!-- Disable maven site plugin -->
+            <plugin>
+                <artifactId>maven-site-plugin</artifactId>
+                <configuration>
+                    <skip>true</skip>
+                </configuration>
+            </plugin>
+
         </plugins>
 
     </build>

http://git-wip-us.apache.org/repos/asf/incubator-omid/blob/05d69d9a/hbase-client/pom.xml
----------------------------------------------------------------------
diff --git a/hbase-client/pom.xml b/hbase-client/pom.xml
index 1b2e25c..a0869a5 100644
--- a/hbase-client/pom.xml
+++ b/hbase-client/pom.xml
@@ -145,6 +145,13 @@
                 </configuration>
             </plugin>
 
+            <!-- Disable maven site plugin -->
+            <plugin>
+                <artifactId>maven-site-plugin</artifactId>
+                <configuration>
+                    <skip>true</skip>
+                </configuration>
+            </plugin>
 
         </plugins>
 

http://git-wip-us.apache.org/repos/asf/incubator-omid/blob/05d69d9a/hbase-commit-table/pom.xml
----------------------------------------------------------------------
diff --git a/hbase-commit-table/pom.xml b/hbase-commit-table/pom.xml
index 82dc0f7..c623ebf 100644
--- a/hbase-commit-table/pom.xml
+++ b/hbase-commit-table/pom.xml
@@ -120,6 +120,22 @@
 
     </dependencies>
 
+    <build>
+
+        <plugins>
+
+            <!-- Disable maven site plugin -->
+            <plugin>
+                <artifactId>maven-site-plugin</artifactId>
+                <configuration>
+                    <skip>true</skip>
+                </configuration>
+            </plugin>
+
+        </plugins>
+
+    </build>
+
     <profiles>
 
         <profile>

http://git-wip-us.apache.org/repos/asf/incubator-omid/blob/05d69d9a/hbase-common/pom.xml
----------------------------------------------------------------------
diff --git a/hbase-common/pom.xml b/hbase-common/pom.xml
index d11e642..d912e4c 100644
--- a/hbase-common/pom.xml
+++ b/hbase-common/pom.xml
@@ -61,6 +61,22 @@
 
     </dependencies>
 
+    <build>
+
+        <plugins>
+
+            <!-- Disable maven site plugin -->
+            <plugin>
+                <artifactId>maven-site-plugin</artifactId>
+                <configuration>
+                    <skip>true</skip>
+                </configuration>
+            </plugin>
+
+        </plugins>
+
+    </build>
+
     <profiles>
 
         <profile>

http://git-wip-us.apache.org/repos/asf/incubator-omid/blob/05d69d9a/hbase-coprocessor/pom.xml
----------------------------------------------------------------------
diff --git a/hbase-coprocessor/pom.xml b/hbase-coprocessor/pom.xml
index ffc16c5..beec0b4 100644
--- a/hbase-coprocessor/pom.xml
+++ b/hbase-coprocessor/pom.xml
@@ -130,6 +130,14 @@
                 </configuration>
             </plugin>
 
+            <!-- Disable maven site plugin -->
+            <plugin>
+                <artifactId>maven-site-plugin</artifactId>
+                <configuration>
+                    <skip>true</skip>
+                </configuration>
+            </plugin>
+
         </plugins>
 
     </build>

http://git-wip-us.apache.org/repos/asf/incubator-omid/blob/05d69d9a/hbase-shims/pom.xml
----------------------------------------------------------------------
diff --git a/hbase-shims/pom.xml b/hbase-shims/pom.xml
index 32576f2..c8eddd1 100644
--- a/hbase-shims/pom.xml
+++ b/hbase-shims/pom.xml
@@ -64,4 +64,20 @@
 
     </dependencies>
 
+    <build>
+
+        <plugins>
+
+            <!-- Disable maven site plugin -->
+            <plugin>
+                <artifactId>maven-site-plugin</artifactId>
+                <configuration>
+                    <skip>true</skip>
+                </configuration>
+            </plugin>
+
+        </plugins>
+
+    </build>
+
 </project>

http://git-wip-us.apache.org/repos/asf/incubator-omid/blob/05d69d9a/hbase-tools/pom.xml
----------------------------------------------------------------------
diff --git a/hbase-tools/pom.xml b/hbase-tools/pom.xml
index a43fadc..c28c507 100644
--- a/hbase-tools/pom.xml
+++ b/hbase-tools/pom.xml
@@ -77,6 +77,22 @@
 
     </dependencies>
 
+    <build>
+
+        <plugins>
+
+            <!-- Disable maven site plugin -->
+            <plugin>
+                <artifactId>maven-site-plugin</artifactId>
+                <configuration>
+                    <skip>true</skip>
+                </configuration>
+            </plugin>
+
+        </plugins>
+
+    </build>
+
     <profiles>
 
         <profile>

http://git-wip-us.apache.org/repos/asf/incubator-omid/blob/05d69d9a/metrics/pom.xml
----------------------------------------------------------------------
diff --git a/metrics/pom.xml b/metrics/pom.xml
index 5e1b032..e4dd5e0 100644
--- a/metrics/pom.xml
+++ b/metrics/pom.xml
@@ -51,4 +51,20 @@
 
     </dependencies>
 
+    <build>
+
+        <plugins>
+
+            <!-- Disable maven site plugin -->
+            <plugin>
+                <artifactId>maven-site-plugin</artifactId>
+                <configuration>
+                    <skip>true</skip>
+                </configuration>
+            </plugin>
+
+        </plugins>
+
+    </build>
+
 </project>
\ No newline at end of file

http://git-wip-us.apache.org/repos/asf/incubator-omid/blob/05d69d9a/pom.xml
----------------------------------------------------------------------
diff --git a/pom.xml b/pom.xml
index 27d1268..823db65 100644
--- a/pom.xml
+++ b/pom.xml
@@ -6,15 +6,20 @@
     <!-- Project description                                                                                        -->
     <!-- ========================================================================================================== -->
     <name>Omid</name>
-    <description>The Omid project provides transactional support for HBase-based applications</description>
+    <description>Apache Omid provides multi-row/multi-table transactional support for HBase-based applications</description>
     <inceptionYear>2011</inceptionYear>
-    <url>http://www.github.org/apache/omid</url>
+    <url>http://omid.incubator.apache.org</url>
     <groupId>org.apache.omid</groupId>
     <artifactId>omid</artifactId>
     <packaging>pom</packaging>
     <!-- WARNING: do not update version manually, use mvn versions:set -->
     <version>0.8.1.37-SNAPSHOT</version>
 
+    <organization>
+        <name>Apache Software Foundation</name>
+        <url>http://www.apache.org</url>
+    </organization>
+
     <licenses>
         <license>
             <name>Apache License, Version 2.0</name>
@@ -23,6 +28,51 @@
         </license>
     </licenses>
 
+    <developers>
+
+        <developer>
+            <id>daijy</id>
+            <name>Daniel Dai</name>
+            <email>daijy@apache.org</email>
+            <timezone>-8</timezone>
+            <organization>Hortonworks</organization>
+            <organizationUrl>http://www.hortonworks.com</organizationUrl>
+        </developer>
+        <developer>
+            <id>fperezsorrosal</id>
+            <name>Francisco Perez-Sorrosal</name>
+            <email>fperezsorrosal@apache.org</email>
+            <timezone>-8</timezone>
+            <organization>Yahoo Inc.</organization>
+            <organizationUrl>http://www.yahoo.com</organizationUrl>
+        </developer>
+        <developer>
+            <id>ikatkov</id>
+            <name>Igor Katkov</name>
+            <email>ikatkov@apache.org</email>
+            <timezone>-8</timezone>
+            <organization>Yahoo Inc.</organization>
+            <organizationUrl>http://www.yahoo.com</organizationUrl>
+        </developer>
+        <developer>
+            <id>ohads</id>
+            <name>Ohad Shacham</name>
+            <email>ohads@apache.org</email>
+            <timezone>+2</timezone>
+            <organization>Yahoo Inc.</organization>
+            <organizationUrl>http://www.yahoo.com</organizationUrl>
+        </developer>
+        <developer>
+            <id>sameerp</id>
+            <name>Sameer Paranjpye</name>
+            <email>sameerp@apache.org</email>
+            <timezone>-8</timezone>
+            <organization>Arimo</organization>
+            <organizationUrl>https://www.arimo.com</organizationUrl>
+        </developer>
+
+    </developers>
+
     <modules>
         <module>benchmarks</module>
         <module>common</module>
@@ -42,11 +92,20 @@
         <module>examples</module>
     </modules>
 
+    <pluginRepositories>
+
+        <pluginRepository>
+            <id>synergian-repo</id>
+            <url>https://raw.github.com/synergian/wagon-git/releases</url>
+        </pluginRepository>
+
+    </pluginRepositories>
+
     <scm>
-        <connection>scm:git:git://github.org/apache/omid.git</connection>
-        <developerConnection>scm:git:https://${GH_TOKEN}@github.org/apache/omid.git</developerConnection>
-        <url>https://github.org/apache/omid</url>
-        <tag>omid-0.8.1.21</tag>
+        <connection>scm:git:git://github.com/yahoo/omid.git</connection>
+        <developerConnection>scm:git:https://${GH_TOKEN}@github.com/yahoo/omid.git</developerConnection>
+        <url>https://github.com/yahoo/omid</url>
+        <tag>master</tag>
     </scm>
 
     <distributionManagement>
@@ -54,6 +113,15 @@
             <id>bintray</id>
             <url>https://api.bintray.com/maven/yahoo/maven/omid</url>
         </repository>
+
+        <site>
+            <id>apache-omid-site</id>
+            <!-- Wagon-git URL format:
+                     protocol:branch://url
+                 Do not forget the 2 backslashes before the url
+            -->
+            <url>git:asf-site://https://git-wip-us.apache.org/repos/asf/incubator-omid-site.git</url>
+        </site>
     </distributionManagement>
 
     <properties>
@@ -102,11 +170,11 @@
         <maven-coveralls-plugin.version>4.1.0</maven-coveralls-plugin.version>
         <maven-cobertura-plugin.version>2.7</maven-cobertura-plugin.version>
         <maven-license-plugin.version>2.11</maven-license-plugin.version>
+        <maven-site-plugin.version>3.5</maven-site-plugin.version>
 
         <!-- Licensing properties (for license-maven-plugins) -->
         <license.header>misc/header.txt</license.header>
 
-
     </properties>
 
     <build>
@@ -195,7 +263,6 @@
                     </configuration>
                 </plugin>
 
-
                 <!-- ============================================================================================== -->
                 <!-- Code coverage plugins                                                                          -->
                 <!-- ============================================================================================== -->
@@ -337,8 +404,36 @@
                 </executions>
             </plugin>
 
+            <plugin>
+                <groupId>org.apache.maven.plugins</groupId>
+                <artifactId>maven-site-plugin</artifactId>
+                <version>${maven-site-plugin.version}</version>
+                <configuration>
+                    <siteDirectory>${basedir}/doc/site</siteDirectory>
+                    <outputDirectory>${basedir}/generated-website</outputDirectory>
+                    <stagingDirectory>${basedir}/generated-website-staging</stagingDirectory>
+                </configuration>
+                <dependencies>
+                    <dependency><!-- add support for ssh/scp -->
+                        <groupId>org.apache.maven.wagon</groupId>
+                        <artifactId>wagon-ssh</artifactId>
+                        <version>1.0</version>
+                    </dependency>
+                </dependencies>
+            </plugin>
+
         </plugins>
 
+        <extensions>
+
+            <extension>
+                <groupId>ar.com.synergian</groupId>
+                <artifactId>wagon-git</artifactId>
+                <version>0.2.5</version>
+            </extension>
+
+        </extensions>
+
     </build>
 
 

http://git-wip-us.apache.org/repos/asf/incubator-omid/blob/05d69d9a/statemachine/pom.xml
----------------------------------------------------------------------
diff --git a/statemachine/pom.xml b/statemachine/pom.xml
index 660770e..b240062 100644
--- a/statemachine/pom.xml
+++ b/statemachine/pom.xml
@@ -37,4 +37,20 @@
 
     </dependencies>
 
+    <build>
+
+        <plugins>
+
+            <!-- Disable maven site plugin -->
+            <plugin>
+                <artifactId>maven-site-plugin</artifactId>
+                <configuration>
+                    <skip>true</skip>
+                </configuration>
+            </plugin>
+
+        </plugins>
+
+    </build>
+
 </project>

http://git-wip-us.apache.org/repos/asf/incubator-omid/blob/05d69d9a/timestamp-storage/pom.xml
----------------------------------------------------------------------
diff --git a/timestamp-storage/pom.xml b/timestamp-storage/pom.xml
index 3d379ad..2120458 100644
--- a/timestamp-storage/pom.xml
+++ b/timestamp-storage/pom.xml
@@ -107,6 +107,22 @@
 
     </dependencies>
 
+    <build>
+
+        <plugins>
+
+            <!-- Disable maven site plugin -->
+            <plugin>
+                <artifactId>maven-site-plugin</artifactId>
+                <configuration>
+                    <skip>true</skip>
+                </configuration>
+            </plugin>
+
+        </plugins>
+
+    </build>
+
     <profiles>
 
         <profile>

http://git-wip-us.apache.org/repos/asf/incubator-omid/blob/05d69d9a/transaction-client/pom.xml
----------------------------------------------------------------------
diff --git a/transaction-client/pom.xml b/transaction-client/pom.xml
index e0102a5..e5a0d1e 100644
--- a/transaction-client/pom.xml
+++ b/transaction-client/pom.xml
@@ -98,4 +98,20 @@
 
     </dependencies>
 
+    <build>
+
+        <plugins>
+
+            <!-- Disable maven site plugin -->
+            <plugin>
+                <artifactId>maven-site-plugin</artifactId>
+                <configuration>
+                    <skip>true</skip>
+                </configuration>
+            </plugin>
+
+        </plugins>
+
+    </build>
+
 </project>

http://git-wip-us.apache.org/repos/asf/incubator-omid/blob/05d69d9a/tso-server/pom.xml
----------------------------------------------------------------------
diff --git a/tso-server/pom.xml b/tso-server/pom.xml
index 0cf0f6c..f60e2f2 100644
--- a/tso-server/pom.xml
+++ b/tso-server/pom.xml
@@ -255,6 +255,14 @@
                 </executions>
             </plugin>
 
+            <!-- Disable maven site plugin -->
+            <plugin>
+                <artifactId>maven-site-plugin</artifactId>
+                <configuration>
+                    <skip>true</skip>
+                </configuration>
+            </plugin>
+
         </plugins>
 
     </build>