Repost from bugs.

--
Fabien.

---------- Forwarded message ----------
Date: Wed, 25 Jan 2017 18:59:45 +0100 (CET)
From: Fabien COELHO <coe...@cri.ensmp.fr>
To: nuko yokohama <nuko.yokoh...@gmail.com>
Cc: PostgreSQL Bugs List <pgsql-b...@postgresql.org>
Subject: Re: [BUGS] Problem in using pgbench's --connect(-C) and --rate=rate(-R
    rate) options together.


It operates normally when only the -C option or only the -R option is specified.

In the PostgreSQL document, It is not described that "these two options can not be specified at the same time ". Is this a problem of pgbench?

Yes, indeed there is. Thanks for the report. Option -C is seldom used and tested.

The problem is already fixed in head. Looking at git log, it was unclear to guess which change fixed that... After another reading, I got it in one, it has been fixed by Heikki restructuring patch 12788ae49e1933f463bc59a6efe46c4a01701b76 which has no vocation to be backpatched to prior versions...

The bug is that prior to --rate doCustom was always disconnect/reconnect without exiting, but with rate it returns if it has to wait. However threadRun test whether there is a connection before recalling doCustom, so it was never called.

This is exactly the kind of unmanageable state combination that refactoring has cleaned up.

Attached a small patch which fixes the issue, I think, in 9.6.
Fixing it raised another issue wrt to some stats under -C, that I fixed as well.

--
Fabien.
diff --git a/src/bin/pgbench/pgbench.c b/src/bin/pgbench/pgbench.c
index 531671a..1f1b7bf 100644
--- a/src/bin/pgbench/pgbench.c
+++ b/src/bin/pgbench/pgbench.c
@@ -1967,7 +1967,6 @@ top:
 		st->listen = false;
 		st->sleeping = false;
 		st->throttling = false;
-		st->is_throttled = false;
 		memset(st->prepared, 0, sizeof(st->prepared));
 	}
 
@@ -4345,6 +4344,12 @@ threadRun(void *arg)
 						remains--;		/* I've aborted */
 				}
 			}
+			else if (is_connect && st->sleeping)
+			{
+				/* it is sleeping for throttling, maybe it is done, let us try */
+				if (!doCustom(thread, st, &aggs))
+					remains--;
+			}
 
 			if (st->ecnt > prev_ecnt && commands[st->state]->type == META_COMMAND)
 			{
-- 
Sent via pgsql-hackers mailing list (pgsql-hackers@postgresql.org)
To make changes to your subscription:
http://www.postgresql.org/mailpref/pgsql-hackers

Reply via email to