diff options
author | CNlucius <lukai1@huawei.com> | 2016-09-13 11:40:12 +0800 |
---|---|---|
committer | CNlucius <lukai1@huawei.com> | 2016-09-13 11:41:53 +0800 |
commit | b731e2f1dd0972409b136aebc7b463dd72c9cfad (patch) | |
tree | 5107d7d80c19ad8076c2c97c2b5ef8d1cf3ab903 /framework/src/onos/core/store/persistence/src/main/java/org/onosproject/persistence/impl | |
parent | ee93993458266114c29271a481ef9ce7ce621b2a (diff) |
ONOSFW-171
O/S-SFC-ONOS scenario documentation
Change-Id: I51ae1cf736ea24ab6680f8edca1b2bf5dd598365
Signed-off-by: CNlucius <lukai1@huawei.com>
Diffstat (limited to 'framework/src/onos/core/store/persistence/src/main/java/org/onosproject/persistence/impl')
7 files changed, 0 insertions, 697 deletions
diff --git a/framework/src/onos/core/store/persistence/src/main/java/org/onosproject/persistence/impl/DefaultPersistentMapBuilder.java b/framework/src/onos/core/store/persistence/src/main/java/org/onosproject/persistence/impl/DefaultPersistentMapBuilder.java deleted file mode 100644 index 88c7d148..00000000 --- a/framework/src/onos/core/store/persistence/src/main/java/org/onosproject/persistence/impl/DefaultPersistentMapBuilder.java +++ /dev/null @@ -1,63 +0,0 @@ -/* - * Copyright 2015 Open Networking Laboratory - * - * Licensed under the Apache License, Version 2.0 (the "License"); - * you may not use this file except in compliance with the License. - * You may obtain a copy of the License at - * - * http://www.apache.org/licenses/LICENSE-2.0 - * - * Unless required by applicable law or agreed to in writing, software - * distributed under the License is distributed on an "AS IS" BASIS, - * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. - * See the License for the specific language governing permissions and - * limitations under the License. - */ - -package org.onosproject.persistence.impl; - -import org.mapdb.DB; -import org.onosproject.persistence.PersistentMapBuilder; -import org.onosproject.store.service.Serializer; - -import java.util.Map; - -import static com.google.common.base.Preconditions.checkArgument; -import static com.google.common.base.Preconditions.checkNotNull; - -/** - * Default builder for persistent maps stored in the mapDB local database via the persistence service. - */ -public class DefaultPersistentMapBuilder<K, V> implements PersistentMapBuilder<K, V> { - - private final DB localDB; - - private String name = null; - - private Serializer serializer = null; - - - public DefaultPersistentMapBuilder(DB localDB) { - checkNotNull(localDB, "The local database cannot be null."); - this.localDB = localDB; - } - - public PersistentMapBuilder<K, V> withName(String name) { - this.name = PersistenceManager.MAP_PREFIX + checkNotNull(name); - return this; - } - - public PersistentMapBuilder<K, V> withSerializer(Serializer serializer) { - checkArgument(this.serializer == null); - checkNotNull(serializer); - this.serializer = serializer; - return this; - } - - public Map<K, V> build() { - checkNotNull(name, "The name must be assigned."); - checkNotNull(serializer, "The key serializer must be assigned."); - - return new PersistentMap<K, V>(serializer, localDB, name); - } -}
\ No newline at end of file diff --git a/framework/src/onos/core/store/persistence/src/main/java/org/onosproject/persistence/impl/DefaultPersistentSetBuilder.java b/framework/src/onos/core/store/persistence/src/main/java/org/onosproject/persistence/impl/DefaultPersistentSetBuilder.java deleted file mode 100644 index e1544fb4..00000000 --- a/framework/src/onos/core/store/persistence/src/main/java/org/onosproject/persistence/impl/DefaultPersistentSetBuilder.java +++ /dev/null @@ -1,59 +0,0 @@ -/* - * Copyright 2015 Open Networking Laboratory - * - * Licensed under the Apache License, Version 2.0 (the "License"); - * you may not use this file except in compliance with the License. - * You may obtain a copy of the License at - * - * http://www.apache.org/licenses/LICENSE-2.0 - * - * Unless required by applicable law or agreed to in writing, software - * distributed under the License is distributed on an "AS IS" BASIS, - * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. - * See the License for the specific language governing permissions and - * limitations under the License. - */ - -package org.onosproject.persistence.impl; - -import org.mapdb.DB; -import org.onosproject.persistence.PersistentSetBuilder; -import org.onosproject.store.service.Serializer; - -import static com.google.common.base.Preconditions.checkArgument; -import static com.google.common.base.Preconditions.checkNotNull; - -/** - * Default builder for persistent sets stored in the mapDB local database via the persistence service.. - */ -public class DefaultPersistentSetBuilder<E> implements PersistentSetBuilder<E> { - - private final DB localDB; - - private String name = null; - - private Serializer serializer = null; - - public DefaultPersistentSetBuilder(DB localDB) { - this.localDB = checkNotNull(localDB, "The local database cannot be null."); - } - - public PersistentSetBuilder<E> withName(String name) { - this.name = PersistenceManager.SET_PREFIX + checkNotNull(name); - return this; - } - - public PersistentSetBuilder<E> withSerializer(Serializer serializer) { - checkArgument(this.serializer == null); - checkNotNull(serializer); - this.serializer = serializer; - return this; - } - - public PersistentSet<E> build() { - checkNotNull(name, "The name must be assigned."); - checkNotNull(serializer, "The serializer must be assigned."); - - return new PersistentSet<E>(serializer, localDB, name); - } -}
\ No newline at end of file diff --git a/framework/src/onos/core/store/persistence/src/main/java/org/onosproject/persistence/impl/PersistenceException.java b/framework/src/onos/core/store/persistence/src/main/java/org/onosproject/persistence/impl/PersistenceException.java deleted file mode 100644 index f2ba20c2..00000000 --- a/framework/src/onos/core/store/persistence/src/main/java/org/onosproject/persistence/impl/PersistenceException.java +++ /dev/null @@ -1,30 +0,0 @@ -/* - * Copyright 2015 Open Networking Laboratory - * - * Licensed under the Apache License, Version 2.0 (the "License"); - * you may not use this file except in compliance with the License. - * You may obtain a copy of the License at - * - * http://www.apache.org/licenses/LICENSE-2.0 - * - * Unless required by applicable law or agreed to in writing, software - * distributed under the License is distributed on an "AS IS" BASIS, - * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. - * See the License for the specific language governing permissions and - * limitations under the License. - */ - -package org.onosproject.persistence.impl; - -/** - * An exception defined for failures of the local persistent store system. - */ - -/** - * Throws an exception with the specified message. - */ -public class PersistenceException extends RuntimeException { - public PersistenceException(String s) { - super(s); - } -} diff --git a/framework/src/onos/core/store/persistence/src/main/java/org/onosproject/persistence/impl/PersistenceManager.java b/framework/src/onos/core/store/persistence/src/main/java/org/onosproject/persistence/impl/PersistenceManager.java deleted file mode 100644 index 05c577c0..00000000 --- a/framework/src/onos/core/store/persistence/src/main/java/org/onosproject/persistence/impl/PersistenceManager.java +++ /dev/null @@ -1,139 +0,0 @@ -/* - * Copyright 2015 Open Networking Laboratory - * - * Licensed under the Apache License, Version 2.0 (the "License"); - * you may not use this file except in compliance with the License. - * You may obtain a copy of the License at - * - * http://www.apache.org/licenses/LICENSE-2.0 - * - * Unless required by applicable law or agreed to in writing, software - * distributed under the License is distributed on an "AS IS" BASIS, - * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. - * See the License for the specific language governing permissions and - * limitations under the License. - */ - -package org.onosproject.persistence.impl; - -import org.apache.felix.scr.annotations.Activate; -import org.apache.felix.scr.annotations.Component; -import org.apache.felix.scr.annotations.Deactivate; -import org.apache.felix.scr.annotations.Service; -import org.mapdb.DB; -import org.mapdb.DBMaker; -import org.onosproject.persistence.PersistenceService; -import org.onosproject.persistence.PersistentMapBuilder; -import org.onosproject.persistence.PersistentSetBuilder; -import org.slf4j.Logger; - -import java.io.IOException; -import java.nio.file.Files; -import java.nio.file.Path; -import java.nio.file.Paths; -import java.util.Map; -import java.util.Set; -import java.util.Timer; -import java.util.TimerTask; - -import static org.slf4j.LoggerFactory.getLogger; - -/** - * Service that maintains local disk backed maps and sets. This implementation automatically deletes empty structures - * on shutdown. - */ -@Component(immediate = true) -@Service -public class PersistenceManager implements PersistenceService { - - private static final String DATABASE_PATH = "../data/localDB"; - private static final String ENCLOSING_FOLDER = "../data"; - - static final String MAP_PREFIX = "map:"; - - static final String SET_PREFIX = "set:"; - - private final Logger log = getLogger(getClass()); - - private DB localDB = null; - - private static final int FLUSH_FREQUENCY_MILLIS = 3000; - - private Timer timer; - - private final CommitTask commitTask = new CommitTask(); - - @Activate - public void activate() { - timer = new Timer(); - Path dbPath = Paths.get(DATABASE_PATH); - Path dbFolderPath = Paths.get(ENCLOSING_FOLDER); - //Make sure the directory exists, if it does not, make it. - if (!dbFolderPath.toFile().isDirectory()) { - log.info("The specified folder location for the database did not exist and will be created."); - try { - Files.createDirectories(dbFolderPath); - } catch (IOException e) { - log.error("Could not create the required folder for the database."); - throw new PersistenceException("Database folder could not be created."); - } - } - //Notify if the database file does not exist. - boolean dbFound = Files.exists(dbPath); - if (!dbFound) { - log.info("The database file could not be located, a new database will be constructed."); - - } else { - log.info("A previous database file has been found."); - } - localDB = DBMaker.newFileDB(dbPath.toFile()) - .asyncWriteEnable() - .closeOnJvmShutdown() - .make(); - timer.schedule(commitTask, FLUSH_FREQUENCY_MILLIS, FLUSH_FREQUENCY_MILLIS); - log.info("Started"); - } - - @Deactivate - public void deactivate() { - timer.cancel(); - for (Map.Entry<String, Object> entry : localDB.getAll().entrySet()) { - String key = entry.getKey(); - Object value = entry.getValue(); - //This is a map implementation to be handled as such - if (value instanceof Map) { - Map asMap = (Map) value; - if (asMap.isEmpty()) { - //the map is empty and may be deleted - localDB.delete(key); - } - //This is a set implementation and can be handled as such - } else if (value instanceof Set) { - Set asSet = (Set) value; - if (asSet.isEmpty()) { - //the set is empty and may be deleted - localDB.delete(key); - } - } - } - localDB.commit(); - localDB.close(); - log.info("Stopped"); - } - - public <K, V> PersistentMapBuilder<K, V> persistentMapBuilder() { - return new DefaultPersistentMapBuilder<>(localDB); - } - - public <E> PersistentSetBuilder<E> persistentSetBuilder() { - return new DefaultPersistentSetBuilder<>(localDB); - } - - private class CommitTask extends TimerTask { - - @Override - public void run() { - localDB.commit(); - } - } -}
\ No newline at end of file diff --git a/framework/src/onos/core/store/persistence/src/main/java/org/onosproject/persistence/impl/PersistentMap.java b/framework/src/onos/core/store/persistence/src/main/java/org/onosproject/persistence/impl/PersistentMap.java deleted file mode 100644 index 4506bbda..00000000 --- a/framework/src/onos/core/store/persistence/src/main/java/org/onosproject/persistence/impl/PersistentMap.java +++ /dev/null @@ -1,192 +0,0 @@ -/* - * Copyright 2015 Open Networking Laboratory - * - * Licensed under the Apache License, Version 2.0 (the "License"); - * you may not use this file except in compliance with the License. - * You may obtain a copy of the License at - * - * http://www.apache.org/licenses/LICENSE-2.0 - * - * Unless required by applicable law or agreed to in writing, software - * distributed under the License is distributed on an "AS IS" BASIS, - * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. - * See the License for the specific language governing permissions and - * limitations under the License. - */ - -package org.onosproject.persistence.impl; - -import com.google.common.collect.Maps; -import com.google.common.collect.Sets; -import org.mapdb.DB; -import org.mapdb.Hasher; -import org.onosproject.store.service.Serializer; - -import java.util.Collection; -import java.util.Map; -import java.util.Set; - -import static com.google.common.base.Preconditions.checkNotNull; - - -/** - * A map implementation that stores and receives all data from a serialized internal map. - */ -public class PersistentMap<K, V> implements Map<K, V> { - - private final Serializer serializer; - - private final org.mapdb.DB database; - - private final Map<byte[], byte[]> items; - - private final String name; - - public PersistentMap(Serializer serializer, DB database, String name) { - this.serializer = checkNotNull(serializer); - this.database = checkNotNull(database); - this.name = checkNotNull(name); - - items = database - .createHashMap(name) - .keySerializer(org.mapdb.Serializer.BYTE_ARRAY) - .valueSerializer(org.mapdb.Serializer.BYTE_ARRAY) - .hasher(Hasher.BYTE_ARRAY) - .makeOrGet(); - } - - /** - * Reads this set in deserialized form into the provided map. - * - * @param items the map to be populated - */ - public void readInto(Map<K, V> items) { - this.items.forEach((keyBytes, valueBytes) -> - items.put(serializer.decode(keyBytes), - serializer.decode(valueBytes))); - } - - @Override - public V remove(Object key) { - checkNotNull(key, "Key can not be null."); - V removed = get(key); - items.remove(serializer.encode(key)); - return removed; - } - - @Override - public int size() { - return items.size(); - } - - @Override - public boolean isEmpty() { - return items.isEmpty(); - } - - @Override - public boolean containsKey(Object key) { - checkNotNull(key, "Key cannot be null."); - return items.containsKey(serializer.encode(key)); - } - - @Override - public boolean containsValue(Object value) { - checkNotNull(value, "Value cannot be null."); - byte[] serialized = serializer.encode(value); - for (byte[] compareValue : items.values()) { - boolean same = true; - if (compareValue == null) { - same = false; - } else if (compareValue.length != serialized.length) { - same = false; - } else { - for (int i = 0; i < serialized.length; i++) { - if (serialized[i] != compareValue[i]) { - same = false; - break; - } - } - } - if (same) { - return true; - } - } - return false; - } - - @Override - public V get(Object key) { - checkNotNull(key, "Key cannot be null."); - return serializer.decode(items.get(serializer.encode(key))); - } - - @Override - public V put(K key, V value) { - checkNotNull(key, "Key cannot be null."); - checkNotNull(value, "Value cannot be null."); - byte[] prevVal = items.put(serializer.encode(key), serializer.encode(value)); - if (prevVal == null) { - return null; - } - return serializer.decode(prevVal); - } - - @Override - public void putAll(Map<? extends K, ? extends V> m) { - checkNotNull(m, "The passed in map cannot be null."); - m.forEach((k, v) -> items.put(serializer.encode(k), serializer.encode(v))); - } - - @Override - public void clear() { - items.clear(); - } - - @Override - public Set<K> keySet() { - Set<K> keys = Sets.newHashSet(); - items.keySet().forEach(k -> keys.add(serializer.decode(k))); - return keys; - } - - @Override - public Collection<V> values() { - Collection<V> values = Sets.newHashSet(); - items.values().forEach(v -> values.add(serializer.decode(v))); - return values; - } - - @Override - public Set<Entry<K, V>> entrySet() { - Set<Entry<K, V>> entries = Sets.newHashSet(); - items.entrySet(). - forEach(e -> entries.add(Maps.immutableEntry(serializer.decode(e.getKey()), - serializer.decode(e.getValue())))); - return entries; - } - - @Override - public boolean equals(Object map) { - //This is not threadsafe and on larger maps incurs a significant processing cost - if (!(map instanceof Map)) { - return false; - } - Map asMap = (Map) map; - if (this.size() != asMap.size()) { - return false; - } - for (Entry entry : this.entrySet()) { - Object key = entry.getKey(); - if (!asMap.containsKey(key) || !asMap.get(key).equals(entry.getValue())) { - return false; - } - } - return true; - } - - @Override - public int hashCode() { - return super.hashCode(); - } -}
\ No newline at end of file diff --git a/framework/src/onos/core/store/persistence/src/main/java/org/onosproject/persistence/impl/PersistentSet.java b/framework/src/onos/core/store/persistence/src/main/java/org/onosproject/persistence/impl/PersistentSet.java deleted file mode 100644 index 26118cf6..00000000 --- a/framework/src/onos/core/store/persistence/src/main/java/org/onosproject/persistence/impl/PersistentSet.java +++ /dev/null @@ -1,194 +0,0 @@ -/* - * Copyright 2015 Open Networking Laboratory - * - * Licensed under the Apache License, Version 2.0 (the "License"); - * you may not use this file except in compliance with the License. - * You may obtain a copy of the License at - * - * http://www.apache.org/licenses/LICENSE-2.0 - * - * Unless required by applicable law or agreed to in writing, software - * distributed under the License is distributed on an "AS IS" BASIS, - * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. - * See the License for the specific language governing permissions and - * limitations under the License. - */ - -package org.onosproject.persistence.impl; - -import com.google.common.collect.Iterators; -import org.mapdb.DB; -import org.mapdb.Hasher; -import org.mapdb.Serializer; - -import java.util.Collection; -import java.util.Iterator; -import java.util.Set; - -import static com.google.common.base.Preconditions.checkNotNull; - -/** - * A set implementation that gets and receives all data from a serialized internal set. - */ -//TODO add locking for reads and writes -public class PersistentSet<E> implements Set<E> { - - private final org.onosproject.store.service.Serializer serializer; - - private final org.mapdb.DB database; - - private final Set<byte[]> items; - - private final String name; - - public PersistentSet(org.onosproject.store.service.Serializer serializer, DB database, String name) { - this.serializer = checkNotNull(serializer); - this.database = checkNotNull(database); - this.name = checkNotNull(name); - - items = database - .createHashSet(name) - .serializer(Serializer.BYTE_ARRAY) - .hasher(Hasher.BYTE_ARRAY) - .makeOrGet(); - } - - public void readInto(Set<E> items) { - this.items.forEach(item -> items.add(serializer.decode(item))); - } - - @Override - public int size() { - return items.size(); - } - - @Override - public boolean isEmpty() { - return items.isEmpty(); - } - - @Override - public boolean contains(Object o) { - checkNotNull(o, "The argument cannot be null"); - return items.contains(serializer.encode(o)); - } - - @Override - public Iterator<E> iterator() { - return Iterators.transform(items.iterator(), serializer::decode); - } - - @Override - public Object[] toArray() { - Object[] retArray = new Object[items.size()]; - int index = 0; - Iterator<byte[]> iterator = items.iterator(); - while (iterator.hasNext()) { - retArray[index] = serializer.decode(iterator.next()); - index++; - } - return retArray; - } - - @Override - public <T> T[] toArray(T[] a) { - checkNotNull(a, "The passed in array cannot be null."); - int index = 0; - Iterator<byte[]> iterator = items.iterator(); - T[] retArray; - if (a.length >= items.size()) { - retArray = a; - } else { - retArray = (T[]) new Object[items.size()]; - } - while (iterator.hasNext()) { - retArray[index++] = serializer.decode(iterator.next()); - } - if (retArray.length > items.size()) { - retArray[index] = null; - } - return retArray; - } - - @Override - public boolean add(E item) { - checkNotNull("Item to be added cannot be null."); - return items.add(serializer.encode(item)); - } - - @Override - public boolean remove(Object o) { - checkNotNull(o, "Item to be removed cannot be null."); - return items.remove(serializer.encode(o)); - } - - @Override - public boolean containsAll(Collection<?> c) { - checkNotNull(c, "Collection cannot be internal."); - for (Object item : c) { - if (!items.contains(serializer.encode(item))) { - return false; - } - } - return true; - } - - @Override - public boolean addAll(Collection<? extends E> c) { - checkNotNull(c, "The collection to be added cannot be null."); - boolean changed = false; - for (Object item : c) { - changed = items.add(serializer.encode(item)) || changed; - } - return changed; - } - - @Override - public boolean retainAll(Collection<?> c) { - boolean changed = false; - for (byte[] item : items) { - E deserialized = serializer.decode(item); - if (!c.contains(deserialized)) { - changed = items.remove(item) || changed; - } - } - return changed; - } - - @Override - public boolean removeAll(Collection<?> c) { - boolean changed = false; - for (Object item : c) { - changed = items.remove(serializer.encode(item)) || changed; - } - return changed; - } - - @Override - public void clear() { - items.clear(); - } - - @Override - public boolean equals(Object set) { - //This is not threadsafe and on larger sets incurs a significant processing cost - if (!(set instanceof Set)) { - return false; - } - Set asSet = (Set) set; - if (asSet.size() != this.size()) { - return false; - } - for (Object item : this) { - if (!asSet.contains(item)) { - return false; - } - } - return true; - } - - @Override - public int hashCode() { - return super.hashCode(); - } -}
\ No newline at end of file diff --git a/framework/src/onos/core/store/persistence/src/main/java/org/onosproject/persistence/impl/package-info.java b/framework/src/onos/core/store/persistence/src/main/java/org/onosproject/persistence/impl/package-info.java deleted file mode 100644 index 968a5046..00000000 --- a/framework/src/onos/core/store/persistence/src/main/java/org/onosproject/persistence/impl/package-info.java +++ /dev/null @@ -1,20 +0,0 @@ -/* - * Copyright 2015 Open Networking Laboratory - * - * Licensed under the Apache License, Version 2.0 (the "License"); - * you may not use this file except in compliance with the License. - * You may obtain a copy of the License at - * - * http://www.apache.org/licenses/LICENSE-2.0 - * - * Unless required by applicable law or agreed to in writing, software - * distributed under the License is distributed on an "AS IS" BASIS, - * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. - * See the License for the specific language governing permissions and - * limitations under the License. - */ - -/** - * Implementations of core persistence classes. - */ -package org.onosproject.persistence.impl; |