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:

Previous
From: Ed Loehr
Date:
Subject: Re: [HACKERS] Raising funds for PostgreSQL
Next
From: Gunther Schadow
Date:
Subject: Advanced projects ... anyone interested?