From 4997096413ec9824b9c12f7540abfbd31430808d Mon Sep 17 00:00:00 2001 From: Ashwin Agrawal Date: Tue, 26 Sep 2017 11:01:20 -0700 Subject: [PATCH] Fix gp_pgdatabase__ function by including walrep state 'n'. As part of commit efed2fccaad4c5c8e3ad99b6e7479cc944bca621 new walrep state was added 'n' (not-in-sync). The toolkit function gp_pgdatabase__() needs to be modified as well to check for that state. Original code not using #defines but direct characters like 's', 'c' makes it very tricky find stuff in code. Hopefully, future chnages would be easy to spot and make. --- src/backend/cdb/cdbpgdatabase.c | 19 +++++++++++++++---- 1 file changed, 15 insertions(+), 4 deletions(-) diff --git a/src/backend/cdb/cdbpgdatabase.c b/src/backend/cdb/cdbpgdatabase.c index cfeb4e60d7..b0b9572164 100644 --- a/src/backend/cdb/cdbpgdatabase.c +++ b/src/backend/cdb/cdbpgdatabase.c @@ -107,17 +107,28 @@ gp_pgdatabase__(PG_FUNCTION_ARGS) values[2] = UInt16GetDatum(db->segindex); values[3] = BoolGetDatum(false); - if (db->status == 'u') + if (db->status == GP_SEGMENT_CONFIGURATION_STATUS_UP) { - if (db->mode == 's' || db->mode == 'c') +#ifdef USE_SEGWALREP + if (db->mode == GP_SEGMENT_CONFIGURATION_MODE_INSYNC || + db->mode == GP_SEGMENT_CONFIGURATION_MODE_NOTINSYNC) { values[3] = BoolGetDatum(true); - } else if (db->mode == 'r' && db->role == 'p') + } +#else + if (db->mode == GP_SEGMENT_CONFIGURATION_MODE_INSYNC || + db->mode == GP_SEGMENT_CONFIGURATION_MODE_CHANGETRACKING) + { + values[3] = BoolGetDatum(true); + } else if (db->mode == GP_SEGMENT_CONFIGURATION_MODE_RESYNC && + db->role == GP_SEGMENT_CONFIGURATION_ROLE_PRIMARY) { values[3] = BoolGetDatum(true); } +#endif } - values[4] = BoolGetDatum(db->preferred_role == 'p'); + values[4] = BoolGetDatum(db->preferred_role == + GP_SEGMENT_CONFIGURATION_ROLE_PRIMARY); tuple = heap_form_tuple(funcctx->tuple_desc, values, nulls); result = HeapTupleGetDatum(tuple); -- GitLab