/*-------------------------------------------------------------------------
 *
 * pg_dist_placement.h
 *	  definition of the "server" relation (pg_dist_placement).
 *
 * This table keeps information on remote shards and their whereabouts on the
 * coordinator node. The table's contents are updated and used as follows: (i) the
 * worker nodes send periodic reports about the shards they contain, and (ii)
 * the coordinator reconciles these shard reports, and determines outdated, under-
 * and over-replicated shards.
 *
 * Copyright (c) Citus Data, Inc.
 *
 *-------------------------------------------------------------------------
 */

#ifndef PG_DIST_PLACEMENT_H
#define PG_DIST_PLACEMENT_H

/* ----------------
 *		pg_dist_placement definition.
 * ----------------
 */
typedef struct FormData_pg_dist_placement
{
	int64 placementid;          /* global placementId on remote node */
	int64 shardid;              /* global shardId on remote node */
	int32 shardstate;           /* shard state on remote node; see ShardState */
	int64 shardlength;          /* shard length on remote node; stored as bigint */
	int32 groupid;              /* the group the shard is placed on */
} FormData_pg_dist_placement;

/* ----------------
 *		Form_pg_dist_placement corresponds to a pointer to a tuple with
 *		the format of pg_dist_placement relation.
 * ----------------
 */
typedef FormData_pg_dist_placement *Form_pg_dist_placement;

/* ----------------
 *		compiler constants for pg_dist_placement
 * ----------------
 */
#define Natts_pg_dist_placement 5
#define Anum_pg_dist_placement_placementid 1
#define Anum_pg_dist_placement_shardid 2
#define Anum_pg_dist_placement_shardstate 3
#define Anum_pg_dist_placement_shardlength 4
#define Anum_pg_dist_placement_groupid 5


#endif   /* PG_DIST_PLACEMENT_H */
