[Schmitzm-commits] r1931 - trunk/schmitzm-db/src/main/java/de/schmitzm/postgres

scm-commit at wald.intevation.org scm-commit at wald.intevation.org
Mon Apr 2 11:24:58 CEST 2012


Author: alfonx
Date: 2012-04-02 11:24:58 +0200 (Mon, 02 Apr 2012)
New Revision: 1931

Modified:
   trunk/schmitzm-db/src/main/java/de/schmitzm/postgres/PGUtil.java
Log:


Modified: trunk/schmitzm-db/src/main/java/de/schmitzm/postgres/PGUtil.java
===================================================================
--- trunk/schmitzm-db/src/main/java/de/schmitzm/postgres/PGUtil.java	2012-04-01 21:41:14 UTC (rev 1930)
+++ trunk/schmitzm-db/src/main/java/de/schmitzm/postgres/PGUtil.java	2012-04-02 09:24:58 UTC (rev 1931)
@@ -859,6 +859,30 @@
 	}
 
 	/**
+	 * Wenn der übergebene durch die PID identifizierte Process blockiert ist, dann wird die PID des (ersten?)
+	 * blockierenden Prozess zurückgeliefert. Sonst wird <code>null</code> geliefert.
+	 * 
+	 * @param blockedPid
+	 * @return blockingPid oder <code>null</code>
+	 */
+	static public Long getBlockingPid(Connection c, Long blockedPid) throws SQLException {
+		final String sql = "select kl.pid as blocking_pid from pg_catalog.pg_locks bl "
+				+ "join pg_catalog.pg_stat_activity a on bl.pid = a.procpid "
+				+ "join pg_catalog.pg_locks kl "
+				+ "join pg_catalog.pg_stat_activity ka on kl.pid = ka.procpid on bl.transactionid = kl.transactionid and bl.pid != kl.pid "
+				+ "where not bl.granted and bl.pid = " + blockedPid;
+		ResultSet rs = c.createStatement().executeQuery(sql);
+		try {
+			if (rs.next()) {
+				return rs.getLong(1);
+			}
+		} finally {
+			rs.close();
+		}
+		return null;
+	}
+
+	/**
 	 * Liefert eine Liste der aktuell laufenden Queries und ihrere Laufzeiten zurück. Der 2. Teil der Rückgabepaare ist
 	 * ein String der einem PG Interval entspricht. Dieses kann mit der Klasse PGInterval geparst werden.<br/>
 	 * 
@@ -867,19 +891,20 @@
 	 * 
 	 * @param minSecondsRunning
 	 *            <code>null</code> oder die zurückgegebenen Anfragen müssen mindestens soviele Sekunden schon laufen.
-	 *            
-	 *            @param filter 0 = kein Filter, 1=Ohne IDLE, 2=Ohne IDLE und ohne 'IDLE in Transaction'
+	 * 
+	 * @param filter
+	 *            0 = kein Filter, 1=Ohne IDLE, 2=Ohne IDLE und ohne 'IDLE in Transaction'
 	 */
-	static public List<SqlQueryStat> listQueries(Connection c, String datName, Integer minSecondsRunning,
-			int filter) throws SQLException {
+	static public List<SqlQueryStat> listQueries(Connection c, String datName, Integer minSecondsRunning, int filter)
+			throws SQLException {
 		ArrayList<SqlQueryStat> result = new ArrayList<SqlQueryStat>();
 
 		String where = "where 1";
-		
-	   if (filter == 1)
+
+		if (filter == 1)
 			where += "AND current_query != 'IDLE' ";
-	   if (filter == 2)
-		   where += "AND current_query not like '<IDLE>%' ";
+		if (filter == 2)
+			where += "AND current_query not like '<IDLE>%' ";
 
 		if (datName != null)
 			where += " and datname like '" + datName + "'";



More information about the Schmitzm-commits mailing list