Add sample accessing database service to Foo

Change-Id: I514c57a278dea368448d284eb5bf0d41bb0013e3
diff --git a/core/store/dist/src/main/java/org/onlab/onos/store/service/impl/DatabaseManager.java b/core/store/dist/src/main/java/org/onlab/onos/store/service/impl/DatabaseManager.java
index 2779b35..421f9cc 100644
--- a/core/store/dist/src/main/java/org/onlab/onos/store/service/impl/DatabaseManager.java
+++ b/core/store/dist/src/main/java/org/onlab/onos/store/service/impl/DatabaseManager.java
@@ -2,6 +2,7 @@
 
 import static org.slf4j.LoggerFactory.getLogger;
 
+import java.io.File;
 import java.util.ArrayList;
 import java.util.Arrays;
 import java.util.List;
@@ -57,7 +58,7 @@
     @Reference(cardinality = ReferenceCardinality.MANDATORY_UNARY)
     protected DatabaseProtocolService copycatMessagingProtocol;
 
-    public static final String LOG_FILE_PREFIX = "onos-copy-cat-log";
+    public static final String LOG_FILE_PREFIX = "/tmp/onos-copy-cat-log";
 
     private Copycat copycat;
     private DatabaseClient client;
@@ -126,9 +127,11 @@
 
 
         StateMachine stateMachine = new DatabaseStateMachine();
-        // FIXME resolve Chronicle + OSGi issue
+        // Chronicle + OSGi issue
         //Log consensusLog = new ChronicleLog(LOG_FILE_PREFIX + "_" + thisNode.id());
-        Log consensusLog = new KryoRegisteredInMemoryLog();
+        //Log consensusLog = new KryoRegisteredInMemoryLog();
+        Log consensusLog = new MapDBLog(new File(LOG_FILE_PREFIX + localNode.id()),
+                                        ClusterMessagingProtocol.SERIALIZER);
 
         copycat = new Copycat(stateMachine, consensusLog, cluster, copycatMessagingProtocol);
         copycat.start();
@@ -187,8 +190,14 @@
     }
 
     @Override
-    public WriteResult write(WriteRequest request) {
-        return batchWrite(Arrays.asList(request)).get(0).get();
+    public OptionalResult<WriteResult, DatabaseException> writeNothrow(WriteRequest request) {
+        return batchWrite(Arrays.asList(request)).get(0);
+    }
+
+    @Override
+    public WriteResult write(WriteRequest request)
+            throws OptimisticLockException, PreconditionFailedException {
+        return writeNothrow(request).get();
     }
 
     @Override
@@ -199,13 +208,13 @@
             if (internalWriteResult.status() == InternalWriteResult.Status.NO_SUCH_TABLE) {
                 writeResults.add(new DatabaseOperationResult<WriteResult, DatabaseException>(
                         new NoSuchTableException()));
-            } else if (internalWriteResult.status() == InternalWriteResult.Status.OPTIMISTIC_LOCK_FAILURE) {
+            } else if (internalWriteResult.status() == InternalWriteResult.Status.PREVIOUS_VERSION_MISMATCH) {
                 writeResults.add(new DatabaseOperationResult<WriteResult, DatabaseException>(
                         new OptimisticLockException()));
             } else if (internalWriteResult.status() == InternalWriteResult.Status.PREVIOUS_VALUE_MISMATCH) {
                 // TODO: throw a different exception?
                 writeResults.add(new DatabaseOperationResult<WriteResult, DatabaseException>(
-                        new PreconditionFailedException()));
+                        new OptimisticLockException()));
             } else if (internalWriteResult.status() == InternalWriteResult.Status.ABORTED) {
                 writeResults.add(new DatabaseOperationResult<WriteResult, DatabaseException>(
                         new WriteAborted()));