Esempio n. 1
0
    def delete_entity(self, deleted_vertex, neighbors):
        """Deletes the vertex from the entity graph

        Marks the corresponding vertex and its edges as deleted

        :param deleted_vertex: The vertex to be deleted from the graph
        :type deleted_vertex: Vertex

        :param neighbors: The neighbors of the deleted vertex
        :type neighbors: List
        """

        LOG.debug('Delete entity from entity graph:\n%s', deleted_vertex)

        graph_vertex = self.entity_graph.get_vertex(deleted_vertex.vertex_id)

        if graph_vertex and (not PUtils.is_deleted(graph_vertex)) and \
                PUtils.is_newer_vertex(graph_vertex, deleted_vertex):
            neighbor_vertices = self.entity_graph.neighbors(
                deleted_vertex.vertex_id)
            neighbor_edges = self.entity_graph.get_edges(
                deleted_vertex.vertex_id)

            for edge in neighbor_edges:
                PUtils.mark_deleted(self.entity_graph, edge)

            for vertex in neighbor_vertices:
                PUtils.delete_placeholder_vertex(self.entity_graph, vertex)

            PUtils.mark_deleted(self.entity_graph, deleted_vertex)
        else:
            LOG.warning("Delete event arrived on invalid resource: "
                        "deleted_vertex - %s, graph_vertex - %s",
                        deleted_vertex, graph_vertex)
Esempio n. 2
0
    def delete_relationship(self, updated_vertex, neighbors):
        LOG.debug('Delete relationship from entity graph:\n%s', neighbors)

        if updated_vertex:
            self.entity_graph.update_vertex(updated_vertex)
        for neighbor in neighbors:
            graph_edge = self.entity_graph.get_edge(neighbor.edge.source_id,
                                                    neighbor.edge.target_id,
                                                    neighbor.edge.label)
            if graph_edge:
                PUtils.mark_deleted(self.entity_graph, graph_edge)
Esempio n. 3
0
    def test_mark_vertex_as_deleted(self):
        entity_graph = NXGraph("Entity Graph")

        # create vertex properties
        vertex = self._update_vertex_to_graph(entity_graph, 'RESOURCE',
                                              'INSTANCE', '12345', False, True,
                                              {})

        # check vitrage deleted
        self.assertFalse(PUtils.is_deleted(vertex))
        PUtils.mark_deleted(entity_graph, vertex)
        self.assertTrue(PUtils.is_deleted(vertex))
Esempio n. 4
0
    def test_mark_edge_as_deleted(self):
        entity_graph = NXGraph("Entity Graph")

        # create vertex properties
        vertex1 = self._update_vertex_to_graph(entity_graph, 'RESOURCE',
                                               'INSTANCE', '12345', False,
                                               True, {})
        vertex2 = self._update_vertex_to_graph(entity_graph, 'RESOURCE',
                                               'HOST', '54321', False, True,
                                               {})
        edge = self._update_edge_to_graph(entity_graph, vertex1.vertex_id,
                                          vertex2.vertex_id, 'contains')

        # check vitrage deleted
        self.assertFalse(PUtils.is_deleted(edge))
        PUtils.mark_deleted(entity_graph, edge)
        self.assertTrue(PUtils.is_deleted(edge))
Esempio n. 5
0
    def _delete_old_connections(self, vertex, obsolete_edges):
        """Deletes the "vertex" old connections

        Finds the old connections that are connected to updated_vertex,
        and marks them as deleted
        """
        if not obsolete_edges:
            LOG.debug('obsolete_edges - nothing to do')
            return

        LOG.debug('Delete old connections. Vertex:\n%s', vertex)
        # remove old edges and placeholder vertices if exist
        for edge in obsolete_edges:
            LOG.debug("Delete obsolete edge:\n%s", edge)
            PUtils.mark_deleted(self.entity_graph, edge)
            graph_ver = self.entity_graph.get_vertex(
                edge.other_vertex(vertex.vertex_id))
            PUtils.delete_placeholder_vertex(self.entity_graph, graph_ver)
Esempio n. 6
0
    def delete_entity(self, deleted_vertex, neighbors):
        """Deletes the vertex from the entity graph

        Marks the corresponding vertex and its edges as deleted

        :param deleted_vertex: The vertex to be deleted from the graph
        :type deleted_vertex: Vertex

        :param neighbors: The neighbors of the deleted vertex
        :type neighbors: List
        """

        LOG.debug('Delete entity from entity graph:\n%s', deleted_vertex)

        graph_vertex = self.entity_graph.get_vertex(deleted_vertex.vertex_id)

        if not graph_vertex:
            LOG.warning('Delete - vertex not found %s', deleted_vertex)
            return
        elif PUtils.is_deleted(graph_vertex):
            LOG.warning(
                'Delete - vertex already deleted - '
                "graph_vertex: %s --- deleted_vertex: %s", graph_vertex,
                deleted_vertex)
            return
        elif not PUtils.is_newer_vertex(graph_vertex, deleted_vertex):
            LOG.warning(
                "Delete event arrived later than expected - "
                "graph_vertex: %s --- deleted_vertex: %s", graph_vertex,
                deleted_vertex)
            return

        neighbor_vertices = self.entity_graph.neighbors(
            deleted_vertex.vertex_id)
        neighbor_edges = self.entity_graph.get_edges(deleted_vertex.vertex_id)

        for edge in neighbor_edges:
            PUtils.mark_deleted(self.entity_graph, edge)

        for vertex in neighbor_vertices:
            PUtils.delete_placeholder_vertex(self.entity_graph, vertex)

        PUtils.mark_deleted(self.entity_graph, deleted_vertex)
Esempio n. 7
0
    def delete_relationship(self, updated_vertex, neighbors):
        LOG.debug('Delete relationship from entity graph:\n%s', neighbors)

        if not updated_vertex:
            for neighbor in neighbors:
                graph_edge = self.entity_graph.get_edge(
                    neighbor.edge.source_id, neighbor.edge.target_id,
                    neighbor.edge.label)
            if graph_edge:
                self.entity_graph.remove_edge(graph_edge)

            return

        # TODO(doffek): check if we need here the update_vertex because the
        # purpose of this method is to update the relationship
        self._find_and_fix_graph_vertex(updated_vertex, [])
        self.entity_graph.update_vertex(updated_vertex)
        for neighbor in neighbors:
            self._find_and_fix_relationship(updated_vertex, neighbor)
            graph_edge = self.entity_graph.get_edge(neighbor.edge.source_id,
                                                    neighbor.edge.target_id,
                                                    neighbor.edge.label)
            if graph_edge:
                PUtils.mark_deleted(self.entity_graph, graph_edge)