Skip to content

Commit d95cd8b

Browse files
committed
fix: drop partially created tables when workspace upload fails
1 parent b8c66d0 commit d95cd8b

3 files changed

Lines changed: 62 additions & 41 deletions

File tree

src/main/java/org/sap/cytoscape/internal/hdb/HanaConnectionManager.java

Lines changed: 10 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -506,6 +506,16 @@ public void createSchema(String schema) throws SQLException {
506506
execute(String.format(sqlStrings.getProperty("CREATE_SCHEMA"), schema));
507507
}
508508

509+
/**
510+
* Drops a table if it exists. Used to clean up after a partially failed workspace upload.
511+
*
512+
* @param table Schema and name of the table to drop
513+
* @throws SQLException sql error
514+
*/
515+
public void dropTableIfExists(HanaDbObject table) throws SQLException {
516+
execute(String.format(sqlStrings.getProperty("DROP_TABLE_IF_EXISTS"), table));
517+
}
518+
509519
/**
510520
* Creates a new table on the database instance
511521
*

src/main/java/org/sap/cytoscape/internal/tasks/CyCreateWorkspaceTask.java

Lines changed: 48 additions & 40 deletions
Original file line numberDiff line numberDiff line change
@@ -69,45 +69,53 @@ public void run(TaskMonitor taskMonitor) throws Exception {
6969
}
7070

7171
taskMonitor.setStatusMessage("Creating node table");
72-
// create nodes table
73-
this.connectionManager.createTable(
74-
newWorkspace.getNodeTableDbObject(),
75-
newWorkspace.getNodeFieldList()
76-
);
77-
78-
taskMonitor.setStatusMessage("Uploading node records");
79-
//insert values
80-
this.connectionManager.bulkInsertData(
81-
newWorkspace.getNodeTableDbObject(),
82-
newWorkspace.getNodeFieldList(),
83-
newWorkspace.getNodeTableData()
84-
);
85-
86-
taskMonitor.setStatusMessage("Creating edge table");
87-
// create edges table
88-
this.connectionManager.createTable(
89-
newWorkspace.getEdgeTableDbObject(),
90-
newWorkspace.getEdgeFieldList()
91-
);
92-
93-
taskMonitor.setStatusMessage("Uploading edge records");
94-
//insert values
95-
this.connectionManager.bulkInsertData(
96-
newWorkspace.getEdgeTableDbObject(),
97-
newWorkspace.getEdgeFieldList(),
98-
newWorkspace.getEdgeTableData()
99-
);
100-
101-
taskMonitor.setStatusMessage("Linking Cytoscape Network to SAP HANA Graph Workspace");
102-
CyUtils.enhanceCyNetworkWithDatabaseLinkInformation(
103-
selectedNetwork.getDefaultNetworkTable(),
104-
selectedNetwork.getSUID(),
105-
connectionManager.getInstanceIdentifier(),
106-
newWorkspace.getWorkspaceDbObject()
107-
);
108-
109-
taskMonitor.setStatusMessage("Creating Graph Workspace");
110-
// create graph workspace
111-
this.connectionManager.createGraphWorkspace(newWorkspace);
72+
boolean nodeTableCreated = false;
73+
boolean edgeTableCreated = false;
74+
try {
75+
// create nodes table
76+
this.connectionManager.createTable(
77+
newWorkspace.getNodeTableDbObject(),
78+
newWorkspace.getNodeFieldList()
79+
);
80+
nodeTableCreated = true;
81+
82+
taskMonitor.setStatusMessage("Uploading node records");
83+
this.connectionManager.bulkInsertData(
84+
newWorkspace.getNodeTableDbObject(),
85+
newWorkspace.getNodeFieldList(),
86+
newWorkspace.getNodeTableData()
87+
);
88+
89+
taskMonitor.setStatusMessage("Creating edge table");
90+
this.connectionManager.createTable(
91+
newWorkspace.getEdgeTableDbObject(),
92+
newWorkspace.getEdgeFieldList()
93+
);
94+
edgeTableCreated = true;
95+
96+
taskMonitor.setStatusMessage("Uploading edge records");
97+
this.connectionManager.bulkInsertData(
98+
newWorkspace.getEdgeTableDbObject(),
99+
newWorkspace.getEdgeFieldList(),
100+
newWorkspace.getEdgeTableData()
101+
);
102+
103+
taskMonitor.setStatusMessage("Linking Cytoscape Network to SAP HANA Graph Workspace");
104+
CyUtils.enhanceCyNetworkWithDatabaseLinkInformation(
105+
selectedNetwork.getDefaultNetworkTable(),
106+
selectedNetwork.getSUID(),
107+
connectionManager.getInstanceIdentifier(),
108+
newWorkspace.getWorkspaceDbObject()
109+
);
110+
111+
taskMonitor.setStatusMessage("Creating Graph Workspace");
112+
this.connectionManager.createGraphWorkspace(newWorkspace);
113+
114+
} catch (Exception e) {
115+
// Drop any tables already created so the user can retry cleanly.
116+
if (edgeTableCreated) try { this.connectionManager.dropTableIfExists(newWorkspace.getEdgeTableDbObject()); } catch (Exception ignore) {}
117+
if (nodeTableCreated) try { this.connectionManager.dropTableIfExists(newWorkspace.getNodeTableDbObject()); } catch (Exception ignore) {}
118+
throw e;
119+
}
112120
}
113121
}

src/main/resources/SqlStrings.sql

Lines changed: 4 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -57,4 +57,7 @@ CREATE_GRAPH_WORKSPACE=\
5757
TARGET COLUMN "%s" \
5858
KEY COLUMN "%s" \
5959
VERTEX TABLE "%s"."%s" \
60-
KEY COLUMN "%s"
60+
KEY COLUMN "%s"
61+
62+
DROP_TABLE_IF_EXISTS=\
63+
DROP TABLE IF EXISTS %s

0 commit comments

Comments
 (0)