annotate src/luan/modules/lucene/PostgresBackup.java @ 1391:94f48cc76de8

add lucene check
author Franklin Schmidt <fschmidt@gmail.com>
date Thu, 05 Sep 2019 01:29:57 -0600
parents 2024d23ddd64
children 002152af497a
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;
1391
94f48cc76de8 add lucene check
Franklin Schmidt <fschmidt@gmail.com>
parents: 1388
diff changeset
11 import java.util.List;
94f48cc76de8 add lucene check
Franklin Schmidt <fschmidt@gmail.com>
parents: 1388
diff changeset
12 import java.util.ArrayList;
1388
2024d23ddd64 add restore_from_postgres
Franklin Schmidt <fschmidt@gmail.com>
parents: 1387
diff changeset
13 import luan.Luan;
1387
bc40bc9aab3a start postgres backup
Franklin Schmidt <fschmidt@gmail.com>
parents:
diff changeset
14 import luan.LuanTable;
1388
2024d23ddd64 add restore_from_postgres
Franklin Schmidt <fschmidt@gmail.com>
parents: 1387
diff changeset
15 import luan.LuanFunction;
1387
bc40bc9aab3a start postgres backup
Franklin Schmidt <fschmidt@gmail.com>
parents:
diff changeset
16 import luan.LuanException;
bc40bc9aab3a start postgres backup
Franklin Schmidt <fschmidt@gmail.com>
parents:
diff changeset
17 import luan.modules.parsers.LuanToString;
bc40bc9aab3a start postgres backup
Franklin Schmidt <fschmidt@gmail.com>
parents:
diff changeset
18 import luan.lib.logging.Logger;
bc40bc9aab3a start postgres backup
Franklin Schmidt <fschmidt@gmail.com>
parents:
diff changeset
19 import luan.lib.logging.LoggerFactory;
bc40bc9aab3a start postgres backup
Franklin Schmidt <fschmidt@gmail.com>
parents:
diff changeset
20
bc40bc9aab3a start postgres backup
Franklin Schmidt <fschmidt@gmail.com>
parents:
diff changeset
21
bc40bc9aab3a start postgres backup
Franklin Schmidt <fschmidt@gmail.com>
parents:
diff changeset
22 final class PostgresBackup {
bc40bc9aab3a start postgres backup
Franklin Schmidt <fschmidt@gmail.com>
parents:
diff changeset
23 private static final Logger logger = LoggerFactory.getLogger(PostgresBackup.class);
bc40bc9aab3a start postgres backup
Franklin Schmidt <fschmidt@gmail.com>
parents:
diff changeset
24
bc40bc9aab3a start postgres backup
Franklin Schmidt <fschmidt@gmail.com>
parents:
diff changeset
25 static PostgresBackup newInstance() {
bc40bc9aab3a start postgres backup
Franklin Schmidt <fschmidt@gmail.com>
parents:
diff changeset
26 try {
bc40bc9aab3a start postgres backup
Franklin Schmidt <fschmidt@gmail.com>
parents:
diff changeset
27 return new PostgresBackup();
bc40bc9aab3a start postgres backup
Franklin Schmidt <fschmidt@gmail.com>
parents:
diff changeset
28 } catch(ClassNotFoundException e) {
bc40bc9aab3a start postgres backup
Franklin Schmidt <fschmidt@gmail.com>
parents:
diff changeset
29 logger.error("creation failed",e);
bc40bc9aab3a start postgres backup
Franklin Schmidt <fschmidt@gmail.com>
parents:
diff changeset
30 return null;
bc40bc9aab3a start postgres backup
Franklin Schmidt <fschmidt@gmail.com>
parents:
diff changeset
31 } catch(SQLException e) {
bc40bc9aab3a start postgres backup
Franklin Schmidt <fschmidt@gmail.com>
parents:
diff changeset
32 logger.error("creation failed",e);
bc40bc9aab3a start postgres backup
Franklin Schmidt <fschmidt@gmail.com>
parents:
diff changeset
33 return null;
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 }
bc40bc9aab3a start postgres backup
Franklin Schmidt <fschmidt@gmail.com>
parents:
diff changeset
36
bc40bc9aab3a start postgres backup
Franklin Schmidt <fschmidt@gmail.com>
parents:
diff changeset
37 final boolean wasCreated;
1391
94f48cc76de8 add lucene check
Franklin Schmidt <fschmidt@gmail.com>
parents: 1388
diff changeset
38 private final String url;
94f48cc76de8 add lucene check
Franklin Schmidt <fschmidt@gmail.com>
parents: 1388
diff changeset
39 private final Properties props = new Properties();
1387
bc40bc9aab3a start postgres backup
Franklin Schmidt <fschmidt@gmail.com>
parents:
diff changeset
40 private final Connection con;
bc40bc9aab3a start postgres backup
Franklin Schmidt <fschmidt@gmail.com>
parents:
diff changeset
41 private final PreparedStatement insertStmt;
bc40bc9aab3a start postgres backup
Franklin Schmidt <fschmidt@gmail.com>
parents:
diff changeset
42 private final PreparedStatement updateStmt;
bc40bc9aab3a start postgres backup
Franklin Schmidt <fschmidt@gmail.com>
parents:
diff changeset
43 private final PreparedStatement deleteStmt;
bc40bc9aab3a start postgres backup
Franklin Schmidt <fschmidt@gmail.com>
parents:
diff changeset
44 private int trans = 0;
1388
2024d23ddd64 add restore_from_postgres
Franklin Schmidt <fschmidt@gmail.com>
parents: 1387
diff changeset
45 private final LuanToString luanToString = new LuanToString();
1387
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 private PostgresBackup()
bc40bc9aab3a start postgres backup
Franklin Schmidt <fschmidt@gmail.com>
parents:
diff changeset
48 throws ClassNotFoundException, SQLException
bc40bc9aab3a start postgres backup
Franklin Schmidt <fschmidt@gmail.com>
parents:
diff changeset
49 {
bc40bc9aab3a start postgres backup
Franklin Schmidt <fschmidt@gmail.com>
parents:
diff changeset
50 Class.forName("org.postgresql.Driver");
bc40bc9aab3a start postgres backup
Franklin Schmidt <fschmidt@gmail.com>
parents:
diff changeset
51
1391
94f48cc76de8 add lucene check
Franklin Schmidt <fschmidt@gmail.com>
parents: 1388
diff changeset
52 url = "jdbc:postgresql://localhost:5432/luan";
1387
bc40bc9aab3a start postgres backup
Franklin Schmidt <fschmidt@gmail.com>
parents:
diff changeset
53 props.setProperty("user","postgres");
bc40bc9aab3a start postgres backup
Franklin Schmidt <fschmidt@gmail.com>
parents:
diff changeset
54 props.setProperty("password","");
bc40bc9aab3a start postgres backup
Franklin Schmidt <fschmidt@gmail.com>
parents:
diff changeset
55
1391
94f48cc76de8 add lucene check
Franklin Schmidt <fschmidt@gmail.com>
parents: 1388
diff changeset
56 con = newConnection();
1387
bc40bc9aab3a start postgres backup
Franklin Schmidt <fschmidt@gmail.com>
parents:
diff changeset
57
bc40bc9aab3a start postgres backup
Franklin Schmidt <fschmidt@gmail.com>
parents:
diff changeset
58 Statement stmt = con.createStatement();
bc40bc9aab3a start postgres backup
Franklin Schmidt <fschmidt@gmail.com>
parents:
diff changeset
59 boolean hasTable = stmt.executeQuery(
bc40bc9aab3a start postgres backup
Franklin Schmidt <fschmidt@gmail.com>
parents:
diff changeset
60 "select * from information_schema.tables where table_name='lucene'"
bc40bc9aab3a start postgres backup
Franklin Schmidt <fschmidt@gmail.com>
parents:
diff changeset
61 ).next();
bc40bc9aab3a start postgres backup
Franklin Schmidt <fschmidt@gmail.com>
parents:
diff changeset
62 if( !hasTable ) {
bc40bc9aab3a start postgres backup
Franklin Schmidt <fschmidt@gmail.com>
parents:
diff changeset
63 stmt.executeUpdate(
bc40bc9aab3a start postgres backup
Franklin Schmidt <fschmidt@gmail.com>
parents:
diff changeset
64 "create table lucene ("
bc40bc9aab3a start postgres backup
Franklin Schmidt <fschmidt@gmail.com>
parents:
diff changeset
65 +" id integer not null primary key,"
bc40bc9aab3a start postgres backup
Franklin Schmidt <fschmidt@gmail.com>
parents:
diff changeset
66 +" data text not null"
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 );
bc40bc9aab3a start postgres backup
Franklin Schmidt <fschmidt@gmail.com>
parents:
diff changeset
69 }
bc40bc9aab3a start postgres backup
Franklin Schmidt <fschmidt@gmail.com>
parents:
diff changeset
70 stmt.close();
bc40bc9aab3a start postgres backup
Franklin Schmidt <fschmidt@gmail.com>
parents:
diff changeset
71 wasCreated = !hasTable;
bc40bc9aab3a start postgres backup
Franklin Schmidt <fschmidt@gmail.com>
parents:
diff changeset
72
bc40bc9aab3a start postgres backup
Franklin Schmidt <fschmidt@gmail.com>
parents:
diff changeset
73 insertStmt = con.prepareStatement(
bc40bc9aab3a start postgres backup
Franklin Schmidt <fschmidt@gmail.com>
parents:
diff changeset
74 "insert into lucene (id,data) values (?,?)"
bc40bc9aab3a start postgres backup
Franklin Schmidt <fschmidt@gmail.com>
parents:
diff changeset
75 );
bc40bc9aab3a start postgres backup
Franklin Schmidt <fschmidt@gmail.com>
parents:
diff changeset
76 updateStmt = con.prepareStatement(
bc40bc9aab3a start postgres backup
Franklin Schmidt <fschmidt@gmail.com>
parents:
diff changeset
77 "update lucene set data=? where id=?"
bc40bc9aab3a start postgres backup
Franklin Schmidt <fschmidt@gmail.com>
parents:
diff changeset
78 );
bc40bc9aab3a start postgres backup
Franklin Schmidt <fschmidt@gmail.com>
parents:
diff changeset
79 deleteStmt = con.prepareStatement(
bc40bc9aab3a start postgres backup
Franklin Schmidt <fschmidt@gmail.com>
parents:
diff changeset
80 "delete from lucene where id=?"
bc40bc9aab3a start postgres backup
Franklin Schmidt <fschmidt@gmail.com>
parents:
diff changeset
81 );
1388
2024d23ddd64 add restore_from_postgres
Franklin Schmidt <fschmidt@gmail.com>
parents: 1387
diff changeset
82
2024d23ddd64 add restore_from_postgres
Franklin Schmidt <fschmidt@gmail.com>
parents: 1387
diff changeset
83 luanToString.strict = true;
2024d23ddd64 add restore_from_postgres
Franklin Schmidt <fschmidt@gmail.com>
parents: 1387
diff changeset
84 luanToString.numberTypes = true;
1391
94f48cc76de8 add lucene check
Franklin Schmidt <fschmidt@gmail.com>
parents: 1388
diff changeset
85 }
94f48cc76de8 add lucene check
Franklin Schmidt <fschmidt@gmail.com>
parents: 1388
diff changeset
86
94f48cc76de8 add lucene check
Franklin Schmidt <fschmidt@gmail.com>
parents: 1388
diff changeset
87 Connection newConnection() throws SQLException {
94f48cc76de8 add lucene check
Franklin Schmidt <fschmidt@gmail.com>
parents: 1388
diff changeset
88 return DriverManager.getConnection(url,props);
1387
bc40bc9aab3a start postgres backup
Franklin Schmidt <fschmidt@gmail.com>
parents:
diff changeset
89 }
bc40bc9aab3a start postgres backup
Franklin Schmidt <fschmidt@gmail.com>
parents:
diff changeset
90
bc40bc9aab3a start postgres backup
Franklin Schmidt <fschmidt@gmail.com>
parents:
diff changeset
91 void close() {
bc40bc9aab3a start postgres backup
Franklin Schmidt <fschmidt@gmail.com>
parents:
diff changeset
92 try {
bc40bc9aab3a start postgres backup
Franklin Schmidt <fschmidt@gmail.com>
parents:
diff changeset
93 insertStmt.close();
bc40bc9aab3a start postgres backup
Franklin Schmidt <fschmidt@gmail.com>
parents:
diff changeset
94 updateStmt.close();
bc40bc9aab3a start postgres backup
Franklin Schmidt <fschmidt@gmail.com>
parents:
diff changeset
95 deleteStmt.close();
bc40bc9aab3a start postgres backup
Franklin Schmidt <fschmidt@gmail.com>
parents:
diff changeset
96 con.close();
bc40bc9aab3a start postgres backup
Franklin Schmidt <fschmidt@gmail.com>
parents:
diff changeset
97 } catch(SQLException e) {
bc40bc9aab3a start postgres backup
Franklin Schmidt <fschmidt@gmail.com>
parents:
diff changeset
98 logger.error("close failed",e);
bc40bc9aab3a start postgres backup
Franklin Schmidt <fschmidt@gmail.com>
parents:
diff changeset
99 }
bc40bc9aab3a start postgres backup
Franklin Schmidt <fschmidt@gmail.com>
parents:
diff changeset
100 }
bc40bc9aab3a start postgres backup
Franklin Schmidt <fschmidt@gmail.com>
parents:
diff changeset
101
bc40bc9aab3a start postgres backup
Franklin Schmidt <fschmidt@gmail.com>
parents:
diff changeset
102 protected void finalize() throws Throwable {
bc40bc9aab3a start postgres backup
Franklin Schmidt <fschmidt@gmail.com>
parents:
diff changeset
103 super.finalize();
bc40bc9aab3a start postgres backup
Franklin Schmidt <fschmidt@gmail.com>
parents:
diff changeset
104 if( !con.isClosed() ) {
bc40bc9aab3a start postgres backup
Franklin Schmidt <fschmidt@gmail.com>
parents:
diff changeset
105 logger.error("con not closed");
bc40bc9aab3a start postgres backup
Franklin Schmidt <fschmidt@gmail.com>
parents:
diff changeset
106 con.close();
bc40bc9aab3a start postgres backup
Franklin Schmidt <fschmidt@gmail.com>
parents:
diff changeset
107 }
bc40bc9aab3a start postgres backup
Franklin Schmidt <fschmidt@gmail.com>
parents:
diff changeset
108 }
bc40bc9aab3a start postgres backup
Franklin Schmidt <fschmidt@gmail.com>
parents:
diff changeset
109
1391
94f48cc76de8 add lucene check
Franklin Schmidt <fschmidt@gmail.com>
parents: 1388
diff changeset
110 void add(LuanTable doc) throws LuanException {
1387
bc40bc9aab3a start postgres backup
Franklin Schmidt <fschmidt@gmail.com>
parents:
diff changeset
111 try {
1391
94f48cc76de8 add lucene check
Franklin Schmidt <fschmidt@gmail.com>
parents: 1388
diff changeset
112 Long id = (Long)doc.get("id");
1388
2024d23ddd64 add restore_from_postgres
Franklin Schmidt <fschmidt@gmail.com>
parents: 1387
diff changeset
113 String data = luanToString.toString(doc);
1387
bc40bc9aab3a start postgres backup
Franklin Schmidt <fschmidt@gmail.com>
parents:
diff changeset
114 insertStmt.setLong(1,id);
bc40bc9aab3a start postgres backup
Franklin Schmidt <fschmidt@gmail.com>
parents:
diff changeset
115 insertStmt.setString(2,data);
bc40bc9aab3a start postgres backup
Franklin Schmidt <fschmidt@gmail.com>
parents:
diff changeset
116 insertStmt.executeUpdate();
bc40bc9aab3a start postgres backup
Franklin Schmidt <fschmidt@gmail.com>
parents:
diff changeset
117 } catch(SQLException e) {
bc40bc9aab3a start postgres backup
Franklin Schmidt <fschmidt@gmail.com>
parents:
diff changeset
118 logger.error("add failed",e);
bc40bc9aab3a start postgres backup
Franklin Schmidt <fschmidt@gmail.com>
parents:
diff changeset
119 }
bc40bc9aab3a start postgres backup
Franklin Schmidt <fschmidt@gmail.com>
parents:
diff changeset
120 }
bc40bc9aab3a start postgres backup
Franklin Schmidt <fschmidt@gmail.com>
parents:
diff changeset
121
1391
94f48cc76de8 add lucene check
Franklin Schmidt <fschmidt@gmail.com>
parents: 1388
diff changeset
122 void update(LuanTable doc) throws LuanException {
1387
bc40bc9aab3a start postgres backup
Franklin Schmidt <fschmidt@gmail.com>
parents:
diff changeset
123 try {
1391
94f48cc76de8 add lucene check
Franklin Schmidt <fschmidt@gmail.com>
parents: 1388
diff changeset
124 Long id = (Long)doc.get("id");
1388
2024d23ddd64 add restore_from_postgres
Franklin Schmidt <fschmidt@gmail.com>
parents: 1387
diff changeset
125 String data = luanToString.toString(doc);
1387
bc40bc9aab3a start postgres backup
Franklin Schmidt <fschmidt@gmail.com>
parents:
diff changeset
126 updateStmt.setString(1,data);
bc40bc9aab3a start postgres backup
Franklin Schmidt <fschmidt@gmail.com>
parents:
diff changeset
127 updateStmt.setLong(2,id);
bc40bc9aab3a start postgres backup
Franklin Schmidt <fschmidt@gmail.com>
parents:
diff changeset
128 int n = updateStmt.executeUpdate();
bc40bc9aab3a start postgres backup
Franklin Schmidt <fschmidt@gmail.com>
parents:
diff changeset
129 if( n==0 ) {
bc40bc9aab3a start postgres backup
Franklin Schmidt <fschmidt@gmail.com>
parents:
diff changeset
130 logger.error("update not found for id="+id+", trying add");
1391
94f48cc76de8 add lucene check
Franklin Schmidt <fschmidt@gmail.com>
parents: 1388
diff changeset
131 add(doc);
1387
bc40bc9aab3a start postgres backup
Franklin Schmidt <fschmidt@gmail.com>
parents:
diff changeset
132 } else if( n!=1 )
bc40bc9aab3a start postgres backup
Franklin Schmidt <fschmidt@gmail.com>
parents:
diff changeset
133 throw new RuntimeException();
bc40bc9aab3a start postgres backup
Franklin Schmidt <fschmidt@gmail.com>
parents:
diff changeset
134 } catch(SQLException e) {
bc40bc9aab3a start postgres backup
Franklin Schmidt <fschmidt@gmail.com>
parents:
diff changeset
135 logger.error("update failed",e);
bc40bc9aab3a start postgres backup
Franklin Schmidt <fschmidt@gmail.com>
parents:
diff changeset
136 }
bc40bc9aab3a start postgres backup
Franklin Schmidt <fschmidt@gmail.com>
parents:
diff changeset
137 }
bc40bc9aab3a start postgres backup
Franklin Schmidt <fschmidt@gmail.com>
parents:
diff changeset
138
bc40bc9aab3a start postgres backup
Franklin Schmidt <fschmidt@gmail.com>
parents:
diff changeset
139 void deleteAll() {
bc40bc9aab3a start postgres backup
Franklin Schmidt <fschmidt@gmail.com>
parents:
diff changeset
140 try {
bc40bc9aab3a start postgres backup
Franklin Schmidt <fschmidt@gmail.com>
parents:
diff changeset
141 Statement stmt = con.createStatement();
bc40bc9aab3a start postgres backup
Franklin Schmidt <fschmidt@gmail.com>
parents:
diff changeset
142 stmt.executeUpdate("delete from lucene");
bc40bc9aab3a start postgres backup
Franklin Schmidt <fschmidt@gmail.com>
parents:
diff changeset
143 stmt.close();
bc40bc9aab3a start postgres backup
Franklin Schmidt <fschmidt@gmail.com>
parents:
diff changeset
144 } catch(SQLException e) {
bc40bc9aab3a start postgres backup
Franklin Schmidt <fschmidt@gmail.com>
parents:
diff changeset
145 logger.error("update failed",e);
bc40bc9aab3a start postgres backup
Franklin Schmidt <fschmidt@gmail.com>
parents:
diff changeset
146 }
bc40bc9aab3a start postgres backup
Franklin Schmidt <fschmidt@gmail.com>
parents:
diff changeset
147 }
bc40bc9aab3a start postgres backup
Franklin Schmidt <fschmidt@gmail.com>
parents:
diff changeset
148
bc40bc9aab3a start postgres backup
Franklin Schmidt <fschmidt@gmail.com>
parents:
diff changeset
149 void delete(long id) {
bc40bc9aab3a start postgres backup
Franklin Schmidt <fschmidt@gmail.com>
parents:
diff changeset
150 try {
bc40bc9aab3a start postgres backup
Franklin Schmidt <fschmidt@gmail.com>
parents:
diff changeset
151 deleteStmt.setLong(1,id);
bc40bc9aab3a start postgres backup
Franklin Schmidt <fschmidt@gmail.com>
parents:
diff changeset
152 int n = deleteStmt.executeUpdate();
bc40bc9aab3a start postgres backup
Franklin Schmidt <fschmidt@gmail.com>
parents:
diff changeset
153 if( n==0 ) {
bc40bc9aab3a start postgres backup
Franklin Schmidt <fschmidt@gmail.com>
parents:
diff changeset
154 logger.error("delete not found for id="+id);
bc40bc9aab3a start postgres backup
Franklin Schmidt <fschmidt@gmail.com>
parents:
diff changeset
155 }
bc40bc9aab3a start postgres backup
Franklin Schmidt <fschmidt@gmail.com>
parents:
diff changeset
156 } catch(SQLException e) {
bc40bc9aab3a start postgres backup
Franklin Schmidt <fschmidt@gmail.com>
parents:
diff changeset
157 logger.error("update failed",e);
bc40bc9aab3a start postgres backup
Franklin Schmidt <fschmidt@gmail.com>
parents:
diff changeset
158 }
bc40bc9aab3a start postgres backup
Franklin Schmidt <fschmidt@gmail.com>
parents:
diff changeset
159 }
bc40bc9aab3a start postgres backup
Franklin Schmidt <fschmidt@gmail.com>
parents:
diff changeset
160
bc40bc9aab3a start postgres backup
Franklin Schmidt <fschmidt@gmail.com>
parents:
diff changeset
161 void begin() {
bc40bc9aab3a start postgres backup
Franklin Schmidt <fschmidt@gmail.com>
parents:
diff changeset
162 try {
bc40bc9aab3a start postgres backup
Franklin Schmidt <fschmidt@gmail.com>
parents:
diff changeset
163 if( trans++ == 0 )
bc40bc9aab3a start postgres backup
Franklin Schmidt <fschmidt@gmail.com>
parents:
diff changeset
164 con.setAutoCommit(false);
bc40bc9aab3a start postgres backup
Franklin Schmidt <fschmidt@gmail.com>
parents:
diff changeset
165 } catch(SQLException e) {
bc40bc9aab3a start postgres backup
Franklin Schmidt <fschmidt@gmail.com>
parents:
diff changeset
166 logger.error("begin failed",e);
bc40bc9aab3a start postgres backup
Franklin Schmidt <fschmidt@gmail.com>
parents:
diff changeset
167 }
bc40bc9aab3a start postgres backup
Franklin Schmidt <fschmidt@gmail.com>
parents:
diff changeset
168 }
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 void commit() {
bc40bc9aab3a start postgres backup
Franklin Schmidt <fschmidt@gmail.com>
parents:
diff changeset
171 try {
bc40bc9aab3a start postgres backup
Franklin Schmidt <fschmidt@gmail.com>
parents:
diff changeset
172 if( trans <= 0 ) {
bc40bc9aab3a start postgres backup
Franklin Schmidt <fschmidt@gmail.com>
parents:
diff changeset
173 logger.error("commit not in transaction");
bc40bc9aab3a start postgres backup
Franklin Schmidt <fschmidt@gmail.com>
parents:
diff changeset
174 return;
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 if( --trans == 0 )
bc40bc9aab3a start postgres backup
Franklin Schmidt <fschmidt@gmail.com>
parents:
diff changeset
177 con.setAutoCommit(true);
bc40bc9aab3a start postgres backup
Franklin Schmidt <fschmidt@gmail.com>
parents:
diff changeset
178 } catch(SQLException e) {
bc40bc9aab3a start postgres backup
Franklin Schmidt <fschmidt@gmail.com>
parents:
diff changeset
179 logger.error("begin failed",e);
bc40bc9aab3a start postgres backup
Franklin Schmidt <fschmidt@gmail.com>
parents:
diff changeset
180 }
bc40bc9aab3a start postgres backup
Franklin Schmidt <fschmidt@gmail.com>
parents:
diff changeset
181 }
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 void rollback() {
bc40bc9aab3a start postgres backup
Franklin Schmidt <fschmidt@gmail.com>
parents:
diff changeset
184 try {
bc40bc9aab3a start postgres backup
Franklin Schmidt <fschmidt@gmail.com>
parents:
diff changeset
185 if( --trans != 0 ) {
bc40bc9aab3a start postgres backup
Franklin Schmidt <fschmidt@gmail.com>
parents:
diff changeset
186 logger.error("rollback failed trans="+trans);
bc40bc9aab3a start postgres backup
Franklin Schmidt <fschmidt@gmail.com>
parents:
diff changeset
187 return;
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 con.rollback();
bc40bc9aab3a start postgres backup
Franklin Schmidt <fschmidt@gmail.com>
parents:
diff changeset
190 con.setAutoCommit(true);
bc40bc9aab3a start postgres backup
Franklin Schmidt <fschmidt@gmail.com>
parents:
diff changeset
191 } catch(SQLException e) {
bc40bc9aab3a start postgres backup
Franklin Schmidt <fschmidt@gmail.com>
parents:
diff changeset
192 logger.error("begin failed",e);
bc40bc9aab3a start postgres backup
Franklin Schmidt <fschmidt@gmail.com>
parents:
diff changeset
193 }
bc40bc9aab3a start postgres backup
Franklin Schmidt <fschmidt@gmail.com>
parents:
diff changeset
194 }
bc40bc9aab3a start postgres backup
Franklin Schmidt <fschmidt@gmail.com>
parents:
diff changeset
195
1391
94f48cc76de8 add lucene check
Franklin Schmidt <fschmidt@gmail.com>
parents: 1388
diff changeset
196 private static LuanTable newEnv() {
94f48cc76de8 add lucene check
Franklin Schmidt <fschmidt@gmail.com>
parents: 1388
diff changeset
197 LuanTable env = new LuanTable(new Luan());
94f48cc76de8 add lucene check
Franklin Schmidt <fschmidt@gmail.com>
parents: 1388
diff changeset
198 LuanToString.addNumberTypes(env);
94f48cc76de8 add lucene check
Franklin Schmidt <fschmidt@gmail.com>
parents: 1388
diff changeset
199 return env;
94f48cc76de8 add lucene check
Franklin Schmidt <fschmidt@gmail.com>
parents: 1388
diff changeset
200 }
1388
2024d23ddd64 add restore_from_postgres
Franklin Schmidt <fschmidt@gmail.com>
parents: 1387
diff changeset
201
1391
94f48cc76de8 add lucene check
Franklin Schmidt <fschmidt@gmail.com>
parents: 1388
diff changeset
202 private static Object eval(String s,LuanTable env) throws LuanException {
1388
2024d23ddd64 add restore_from_postgres
Franklin Schmidt <fschmidt@gmail.com>
parents: 1387
diff changeset
203 LuanFunction fn = env.luan().load( "return "+s, "PostgresBackup", env );
2024d23ddd64 add restore_from_postgres
Franklin Schmidt <fschmidt@gmail.com>
parents: 1387
diff changeset
204 return fn.call();
2024d23ddd64 add restore_from_postgres
Franklin Schmidt <fschmidt@gmail.com>
parents: 1387
diff changeset
205 }
2024d23ddd64 add restore_from_postgres
Franklin Schmidt <fschmidt@gmail.com>
parents: 1387
diff changeset
206
2024d23ddd64 add restore_from_postgres
Franklin Schmidt <fschmidt@gmail.com>
parents: 1387
diff changeset
207 void restoreLucene(LuceneIndex li)
2024d23ddd64 add restore_from_postgres
Franklin Schmidt <fschmidt@gmail.com>
parents: 1387
diff changeset
208 throws LuanException, IOException
2024d23ddd64 add restore_from_postgres
Franklin Schmidt <fschmidt@gmail.com>
parents: 1387
diff changeset
209 {
2024d23ddd64 add restore_from_postgres
Franklin Schmidt <fschmidt@gmail.com>
parents: 1387
diff changeset
210 try {
1391
94f48cc76de8 add lucene check
Franklin Schmidt <fschmidt@gmail.com>
parents: 1388
diff changeset
211 LuanTable env = newEnv();
1388
2024d23ddd64 add restore_from_postgres
Franklin Schmidt <fschmidt@gmail.com>
parents: 1387
diff changeset
212 Statement stmt = con.createStatement();
2024d23ddd64 add restore_from_postgres
Franklin Schmidt <fschmidt@gmail.com>
parents: 1387
diff changeset
213 ResultSet rs = stmt.executeQuery("select data from lucene");
2024d23ddd64 add restore_from_postgres
Franklin Schmidt <fschmidt@gmail.com>
parents: 1387
diff changeset
214 while( rs.next() ) {
2024d23ddd64 add restore_from_postgres
Franklin Schmidt <fschmidt@gmail.com>
parents: 1387
diff changeset
215 String data = rs.getString("data");
1391
94f48cc76de8 add lucene check
Franklin Schmidt <fschmidt@gmail.com>
parents: 1388
diff changeset
216 LuanTable doc = (LuanTable)eval(data,env);
1388
2024d23ddd64 add restore_from_postgres
Franklin Schmidt <fschmidt@gmail.com>
parents: 1387
diff changeset
217 li.restore(doc);
2024d23ddd64 add restore_from_postgres
Franklin Schmidt <fschmidt@gmail.com>
parents: 1387
diff changeset
218 }
2024d23ddd64 add restore_from_postgres
Franklin Schmidt <fschmidt@gmail.com>
parents: 1387
diff changeset
219 stmt.close();
2024d23ddd64 add restore_from_postgres
Franklin Schmidt <fschmidt@gmail.com>
parents: 1387
diff changeset
220 } catch(SQLException e) {
2024d23ddd64 add restore_from_postgres
Franklin Schmidt <fschmidt@gmail.com>
parents: 1387
diff changeset
221 logger.error("restoreLucene failed",e);
2024d23ddd64 add restore_from_postgres
Franklin Schmidt <fschmidt@gmail.com>
parents: 1387
diff changeset
222 throw new RuntimeException(e);
2024d23ddd64 add restore_from_postgres
Franklin Schmidt <fschmidt@gmail.com>
parents: 1387
diff changeset
223 }
2024d23ddd64 add restore_from_postgres
Franklin Schmidt <fschmidt@gmail.com>
parents: 1387
diff changeset
224 }
2024d23ddd64 add restore_from_postgres
Franklin Schmidt <fschmidt@gmail.com>
parents: 1387
diff changeset
225
2024d23ddd64 add restore_from_postgres
Franklin Schmidt <fschmidt@gmail.com>
parents: 1387
diff changeset
226 long maxId()
2024d23ddd64 add restore_from_postgres
Franklin Schmidt <fschmidt@gmail.com>
parents: 1387
diff changeset
227 throws LuanException, IOException
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 try {
2024d23ddd64 add restore_from_postgres
Franklin Schmidt <fschmidt@gmail.com>
parents: 1387
diff changeset
230 Statement stmt = con.createStatement();
2024d23ddd64 add restore_from_postgres
Franklin Schmidt <fschmidt@gmail.com>
parents: 1387
diff changeset
231 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
232 rs.next();
2024d23ddd64 add restore_from_postgres
Franklin Schmidt <fschmidt@gmail.com>
parents: 1387
diff changeset
233 long m = rs.getLong("m");
2024d23ddd64 add restore_from_postgres
Franklin Schmidt <fschmidt@gmail.com>
parents: 1387
diff changeset
234 stmt.close();
2024d23ddd64 add restore_from_postgres
Franklin Schmidt <fschmidt@gmail.com>
parents: 1387
diff changeset
235 return m;
2024d23ddd64 add restore_from_postgres
Franklin Schmidt <fschmidt@gmail.com>
parents: 1387
diff changeset
236 } catch(SQLException e) {
2024d23ddd64 add restore_from_postgres
Franklin Schmidt <fschmidt@gmail.com>
parents: 1387
diff changeset
237 logger.error("maxId failed",e);
2024d23ddd64 add restore_from_postgres
Franklin Schmidt <fschmidt@gmail.com>
parents: 1387
diff changeset
238 throw new RuntimeException(e);
2024d23ddd64 add restore_from_postgres
Franklin Schmidt <fschmidt@gmail.com>
parents: 1387
diff changeset
239 }
2024d23ddd64 add restore_from_postgres
Franklin Schmidt <fschmidt@gmail.com>
parents: 1387
diff changeset
240 }
2024d23ddd64 add restore_from_postgres
Franklin Schmidt <fschmidt@gmail.com>
parents: 1387
diff changeset
241
1391
94f48cc76de8 add lucene check
Franklin Schmidt <fschmidt@gmail.com>
parents: 1388
diff changeset
242 final class Checker {
94f48cc76de8 add lucene check
Franklin Schmidt <fschmidt@gmail.com>
parents: 1388
diff changeset
243 private final Connection con;
94f48cc76de8 add lucene check
Franklin Schmidt <fschmidt@gmail.com>
parents: 1388
diff changeset
244 private final PreparedStatement pstmt;
94f48cc76de8 add lucene check
Franklin Schmidt <fschmidt@gmail.com>
parents: 1388
diff changeset
245 private final LuanTable env = newEnv();
94f48cc76de8 add lucene check
Franklin Schmidt <fschmidt@gmail.com>
parents: 1388
diff changeset
246
94f48cc76de8 add lucene check
Franklin Schmidt <fschmidt@gmail.com>
parents: 1388
diff changeset
247 Checker() throws SQLException {
94f48cc76de8 add lucene check
Franklin Schmidt <fschmidt@gmail.com>
parents: 1388
diff changeset
248 con = newConnection();
94f48cc76de8 add lucene check
Franklin Schmidt <fschmidt@gmail.com>
parents: 1388
diff changeset
249 con.setAutoCommit(false);
94f48cc76de8 add lucene check
Franklin Schmidt <fschmidt@gmail.com>
parents: 1388
diff changeset
250 pstmt = con.prepareStatement(
94f48cc76de8 add lucene check
Franklin Schmidt <fschmidt@gmail.com>
parents: 1388
diff changeset
251 "select data from lucene where id=?"
94f48cc76de8 add lucene check
Franklin Schmidt <fschmidt@gmail.com>
parents: 1388
diff changeset
252 );
94f48cc76de8 add lucene check
Franklin Schmidt <fschmidt@gmail.com>
parents: 1388
diff changeset
253 }
94f48cc76de8 add lucene check
Franklin Schmidt <fschmidt@gmail.com>
parents: 1388
diff changeset
254
94f48cc76de8 add lucene check
Franklin Schmidt <fschmidt@gmail.com>
parents: 1388
diff changeset
255 void close() throws SQLException {
94f48cc76de8 add lucene check
Franklin Schmidt <fschmidt@gmail.com>
parents: 1388
diff changeset
256 pstmt.close();
94f48cc76de8 add lucene check
Franklin Schmidt <fschmidt@gmail.com>
parents: 1388
diff changeset
257 con.close();
94f48cc76de8 add lucene check
Franklin Schmidt <fschmidt@gmail.com>
parents: 1388
diff changeset
258 }
94f48cc76de8 add lucene check
Franklin Schmidt <fschmidt@gmail.com>
parents: 1388
diff changeset
259
94f48cc76de8 add lucene check
Franklin Schmidt <fschmidt@gmail.com>
parents: 1388
diff changeset
260 List<Long> getIds() throws SQLException {
94f48cc76de8 add lucene check
Franklin Schmidt <fschmidt@gmail.com>
parents: 1388
diff changeset
261 List<Long> ids = new ArrayList<Long>();
94f48cc76de8 add lucene check
Franklin Schmidt <fschmidt@gmail.com>
parents: 1388
diff changeset
262 Statement stmt = con.createStatement();
94f48cc76de8 add lucene check
Franklin Schmidt <fschmidt@gmail.com>
parents: 1388
diff changeset
263 ResultSet rs = stmt.executeQuery("select id from lucene order by id");
94f48cc76de8 add lucene check
Franklin Schmidt <fschmidt@gmail.com>
parents: 1388
diff changeset
264 while( rs.next() ) {
94f48cc76de8 add lucene check
Franklin Schmidt <fschmidt@gmail.com>
parents: 1388
diff changeset
265 long id = rs.getLong("id");
94f48cc76de8 add lucene check
Franklin Schmidt <fschmidt@gmail.com>
parents: 1388
diff changeset
266 ids.add(id);
94f48cc76de8 add lucene check
Franklin Schmidt <fschmidt@gmail.com>
parents: 1388
diff changeset
267 }
94f48cc76de8 add lucene check
Franklin Schmidt <fschmidt@gmail.com>
parents: 1388
diff changeset
268 stmt.close();
94f48cc76de8 add lucene check
Franklin Schmidt <fschmidt@gmail.com>
parents: 1388
diff changeset
269 return ids;
94f48cc76de8 add lucene check
Franklin Schmidt <fschmidt@gmail.com>
parents: 1388
diff changeset
270 }
94f48cc76de8 add lucene check
Franklin Schmidt <fschmidt@gmail.com>
parents: 1388
diff changeset
271
94f48cc76de8 add lucene check
Franklin Schmidt <fschmidt@gmail.com>
parents: 1388
diff changeset
272 LuanTable getDoc(long id) throws SQLException, LuanException {
94f48cc76de8 add lucene check
Franklin Schmidt <fschmidt@gmail.com>
parents: 1388
diff changeset
273 pstmt.setLong(1,id);
94f48cc76de8 add lucene check
Franklin Schmidt <fschmidt@gmail.com>
parents: 1388
diff changeset
274 ResultSet rs = pstmt.executeQuery();
94f48cc76de8 add lucene check
Franklin Schmidt <fschmidt@gmail.com>
parents: 1388
diff changeset
275 rs.next();
94f48cc76de8 add lucene check
Franklin Schmidt <fschmidt@gmail.com>
parents: 1388
diff changeset
276 String data = rs.getString("data");
94f48cc76de8 add lucene check
Franklin Schmidt <fschmidt@gmail.com>
parents: 1388
diff changeset
277 LuanTable doc = (LuanTable)eval(data,env);
94f48cc76de8 add lucene check
Franklin Schmidt <fschmidt@gmail.com>
parents: 1388
diff changeset
278 return doc;
94f48cc76de8 add lucene check
Franklin Schmidt <fschmidt@gmail.com>
parents: 1388
diff changeset
279 }
94f48cc76de8 add lucene check
Franklin Schmidt <fschmidt@gmail.com>
parents: 1388
diff changeset
280 }
94f48cc76de8 add lucene check
Franklin Schmidt <fschmidt@gmail.com>
parents: 1388
diff changeset
281
94f48cc76de8 add lucene check
Franklin Schmidt <fschmidt@gmail.com>
parents: 1388
diff changeset
282 Checker newChecker() throws SQLException {
94f48cc76de8 add lucene check
Franklin Schmidt <fschmidt@gmail.com>
parents: 1388
diff changeset
283 return new Checker();
94f48cc76de8 add lucene check
Franklin Schmidt <fschmidt@gmail.com>
parents: 1388
diff changeset
284 }
94f48cc76de8 add lucene check
Franklin Schmidt <fschmidt@gmail.com>
parents: 1388
diff changeset
285
1387
bc40bc9aab3a start postgres backup
Franklin Schmidt <fschmidt@gmail.com>
parents:
diff changeset
286 }