2 * Copyright (c) 2014 Cisco Systems, Inc. and others. All rights reserved.
4 * This program and the accompanying materials are made available under the
5 * terms of the Eclipse Public License v1.0 which accompanies this distribution,
6 * and is available at http://www.eclipse.org/legal/epl-v10.html
9 package org.opendaylight.controller.cluster.datastore.utils;
11 import akka.dispatch.Futures;
12 import akka.japi.Option;
13 import akka.persistence.SelectedSnapshot;
14 import akka.persistence.SnapshotMetadata;
15 import akka.persistence.SnapshotSelectionCriteria;
16 import akka.persistence.snapshot.japi.SnapshotStore;
17 import com.google.common.collect.Iterables;
18 import scala.concurrent.Future;
20 import java.util.ArrayList;
21 import java.util.HashMap;
22 import java.util.List;
25 public class InMemorySnapshotStore extends SnapshotStore {
27 Map<String, List<Snapshot>> snapshots = new HashMap<>();
29 @Override public Future<Option<SelectedSnapshot>> doLoadAsync(String s,
30 SnapshotSelectionCriteria snapshotSelectionCriteria) {
31 List<Snapshot> snapshotList = snapshots.get(s);
32 if(snapshotList == null){
33 return Futures.successful(Option.<SelectedSnapshot>none());
36 Snapshot snapshot = Iterables.getLast(snapshotList);
37 SelectedSnapshot selectedSnapshot =
38 new SelectedSnapshot(snapshot.getMetadata(), snapshot.getData());
39 return Futures.successful(Option.some(selectedSnapshot));
42 @Override public Future<Void> doSaveAsync(SnapshotMetadata snapshotMetadata, Object o) {
43 List<Snapshot> snapshotList = snapshots.get(snapshotMetadata.persistenceId());
45 if(snapshotList == null){
46 snapshotList = new ArrayList<>();
47 snapshots.put(snapshotMetadata.persistenceId(), snapshotList);
49 snapshotList.add(new Snapshot(snapshotMetadata, o));
51 return Futures.successful(null);
54 @Override public void onSaved(SnapshotMetadata snapshotMetadata) throws Exception {
57 @Override public void doDelete(SnapshotMetadata snapshotMetadata) throws Exception {
58 List<Snapshot> snapshotList = snapshots.get(snapshotMetadata.persistenceId());
60 if(snapshotList == null){
66 for(int i=0;i<snapshotList.size(); i++){
67 Snapshot snapshot = snapshotList.get(i);
68 if(snapshotMetadata.equals(snapshot.getMetadata())){
74 if(deleteIndex != -1){
75 snapshotList.remove(deleteIndex);
80 @Override public void doDelete(String s, SnapshotSelectionCriteria snapshotSelectionCriteria)
82 List<Snapshot> snapshotList = snapshots.get(s);
84 if(snapshotList == null){
88 // TODO : This is a quick and dirty implementation. Do actual match later.
93 private static class Snapshot {
94 private final SnapshotMetadata metadata;
95 private final Object data;
97 private Snapshot(SnapshotMetadata metadata, Object data) {
98 this.metadata = metadata;
102 public SnapshotMetadata getMetadata() {
106 public Object getData() {