/[rserv]/bin/RservTest
This is repository of my old source code which isn't updated any more. Go to git.rot13.org for current projects!
ViewVC logotype

Contents of /bin/RservTest

Parent Directory Parent Directory | Revision Log Revision Log


Revision 1.3 - (show annotations)
Fri Aug 15 23:00:27 2003 UTC (20 years, 8 months ago) by dpavlin
Branch: MAIN
CVS Tags: before_onlytables, before_multmaster, r_0_3, HEAD
Changes since 1.2: +1 -1 lines
Snapshot fixes

1 #!/bin/sh
2 # pgserv.tcl
3 # (c) 2000 Thomas Lockhart, PostgreSQL Inc.
4 # The next line will reinvoke as wish *DO NOT REMOVE OR ALTER* \
5 exec wish "$0" "$@"
6
7 puts "Starting Replication Server demo"
8
9 set RSERV_BIN "/usr/lib/postgresql/bin"
10
11 # Bring in the interfaces we will be using...
12
13 #package require Pgtcl
14 load libpgtcl[info sharedlibextension]
15
16 # elog
17 # Information or error log and exit handler
18 proc {elog} {level message} {
19 global show
20 switch -exact -- $level {
21 DEBUG {
22 if {$show(debug)} {
23 puts "DEBUG $message"
24 }
25 }
26 ERROR {
27 if {$show(error)} {
28 puts "ERROR $message"
29 }
30 FATAL {
31 if ($show(error)} {
32 puts "FATAL $message"
33 }
34 exit 1
35 }
36 default {
37 puts "INFO $message"
38 }
39 }
40 }
41
42 proc {ShowUsage} {} {
43 global argv0
44 puts "Usage: $argv0 --host name --user name --password string masterdb slavedb"
45 puts "\t--masterhost name --masteruser name --masterpassword string"
46 puts "\t--slavehost name --slaveuser name --slavepassword string"
47 }
48
49 # Initial values for database access
50 # master, slave variables are tied to text input boxes,
51 # and will be updated on user input
52 proc {SetDbInfo} {db name {host ""} {user ""} {pass ""}} {
53 global dbinfo
54 set dbinfo($db,name) $name
55 set dbinfo($db,host) $host
56 set dbinfo($db,user) $user
57 set dbinfo($db,pass) $pass
58 }
59
60 # ConnInfo
61 # Connection information for pgtcl library
62 proc {ConnInfo} {{db master}} {
63 global dbinfo
64 set ci "dbname=$dbinfo($db,name)"
65 if {[string length $dbinfo($db,host)] > 0} {
66 set ci "$ci host=$dbinfo($db,host)"
67 }
68 if {[string length $dbinfo($db,user)] > 0} {
69 set ci "$ci user=$dbinfo($db,user)"
70 }
71 if {[string length $dbinfo($db,pass)] > 0} {
72 set ci "$ci password=$dbinfo($db,pass)"
73 }
74 # puts "Construct conninfo $ci"
75 return $ci
76 }
77
78 # ConnInfoParams
79 # Connection information for (perl) callable programs
80 proc {ConnInfoParams} {{db master}} {
81 global dbinfo
82 set ci ""
83 if {[string length $dbinfo($db,host)] > 0} {
84 set ci "$ci --host=$dbinfo($db,host)"
85 }
86 if {[string length $dbinfo($db,user)] > 0} {
87 set ci "$ci --user=$dbinfo($db,user)"
88 }
89 if {[string length $dbinfo($db,pass)] > 0} {
90 set ci "$ci --password=$dbinfo($db,pass)"
91 }
92 # puts "Construct conninfo $ci"
93 return $ci
94 }
95
96 # ConnInfoMaster
97 # Connection information for (perl) callable programs
98 proc {ConnInfoMaster} {{db master}} {
99 global dbinfo
100 set ci $dbinfo($db,name)
101 if {[string length $dbinfo($db,host)] > 0} {
102 set ci "$ci --masterhost=$dbinfo($db,host)"
103 }
104 if {[string length $dbinfo($db,user)] > 0} {
105 set ci "$ci --masteruser=$dbinfo($db,user)"
106 }
107 if {[string length $dbinfo($db,pass)] > 0} {
108 set ci "$ci --masterpassword=$dbinfo($db,pass)"
109 }
110 # puts "Construct conninfo $ci"
111 return $ci
112 }
113
114 # ConnInfoSlave
115 # Connection information for (perl) callable programs
116 proc {ConnInfoSlave} {{db slave}} {
117 global dbinfo
118 set ci $dbinfo($db,name)
119 if {[string length $dbinfo($db,host)] > 0} {
120 set ci "$ci --slavehost=$dbinfo($db,host)"
121 }
122 if {[string length $dbinfo($db,user)] > 0} {
123 set ci "$ci --slaveuser=$dbinfo($db,user)"
124 }
125 if {[string length $dbinfo($db,pass)] > 0} {
126 set ci "$ci --slavepassword=$dbinfo($db,pass)"
127 }
128 # puts "Construct conninfo $ci"
129 return $ci
130 }
131
132
133 SetDbInfo master master localhost
134 SetDbInfo slave slave localhost
135 set dbinfo(snapshot,name) ".__Snapshot"
136
137 set update ""
138
139 set show(debug) 1
140 set show(error) 1
141
142 set argi 0
143 while {$argi < $argc} {
144 # puts "argi is $argi; argc is $argc"
145 set arg [lindex $argv $argi]
146 switch -glob -- $arg {
147 -h -
148 --host {
149 incr argi
150 set dbinfo(master,host) [lindex $argv $argi]
151 set dbinfo(slave,host) [lindex $argv $argi]
152 }
153 --masterhost {
154 incr argi
155 set dbinfo(master,host) [lindex $argv $argi]
156 }
157 --slavehost {
158 incr argi
159 set dbinfo(slave,host) [lindex $argv $argi]
160 }
161 -u -
162 --user {
163 incr argi
164 set dbinfo(master,user) [lindex $argv $argi]
165 set dbinfo(slave,user) [lindex $argv $argi]
166 }
167 --masteruser {
168 incr argi
169 set dbinfo(master,user) [lindex $argv $argi]
170 }
171 --slaveuser {
172 incr argi
173 set dbinfo(slave,user) [lindex $argv $argi]
174 }
175 -s -
176 --snapshot {
177 incr argi
178 set dbinfo(snapshot,name) [lindex $argv $argi]
179 }
180 -* {
181 elog ERROR "$argv0: invalid parameter '$arg'"
182 ShowUsage
183 exit 1
184 }
185 default {
186 break
187 }
188 }
189 incr argi
190 }
191
192 if {$argi < $argc} {
193 set dbinfo(master,name) [lindex $argv $argi]
194 incr argi
195 }
196 if {$argi < $argc} {
197 set dbinfo(slave,name) [lindex $argv $argi]
198 incr argi
199 }
200 if {$argi < $argc} {
201 elog "$argv0: too many parameters"
202 ShowUsage
203 exit 1
204 }
205
206 elog DEBUG "User is $dbinfo(master,user) $dbinfo(slave,user)"
207 elog DEBUG "Host is $dbinfo(master,host) $dbinfo(slave,host)"
208
209 #
210 # TK layout
211 #
212
213 wm title . "Async Replication"
214
215 wm geom . 400x400
216
217 proc {CreateResultFrame} {b l w} {
218 pack [frame $b -borderwidth 10] -fill x
219 pack [button $b.run -text $l -command $l -width $w] -side left
220 # pack [entry $b.e -textvariable NewRow] -side left
221 }
222
223 set t .top
224 pack [frame $t -borderwidth 10] -fill x
225 pack [frame $t.h -borderwidth 10] -fill x
226 pack [label $t.h.h -text "PostgreSQL Async Replication Server"]
227
228 set b .b
229 pack [frame $b -borderwidth 10] -fill x
230 pack [frame $b.l -borderwidth 10] -fill x
231 pack [label $b.l.ml -text "Master"] -side left
232 pack [label $b.l.sl -text "Slave"] -side right
233 pack [entry $b.m -textvariable dbinfo(master,name) -width 25] -side left
234 pack [entry $b.s -textvariable dbinfo(slave,name) -width 25] -side right
235
236 set b .u
237 pack [frame $b -borderwidth 10] -fill x
238 pack [button $b.run -text update -command Update -width 10] -side left
239 pack [entry $b.e -textvariable update -width 50] -side left
240
241 set r [CreateResultFrame .r Replicate 10]
242
243 set b .s
244 pack [frame $b -borderwidth 10] -fill x
245 pack [button $b.b -text Show -command Show -width 10] -side left
246 pack [label $b.e -text ""] -side left
247
248 set b .button
249 pack [frame $b -borderwidth 10] -fill x
250
251 pack [button $b.quit -text "Quit" -command Shutdown]
252
253 #
254 # Functions mapped to buttons
255 #
256
257 proc {Update} {} {
258 global dbinfo
259 global update
260
261 elog DEBUG "Opening database [ConnInfo master]..."
262 set res [catch {set db [pg_connect -conninfo "[ConnInfo master]"]} msg]
263 if {$res} {
264 elog ERROR "Database '$dbinfo(master,name)' is not available: $res ($msg)"
265 } else {
266 elog DEBUG "Insert $update into database $dbinfo(master,name)..."
267 set res [pg_exec $db "insert into test select '$update', max(k)+1, max(l)+1 from test"]
268 elog DEBUG [pg_result $res -status]
269 catch {pg_disconnect $db}
270 }
271 }
272
273 proc {Replicate} {} {
274 global dbinfo
275 global RSERV_BIN
276
277 elog DEBUG "Replicating [ConnInfoCmd master]..."
278 exec "$RSERV_BIN/Replicate" --snapshot=$dbinfo(snapshot,name) [ConnInfoParams] [ConnInfoMaster] [ConnInfoSlave]
279 }
280
281 proc {Show} {} {
282 global dbinfo
283 global update
284
285 elog DEBUG "Opening database [ConnInfo slave]..."
286 set res [catch {set db [pg_connect -conninfo "[ConnInfo slave]"]} msg]
287 if {$res} {
288 elog ERROR "DB $dbinfo(slave,name) not available: $res ($msg)"
289 } else {
290 elog DEBUG "Select $update from database $dbinfo(slave,name)..."
291 set res [pg_exec $db "select i from test where i='$update'"]
292 if {[pg_result $res -status] != "PGRES_TUPLES_OK"} {
293 .s.e config -text "n/a"
294 } else {
295 set ntups [pg_result $res -numTuples]
296 if {$ntups <= 0} {
297 .s.e config -text "n/a"
298 } else {
299 for {set i 0} {$i < $ntups} {incr i} {
300 set val [pg_result $res -getTuple $i]
301 .s.e config -text $val
302 }
303 }
304 pg_result $res -clear
305 }
306 catch {pg_disconnect $db}
307 }
308 }
309
310 proc {Shutdown} {} {
311 global dbinfo
312 exit
313 }

  ViewVC Help
Powered by ViewVC 1.1.26