Skip to main content
summaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authormtelles2009-12-01 20:21:53 +0000
committermtelles2009-12-01 20:21:53 +0000
commite6884ccfd29749292f1ee7726d94bc238db5af77 (patch)
tree517f2dcc01a112b0b454a8f371bde1a6ab54dee7 /org.eclipse.osee.framework.core.server
parent47aceae1eeef19d317524b15eff343041a0025df (diff)
downloadorg.eclipse.osee-e6884ccfd29749292f1ee7726d94bc238db5af77.tar.gz
org.eclipse.osee-e6884ccfd29749292f1ee7726d94bc238db5af77.tar.xz
org.eclipse.osee-e6884ccfd29749292f1ee7726d94bc238db5af77.zip
"Task" - H85CT - "Cannot open FAULT Document in CSID"
Diffstat (limited to 'org.eclipse.osee.framework.core.server')
-rw-r--r--org.eclipse.osee.framework.core.server/src/org/eclipse/osee/framework/core/server/internal/task/CleanJoinTablesServerTask.java46
1 files changed, 41 insertions, 5 deletions
diff --git a/org.eclipse.osee.framework.core.server/src/org/eclipse/osee/framework/core/server/internal/task/CleanJoinTablesServerTask.java b/org.eclipse.osee.framework.core.server/src/org/eclipse/osee/framework/core/server/internal/task/CleanJoinTablesServerTask.java
index 91a4b81a456..7f31d58395d 100644
--- a/org.eclipse.osee.framework.core.server/src/org/eclipse/osee/framework/core/server/internal/task/CleanJoinTablesServerTask.java
+++ b/org.eclipse.osee.framework.core.server/src/org/eclipse/osee/framework/core/server/internal/task/CleanJoinTablesServerTask.java
@@ -11,13 +11,17 @@
package org.eclipse.osee.framework.core.server.internal.task;
import java.sql.Timestamp;
+import java.util.ArrayList;
+import java.util.List;
import java.util.concurrent.TimeUnit;
import java.util.logging.Level;
-import org.eclipse.osee.framework.core.exception.OseeDataStoreException;
+import org.eclipse.osee.framework.core.exception.OseeCoreException;
import org.eclipse.osee.framework.core.server.CoreServerActivator;
import org.eclipse.osee.framework.core.server.IServerTask;
+import org.eclipse.osee.framework.core.server.ISessionManager;
import org.eclipse.osee.framework.core.server.SchedulingScheme;
import org.eclipse.osee.framework.database.core.ConnectionHandler;
+import org.eclipse.osee.framework.database.core.IOseeStatement;
import org.eclipse.osee.framework.logging.OseeLog;
/**
@@ -26,14 +30,17 @@ import org.eclipse.osee.framework.logging.OseeLog;
public class CleanJoinTablesServerTask implements IServerTask {
private final static String DELETE_JOIN_TIME = "DELETE FROM %s WHERE insert_time < ?";
- private final static long TEN_MINUTES = 10;
+ private final static String DELETE_JOIN_CLEANUP = "DELETE FROM osee_join_cleanup WHERE query_id = ?";
+ private final static String DELETE_JOIN_TABLE_SESSION = "DELETE FROM %s WHERE query_id = ?";
+ private final static String SELECT_SESSION_FROM_JOIN = "SELECT * from osee_join_cleanup order by session_id";
+ private final static long SIXTY_MINUTES = 60;
private final static long THREE_HOURS = 1000 * 60 * 60 * 3;
private static final String NAME = "Clean up join tables";
private static final String[] TABLES =
new String[] {"osee_join_artifact", "osee_join_attribute", "osee_join_transaction", "osee_join_export_import",
- "osee_join_search_tags", "osee_tag_gamma_queue", "osee_join_id"};
+ "osee_join_search_tags", "osee_tag_gamma_queue", "osee_join_id"};
public String getName() {
return NAME;
@@ -46,11 +53,40 @@ public class CleanJoinTablesServerTask implements IServerTask {
for (String table : TABLES) {
ConnectionHandler.runPreparedUpdate(String.format(DELETE_JOIN_TIME, table), time);
}
- } catch (OseeDataStoreException ex) {
+ deleteFromJoinCleanup();
+ } catch (OseeCoreException ex) {
OseeLog.log(CoreServerActivator.class, Level.WARNING, ex);
}
}
+ private void deleteFromJoinCleanup() throws OseeCoreException {
+ List<Integer[]> queryIds = new ArrayList<Integer[]>();
+ IOseeStatement chStmt = null;
+ boolean isAlive = false;
+ ISessionManager manager = CoreServerActivator.getSessionManager();
+ try {
+ chStmt = ConnectionHandler.getStatement();
+ chStmt.runPreparedQuery(SELECT_SESSION_FROM_JOIN);
+ String prevSessionId = "";
+ while (chStmt.next()) {
+ String sessionId = chStmt.getString("session_id");
+ String tableName = chStmt.getString("table_name");
+ Integer queryId = chStmt.getInt("query_id");
+ if (!sessionId.equals(prevSessionId)) {
+ isAlive = manager.isAlive(manager.getSessionById(sessionId).getSession());
+ }
+ if (!isAlive) {
+ queryIds.add(new Integer[] {queryId});
+ ConnectionHandler.runPreparedUpdate(String.format(DELETE_JOIN_TABLE_SESSION, tableName), queryId);
+ }
+ prevSessionId = sessionId;
+ }
+ ConnectionHandler.runBatchUpdate(DELETE_JOIN_CLEANUP, queryIds);
+ } finally {
+ chStmt.close();
+ }
+ }
+
@Override
public long getInitialDelay() {
return getPeriod();
@@ -58,7 +94,7 @@ public class CleanJoinTablesServerTask implements IServerTask {
@Override
public long getPeriod() {
- return TEN_MINUTES;
+ return SIXTY_MINUTES;
}
@Override

Back to the top