mirror of https://github.com/citusdata/citus.git
Initial background job rebalance details
parent
8b672421a2
commit
37d1c78e7d
|
@ -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)
|
||||
|
|
|
@ -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;
|
||||
}
|
||||
|
|
|
@ -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"
|
||||
|
|
|
@ -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)
|
||||
|
|
|
@ -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);
|
||||
|
|
|
@ -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 */
|
Loading…
Reference in New Issue