Re: [HACKERS] Parallel regress tests (was Re: FOREIGN KEY andshift/reduce) - Mailing list pgsql-hackers
From | wieck@debis.com (Jan Wieck) |
---|---|
Subject | Re: [HACKERS] Parallel regress tests (was Re: FOREIGN KEY andshift/reduce) |
Date | |
Msg-id | m11vn1c-0003kGC@orion.SAPserv.Hamburg.dsh.de Whole thread Raw |
In response to | Re: [HACKERS] Parallel regress tests (was Re: FOREIGN KEY andshift/reduce) (Tom Lane <tgl@sss.pgh.pa.us>) |
Responses |
Re: [HACKERS] Parallel regress tests (was Re: FOREIGN KEY andshift/reduce)
Re: [HACKERS] Parallel regress tests (was Re: FOREIGN KEY andshift/reduce) |
List | pgsql-hackers |
Tom Lane wrote: > I like the tcl/expect idea a lot. We'd have to upgrade our tcl > interface to support asynchronous queries (ie, send query then do other > stuff until answer arrives); AFAIR it can't handle that now. But that'd > be well worth doing anyway... O.K. The multi session test tool, written in Tcl, is ready. Where should it go and how should it be named? I think it wouldn't be a bad idea to have it in a place where it can be used from any location, instead of putting it into the regression dir. Maybe install it into bin? Just to show a little: # ---- # Multi session test suite # ---- # ---- # Session 1 starts a transaction and deletes all rows from t1 # ---- / connect A begin; select * from t1; delete from t1; / wait A # ---- # Session 2 tries to select all from t1 for update - should block # ---- / connect B begin; select * from t1 for update of t1; commit; / wait B # ---- # Now session 1 rolls back ... # ---- / use A rollback; / wait A # ---- # ... what must release session 2 # ---- / wait B / close A / close B The above input produces this output: # ---- # Multi session test suite # ---- # ---- # Session 1 starts a transaction and deletes all rows from t1 # ---- (A) QUERY: begin; (A) QUERY: select * from t1; (A) a1|b1|c1 (A) --+--+----- (A) 2| 2|key 2 (A) 3| 3|key 3 (A) 8| 8|key 7 (A) (3 rows) (A) (A) QUERY: delete from t1; # ---- # Session 2 tries to select all from t1 for update - should block # ---- (B) QUERY: begin; (B) QUERY: select * from t1 for update of t1; *** Session of connection B seems locked # ---- # Now session 1 rolls back ... # ---- (A) QUERY: rollback; # ---- # ... what must release session 2 # ---- (B) a1|b1|c1 (B) --+--+----- (B) 2| 2|key 2 (B) 3| 3|key 3 (B) 8| 8|key 7 (B) (3 rows) (B) (B) QUERY: commit; The default time for the "wait" command is 5 seconds, but can be specified explicitly as "wait A 10". Session names can of course be longer than one character. The script stopped at session B's SELECT ... FOR UPDATE, and correctly continued with the *** message 5 seconds later. As you might have noticed, it doesn't matter that the COMMIT of session 2 was placed directly after the SELECT. If the session hangs, all queries are internally buffered. Jan -- #======================================================================# # It's easier to get forgiveness for being wrong than for being right. # # Let's break this rule - forgive me. # #========================================= wieck@debis.com (Jan Wieck) #
pgsql-hackers by date: