aboutsummaryrefslogtreecommitdiffstats
path: root/framework/src/onos/core/store/persistence/src/main/java/org/onosproject/persistence/impl/PersistenceManager.java
diff options
context:
space:
mode:
Diffstat (limited to 'framework/src/onos/core/store/persistence/src/main/java/org/onosproject/persistence/impl/PersistenceManager.java')
-rw-r--r--framework/src/onos/core/store/persistence/src/main/java/org/onosproject/persistence/impl/PersistenceManager.java139
1 files changed, 0 insertions, 139 deletions
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