summaryrefslogtreecommitdiff
path: root/src/main/java/io/trygvis/jz14/demo/KillListenerMain.java
diff options
context:
space:
mode:
Diffstat (limited to 'src/main/java/io/trygvis/jz14/demo/KillListenerMain.java')
-rw-r--r--src/main/java/io/trygvis/jz14/demo/KillListenerMain.java58
1 files changed, 58 insertions, 0 deletions
diff --git a/src/main/java/io/trygvis/jz14/demo/KillListenerMain.java b/src/main/java/io/trygvis/jz14/demo/KillListenerMain.java
new file mode 100644
index 0000000..6ea982a
--- /dev/null
+++ b/src/main/java/io/trygvis/jz14/demo/KillListenerMain.java
@@ -0,0 +1,58 @@
+package io.trygvis.jz14.demo;
+
+import io.trygvis.jz14.db.DbListener;
+import org.slf4j.Logger;
+
+import java.sql.Connection;
+import java.sql.ResultSet;
+import java.sql.Statement;
+import java.util.ArrayList;
+import java.util.List;
+
+import static org.slf4j.LoggerFactory.getLogger;
+
+/**
+ * Kills all connections from {@link io.trygvis.jz14.demo.ListenerMain}.
+ * <p/>
+ * Note that this is slightly different from a postgresql backend failing, as the client will be told that it was
+ * killed, but the effect in this code is the same.
+ */
+public class KillListenerMain implements DbListener.NewItemCallback {
+ Logger log = getLogger(getClass());
+ Db db = new Db("killer");
+
+ public static void main(String[] args) throws Exception {
+ new KillListenerMain().main();
+ }
+
+ private void main() throws Exception {
+ Connection c = db.getConnection();
+ Statement s = c.createStatement();
+
+ ResultSet rs = s.executeQuery("SELECT pid FROM pg_stat_activity WHERE usename=user AND application_name='listener'");
+ if (!rs.next()) {
+ System.out.println("Couldn't find any listener");
+ } else {
+ List<Integer> pids = new ArrayList<>();
+
+ do {
+ int pid = rs.getInt("pid");
+ pids.add(pid);
+ } while (rs.next());
+
+ for (Integer pid : pids) {
+ System.out.println("Killing " + pid);
+ ResultSet rs2 = s.executeQuery("select pg_terminate_backend(" + pid + ")");
+ rs2.next();
+ System.out.println("rs2.getBoolean(1) = " + rs2.getBoolean(1));
+ }
+ }
+
+ c.close();
+ }
+
+ @Override
+ public void newItem(boolean wasNotified, Iterable<String> parameters) throws Exception {
+ log.info("ListenerMain.newItem: wasNotified={}, parameters={}", wasNotified, parameters);
+ }
+}