mirror of https://github.com/citusdata/citus.git
Merge pull request #2360 from citusdata/dist_stat_statements
Views to provide some insight about the distributed transactions on Citus MXpull/2377/head
commit
8e608a0e6c
1
Makefile
1
Makefile
|
@ -74,6 +74,7 @@ OBJS = src/backend/distributed/shared_library_init.o \
|
||||||
src/backend/distributed/test/relation_access_tracking.o \
|
src/backend/distributed/test/relation_access_tracking.o \
|
||||||
src/backend/distributed/test/sequential_execution.o \
|
src/backend/distributed/test/sequential_execution.o \
|
||||||
src/backend/distributed/transaction/backend_data.o \
|
src/backend/distributed/transaction/backend_data.o \
|
||||||
|
src/backend/distributed/transaction/citus_dist_stat_activity.o \
|
||||||
src/backend/distributed/transaction/distributed_deadlock_detection.o \
|
src/backend/distributed/transaction/distributed_deadlock_detection.o \
|
||||||
src/backend/distributed/transaction/lock_graph.o \
|
src/backend/distributed/transaction/lock_graph.o \
|
||||||
src/backend/distributed/transaction/multi_shard_transaction.o \
|
src/backend/distributed/transaction/multi_shard_transaction.o \
|
||||||
|
|
|
@ -1,6 +1,6 @@
|
||||||
# Citus extension
|
# Citus extension
|
||||||
comment = 'Citus distributed database'
|
comment = 'Citus distributed database'
|
||||||
default_version = '8.0-4'
|
default_version = '8.0-5'
|
||||||
module_pathname = '$libdir/citus'
|
module_pathname = '$libdir/citus'
|
||||||
relocatable = false
|
relocatable = false
|
||||||
schema = pg_catalog
|
schema = pg_catalog
|
||||||
|
|
|
@ -17,7 +17,7 @@ EXTVERSIONS = 5.0 5.0-1 5.0-2 \
|
||||||
7.3-1 7.3-2 7.3-3 \
|
7.3-1 7.3-2 7.3-3 \
|
||||||
7.4-1 7.4-2 7.4-3 \
|
7.4-1 7.4-2 7.4-3 \
|
||||||
7.5-1 7.5-2 7.5-3 7.5-4 7.5-5 7.5-6 7.5-7 \
|
7.5-1 7.5-2 7.5-3 7.5-4 7.5-5 7.5-6 7.5-7 \
|
||||||
8.0-1 8.0-2 8.0-3 8.0-4
|
8.0-1 8.0-2 8.0-3 8.0-4 8.0-5
|
||||||
|
|
||||||
# All citus--*.sql files in the source directory
|
# All citus--*.sql files in the source directory
|
||||||
DATA = $(patsubst $(citus_abs_srcdir)/%.sql,%.sql,$(wildcard $(citus_abs_srcdir)/$(EXTENSION)--*--*.sql))
|
DATA = $(patsubst $(citus_abs_srcdir)/%.sql,%.sql,$(wildcard $(citus_abs_srcdir)/$(EXTENSION)--*--*.sql))
|
||||||
|
@ -223,6 +223,8 @@ $(EXTENSION)--8.0-3.sql: $(EXTENSION)--8.0-2.sql $(EXTENSION)--8.0-2--8.0-3.sql
|
||||||
cat $^ > $@
|
cat $^ > $@
|
||||||
$(EXTENSION)--8.0-4.sql: $(EXTENSION)--8.0-3.sql $(EXTENSION)--8.0-3--8.0-4.sql
|
$(EXTENSION)--8.0-4.sql: $(EXTENSION)--8.0-3.sql $(EXTENSION)--8.0-3--8.0-4.sql
|
||||||
cat $^ > $@
|
cat $^ > $@
|
||||||
|
$(EXTENSION)--8.0-5.sql: $(EXTENSION)--8.0-4.sql $(EXTENSION)--8.0-4--8.0-5.sql
|
||||||
|
cat $^ > $@
|
||||||
|
|
||||||
NO_PGXS = 1
|
NO_PGXS = 1
|
||||||
|
|
||||||
|
|
|
@ -0,0 +1,68 @@
|
||||||
|
/* citus--8.0-4--8.0-5.sql */
|
||||||
|
SET search_path = 'pg_catalog';
|
||||||
|
|
||||||
|
|
||||||
|
DROP FUNCTION IF EXISTS get_all_active_transactions();
|
||||||
|
|
||||||
|
|
||||||
|
CREATE OR REPLACE FUNCTION get_all_active_transactions(OUT datid oid, OUT process_id int, OUT initiator_node_identifier int4, OUT worker_query BOOL,
|
||||||
|
OUT transaction_number int8, OUT transaction_stamp timestamptz)
|
||||||
|
RETURNS SETOF RECORD
|
||||||
|
LANGUAGE C STRICT AS 'MODULE_PATHNAME',
|
||||||
|
$$get_all_active_transactions$$;
|
||||||
|
|
||||||
|
COMMENT ON FUNCTION get_all_active_transactions(OUT datid oid, OUT datname text, OUT process_id int, OUT initiator_node_identifier int4, OUT worker_query BOOL,
|
||||||
|
OUT transaction_number int8, OUT transaction_stamp timestamptz)
|
||||||
|
IS 'returns distributed transaction ids of active distributed transactions';
|
||||||
|
|
||||||
|
|
||||||
|
CREATE OR REPLACE FUNCTION citus_dist_stat_activity(OUT query_hostname text, OUT query_hostport int, OUT master_query_host_name text, OUT master_query_host_port int,
|
||||||
|
OUT transaction_number int8, OUT transaction_stamp timestamptz, OUT datid oid, OUT datname name,
|
||||||
|
OUT pid int, OUT usesysid oid, OUT usename name, OUT application_name text, OUT client_addr INET,
|
||||||
|
OUT client_hostname TEXT, OUT client_port int, OUT backend_start timestamptz, OUT xact_start timestamptz,
|
||||||
|
OUT query_start timestamptz, OUT state_change timestamptz, OUT wait_event_type text, OUT wait_event text,
|
||||||
|
OUT state text, OUT backend_xid xid, OUT backend_xmin xid, OUT query text, OUT backend_type text)
|
||||||
|
RETURNS SETOF RECORD
|
||||||
|
LANGUAGE C STRICT AS 'MODULE_PATHNAME',
|
||||||
|
$$citus_dist_stat_activity$$;
|
||||||
|
|
||||||
|
COMMENT ON FUNCTION citus_dist_stat_activity(OUT query_hostname text, OUT query_hostport int, OUT master_query_host_name text, OUT master_query_host_port int,
|
||||||
|
OUT transaction_number int8, OUT transaction_stamp timestamptz, OUT datid oid, OUT datname name,
|
||||||
|
OUT pid int, OUT usesysid oid, OUT usename name, OUT application_name text, OUT client_addr INET,
|
||||||
|
OUT client_hostname TEXT, OUT client_port int, OUT backend_start timestamptz, OUT xact_start timestamptz,
|
||||||
|
OUT query_start timestamptz, OUT state_change timestamptz, OUT wait_event_type text, OUT wait_event text,
|
||||||
|
OUT state text, OUT backend_xid xid, OUT backend_xmin xid, OUT query text, OUT backend_type text)
|
||||||
|
IS 'returns distributed transaction activity on distributed tables';
|
||||||
|
|
||||||
|
CREATE VIEW citus.citus_dist_stat_activity AS
|
||||||
|
SELECT * FROM pg_catalog.citus_dist_stat_activity();
|
||||||
|
ALTER VIEW citus.citus_dist_stat_activity SET SCHEMA pg_catalog;
|
||||||
|
GRANT SELECT ON pg_catalog.citus_dist_stat_activity TO PUBLIC;
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
CREATE OR REPLACE FUNCTION citus_worker_stat_activity(OUT query_hostname text, OUT query_hostport int, OUT master_query_host_name text, OUT master_query_host_port int,
|
||||||
|
OUT transaction_number int8, OUT transaction_stamp timestamptz, OUT datid oid, OUT datname name,
|
||||||
|
OUT pid int, OUT usesysid oid, OUT usename name, OUT application_name text, OUT client_addr INET,
|
||||||
|
OUT client_hostname TEXT, OUT client_port int, OUT backend_start timestamptz, OUT xact_start timestamptz,
|
||||||
|
OUT query_start timestamptz, OUT state_change timestamptz, OUT wait_event_type text, OUT wait_event text,
|
||||||
|
OUT state text, OUT backend_xid xid, OUT backend_xmin xid, OUT query text, OUT backend_type text)
|
||||||
|
RETURNS SETOF RECORD
|
||||||
|
LANGUAGE C STRICT AS 'MODULE_PATHNAME',
|
||||||
|
$$citus_worker_stat_activity$$;
|
||||||
|
|
||||||
|
COMMENT ON FUNCTION citus_worker_stat_activity(OUT query_hostname text, OUT query_hostport int, OUT master_query_host_name text, OUT master_query_host_port int,
|
||||||
|
OUT transaction_number int8, OUT transaction_stamp timestamptz, OUT datid oid, OUT datname name,
|
||||||
|
OUT pid int, OUT usesysid oid, OUT usename name, OUT application_name text, OUT client_addr INET,
|
||||||
|
OUT client_hostname TEXT, OUT client_port int, OUT backend_start timestamptz, OUT xact_start timestamptz,
|
||||||
|
OUT query_start timestamptz, OUT state_change timestamptz, OUT wait_event_type text, OUT wait_event text,
|
||||||
|
OUT state text, OUT backend_xid xid, OUT backend_xmin xid, OUT query text, OUT backend_type text)
|
||||||
|
IS 'returns distributed transaction activity on shards of distributed tables';
|
||||||
|
|
||||||
|
CREATE VIEW citus.citus_worker_stat_activity AS
|
||||||
|
SELECT * FROM pg_catalog.citus_worker_stat_activity();
|
||||||
|
ALTER VIEW citus.citus_worker_stat_activity SET SCHEMA pg_catalog;
|
||||||
|
GRANT SELECT ON pg_catalog.citus_worker_stat_activity TO PUBLIC;
|
||||||
|
|
||||||
|
RESET search_path;
|
||||||
|
|
|
@ -1,6 +1,6 @@
|
||||||
# Citus extension
|
# Citus extension
|
||||||
comment = 'Citus distributed database'
|
comment = 'Citus distributed database'
|
||||||
default_version = '8.0-4'
|
default_version = '8.0-5'
|
||||||
module_pathname = '$libdir/citus'
|
module_pathname = '$libdir/citus'
|
||||||
relocatable = false
|
relocatable = false
|
||||||
schema = pg_catalog
|
schema = pg_catalog
|
||||||
|
|
|
@ -195,8 +195,8 @@ get_all_active_transactions(PG_FUNCTION_ARGS)
|
||||||
|
|
||||||
int backendIndex = 0;
|
int backendIndex = 0;
|
||||||
|
|
||||||
Datum values[5];
|
Datum values[6];
|
||||||
bool isNulls[5];
|
bool isNulls[6];
|
||||||
|
|
||||||
CheckCitusVersion(ERROR);
|
CheckCitusVersion(ERROR);
|
||||||
|
|
||||||
|
@ -249,6 +249,7 @@ get_all_active_transactions(PG_FUNCTION_ARGS)
|
||||||
{
|
{
|
||||||
BackendData *currentBackend =
|
BackendData *currentBackend =
|
||||||
&backendManagementShmemData->backends[backendIndex];
|
&backendManagementShmemData->backends[backendIndex];
|
||||||
|
bool coordinatorOriginatedQuery = false;
|
||||||
|
|
||||||
SpinLockAcquire(¤tBackend->mutex);
|
SpinLockAcquire(¤tBackend->mutex);
|
||||||
|
|
||||||
|
@ -262,8 +263,16 @@ get_all_active_transactions(PG_FUNCTION_ARGS)
|
||||||
values[0] = ObjectIdGetDatum(currentBackend->databaseId);
|
values[0] = ObjectIdGetDatum(currentBackend->databaseId);
|
||||||
values[1] = Int32GetDatum(ProcGlobal->allProcs[backendIndex].pid);
|
values[1] = Int32GetDatum(ProcGlobal->allProcs[backendIndex].pid);
|
||||||
values[2] = Int32GetDatum(currentBackend->transactionId.initiatorNodeIdentifier);
|
values[2] = Int32GetDatum(currentBackend->transactionId.initiatorNodeIdentifier);
|
||||||
values[3] = UInt64GetDatum(currentBackend->transactionId.transactionNumber);
|
|
||||||
values[4] = TimestampTzGetDatum(currentBackend->transactionId.timestamp);
|
/*
|
||||||
|
* We prefer to use worker_query instead of transactionOriginator in the user facing
|
||||||
|
* functions since its more intuitive. Thus, we negate the result before returning.
|
||||||
|
*/
|
||||||
|
coordinatorOriginatedQuery = currentBackend->transactionId.transactionOriginator;
|
||||||
|
values[3] = !coordinatorOriginatedQuery;
|
||||||
|
|
||||||
|
values[4] = UInt64GetDatum(currentBackend->transactionId.transactionNumber);
|
||||||
|
values[5] = TimestampTzGetDatum(currentBackend->transactionId.timestamp);
|
||||||
|
|
||||||
SpinLockRelease(¤tBackend->mutex);
|
SpinLockRelease(¤tBackend->mutex);
|
||||||
|
|
||||||
|
|
File diff suppressed because it is too large
Load Diff
|
@ -44,9 +44,6 @@ typedef struct PROCStack
|
||||||
|
|
||||||
|
|
||||||
static void AddWaitEdgeFromResult(WaitGraph *waitGraph, PGresult *result, int rowIndex);
|
static void AddWaitEdgeFromResult(WaitGraph *waitGraph, PGresult *result, int rowIndex);
|
||||||
static int64 ParseIntField(PGresult *result, int rowIndex, int colIndex);
|
|
||||||
static bool ParseBoolField(PGresult *result, int rowIndex, int colIndex);
|
|
||||||
static TimestampTz ParseTimestampTzField(PGresult *result, int rowIndex, int colIndex);
|
|
||||||
static void ReturnWaitGraph(WaitGraph *waitGraph, FunctionCallInfo fcinfo);
|
static void ReturnWaitGraph(WaitGraph *waitGraph, FunctionCallInfo fcinfo);
|
||||||
static WaitGraph * BuildLocalWaitGraph(void);
|
static WaitGraph * BuildLocalWaitGraph(void);
|
||||||
static bool IsProcessWaitingForSafeOperations(PGPROC *proc);
|
static bool IsProcessWaitingForSafeOperations(PGPROC *proc);
|
||||||
|
@ -204,7 +201,7 @@ AddWaitEdgeFromResult(WaitGraph *waitGraph, PGresult *result, int rowIndex)
|
||||||
* ParseIntField parses a int64 from a remote result or returns 0 if the
|
* ParseIntField parses a int64 from a remote result or returns 0 if the
|
||||||
* result is NULL.
|
* result is NULL.
|
||||||
*/
|
*/
|
||||||
static int64
|
int64
|
||||||
ParseIntField(PGresult *result, int rowIndex, int colIndex)
|
ParseIntField(PGresult *result, int rowIndex, int colIndex)
|
||||||
{
|
{
|
||||||
char *resultString = NULL;
|
char *resultString = NULL;
|
||||||
|
@ -224,7 +221,7 @@ ParseIntField(PGresult *result, int rowIndex, int colIndex)
|
||||||
* ParseBoolField parses a bool from a remote result or returns false if the
|
* ParseBoolField parses a bool from a remote result or returns false if the
|
||||||
* result is NULL.
|
* result is NULL.
|
||||||
*/
|
*/
|
||||||
static bool
|
bool
|
||||||
ParseBoolField(PGresult *result, int rowIndex, int colIndex)
|
ParseBoolField(PGresult *result, int rowIndex, int colIndex)
|
||||||
{
|
{
|
||||||
char *resultString = NULL;
|
char *resultString = NULL;
|
||||||
|
@ -248,7 +245,7 @@ ParseBoolField(PGresult *result, int rowIndex, int colIndex)
|
||||||
* ParseTimestampTzField parses a timestamptz from a remote result or returns
|
* ParseTimestampTzField parses a timestamptz from a remote result or returns
|
||||||
* 0 if the result is NULL.
|
* 0 if the result is NULL.
|
||||||
*/
|
*/
|
||||||
static TimestampTz
|
TimestampTz
|
||||||
ParseTimestampTzField(PGresult *result, int rowIndex, int colIndex)
|
ParseTimestampTzField(PGresult *result, int rowIndex, int colIndex)
|
||||||
{
|
{
|
||||||
char *resultString = NULL;
|
char *resultString = NULL;
|
||||||
|
@ -257,7 +254,7 @@ ParseTimestampTzField(PGresult *result, int rowIndex, int colIndex)
|
||||||
|
|
||||||
if (PQgetisnull(result, rowIndex, colIndex))
|
if (PQgetisnull(result, rowIndex, colIndex))
|
||||||
{
|
{
|
||||||
return 0;
|
return DT_NOBEGIN;
|
||||||
}
|
}
|
||||||
|
|
||||||
resultString = PQgetvalue(result, rowIndex, colIndex);
|
resultString = PQgetvalue(result, rowIndex, colIndex);
|
||||||
|
|
|
@ -14,6 +14,7 @@
|
||||||
|
|
||||||
|
|
||||||
#include "postgres.h"
|
#include "postgres.h"
|
||||||
|
#include "libpq-fe.h"
|
||||||
#include "datatype/timestamp.h"
|
#include "datatype/timestamp.h"
|
||||||
|
|
||||||
|
|
||||||
|
@ -58,5 +59,10 @@ extern WaitGraph * BuildGlobalWaitGraph(void);
|
||||||
extern bool IsProcessWaitingForLock(PGPROC *proc);
|
extern bool IsProcessWaitingForLock(PGPROC *proc);
|
||||||
extern bool IsInDistributedTransaction(BackendData *backendData);
|
extern bool IsInDistributedTransaction(BackendData *backendData);
|
||||||
|
|
||||||
|
/* some utility function to parse results */
|
||||||
|
extern int64 ParseIntField(PGresult *result, int rowIndex, int colIndex);
|
||||||
|
extern bool ParseBoolField(PGresult *result, int rowIndex, int colIndex);
|
||||||
|
extern TimestampTz ParseTimestampTzField(PGresult *result, int rowIndex, int colIndex);
|
||||||
|
|
||||||
|
|
||||||
#endif /* LOCK_GRAPH_H */
|
#endif /* LOCK_GRAPH_H */
|
||||||
|
|
|
@ -0,0 +1,181 @@
|
||||||
|
Parsed test spec with 3 sessions
|
||||||
|
|
||||||
|
starting permutation: s1-begin s2-begin s3-begin s1-alter-table s2-view-dist s3-view-worker s2-rollback s1-commit s3-rollback
|
||||||
|
create_distributed_table
|
||||||
|
|
||||||
|
|
||||||
|
step s1-begin:
|
||||||
|
BEGIN;
|
||||||
|
|
||||||
|
step s2-begin:
|
||||||
|
BEGIN;
|
||||||
|
|
||||||
|
step s3-begin:
|
||||||
|
BEGIN;
|
||||||
|
|
||||||
|
step s1-alter-table:
|
||||||
|
ALTER TABLE test_table ADD COLUMN x INT;
|
||||||
|
|
||||||
|
step s2-view-dist:
|
||||||
|
SELECT query, query_hostname, query_hostport, master_query_host_name, master_query_host_port, state, wait_event_type, wait_event, usename, datname FROM citus_dist_stat_activity ORDER BY query DESC;
|
||||||
|
|
||||||
|
|
||||||
|
query query_hostname query_hostport master_query_host_namemaster_query_host_portstate wait_event_typewait_event usename datname
|
||||||
|
|
||||||
|
|
||||||
|
ALTER TABLE test_table ADD COLUMN x INT;
|
||||||
|
coordinator_host57636 coordinator_host57636 idle in transactionClient ClientRead postgres regression
|
||||||
|
step s3-view-worker:
|
||||||
|
SELECT query, query_hostname, query_hostport, master_query_host_name, master_query_host_port, state, wait_event_type, wait_event, usename, datname FROM citus_worker_stat_activity ORDER BY query DESC;
|
||||||
|
|
||||||
|
query query_hostname query_hostport master_query_host_namemaster_query_host_portstate wait_event_typewait_event usename datname
|
||||||
|
|
||||||
|
SELECT worker_apply_shard_ddl_command (105833, 'public', '
|
||||||
|
ALTER TABLE test_table ADD COLUMN x INT;
|
||||||
|
')localhost 57638 coordinator_host57636 idle in transactionClient ClientRead postgres regression
|
||||||
|
SELECT worker_apply_shard_ddl_command (105832, 'public', '
|
||||||
|
ALTER TABLE test_table ADD COLUMN x INT;
|
||||||
|
')localhost 57637 coordinator_host57636 idle in transactionClient ClientRead postgres regression
|
||||||
|
SELECT worker_apply_shard_ddl_command (105831, 'public', '
|
||||||
|
ALTER TABLE test_table ADD COLUMN x INT;
|
||||||
|
')localhost 57638 coordinator_host57636 idle in transactionClient ClientRead postgres regression
|
||||||
|
SELECT worker_apply_shard_ddl_command (105830, 'public', '
|
||||||
|
ALTER TABLE test_table ADD COLUMN x INT;
|
||||||
|
')localhost 57637 coordinator_host57636 idle in transactionClient ClientRead postgres regression
|
||||||
|
step s2-rollback:
|
||||||
|
ROLLBACK;
|
||||||
|
|
||||||
|
step s1-commit:
|
||||||
|
COMMIT;
|
||||||
|
|
||||||
|
step s3-rollback:
|
||||||
|
ROLLBACK;
|
||||||
|
|
||||||
|
|
||||||
|
starting permutation: s1-begin s2-begin s3-begin s1-insert s2-view-dist s3-view-worker s2-rollback s1-commit s3-rollback
|
||||||
|
create_distributed_table
|
||||||
|
|
||||||
|
|
||||||
|
step s1-begin:
|
||||||
|
BEGIN;
|
||||||
|
|
||||||
|
step s2-begin:
|
||||||
|
BEGIN;
|
||||||
|
|
||||||
|
step s3-begin:
|
||||||
|
BEGIN;
|
||||||
|
|
||||||
|
step s1-insert:
|
||||||
|
INSERT INTO test_table VALUES (100, 100);
|
||||||
|
|
||||||
|
step s2-view-dist:
|
||||||
|
SELECT query, query_hostname, query_hostport, master_query_host_name, master_query_host_port, state, wait_event_type, wait_event, usename, datname FROM citus_dist_stat_activity ORDER BY query DESC;
|
||||||
|
|
||||||
|
|
||||||
|
query query_hostname query_hostport master_query_host_namemaster_query_host_portstate wait_event_typewait_event usename datname
|
||||||
|
|
||||||
|
|
||||||
|
INSERT INTO test_table VALUES (100, 100);
|
||||||
|
coordinator_host57636 coordinator_host57636 idle in transactionClient ClientRead postgres regression
|
||||||
|
step s3-view-worker:
|
||||||
|
SELECT query, query_hostname, query_hostport, master_query_host_name, master_query_host_port, state, wait_event_type, wait_event, usename, datname FROM citus_worker_stat_activity ORDER BY query DESC;
|
||||||
|
|
||||||
|
query query_hostname query_hostport master_query_host_namemaster_query_host_portstate wait_event_typewait_event usename datname
|
||||||
|
|
||||||
|
INSERT INTO public.test_table_105836 (column1, column2) VALUES (100, 100)localhost 57637 coordinator_host57636 idle in transactionClient ClientRead postgres regression
|
||||||
|
step s2-rollback:
|
||||||
|
ROLLBACK;
|
||||||
|
|
||||||
|
step s1-commit:
|
||||||
|
COMMIT;
|
||||||
|
|
||||||
|
step s3-rollback:
|
||||||
|
ROLLBACK;
|
||||||
|
|
||||||
|
|
||||||
|
starting permutation: s1-begin s2-begin s3-begin s1-select s2-view-dist s3-view-worker s2-rollback s1-commit s3-rollback
|
||||||
|
create_distributed_table
|
||||||
|
|
||||||
|
|
||||||
|
step s1-begin:
|
||||||
|
BEGIN;
|
||||||
|
|
||||||
|
step s2-begin:
|
||||||
|
BEGIN;
|
||||||
|
|
||||||
|
step s3-begin:
|
||||||
|
BEGIN;
|
||||||
|
|
||||||
|
step s1-select:
|
||||||
|
SELECT count(*) FROM test_table;
|
||||||
|
|
||||||
|
count
|
||||||
|
|
||||||
|
0
|
||||||
|
step s2-view-dist:
|
||||||
|
SELECT query, query_hostname, query_hostport, master_query_host_name, master_query_host_port, state, wait_event_type, wait_event, usename, datname FROM citus_dist_stat_activity ORDER BY query DESC;
|
||||||
|
|
||||||
|
|
||||||
|
query query_hostname query_hostport master_query_host_namemaster_query_host_portstate wait_event_typewait_event usename datname
|
||||||
|
|
||||||
|
|
||||||
|
SELECT count(*) FROM test_table;
|
||||||
|
coordinator_host57636 coordinator_host57636 idle in transactionClient ClientRead postgres regression
|
||||||
|
step s3-view-worker:
|
||||||
|
SELECT query, query_hostname, query_hostport, master_query_host_name, master_query_host_port, state, wait_event_type, wait_event, usename, datname FROM citus_worker_stat_activity ORDER BY query DESC;
|
||||||
|
|
||||||
|
query query_hostname query_hostport master_query_host_namemaster_query_host_portstate wait_event_typewait_event usename datname
|
||||||
|
|
||||||
|
COPY (SELECT count(*) AS count FROM test_table_105841 test_table WHERE true) TO STDOUTlocalhost 57638 coordinator_host57636 idle in transactionClient ClientRead postgres regression
|
||||||
|
COPY (SELECT count(*) AS count FROM test_table_105840 test_table WHERE true) TO STDOUTlocalhost 57637 coordinator_host57636 idle in transactionClient ClientRead postgres regression
|
||||||
|
COPY (SELECT count(*) AS count FROM test_table_105839 test_table WHERE true) TO STDOUTlocalhost 57638 coordinator_host57636 idle in transactionClient ClientRead postgres regression
|
||||||
|
COPY (SELECT count(*) AS count FROM test_table_105838 test_table WHERE true) TO STDOUTlocalhost 57637 coordinator_host57636 idle in transactionClient ClientRead postgres regression
|
||||||
|
step s2-rollback:
|
||||||
|
ROLLBACK;
|
||||||
|
|
||||||
|
step s1-commit:
|
||||||
|
COMMIT;
|
||||||
|
|
||||||
|
step s3-rollback:
|
||||||
|
ROLLBACK;
|
||||||
|
|
||||||
|
|
||||||
|
starting permutation: s1-begin s2-begin s3-begin s1-select-router s2-view-dist s3-view-worker s2-rollback s1-commit s3-rollback
|
||||||
|
create_distributed_table
|
||||||
|
|
||||||
|
|
||||||
|
step s1-begin:
|
||||||
|
BEGIN;
|
||||||
|
|
||||||
|
step s2-begin:
|
||||||
|
BEGIN;
|
||||||
|
|
||||||
|
step s3-begin:
|
||||||
|
BEGIN;
|
||||||
|
|
||||||
|
step s1-select-router:
|
||||||
|
SELECT count(*) FROM test_table WHERE column1 = 55;
|
||||||
|
|
||||||
|
count
|
||||||
|
|
||||||
|
0
|
||||||
|
step s2-view-dist:
|
||||||
|
SELECT query, query_hostname, query_hostport, master_query_host_name, master_query_host_port, state, wait_event_type, wait_event, usename, datname FROM citus_dist_stat_activity ORDER BY query DESC;
|
||||||
|
|
||||||
|
|
||||||
|
query query_hostname query_hostport master_query_host_namemaster_query_host_portstate wait_event_typewait_event usename datname
|
||||||
|
|
||||||
|
step s3-view-worker:
|
||||||
|
SELECT query, query_hostname, query_hostport, master_query_host_name, master_query_host_port, state, wait_event_type, wait_event, usename, datname FROM citus_worker_stat_activity ORDER BY query DESC;
|
||||||
|
|
||||||
|
query query_hostname query_hostport master_query_host_namemaster_query_host_portstate wait_event_typewait_event usename datname
|
||||||
|
|
||||||
|
step s2-rollback:
|
||||||
|
ROLLBACK;
|
||||||
|
|
||||||
|
step s1-commit:
|
||||||
|
COMMIT;
|
||||||
|
|
||||||
|
step s3-rollback:
|
||||||
|
ROLLBACK;
|
||||||
|
|
|
@ -0,0 +1,181 @@
|
||||||
|
Parsed test spec with 3 sessions
|
||||||
|
|
||||||
|
starting permutation: s1-begin s2-begin s3-begin s1-alter-table s2-view-dist s3-view-worker s2-rollback s1-commit s3-rollback
|
||||||
|
create_distributed_table
|
||||||
|
|
||||||
|
|
||||||
|
step s1-begin:
|
||||||
|
BEGIN;
|
||||||
|
|
||||||
|
step s2-begin:
|
||||||
|
BEGIN;
|
||||||
|
|
||||||
|
step s3-begin:
|
||||||
|
BEGIN;
|
||||||
|
|
||||||
|
step s1-alter-table:
|
||||||
|
ALTER TABLE test_table ADD COLUMN x INT;
|
||||||
|
|
||||||
|
step s2-view-dist:
|
||||||
|
SELECT query, query_hostname, query_hostport, master_query_host_name, master_query_host_port, state, wait_event_type, wait_event, usename, datname FROM citus_dist_stat_activity ORDER BY query DESC;
|
||||||
|
|
||||||
|
|
||||||
|
query query_hostname query_hostport master_query_host_namemaster_query_host_portstate wait_event_typewait_event usename datname
|
||||||
|
|
||||||
|
|
||||||
|
ALTER TABLE test_table ADD COLUMN x INT;
|
||||||
|
coordinator_host57636 coordinator_host57636 idle in transaction postgres regression
|
||||||
|
step s3-view-worker:
|
||||||
|
SELECT query, query_hostname, query_hostport, master_query_host_name, master_query_host_port, state, wait_event_type, wait_event, usename, datname FROM citus_worker_stat_activity ORDER BY query DESC;
|
||||||
|
|
||||||
|
query query_hostname query_hostport master_query_host_namemaster_query_host_portstate wait_event_typewait_event usename datname
|
||||||
|
|
||||||
|
SELECT worker_apply_shard_ddl_command (105297, 'public', '
|
||||||
|
ALTER TABLE test_table ADD COLUMN x INT;
|
||||||
|
')localhost 57638 coordinator_host57636 idle in transaction postgres regression
|
||||||
|
SELECT worker_apply_shard_ddl_command (105296, 'public', '
|
||||||
|
ALTER TABLE test_table ADD COLUMN x INT;
|
||||||
|
')localhost 57637 coordinator_host57636 idle in transaction postgres regression
|
||||||
|
SELECT worker_apply_shard_ddl_command (105295, 'public', '
|
||||||
|
ALTER TABLE test_table ADD COLUMN x INT;
|
||||||
|
')localhost 57638 coordinator_host57636 idle in transaction postgres regression
|
||||||
|
SELECT worker_apply_shard_ddl_command (105294, 'public', '
|
||||||
|
ALTER TABLE test_table ADD COLUMN x INT;
|
||||||
|
')localhost 57637 coordinator_host57636 idle in transaction postgres regression
|
||||||
|
step s2-rollback:
|
||||||
|
ROLLBACK;
|
||||||
|
|
||||||
|
step s1-commit:
|
||||||
|
COMMIT;
|
||||||
|
|
||||||
|
step s3-rollback:
|
||||||
|
ROLLBACK;
|
||||||
|
|
||||||
|
|
||||||
|
starting permutation: s1-begin s2-begin s3-begin s1-insert s2-view-dist s3-view-worker s2-rollback s1-commit s3-rollback
|
||||||
|
create_distributed_table
|
||||||
|
|
||||||
|
|
||||||
|
step s1-begin:
|
||||||
|
BEGIN;
|
||||||
|
|
||||||
|
step s2-begin:
|
||||||
|
BEGIN;
|
||||||
|
|
||||||
|
step s3-begin:
|
||||||
|
BEGIN;
|
||||||
|
|
||||||
|
step s1-insert:
|
||||||
|
INSERT INTO test_table VALUES (100, 100);
|
||||||
|
|
||||||
|
step s2-view-dist:
|
||||||
|
SELECT query, query_hostname, query_hostport, master_query_host_name, master_query_host_port, state, wait_event_type, wait_event, usename, datname FROM citus_dist_stat_activity ORDER BY query DESC;
|
||||||
|
|
||||||
|
|
||||||
|
query query_hostname query_hostport master_query_host_namemaster_query_host_portstate wait_event_typewait_event usename datname
|
||||||
|
|
||||||
|
|
||||||
|
INSERT INTO test_table VALUES (100, 100);
|
||||||
|
coordinator_host57636 coordinator_host57636 idle in transaction postgres regression
|
||||||
|
step s3-view-worker:
|
||||||
|
SELECT query, query_hostname, query_hostport, master_query_host_name, master_query_host_port, state, wait_event_type, wait_event, usename, datname FROM citus_worker_stat_activity ORDER BY query DESC;
|
||||||
|
|
||||||
|
query query_hostname query_hostport master_query_host_namemaster_query_host_portstate wait_event_typewait_event usename datname
|
||||||
|
|
||||||
|
INSERT INTO public.test_table_105300 (column1, column2) VALUES (100, 100)localhost 57637 coordinator_host57636 idle in transaction postgres regression
|
||||||
|
step s2-rollback:
|
||||||
|
ROLLBACK;
|
||||||
|
|
||||||
|
step s1-commit:
|
||||||
|
COMMIT;
|
||||||
|
|
||||||
|
step s3-rollback:
|
||||||
|
ROLLBACK;
|
||||||
|
|
||||||
|
|
||||||
|
starting permutation: s1-begin s2-begin s3-begin s1-select s2-view-dist s3-view-worker s2-rollback s1-commit s3-rollback
|
||||||
|
create_distributed_table
|
||||||
|
|
||||||
|
|
||||||
|
step s1-begin:
|
||||||
|
BEGIN;
|
||||||
|
|
||||||
|
step s2-begin:
|
||||||
|
BEGIN;
|
||||||
|
|
||||||
|
step s3-begin:
|
||||||
|
BEGIN;
|
||||||
|
|
||||||
|
step s1-select:
|
||||||
|
SELECT count(*) FROM test_table;
|
||||||
|
|
||||||
|
count
|
||||||
|
|
||||||
|
0
|
||||||
|
step s2-view-dist:
|
||||||
|
SELECT query, query_hostname, query_hostport, master_query_host_name, master_query_host_port, state, wait_event_type, wait_event, usename, datname FROM citus_dist_stat_activity ORDER BY query DESC;
|
||||||
|
|
||||||
|
|
||||||
|
query query_hostname query_hostport master_query_host_namemaster_query_host_portstate wait_event_typewait_event usename datname
|
||||||
|
|
||||||
|
|
||||||
|
SELECT count(*) FROM test_table;
|
||||||
|
coordinator_host57636 coordinator_host57636 idle in transaction postgres regression
|
||||||
|
step s3-view-worker:
|
||||||
|
SELECT query, query_hostname, query_hostport, master_query_host_name, master_query_host_port, state, wait_event_type, wait_event, usename, datname FROM citus_worker_stat_activity ORDER BY query DESC;
|
||||||
|
|
||||||
|
query query_hostname query_hostport master_query_host_namemaster_query_host_portstate wait_event_typewait_event usename datname
|
||||||
|
|
||||||
|
COPY (SELECT count(*) AS count FROM test_table_105305 test_table WHERE true) TO STDOUTlocalhost 57638 coordinator_host57636 idle in transaction postgres regression
|
||||||
|
COPY (SELECT count(*) AS count FROM test_table_105304 test_table WHERE true) TO STDOUTlocalhost 57637 coordinator_host57636 idle in transaction postgres regression
|
||||||
|
COPY (SELECT count(*) AS count FROM test_table_105303 test_table WHERE true) TO STDOUTlocalhost 57638 coordinator_host57636 idle in transaction postgres regression
|
||||||
|
COPY (SELECT count(*) AS count FROM test_table_105302 test_table WHERE true) TO STDOUTlocalhost 57637 coordinator_host57636 idle in transaction postgres regression
|
||||||
|
step s2-rollback:
|
||||||
|
ROLLBACK;
|
||||||
|
|
||||||
|
step s1-commit:
|
||||||
|
COMMIT;
|
||||||
|
|
||||||
|
step s3-rollback:
|
||||||
|
ROLLBACK;
|
||||||
|
|
||||||
|
|
||||||
|
starting permutation: s1-begin s2-begin s3-begin s1-select-router s2-view-dist s3-view-worker s2-rollback s1-commit s3-rollback
|
||||||
|
create_distributed_table
|
||||||
|
|
||||||
|
|
||||||
|
step s1-begin:
|
||||||
|
BEGIN;
|
||||||
|
|
||||||
|
step s2-begin:
|
||||||
|
BEGIN;
|
||||||
|
|
||||||
|
step s3-begin:
|
||||||
|
BEGIN;
|
||||||
|
|
||||||
|
step s1-select-router:
|
||||||
|
SELECT count(*) FROM test_table WHERE column1 = 55;
|
||||||
|
|
||||||
|
count
|
||||||
|
|
||||||
|
0
|
||||||
|
step s2-view-dist:
|
||||||
|
SELECT query, query_hostname, query_hostport, master_query_host_name, master_query_host_port, state, wait_event_type, wait_event, usename, datname FROM citus_dist_stat_activity ORDER BY query DESC;
|
||||||
|
|
||||||
|
|
||||||
|
query query_hostname query_hostport master_query_host_namemaster_query_host_portstate wait_event_typewait_event usename datname
|
||||||
|
|
||||||
|
step s3-view-worker:
|
||||||
|
SELECT query, query_hostname, query_hostport, master_query_host_name, master_query_host_port, state, wait_event_type, wait_event, usename, datname FROM citus_worker_stat_activity ORDER BY query DESC;
|
||||||
|
|
||||||
|
query query_hostname query_hostport master_query_host_namemaster_query_host_portstate wait_event_typewait_event usename datname
|
||||||
|
|
||||||
|
step s2-rollback:
|
||||||
|
ROLLBACK;
|
||||||
|
|
||||||
|
step s1-commit:
|
||||||
|
COMMIT;
|
||||||
|
|
||||||
|
step s3-rollback:
|
||||||
|
ROLLBACK;
|
||||||
|
|
|
@ -147,6 +147,7 @@ ALTER EXTENSION citus UPDATE TO '8.0-1';
|
||||||
ALTER EXTENSION citus UPDATE TO '8.0-2';
|
ALTER EXTENSION citus UPDATE TO '8.0-2';
|
||||||
ALTER EXTENSION citus UPDATE TO '8.0-3';
|
ALTER EXTENSION citus UPDATE TO '8.0-3';
|
||||||
ALTER EXTENSION citus UPDATE TO '8.0-4';
|
ALTER EXTENSION citus UPDATE TO '8.0-4';
|
||||||
|
ALTER EXTENSION citus UPDATE TO '8.0-5';
|
||||||
-- show running version
|
-- show running version
|
||||||
SHOW citus.version;
|
SHOW citus.version;
|
||||||
citus.version
|
citus.version
|
||||||
|
|
|
@ -8,7 +8,6 @@ test: isolation_create_table_vs_add_remove_node
|
||||||
# isolation_cluster_management such that tests
|
# isolation_cluster_management such that tests
|
||||||
# that come later can be parallelized
|
# that come later can be parallelized
|
||||||
test: isolation_cluster_management
|
test: isolation_cluster_management
|
||||||
|
|
||||||
test: isolation_dml_vs_repair isolation_copy_placement_vs_copy_placement
|
test: isolation_dml_vs_repair isolation_copy_placement_vs_copy_placement
|
||||||
|
|
||||||
test: isolation_concurrent_dml isolation_data_migration
|
test: isolation_concurrent_dml isolation_data_migration
|
||||||
|
@ -43,3 +42,4 @@ test: isolation_delete_vs_all
|
||||||
test: isolation_truncate_vs_all
|
test: isolation_truncate_vs_all
|
||||||
test: isolation_drop_vs_all
|
test: isolation_drop_vs_all
|
||||||
test: isolation_ddl_vs_all
|
test: isolation_ddl_vs_all
|
||||||
|
test: isolation_citus_dist_activity
|
||||||
|
|
|
@ -0,0 +1,88 @@
|
||||||
|
setup
|
||||||
|
{
|
||||||
|
SET citus.shard_replication_factor TO 1;
|
||||||
|
SET citus.shard_count TO 4;
|
||||||
|
|
||||||
|
CREATE TABLE test_table(column1 int, column2 int);
|
||||||
|
SELECT create_distributed_table('test_table', 'column1');
|
||||||
|
}
|
||||||
|
|
||||||
|
teardown
|
||||||
|
{
|
||||||
|
DROP TABLE test_table;
|
||||||
|
}
|
||||||
|
|
||||||
|
session "s1"
|
||||||
|
|
||||||
|
step "s1-begin"
|
||||||
|
{
|
||||||
|
BEGIN;
|
||||||
|
}
|
||||||
|
|
||||||
|
step "s1-alter-table"
|
||||||
|
{
|
||||||
|
ALTER TABLE test_table ADD COLUMN x INT;
|
||||||
|
}
|
||||||
|
|
||||||
|
step "s1-select"
|
||||||
|
{
|
||||||
|
SELECT count(*) FROM test_table;
|
||||||
|
}
|
||||||
|
|
||||||
|
step "s1-select-router"
|
||||||
|
{
|
||||||
|
SELECT count(*) FROM test_table WHERE column1 = 55;
|
||||||
|
}
|
||||||
|
|
||||||
|
step "s1-insert"
|
||||||
|
{
|
||||||
|
INSERT INTO test_table VALUES (100, 100);
|
||||||
|
}
|
||||||
|
|
||||||
|
step "s1-commit"
|
||||||
|
{
|
||||||
|
COMMIT;
|
||||||
|
}
|
||||||
|
|
||||||
|
session "s2"
|
||||||
|
|
||||||
|
step "s2-begin"
|
||||||
|
{
|
||||||
|
BEGIN;
|
||||||
|
}
|
||||||
|
|
||||||
|
step "s2-rollback"
|
||||||
|
{
|
||||||
|
ROLLBACK;
|
||||||
|
}
|
||||||
|
|
||||||
|
step "s2-view-dist"
|
||||||
|
{
|
||||||
|
SELECT query, query_hostname, query_hostport, master_query_host_name, master_query_host_port, state, wait_event_type, wait_event, usename, datname FROM citus_dist_stat_activity ORDER BY query DESC;
|
||||||
|
|
||||||
|
}
|
||||||
|
|
||||||
|
session "s3"
|
||||||
|
|
||||||
|
step "s3-begin"
|
||||||
|
{
|
||||||
|
BEGIN;
|
||||||
|
}
|
||||||
|
|
||||||
|
step "s3-rollback"
|
||||||
|
{
|
||||||
|
ROLLBACK;
|
||||||
|
}
|
||||||
|
|
||||||
|
step "s3-view-worker"
|
||||||
|
{
|
||||||
|
SELECT query, query_hostname, query_hostport, master_query_host_name, master_query_host_port, state, wait_event_type, wait_event, usename, datname FROM citus_worker_stat_activity ORDER BY query DESC;
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
|
permutation "s1-begin" "s2-begin" "s3-begin" "s1-alter-table" "s2-view-dist" "s3-view-worker" "s2-rollback" "s1-commit" "s3-rollback"
|
||||||
|
permutation "s1-begin" "s2-begin" "s3-begin" "s1-insert" "s2-view-dist" "s3-view-worker" "s2-rollback" "s1-commit" "s3-rollback"
|
||||||
|
permutation "s1-begin" "s2-begin" "s3-begin" "s1-select" "s2-view-dist" "s3-view-worker" "s2-rollback" "s1-commit" "s3-rollback"
|
||||||
|
|
||||||
|
# router selects don't show up because BEGIN is not sent for performance reasons
|
||||||
|
permutation "s1-begin" "s2-begin" "s3-begin" "s1-select-router" "s2-view-dist" "s3-view-worker" "s2-rollback" "s1-commit" "s3-rollback"
|
|
@ -147,6 +147,7 @@ ALTER EXTENSION citus UPDATE TO '8.0-1';
|
||||||
ALTER EXTENSION citus UPDATE TO '8.0-2';
|
ALTER EXTENSION citus UPDATE TO '8.0-2';
|
||||||
ALTER EXTENSION citus UPDATE TO '8.0-3';
|
ALTER EXTENSION citus UPDATE TO '8.0-3';
|
||||||
ALTER EXTENSION citus UPDATE TO '8.0-4';
|
ALTER EXTENSION citus UPDATE TO '8.0-4';
|
||||||
|
ALTER EXTENSION citus UPDATE TO '8.0-5';
|
||||||
|
|
||||||
-- show running version
|
-- show running version
|
||||||
SHOW citus.version;
|
SHOW citus.version;
|
||||||
|
|
Loading…
Reference in New Issue