[pgcluster: 141] Re: PostPortNumber and sock == -1 in PGR_Send_Replicate_Command()

mitani mitani @ sraw.co.jp
2004年 2月 23日 (月) 15:30:12 JST


三谷@広島です.

> (1) pgcluster を -R 付きで立ち上げると、RECOVERY_PREPARE_REQ なパケッ
>     トが投げられると思うんですが、pgcluster のポート番号を
>     $PGDATA/postgresql.conf で指定しても、このパケットには正しいポート
>     番号が入らないようです
$PGDATA/postgresql.confを読む前にリカバリーを実行していました.

src/backend/postmaster/postmaster.cの613行辺りですね.

    checkDataDir(potential_DataDir);    /* issues error messages */
    SetDataDir(potential_DataDir);
+   ProcessConfigFile(PGC_POSTMASTER);
#ifdef USE_REPLICATION
    PGR_Get_Conf_Data( potential_DataDir, CLUSTER_CONF_FILE );
    PGR_Init_Replicate_Server_Data();
    PGR_Set_Replicate_Server_Socket();
    PGR_Free_Conf_Data();
    if (recovery_flag)
    {
        if (PGR_Recovery_Main() != STATUS_OK)
        {

            PGR_delete_shm();
            postmaster_error("recovery failed");
            ExitPostmaster(1);
        }
    }
#endif /* USE_REPLICATION */
-   ProcessConfigFile(PGC_POSTMASTER);

> (2) libpq/replicate.c の PGR_Send_Replicate_Command() なんですが、
>     search_new_replication_server() が -1 を返すときがあるようで、その
パラメータチェック漏れですね.頂いたパッチとは違いますが,
libpq/replicate.c の712行目辺りにパラメータチェックを入れました.

+    /* check parameter */
+    if ((sock <= 0) || (header == NULL) || (query_string == NULL))
+    {
+        return STATUS_ERROR;
+    }
    /*header->query_size +=1;*/
    header_size = sizeof(ReplicateHeader);

=============================
三谷 篤<mitani @ sraw.co.jp>
=============================






pgcluster メーリングリストの案内