From fe2f62748fb7a8186b0961be492248e7db0c98b9 Mon Sep 17 00:00:00 2001 From: Idan Hefetz Date: Mon, 13 Aug 2018 14:11:16 +0000 Subject: [PATCH] Always load database graph snapshot on restart Depends-On: Ia4ee9c34bb68f3b6821ef752893f3a98d4bafc24 Depends-On: Id8f1d77802c0071df778f4a9b7fb0a25c473cf9c Change-Id: I703083ea337447439ca80c2468f2f47cf18735e0 --- vitrage/entity_graph/graph_persistency.py | 14 +------------- vitrage/storage/base.py | 4 ++-- vitrage/storage/impl_sqlalchemy.py | 6 +----- .../graph_persistor/test_graph_persistor.py | 8 -------- 4 files changed, 4 insertions(+), 28 deletions(-) diff --git a/vitrage/entity_graph/graph_persistency.py b/vitrage/entity_graph/graph_persistency.py index ba8ac5a5b..c6910992f 100644 --- a/vitrage/entity_graph/graph_persistency.py +++ b/vitrage/entity_graph/graph_persistency.py @@ -11,8 +11,6 @@ # WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. See the # License for the specific language governing permissions and limitations # under the License. -from datetime import timedelta - from oslo_log import log from vitrage.common.constants import VertexProperties as VProps @@ -20,13 +18,10 @@ from vitrage.graph import Edge from vitrage.graph import Vertex from vitrage.storage.sqlalchemy import models -from vitrage.utils.datetime import utcnow LOG = log.getLogger(__name__) -EPSILON = 30 - class GraphPersistency(object): def __init__(self, conf, db, graph): @@ -48,15 +43,8 @@ class GraphPersistency(object): except Exception: LOG.exception("Graph is not stored") - def _recent_snapshot_time(self): - t = utcnow(with_timezone=False) - t = t - timedelta(seconds=3 * self.conf.datasources.snapshots_interval) - t = t - timedelta(seconds=EPSILON) - return t - def query_recent_snapshot(self): - timestamp = self._recent_snapshot_time() - return self.db.graph_snapshots.query(timestamp=timestamp) + return self.db.graph_snapshots.query() def replay_events(self, graph, event_id): LOG.info('Getting events from database') diff --git a/vitrage/storage/base.py b/vitrage/storage/base.py index ac552bf12..8c56ddd84 100644 --- a/vitrage/storage/base.py +++ b/vitrage/storage/base.py @@ -236,8 +236,8 @@ class GraphSnapshotsConnection(object): """ raise NotImplementedError('update graph snapshot not implemented') - def query(self, timestamp=None): - """Yields latest graph snapshot taken until timestamp. + def query(self): + """Yields latest graph snapshot :rtype: vitrage.storage.sqlalchemy.models.GraphSnapshot """ diff --git a/vitrage/storage/impl_sqlalchemy.py b/vitrage/storage/impl_sqlalchemy.py index 7a82b4bf8..650de3fbb 100644 --- a/vitrage/storage/impl_sqlalchemy.py +++ b/vitrage/storage/impl_sqlalchemy.py @@ -20,7 +20,6 @@ from oslo_log import log from sqlalchemy import and_ from sqlalchemy.engine import url as sqlalchemy_url from sqlalchemy import func -from sqlalchemy import or_ from vitrage.common.exception import VitrageInputError from vitrage.entity_graph.mappings.operational_alarm_severity import \ @@ -373,11 +372,8 @@ class GraphSnapshotsConnection(base.GraphSnapshotsConnection, BaseTableConn): with session.begin(): session.merge(graph_snapshot) - def query(self, timestamp=None): + def query(self): query = self.query_filter(models.GraphSnapshot) - query = query.filter( - or_(models.GraphSnapshot.updated_at >= timestamp, - models.GraphSnapshot.created_at >= timestamp)) return query.first() def query_snapshot_event_id(self): diff --git a/vitrage/tests/functional/entity_graph/graph_persistor/test_graph_persistor.py b/vitrage/tests/functional/entity_graph/graph_persistor/test_graph_persistor.py index a0abea6d0..3a1323280 100644 --- a/vitrage/tests/functional/entity_graph/graph_persistor/test_graph_persistor.py +++ b/vitrage/tests/functional/entity_graph/graph_persistor/test_graph_persistor.py @@ -11,8 +11,6 @@ # WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. See the # License for the specific language governing permissions and limitations # under the License. -import time - from oslo_config import cfg from vitrage.common.constants import EdgeProperties @@ -36,7 +34,6 @@ class TestGraphPersistor(TestFunctionalBase, TestConfiguration): cls.conf.register_opts(cls.DATASOURCES_OPTS, group='datasources') cls.add_db(cls.conf) cls.load_datasources(cls.conf) - graph_persistency.EPSILON = 0.1 def test_graph_store_and_query_recent_snapshot(self): g = GraphGenerator().create_graph() @@ -47,11 +44,6 @@ class TestGraphPersistor(TestFunctionalBase, TestConfiguration): recovered_graph = self.load_snapshot(recovered_data) self.assert_graph_equal(g, recovered_graph) - time.sleep(graph_persistency.EPSILON + 0.1 + - 3 * self.conf.datasources.snapshots_interval) - recovered_data = graph_persistor.query_recent_snapshot() - self.assertIsNone(recovered_data, 'Should not be a recent snapshot') - def test_event_store_and_replay_events(self): g = GraphGenerator().create_graph() vertices = g.get_vertices()