AbstractDirectedGraph<DesignerVertex, DesignerEdge> rtree = new AbstractDirectedGraph<DesignerVertex, DesignerEdge>(info.catalogContext.database) {
private static final long serialVersionUID = 1L;
};
rtree.setName("RepTree-Round" + round);
ReplicationTreeGenerator replication_check = new ReplicationTreeGenerator(info, agraph, ptree);
try {
replication_check.generate(rtree);
} catch (Exception ex) {
LOG.fatal(ex.getLocalizedMessage());
ex.printStackTrace();
System.exit(1);
}
designer.getGraphs(catalog_proc).add(rtree);
//
// If there are no tables that are conflicted, then there is nothing
// else we can do
//
if (replication_check.getConflictVertices().isEmpty())
break;
//
// Examine the edges that we created and see if there is a common
// ancestor that the
// the destination vertex wants to be partitioned on
//
List<Table> candidates = new ArrayList<Table>();
candidates.addAll(replication_check.getReplicationCandidates());
boolean forced_dependency = false;
for (DesignerVertex conflict_vertex : replication_check.getConflictVertices()) {
Table conflict_tbl = conflict_vertex.getCatalogItem();
//
// For each edge in the replication tree that is coming into
// this conflict vertex,
// see whether there is an overlapping ancestor