annotate src/org/dancres/blitz/txn/batch/OptimisticBatcher.java @ 32:a77f0a9ed93c 2.1.1

Add support for optimistic log batching.
author Dan Creswell <dan.creswell@gmail.com>
date Sat, 12 Jun 2010 10:42:31 +0100
parents
children
Ignore whitespace changes - Everywhere: Within whitespace: At end of lines:
rev   line source
32
a77f0a9ed93c Add support for optimistic log batching.
Dan Creswell <dan.creswell@gmail.com>
parents:
diff changeset
1 package org.dancres.blitz.txn.batch;
a77f0a9ed93c Add support for optimistic log batching.
Dan Creswell <dan.creswell@gmail.com>
parents:
diff changeset
2
a77f0a9ed93c Add support for optimistic log batching.
Dan Creswell <dan.creswell@gmail.com>
parents:
diff changeset
3 import org.prevayler.Command;
a77f0a9ed93c Add support for optimistic log batching.
Dan Creswell <dan.creswell@gmail.com>
parents:
diff changeset
4 import org.prevayler.PrevalentSystem;
a77f0a9ed93c Add support for optimistic log batching.
Dan Creswell <dan.creswell@gmail.com>
parents:
diff changeset
5 import org.prevayler.implementation.PrevaylerCore;
a77f0a9ed93c Add support for optimistic log batching.
Dan Creswell <dan.creswell@gmail.com>
parents:
diff changeset
6 import org.prevayler.implementation.SnapshotPrevayler;
a77f0a9ed93c Add support for optimistic log batching.
Dan Creswell <dan.creswell@gmail.com>
parents:
diff changeset
7 import org.prevayler.implementation.Snapshotter;
a77f0a9ed93c Add support for optimistic log batching.
Dan Creswell <dan.creswell@gmail.com>
parents:
diff changeset
8
a77f0a9ed93c Add support for optimistic log batching.
Dan Creswell <dan.creswell@gmail.com>
parents:
diff changeset
9 import java.io.IOException;
a77f0a9ed93c Add support for optimistic log batching.
Dan Creswell <dan.creswell@gmail.com>
parents:
diff changeset
10 import java.io.Serializable;
a77f0a9ed93c Add support for optimistic log batching.
Dan Creswell <dan.creswell@gmail.com>
parents:
diff changeset
11 import java.util.ArrayList;
a77f0a9ed93c Add support for optimistic log batching.
Dan Creswell <dan.creswell@gmail.com>
parents:
diff changeset
12 import java.util.Iterator;
a77f0a9ed93c Add support for optimistic log batching.
Dan Creswell <dan.creswell@gmail.com>
parents:
diff changeset
13 import java.util.concurrent.atomic.AtomicInteger;
a77f0a9ed93c Add support for optimistic log batching.
Dan Creswell <dan.creswell@gmail.com>
parents:
diff changeset
14
a77f0a9ed93c Add support for optimistic log batching.
Dan Creswell <dan.creswell@gmail.com>
parents:
diff changeset
15 public class OptimisticBatcher implements SnapshotPrevayler {
a77f0a9ed93c Add support for optimistic log batching.
Dan Creswell <dan.creswell@gmail.com>
parents:
diff changeset
16 private PrevaylerCore _prevayler;
a77f0a9ed93c Add support for optimistic log batching.
Dan Creswell <dan.creswell@gmail.com>
parents:
diff changeset
17 private boolean _writing = false;
a77f0a9ed93c Add support for optimistic log batching.
Dan Creswell <dan.creswell@gmail.com>
parents:
diff changeset
18 private ArrayList<WriteRequest> _writes = new ArrayList<WriteRequest>();
a77f0a9ed93c Add support for optimistic log batching.
Dan Creswell <dan.creswell@gmail.com>
parents:
diff changeset
19
a77f0a9ed93c Add support for optimistic log batching.
Dan Creswell <dan.creswell@gmail.com>
parents:
diff changeset
20 // private AtomicInteger _inCount = new AtomicInteger();
a77f0a9ed93c Add support for optimistic log batching.
Dan Creswell <dan.creswell@gmail.com>
parents:
diff changeset
21 // private AtomicInteger _outCount = new AtomicInteger();
a77f0a9ed93c Add support for optimistic log batching.
Dan Creswell <dan.creswell@gmail.com>
parents:
diff changeset
22
a77f0a9ed93c Add support for optimistic log batching.
Dan Creswell <dan.creswell@gmail.com>
parents:
diff changeset
23 public OptimisticBatcher(PrevaylerCore aPrevayler) {
a77f0a9ed93c Add support for optimistic log batching.
Dan Creswell <dan.creswell@gmail.com>
parents:
diff changeset
24 _prevayler = aPrevayler;
a77f0a9ed93c Add support for optimistic log batching.
Dan Creswell <dan.creswell@gmail.com>
parents:
diff changeset
25 }
a77f0a9ed93c Add support for optimistic log batching.
Dan Creswell <dan.creswell@gmail.com>
parents:
diff changeset
26
a77f0a9ed93c Add support for optimistic log batching.
Dan Creswell <dan.creswell@gmail.com>
parents:
diff changeset
27 public PrevalentSystem system() {
a77f0a9ed93c Add support for optimistic log batching.
Dan Creswell <dan.creswell@gmail.com>
parents:
diff changeset
28 return _prevayler.system();
a77f0a9ed93c Add support for optimistic log batching.
Dan Creswell <dan.creswell@gmail.com>
parents:
diff changeset
29 }
a77f0a9ed93c Add support for optimistic log batching.
Dan Creswell <dan.creswell@gmail.com>
parents:
diff changeset
30
a77f0a9ed93c Add support for optimistic log batching.
Dan Creswell <dan.creswell@gmail.com>
parents:
diff changeset
31 public Serializable executeCommand(Command aCommand) throws Exception {
a77f0a9ed93c Add support for optimistic log batching.
Dan Creswell <dan.creswell@gmail.com>
parents:
diff changeset
32 return write(aCommand, true);
a77f0a9ed93c Add support for optimistic log batching.
Dan Creswell <dan.creswell@gmail.com>
parents:
diff changeset
33 }
a77f0a9ed93c Add support for optimistic log batching.
Dan Creswell <dan.creswell@gmail.com>
parents:
diff changeset
34
a77f0a9ed93c Add support for optimistic log batching.
Dan Creswell <dan.creswell@gmail.com>
parents:
diff changeset
35 public Serializable executeCommand(Command aCommand, boolean sync)
a77f0a9ed93c Add support for optimistic log batching.
Dan Creswell <dan.creswell@gmail.com>
parents:
diff changeset
36 throws Exception {
a77f0a9ed93c Add support for optimistic log batching.
Dan Creswell <dan.creswell@gmail.com>
parents:
diff changeset
37 return write(aCommand, sync);
a77f0a9ed93c Add support for optimistic log batching.
Dan Creswell <dan.creswell@gmail.com>
parents:
diff changeset
38 }
a77f0a9ed93c Add support for optimistic log batching.
Dan Creswell <dan.creswell@gmail.com>
parents:
diff changeset
39
a77f0a9ed93c Add support for optimistic log batching.
Dan Creswell <dan.creswell@gmail.com>
parents:
diff changeset
40 private Serializable write(Command aComm, boolean sync) throws Exception {
a77f0a9ed93c Add support for optimistic log batching.
Dan Creswell <dan.creswell@gmail.com>
parents:
diff changeset
41 boolean someoneWriting = false;
a77f0a9ed93c Add support for optimistic log batching.
Dan Creswell <dan.creswell@gmail.com>
parents:
diff changeset
42 WriteRequest myReq = null;
a77f0a9ed93c Add support for optimistic log batching.
Dan Creswell <dan.creswell@gmail.com>
parents:
diff changeset
43
a77f0a9ed93c Add support for optimistic log batching.
Dan Creswell <dan.creswell@gmail.com>
parents:
diff changeset
44 synchronized(this) {
a77f0a9ed93c Add support for optimistic log batching.
Dan Creswell <dan.creswell@gmail.com>
parents:
diff changeset
45 someoneWriting = _writing;
a77f0a9ed93c Add support for optimistic log batching.
Dan Creswell <dan.creswell@gmail.com>
parents:
diff changeset
46
a77f0a9ed93c Add support for optimistic log batching.
Dan Creswell <dan.creswell@gmail.com>
parents:
diff changeset
47 // If someone is already writing, we add to their queue of work
a77f0a9ed93c Add support for optimistic log batching.
Dan Creswell <dan.creswell@gmail.com>
parents:
diff changeset
48 //
a77f0a9ed93c Add support for optimistic log batching.
Dan Creswell <dan.creswell@gmail.com>
parents:
diff changeset
49 if (_writing) {
a77f0a9ed93c Add support for optimistic log batching.
Dan Creswell <dan.creswell@gmail.com>
parents:
diff changeset
50 myReq = new WriteRequest(aComm);
a77f0a9ed93c Add support for optimistic log batching.
Dan Creswell <dan.creswell@gmail.com>
parents:
diff changeset
51 _writes.add(myReq);
a77f0a9ed93c Add support for optimistic log batching.
Dan Creswell <dan.creswell@gmail.com>
parents:
diff changeset
52 } else {
a77f0a9ed93c Add support for optimistic log batching.
Dan Creswell <dan.creswell@gmail.com>
parents:
diff changeset
53 _writing = true;
a77f0a9ed93c Add support for optimistic log batching.
Dan Creswell <dan.creswell@gmail.com>
parents:
diff changeset
54 }
a77f0a9ed93c Add support for optimistic log batching.
Dan Creswell <dan.creswell@gmail.com>
parents:
diff changeset
55 }
a77f0a9ed93c Add support for optimistic log batching.
Dan Creswell <dan.creswell@gmail.com>
parents:
diff changeset
56
a77f0a9ed93c Add support for optimistic log batching.
Dan Creswell <dan.creswell@gmail.com>
parents:
diff changeset
57 // If we are waiting on someone's queue
a77f0a9ed93c Add support for optimistic log batching.
Dan Creswell <dan.creswell@gmail.com>
parents:
diff changeset
58 //
a77f0a9ed93c Add support for optimistic log batching.
Dan Creswell <dan.creswell@gmail.com>
parents:
diff changeset
59 if (someoneWriting) {
a77f0a9ed93c Add support for optimistic log batching.
Dan Creswell <dan.creswell@gmail.com>
parents:
diff changeset
60 // If we want to wait until the log is flushed
a77f0a9ed93c Add support for optimistic log batching.
Dan Creswell <dan.creswell@gmail.com>
parents:
diff changeset
61 //
a77f0a9ed93c Add support for optimistic log batching.
Dan Creswell <dan.creswell@gmail.com>
parents:
diff changeset
62 if (sync)
a77f0a9ed93c Add support for optimistic log batching.
Dan Creswell <dan.creswell@gmail.com>
parents:
diff changeset
63 myReq.await();
a77f0a9ed93c Add support for optimistic log batching.
Dan Creswell <dan.creswell@gmail.com>
parents:
diff changeset
64
a77f0a9ed93c Add support for optimistic log batching.
Dan Creswell <dan.creswell@gmail.com>
parents:
diff changeset
65 return aComm.execute(_prevayler.system());
a77f0a9ed93c Add support for optimistic log batching.
Dan Creswell <dan.creswell@gmail.com>
parents:
diff changeset
66 } else {
a77f0a9ed93c Add support for optimistic log batching.
Dan Creswell <dan.creswell@gmail.com>
parents:
diff changeset
67 // We are handling the write queue, write our stuff now
a77f0a9ed93c Add support for optimistic log batching.
Dan Creswell <dan.creswell@gmail.com>
parents:
diff changeset
68 //
a77f0a9ed93c Add support for optimistic log batching.
Dan Creswell <dan.creswell@gmail.com>
parents:
diff changeset
69 _prevayler.logCommand(aComm, false);
a77f0a9ed93c Add support for optimistic log batching.
Dan Creswell <dan.creswell@gmail.com>
parents:
diff changeset
70
a77f0a9ed93c Add support for optimistic log batching.
Dan Creswell <dan.creswell@gmail.com>
parents:
diff changeset
71 ArrayList<WriteRequest> myAllWrites = new ArrayList<WriteRequest>();
a77f0a9ed93c Add support for optimistic log batching.
Dan Creswell <dan.creswell@gmail.com>
parents:
diff changeset
72
a77f0a9ed93c Add support for optimistic log batching.
Dan Creswell <dan.creswell@gmail.com>
parents:
diff changeset
73 // While there other writes scoop them up and write them
a77f0a9ed93c Add support for optimistic log batching.
Dan Creswell <dan.creswell@gmail.com>
parents:
diff changeset
74 //
a77f0a9ed93c Add support for optimistic log batching.
Dan Creswell <dan.creswell@gmail.com>
parents:
diff changeset
75 ArrayList<WriteRequest> myBuffer = new ArrayList<WriteRequest>();
a77f0a9ed93c Add support for optimistic log batching.
Dan Creswell <dan.creswell@gmail.com>
parents:
diff changeset
76
a77f0a9ed93c Add support for optimistic log batching.
Dan Creswell <dan.creswell@gmail.com>
parents:
diff changeset
77 while (haveWrites()) {
a77f0a9ed93c Add support for optimistic log batching.
Dan Creswell <dan.creswell@gmail.com>
parents:
diff changeset
78 synchronized(this) {
a77f0a9ed93c Add support for optimistic log batching.
Dan Creswell <dan.creswell@gmail.com>
parents:
diff changeset
79 myBuffer.clear();
a77f0a9ed93c Add support for optimistic log batching.
Dan Creswell <dan.creswell@gmail.com>
parents:
diff changeset
80 myBuffer.addAll(_writes);
a77f0a9ed93c Add support for optimistic log batching.
Dan Creswell <dan.creswell@gmail.com>
parents:
diff changeset
81 _writes.clear();
a77f0a9ed93c Add support for optimistic log batching.
Dan Creswell <dan.creswell@gmail.com>
parents:
diff changeset
82 }
a77f0a9ed93c Add support for optimistic log batching.
Dan Creswell <dan.creswell@gmail.com>
parents:
diff changeset
83
a77f0a9ed93c Add support for optimistic log batching.
Dan Creswell <dan.creswell@gmail.com>
parents:
diff changeset
84 Iterator<WriteRequest> myWrites = myBuffer.iterator();
a77f0a9ed93c Add support for optimistic log batching.
Dan Creswell <dan.creswell@gmail.com>
parents:
diff changeset
85 while (myWrites.hasNext())
a77f0a9ed93c Add support for optimistic log batching.
Dan Creswell <dan.creswell@gmail.com>
parents:
diff changeset
86 _prevayler.logCommand(myWrites.next().getCommand(), false);
a77f0a9ed93c Add support for optimistic log batching.
Dan Creswell <dan.creswell@gmail.com>
parents:
diff changeset
87
a77f0a9ed93c Add support for optimistic log batching.
Dan Creswell <dan.creswell@gmail.com>
parents:
diff changeset
88 myAllWrites.addAll(myBuffer);
a77f0a9ed93c Add support for optimistic log batching.
Dan Creswell <dan.creswell@gmail.com>
parents:
diff changeset
89 }
a77f0a9ed93c Add support for optimistic log batching.
Dan Creswell <dan.creswell@gmail.com>
parents:
diff changeset
90
a77f0a9ed93c Add support for optimistic log batching.
Dan Creswell <dan.creswell@gmail.com>
parents:
diff changeset
91 // Now dispatch execution of all logged commands - execute our own first
a77f0a9ed93c Add support for optimistic log batching.
Dan Creswell <dan.creswell@gmail.com>
parents:
diff changeset
92 //
a77f0a9ed93c Add support for optimistic log batching.
Dan Creswell <dan.creswell@gmail.com>
parents:
diff changeset
93 try {
a77f0a9ed93c Add support for optimistic log batching.
Dan Creswell <dan.creswell@gmail.com>
parents:
diff changeset
94 return aComm.execute(_prevayler.system());
a77f0a9ed93c Add support for optimistic log batching.
Dan Creswell <dan.creswell@gmail.com>
parents:
diff changeset
95 } finally {
a77f0a9ed93c Add support for optimistic log batching.
Dan Creswell <dan.creswell@gmail.com>
parents:
diff changeset
96 Iterator<WriteRequest> myTargets = myAllWrites.iterator();
a77f0a9ed93c Add support for optimistic log batching.
Dan Creswell <dan.creswell@gmail.com>
parents:
diff changeset
97 while (myTargets.hasNext()) {
a77f0a9ed93c Add support for optimistic log batching.
Dan Creswell <dan.creswell@gmail.com>
parents:
diff changeset
98 // _outCount.incrementAndGet();
a77f0a9ed93c Add support for optimistic log batching.
Dan Creswell <dan.creswell@gmail.com>
parents:
diff changeset
99 myTargets.next().dispatch();
a77f0a9ed93c Add support for optimistic log batching.
Dan Creswell <dan.creswell@gmail.com>
parents:
diff changeset
100 }
a77f0a9ed93c Add support for optimistic log batching.
Dan Creswell <dan.creswell@gmail.com>
parents:
diff changeset
101
a77f0a9ed93c Add support for optimistic log batching.
Dan Creswell <dan.creswell@gmail.com>
parents:
diff changeset
102 // System.out.println("Logger: incount = " + _inCount + " outcount = " + _outCount);
a77f0a9ed93c Add support for optimistic log batching.
Dan Creswell <dan.creswell@gmail.com>
parents:
diff changeset
103 }
a77f0a9ed93c Add support for optimistic log batching.
Dan Creswell <dan.creswell@gmail.com>
parents:
diff changeset
104 }
a77f0a9ed93c Add support for optimistic log batching.
Dan Creswell <dan.creswell@gmail.com>
parents:
diff changeset
105 }
a77f0a9ed93c Add support for optimistic log batching.
Dan Creswell <dan.creswell@gmail.com>
parents:
diff changeset
106
a77f0a9ed93c Add support for optimistic log batching.
Dan Creswell <dan.creswell@gmail.com>
parents:
diff changeset
107 private boolean haveWrites() throws Exception {
a77f0a9ed93c Add support for optimistic log batching.
Dan Creswell <dan.creswell@gmail.com>
parents:
diff changeset
108 synchronized(this) {
a77f0a9ed93c Add support for optimistic log batching.
Dan Creswell <dan.creswell@gmail.com>
parents:
diff changeset
109 if (_writes.size() > 0)
a77f0a9ed93c Add support for optimistic log batching.
Dan Creswell <dan.creswell@gmail.com>
parents:
diff changeset
110 return true;
a77f0a9ed93c Add support for optimistic log batching.
Dan Creswell <dan.creswell@gmail.com>
parents:
diff changeset
111 else {
a77f0a9ed93c Add support for optimistic log batching.
Dan Creswell <dan.creswell@gmail.com>
parents:
diff changeset
112 _writing = false;
a77f0a9ed93c Add support for optimistic log batching.
Dan Creswell <dan.creswell@gmail.com>
parents:
diff changeset
113 _prevayler.flush();
a77f0a9ed93c Add support for optimistic log batching.
Dan Creswell <dan.creswell@gmail.com>
parents:
diff changeset
114
a77f0a9ed93c Add support for optimistic log batching.
Dan Creswell <dan.creswell@gmail.com>
parents:
diff changeset
115 return false;
a77f0a9ed93c Add support for optimistic log batching.
Dan Creswell <dan.creswell@gmail.com>
parents:
diff changeset
116 }
a77f0a9ed93c Add support for optimistic log batching.
Dan Creswell <dan.creswell@gmail.com>
parents:
diff changeset
117 }
a77f0a9ed93c Add support for optimistic log batching.
Dan Creswell <dan.creswell@gmail.com>
parents:
diff changeset
118 }
a77f0a9ed93c Add support for optimistic log batching.
Dan Creswell <dan.creswell@gmail.com>
parents:
diff changeset
119
a77f0a9ed93c Add support for optimistic log batching.
Dan Creswell <dan.creswell@gmail.com>
parents:
diff changeset
120 public Snapshotter takeSnapshot() throws IOException {
a77f0a9ed93c Add support for optimistic log batching.
Dan Creswell <dan.creswell@gmail.com>
parents:
diff changeset
121 return _prevayler.takeSnapshot();
a77f0a9ed93c Add support for optimistic log batching.
Dan Creswell <dan.creswell@gmail.com>
parents:
diff changeset
122 }
a77f0a9ed93c Add support for optimistic log batching.
Dan Creswell <dan.creswell@gmail.com>
parents:
diff changeset
123
a77f0a9ed93c Add support for optimistic log batching.
Dan Creswell <dan.creswell@gmail.com>
parents:
diff changeset
124 private class WriteRequest {
a77f0a9ed93c Add support for optimistic log batching.
Dan Creswell <dan.creswell@gmail.com>
parents:
diff changeset
125 private Command _comm;
a77f0a9ed93c Add support for optimistic log batching.
Dan Creswell <dan.creswell@gmail.com>
parents:
diff changeset
126 private Object _lock = new Object();
a77f0a9ed93c Add support for optimistic log batching.
Dan Creswell <dan.creswell@gmail.com>
parents:
diff changeset
127 private boolean _exit = false;
a77f0a9ed93c Add support for optimistic log batching.
Dan Creswell <dan.creswell@gmail.com>
parents:
diff changeset
128
a77f0a9ed93c Add support for optimistic log batching.
Dan Creswell <dan.creswell@gmail.com>
parents:
diff changeset
129 WriteRequest(Command aComm) {
a77f0a9ed93c Add support for optimistic log batching.
Dan Creswell <dan.creswell@gmail.com>
parents:
diff changeset
130 // _inCount.incrementAndGet();
a77f0a9ed93c Add support for optimistic log batching.
Dan Creswell <dan.creswell@gmail.com>
parents:
diff changeset
131 _comm = aComm;
a77f0a9ed93c Add support for optimistic log batching.
Dan Creswell <dan.creswell@gmail.com>
parents:
diff changeset
132 }
a77f0a9ed93c Add support for optimistic log batching.
Dan Creswell <dan.creswell@gmail.com>
parents:
diff changeset
133
a77f0a9ed93c Add support for optimistic log batching.
Dan Creswell <dan.creswell@gmail.com>
parents:
diff changeset
134 Command getCommand() {
a77f0a9ed93c Add support for optimistic log batching.
Dan Creswell <dan.creswell@gmail.com>
parents:
diff changeset
135 return _comm;
a77f0a9ed93c Add support for optimistic log batching.
Dan Creswell <dan.creswell@gmail.com>
parents:
diff changeset
136 }
a77f0a9ed93c Add support for optimistic log batching.
Dan Creswell <dan.creswell@gmail.com>
parents:
diff changeset
137
a77f0a9ed93c Add support for optimistic log batching.
Dan Creswell <dan.creswell@gmail.com>
parents:
diff changeset
138 void dispatch() {
a77f0a9ed93c Add support for optimistic log batching.
Dan Creswell <dan.creswell@gmail.com>
parents:
diff changeset
139 synchronized(_lock) {
a77f0a9ed93c Add support for optimistic log batching.
Dan Creswell <dan.creswell@gmail.com>
parents:
diff changeset
140 _exit = true;
a77f0a9ed93c Add support for optimistic log batching.
Dan Creswell <dan.creswell@gmail.com>
parents:
diff changeset
141 _lock.notify();
a77f0a9ed93c Add support for optimistic log batching.
Dan Creswell <dan.creswell@gmail.com>
parents:
diff changeset
142 }
a77f0a9ed93c Add support for optimistic log batching.
Dan Creswell <dan.creswell@gmail.com>
parents:
diff changeset
143 }
a77f0a9ed93c Add support for optimistic log batching.
Dan Creswell <dan.creswell@gmail.com>
parents:
diff changeset
144
a77f0a9ed93c Add support for optimistic log batching.
Dan Creswell <dan.creswell@gmail.com>
parents:
diff changeset
145 void await() {
a77f0a9ed93c Add support for optimistic log batching.
Dan Creswell <dan.creswell@gmail.com>
parents:
diff changeset
146 synchronized(_lock) {
a77f0a9ed93c Add support for optimistic log batching.
Dan Creswell <dan.creswell@gmail.com>
parents:
diff changeset
147 while (! _exit) {
a77f0a9ed93c Add support for optimistic log batching.
Dan Creswell <dan.creswell@gmail.com>
parents:
diff changeset
148 try {
a77f0a9ed93c Add support for optimistic log batching.
Dan Creswell <dan.creswell@gmail.com>
parents:
diff changeset
149 _lock.wait();
a77f0a9ed93c Add support for optimistic log batching.
Dan Creswell <dan.creswell@gmail.com>
parents:
diff changeset
150 } catch (InterruptedException anIE) {
a77f0a9ed93c Add support for optimistic log batching.
Dan Creswell <dan.creswell@gmail.com>
parents:
diff changeset
151
a77f0a9ed93c Add support for optimistic log batching.
Dan Creswell <dan.creswell@gmail.com>
parents:
diff changeset
152 }
a77f0a9ed93c Add support for optimistic log batching.
Dan Creswell <dan.creswell@gmail.com>
parents:
diff changeset
153 }
a77f0a9ed93c Add support for optimistic log batching.
Dan Creswell <dan.creswell@gmail.com>
parents:
diff changeset
154 }
a77f0a9ed93c Add support for optimistic log batching.
Dan Creswell <dan.creswell@gmail.com>
parents:
diff changeset
155 }
a77f0a9ed93c Add support for optimistic log batching.
Dan Creswell <dan.creswell@gmail.com>
parents:
diff changeset
156 }
a77f0a9ed93c Add support for optimistic log batching.
Dan Creswell <dan.creswell@gmail.com>
parents:
diff changeset
157 }