Clear old config before loading new one.
authorMarko Kreen <markokr@gmail.com>
Mon, 2 Apr 2012 10:11:03 +0000 (13:11 +0300)
committerMarko Kreen <markokr@gmail.com>
Mon, 2 Apr 2012 10:11:03 +0000 (13:11 +0300)
This allows falling back to defaults when
some value is dropped from config.

src/cluster.c

index eed1cbc3aa82ac95fed1c580464e51a8d2979037..f32df7fa9369e97688f9e2fb9bfe114f1b0ca2d3 100644 (file)
@@ -288,6 +288,13 @@ get_version(ProxyFunction *func, Datum dname)
        return DatumGetInt32(bin_val);
 }
 
+/* forget old values */
+static void
+clear_config(ProxyConfig *cf)
+{
+       memset(cf, 0, sizeof(*cf));
+}
+
 /* set a configuration option. */
 static void
 set_config_key(ProxyFunction *func, ProxyConfig *cf, const char *key, const char *val)
@@ -336,6 +343,8 @@ get_config(ProxyCluster *cluster, Datum dname, ProxyFunction *func)
        if (SPI_gettypeid(desc, 2) != TEXTOID)
                plproxy_error(func, "Config column 2 must be text");
 
+       clear_config(&cluster->config);
+
        /* fill values */
        for (i = 0; i < SPI_processed; i++)
        {
@@ -648,6 +657,9 @@ reload_sqlmed_cluster(ProxyFunction *func, ProxyCluster *cluster,
        if (aclresult != ACLCHECK_OK)
                aclcheck_error(aclresult, ACL_KIND_FOREIGN_SERVER, foreign_server->servername);
 
+       /* drop old config values */
+       clear_config(&cluster->config);
+
        /*
         * Collect the configuration definitions from foreign data wrapper.
         */