mirror of
https://github.com/timescale/timescaledb.git
synced 2025-05-21 21:21:22 +08:00
Refactor reorder policy
This patch changes the reorder policy to store it's configuration in the bgw_job table and removes the bgw_policy_reorder table.
This commit is contained in:
parent
09d37fa4f7
commit
3e83577916
sql
src
bgw
bgw_policy
catalog.ccatalog.hcross_module_fn.ccross_module_fn.hjsonb_utils.cjsonb_utils.htelemetry
tsl
@ -31,9 +31,17 @@ RETURNS INTEGER AS '@MODULE_PATHNAME@', 'ts_add_drop_chunks_policy'
|
||||
LANGUAGE C VOLATILE STRICT;
|
||||
|
||||
CREATE OR REPLACE FUNCTION add_reorder_policy(hypertable REGCLASS, index_name NAME, if_not_exists BOOL = false) RETURNS INTEGER
|
||||
AS '@MODULE_PATHNAME@', 'ts_add_reorder_policy'
|
||||
AS '@MODULE_PATHNAME@', 'ts_policy_reorder_add'
|
||||
LANGUAGE C VOLATILE STRICT;
|
||||
|
||||
CREATE OR REPLACE FUNCTION remove_reorder_policy(hypertable REGCLASS, if_exists BOOL = false) RETURNS VOID
|
||||
AS '@MODULE_PATHNAME@', 'ts_policy_reorder_remove'
|
||||
LANGUAGE C VOLATILE STRICT;
|
||||
|
||||
CREATE OR REPLACE PROCEDURE _timescaledb_internal.policy_reorder(job_id INTEGER, config JSONB)
|
||||
AS '@MODULE_PATHNAME@', 'ts_policy_reorder_proc'
|
||||
LANGUAGE C;
|
||||
|
||||
CREATE OR REPLACE FUNCTION add_compress_chunks_policy(hypertable REGCLASS, older_than "any", if_not_exists BOOL = false)
|
||||
RETURNS INTEGER
|
||||
AS '@MODULE_PATHNAME@', 'ts_add_compress_chunks_policy'
|
||||
@ -43,11 +51,7 @@ CREATE OR REPLACE FUNCTION remove_drop_chunks_policy(hypertable REGCLASS, if_exi
|
||||
AS '@MODULE_PATHNAME@', 'ts_remove_drop_chunks_policy'
|
||||
LANGUAGE C VOLATILE STRICT;
|
||||
|
||||
CREATE OR REPLACE FUNCTION remove_reorder_policy(hypertable REGCLASS, if_exists BOOL = false) RETURNS VOID
|
||||
AS '@MODULE_PATHNAME@', 'ts_remove_reorder_policy'
|
||||
LANGUAGE C VOLATILE STRICT;
|
||||
|
||||
CREATE OR REPLACE FUNCTION remove_compress_chunks_policy(hypertable REGCLASS, if_exists BOOL = false) RETURNS BOOL
|
||||
CREATE OR REPLACE FUNCTION remove_compress_chunks_policy(hypertable REGCLASS, if_exists BOOL = false) RETURNS BOOL
|
||||
AS '@MODULE_PATHNAME@', 'ts_remove_compress_chunks_policy'
|
||||
LANGUAGE C VOLATILE STRICT;
|
||||
|
||||
|
@ -229,13 +229,6 @@ CREATE TABLE IF NOT EXISTS _timescaledb_internal.bgw_job_stat (
|
||||
--the statistics probably aren't very meaningful across instances.
|
||||
|
||||
--Now we define the argument tables for available BGW policies.
|
||||
CREATE TABLE IF NOT EXISTS _timescaledb_config.bgw_policy_reorder (
|
||||
job_id INTEGER PRIMARY KEY REFERENCES _timescaledb_config.bgw_job(id) ON DELETE CASCADE,
|
||||
hypertable_id INTEGER UNIQUE NOT NULL REFERENCES _timescaledb_catalog.hypertable(id) ON DELETE CASCADE,
|
||||
hypertable_index_name NAME NOT NULL
|
||||
);
|
||||
SELECT pg_catalog.pg_extension_config_dump('_timescaledb_config.bgw_policy_reorder', '');
|
||||
|
||||
CREATE TABLE IF NOT EXISTS _timescaledb_config.bgw_policy_drop_chunks (
|
||||
job_id INTEGER PRIMARY KEY REFERENCES _timescaledb_config.bgw_job(id) ON DELETE CASCADE,
|
||||
hypertable_id INTEGER UNIQUE NOT NULL REFERENCES _timescaledb_catalog.hypertable(id) ON DELETE CASCADE,
|
||||
|
@ -118,6 +118,12 @@ ALTER TABLE IF EXISTS _timescaledb_catalog.compression_chunk_size ADD COLUMN IF
|
||||
CLUSTER _timescaledb_catalog.compression_chunk_size USING compression_chunk_size_pkey;
|
||||
ALTER TABLE _timescaledb_catalog.compression_chunk_size SET WITHOUT CLUSTER;
|
||||
|
||||
---Clean up constraints on hypertable catalog table ---
|
||||
ALTER TABLE _timescaledb_catalog.hypertable ADD CONSTRAINT hypertable_table_name_schema_name_key UNIQUE(table_name, schema_name);
|
||||
ALTER TABLE _timescaledb_catalog.hypertable DROP CONSTRAINT hypertable_schema_name_table_name_key;
|
||||
ALTER TABLE _timescaledb_catalog.hypertable DROP CONSTRAINT hypertable_id_schema_name_key;
|
||||
|
||||
-- add fields for custom jobs/generic configuration to bgw_job table
|
||||
ALTER TABLE _timescaledb_config.bgw_job ADD COLUMN proc_name NAME NOT NULL DEFAULT '';
|
||||
ALTER TABLE _timescaledb_config.bgw_job ADD COLUMN proc_schema NAME NOT NULL DEFAULT '';
|
||||
ALTER TABLE _timescaledb_config.bgw_job ADD COLUMN owner NAME NOT NULL DEFAULT CURRENT_ROLE;
|
||||
@ -128,13 +134,29 @@ ALTER TABLE _timescaledb_config.bgw_job ADD COLUMN config JSONB;
|
||||
ALTER TABLE _timescaledb_config.bgw_job DROP CONSTRAINT valid_job_type;
|
||||
ALTER TABLE _timescaledb_config.bgw_job ADD CONSTRAINT valid_job_type CHECK (job_type IN ('telemetry_and_version_check_if_enabled', 'reorder', 'drop_chunks', 'continuous_aggregate', 'compress_chunks', 'custom'));
|
||||
|
||||
-- migrate reorder jobs
|
||||
UPDATE
|
||||
_timescaledb_config.bgw_job job
|
||||
SET proc_name = 'policy_reorder',
|
||||
proc_schema = '_timescaledb_internal',
|
||||
config = jsonb_build_object('hypertable_id', reorder.hypertable_id, 'index_name', reorder.hypertable_index_name),
|
||||
hypertable_id = reorder.hypertable_id,
|
||||
OWNER = (
|
||||
SELECT relowner::regrole::text
|
||||
FROM _timescaledb_catalog.hypertable ht,
|
||||
pg_class cl
|
||||
WHERE ht.id = reorder.hypertable_id
|
||||
AND cl.oid = format('%I.%I', schema_name, table_name)::regclass)
|
||||
FROM _timescaledb_config.bgw_policy_reorder reorder
|
||||
WHERE job_type = 'reorder'
|
||||
AND job.id = reorder.job_id;
|
||||
|
||||
--rewrite catalog table to not break catalog scans on tables with missingval optimization
|
||||
CLUSTER _timescaledb_config.bgw_job USING bgw_job_pkey;
|
||||
ALTER TABLE _timescaledb_config.bgw_job SET WITHOUT CLUSTER;
|
||||
|
||||
CREATE INDEX IF NOT EXISTS bgw_job_proc_hypertable_id_idx ON _timescaledb_config.bgw_job(proc_name,proc_schema,hypertable_id);
|
||||
|
||||
---Clean up constraints on hypertable catalog table ---
|
||||
ALTER TABLE _timescaledb_catalog.hypertable ADD CONSTRAINT hypertable_table_name_schema_name_key UNIQUE(table_name, schema_name);
|
||||
ALTER TABLE _timescaledb_catalog.hypertable DROP CONSTRAINT hypertable_schema_name_table_name_key;
|
||||
ALTER TABLE _timescaledb_catalog.hypertable DROP CONSTRAINT hypertable_id_schema_name_key;
|
||||
ALTER EXTENSION timescaledb DROP TABLE _timescaledb_config.bgw_policy_reorder;
|
||||
DROP TABLE _timescaledb_config.bgw_policy_reorder CASCADE;
|
||||
|
||||
|
@ -77,17 +77,23 @@ CREATE OR REPLACE VIEW timescaledb_information.drop_chunks_policies as
|
||||
INNER JOIN _timescaledb_catalog.hypertable ht ON p.hypertable_id = ht.id
|
||||
INNER JOIN _timescaledb_config.bgw_job j ON p.job_id = j.id;
|
||||
|
||||
CREATE OR REPLACE VIEW timescaledb_information.reorder_policies as
|
||||
SELECT format('%1$I.%2$I', ht.schema_name, ht.table_name)::regclass as hypertable, p.hypertable_index_name, p.job_id, j.schedule_interval,
|
||||
j.max_runtime, j.max_retries, j.retry_period
|
||||
FROM _timescaledb_config.bgw_policy_reorder p
|
||||
INNER JOIN _timescaledb_catalog.hypertable ht ON p.hypertable_id = ht.id
|
||||
INNER JOIN _timescaledb_config.bgw_job j ON p.job_id = j.id;
|
||||
CREATE OR REPLACE VIEW timescaledb_information.reorder_policies AS
|
||||
SELECT format('%1$I.%2$I', ht.schema_name, ht.table_name)::regclass AS hypertable,
|
||||
jsonb_object_field_text (j.config, 'index_name') AS hypertable_index_name,
|
||||
j.id AS job_id,
|
||||
j.schedule_interval,
|
||||
j.max_runtime,
|
||||
j.max_retries,
|
||||
j.retry_period
|
||||
FROM _timescaledb_config.bgw_job j
|
||||
INNER JOIN _timescaledb_catalog.hypertable ht ON j.hypertable_id = ht.id
|
||||
WHERE job_type = 'reorder';
|
||||
|
||||
|
||||
CREATE OR REPLACE VIEW timescaledb_information.policy_stats as
|
||||
SELECT format('%1$I.%2$I', ht.schema_name, ht.table_name)::regclass as hypertable, p.job_id, j.job_type, js.last_run_success, js.last_finish, js.last_successful_finish, js.last_start, js.next_start,
|
||||
js.total_runs, js.total_failures
|
||||
FROM (SELECT job_id, hypertable_id FROM _timescaledb_config.bgw_policy_reorder
|
||||
FROM (SELECT id AS job_id, hypertable_id FROM _timescaledb_config.bgw_job WHERE job_type IN ('reorder')
|
||||
UNION SELECT job_id, hypertable_id FROM _timescaledb_config.bgw_policy_drop_chunks
|
||||
UNION SELECT job_id, hypertable_id FROM _timescaledb_config.bgw_policy_compress_chunks
|
||||
UNION SELECT job_id, raw_hypertable_id FROM _timescaledb_catalog.continuous_agg) p
|
||||
|
@ -33,7 +33,7 @@
|
||||
#include "bgw_policy/chunk_stats.h"
|
||||
#include "bgw_policy/drop_chunks.h"
|
||||
#include "bgw_policy/compress_chunks.h"
|
||||
#include "bgw_policy/reorder.h"
|
||||
#include "bgw_policy/policy.h"
|
||||
#include "scan_iterator.h"
|
||||
|
||||
#include <cross_module_fn.h>
|
||||
@ -111,12 +111,7 @@ ts_bgw_job_owner(BgwJob *job)
|
||||
return ts_catalog_database_info_get()->owner_uid;
|
||||
case JOB_TYPE_REORDER:
|
||||
{
|
||||
BgwPolicyReorder *policy = ts_bgw_policy_reorder_find_by_job(job->fd.id);
|
||||
|
||||
if (policy == NULL)
|
||||
elog(ERROR, "reorder policy for job with id \"%d\" not found", job->fd.id);
|
||||
|
||||
return ts_rel_get_owner(ts_hypertable_id_to_relid(policy->fd.hypertable_id));
|
||||
return get_role_oid(NameStr(job->fd.owner), false);
|
||||
}
|
||||
case JOB_TYPE_DROP_CHUNKS:
|
||||
{
|
||||
@ -572,7 +567,6 @@ bgw_job_tuple_delete(TupleInfo *ti, void *data)
|
||||
ts_bgw_job_stat_delete(job_id);
|
||||
|
||||
/* Delete any policy args associated with this job */
|
||||
ts_bgw_policy_reorder_delete_row_only_by_job_id(job_id);
|
||||
ts_bgw_policy_drop_chunks_delete_row_only_by_job_id(job_id);
|
||||
ts_bgw_policy_compress_chunks_delete_row_only_by_job_id(job_id);
|
||||
|
||||
|
@ -1,5 +1,4 @@
|
||||
set(SOURCES
|
||||
${CMAKE_CURRENT_SOURCE_DIR}/reorder.c
|
||||
${CMAKE_CURRENT_SOURCE_DIR}/drop_chunks.c
|
||||
${CMAKE_CURRENT_SOURCE_DIR}/compress_chunks.c
|
||||
${CMAKE_CURRENT_SOURCE_DIR}/policy.c
|
||||
|
@ -3,26 +3,25 @@
|
||||
* Please see the included NOTICE for copyright information and
|
||||
* LICENSE-APACHE for a copy of the license.
|
||||
*/
|
||||
|
||||
#include <postgres.h>
|
||||
|
||||
#include "policy.h"
|
||||
#include "bgw_policy/reorder.h"
|
||||
#include "bgw_policy/drop_chunks.h"
|
||||
#include "bgw_policy/compress_chunks.h"
|
||||
#include "bgw/job.h"
|
||||
#include "bgw_policy/compress_chunks.h"
|
||||
#include "bgw_policy/drop_chunks.h"
|
||||
#include "policy.h"
|
||||
|
||||
void
|
||||
ts_bgw_policy_delete_by_hypertable_id(int32 hypertable_id)
|
||||
{
|
||||
List *jobs;
|
||||
ListCell *lc;
|
||||
/*
|
||||
* Because this is used in a cascaded delete from hypertable deletion, we
|
||||
* also need to delete the job. This means we don't actually call the
|
||||
* delete on the individual policy, but call the bgw_job delete function.
|
||||
*/
|
||||
void *policy = ts_bgw_policy_reorder_find_by_hypertable(hypertable_id);
|
||||
|
||||
if (policy)
|
||||
ts_bgw_job_delete_by_id(((BgwPolicyReorder *) policy)->fd.job_id);
|
||||
void *policy;
|
||||
|
||||
policy = ts_bgw_policy_drop_chunks_find_by_hypertable(hypertable_id);
|
||||
|
||||
@ -33,6 +32,13 @@ ts_bgw_policy_delete_by_hypertable_id(int32 hypertable_id)
|
||||
|
||||
if (policy)
|
||||
ts_bgw_job_delete_by_id(((BgwPolicyCompressChunks *) policy)->fd.job_id);
|
||||
|
||||
jobs = ts_bgw_job_find_by_hypertable_id(hypertable_id);
|
||||
foreach (lc, jobs)
|
||||
{
|
||||
BgwJob *job = lfirst(lc);
|
||||
ts_bgw_job_delete_by_id(job->fd.id);
|
||||
}
|
||||
}
|
||||
|
||||
/* This function does NOT cascade deletes to the bgw_job table. */
|
||||
@ -47,3 +53,11 @@ ts_bgw_policy_delete_row_only_tuple_found(TupleInfo *ti, void *const data)
|
||||
|
||||
return SCAN_CONTINUE;
|
||||
}
|
||||
|
||||
int32
|
||||
ts_bgw_policy_reorder_count()
|
||||
{
|
||||
List *jobs = ts_bgw_job_find_by_proc("policy_reorder", INTERNAL_SCHEMA_NAME);
|
||||
|
||||
return list_length(jobs);
|
||||
}
|
||||
|
@ -9,9 +9,11 @@
|
||||
|
||||
#include "scanner.h"
|
||||
#include "catalog.h"
|
||||
#include "export.h"
|
||||
|
||||
ScanTupleResult ts_bgw_policy_delete_row_only_tuple_found(TupleInfo *ti, void *const data);
|
||||
extern ScanTupleResult ts_bgw_policy_delete_row_only_tuple_found(TupleInfo *ti, void *const data);
|
||||
|
||||
void ts_bgw_policy_delete_by_hypertable_id(int32 hypertable_id);
|
||||
extern void ts_bgw_policy_delete_by_hypertable_id(int32 hypertable_id);
|
||||
extern int32 ts_bgw_policy_reorder_count(void);
|
||||
|
||||
#endif /* TIMESCALEDB_BGW_POLICY_POLICY_H */
|
||||
|
@ -1,149 +0,0 @@
|
||||
/*
|
||||
* This file and its contents are licensed under the Apache License 2.0.
|
||||
* Please see the included NOTICE for copyright information and
|
||||
* LICENSE-APACHE for a copy of the license.
|
||||
*/
|
||||
|
||||
#include <postgres.h>
|
||||
#include <utils/builtins.h>
|
||||
#include <utils/timestamp.h>
|
||||
#include <utils/lsyscache.h>
|
||||
#include <utils/syscache.h>
|
||||
|
||||
#include "catalog.h"
|
||||
#include "policy.h"
|
||||
#include "reorder.h"
|
||||
#include "scanner.h"
|
||||
#include "utils.h"
|
||||
#include "hypertable.h"
|
||||
#include "bgw/job.h"
|
||||
#include "scan_iterator.h"
|
||||
|
||||
#include "compat.h"
|
||||
|
||||
static ScanTupleResult
|
||||
bgw_policy_reorder_tuple_found(TupleInfo *ti, void *const data)
|
||||
{
|
||||
BgwPolicyReorder **policy = data;
|
||||
|
||||
*policy = STRUCT_FROM_SLOT(ti->slot, ti->mctx, BgwPolicyReorder, FormData_bgw_policy_reorder);
|
||||
|
||||
return SCAN_CONTINUE;
|
||||
}
|
||||
|
||||
/*
|
||||
* To prevent infinite recursive calls from the job <-> policy tables, we do not cascade deletes in
|
||||
* this function. Instead, the caller must be responsible for making sure that the delete cascades
|
||||
* to the job corresponding to this policy.
|
||||
*/
|
||||
bool
|
||||
ts_bgw_policy_reorder_delete_row_only_by_job_id(int32 job_id)
|
||||
{
|
||||
ScanKeyData scankey[1];
|
||||
|
||||
ScanKeyInit(&scankey[0],
|
||||
Anum_bgw_policy_reorder_pkey_idx_job_id,
|
||||
BTEqualStrategyNumber,
|
||||
F_INT4EQ,
|
||||
Int32GetDatum(job_id));
|
||||
|
||||
return ts_catalog_scan_one(BGW_POLICY_REORDER,
|
||||
BGW_POLICY_REORDER_PKEY_IDX,
|
||||
scankey,
|
||||
1,
|
||||
ts_bgw_policy_delete_row_only_tuple_found,
|
||||
RowExclusiveLock,
|
||||
BGW_POLICY_REORDER_TABLE_NAME,
|
||||
NULL);
|
||||
}
|
||||
|
||||
BgwPolicyReorder *
|
||||
ts_bgw_policy_reorder_find_by_job(int32 job_id)
|
||||
{
|
||||
ScanKeyData scankey[1];
|
||||
BgwPolicyReorder *ret = NULL;
|
||||
|
||||
ScanKeyInit(&scankey[0],
|
||||
Anum_bgw_policy_reorder_pkey_idx_job_id,
|
||||
BTEqualStrategyNumber,
|
||||
F_INT4EQ,
|
||||
Int32GetDatum(job_id));
|
||||
|
||||
ts_catalog_scan_one(BGW_POLICY_REORDER,
|
||||
BGW_POLICY_REORDER_PKEY_IDX,
|
||||
scankey,
|
||||
1,
|
||||
bgw_policy_reorder_tuple_found,
|
||||
AccessShareLock,
|
||||
BGW_POLICY_REORDER_TABLE_NAME,
|
||||
(void *) &ret);
|
||||
|
||||
return ret;
|
||||
}
|
||||
|
||||
BgwPolicyReorder *
|
||||
ts_bgw_policy_reorder_find_by_hypertable(int32 hypertable_id)
|
||||
{
|
||||
ScanKeyData scankey[1];
|
||||
BgwPolicyReorder *ret = NULL;
|
||||
|
||||
ScanKeyInit(&scankey[0],
|
||||
Anum_bgw_policy_reorder_hypertable_id_idx_hypertable_id,
|
||||
BTEqualStrategyNumber,
|
||||
F_INT4EQ,
|
||||
Int32GetDatum(hypertable_id));
|
||||
|
||||
ts_catalog_scan_one(BGW_POLICY_REORDER,
|
||||
BGW_POLICY_REORDER_HYPERTABLE_ID_IDX,
|
||||
scankey,
|
||||
1,
|
||||
bgw_policy_reorder_tuple_found,
|
||||
AccessShareLock,
|
||||
BGW_POLICY_REORDER_TABLE_NAME,
|
||||
(void *) &ret);
|
||||
|
||||
return ret;
|
||||
}
|
||||
|
||||
static void
|
||||
ts_bgw_policy_reorder_insert_with_relation(Relation rel, BgwPolicyReorder *policy)
|
||||
{
|
||||
TupleDesc tupdesc;
|
||||
CatalogSecurityContext sec_ctx;
|
||||
Datum values[Natts_bgw_policy_reorder];
|
||||
bool nulls[Natts_bgw_policy_reorder] = { false };
|
||||
|
||||
tupdesc = RelationGetDescr(rel);
|
||||
|
||||
values[AttrNumberGetAttrOffset(Anum_bgw_policy_reorder_job_id)] =
|
||||
Int32GetDatum(policy->fd.job_id);
|
||||
values[AttrNumberGetAttrOffset(Anum_bgw_policy_reorder_hypertable_id)] =
|
||||
Int32GetDatum(policy->fd.hypertable_id);
|
||||
values[AttrNumberGetAttrOffset(Anum_bgw_policy_reorder_hypertable_index_name)] =
|
||||
NameGetDatum(&policy->fd.hypertable_index_name);
|
||||
|
||||
ts_catalog_database_info_become_owner(ts_catalog_database_info_get(), &sec_ctx);
|
||||
ts_catalog_insert_values(rel, tupdesc, values, nulls);
|
||||
ts_catalog_restore_user(&sec_ctx);
|
||||
}
|
||||
|
||||
void
|
||||
ts_bgw_policy_reorder_insert(BgwPolicyReorder *policy)
|
||||
{
|
||||
Catalog *catalog = ts_catalog_get();
|
||||
Relation rel = table_open(catalog_get_table_id(catalog, BGW_POLICY_REORDER), RowExclusiveLock);
|
||||
|
||||
ts_bgw_policy_reorder_insert_with_relation(rel, policy);
|
||||
table_close(rel, RowExclusiveLock);
|
||||
}
|
||||
|
||||
TSDLLEXPORT int32
|
||||
ts_bgw_policy_reorder_count()
|
||||
{
|
||||
int32 count = 0;
|
||||
ScanIterator iterator =
|
||||
ts_scan_iterator_create(BGW_POLICY_REORDER, AccessShareLock, CurrentMemoryContext);
|
||||
ts_scanner_foreach(&iterator) { count++; }
|
||||
|
||||
return count;
|
||||
}
|
@ -1,24 +0,0 @@
|
||||
/*
|
||||
* This file and its contents are licensed under the Apache License 2.0.
|
||||
* Please see the included NOTICE for copyright information and
|
||||
* LICENSE-APACHE for a copy of the license.
|
||||
*/
|
||||
|
||||
#ifndef TIMESCALEDB_BGW_POLICY_REORDER_H
|
||||
#define TIMESCALEDB_BGW_POLICY_REORDER_H
|
||||
|
||||
#include "catalog.h"
|
||||
#include "export.h"
|
||||
|
||||
typedef struct BgwPolicyReorder
|
||||
{
|
||||
FormData_bgw_policy_reorder fd;
|
||||
} BgwPolicyReorder;
|
||||
|
||||
extern TSDLLEXPORT BgwPolicyReorder *ts_bgw_policy_reorder_find_by_job(int32 job_id);
|
||||
extern TSDLLEXPORT BgwPolicyReorder *ts_bgw_policy_reorder_find_by_hypertable(int32 hypertable_id);
|
||||
extern TSDLLEXPORT void ts_bgw_policy_reorder_insert(BgwPolicyReorder *policy);
|
||||
extern TSDLLEXPORT bool ts_bgw_policy_reorder_delete_row_only_by_job_id(int32 job_id);
|
||||
extern TSDLLEXPORT int32 ts_bgw_policy_reorder_count(void);
|
||||
|
||||
#endif /* TIMESCALEDB_BGW_POLICY_REORDER_H */
|
@ -71,10 +71,6 @@ static const TableInfoDef catalog_table_names[_MAX_CATALOG_TABLES + 1] = {
|
||||
.schema_name = CATALOG_SCHEMA_NAME,
|
||||
.table_name = METADATA_TABLE_NAME,
|
||||
},
|
||||
[BGW_POLICY_REORDER] = {
|
||||
.schema_name = CONFIG_SCHEMA_NAME,
|
||||
.table_name = BGW_POLICY_REORDER_TABLE_NAME,
|
||||
},
|
||||
[BGW_POLICY_DROP_CHUNKS] = {
|
||||
.schema_name = CONFIG_SCHEMA_NAME,
|
||||
.table_name = BGW_POLICY_DROP_CHUNKS_TABLE_NAME,
|
||||
@ -210,13 +206,6 @@ static const TableIndexDef catalog_table_index_definitions[_MAX_CATALOG_TABLES]
|
||||
[METADATA_PKEY_IDX] = "metadata_pkey",
|
||||
},
|
||||
},
|
||||
[BGW_POLICY_REORDER] = {
|
||||
.length = _MAX_BGW_POLICY_REORDER_INDEX,
|
||||
.names = (char *[]) {
|
||||
[BGW_POLICY_REORDER_PKEY_IDX] = "bgw_policy_reorder_pkey",
|
||||
[BGW_POLICY_REORDER_HYPERTABLE_ID_IDX] = "bgw_policy_reorder_hypertable_id_key",
|
||||
},
|
||||
},
|
||||
[BGW_POLICY_DROP_CHUNKS] = {
|
||||
.length = _MAX_BGW_POLICY_DROP_CHUNKS_INDEX,
|
||||
.names = (char *[]) {
|
||||
@ -304,7 +293,6 @@ static const char *catalog_table_serial_id_names[_MAX_CATALOG_TABLES] = {
|
||||
[TABLESPACE] = CATALOG_SCHEMA_NAME ".tablespace_id_seq",
|
||||
[BGW_JOB] = CONFIG_SCHEMA_NAME ".bgw_job_id_seq",
|
||||
[BGW_JOB_STAT] = NULL,
|
||||
[BGW_POLICY_REORDER] = NULL,
|
||||
[BGW_POLICY_DROP_CHUNKS] = NULL,
|
||||
[CONTINUOUS_AGGS_COMPLETED_THRESHOLD] = NULL,
|
||||
[CONTINUOUS_AGGS_HYPERTABLE_INVALIDATION_LOG] = NULL,
|
||||
|
@ -46,7 +46,6 @@ typedef enum CatalogTable
|
||||
BGW_JOB,
|
||||
BGW_JOB_STAT,
|
||||
METADATA,
|
||||
BGW_POLICY_REORDER,
|
||||
BGW_POLICY_DROP_CHUNKS,
|
||||
BGW_POLICY_CHUNK_STATS,
|
||||
CONTINUOUS_AGG,
|
||||
@ -806,57 +805,6 @@ enum
|
||||
_MAX_METADATA_INDEX,
|
||||
};
|
||||
|
||||
/****** BGW_POLICY_REORDER TABLE definitions */
|
||||
#define BGW_POLICY_REORDER_TABLE_NAME "bgw_policy_reorder"
|
||||
|
||||
enum Anum_bgw_policy_reorder
|
||||
{
|
||||
Anum_bgw_policy_reorder_job_id = 1,
|
||||
Anum_bgw_policy_reorder_hypertable_id,
|
||||
Anum_bgw_policy_reorder_hypertable_index_name,
|
||||
_Anum_bgw_policy_reorder_max,
|
||||
};
|
||||
|
||||
#define Natts_bgw_policy_reorder (_Anum_bgw_policy_reorder_max - 1)
|
||||
|
||||
typedef struct FormData_bgw_policy_reorder
|
||||
{
|
||||
int32 job_id;
|
||||
int32 hypertable_id;
|
||||
NameData hypertable_index_name;
|
||||
} FormData_bgw_policy_reorder;
|
||||
|
||||
typedef FormData_bgw_policy_reorder *Form_bgw_policy_reorder;
|
||||
|
||||
enum
|
||||
{
|
||||
BGW_POLICY_REORDER_PKEY_IDX = 0,
|
||||
BGW_POLICY_REORDER_HYPERTABLE_ID_IDX,
|
||||
_MAX_BGW_POLICY_REORDER_INDEX,
|
||||
};
|
||||
|
||||
enum Anum_bgw_policy_reorder_pkey_idx
|
||||
{
|
||||
Anum_bgw_policy_reorder_pkey_idx_job_id = 1,
|
||||
_Anum_bgw_policy_reorder_pkey_idx_max,
|
||||
};
|
||||
|
||||
typedef struct FormData_bgw_policy_reorder_pkey_idx
|
||||
{
|
||||
int32 job_id;
|
||||
} FormData_bgw_policy_reorder_pkey_idx;
|
||||
|
||||
enum Anum_bgw_policy_reorder_hypertable_id_idx
|
||||
{
|
||||
Anum_bgw_policy_reorder_hypertable_id_idx_hypertable_id = 1,
|
||||
_Anum_bgw_policy_reorder_hypertable_id_idx_max,
|
||||
};
|
||||
|
||||
typedef struct FormData_bgw_policy_reorder_hypertable_id_idx
|
||||
{
|
||||
int32 hypertable_id;
|
||||
} FormData_bgw_policy_reorder_hypertable_id_idx;
|
||||
|
||||
/******************************************
|
||||
*
|
||||
* bgw_policy_drop_chunks table definitions
|
||||
|
@ -23,11 +23,13 @@
|
||||
/* bgw policy functions */
|
||||
CROSSMODULE_WRAPPER(add_compress_chunks_policy);
|
||||
CROSSMODULE_WRAPPER(add_drop_chunks_policy);
|
||||
CROSSMODULE_WRAPPER(add_reorder_policy);
|
||||
CROSSMODULE_WRAPPER(policy_reorder_add);
|
||||
CROSSMODULE_WRAPPER(policy_reorder_proc);
|
||||
CROSSMODULE_WRAPPER(policy_reorder_remove);
|
||||
CROSSMODULE_WRAPPER(alter_job_schedule);
|
||||
CROSSMODULE_WRAPPER(remove_compress_chunks_policy);
|
||||
CROSSMODULE_WRAPPER(remove_drop_chunks_policy);
|
||||
CROSSMODULE_WRAPPER(remove_reorder_policy);
|
||||
|
||||
CROSSMODULE_WRAPPER(reorder_chunk);
|
||||
CROSSMODULE_WRAPPER(move_chunk);
|
||||
|
||||
@ -335,13 +337,15 @@ TSDLLEXPORT CrossModuleFunctions ts_cm_functions_default = {
|
||||
/* bgw policies */
|
||||
.add_compress_chunks_policy = error_no_default_fn_pg_community,
|
||||
.add_drop_chunks_policy = error_no_default_fn_pg_community,
|
||||
.add_reorder_policy = error_no_default_fn_pg_community,
|
||||
.policy_reorder_add = error_no_default_fn_pg_community,
|
||||
.policy_reorder_proc = error_no_default_fn_pg_community,
|
||||
.policy_reorder_remove = error_no_default_fn_pg_community,
|
||||
.alter_job_schedule = error_no_default_fn_pg_community,
|
||||
.bgw_policy_job_execute = bgw_policy_job_execute_default_fn,
|
||||
.move_chunk = error_no_default_fn_pg_enterprise,
|
||||
.remove_compress_chunks_policy = error_no_default_fn_pg_community,
|
||||
.remove_drop_chunks_policy = error_no_default_fn_pg_community,
|
||||
.remove_reorder_policy = error_no_default_fn_pg_community,
|
||||
|
||||
.move_chunk = error_no_default_fn_pg_enterprise,
|
||||
.reorder_chunk = error_no_default_fn_pg_community,
|
||||
|
||||
.partialize_agg = error_no_default_fn_pg_community,
|
||||
|
@ -47,18 +47,23 @@ typedef struct CrossModuleFunctions
|
||||
void (*add_tsl_telemetry_info)(JsonbParseState **parseState);
|
||||
bool (*bgw_policy_job_execute)(BgwJob *job);
|
||||
bool (*continuous_agg_materialize)(int32 materialization_id, ContinuousAggMatOptions *options);
|
||||
Datum (*add_drop_chunks_policy)(PG_FUNCTION_ARGS);
|
||||
Datum (*add_reorder_policy)(PG_FUNCTION_ARGS);
|
||||
Datum (*add_compress_chunks_policy)(PG_FUNCTION_ARGS);
|
||||
Datum (*remove_drop_chunks_policy)(PG_FUNCTION_ARGS);
|
||||
Datum (*remove_reorder_policy)(PG_FUNCTION_ARGS);
|
||||
Datum (*remove_compress_chunks_policy)(PG_FUNCTION_ARGS);
|
||||
|
||||
PGFunction add_drop_chunks_policy;
|
||||
PGFunction policy_reorder_add;
|
||||
PGFunction policy_reorder_proc;
|
||||
PGFunction policy_reorder_remove;
|
||||
PGFunction add_compress_chunks_policy;
|
||||
PGFunction remove_drop_chunks_policy;
|
||||
PGFunction remove_compress_chunks_policy;
|
||||
|
||||
void (*create_upper_paths_hook)(PlannerInfo *, UpperRelationKind, RelOptInfo *, RelOptInfo *,
|
||||
TsRelType input_reltype, Hypertable *ht, void *extra);
|
||||
void (*set_rel_pathlist_dml)(PlannerInfo *, RelOptInfo *, Index, RangeTblEntry *, Hypertable *);
|
||||
void (*set_rel_pathlist_query)(PlannerInfo *, RelOptInfo *, Index, RangeTblEntry *,
|
||||
Hypertable *);
|
||||
void (*set_rel_pathlist)(PlannerInfo *root, RelOptInfo *rel, Index rti, RangeTblEntry *rte);
|
||||
|
||||
/* gapfill */
|
||||
PGFunction gapfill_marker;
|
||||
PGFunction gapfill_int16_time_bucket;
|
||||
PGFunction gapfill_int32_time_bucket;
|
||||
@ -66,6 +71,7 @@ typedef struct CrossModuleFunctions
|
||||
PGFunction gapfill_date_time_bucket;
|
||||
PGFunction gapfill_timestamp_time_bucket;
|
||||
PGFunction gapfill_timestamptz_time_bucket;
|
||||
|
||||
PGFunction alter_job_schedule;
|
||||
PGFunction reorder_chunk;
|
||||
PGFunction move_chunk;
|
||||
|
@ -56,6 +56,26 @@ ts_jsonb_add_int32(JsonbParseState *state, const char *key, const int32 int_valu
|
||||
ts_jsonb_add_numeric(state, key, value);
|
||||
}
|
||||
|
||||
void
|
||||
ts_jsonb_add_int64(JsonbParseState *state, const char *key, const int64 int_value)
|
||||
{
|
||||
Numeric value;
|
||||
|
||||
value = DatumGetNumeric(DirectFunctionCall1(int4_numeric, Int64GetDatum(int_value)));
|
||||
|
||||
ts_jsonb_add_numeric(state, key, value);
|
||||
}
|
||||
|
||||
void
|
||||
ts_jsonb_add_interval(JsonbParseState *state, const char *key, Interval *interval)
|
||||
{
|
||||
char *value;
|
||||
|
||||
value = DatumGetCString(DirectFunctionCall1(interval_out, IntervalPGetDatum(interval)));
|
||||
|
||||
ts_jsonb_add_str(state, key, value);
|
||||
}
|
||||
|
||||
void
|
||||
ts_jsonb_add_numeric(JsonbParseState *state, const char *key, const Numeric value)
|
||||
{
|
||||
@ -153,3 +173,35 @@ ts_jsonb_get_int32_field(Jsonb *json, const char *key, bool *field_found)
|
||||
*field_found = true;
|
||||
return DatumGetInt32(int_datum);
|
||||
}
|
||||
|
||||
int64
|
||||
ts_jsonb_get_int64_field(Jsonb *json, const char *key, bool *field_found)
|
||||
{
|
||||
Datum int_datum;
|
||||
char *int_str = ts_jsonb_get_str_field(json, key);
|
||||
|
||||
if (int_str == NULL)
|
||||
{
|
||||
*field_found = false;
|
||||
return 0;
|
||||
}
|
||||
|
||||
int_datum = DirectFunctionCall1(int8in, CStringGetDatum(int_str));
|
||||
|
||||
*field_found = true;
|
||||
return DatumGetInt64(int_datum);
|
||||
}
|
||||
|
||||
Interval *
|
||||
ts_jsonb_get_interval_field(Jsonb *json, const char *key)
|
||||
{
|
||||
Datum interval_datum;
|
||||
char *interval_str = ts_jsonb_get_str_field(json, key);
|
||||
|
||||
if (interval_str == NULL)
|
||||
return NULL;
|
||||
|
||||
interval_datum = DirectFunctionCall3(interval_in, CStringGetDatum("1 day"), InvalidOid, -1);
|
||||
|
||||
return DatumGetIntervalP(interval_datum);
|
||||
}
|
||||
|
@ -15,16 +15,22 @@
|
||||
extern TSDLLEXPORT void ts_jsonb_add_bool(JsonbParseState *state, const char *key, bool boolean);
|
||||
extern TSDLLEXPORT void ts_jsonb_add_str(JsonbParseState *state, const char *key,
|
||||
const char *value);
|
||||
extern TSDLLEXPORT void ts_jsonb_add_interval(JsonbParseState *state, const char *key,
|
||||
Interval *value);
|
||||
extern TSDLLEXPORT void ts_jsonb_add_int32(JsonbParseState *state, const char *key,
|
||||
const int32 value);
|
||||
extern TSDLLEXPORT void ts_jsonb_add_int64(JsonbParseState *state, const char *key,
|
||||
const int64 value);
|
||||
extern TSDLLEXPORT void ts_jsonb_add_numeric(JsonbParseState *state, const char *key,
|
||||
const Numeric value);
|
||||
|
||||
extern void ts_jsonb_add_value(JsonbParseState *state, const char *key, JsonbValue *value);
|
||||
|
||||
extern TSDLLEXPORT char *ts_jsonb_get_str_field(Jsonb *jsonb, const char *key);
|
||||
extern TSDLLEXPORT Interval *ts_jsonb_get_interval_field(Jsonb *jsonb, const char *key);
|
||||
extern TSDLLEXPORT TimestampTz ts_jsonb_get_time_field(Jsonb *jsonb, const char *key,
|
||||
bool *field_found);
|
||||
extern TSDLLEXPORT int32 ts_jsonb_get_int32_field(Jsonb *json, const char *key, bool *field_found);
|
||||
extern TSDLLEXPORT int64 ts_jsonb_get_int64_field(Jsonb *json, const char *key, bool *field_found);
|
||||
|
||||
#endif /* TIMESCALEDB_JSONB_UTILS_H */
|
||||
|
@ -25,7 +25,7 @@
|
||||
#include "jsonb_utils.h"
|
||||
#include "license_guc.h"
|
||||
#include "bgw_policy/drop_chunks.h"
|
||||
#include "bgw_policy/reorder.h"
|
||||
#include "bgw_policy/policy.h"
|
||||
#include "compression_chunk_size.h"
|
||||
|
||||
#include "cross_module_fn.h"
|
||||
|
@ -25,7 +25,7 @@
|
||||
#include "bgw_policy/chunk_stats.h"
|
||||
#include "bgw_policy/drop_chunks.h"
|
||||
#include "bgw_policy/compress_chunks.h"
|
||||
#include "bgw_policy/reorder.h"
|
||||
#include "bgw_policy/reorder_api.h"
|
||||
#include "compression/compress_utils.h"
|
||||
#include "continuous_aggs/materialize.h"
|
||||
#include "continuous_aggs/job.h"
|
||||
@ -104,14 +104,12 @@ get_chunk_to_compress(Hypertable *ht, FormData_ts_interval *older_than)
|
||||
}
|
||||
|
||||
bool
|
||||
execute_reorder_policy(BgwJob *job, reorder_func reorder, bool fast_continue)
|
||||
execute_reorder_policy(int32 job_id, Jsonb *config, reorder_func reorder, bool fast_continue)
|
||||
{
|
||||
int chunk_id;
|
||||
bool started = false;
|
||||
BgwPolicyReorder *args;
|
||||
Hypertable *ht;
|
||||
Chunk *chunk;
|
||||
int32 job_id = job->fd.id;
|
||||
|
||||
if (!IsTransactionOrTransactionBlock())
|
||||
{
|
||||
@ -119,19 +117,10 @@ execute_reorder_policy(BgwJob *job, reorder_func reorder, bool fast_continue)
|
||||
StartTransactionCommand();
|
||||
}
|
||||
|
||||
/* Get the arguments from the reorder_policy table */
|
||||
args = ts_bgw_policy_reorder_find_by_job(job_id);
|
||||
|
||||
if (args == NULL)
|
||||
ereport(ERROR,
|
||||
(errcode(ERRCODE_TS_INTERNAL_ERROR),
|
||||
errmsg("could not run reorder policy #%d because no args in policy table",
|
||||
job_id)));
|
||||
|
||||
ht = ts_hypertable_get_by_id(args->fd.hypertable_id);
|
||||
ht = ts_hypertable_get_by_id(policy_reorder_get_hypertable_id(config));
|
||||
|
||||
/* Find a chunk to reorder in the selected hypertable */
|
||||
chunk_id = get_chunk_id_to_reorder(args->fd.job_id, ht);
|
||||
chunk_id = get_chunk_id_to_reorder(job_id, ht);
|
||||
|
||||
if (chunk_id == -1)
|
||||
{
|
||||
@ -150,7 +139,7 @@ execute_reorder_policy(BgwJob *job, reorder_func reorder, bool fast_continue)
|
||||
chunk = ts_chunk_get_by_id(chunk_id, false);
|
||||
elog(LOG, "reordering chunk %s.%s", chunk->fd.schema_name.data, chunk->fd.table_name.data);
|
||||
reorder(chunk->table_id,
|
||||
get_relname_relid(NameStr(args->fd.hypertable_index_name),
|
||||
get_relname_relid(policy_reorder_get_index_name(config),
|
||||
get_namespace_oid(NameStr(ht->fd.schema_name), false)),
|
||||
false,
|
||||
InvalidOid,
|
||||
@ -162,12 +151,13 @@ execute_reorder_policy(BgwJob *job, reorder_func reorder, bool fast_continue)
|
||||
chunk->fd.table_name.data);
|
||||
|
||||
/* Now update chunk_stats table */
|
||||
ts_bgw_policy_chunk_stats_record_job_run(args->fd.job_id,
|
||||
chunk_id,
|
||||
ts_timer_get_current_timestamp());
|
||||
ts_bgw_policy_chunk_stats_record_job_run(job_id, chunk_id, ts_timer_get_current_timestamp());
|
||||
|
||||
if (fast_continue && get_chunk_id_to_reorder(args->fd.job_id, ht) != -1)
|
||||
if (fast_continue && get_chunk_id_to_reorder(job_id, ht) != -1)
|
||||
{
|
||||
BgwJob *job = ts_bgw_job_find(job_id, CurrentMemoryContext, true);
|
||||
enable_fast_restart(job, "reorder");
|
||||
}
|
||||
|
||||
commit:
|
||||
if (started)
|
||||
@ -397,7 +387,7 @@ tsl_bgw_policy_job_execute(BgwJob *job)
|
||||
switch (job->bgw_type)
|
||||
{
|
||||
case JOB_TYPE_REORDER:
|
||||
return execute_reorder_policy(job, reorder_chunk, true);
|
||||
return execute_reorder_policy(job->fd.id, job->fd.config, reorder_chunk, true);
|
||||
case JOB_TYPE_DROP_CHUNKS:
|
||||
return execute_drop_chunks_policy(job->fd.id);
|
||||
case JOB_TYPE_CONTINUOUS_AGGREGATE:
|
||||
|
@ -18,7 +18,8 @@ typedef void (*reorder_func)(Oid tableOid, Oid indexOid, bool verbose, Oid wait_
|
||||
Oid destination_tablespace, Oid index_tablespace);
|
||||
|
||||
/* Functions exposed only for testing */
|
||||
extern bool execute_reorder_policy(BgwJob *job, reorder_func reorder, bool fast_continue);
|
||||
extern bool execute_reorder_policy(int32 job_id, Jsonb *config, reorder_func reorder,
|
||||
bool fast_continue);
|
||||
extern bool execute_drop_chunks_policy(int32 job_id);
|
||||
extern bool execute_compress_chunks_policy(BgwJob *job);
|
||||
extern bool tsl_bgw_policy_job_execute(BgwJob *job);
|
||||
|
@ -14,16 +14,17 @@
|
||||
#include <utils/syscache.h>
|
||||
#include <miscadmin.h>
|
||||
|
||||
#include <compat.h>
|
||||
#include <dimension.h>
|
||||
|
||||
#include "compat.h"
|
||||
#include <jsonb_utils.h>
|
||||
|
||||
#include "bgw/job.h"
|
||||
#include "bgw_policy/reorder.h"
|
||||
#include "bgw_policy/job.h"
|
||||
#include "bgw_policy/reorder_api.h"
|
||||
#include "errors.h"
|
||||
#include "hypertable.h"
|
||||
#include "license.h"
|
||||
#include "reorder_api.h"
|
||||
#include "reorder.h"
|
||||
#include "utils.h"
|
||||
|
||||
/*
|
||||
@ -32,7 +33,10 @@
|
||||
* the default is 4 days, which is approximately 1/2 of the default chunk size, 7 days.
|
||||
*/
|
||||
#define DEFAULT_SCHEDULE_INTERVAL \
|
||||
DatumGetIntervalP(DirectFunctionCall3(interval_in, CStringGetDatum("4 days"), InvalidOid, -1))
|
||||
{ \
|
||||
.day = 4 \
|
||||
}
|
||||
|
||||
/* Default max runtime for a reorder job is unlimited for now */
|
||||
#define DEFAULT_MAX_RUNTIME \
|
||||
DatumGetIntervalP(DirectFunctionCall3(interval_in, CStringGetDatum("0"), InvalidOid, -1))
|
||||
@ -42,6 +46,41 @@
|
||||
#define DEFAULT_RETRY_PERIOD \
|
||||
DatumGetIntervalP(DirectFunctionCall3(interval_in, CStringGetDatum("5 min"), InvalidOid, -1))
|
||||
|
||||
#define CONFIG_KEY_HYPERTABLE_ID "hypertable_id"
|
||||
#define CONFIG_KEY_INDEX_NAME "index_name"
|
||||
|
||||
#define POLICY_REORDER_PROC_NAME "policy_reorder"
|
||||
|
||||
int32
|
||||
policy_reorder_get_hypertable_id(Jsonb *config)
|
||||
{
|
||||
bool found;
|
||||
int32 hypertable_id = ts_jsonb_get_int32_field(config, CONFIG_KEY_HYPERTABLE_ID, &found);
|
||||
|
||||
if (!found)
|
||||
ereport(ERROR,
|
||||
(errcode(ERRCODE_INTERNAL_ERROR),
|
||||
errmsg("could not find hypertable_id in config for job")));
|
||||
|
||||
return hypertable_id;
|
||||
}
|
||||
|
||||
char *
|
||||
policy_reorder_get_index_name(Jsonb *config)
|
||||
{
|
||||
char *index_name = NULL;
|
||||
|
||||
if (config != NULL)
|
||||
index_name = ts_jsonb_get_str_field(config, CONFIG_KEY_INDEX_NAME);
|
||||
|
||||
if (index_name == NULL)
|
||||
ereport(ERROR,
|
||||
(errcode(ERRCODE_INTERNAL_ERROR),
|
||||
errmsg("could not find index_name in config for job")));
|
||||
|
||||
return index_name;
|
||||
}
|
||||
|
||||
static void
|
||||
check_valid_index(Hypertable *ht, Name index_name)
|
||||
{
|
||||
@ -67,16 +106,26 @@ check_valid_index(Hypertable *ht, Name index_name)
|
||||
}
|
||||
|
||||
Datum
|
||||
reorder_add_policy(PG_FUNCTION_ARGS)
|
||||
policy_reorder_proc(PG_FUNCTION_ARGS)
|
||||
{
|
||||
int32 job_id = PG_GETARG_INT32(0);
|
||||
Jsonb *config = PG_GETARG_JSONB_P(1);
|
||||
|
||||
execute_reorder_policy(job_id, config, reorder_chunk, true);
|
||||
|
||||
PG_RETURN_VOID();
|
||||
}
|
||||
|
||||
Datum
|
||||
policy_reorder_add(PG_FUNCTION_ARGS)
|
||||
{
|
||||
NameData application_name;
|
||||
NameData reorder_name;
|
||||
NameData proc_name, proc_schema, owner;
|
||||
int32 job_id;
|
||||
BgwPolicyReorder *existing;
|
||||
Dimension *dim;
|
||||
|
||||
Interval *default_schedule_interval = DEFAULT_SCHEDULE_INTERVAL;
|
||||
Interval schedule_interval = DEFAULT_SCHEDULE_INTERVAL;
|
||||
Oid ht_oid = PG_GETARG_OID(0);
|
||||
Name index_name = PG_GETARG_NAME(1);
|
||||
bool if_not_exists = PG_GETARG_BOOL(2);
|
||||
@ -84,11 +133,7 @@ reorder_add_policy(PG_FUNCTION_ARGS)
|
||||
Hypertable *ht = ts_hypertable_get_by_id(hypertable_id);
|
||||
Oid partitioning_type;
|
||||
Oid owner_id;
|
||||
|
||||
BgwPolicyReorder policy = { .fd = {
|
||||
.hypertable_id = hypertable_id,
|
||||
.hypertable_index_name = *index_name,
|
||||
} };
|
||||
List *jobs;
|
||||
|
||||
owner_id = ts_hypertable_permissions_check(ht_oid, GetUserId());
|
||||
|
||||
@ -105,11 +150,16 @@ reorder_add_policy(PG_FUNCTION_ARGS)
|
||||
/* Verify that the hypertable owner can create a background worker */
|
||||
ts_bgw_job_validate_job_owner(owner_id, JOB_TYPE_REORDER);
|
||||
|
||||
/* Make sure that an existing policy doesn't exist on this hypertable */
|
||||
existing = ts_bgw_policy_reorder_find_by_hypertable(ts_hypertable_relid_to_id(ht_oid));
|
||||
/* Make sure that an existing reorder policy doesn't exist on this hypertable */
|
||||
jobs = ts_bgw_job_find_by_proc_and_hypertable_id(POLICY_REORDER_PROC_NAME,
|
||||
INTERNAL_SCHEMA_NAME,
|
||||
ht->fd.id);
|
||||
|
||||
if (existing != NULL)
|
||||
if (jobs != NIL)
|
||||
{
|
||||
BgwJob *existing = linitial(jobs);
|
||||
Assert(list_length(jobs) == 1);
|
||||
|
||||
if (!if_not_exists)
|
||||
ereport(ERROR,
|
||||
(errcode(ERRCODE_DUPLICATE_OBJECT),
|
||||
@ -118,7 +168,8 @@ reorder_add_policy(PG_FUNCTION_ARGS)
|
||||
|
||||
if (!DatumGetBool(DirectFunctionCall2Coll(nameeq,
|
||||
C_COLLATION_OID,
|
||||
NameGetDatum(&existing->fd.hypertable_index_name),
|
||||
CStringGetDatum(policy_reorder_get_index_name(
|
||||
existing->fd.config)),
|
||||
NameGetDatum(index_name))))
|
||||
{
|
||||
elog(WARNING,
|
||||
@ -136,8 +187,8 @@ reorder_add_policy(PG_FUNCTION_ARGS)
|
||||
/* Next, insert a new job into jobs table */
|
||||
namestrcpy(&application_name, "Reorder Background Job");
|
||||
namestrcpy(&reorder_name, "reorder");
|
||||
namestrcpy(&proc_name, "");
|
||||
namestrcpy(&proc_schema, "");
|
||||
namestrcpy(&proc_name, POLICY_REORDER_PROC_NAME);
|
||||
namestrcpy(&proc_schema, INTERNAL_SCHEMA_NAME);
|
||||
namestrcpy(&owner, GetUserNameFromId(owner_id, false));
|
||||
|
||||
/*
|
||||
@ -148,19 +199,23 @@ reorder_add_policy(PG_FUNCTION_ARGS)
|
||||
|
||||
partitioning_type = ts_dimension_get_partition_type(dim);
|
||||
if (dim && IS_TIMESTAMP_TYPE(partitioning_type))
|
||||
default_schedule_interval = DatumGetIntervalP(
|
||||
DirectFunctionCall7(make_interval,
|
||||
Int32GetDatum(0),
|
||||
Int32GetDatum(0),
|
||||
Int32GetDatum(0),
|
||||
Int32GetDatum(0),
|
||||
Int32GetDatum(0),
|
||||
Int32GetDatum(0),
|
||||
Float8GetDatum(dim->fd.interval_length / 2000000)));
|
||||
{
|
||||
schedule_interval.time = dim->fd.interval_length / 2;
|
||||
schedule_interval.day = 0;
|
||||
schedule_interval.month = 0;
|
||||
}
|
||||
|
||||
JsonbParseState *parseState = NULL;
|
||||
|
||||
pushJsonbValue(&parseState, WJB_BEGIN_OBJECT, NULL);
|
||||
ts_jsonb_add_int32(parseState, CONFIG_KEY_HYPERTABLE_ID, ht->fd.id);
|
||||
ts_jsonb_add_str(parseState, CONFIG_KEY_INDEX_NAME, NameStr(*index_name));
|
||||
JsonbValue *result = pushJsonbValue(&parseState, WJB_END_OBJECT, NULL);
|
||||
Jsonb *config = JsonbValueToJsonb(result);
|
||||
|
||||
job_id = ts_bgw_job_insert_relation(&application_name,
|
||||
&reorder_name,
|
||||
default_schedule_interval,
|
||||
&schedule_interval,
|
||||
DEFAULT_MAX_RUNTIME,
|
||||
DEFAULT_MAX_RETRIES,
|
||||
DEFAULT_RETRY_PERIOD,
|
||||
@ -169,26 +224,24 @@ reorder_add_policy(PG_FUNCTION_ARGS)
|
||||
&owner,
|
||||
true,
|
||||
hypertable_id,
|
||||
NULL);
|
||||
|
||||
/* Now, insert a new row in the reorder args table */
|
||||
policy.fd.job_id = job_id;
|
||||
ts_bgw_policy_reorder_insert(&policy);
|
||||
config);
|
||||
|
||||
PG_RETURN_INT32(job_id);
|
||||
}
|
||||
|
||||
Datum
|
||||
reorder_remove_policy(PG_FUNCTION_ARGS)
|
||||
policy_reorder_remove(PG_FUNCTION_ARGS)
|
||||
{
|
||||
Oid hypertable_oid = PG_GETARG_OID(0);
|
||||
bool if_exists = PG_GETARG_BOOL(1);
|
||||
|
||||
/* Remove the job, then remove the policy */
|
||||
int ht_id = ts_hypertable_relid_to_id(hypertable_oid);
|
||||
BgwPolicyReorder *policy = ts_bgw_policy_reorder_find_by_hypertable(ht_id);
|
||||
|
||||
if (policy == NULL)
|
||||
List *jobs = ts_bgw_job_find_by_proc_and_hypertable_id(POLICY_REORDER_PROC_NAME,
|
||||
INTERNAL_SCHEMA_NAME,
|
||||
ht_id);
|
||||
if (jobs == NIL)
|
||||
{
|
||||
if (!if_exists)
|
||||
ereport(ERROR,
|
||||
@ -208,10 +261,12 @@ reorder_remove_policy(PG_FUNCTION_ARGS)
|
||||
PG_RETURN_NULL();
|
||||
}
|
||||
}
|
||||
Assert(list_length(jobs) == 1);
|
||||
BgwJob *job = linitial(jobs);
|
||||
|
||||
ts_hypertable_permissions_check(hypertable_oid, GetUserId());
|
||||
|
||||
ts_bgw_job_delete_by_id(policy->fd.job_id);
|
||||
ts_bgw_job_delete_by_id(job->fd.id);
|
||||
|
||||
PG_RETURN_NULL();
|
||||
}
|
||||
|
@ -10,7 +10,11 @@
|
||||
#include <postgres.h>
|
||||
|
||||
/* User-facing API functions */
|
||||
extern Datum reorder_add_policy(PG_FUNCTION_ARGS);
|
||||
extern Datum reorder_remove_policy(PG_FUNCTION_ARGS);
|
||||
extern Datum policy_reorder_add(PG_FUNCTION_ARGS);
|
||||
extern Datum policy_reorder_remove(PG_FUNCTION_ARGS);
|
||||
extern Datum policy_reorder_proc(PG_FUNCTION_ARGS);
|
||||
|
||||
extern int32 policy_reorder_get_hypertable_id(Jsonb *config);
|
||||
extern char *policy_reorder_get_index_name(Jsonb *config);
|
||||
|
||||
#endif /* TIMESCALEDB_TSL_BGW_POLICY_REORDER_API_H */
|
||||
|
@ -92,10 +92,11 @@ CrossModuleFunctions tsl_cm_functions = {
|
||||
.bgw_policy_job_execute = tsl_bgw_policy_job_execute,
|
||||
.continuous_agg_materialize = continuous_agg_materialize,
|
||||
.add_drop_chunks_policy = drop_chunks_add_policy,
|
||||
.add_reorder_policy = reorder_add_policy,
|
||||
.policy_reorder_add = policy_reorder_add,
|
||||
.policy_reorder_proc = policy_reorder_proc,
|
||||
.policy_reorder_remove = policy_reorder_remove,
|
||||
.add_compress_chunks_policy = compress_chunks_add_policy,
|
||||
.remove_drop_chunks_policy = drop_chunks_remove_policy,
|
||||
.remove_reorder_policy = reorder_remove_policy,
|
||||
.remove_compress_chunks_policy = compress_chunks_remove_policy,
|
||||
.create_upper_paths_hook = tsl_create_upper_paths_hook,
|
||||
.set_rel_pathlist_dml = tsl_set_rel_pathlist_dml,
|
||||
|
@ -56,16 +56,10 @@ SELECT COUNT(*) FROM _timescaledb_catalog.chunk as c, _timescaledb_catalog.hyper
|
||||
-- Make sure reorder correctly selects chunks to reorder
|
||||
-- by starting with oldest chunks
|
||||
select add_reorder_policy('test_table', 'test_table_time_idx') as reorder_job_id \gset
|
||||
select * from _timescaledb_config.bgw_policy_reorder where job_id=:reorder_job_id;
|
||||
job_id | hypertable_id | hypertable_index_name
|
||||
--------+---------------+-----------------------
|
||||
1000 | 1 | test_table_time_idx
|
||||
(1 row)
|
||||
|
||||
select * from _timescaledb_config.bgw_job where job_type IN ('reorder');
|
||||
id | application_name | job_type | schedule_interval | max_runtime | max_retries | retry_period | proc_name | proc_schema | owner | scheduled | hypertable_id | config
|
||||
------+------------------------+----------+-------------------+-------------+-------------+--------------+-----------+-------------+-------------------+-----------+---------------+--------
|
||||
1000 | Reorder Background Job | reorder | @ 84 hours | @ 0 | -1 | @ 5 mins | | | default_perm_user | t | 1 |
|
||||
id | application_name | job_type | schedule_interval | max_runtime | max_retries | retry_period | proc_name | proc_schema | owner | scheduled | hypertable_id | config
|
||||
------+------------------------+----------+-------------------+-------------+-------------+--------------+----------------+-----------------------+-------------------+-----------+---------------+-----------------------------------------------------------
|
||||
1000 | Reorder Background Job | reorder | @ 84 hours | @ 0 | -1 | @ 5 mins | policy_reorder | _timescaledb_internal | default_perm_user | t | 1 | {"index_name": "test_table_time_idx", "hypertable_id": 1}
|
||||
(1 row)
|
||||
|
||||
select job_id, chunk_id, num_times_job_run from _timescaledb_internal.bgw_policy_chunk_stats;
|
||||
|
@ -99,18 +99,11 @@ SELECT json_object_field(get_telemetry_report(always_display_report := true)::js
|
||||
"1"
|
||||
(1 row)
|
||||
|
||||
-- policy was created
|
||||
select * from _timescaledb_config.bgw_policy_reorder where job_id=:reorder_job_id;
|
||||
job_id | hypertable_id | hypertable_index_name
|
||||
--------+---------------+-----------------------------
|
||||
1000 | 1 | test_reorder_table_time_idx
|
||||
(1 row)
|
||||
|
||||
-- job was created
|
||||
SELECT * FROM _timescaledb_config.bgw_job where id=:reorder_job_id;
|
||||
id | application_name | job_type | schedule_interval | max_runtime | max_retries | retry_period | proc_name | proc_schema | owner | scheduled | hypertable_id | config
|
||||
------+------------------------+----------+-------------------+-------------+-------------+--------------+-----------+-------------+-------------------+-----------+---------------+--------
|
||||
1000 | Reorder Background Job | reorder | @ 4 days | @ 0 | -1 | @ 5 mins | | | default_perm_user | t | 1 |
|
||||
id | application_name | job_type | schedule_interval | max_runtime | max_retries | retry_period | proc_name | proc_schema | owner | scheduled | hypertable_id | config
|
||||
------+------------------------+----------+-------------------+-------------+-------------+--------------+----------------+-----------------------+-------------------+-----------+---------------+-------------------------------------------------------------------
|
||||
1000 | Reorder Background Job | reorder | @ 4 days | @ 0 | -1 | @ 5 mins | policy_reorder | _timescaledb_internal | default_perm_user | t | 1 | {"index_name": "test_reorder_table_time_idx", "hypertable_id": 1}
|
||||
(1 row)
|
||||
|
||||
-- no stats
|
||||
@ -144,9 +137,9 @@ SELECT * FROM sorted_bgw_log;
|
||||
(2 rows)
|
||||
|
||||
SELECT * FROM _timescaledb_config.bgw_job where id=:reorder_job_id;
|
||||
id | application_name | job_type | schedule_interval | max_runtime | max_retries | retry_period | proc_name | proc_schema | owner | scheduled | hypertable_id | config
|
||||
------+------------------------+----------+-------------------+-------------+-------------+--------------+-----------+-------------+-------------------+-----------+---------------+--------
|
||||
1000 | Reorder Background Job | reorder | @ 4 days | @ 0 | -1 | @ 5 mins | | | default_perm_user | t | 1 |
|
||||
id | application_name | job_type | schedule_interval | max_runtime | max_retries | retry_period | proc_name | proc_schema | owner | scheduled | hypertable_id | config
|
||||
------+------------------------+----------+-------------------+-------------+-------------+--------------+----------------+-----------------------+-------------------+-----------+---------------+-------------------------------------------------------------------
|
||||
1000 | Reorder Background Job | reorder | @ 4 days | @ 0 | -1 | @ 5 mins | policy_reorder | _timescaledb_internal | default_perm_user | t | 1 | {"index_name": "test_reorder_table_time_idx", "hypertable_id": 1}
|
||||
(1 row)
|
||||
|
||||
-- job ran once, successfully
|
||||
@ -184,9 +177,9 @@ SELECT * FROM sorted_bgw_log;
|
||||
(4 rows)
|
||||
|
||||
SELECT * FROM _timescaledb_config.bgw_job where id=:reorder_job_id;
|
||||
id | application_name | job_type | schedule_interval | max_runtime | max_retries | retry_period | proc_name | proc_schema | owner | scheduled | hypertable_id | config
|
||||
------+------------------------+----------+-------------------+-------------+-------------+--------------+-----------+-------------+-------------------+-----------+---------------+--------
|
||||
1000 | Reorder Background Job | reorder | @ 4 days | @ 0 | -1 | @ 5 mins | | | default_perm_user | t | 1 |
|
||||
id | application_name | job_type | schedule_interval | max_runtime | max_retries | retry_period | proc_name | proc_schema | owner | scheduled | hypertable_id | config
|
||||
------+------------------------+----------+-------------------+-------------+-------------+--------------+----------------+-----------------------+-------------------+-----------+---------------+-------------------------------------------------------------------
|
||||
1000 | Reorder Background Job | reorder | @ 4 days | @ 0 | -1 | @ 5 mins | policy_reorder | _timescaledb_internal | default_perm_user | t | 1 | {"index_name": "test_reorder_table_time_idx", "hypertable_id": 1}
|
||||
(1 row)
|
||||
|
||||
-- two runs
|
||||
@ -228,9 +221,9 @@ SELECT * FROM sorted_bgw_log;
|
||||
(6 rows)
|
||||
|
||||
SELECT * FROM _timescaledb_config.bgw_job where id=:reorder_job_id;
|
||||
id | application_name | job_type | schedule_interval | max_runtime | max_retries | retry_period | proc_name | proc_schema | owner | scheduled | hypertable_id | config
|
||||
------+------------------------+----------+-------------------+-------------+-------------+--------------+-----------+-------------+-------------------+-----------+---------------+--------
|
||||
1000 | Reorder Background Job | reorder | @ 4 days | @ 0 | -1 | @ 5 mins | | | default_perm_user | t | 1 |
|
||||
id | application_name | job_type | schedule_interval | max_runtime | max_retries | retry_period | proc_name | proc_schema | owner | scheduled | hypertable_id | config
|
||||
------+------------------------+----------+-------------------+-------------+-------------+--------------+----------------+-----------------------+-------------------+-----------+---------------+-------------------------------------------------------------------
|
||||
1000 | Reorder Background Job | reorder | @ 4 days | @ 0 | -1 | @ 5 mins | policy_reorder | _timescaledb_internal | default_perm_user | t | 1 | {"index_name": "test_reorder_table_time_idx", "hypertable_id": 1}
|
||||
(1 row)
|
||||
|
||||
SELECT *
|
||||
@ -272,9 +265,9 @@ SELECT * FROM sorted_bgw_log;
|
||||
(7 rows)
|
||||
|
||||
SELECT * FROM _timescaledb_config.bgw_job where id=:reorder_job_id;
|
||||
id | application_name | job_type | schedule_interval | max_runtime | max_retries | retry_period | proc_name | proc_schema | owner | scheduled | hypertable_id | config
|
||||
------+------------------------+----------+-------------------+-------------+-------------+--------------+-----------+-------------+-------------------+-----------+---------------+--------
|
||||
1000 | Reorder Background Job | reorder | @ 4 days | @ 0 | -1 | @ 5 mins | | | default_perm_user | t | 1 |
|
||||
id | application_name | job_type | schedule_interval | max_runtime | max_retries | retry_period | proc_name | proc_schema | owner | scheduled | hypertable_id | config
|
||||
------+------------------------+----------+-------------------+-------------+-------------+--------------+----------------+-----------------------+-------------------+-----------+---------------+-------------------------------------------------------------------
|
||||
1000 | Reorder Background Job | reorder | @ 4 days | @ 0 | -1 | @ 5 mins | policy_reorder | _timescaledb_internal | default_perm_user | t | 1 | {"index_name": "test_reorder_table_time_idx", "hypertable_id": 1}
|
||||
(1 row)
|
||||
|
||||
SELECT *
|
||||
@ -316,11 +309,6 @@ SELECT remove_reorder_policy('test_reorder_table');
|
||||
|
||||
(1 row)
|
||||
|
||||
select * from _timescaledb_config.bgw_policy_reorder where job_id=:reorder_job_id;
|
||||
job_id | hypertable_id | hypertable_index_name
|
||||
--------+---------------+-----------------------
|
||||
(0 rows)
|
||||
|
||||
SELECT * FROM _timescaledb_config.bgw_job where id=:reorder_job_id;
|
||||
id | application_name | job_type | schedule_interval | max_runtime | max_retries | retry_period | proc_name | proc_schema | owner | scheduled | hypertable_id | config
|
||||
----+------------------+----------+-------------------+-------------+-------------+--------------+-----------+-------------+-------+-----------+---------------+--------
|
||||
|
@ -15,9 +15,9 @@ select * from _timescaledb_config.bgw_policy_drop_chunks;
|
||||
--------+---------------+------------+-----------------------------
|
||||
(0 rows)
|
||||
|
||||
select * from _timescaledb_config.bgw_policy_reorder;
|
||||
job_id | hypertable_id | hypertable_index_name
|
||||
--------+---------------+-----------------------
|
||||
select * from _timescaledb_config.bgw_job WHERE job_type IN ('reorder');
|
||||
id | application_name | job_type | schedule_interval | max_runtime | max_retries | retry_period | proc_name | proc_schema | owner | scheduled | hypertable_id | config
|
||||
----+------------------+----------+-------------------+-------------+-------------+--------------+-----------+-------------+-------+-----------+---------------+--------
|
||||
(0 rows)
|
||||
|
||||
CREATE TABLE test_table(time timestamptz, junk int);
|
||||
@ -74,10 +74,10 @@ ERROR: reorder policy already exists for hypertable "test_table"
|
||||
select add_reorder_policy('test_table', 'third_index');
|
||||
ERROR: reorder policy already exists for hypertable "test_table"
|
||||
\set ON_ERROR_STOP 1
|
||||
select * from _timescaledb_config.bgw_policy_reorder where job_id=:job_id;
|
||||
job_id | hypertable_id | hypertable_index_name
|
||||
--------+---------------+-----------------------
|
||||
1000 | 1 | test_table_time_idx
|
||||
select * from _timescaledb_config.bgw_job where id=:job_id;
|
||||
id | application_name | job_type | schedule_interval | max_runtime | max_retries | retry_period | proc_name | proc_schema | owner | scheduled | hypertable_id | config
|
||||
------+------------------------+----------+-------------------+-------------+-------------+--------------+----------------+-----------------------+-------------------+-----------+---------------+-----------------------------------------------------------
|
||||
1000 | Reorder Background Job | reorder | @ 84 hours | @ 0 | -1 | @ 5 mins | policy_reorder | _timescaledb_internal | default_perm_user | t | 1 | {"index_name": "test_table_time_idx", "hypertable_id": 1}
|
||||
(1 row)
|
||||
|
||||
-- Now check that default scheduling interval for reorder policy is calculated correctly
|
||||
@ -96,19 +96,19 @@ select add_reorder_policy('test_table2', 'test_table2_time_idx');
|
||||
1001
|
||||
(1 row)
|
||||
|
||||
select * from _timescaledb_config.bgw_job where job_type IN ('drop_chunks', 'reorder');
|
||||
id | application_name | job_type | schedule_interval | max_runtime | max_retries | retry_period | proc_name | proc_schema | owner | scheduled | hypertable_id | config
|
||||
------+------------------------+----------+-------------------+-------------+-------------+--------------+-----------+-------------+-------------------+-----------+---------------+--------
|
||||
1000 | Reorder Background Job | reorder | @ 84 hours | @ 0 | -1 | @ 5 mins | | | default_perm_user | t | 1 |
|
||||
1001 | Reorder Background Job | reorder | @ 12 hours | @ 0 | -1 | @ 5 mins | | | default_perm_user | t | 3 |
|
||||
SELECT * FROM _timescaledb_config.bgw_job WHERE job_type IN ('drop_chunks', 'reorder') ORDER BY id;
|
||||
id | application_name | job_type | schedule_interval | max_runtime | max_retries | retry_period | proc_name | proc_schema | owner | scheduled | hypertable_id | config
|
||||
------+------------------------+----------+-------------------+-------------+-------------+--------------+----------------+-----------------------+-------------------+-----------+---------------+------------------------------------------------------------
|
||||
1000 | Reorder Background Job | reorder | @ 84 hours | @ 0 | -1 | @ 5 mins | policy_reorder | _timescaledb_internal | default_perm_user | t | 1 | {"index_name": "test_table_time_idx", "hypertable_id": 1}
|
||||
1001 | Reorder Background Job | reorder | @ 12 hours | @ 0 | -1 | @ 5 mins | policy_reorder | _timescaledb_internal | default_perm_user | t | 3 | {"index_name": "test_table2_time_idx", "hypertable_id": 3}
|
||||
(2 rows)
|
||||
|
||||
DROP TABLE test_table2;
|
||||
-- Make sure that test_table2 reorder policy gets dropped
|
||||
select * from _timescaledb_config.bgw_job where job_type IN ('drop_chunks', 'reorder');
|
||||
id | application_name | job_type | schedule_interval | max_runtime | max_retries | retry_period | proc_name | proc_schema | owner | scheduled | hypertable_id | config
|
||||
------+------------------------+----------+-------------------+-------------+-------------+--------------+-----------+-------------+-------------------+-----------+---------------+--------
|
||||
1000 | Reorder Background Job | reorder | @ 84 hours | @ 0 | -1 | @ 5 mins | | | default_perm_user | t | 1 |
|
||||
SELECT * FROM _timescaledb_config.bgw_job WHERE job_type IN ('drop_chunks', 'reorder') ORDER BY id;
|
||||
id | application_name | job_type | schedule_interval | max_runtime | max_retries | retry_period | proc_name | proc_schema | owner | scheduled | hypertable_id | config
|
||||
------+------------------------+----------+-------------------+-------------+-------------+--------------+----------------+-----------------------+-------------------+-----------+---------------+-----------------------------------------------------------
|
||||
1000 | Reorder Background Job | reorder | @ 84 hours | @ 0 | -1 | @ 5 mins | policy_reorder | _timescaledb_internal | default_perm_user | t | 1 | {"index_name": "test_table_time_idx", "hypertable_id": 1}
|
||||
(1 row)
|
||||
|
||||
-- Error whenever incorrect arguments are applied (must have table and interval)
|
||||
@ -245,14 +245,9 @@ select remove_reorder_policy('test_table');
|
||||
|
||||
(1 row)
|
||||
|
||||
select * from _timescaledb_config.bgw_policy_reorder;
|
||||
job_id | hypertable_id | hypertable_index_name
|
||||
--------+---------------+-----------------------
|
||||
(0 rows)
|
||||
|
||||
select r.job_id,r.hypertable_id,r.hypertable_index_name from _timescaledb_config.bgw_policy_reorder as r, _timescaledb_catalog.hypertable as h where r.hypertable_id=h.id and h.table_name='test_table';
|
||||
job_id | hypertable_id | hypertable_index_name
|
||||
--------+---------------+-----------------------
|
||||
select * from _timescaledb_config.bgw_job WHERE job_type IN ('reorder');
|
||||
id | application_name | job_type | schedule_interval | max_runtime | max_retries | retry_period | proc_name | proc_schema | owner | scheduled | hypertable_id | config
|
||||
----+------------------+----------+-------------------+-------------+-------------+--------------+-----------+-------------+-------+-----------+---------------+--------
|
||||
(0 rows)
|
||||
|
||||
select add_drop_chunks_policy('test_table', INTERVAL '3 month');
|
||||
@ -380,12 +375,6 @@ select count(*) from _timescaledb_config.bgw_policy_drop_chunks where job_id=:jo
|
||||
1
|
||||
(1 row)
|
||||
|
||||
select count(*) from _timescaledb_config.bgw_policy_reorder where job_id=:reorder_job_id;
|
||||
count
|
||||
-------
|
||||
1
|
||||
(1 row)
|
||||
|
||||
select delete_job(:job_id);
|
||||
delete_job
|
||||
------------
|
||||
@ -406,7 +395,7 @@ select count(*) from _timescaledb_config.bgw_policy_drop_chunks where job_id=:jo
|
||||
(1 row)
|
||||
|
||||
-- Job args should still be there
|
||||
select count(*) from _timescaledb_config.bgw_policy_reorder where job_id=:reorder_job_id;
|
||||
select count(*) from _timescaledb_config.bgw_job where id=:reorder_job_id;
|
||||
count
|
||||
-------
|
||||
1
|
||||
@ -424,13 +413,6 @@ select count(*) from _timescaledb_config.bgw_job where id=:reorder_job_id;
|
||||
0
|
||||
(1 row)
|
||||
|
||||
-- Job args should be gone
|
||||
select count(*) from _timescaledb_config.bgw_policy_reorder where job_id=:reorder_job_id;
|
||||
count
|
||||
-------
|
||||
0
|
||||
(1 row)
|
||||
|
||||
-- Now make sure policy args have correct job deletion dependency
|
||||
select add_drop_chunks_policy('test_table', INTERVAL '2 month') as job_id \gset
|
||||
select add_reorder_policy('test_table', 'third_index') as reorder_job_id \gset
|
||||
@ -452,18 +434,12 @@ select count(*) from _timescaledb_config.bgw_policy_drop_chunks where job_id=:jo
|
||||
1
|
||||
(1 row)
|
||||
|
||||
select count(*) from _timescaledb_config.bgw_policy_reorder where job_id=:reorder_job_id;
|
||||
count
|
||||
-------
|
||||
1
|
||||
(1 row)
|
||||
|
||||
select * from _timescaledb_config.bgw_job;
|
||||
id | application_name | job_type | schedule_interval | max_runtime | max_retries | retry_period | proc_name | proc_schema | owner | scheduled | hypertable_id | config
|
||||
------+----------------------------+----------------------------------------+-------------------+-----------------+-------------+--------------+-----------+-------------+-------------------+-----------+---------------+--------
|
||||
1 | Telemetry Reporter | telemetry_and_version_check_if_enabled | @ 24 hours | @ 1 min 40 secs | -1 | @ 1 hour | | | super_user | t | |
|
||||
1007 | Drop Chunks Background Job | drop_chunks | @ 1 day | @ 5 mins | -1 | @ 5 mins | | | default_perm_user | t | 1 |
|
||||
1008 | Reorder Background Job | reorder | @ 84 hours | @ 0 | -1 | @ 5 mins | | | default_perm_user | t | 1 |
|
||||
SELECT * FROM _timescaledb_config.bgw_job ORDER BY id;
|
||||
id | application_name | job_type | schedule_interval | max_runtime | max_retries | retry_period | proc_name | proc_schema | owner | scheduled | hypertable_id | config
|
||||
------+----------------------------+----------------------------------------+-------------------+-----------------+-------------+--------------+----------------+-----------------------+-------------------+-----------+---------------+---------------------------------------------------
|
||||
1 | Telemetry Reporter | telemetry_and_version_check_if_enabled | @ 24 hours | @ 1 min 40 secs | -1 | @ 1 hour | | | super_user | t | |
|
||||
1007 | Drop Chunks Background Job | drop_chunks | @ 1 day | @ 5 mins | -1 | @ 5 mins | | | default_perm_user | t | 1 |
|
||||
1008 | Reorder Background Job | reorder | @ 84 hours | @ 0 | -1 | @ 5 mins | policy_reorder | _timescaledb_internal | default_perm_user | t | 1 | {"index_name": "third_index", "hypertable_id": 1}
|
||||
(3 rows)
|
||||
|
||||
DROP TABLE test_table;
|
||||
@ -485,12 +461,6 @@ select count(*) from _timescaledb_config.bgw_policy_drop_chunks where job_id=:jo
|
||||
0
|
||||
(1 row)
|
||||
|
||||
select count(*) from _timescaledb_config.bgw_policy_reorder where job_id=:reorder_job_id;
|
||||
count
|
||||
-------
|
||||
0
|
||||
(1 row)
|
||||
|
||||
-- Check that we can't add policies on non-hypertables
|
||||
CREATE TABLE non_hypertable(junk int, more_junk int);
|
||||
CREATE INDEX non_ht_index on non_hypertable(junk);
|
||||
@ -626,9 +596,9 @@ select job_id,chunk_id,num_times_job_run from _timescaledb_internal.bgw_policy_c
|
||||
(1 row)
|
||||
|
||||
select * from _timescaledb_config.bgw_job where job_type='reorder';
|
||||
id | application_name | job_type | schedule_interval | max_runtime | max_retries | retry_period | proc_name | proc_schema | owner | scheduled | hypertable_id | config
|
||||
------+------------------------+----------+-------------------+-------------+-------------+--------------+-----------+-------------+-------------------+-----------+---------------+--------
|
||||
1011 | Reorder Background Job | reorder | @ 84 hours | @ 0 | -1 | @ 5 mins | | | default_perm_user | t | 6 |
|
||||
id | application_name | job_type | schedule_interval | max_runtime | max_retries | retry_period | proc_name | proc_schema | owner | scheduled | hypertable_id | config
|
||||
------+------------------------+----------+-------------------+-------------+-------------+--------------+----------------+-----------------------+-------------------+-----------+---------------+----------------------------------------------------
|
||||
1011 | Reorder Background Job | reorder | @ 84 hours | @ 0 | -1 | @ 5 mins | policy_reorder | _timescaledb_internal | default_perm_user | t | 6 | {"index_name": "second_index", "hypertable_id": 6}
|
||||
(1 row)
|
||||
|
||||
-- Deleting a chunk that has nothing to do with the job should do nothing
|
||||
@ -642,9 +612,9 @@ select job_id,chunk_id,num_times_job_run from _timescaledb_internal.bgw_policy_c
|
||||
(1 row)
|
||||
|
||||
select * from _timescaledb_config.bgw_job where job_type='reorder';
|
||||
id | application_name | job_type | schedule_interval | max_runtime | max_retries | retry_period | proc_name | proc_schema | owner | scheduled | hypertable_id | config
|
||||
------+------------------------+----------+-------------------+-------------+-------------+--------------+-----------+-------------+-------------------+-----------+---------------+--------
|
||||
1011 | Reorder Background Job | reorder | @ 84 hours | @ 0 | -1 | @ 5 mins | | | default_perm_user | t | 6 |
|
||||
id | application_name | job_type | schedule_interval | max_runtime | max_retries | retry_period | proc_name | proc_schema | owner | scheduled | hypertable_id | config
|
||||
------+------------------------+----------+-------------------+-------------+-------------+--------------+----------------+-----------------------+-------------------+-----------+---------------+----------------------------------------------------
|
||||
1011 | Reorder Background Job | reorder | @ 84 hours | @ 0 | -1 | @ 5 mins | policy_reorder | _timescaledb_internal | default_perm_user | t | 6 | {"index_name": "second_index", "hypertable_id": 6}
|
||||
(1 row)
|
||||
|
||||
-- Dropping the hypertable should drop the chunk, which should drop the reorder policy
|
||||
@ -687,11 +657,11 @@ select job_id,chunk_id,num_times_job_run from _timescaledb_internal.bgw_policy_c
|
||||
1012 | 123 | 1
|
||||
(1 row)
|
||||
|
||||
select * from _timescaledb_config.bgw_job where job_type in ('drop_chunks', 'reorder');
|
||||
id | application_name | job_type | schedule_interval | max_runtime | max_retries | retry_period | proc_name | proc_schema | owner | scheduled | hypertable_id | config
|
||||
------+----------------------------+-------------+-------------------+-------------+-------------+--------------+-----------+-------------+-------------------+-----------+---------------+--------
|
||||
1012 | Reorder Background Job | reorder | @ 84 hours | @ 0 | -1 | @ 5 mins | | | default_perm_user | t | 7 |
|
||||
1013 | Drop Chunks Background Job | drop_chunks | @ 1 day | @ 5 mins | -1 | @ 5 mins | | | default_perm_user | t | 7 |
|
||||
SELECT * FROM _timescaledb_config.bgw_job WHERE job_type IN ('drop_chunks', 'reorder') ORDER BY id;
|
||||
id | application_name | job_type | schedule_interval | max_runtime | max_retries | retry_period | proc_name | proc_schema | owner | scheduled | hypertable_id | config
|
||||
------+----------------------------+-------------+-------------------+-------------+-------------+--------------+----------------+-----------------------+-------------------+-----------+---------------+-----------------------------------------------------------
|
||||
1012 | Reorder Background Job | reorder | @ 84 hours | @ 0 | -1 | @ 5 mins | policy_reorder | _timescaledb_internal | default_perm_user | t | 7 | {"index_name": "test_table_time_idx", "hypertable_id": 7}
|
||||
1013 | Drop Chunks Background Job | drop_chunks | @ 1 day | @ 5 mins | -1 | @ 5 mins | | | default_perm_user | t | 7 |
|
||||
(2 rows)
|
||||
|
||||
-- Dropping the drop_chunks job should not affect the chunk_stats row
|
||||
@ -707,10 +677,10 @@ select job_id,chunk_id,num_times_job_run from _timescaledb_internal.bgw_policy_c
|
||||
1012 | 123 | 1
|
||||
(1 row)
|
||||
|
||||
select * from _timescaledb_config.bgw_job where job_type in ('drop_chunks', 'reorder');
|
||||
id | application_name | job_type | schedule_interval | max_runtime | max_retries | retry_period | proc_name | proc_schema | owner | scheduled | hypertable_id | config
|
||||
------+------------------------+----------+-------------------+-------------+-------------+--------------+-----------+-------------+-------------------+-----------+---------------+--------
|
||||
1012 | Reorder Background Job | reorder | @ 84 hours | @ 0 | -1 | @ 5 mins | | | default_perm_user | t | 7 |
|
||||
SELECT * FROM _timescaledb_config.bgw_job WHERE job_type IN ('drop_chunks', 'reorder') ORDER BY id;
|
||||
id | application_name | job_type | schedule_interval | max_runtime | max_retries | retry_period | proc_name | proc_schema | owner | scheduled | hypertable_id | config
|
||||
------+------------------------+----------+-------------------+-------------+-------------+--------------+----------------+-----------------------+-------------------+-----------+---------------+-----------------------------------------------------------
|
||||
1012 | Reorder Background Job | reorder | @ 84 hours | @ 0 | -1 | @ 5 mins | policy_reorder | _timescaledb_internal | default_perm_user | t | 7 | {"index_name": "test_table_time_idx", "hypertable_id": 7}
|
||||
(1 row)
|
||||
|
||||
select remove_reorder_policy('test_table');
|
||||
@ -725,7 +695,7 @@ select job_id,chunk_id,num_times_job_run from _timescaledb_internal.bgw_policy_c
|
||||
--------+----------+-------------------
|
||||
(0 rows)
|
||||
|
||||
select * from _timescaledb_config.bgw_job where job_type in ('drop_chunks', 'reorder');
|
||||
SELECT * FROM _timescaledb_config.bgw_job WHERE job_type IN ('drop_chunks', 'reorder') ORDER BY id;
|
||||
id | application_name | job_type | schedule_interval | max_runtime | max_retries | retry_period | proc_name | proc_schema | owner | scheduled | hypertable_id | config
|
||||
----+------------------+----------+-------------------+-------------+-------------+--------------+-----------+-------------+-------+-----------+---------------+--------
|
||||
(0 rows)
|
||||
@ -733,9 +703,9 @@ select * from _timescaledb_config.bgw_job where job_type in ('drop_chunks', 'reo
|
||||
-- Now test if alter_job_schedule works
|
||||
select add_reorder_policy('test_table', 'test_table_time_idx') as job_id \gset
|
||||
select * from _timescaledb_config.bgw_job where id=:job_id;
|
||||
id | application_name | job_type | schedule_interval | max_runtime | max_retries | retry_period | proc_name | proc_schema | owner | scheduled | hypertable_id | config
|
||||
------+------------------------+----------+-------------------+-------------+-------------+--------------+-----------+-------------+-------------------+-----------+---------------+--------
|
||||
1014 | Reorder Background Job | reorder | @ 84 hours | @ 0 | -1 | @ 5 mins | | | default_perm_user | t | 7 |
|
||||
id | application_name | job_type | schedule_interval | max_runtime | max_retries | retry_period | proc_name | proc_schema | owner | scheduled | hypertable_id | config
|
||||
------+------------------------+----------+-------------------+-------------+-------------+--------------+----------------+-----------------------+-------------------+-----------+---------------+-----------------------------------------------------------
|
||||
1014 | Reorder Background Job | reorder | @ 84 hours | @ 0 | -1 | @ 5 mins | policy_reorder | _timescaledb_internal | default_perm_user | t | 7 | {"index_name": "test_table_time_idx", "hypertable_id": 7}
|
||||
(1 row)
|
||||
|
||||
-- No change
|
||||
|
@ -55,7 +55,6 @@ SELECT COUNT(*) FROM _timescaledb_catalog.chunk as c, _timescaledb_catalog.hyper
|
||||
-- Make sure reorder correctly selects chunks to reorder
|
||||
-- by starting with oldest chunks
|
||||
select add_reorder_policy('test_table', 'test_table_time_idx') as reorder_job_id \gset
|
||||
select * from _timescaledb_config.bgw_policy_reorder where job_id=:reorder_job_id;
|
||||
|
||||
select * from _timescaledb_config.bgw_job where job_type IN ('reorder');
|
||||
select job_id, chunk_id, num_times_job_run from _timescaledb_internal.bgw_policy_chunk_stats;
|
||||
|
@ -78,9 +78,6 @@ SELECT json_object_field(get_telemetry_report(always_display_report := true)::js
|
||||
select add_reorder_policy('test_reorder_table', 'test_reorder_table_time_idx') as reorder_job_id \gset
|
||||
SELECT json_object_field(get_telemetry_report(always_display_report := true)::json,'num_reorder_policies');
|
||||
|
||||
-- policy was created
|
||||
select * from _timescaledb_config.bgw_policy_reorder where job_id=:reorder_job_id;
|
||||
|
||||
-- job was created
|
||||
SELECT * FROM _timescaledb_config.bgw_job where id=:reorder_job_id;
|
||||
|
||||
@ -170,8 +167,6 @@ SELECT * FROM timescaledb_information.policy_stats;
|
||||
-- test deleting the policy
|
||||
SELECT remove_reorder_policy('test_reorder_table');
|
||||
|
||||
select * from _timescaledb_config.bgw_policy_reorder where job_id=:reorder_job_id;
|
||||
|
||||
SELECT * FROM _timescaledb_config.bgw_job where id=:reorder_job_id;
|
||||
|
||||
SELECT job_id, next_start, last_finish as until_next, last_run_success, total_runs, total_successes, total_failures, total_crashes
|
||||
|
@ -16,7 +16,7 @@ LANGUAGE C VOLATILE STRICT;
|
||||
\c :TEST_DBNAME :ROLE_DEFAULT_PERM_USER
|
||||
|
||||
select * from _timescaledb_config.bgw_policy_drop_chunks;
|
||||
select * from _timescaledb_config.bgw_policy_reorder;
|
||||
select * from _timescaledb_config.bgw_job WHERE job_type IN ('reorder');
|
||||
|
||||
CREATE TABLE test_table(time timestamptz, junk int);
|
||||
CREATE TABLE test_table_int(time bigint, junk int);
|
||||
@ -43,7 +43,7 @@ select add_reorder_policy('test_table', 'second_index');
|
||||
select add_reorder_policy('test_table', 'third_index');
|
||||
\set ON_ERROR_STOP 1
|
||||
|
||||
select * from _timescaledb_config.bgw_policy_reorder where job_id=:job_id;
|
||||
select * from _timescaledb_config.bgw_job where id=:job_id;
|
||||
|
||||
-- Now check that default scheduling interval for reorder policy is calculated correctly
|
||||
-- Should be 1/2 default chunk interval length
|
||||
@ -51,11 +51,11 @@ CREATE TABLE test_table2(time timestamptz, junk int);
|
||||
SELECT create_hypertable('test_table2', 'time', chunk_time_interval=>INTERVAL '1 day');
|
||||
select add_reorder_policy('test_table2', 'test_table2_time_idx');
|
||||
|
||||
select * from _timescaledb_config.bgw_job where job_type IN ('drop_chunks', 'reorder');
|
||||
SELECT * FROM _timescaledb_config.bgw_job WHERE job_type IN ('drop_chunks', 'reorder') ORDER BY id;
|
||||
|
||||
DROP TABLE test_table2;
|
||||
-- Make sure that test_table2 reorder policy gets dropped
|
||||
select * from _timescaledb_config.bgw_job where job_type IN ('drop_chunks', 'reorder');
|
||||
SELECT * FROM _timescaledb_config.bgw_job WHERE job_type IN ('drop_chunks', 'reorder') ORDER BY id;
|
||||
|
||||
-- Error whenever incorrect arguments are applied (must have table and interval)
|
||||
\set ON_ERROR_STOP 0
|
||||
@ -108,8 +108,7 @@ select * from _timescaledb_config.bgw_policy_drop_chunks;
|
||||
select r.job_id,r.hypertable_id,r.older_than from _timescaledb_config.bgw_policy_drop_chunks as r, _timescaledb_catalog.hypertable as h where r.hypertable_id=h.id and h.table_name='test_table';
|
||||
select remove_reorder_policy('test_table');
|
||||
|
||||
select * from _timescaledb_config.bgw_policy_reorder;
|
||||
select r.job_id,r.hypertable_id,r.hypertable_index_name from _timescaledb_config.bgw_policy_reorder as r, _timescaledb_catalog.hypertable as h where r.hypertable_id=h.id and h.table_name='test_table';
|
||||
select * from _timescaledb_config.bgw_job WHERE job_type IN ('reorder');
|
||||
|
||||
select add_drop_chunks_policy('test_table', INTERVAL '3 month');
|
||||
select * from _timescaledb_config.bgw_policy_drop_chunks;
|
||||
@ -152,7 +151,6 @@ select add_reorder_policy('test_table', 'third_index') as reorder_job_id \gset
|
||||
select count(*) from _timescaledb_config.bgw_job where id=:job_id;
|
||||
select count(*) from _timescaledb_config.bgw_job where id=:reorder_job_id;
|
||||
select count(*) from _timescaledb_config.bgw_policy_drop_chunks where job_id=:job_id;
|
||||
select count(*) from _timescaledb_config.bgw_policy_reorder where job_id=:reorder_job_id;
|
||||
|
||||
select delete_job(:job_id);
|
||||
|
||||
@ -160,12 +158,10 @@ select count(*) from _timescaledb_config.bgw_job where id=:job_id;
|
||||
-- Job args should be gone
|
||||
select count(*) from _timescaledb_config.bgw_policy_drop_chunks where job_id=:job_id;
|
||||
-- Job args should still be there
|
||||
select count(*) from _timescaledb_config.bgw_policy_reorder where job_id=:reorder_job_id;
|
||||
select count(*) from _timescaledb_config.bgw_job where id=:reorder_job_id;
|
||||
|
||||
select delete_job(:reorder_job_id);
|
||||
select count(*) from _timescaledb_config.bgw_job where id=:reorder_job_id;
|
||||
-- Job args should be gone
|
||||
select count(*) from _timescaledb_config.bgw_policy_reorder where job_id=:reorder_job_id;
|
||||
|
||||
-- Now make sure policy args have correct job deletion dependency
|
||||
select add_drop_chunks_policy('test_table', INTERVAL '2 month') as job_id \gset
|
||||
@ -174,15 +170,13 @@ select add_reorder_policy('test_table', 'third_index') as reorder_job_id \gset
|
||||
select count(*) from _timescaledb_config.bgw_job where id=:job_id;
|
||||
select count(*) from _timescaledb_config.bgw_job where id=:reorder_job_id;
|
||||
select count(*) from _timescaledb_config.bgw_policy_drop_chunks where job_id=:job_id;
|
||||
select count(*) from _timescaledb_config.bgw_policy_reorder where job_id=:reorder_job_id;
|
||||
select * from _timescaledb_config.bgw_job;
|
||||
SELECT * FROM _timescaledb_config.bgw_job ORDER BY id;
|
||||
|
||||
DROP TABLE test_table;
|
||||
|
||||
select count(*) from _timescaledb_config.bgw_job where id=:job_id;
|
||||
select count(*) from _timescaledb_config.bgw_job where id=:reorder_job_id;
|
||||
select count(*) from _timescaledb_config.bgw_policy_drop_chunks where job_id=:job_id;
|
||||
select count(*) from _timescaledb_config.bgw_policy_reorder where job_id=:reorder_job_id;
|
||||
|
||||
-- Check that we can't add policies on non-hypertables
|
||||
CREATE TABLE non_hypertable(junk int, more_junk int);
|
||||
@ -270,17 +264,17 @@ select add_drop_chunks_policy('test_table', INTERVAL '2 days', true);
|
||||
|
||||
select ts_test_chunk_stats_insert(:job_id, 123, 1);
|
||||
select job_id,chunk_id,num_times_job_run from _timescaledb_internal.bgw_policy_chunk_stats;
|
||||
select * from _timescaledb_config.bgw_job where job_type in ('drop_chunks', 'reorder');
|
||||
SELECT * FROM _timescaledb_config.bgw_job WHERE job_type IN ('drop_chunks', 'reorder') ORDER BY id;
|
||||
|
||||
-- Dropping the drop_chunks job should not affect the chunk_stats row
|
||||
select remove_drop_chunks_policy('test_table');
|
||||
select job_id,chunk_id,num_times_job_run from _timescaledb_internal.bgw_policy_chunk_stats;
|
||||
select * from _timescaledb_config.bgw_job where job_type in ('drop_chunks', 'reorder');
|
||||
SELECT * FROM _timescaledb_config.bgw_job WHERE job_type IN ('drop_chunks', 'reorder') ORDER BY id;
|
||||
|
||||
select remove_reorder_policy('test_table');
|
||||
-- Row should be gone
|
||||
select job_id,chunk_id,num_times_job_run from _timescaledb_internal.bgw_policy_chunk_stats;
|
||||
select * from _timescaledb_config.bgw_job where job_type in ('drop_chunks', 'reorder');
|
||||
SELECT * FROM _timescaledb_config.bgw_job WHERE job_type IN ('drop_chunks', 'reorder') ORDER BY id;
|
||||
|
||||
-- Now test if alter_job_schedule works
|
||||
select add_reorder_policy('test_table', 'test_table_time_idx') as job_id \gset
|
||||
|
@ -42,7 +42,7 @@ ts_test_auto_reorder(PG_FUNCTION_ARGS)
|
||||
int32 job_id = PG_GETARG_INT32(0);
|
||||
Datum values[NUM_REORDER_RET_VALS];
|
||||
bool nulls[NUM_REORDER_RET_VALS] = { false };
|
||||
BgwJob job = { .fd = { .id = job_id } };
|
||||
BgwJob *job = ts_bgw_job_find(job_id, CurrentMemoryContext, true);
|
||||
|
||||
if (get_call_result_type(fcinfo, NULL, &tupdesc) != TYPEFUNC_COMPOSITE)
|
||||
{
|
||||
@ -52,7 +52,7 @@ ts_test_auto_reorder(PG_FUNCTION_ARGS)
|
||||
"that cannot accept type record")));
|
||||
}
|
||||
|
||||
execute_reorder_policy(&job, dummy_reorder_func, false);
|
||||
execute_reorder_policy(job->fd.id, job->fd.config, dummy_reorder_func, false);
|
||||
|
||||
values[0] = ObjectIdGetDatum(chunk_oid);
|
||||
values[1] = ObjectIdGetDatum(index_oid);
|
||||
|
Loading…
x
Reference in New Issue
Block a user