コード例 #1
0
ファイル: gtm_standby.c プロジェクト: yazun/postgres-xc
/*
 * Register myself to the GTM (active) as a "disconnected" node.
 *
 * This status would be updated later after restoring completion.
 * See gtm_standby_update_self().
 *
 * Returns 1 on success, 0 on failure.
 */
int
gtm_standby_register_self(const char *node_name, int port, const char *datadir)
{
	int rc;

	elog(LOG, "Registering standby-GTM status...");

	node_get_local_addr(GTM_ActiveConn, standbyHostName, sizeof(standbyNodeName), &rc);
	if (rc != 0)
		return 0;

	memset(standbyNodeName, 0, NI_MAXHOST);
	strncpy(standbyNodeName, node_name, NI_MAXHOST - 1);
	standbyPortNumber = port;
	standbyDataDir= (char *)datadir;

	rc = node_register_internal(GTM_ActiveConn, GTM_NODE_GTM, standbyHostName, standbyPortNumber,
								standbyNodeName, standbyDataDir, NODE_DISCONNECTED);
	if (rc < 0)
	{
		elog(LOG, "Failed to register a standby-GTM status.");
		return 0;
	}

	elog(LOG, "Registering standby-GTM done.");

	return 1;
}
コード例 #2
0
void
test01()
{
    GlobalTransactionId gxid;
    int rc;
    char host[1024];

    printf("\n=== test01:node_register ===\n");

    setUp();

    node_get_local_addr(conn, host, sizeof(host));

    /*
     * starting
     */
    rc = node_register_internal(conn, GTM_NODE_GTM, host, 6667, "One zero two", "/tmp/pgxc/data/gtm_standby", NODE_DISCONNECTED);
    _ASSERT(rc == 0);
    rc = node_unregister(conn, GTM_NODE_GTM, "One zero two");
    _ASSERT(rc == 0);

    rc = node_register_internal(conn, GTM_NODE_GTM, host, 6667, "One zero two", "/tmp/pgxc/data/gtm_standby", NODE_CONNECTED);
    _ASSERT(rc == 0);

    sleep(10);

    gxid = begin_transaction(conn, GTM_ISOLATION_SERIALIZABLE, timestamp);
    _ASSERT( gxid!=InvalidGlobalTransactionId );

    rc = prepare_transaction(conn, gxid);
    _ASSERT( rc!=-1 );

    rc = abort_transaction(conn, gxid);
    _ASSERT( rc!=-1 );

    sleep(10);

    /*
     * closing
     */
    rc = node_unregister(conn, GTM_NODE_GTM, "One zero two");
    _ASSERT( rc==0 );

    tearDown();
}