snapshot compression
Change-Id: I0de15a66a129d2966a196b2de5491456aacc20e2
Showing
1 changed file
with
23 additions
and
0 deletions
... | @@ -2,10 +2,14 @@ package org.onlab.onos.store.service.impl; | ... | @@ -2,10 +2,14 @@ package org.onlab.onos.store.service.impl; |
2 | 2 | ||
3 | import static org.slf4j.LoggerFactory.getLogger; | 3 | import static org.slf4j.LoggerFactory.getLogger; |
4 | 4 | ||
5 | +import java.io.ByteArrayInputStream; | ||
6 | +import java.io.ByteArrayOutputStream; | ||
5 | import java.util.ArrayList; | 7 | import java.util.ArrayList; |
6 | import java.util.Arrays; | 8 | import java.util.Arrays; |
7 | import java.util.List; | 9 | import java.util.List; |
8 | import java.util.Map; | 10 | import java.util.Map; |
11 | +import java.util.zip.DeflaterOutputStream; | ||
12 | +import java.util.zip.InflaterInputStream; | ||
9 | 13 | ||
10 | import net.kuujo.copycat.Command; | 14 | import net.kuujo.copycat.Command; |
11 | import net.kuujo.copycat.Query; | 15 | import net.kuujo.copycat.Query; |
... | @@ -23,6 +27,7 @@ import org.slf4j.Logger; | ... | @@ -23,6 +27,7 @@ import org.slf4j.Logger; |
23 | 27 | ||
24 | import com.google.common.collect.ImmutableList; | 28 | import com.google.common.collect.ImmutableList; |
25 | import com.google.common.collect.Maps; | 29 | import com.google.common.collect.Maps; |
30 | +import com.google.common.io.ByteStreams; | ||
26 | 31 | ||
27 | /** | 32 | /** |
28 | * StateMachine whose transitions are coordinated/replicated | 33 | * StateMachine whose transitions are coordinated/replicated |
... | @@ -50,6 +55,8 @@ public class DatabaseStateMachine implements StateMachine { | ... | @@ -50,6 +55,8 @@ public class DatabaseStateMachine implements StateMachine { |
50 | 55 | ||
51 | private State state = new State(); | 56 | private State state = new State(); |
52 | 57 | ||
58 | + private boolean compressSnapshot = false; | ||
59 | + | ||
53 | @Command | 60 | @Command |
54 | public boolean createTable(String tableName) { | 61 | public boolean createTable(String tableName) { |
55 | return state.getTables().putIfAbsent(tableName, Maps.newHashMap()) == null; | 62 | return state.getTables().putIfAbsent(tableName, Maps.newHashMap()) == null; |
... | @@ -214,7 +221,16 @@ public class DatabaseStateMachine implements StateMachine { | ... | @@ -214,7 +221,16 @@ public class DatabaseStateMachine implements StateMachine { |
214 | @Override | 221 | @Override |
215 | public byte[] takeSnapshot() { | 222 | public byte[] takeSnapshot() { |
216 | try { | 223 | try { |
224 | + if (compressSnapshot) { | ||
225 | + byte[] input = SERIALIZER.encode(state); | ||
226 | + ByteArrayOutputStream comp = new ByteArrayOutputStream(input.length); | ||
227 | + DeflaterOutputStream compressor = new DeflaterOutputStream(comp); | ||
228 | + compressor.write(input, 0, input.length); | ||
229 | + compressor.close(); | ||
230 | + return comp.toByteArray(); | ||
231 | + } else { | ||
217 | return SERIALIZER.encode(state); | 232 | return SERIALIZER.encode(state); |
233 | + } | ||
218 | } catch (Exception e) { | 234 | } catch (Exception e) { |
219 | log.error("Failed to take snapshot", e); | 235 | log.error("Failed to take snapshot", e); |
220 | throw new SnapshotException(e); | 236 | throw new SnapshotException(e); |
... | @@ -224,7 +240,14 @@ public class DatabaseStateMachine implements StateMachine { | ... | @@ -224,7 +240,14 @@ public class DatabaseStateMachine implements StateMachine { |
224 | @Override | 240 | @Override |
225 | public void installSnapshot(byte[] data) { | 241 | public void installSnapshot(byte[] data) { |
226 | try { | 242 | try { |
243 | + if (compressSnapshot) { | ||
244 | + ByteArrayInputStream in = new ByteArrayInputStream(data); | ||
245 | + InflaterInputStream decompressor = new InflaterInputStream(in); | ||
246 | + ByteStreams.toByteArray(decompressor); | ||
247 | + this.state = SERIALIZER.decode(ByteStreams.toByteArray(decompressor)); | ||
248 | + } else { | ||
227 | this.state = SERIALIZER.decode(data); | 249 | this.state = SERIALIZER.decode(data); |
250 | + } | ||
228 | } catch (Exception e) { | 251 | } catch (Exception e) { |
229 | log.error("Failed to install from snapshot", e); | 252 | log.error("Failed to install from snapshot", e); |
230 | throw new SnapshotException(e); | 253 | throw new SnapshotException(e); | ... | ... |
-
Please register or login to post a comment