IF NOT  EXISTS (SELECT * FROM SYS.OBJECTS WHERE OBJECT_ID = OBJECT_ID(N'[DBO].[LEADER_STATUS_TABLE]') AND TYPE IN (N'U'))
CREATE TABLE  LEADER_STATUS_TABLE (
  GROUP_ID VARCHAR (512) NOT NULL,
  NODE_ID VARCHAR (512) NOT NULL,
  LAST_HEARTBEAT BIGINT NOT NULL,
  PRIMARY KEY (GROUP_ID)
);

IF NOT  EXISTS (SELECT * FROM SYS.OBJECTS WHERE OBJECT_ID = OBJECT_ID(N'[DBO].[CLUSTER_NODE_STATUS_TABLE]') AND TYPE IN (N'U'))
CREATE TABLE CLUSTER_NODE_STATUS_TABLE (
  GROUP_ID VARCHAR (512) NOT NULL,
  NODE_ID VARCHAR (512) NOT NULL,
  IS_NEW_NODE INT NOT NULL,
  LAST_HEARTBEAT BIGINT NOT NULL,
  PRIMARY KEY (GROUP_ID, NODE_ID)
);

IF NOT  EXISTS (SELECT * FROM SYS.OBJECTS WHERE OBJECT_ID = OBJECT_ID(N'[DBO].[MEMBERSHIP_EVENT_TABLE]') AND TYPE IN (N'U'))
CREATE TABLE MEMBERSHIP_EVENT_TABLE (
  GROUP_ID VARCHAR (512) NOT NULL,
  NODE_ID VARCHAR (512) NOT NULL,
  CHANGE_TYPE INT NOT NULL,
  CHANGED_MEMBER_ID VARCHAR (512) NOT NULL
);

IF NOT  EXISTS (SELECT * FROM SYS.OBJECTS WHERE OBJECT_ID = OBJECT_ID(N'[DBO].[REMOVED_MEMBERS_TABLE]') AND TYPE IN (N'U'))
CREATE TABLE REMOVED_MEMBERS_TABLE (
  GROUP_ID VARCHAR (512) NOT NULL,
  NODE_ID VARCHAR (512) NOT NULL,
  REMOVED_MEMBER_ID VARCHAR (512) NOT NULL
);

IF NOT  EXISTS (SELECT * FROM SYS.OBJECTS WHERE OBJECT_ID = OBJECT_ID(N'[DBO].[COORDINATED_TASK_TABLE]') AND TYPE IN (N'U'))
CREATE TABLE COORDINATED_TASK_TABLE (
  TASK_NAME VARCHAR (512) NOT NULL,
  DESTINED_NODE_ID VARCHAR (512),
  TASK_STATE VARCHAR (32),
  PRIMARY KEY (TASK_NAME)
);
