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)
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)
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))
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))
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)
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)
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)