@@ -2843,26 +2843,7 @@ def __init__(self, connection, timeout):
2843
2843
2844
2844
def get_all_keyspaces (self ):
2845
2845
for keyspace_meta in super (SchemaParserDSE68 , self ).get_all_keyspaces ():
2846
-
2847
- def _build_table_graph_metadata (table_meta ):
2848
- for row in self .keyspace_table_vertex_rows [keyspace_meta .name ][table_meta .name ]:
2849
- vertex_meta = self ._build_table_vertex_metadata (row )
2850
- table_meta .vertex = vertex_meta
2851
-
2852
- for row in self .keyspace_table_edge_rows [keyspace_meta .name ][table_meta .name ]:
2853
- edge_meta = self ._build_table_edge_metadata (keyspace_meta , row )
2854
- table_meta .edge = edge_meta
2855
-
2856
- # Make sure we process vertices before edges
2857
- for t in [t for t in six .itervalues (keyspace_meta .tables )
2858
- if t .name in self .keyspace_table_vertex_rows [keyspace_meta .name ]]:
2859
- _build_table_graph_metadata (t )
2860
-
2861
- # all other tables...
2862
- for t in [t for t in six .itervalues (keyspace_meta .tables )
2863
- if t .name not in self .keyspace_table_vertex_rows [keyspace_meta .name ]]:
2864
- _build_table_graph_metadata (t )
2865
-
2846
+ self ._build_graph_metadata (keyspace_meta )
2866
2847
yield keyspace_meta
2867
2848
2868
2849
def get_table (self , keyspaces , keyspace , table ):
@@ -2877,10 +2858,16 @@ def get_table(self, keyspaces, keyspace, table):
2877
2858
vertices_result = self ._handle_results (vertices_success , vertices_result )
2878
2859
edges_result = self ._handle_results (edges_success , edges_result )
2879
2860
2880
- if vertices_result :
2881
- table_meta .vertex = self ._build_table_vertex_metadata (vertices_result [0 ])
2882
- elif edges_result :
2883
- table_meta .edge = self ._build_table_edge_metadata (keyspaces [keyspace ], edges_result [0 ])
2861
+ try :
2862
+ if vertices_result :
2863
+ table_meta .vertex = self ._build_table_vertex_metadata (vertices_result [0 ])
2864
+ elif edges_result :
2865
+ table_meta .edge = self ._build_table_edge_metadata (keyspaces [keyspace ], edges_result [0 ])
2866
+ except Exception :
2867
+ table_meta .vertex = None
2868
+ table_meta .edge = None
2869
+ table_meta ._exc_info = sys .exc_info ()
2870
+ log .exception ("Error while parsing graph metadata for table %s.%s." , keyspace , table )
2884
2871
2885
2872
return table_meta
2886
2873
@@ -2893,6 +2880,32 @@ def _build_keyspace_metadata_internal(row):
2893
2880
graph_engine = row .get ("graph_engine" , None )
2894
2881
return KeyspaceMetadata (name , durable_writes , replication_class , replication , graph_engine )
2895
2882
2883
+ def _build_graph_metadata (self , keyspace_meta ):
2884
+
2885
+ def _build_table_graph_metadata (table_meta ):
2886
+ for row in self .keyspace_table_vertex_rows [keyspace_meta .name ][table_meta .name ]:
2887
+ table_meta .vertex = self ._build_table_vertex_metadata (row )
2888
+
2889
+ for row in self .keyspace_table_edge_rows [keyspace_meta .name ][table_meta .name ]:
2890
+ table_meta .egde = self ._build_table_edge_metadata (keyspace_meta , row )
2891
+
2892
+ try :
2893
+ # Make sure we process vertices before edges
2894
+ for table_meta in [t for t in six .itervalues (keyspace_meta .tables )
2895
+ if t .name in self .keyspace_table_vertex_rows [keyspace_meta .name ]]:
2896
+ _build_table_graph_metadata (table_meta )
2897
+
2898
+ # all other tables...
2899
+ for table_meta in [t for t in six .itervalues (keyspace_meta .tables )
2900
+ if t .name not in self .keyspace_table_vertex_rows [keyspace_meta .name ]]:
2901
+ _build_table_graph_metadata (table_meta )
2902
+ except Exception :
2903
+ # schema error, remove all graph metadata for this keyspace
2904
+ for t in six .itervalues (keyspace_meta .tables ):
2905
+ t .edge = t .vertex = None
2906
+ keyspace_meta ._exc_info = sys .exc_info ()
2907
+ log .exception ("Error while parsing graph metadata for keyspace %s" , keyspace_meta .name )
2908
+
2896
2909
@staticmethod
2897
2910
def _build_table_vertex_metadata (row ):
2898
2911
return VertexMetadata (row .get ("keyspace_name" ), row .get ("table_name" ),
0 commit comments