MapDBLog: configure LogMap parameters
Change-Id: I6d69b0b3824554c46e8aae466c3a03cf2b318eac
Showing
1 changed file
with
21 additions
and
12 deletions
... | @@ -18,6 +18,7 @@ import org.mapdb.Atomic; | ... | @@ -18,6 +18,7 @@ import org.mapdb.Atomic; |
18 | import org.mapdb.BTreeMap; | 18 | import org.mapdb.BTreeMap; |
19 | import org.mapdb.DB; | 19 | import org.mapdb.DB; |
20 | import org.mapdb.DBMaker; | 20 | import org.mapdb.DBMaker; |
21 | +import org.mapdb.Serializer; | ||
21 | import org.mapdb.TxBlock; | 22 | import org.mapdb.TxBlock; |
22 | import org.mapdb.TxMaker; | 23 | import org.mapdb.TxMaker; |
23 | import org.onlab.onos.store.serializers.StoreSerializer; | 24 | import org.onlab.onos.store.serializers.StoreSerializer; |
... | @@ -84,7 +85,7 @@ public class MapDBLog implements Log { | ... | @@ -84,7 +85,7 @@ public class MapDBLog implements Log { |
84 | txMaker.execute(new TxBlock() { | 85 | txMaker.execute(new TxBlock() { |
85 | @Override | 86 | @Override |
86 | public void tx(DB db) { | 87 | public void tx(DB db) { |
87 | - BTreeMap<Long, byte[]> log = db.getTreeMap(LOG_NAME); | 88 | + BTreeMap<Long, byte[]> log = getLogMap(db); |
88 | Atomic.Long size = db.getAtomicLong(SIZE_FIELD_NAME); | 89 | Atomic.Long size = db.getAtomicLong(SIZE_FIELD_NAME); |
89 | long nextIndex = log.isEmpty() ? 1 : log.lastKey() + 1; | 90 | long nextIndex = log.isEmpty() ? 1 : log.lastKey() + 1; |
90 | for (Entry entry : entries) { | 91 | for (Entry entry : entries) { |
... | @@ -105,7 +106,7 @@ public class MapDBLog implements Log { | ... | @@ -105,7 +106,7 @@ public class MapDBLog implements Log { |
105 | assertIsOpen(); | 106 | assertIsOpen(); |
106 | DB db = txMaker.makeTx(); | 107 | DB db = txMaker.makeTx(); |
107 | try { | 108 | try { |
108 | - BTreeMap<Long, byte[]> log = db.getTreeMap(LOG_NAME); | 109 | + BTreeMap<Long, byte[]> log = getLogMap(db); |
109 | return log.containsKey(index); | 110 | return log.containsKey(index); |
110 | } finally { | 111 | } finally { |
111 | db.close(); | 112 | db.close(); |
... | @@ -118,7 +119,7 @@ public class MapDBLog implements Log { | ... | @@ -118,7 +119,7 @@ public class MapDBLog implements Log { |
118 | txMaker.execute(new TxBlock() { | 119 | txMaker.execute(new TxBlock() { |
119 | @Override | 120 | @Override |
120 | public void tx(DB db) { | 121 | public void tx(DB db) { |
121 | - BTreeMap<Long, byte[]> log = db.getTreeMap(LOG_NAME); | 122 | + BTreeMap<Long, byte[]> log = getLogMap(db); |
122 | Atomic.Long size = db.getAtomicLong(SIZE_FIELD_NAME); | 123 | Atomic.Long size = db.getAtomicLong(SIZE_FIELD_NAME); |
123 | log.clear(); | 124 | log.clear(); |
124 | size.set(0); | 125 | size.set(0); |
... | @@ -131,7 +132,7 @@ public class MapDBLog implements Log { | ... | @@ -131,7 +132,7 @@ public class MapDBLog implements Log { |
131 | assertIsOpen(); | 132 | assertIsOpen(); |
132 | DB db = txMaker.makeTx(); | 133 | DB db = txMaker.makeTx(); |
133 | try { | 134 | try { |
134 | - BTreeMap<Long, byte[]> log = db.getTreeMap(LOG_NAME); | 135 | + BTreeMap<Long, byte[]> log = getLogMap(db); |
135 | return log.isEmpty() ? null : serializer.decode(log.firstEntry().getValue()); | 136 | return log.isEmpty() ? null : serializer.decode(log.firstEntry().getValue()); |
136 | } finally { | 137 | } finally { |
137 | db.close(); | 138 | db.close(); |
... | @@ -143,7 +144,7 @@ public class MapDBLog implements Log { | ... | @@ -143,7 +144,7 @@ public class MapDBLog implements Log { |
143 | assertIsOpen(); | 144 | assertIsOpen(); |
144 | DB db = txMaker.makeTx(); | 145 | DB db = txMaker.makeTx(); |
145 | try { | 146 | try { |
146 | - BTreeMap<Long, byte[]> log = db.getTreeMap(LOG_NAME); | 147 | + BTreeMap<Long, byte[]> log = getLogMap(db); |
147 | return log.isEmpty() ? 0 : log.firstKey(); | 148 | return log.isEmpty() ? 0 : log.firstKey(); |
148 | } finally { | 149 | } finally { |
149 | db.close(); | 150 | db.close(); |
... | @@ -155,7 +156,7 @@ public class MapDBLog implements Log { | ... | @@ -155,7 +156,7 @@ public class MapDBLog implements Log { |
155 | assertIsOpen(); | 156 | assertIsOpen(); |
156 | DB db = txMaker.makeTx(); | 157 | DB db = txMaker.makeTx(); |
157 | try { | 158 | try { |
158 | - BTreeMap<Long, byte[]> log = db.getTreeMap(LOG_NAME); | 159 | + BTreeMap<Long, byte[]> log = getLogMap(db); |
159 | if (log.isEmpty()) { | 160 | if (log.isEmpty()) { |
160 | throw new LogIndexOutOfBoundsException("Log is empty"); | 161 | throw new LogIndexOutOfBoundsException("Log is empty"); |
161 | } else if (from < log.firstKey()) { | 162 | } else if (from < log.firstKey()) { |
... | @@ -179,7 +180,7 @@ public class MapDBLog implements Log { | ... | @@ -179,7 +180,7 @@ public class MapDBLog implements Log { |
179 | assertIsOpen(); | 180 | assertIsOpen(); |
180 | DB db = txMaker.makeTx(); | 181 | DB db = txMaker.makeTx(); |
181 | try { | 182 | try { |
182 | - BTreeMap<Long, byte[]> log = db.getTreeMap(LOG_NAME); | 183 | + BTreeMap<Long, byte[]> log = getLogMap(db); |
183 | byte[] entryBytes = log.get(index); | 184 | byte[] entryBytes = log.get(index); |
184 | return entryBytes == null ? null : serializer.decode(entryBytes); | 185 | return entryBytes == null ? null : serializer.decode(entryBytes); |
185 | } finally { | 186 | } finally { |
... | @@ -192,7 +193,7 @@ public class MapDBLog implements Log { | ... | @@ -192,7 +193,7 @@ public class MapDBLog implements Log { |
192 | assertIsOpen(); | 193 | assertIsOpen(); |
193 | DB db = txMaker.makeTx(); | 194 | DB db = txMaker.makeTx(); |
194 | try { | 195 | try { |
195 | - BTreeMap<Long, byte[]> log = db.getTreeMap(LOG_NAME); | 196 | + BTreeMap<Long, byte[]> log = getLogMap(db); |
196 | return log.isEmpty(); | 197 | return log.isEmpty(); |
197 | } finally { | 198 | } finally { |
198 | db.close(); | 199 | db.close(); |
... | @@ -204,7 +205,7 @@ public class MapDBLog implements Log { | ... | @@ -204,7 +205,7 @@ public class MapDBLog implements Log { |
204 | assertIsOpen(); | 205 | assertIsOpen(); |
205 | DB db = txMaker.makeTx(); | 206 | DB db = txMaker.makeTx(); |
206 | try { | 207 | try { |
207 | - BTreeMap<Long, byte[]> log = db.getTreeMap(LOG_NAME); | 208 | + BTreeMap<Long, byte[]> log = getLogMap(db); |
208 | return log.isEmpty() ? null : serializer.decode(log.lastEntry().getValue()); | 209 | return log.isEmpty() ? null : serializer.decode(log.lastEntry().getValue()); |
209 | } finally { | 210 | } finally { |
210 | db.close(); | 211 | db.close(); |
... | @@ -216,7 +217,7 @@ public class MapDBLog implements Log { | ... | @@ -216,7 +217,7 @@ public class MapDBLog implements Log { |
216 | assertIsOpen(); | 217 | assertIsOpen(); |
217 | DB db = txMaker.makeTx(); | 218 | DB db = txMaker.makeTx(); |
218 | try { | 219 | try { |
219 | - BTreeMap<Long, byte[]> log = db.getTreeMap(LOG_NAME); | 220 | + BTreeMap<Long, byte[]> log = getLogMap(db); |
220 | return log.isEmpty() ? 0 : log.lastKey(); | 221 | return log.isEmpty() ? 0 : log.lastKey(); |
221 | } finally { | 222 | } finally { |
222 | db.close(); | 223 | db.close(); |
... | @@ -229,7 +230,7 @@ public class MapDBLog implements Log { | ... | @@ -229,7 +230,7 @@ public class MapDBLog implements Log { |
229 | txMaker.execute(new TxBlock() { | 230 | txMaker.execute(new TxBlock() { |
230 | @Override | 231 | @Override |
231 | public void tx(DB db) { | 232 | public void tx(DB db) { |
232 | - BTreeMap<Long, byte[]> log = db.getTreeMap(LOG_NAME); | 233 | + BTreeMap<Long, byte[]> log = getLogMap(db); |
233 | Atomic.Long size = db.getAtomicLong(SIZE_FIELD_NAME); | 234 | Atomic.Long size = db.getAtomicLong(SIZE_FIELD_NAME); |
234 | long startIndex = index + 1; | 235 | long startIndex = index + 1; |
235 | long endIndex = log.lastKey(); | 236 | long endIndex = log.lastKey(); |
... | @@ -265,7 +266,7 @@ public class MapDBLog implements Log { | ... | @@ -265,7 +266,7 @@ public class MapDBLog implements Log { |
265 | txMaker.execute(new TxBlock() { | 266 | txMaker.execute(new TxBlock() { |
266 | @Override | 267 | @Override |
267 | public void tx(DB db) { | 268 | public void tx(DB db) { |
268 | - BTreeMap<Long, byte[]> log = db.getTreeMap(LOG_NAME); | 269 | + BTreeMap<Long, byte[]> log = getLogMap(db); |
269 | Atomic.Long size = db.getAtomicLong(SIZE_FIELD_NAME); | 270 | Atomic.Long size = db.getAtomicLong(SIZE_FIELD_NAME); |
270 | ConcurrentNavigableMap<Long, byte[]> headMap = log.headMap(index); | 271 | ConcurrentNavigableMap<Long, byte[]> headMap = log.headMap(index); |
271 | long deletedBytes = headMap.keySet().stream().mapToLong(i -> log.remove(i).length).sum(); | 272 | long deletedBytes = headMap.keySet().stream().mapToLong(i -> log.remove(i).length).sum(); |
... | @@ -277,4 +278,12 @@ public class MapDBLog implements Log { | ... | @@ -277,4 +278,12 @@ public class MapDBLog implements Log { |
277 | } | 278 | } |
278 | }); | 279 | }); |
279 | } | 280 | } |
281 | + | ||
282 | + private BTreeMap<Long, byte[]> getLogMap(DB db) { | ||
283 | + return db.createTreeMap(LOG_NAME) | ||
284 | + .valuesOutsideNodesEnable() | ||
285 | + .keySerializerWrap(Serializer.LONG) | ||
286 | + .valueSerializer(Serializer.BYTE_ARRAY) | ||
287 | + .makeOrGet(); | ||
288 | + } | ||
280 | } | 289 | } | ... | ... |
-
Please register or login to post a comment