Skip to content

Commit

Permalink
Make extension state available through function
Browse files Browse the repository at this point in the history
The extension state is not easily accessible in release builds, which
makes debugging issue with the loader very difficult. This commit
introduces a new schema `timescaledb_debug` and makes the function
`ts_extension_get_state` available also in release builds as
`timescaledb_debug.extension_state`.

See timescale#1682
  • Loading branch information
mkindahl committed Jan 10, 2024
1 parent 5676ace commit 38971df
Show file tree
Hide file tree
Showing 7 changed files with 33 additions and 20 deletions.
4 changes: 4 additions & 0 deletions cmake/ScriptFiles.cmake
Original file line number Diff line number Diff line change
Expand Up @@ -58,6 +58,10 @@ set(SOURCE_FILES
osm_api.sql)

if(ENABLE_DEBUG_UTILS AND CMAKE_BUILD_TYPE MATCHES Debug)
list(APPEND SOURCE_FILES debug_build_utils.sql)
endif()

if(ENABLE_DEBUG_UTILS)
list(APPEND SOURCE_FILES debug_utils.sql)
endif()

Expand Down
15 changes: 5 additions & 10 deletions sql/debug_utils.sql
Original file line number Diff line number Diff line change
Expand Up @@ -2,14 +2,9 @@
-- Please see the included NOTICE for copyright information and
-- LICENSE-APACHE for a copy of the license.

-- This file contains utility functions that are only used in debug
-- builds for debugging and testing.
-- This file contains utility functions and views that are used for
-- debugging in release builds. These are all placed in the schema
-- timescaledb_debug.

CREATE OR REPLACE FUNCTION debug_waitpoint_enable(TEXT) RETURNS VOID LANGUAGE C VOLATILE STRICT
AS '@MODULE_PATHNAME@', 'ts_debug_point_enable';

CREATE OR REPLACE FUNCTION debug_waitpoint_release(TEXT) RETURNS VOID LANGUAGE C VOLATILE STRICT
AS '@MODULE_PATHNAME@', 'ts_debug_point_release';

CREATE OR REPLACE FUNCTION debug_waitpoint_id(TEXT) RETURNS BIGINT LANGUAGE C VOLATILE STRICT
AS '@MODULE_PATHNAME@', 'ts_debug_point_id';
CREATE OR REPLACE FUNCTION timescaledb_debug.extension_state() RETURNS TEXT
AS '@MODULE_PATHNAME@', 'ts_extension_get_state' LANGUAGE C;
12 changes: 11 additions & 1 deletion sql/pre_install/schemas.sql
Original file line number Diff line number Diff line change
Expand Up @@ -11,6 +11,16 @@ CREATE SCHEMA _timescaledb_cache;
CREATE SCHEMA _timescaledb_config;
CREATE SCHEMA timescaledb_experimental;
CREATE SCHEMA timescaledb_information;
CREATE SCHEMA timescaledb_debug;

GRANT USAGE ON SCHEMA _timescaledb_cache, _timescaledb_catalog, _timescaledb_functions, _timescaledb_internal, _timescaledb_config, timescaledb_information, timescaledb_experimental TO PUBLIC;
GRANT USAGE ON SCHEMA
_timescaledb_cache,
_timescaledb_catalog,
_timescaledb_functions,
_timescaledb_internal,
_timescaledb_config,
timescaledb_debug,
timescaledb_information,
timescaledb_experimental
TO PUBLIC;

3 changes: 3 additions & 0 deletions sql/updates/latest-dev.sql
Original file line number Diff line number Diff line change
Expand Up @@ -316,3 +316,6 @@ ALTER TABLE _timescaledb_catalog.dimension
ADD CONSTRAINT dimension_hypertable_id_fkey FOREIGN KEY (hypertable_id) REFERENCES _timescaledb_catalog.hypertable(id) ON DELETE CASCADE;
ALTER TABLE _timescaledb_catalog.tablespace
ADD CONSTRAINT tablespace_hypertable_id_fkey FOREIGN KEY (hypertable_id) REFERENCES _timescaledb_catalog.hypertable(id) ON DELETE CASCADE;

CREATE SCHEMA timescaledb_debug;
GRANT USAGE ON SCHEMA timescaledb_debug TO PUBLIC;
2 changes: 2 additions & 0 deletions sql/updates/reverse-dev.sql
Original file line number Diff line number Diff line change
Expand Up @@ -623,3 +623,5 @@ ALTER TABLE _timescaledb_catalog.hypertable_data_node
ALTER TABLE _timescaledb_catalog.tablespace
ADD CONSTRAINT tablespace_hypertable_id_fkey FOREIGN KEY (hypertable_id) REFERENCES _timescaledb_catalog.hypertable(id) ON DELETE CASCADE;

DROP FUNCTION IF EXISTS timescaledb_debug.extension_state;
DROP SCHEMA IF EXISTS timescaledb_debug;
16 changes: 7 additions & 9 deletions src/extension.c
Original file line number Diff line number Diff line change
Expand Up @@ -66,6 +66,13 @@ static enum ExtensionState extstate = EXTENSION_STATE_UNKNOWN;
*/
static Oid ts_extension_oid = InvalidOid;

static const char *extstate_str[] = {
[EXTENSION_STATE_UNKNOWN] = "unknown",
[EXTENSION_STATE_TRANSITIONING] = "transitioning",
[EXTENSION_STATE_CREATED] = "created",
[EXTENSION_STATE_NOT_INSTALLED] = "not installed",
};

static bool
extension_loader_present()
{
Expand Down Expand Up @@ -334,19 +341,10 @@ ts_extension_is_proxy_table_relid(Oid relid)
return relid == extension_proxy_oid;
}

#ifdef TS_DEBUG
static const char *extstate_str[] = {
[EXTENSION_STATE_UNKNOWN] = "unknown",
[EXTENSION_STATE_TRANSITIONING] = "transitioning",
[EXTENSION_STATE_CREATED] = "created",
[EXTENSION_STATE_NOT_INSTALLED] = "not installed",
};

TS_FUNCTION_INFO_V1(ts_extension_get_state);

Datum
ts_extension_get_state(PG_FUNCTION_ARGS)
{
PG_RETURN_TEXT_P(cstring_to_text(extstate_str[extstate]));
}
#endif
1 change: 1 addition & 0 deletions tsl/test/shared/expected/extension.out
Original file line number Diff line number Diff line change
Expand Up @@ -296,6 +296,7 @@ ORDER BY pronamespace::regnamespace::text COLLATE "C", p.oid::regprocedure::text
time_bucket_gapfill(smallint,smallint,smallint,smallint)
timescaledb_post_restore()
timescaledb_pre_restore()
timescaledb_debug.extension_state()
timescaledb_experimental.add_policies(regclass,boolean,"any","any","any","any")
timescaledb_experimental.alter_policies(regclass,boolean,"any","any","any","any")
timescaledb_experimental.remove_all_policies(regclass,boolean)
Expand Down

0 comments on commit 38971df

Please sign in to comment.