Initial background job rebalance details

background-job-details
Jelte Fennema 2022-08-22 10:40:05 +02:00
parent 8b672421a2
commit 37d1c78e7d
6 changed files with 85 additions and 1 deletions

View File

@ -161,6 +161,7 @@ typedef struct MetadataCacheData
Oid citusTaskStatusErrorId;
Oid citusTaskStatusSnscheduledId;
Oid distRebalanceStrategyRelationId;
Oid distRebalanceTaskDetailsRelationId;
Oid distNodeRelationId;
Oid distNodeNodeIdIndexId;
Oid distLocalGroupRelationId;
@ -2474,6 +2475,16 @@ DistRebalanceStrategyRelationId(void)
}
Oid
DistRebalanceTaskDetailsRelationId(void)
{
CachedRelationLookup("pg_dist_rebalance_task_details",
&MetadataCache.distRebalanceTaskDetailsRelationId);
return MetadataCache.distRebalanceTaskDetailsRelationId;
}
/* return the oid of citus namespace */
Oid
CitusCatalogNamespaceId(void)

View File

@ -41,6 +41,7 @@
#include "distributed/multi_progress.h"
#include "distributed/multi_server_executor.h"
#include "distributed/pg_dist_rebalance_strategy.h"
#include "distributed/pg_dist_rebalance_task_details.h"
#include "distributed/reference_table_utils.h"
#include "distributed/remote_commands.h"
#include "distributed/repair_shards.h"
@ -1521,6 +1522,45 @@ NonColocatedDistRelationIdList(void)
}
static void
CreateRebalanceTaskDetails(int64 jobId,
int64 taskId,
WorkerNode *sourceNode,
WorkerNode *targetNode,
uint64 shardId)
{
Relation pgDistRebalanceTaskDetails =
table_open(DistRebalanceTaskDetailsRelationId(), RowExclusiveLock);
/* insert new job */
Datum values[Natts_pg_dist_rebalance_task_details] = { 0 };
bool nulls[Natts_pg_dist_rebalance_task_details] = { 0 };
memset(nulls, true, sizeof(nulls));
values[Anum_pg_dist_rebalance_task_details_job_id - 1] = Int64GetDatum(jobId);
nulls[Anum_pg_dist_rebalance_task_details_job_id - 1] = false;
values[Anum_pg_dist_rebalance_task_details_task_id - 1] = Int64GetDatum(taskId);
nulls[Anum_pg_dist_rebalance_task_details_task_id - 1] = false;
values[Anum_pg_dist_rebalance_task_details_source_node - 1] = Int64GetDatum(
sourceNode->nodeId);
nulls[Anum_pg_dist_rebalance_task_details_source_node - 1] = false;
values[Anum_pg_dist_rebalance_task_details_target_node - 1] = Int64GetDatum(
targetNode->nodeId);
nulls[Anum_pg_dist_rebalance_task_details_target_node - 1] = false;
values[Anum_pg_dist_rebalance_task_details_shard_id - 1] = Int64GetDatum(shardId);
nulls[Anum_pg_dist_rebalance_task_details_shard_id - 1] = false;
values[Anum_pg_dist_rebalance_task_details_details - 1] = DirectFunctionCall1(
jsonb_in, CStringGetDatum("{}"));
nulls[Anum_pg_dist_rebalance_task_details_details - 1] = false;
HeapTuple newTuple = heap_form_tuple(RelationGetDescr(pgDistRebalanceTaskDetails),
values, nulls);
CatalogTupleInsert(pgDistRebalanceTaskDetails, newTuple);
table_close(pgDistRebalanceTaskDetails, NoLock);
}
/*
* RebalanceTableShards rebalances the shards for the relations inside the
* relationIdList across the different workers.
@ -1588,6 +1628,8 @@ RebalanceTableShards(RebalanceOptions *options, Oid shardReplicationModeOid)
BackgroundTask *task = ScheduleBackgroundTask(jobId, buf.data, first ? 0 : 1,
&prevJobId);
CreateRebalanceTaskDetails(jobId, task->taskid, move->sourceNode,
move->targetNode, move->shardId);
prevJobId = task->taskid;
first = false;
}

View File

@ -121,4 +121,17 @@ ALTER TABLE citus.pg_dist_background_tasks_depend SET SCHEMA pg_catalog;
CREATE INDEX pg_dist_background_tasks_depend_task_id ON pg_catalog.pg_dist_background_tasks_depend USING btree(job_id, task_id);
CREATE INDEX pg_dist_background_tasks_depend_depends_on ON pg_catalog.pg_dist_background_tasks_depend USING btree(job_id, depends_on);
CREATE TABLE citus.pg_dist_rebalance_task_details(
job_id bigint NOT NULL,
task_id bigint NOT NULL,
source_node integer NOT NULL,
target_node integer NOT NULL,
shard_id bigint NOT NULL,
details jsonb NOT NULL DEFAULT '{}',
UNIQUE(job_id, task_id),
FOREIGN KEY (job_id, task_id) REFERENCES pg_catalog.pg_dist_background_tasks (job_id, task_id) ON DELETE CASCADE
);
ALTER TABLE citus.pg_dist_rebalance_task_details SET SCHEMA pg_catalog;
#include "udfs/citus_job_wait/11.1-1.sql"

View File

@ -217,7 +217,7 @@ CitusBackgroundTaskMonitorMain(Datum arg)
/* TODO find the actual database and username */
dsm_segment *seg = NULL;
BackgroundWorkerHandle *handle =
StartCitusBackgroundJobExecuter("postgres", "nilsdijk", task->command,
StartCitusBackgroundJobExecuter("postgres", "jelte", task->command,
&seg);
if (handle == NULL)

View File

@ -230,6 +230,7 @@ extern Oid DistNodeRelationId(void);
extern Oid DistBackgroundJobsRelationId(void);
extern Oid DistBackgroundTasksRelationId(void);
extern Oid DistRebalanceStrategyRelationId(void);
extern Oid DistRebalanceTaskDetailsRelationId(void);
extern Oid DistLocalGroupIdRelationId(void);
extern Oid DistObjectRelationId(void);
extern Oid DistEnabledCustomAggregatesId(void);

View File

@ -0,0 +1,17 @@
#ifndef CITUS_PG_DIST_REBALANCE_TASK_DETAILS_H
#define CITUS_PG_DIST_REBALANCE_TASK_DETAILS_H
/* ----------------
* compiler constants for pg_dist_rebalance_task_details
* ----------------
*/
#define Natts_pg_dist_rebalance_task_details 6
#define Anum_pg_dist_rebalance_task_details_job_id 1
#define Anum_pg_dist_rebalance_task_details_task_id 2
#define Anum_pg_dist_rebalance_task_details_source_node 3
#define Anum_pg_dist_rebalance_task_details_target_node 4
#define Anum_pg_dist_rebalance_task_details_shard_id 5
#define Anum_pg_dist_rebalance_task_details_details 6
#endif /* CITUS_PG_DIST_REBALANCE_TASK_DETAILS_H */