annotate src/luan/modules/lucene/PostgresBackup.java @ 1388:2024d23ddd64

add restore_from_postgres
author Franklin Schmidt <fschmidt@gmail.com>
date Tue, 03 Sep 2019 22:12:53 -0600
parents bc40bc9aab3a
children 94f48cc76de8
Ignore whitespace changes - Everywhere: Within whitespace: At end of lines:
rev   line source
1387
bc40bc9aab3a start postgres backup
Franklin Schmidt <fschmidt@gmail.com>
parents:
diff changeset
1 package luan.modules.lucene;
bc40bc9aab3a start postgres backup
Franklin Schmidt <fschmidt@gmail.com>
parents:
diff changeset
2
1388
2024d23ddd64 add restore_from_postgres
Franklin Schmidt <fschmidt@gmail.com>
parents: 1387
diff changeset
3 import java.io.IOException;
1387
bc40bc9aab3a start postgres backup
Franklin Schmidt <fschmidt@gmail.com>
parents:
diff changeset
4 import java.sql.Connection;
bc40bc9aab3a start postgres backup
Franklin Schmidt <fschmidt@gmail.com>
parents:
diff changeset
5 import java.sql.DriverManager;
bc40bc9aab3a start postgres backup
Franklin Schmidt <fschmidt@gmail.com>
parents:
diff changeset
6 import java.sql.Statement;
bc40bc9aab3a start postgres backup
Franklin Schmidt <fschmidt@gmail.com>
parents:
diff changeset
7 import java.sql.PreparedStatement;
bc40bc9aab3a start postgres backup
Franklin Schmidt <fschmidt@gmail.com>
parents:
diff changeset
8 import java.sql.SQLException;
1388
2024d23ddd64 add restore_from_postgres
Franklin Schmidt <fschmidt@gmail.com>
parents: 1387
diff changeset
9 import java.sql.ResultSet;
1387
bc40bc9aab3a start postgres backup
Franklin Schmidt <fschmidt@gmail.com>
parents:
diff changeset
10 import java.util.Properties;
1388
2024d23ddd64 add restore_from_postgres
Franklin Schmidt <fschmidt@gmail.com>
parents: 1387
diff changeset
11 import luan.Luan;
1387
bc40bc9aab3a start postgres backup
Franklin Schmidt <fschmidt@gmail.com>
parents:
diff changeset
12 import luan.LuanTable;
1388
2024d23ddd64 add restore_from_postgres
Franklin Schmidt <fschmidt@gmail.com>
parents: 1387
diff changeset
13 import luan.LuanFunction;
1387
bc40bc9aab3a start postgres backup
Franklin Schmidt <fschmidt@gmail.com>
parents:
diff changeset
14 import luan.LuanException;
bc40bc9aab3a start postgres backup
Franklin Schmidt <fschmidt@gmail.com>
parents:
diff changeset
15 import luan.modules.parsers.LuanToString;
bc40bc9aab3a start postgres backup
Franklin Schmidt <fschmidt@gmail.com>
parents:
diff changeset
16 import luan.lib.logging.Logger;
bc40bc9aab3a start postgres backup
Franklin Schmidt <fschmidt@gmail.com>
parents:
diff changeset
17 import luan.lib.logging.LoggerFactory;
bc40bc9aab3a start postgres backup
Franklin Schmidt <fschmidt@gmail.com>
parents:
diff changeset
18
bc40bc9aab3a start postgres backup
Franklin Schmidt <fschmidt@gmail.com>
parents:
diff changeset
19
bc40bc9aab3a start postgres backup
Franklin Schmidt <fschmidt@gmail.com>
parents:
diff changeset
20 final class PostgresBackup {
bc40bc9aab3a start postgres backup
Franklin Schmidt <fschmidt@gmail.com>
parents:
diff changeset
21 private static final Logger logger = LoggerFactory.getLogger(PostgresBackup.class);
bc40bc9aab3a start postgres backup
Franklin Schmidt <fschmidt@gmail.com>
parents:
diff changeset
22
bc40bc9aab3a start postgres backup
Franklin Schmidt <fschmidt@gmail.com>
parents:
diff changeset
23 static PostgresBackup newInstance() {
bc40bc9aab3a start postgres backup
Franklin Schmidt <fschmidt@gmail.com>
parents:
diff changeset
24 try {
bc40bc9aab3a start postgres backup
Franklin Schmidt <fschmidt@gmail.com>
parents:
diff changeset
25 return new PostgresBackup();
bc40bc9aab3a start postgres backup
Franklin Schmidt <fschmidt@gmail.com>
parents:
diff changeset
26 } catch(ClassNotFoundException e) {
bc40bc9aab3a start postgres backup
Franklin Schmidt <fschmidt@gmail.com>
parents:
diff changeset
27 logger.error("creation failed",e);
bc40bc9aab3a start postgres backup
Franklin Schmidt <fschmidt@gmail.com>
parents:
diff changeset
28 return null;
bc40bc9aab3a start postgres backup
Franklin Schmidt <fschmidt@gmail.com>
parents:
diff changeset
29 } catch(SQLException e) {
bc40bc9aab3a start postgres backup
Franklin Schmidt <fschmidt@gmail.com>
parents:
diff changeset
30 logger.error("creation failed",e);
bc40bc9aab3a start postgres backup
Franklin Schmidt <fschmidt@gmail.com>
parents:
diff changeset
31 return null;
bc40bc9aab3a start postgres backup
Franklin Schmidt <fschmidt@gmail.com>
parents:
diff changeset
32 }
bc40bc9aab3a start postgres backup
Franklin Schmidt <fschmidt@gmail.com>
parents:
diff changeset
33 }
bc40bc9aab3a start postgres backup
Franklin Schmidt <fschmidt@gmail.com>
parents:
diff changeset
34
bc40bc9aab3a start postgres backup
Franklin Schmidt <fschmidt@gmail.com>
parents:
diff changeset
35 final boolean wasCreated;
bc40bc9aab3a start postgres backup
Franklin Schmidt <fschmidt@gmail.com>
parents:
diff changeset
36 private final Connection con;
bc40bc9aab3a start postgres backup
Franklin Schmidt <fschmidt@gmail.com>
parents:
diff changeset
37 private final PreparedStatement insertStmt;
bc40bc9aab3a start postgres backup
Franklin Schmidt <fschmidt@gmail.com>
parents:
diff changeset
38 private final PreparedStatement updateStmt;
bc40bc9aab3a start postgres backup
Franklin Schmidt <fschmidt@gmail.com>
parents:
diff changeset
39 private final PreparedStatement deleteStmt;
bc40bc9aab3a start postgres backup
Franklin Schmidt <fschmidt@gmail.com>
parents:
diff changeset
40 private int trans = 0;
1388
2024d23ddd64 add restore_from_postgres
Franklin Schmidt <fschmidt@gmail.com>
parents: 1387
diff changeset
41 private final LuanToString luanToString = new LuanToString();
2024d23ddd64 add restore_from_postgres
Franklin Schmidt <fschmidt@gmail.com>
parents: 1387
diff changeset
42 private final LuanTable env = new LuanTable(new Luan());
1387
bc40bc9aab3a start postgres backup
Franklin Schmidt <fschmidt@gmail.com>
parents:
diff changeset
43
bc40bc9aab3a start postgres backup
Franklin Schmidt <fschmidt@gmail.com>
parents:
diff changeset
44 private PostgresBackup()
bc40bc9aab3a start postgres backup
Franklin Schmidt <fschmidt@gmail.com>
parents:
diff changeset
45 throws ClassNotFoundException, SQLException
bc40bc9aab3a start postgres backup
Franklin Schmidt <fschmidt@gmail.com>
parents:
diff changeset
46 {
bc40bc9aab3a start postgres backup
Franklin Schmidt <fschmidt@gmail.com>
parents:
diff changeset
47 Class.forName("org.postgresql.Driver");
bc40bc9aab3a start postgres backup
Franklin Schmidt <fschmidt@gmail.com>
parents:
diff changeset
48
bc40bc9aab3a start postgres backup
Franklin Schmidt <fschmidt@gmail.com>
parents:
diff changeset
49 String url = "jdbc:postgresql://localhost:5432/luan";
bc40bc9aab3a start postgres backup
Franklin Schmidt <fschmidt@gmail.com>
parents:
diff changeset
50 Properties props = new Properties();
bc40bc9aab3a start postgres backup
Franklin Schmidt <fschmidt@gmail.com>
parents:
diff changeset
51 props.setProperty("user","postgres");
bc40bc9aab3a start postgres backup
Franklin Schmidt <fschmidt@gmail.com>
parents:
diff changeset
52 props.setProperty("password","");
bc40bc9aab3a start postgres backup
Franklin Schmidt <fschmidt@gmail.com>
parents:
diff changeset
53
bc40bc9aab3a start postgres backup
Franklin Schmidt <fschmidt@gmail.com>
parents:
diff changeset
54 con = DriverManager.getConnection(url,props);
bc40bc9aab3a start postgres backup
Franklin Schmidt <fschmidt@gmail.com>
parents:
diff changeset
55
bc40bc9aab3a start postgres backup
Franklin Schmidt <fschmidt@gmail.com>
parents:
diff changeset
56 Statement stmt = con.createStatement();
bc40bc9aab3a start postgres backup
Franklin Schmidt <fschmidt@gmail.com>
parents:
diff changeset
57 boolean hasTable = stmt.executeQuery(
bc40bc9aab3a start postgres backup
Franklin Schmidt <fschmidt@gmail.com>
parents:
diff changeset
58 "select * from information_schema.tables where table_name='lucene'"
bc40bc9aab3a start postgres backup
Franklin Schmidt <fschmidt@gmail.com>
parents:
diff changeset
59 ).next();
bc40bc9aab3a start postgres backup
Franklin Schmidt <fschmidt@gmail.com>
parents:
diff changeset
60 if( !hasTable ) {
bc40bc9aab3a start postgres backup
Franklin Schmidt <fschmidt@gmail.com>
parents:
diff changeset
61 stmt.executeUpdate(
bc40bc9aab3a start postgres backup
Franklin Schmidt <fschmidt@gmail.com>
parents:
diff changeset
62 "create table lucene ("
bc40bc9aab3a start postgres backup
Franklin Schmidt <fschmidt@gmail.com>
parents:
diff changeset
63 +" id integer not null primary key,"
bc40bc9aab3a start postgres backup
Franklin Schmidt <fschmidt@gmail.com>
parents:
diff changeset
64 +" data text not null"
bc40bc9aab3a start postgres backup
Franklin Schmidt <fschmidt@gmail.com>
parents:
diff changeset
65 +")"
bc40bc9aab3a start postgres backup
Franklin Schmidt <fschmidt@gmail.com>
parents:
diff changeset
66 );
bc40bc9aab3a start postgres backup
Franklin Schmidt <fschmidt@gmail.com>
parents:
diff changeset
67 }
bc40bc9aab3a start postgres backup
Franklin Schmidt <fschmidt@gmail.com>
parents:
diff changeset
68 stmt.close();
bc40bc9aab3a start postgres backup
Franklin Schmidt <fschmidt@gmail.com>
parents:
diff changeset
69 wasCreated = !hasTable;
bc40bc9aab3a start postgres backup
Franklin Schmidt <fschmidt@gmail.com>
parents:
diff changeset
70
bc40bc9aab3a start postgres backup
Franklin Schmidt <fschmidt@gmail.com>
parents:
diff changeset
71 insertStmt = con.prepareStatement(
bc40bc9aab3a start postgres backup
Franklin Schmidt <fschmidt@gmail.com>
parents:
diff changeset
72 "insert into lucene (id,data) values (?,?)"
bc40bc9aab3a start postgres backup
Franklin Schmidt <fschmidt@gmail.com>
parents:
diff changeset
73 );
bc40bc9aab3a start postgres backup
Franklin Schmidt <fschmidt@gmail.com>
parents:
diff changeset
74 updateStmt = con.prepareStatement(
bc40bc9aab3a start postgres backup
Franklin Schmidt <fschmidt@gmail.com>
parents:
diff changeset
75 "update lucene set data=? where id=?"
bc40bc9aab3a start postgres backup
Franklin Schmidt <fschmidt@gmail.com>
parents:
diff changeset
76 );
bc40bc9aab3a start postgres backup
Franklin Schmidt <fschmidt@gmail.com>
parents:
diff changeset
77 deleteStmt = con.prepareStatement(
bc40bc9aab3a start postgres backup
Franklin Schmidt <fschmidt@gmail.com>
parents:
diff changeset
78 "delete from lucene where id=?"
bc40bc9aab3a start postgres backup
Franklin Schmidt <fschmidt@gmail.com>
parents:
diff changeset
79 );
1388
2024d23ddd64 add restore_from_postgres
Franklin Schmidt <fschmidt@gmail.com>
parents: 1387
diff changeset
80
2024d23ddd64 add restore_from_postgres
Franklin Schmidt <fschmidt@gmail.com>
parents: 1387
diff changeset
81 luanToString.strict = true;
2024d23ddd64 add restore_from_postgres
Franklin Schmidt <fschmidt@gmail.com>
parents: 1387
diff changeset
82 luanToString.numberTypes = true;
2024d23ddd64 add restore_from_postgres
Franklin Schmidt <fschmidt@gmail.com>
parents: 1387
diff changeset
83 LuanToString.addNumberTypes(env);
1387
bc40bc9aab3a start postgres backup
Franklin Schmidt <fschmidt@gmail.com>
parents:
diff changeset
84 }
bc40bc9aab3a start postgres backup
Franklin Schmidt <fschmidt@gmail.com>
parents:
diff changeset
85
bc40bc9aab3a start postgres backup
Franklin Schmidt <fschmidt@gmail.com>
parents:
diff changeset
86 void close() {
bc40bc9aab3a start postgres backup
Franklin Schmidt <fschmidt@gmail.com>
parents:
diff changeset
87 try {
bc40bc9aab3a start postgres backup
Franklin Schmidt <fschmidt@gmail.com>
parents:
diff changeset
88 insertStmt.close();
bc40bc9aab3a start postgres backup
Franklin Schmidt <fschmidt@gmail.com>
parents:
diff changeset
89 updateStmt.close();
bc40bc9aab3a start postgres backup
Franklin Schmidt <fschmidt@gmail.com>
parents:
diff changeset
90 deleteStmt.close();
bc40bc9aab3a start postgres backup
Franklin Schmidt <fschmidt@gmail.com>
parents:
diff changeset
91 con.close();
bc40bc9aab3a start postgres backup
Franklin Schmidt <fschmidt@gmail.com>
parents:
diff changeset
92 } catch(SQLException e) {
bc40bc9aab3a start postgres backup
Franklin Schmidt <fschmidt@gmail.com>
parents:
diff changeset
93 logger.error("close failed",e);
bc40bc9aab3a start postgres backup
Franklin Schmidt <fschmidt@gmail.com>
parents:
diff changeset
94 }
bc40bc9aab3a start postgres backup
Franklin Schmidt <fschmidt@gmail.com>
parents:
diff changeset
95 }
bc40bc9aab3a start postgres backup
Franklin Schmidt <fschmidt@gmail.com>
parents:
diff changeset
96
bc40bc9aab3a start postgres backup
Franklin Schmidt <fschmidt@gmail.com>
parents:
diff changeset
97 protected void finalize() throws Throwable {
bc40bc9aab3a start postgres backup
Franklin Schmidt <fschmidt@gmail.com>
parents:
diff changeset
98 super.finalize();
bc40bc9aab3a start postgres backup
Franklin Schmidt <fschmidt@gmail.com>
parents:
diff changeset
99 if( !con.isClosed() ) {
bc40bc9aab3a start postgres backup
Franklin Schmidt <fschmidt@gmail.com>
parents:
diff changeset
100 logger.error("con not closed");
bc40bc9aab3a start postgres backup
Franklin Schmidt <fschmidt@gmail.com>
parents:
diff changeset
101 con.close();
bc40bc9aab3a start postgres backup
Franklin Schmidt <fschmidt@gmail.com>
parents:
diff changeset
102 }
bc40bc9aab3a start postgres backup
Franklin Schmidt <fschmidt@gmail.com>
parents:
diff changeset
103 }
bc40bc9aab3a start postgres backup
Franklin Schmidt <fschmidt@gmail.com>
parents:
diff changeset
104
bc40bc9aab3a start postgres backup
Franklin Schmidt <fschmidt@gmail.com>
parents:
diff changeset
105 void add(long id,LuanTable doc) throws LuanException {
bc40bc9aab3a start postgres backup
Franklin Schmidt <fschmidt@gmail.com>
parents:
diff changeset
106 try {
bc40bc9aab3a start postgres backup
Franklin Schmidt <fschmidt@gmail.com>
parents:
diff changeset
107 //logger.info("getAutoCommit="+con.getAutoCommit());
1388
2024d23ddd64 add restore_from_postgres
Franklin Schmidt <fschmidt@gmail.com>
parents: 1387
diff changeset
108 String data = luanToString.toString(doc);
1387
bc40bc9aab3a start postgres backup
Franklin Schmidt <fschmidt@gmail.com>
parents:
diff changeset
109 insertStmt.setLong(1,id);
bc40bc9aab3a start postgres backup
Franklin Schmidt <fschmidt@gmail.com>
parents:
diff changeset
110 insertStmt.setString(2,data);
bc40bc9aab3a start postgres backup
Franklin Schmidt <fschmidt@gmail.com>
parents:
diff changeset
111 insertStmt.executeUpdate();
bc40bc9aab3a start postgres backup
Franklin Schmidt <fschmidt@gmail.com>
parents:
diff changeset
112 } catch(SQLException e) {
bc40bc9aab3a start postgres backup
Franklin Schmidt <fschmidt@gmail.com>
parents:
diff changeset
113 logger.error("add failed",e);
bc40bc9aab3a start postgres backup
Franklin Schmidt <fschmidt@gmail.com>
parents:
diff changeset
114 }
bc40bc9aab3a start postgres backup
Franklin Schmidt <fschmidt@gmail.com>
parents:
diff changeset
115 }
bc40bc9aab3a start postgres backup
Franklin Schmidt <fschmidt@gmail.com>
parents:
diff changeset
116
bc40bc9aab3a start postgres backup
Franklin Schmidt <fschmidt@gmail.com>
parents:
diff changeset
117 void update(long id,LuanTable doc) throws LuanException {
bc40bc9aab3a start postgres backup
Franklin Schmidt <fschmidt@gmail.com>
parents:
diff changeset
118 try {
1388
2024d23ddd64 add restore_from_postgres
Franklin Schmidt <fschmidt@gmail.com>
parents: 1387
diff changeset
119 String data = luanToString.toString(doc);
1387
bc40bc9aab3a start postgres backup
Franklin Schmidt <fschmidt@gmail.com>
parents:
diff changeset
120 updateStmt.setString(1,data);
bc40bc9aab3a start postgres backup
Franklin Schmidt <fschmidt@gmail.com>
parents:
diff changeset
121 updateStmt.setLong(2,id);
bc40bc9aab3a start postgres backup
Franklin Schmidt <fschmidt@gmail.com>
parents:
diff changeset
122 int n = updateStmt.executeUpdate();
bc40bc9aab3a start postgres backup
Franklin Schmidt <fschmidt@gmail.com>
parents:
diff changeset
123 if( n==0 ) {
bc40bc9aab3a start postgres backup
Franklin Schmidt <fschmidt@gmail.com>
parents:
diff changeset
124 logger.error("update not found for id="+id+", trying add");
bc40bc9aab3a start postgres backup
Franklin Schmidt <fschmidt@gmail.com>
parents:
diff changeset
125 add(id,doc);
bc40bc9aab3a start postgres backup
Franklin Schmidt <fschmidt@gmail.com>
parents:
diff changeset
126 } else if( n!=1 )
bc40bc9aab3a start postgres backup
Franklin Schmidt <fschmidt@gmail.com>
parents:
diff changeset
127 throw new RuntimeException();
bc40bc9aab3a start postgres backup
Franklin Schmidt <fschmidt@gmail.com>
parents:
diff changeset
128 } catch(SQLException e) {
bc40bc9aab3a start postgres backup
Franklin Schmidt <fschmidt@gmail.com>
parents:
diff changeset
129 logger.error("update failed",e);
bc40bc9aab3a start postgres backup
Franklin Schmidt <fschmidt@gmail.com>
parents:
diff changeset
130 }
bc40bc9aab3a start postgres backup
Franklin Schmidt <fschmidt@gmail.com>
parents:
diff changeset
131 }
bc40bc9aab3a start postgres backup
Franklin Schmidt <fschmidt@gmail.com>
parents:
diff changeset
132
bc40bc9aab3a start postgres backup
Franklin Schmidt <fschmidt@gmail.com>
parents:
diff changeset
133 void deleteAll() {
bc40bc9aab3a start postgres backup
Franklin Schmidt <fschmidt@gmail.com>
parents:
diff changeset
134 try {
bc40bc9aab3a start postgres backup
Franklin Schmidt <fschmidt@gmail.com>
parents:
diff changeset
135 Statement stmt = con.createStatement();
bc40bc9aab3a start postgres backup
Franklin Schmidt <fschmidt@gmail.com>
parents:
diff changeset
136 stmt.executeUpdate("delete from lucene");
bc40bc9aab3a start postgres backup
Franklin Schmidt <fschmidt@gmail.com>
parents:
diff changeset
137 stmt.close();
bc40bc9aab3a start postgres backup
Franklin Schmidt <fschmidt@gmail.com>
parents:
diff changeset
138 } catch(SQLException e) {
bc40bc9aab3a start postgres backup
Franklin Schmidt <fschmidt@gmail.com>
parents:
diff changeset
139 logger.error("update failed",e);
bc40bc9aab3a start postgres backup
Franklin Schmidt <fschmidt@gmail.com>
parents:
diff changeset
140 }
bc40bc9aab3a start postgres backup
Franklin Schmidt <fschmidt@gmail.com>
parents:
diff changeset
141 }
bc40bc9aab3a start postgres backup
Franklin Schmidt <fschmidt@gmail.com>
parents:
diff changeset
142
bc40bc9aab3a start postgres backup
Franklin Schmidt <fschmidt@gmail.com>
parents:
diff changeset
143 void delete(long id) {
bc40bc9aab3a start postgres backup
Franklin Schmidt <fschmidt@gmail.com>
parents:
diff changeset
144 try {
bc40bc9aab3a start postgres backup
Franklin Schmidt <fschmidt@gmail.com>
parents:
diff changeset
145 deleteStmt.setLong(1,id);
bc40bc9aab3a start postgres backup
Franklin Schmidt <fschmidt@gmail.com>
parents:
diff changeset
146 int n = deleteStmt.executeUpdate();
bc40bc9aab3a start postgres backup
Franklin Schmidt <fschmidt@gmail.com>
parents:
diff changeset
147 if( n==0 ) {
bc40bc9aab3a start postgres backup
Franklin Schmidt <fschmidt@gmail.com>
parents:
diff changeset
148 logger.error("delete not found for id="+id);
bc40bc9aab3a start postgres backup
Franklin Schmidt <fschmidt@gmail.com>
parents:
diff changeset
149 }
bc40bc9aab3a start postgres backup
Franklin Schmidt <fschmidt@gmail.com>
parents:
diff changeset
150 } catch(SQLException e) {
bc40bc9aab3a start postgres backup
Franklin Schmidt <fschmidt@gmail.com>
parents:
diff changeset
151 logger.error("update failed",e);
bc40bc9aab3a start postgres backup
Franklin Schmidt <fschmidt@gmail.com>
parents:
diff changeset
152 }
bc40bc9aab3a start postgres backup
Franklin Schmidt <fschmidt@gmail.com>
parents:
diff changeset
153 }
bc40bc9aab3a start postgres backup
Franklin Schmidt <fschmidt@gmail.com>
parents:
diff changeset
154
bc40bc9aab3a start postgres backup
Franklin Schmidt <fschmidt@gmail.com>
parents:
diff changeset
155 void begin() {
bc40bc9aab3a start postgres backup
Franklin Schmidt <fschmidt@gmail.com>
parents:
diff changeset
156 try {
bc40bc9aab3a start postgres backup
Franklin Schmidt <fschmidt@gmail.com>
parents:
diff changeset
157 if( trans++ == 0 )
bc40bc9aab3a start postgres backup
Franklin Schmidt <fschmidt@gmail.com>
parents:
diff changeset
158 con.setAutoCommit(false);
bc40bc9aab3a start postgres backup
Franklin Schmidt <fschmidt@gmail.com>
parents:
diff changeset
159 } catch(SQLException e) {
bc40bc9aab3a start postgres backup
Franklin Schmidt <fschmidt@gmail.com>
parents:
diff changeset
160 logger.error("begin failed",e);
bc40bc9aab3a start postgres backup
Franklin Schmidt <fschmidt@gmail.com>
parents:
diff changeset
161 }
bc40bc9aab3a start postgres backup
Franklin Schmidt <fschmidt@gmail.com>
parents:
diff changeset
162 }
bc40bc9aab3a start postgres backup
Franklin Schmidt <fschmidt@gmail.com>
parents:
diff changeset
163
bc40bc9aab3a start postgres backup
Franklin Schmidt <fschmidt@gmail.com>
parents:
diff changeset
164 void commit() {
bc40bc9aab3a start postgres backup
Franklin Schmidt <fschmidt@gmail.com>
parents:
diff changeset
165 try {
bc40bc9aab3a start postgres backup
Franklin Schmidt <fschmidt@gmail.com>
parents:
diff changeset
166 if( trans <= 0 ) {
bc40bc9aab3a start postgres backup
Franklin Schmidt <fschmidt@gmail.com>
parents:
diff changeset
167 logger.error("commit not in transaction");
bc40bc9aab3a start postgres backup
Franklin Schmidt <fschmidt@gmail.com>
parents:
diff changeset
168 return;
bc40bc9aab3a start postgres backup
Franklin Schmidt <fschmidt@gmail.com>
parents:
diff changeset
169 }
bc40bc9aab3a start postgres backup
Franklin Schmidt <fschmidt@gmail.com>
parents:
diff changeset
170 if( --trans == 0 )
bc40bc9aab3a start postgres backup
Franklin Schmidt <fschmidt@gmail.com>
parents:
diff changeset
171 con.setAutoCommit(true);
bc40bc9aab3a start postgres backup
Franklin Schmidt <fschmidt@gmail.com>
parents:
diff changeset
172 } catch(SQLException e) {
bc40bc9aab3a start postgres backup
Franklin Schmidt <fschmidt@gmail.com>
parents:
diff changeset
173 logger.error("begin failed",e);
bc40bc9aab3a start postgres backup
Franklin Schmidt <fschmidt@gmail.com>
parents:
diff changeset
174 }
bc40bc9aab3a start postgres backup
Franklin Schmidt <fschmidt@gmail.com>
parents:
diff changeset
175 }
bc40bc9aab3a start postgres backup
Franklin Schmidt <fschmidt@gmail.com>
parents:
diff changeset
176
bc40bc9aab3a start postgres backup
Franklin Schmidt <fschmidt@gmail.com>
parents:
diff changeset
177 void rollback() {
bc40bc9aab3a start postgres backup
Franklin Schmidt <fschmidt@gmail.com>
parents:
diff changeset
178 try {
bc40bc9aab3a start postgres backup
Franklin Schmidt <fschmidt@gmail.com>
parents:
diff changeset
179 if( --trans != 0 ) {
bc40bc9aab3a start postgres backup
Franklin Schmidt <fschmidt@gmail.com>
parents:
diff changeset
180 logger.error("rollback failed trans="+trans);
bc40bc9aab3a start postgres backup
Franklin Schmidt <fschmidt@gmail.com>
parents:
diff changeset
181 return;
bc40bc9aab3a start postgres backup
Franklin Schmidt <fschmidt@gmail.com>
parents:
diff changeset
182 }
bc40bc9aab3a start postgres backup
Franklin Schmidt <fschmidt@gmail.com>
parents:
diff changeset
183 con.rollback();
bc40bc9aab3a start postgres backup
Franklin Schmidt <fschmidt@gmail.com>
parents:
diff changeset
184 con.setAutoCommit(true);
bc40bc9aab3a start postgres backup
Franklin Schmidt <fschmidt@gmail.com>
parents:
diff changeset
185 } catch(SQLException e) {
bc40bc9aab3a start postgres backup
Franklin Schmidt <fschmidt@gmail.com>
parents:
diff changeset
186 logger.error("begin failed",e);
bc40bc9aab3a start postgres backup
Franklin Schmidt <fschmidt@gmail.com>
parents:
diff changeset
187 }
bc40bc9aab3a start postgres backup
Franklin Schmidt <fschmidt@gmail.com>
parents:
diff changeset
188 }
bc40bc9aab3a start postgres backup
Franklin Schmidt <fschmidt@gmail.com>
parents:
diff changeset
189
1388
2024d23ddd64 add restore_from_postgres
Franklin Schmidt <fschmidt@gmail.com>
parents: 1387
diff changeset
190 private final Luan luanEval = new Luan();
2024d23ddd64 add restore_from_postgres
Franklin Schmidt <fschmidt@gmail.com>
parents: 1387
diff changeset
191
2024d23ddd64 add restore_from_postgres
Franklin Schmidt <fschmidt@gmail.com>
parents: 1387
diff changeset
192 private Object eval(String s) throws LuanException {
2024d23ddd64 add restore_from_postgres
Franklin Schmidt <fschmidt@gmail.com>
parents: 1387
diff changeset
193 LuanFunction fn = env.luan().load( "return "+s, "PostgresBackup", env );
2024d23ddd64 add restore_from_postgres
Franklin Schmidt <fschmidt@gmail.com>
parents: 1387
diff changeset
194 return fn.call();
2024d23ddd64 add restore_from_postgres
Franklin Schmidt <fschmidt@gmail.com>
parents: 1387
diff changeset
195 }
2024d23ddd64 add restore_from_postgres
Franklin Schmidt <fschmidt@gmail.com>
parents: 1387
diff changeset
196
2024d23ddd64 add restore_from_postgres
Franklin Schmidt <fschmidt@gmail.com>
parents: 1387
diff changeset
197 void restoreLucene(LuceneIndex li)
2024d23ddd64 add restore_from_postgres
Franklin Schmidt <fschmidt@gmail.com>
parents: 1387
diff changeset
198 throws LuanException, IOException
2024d23ddd64 add restore_from_postgres
Franklin Schmidt <fschmidt@gmail.com>
parents: 1387
diff changeset
199 {
2024d23ddd64 add restore_from_postgres
Franklin Schmidt <fschmidt@gmail.com>
parents: 1387
diff changeset
200 try {
2024d23ddd64 add restore_from_postgres
Franklin Schmidt <fschmidt@gmail.com>
parents: 1387
diff changeset
201 Statement stmt = con.createStatement();
2024d23ddd64 add restore_from_postgres
Franklin Schmidt <fschmidt@gmail.com>
parents: 1387
diff changeset
202 ResultSet rs = stmt.executeQuery("select data from lucene");
2024d23ddd64 add restore_from_postgres
Franklin Schmidt <fschmidt@gmail.com>
parents: 1387
diff changeset
203 while( rs.next() ) {
2024d23ddd64 add restore_from_postgres
Franklin Schmidt <fschmidt@gmail.com>
parents: 1387
diff changeset
204 String data = rs.getString("data");
2024d23ddd64 add restore_from_postgres
Franklin Schmidt <fschmidt@gmail.com>
parents: 1387
diff changeset
205 LuanTable doc = (LuanTable)eval(data);
2024d23ddd64 add restore_from_postgres
Franklin Schmidt <fschmidt@gmail.com>
parents: 1387
diff changeset
206 li.restore(doc);
2024d23ddd64 add restore_from_postgres
Franklin Schmidt <fschmidt@gmail.com>
parents: 1387
diff changeset
207 }
2024d23ddd64 add restore_from_postgres
Franklin Schmidt <fschmidt@gmail.com>
parents: 1387
diff changeset
208 stmt.close();
2024d23ddd64 add restore_from_postgres
Franklin Schmidt <fschmidt@gmail.com>
parents: 1387
diff changeset
209 } catch(SQLException e) {
2024d23ddd64 add restore_from_postgres
Franklin Schmidt <fschmidt@gmail.com>
parents: 1387
diff changeset
210 logger.error("restoreLucene failed",e);
2024d23ddd64 add restore_from_postgres
Franklin Schmidt <fschmidt@gmail.com>
parents: 1387
diff changeset
211 throw new RuntimeException(e);
2024d23ddd64 add restore_from_postgres
Franklin Schmidt <fschmidt@gmail.com>
parents: 1387
diff changeset
212 }
2024d23ddd64 add restore_from_postgres
Franklin Schmidt <fschmidt@gmail.com>
parents: 1387
diff changeset
213 }
2024d23ddd64 add restore_from_postgres
Franklin Schmidt <fschmidt@gmail.com>
parents: 1387
diff changeset
214
2024d23ddd64 add restore_from_postgres
Franklin Schmidt <fschmidt@gmail.com>
parents: 1387
diff changeset
215 long maxId()
2024d23ddd64 add restore_from_postgres
Franklin Schmidt <fschmidt@gmail.com>
parents: 1387
diff changeset
216 throws LuanException, IOException
2024d23ddd64 add restore_from_postgres
Franklin Schmidt <fschmidt@gmail.com>
parents: 1387
diff changeset
217 {
2024d23ddd64 add restore_from_postgres
Franklin Schmidt <fschmidt@gmail.com>
parents: 1387
diff changeset
218 try {
2024d23ddd64 add restore_from_postgres
Franklin Schmidt <fschmidt@gmail.com>
parents: 1387
diff changeset
219 Statement stmt = con.createStatement();
2024d23ddd64 add restore_from_postgres
Franklin Schmidt <fschmidt@gmail.com>
parents: 1387
diff changeset
220 ResultSet rs = stmt.executeQuery("select max(id) as m from lucene");
2024d23ddd64 add restore_from_postgres
Franklin Schmidt <fschmidt@gmail.com>
parents: 1387
diff changeset
221 rs.next();
2024d23ddd64 add restore_from_postgres
Franklin Schmidt <fschmidt@gmail.com>
parents: 1387
diff changeset
222 long m = rs.getLong("m");
2024d23ddd64 add restore_from_postgres
Franklin Schmidt <fschmidt@gmail.com>
parents: 1387
diff changeset
223 stmt.close();
2024d23ddd64 add restore_from_postgres
Franklin Schmidt <fschmidt@gmail.com>
parents: 1387
diff changeset
224 return m;
2024d23ddd64 add restore_from_postgres
Franklin Schmidt <fschmidt@gmail.com>
parents: 1387
diff changeset
225 } catch(SQLException e) {
2024d23ddd64 add restore_from_postgres
Franklin Schmidt <fschmidt@gmail.com>
parents: 1387
diff changeset
226 logger.error("maxId failed",e);
2024d23ddd64 add restore_from_postgres
Franklin Schmidt <fschmidt@gmail.com>
parents: 1387
diff changeset
227 throw new RuntimeException(e);
2024d23ddd64 add restore_from_postgres
Franklin Schmidt <fschmidt@gmail.com>
parents: 1387
diff changeset
228 }
2024d23ddd64 add restore_from_postgres
Franklin Schmidt <fschmidt@gmail.com>
parents: 1387
diff changeset
229 }
2024d23ddd64 add restore_from_postgres
Franklin Schmidt <fschmidt@gmail.com>
parents: 1387
diff changeset
230
1387
bc40bc9aab3a start postgres backup
Franklin Schmidt <fschmidt@gmail.com>
parents:
diff changeset
231 }