From 4dca662e975892a5e8221cc6f37cb9732f1c3088 Mon Sep 17 00:00:00 2001 From: Ying Xu <32597660+yxu2162@users.noreply.github.com> Date: Fri, 14 Jan 2022 09:43:05 -0800 Subject: [PATCH] Making Columnar Dependency Free from Citus (#5622) * Removed distributed dependency in columnar_metadata.c * Changed columnar_debug.c so that it no longer needed distributed/tuplestore and made it return a record instead of a tuplestore * removed distributed/commands.h dependency * Made columnar_tableam.c dependency-free * Fixed spacing for columnar_store_memory_stats function * indentation fix * fixed test failures --- src/backend/columnar/columnar_debug.c | 10 ++++++---- src/backend/columnar/columnar_metadata.c | 1 - src/backend/columnar/columnar_tableam.c | 9 ++++----- src/test/regress/expected/columnar_test_helpers.out | 9 +++++---- src/test/regress/sql/columnar_test_helpers.sql | 9 +++++---- 5 files changed, 20 insertions(+), 18 deletions(-) diff --git a/src/backend/columnar/columnar_debug.c b/src/backend/columnar/columnar_debug.c index 49158f555..f72ec5f8f 100644 --- a/src/backend/columnar/columnar_debug.c +++ b/src/backend/columnar/columnar_debug.c @@ -10,13 +10,13 @@ #include "postgres.h" +#include "funcapi.h" #include "pg_config.h" #include "access/nbtree.h" #include "access/table.h" #include "catalog/pg_am.h" #include "catalog/pg_type.h" #include "distributed/pg_version_constants.h" -#include "distributed/tuplestore.h" #include "miscadmin.h" #include "storage/fd.h" #include "storage/smgr.h" @@ -54,6 +54,8 @@ columnar_store_memory_stats(PG_FUNCTION_ARGS) TupleDescInitEntry(tupleDescriptor, (AttrNumber) 3, "WriteStateContext", INT8OID, -1, 0); + tupleDescriptor = BlessTupleDesc(tupleDescriptor); + MemoryContextCounters transactionCounters = { 0 }; MemoryContextCounters topCounters = { 0 }; MemoryContextCounters writeStateCounters = { 0 }; @@ -68,9 +70,9 @@ columnar_store_memory_stats(PG_FUNCTION_ARGS) Int64GetDatum(writeStateCounters.totalspace) }; - Tuplestorestate *tupleStore = SetupTuplestore(fcinfo, &tupleDescriptor); - tuplestore_putvalues(tupleStore, tupleDescriptor, values, nulls); - PG_RETURN_DATUM(0); + HeapTuple tuple = heap_form_tuple(tupleDescriptor, values, nulls); + + PG_RETURN_DATUM(HeapTupleGetDatum(tuple)); } diff --git a/src/backend/columnar/columnar_metadata.c b/src/backend/columnar/columnar_metadata.c index 5991c5434..62d64861f 100644 --- a/src/backend/columnar/columnar_metadata.c +++ b/src/backend/columnar/columnar_metadata.c @@ -42,7 +42,6 @@ #include "commands/defrem.h" #include "commands/sequence.h" #include "commands/trigger.h" -#include "distributed/metadata_cache.h" #include "executor/executor.h" #include "executor/spi.h" #include "miscadmin.h" diff --git a/src/backend/columnar/columnar_tableam.c b/src/backend/columnar/columnar_tableam.c index c56c3192b..ff6e6cffc 100644 --- a/src/backend/columnar/columnar_tableam.c +++ b/src/backend/columnar/columnar_tableam.c @@ -32,6 +32,7 @@ #include "nodes/makefuncs.h" #include "optimizer/plancat.h" #include "pgstat.h" +#include "safe_lib.h" #include "storage/bufmgr.h" #include "storage/bufpage.h" #include "storage/bufmgr.h" @@ -48,16 +49,12 @@ #include "utils/relcache.h" #include "utils/lsyscache.h" #include "utils/syscache.h" - #include "columnar/columnar.h" #include "columnar/columnar_customscan.h" #include "columnar/columnar_storage.h" #include "columnar/columnar_tableam.h" #include "columnar/columnar_version_compat.h" -#include "distributed/commands.h" -#include "distributed/commands/utility_hook.h" #include "distributed/listutils.h" -#include "distributed/metadata_cache.h" /* * Timing parameters for truncate locking heuristics. @@ -2098,7 +2095,9 @@ ColumnarProcessUtility(PlannedStmt *pstmt, IndexStmt *indexStmt = (IndexStmt *) parsetree; Relation rel = relation_openrv(indexStmt->relation, - GetCreateIndexRelationLockMode(indexStmt)); + indexStmt->concurrent ? ShareUpdateExclusiveLock : + ShareLock); + if (rel->rd_tableam == GetColumnarTableAmRoutine()) { CheckCitusVersion(ERROR); diff --git a/src/test/regress/expected/columnar_test_helpers.out b/src/test/regress/expected/columnar_test_helpers.out index a3a8c541c..8736919ea 100644 --- a/src/test/regress/expected/columnar_test_helpers.out +++ b/src/test/regress/expected/columnar_test_helpers.out @@ -67,10 +67,11 @@ BEGIN RETURN false; END; $$ LANGUAGE plpgsql; -CREATE OR REPLACE FUNCTION columnar_store_memory_stats() - RETURNS TABLE(TopMemoryContext BIGINT, - TopTransactionContext BIGINT, - WriteStateContext BIGINT) +CREATE OR REPLACE FUNCTION columnar_store_memory_stats( + OUT TopMemoryContext BIGINT, + OUT TopTransactionContext BIGINT, + OUT WriteStateContext BIGINT) + RETURNS RECORD LANGUAGE C STRICT VOLATILE AS 'citus', $$columnar_store_memory_stats$$; CREATE FUNCTION top_memory_context_usage() diff --git a/src/test/regress/sql/columnar_test_helpers.sql b/src/test/regress/sql/columnar_test_helpers.sql index 772a58690..0340c06f9 100644 --- a/src/test/regress/sql/columnar_test_helpers.sql +++ b/src/test/regress/sql/columnar_test_helpers.sql @@ -73,10 +73,11 @@ BEGIN END; $$ LANGUAGE plpgsql; -CREATE OR REPLACE FUNCTION columnar_store_memory_stats() - RETURNS TABLE(TopMemoryContext BIGINT, - TopTransactionContext BIGINT, - WriteStateContext BIGINT) +CREATE OR REPLACE FUNCTION columnar_store_memory_stats( + OUT TopMemoryContext BIGINT, + OUT TopTransactionContext BIGINT, + OUT WriteStateContext BIGINT) + RETURNS RECORD LANGUAGE C STRICT VOLATILE AS 'citus', $$columnar_store_memory_stats$$;