src/server/plugins/postgresql/resource.c

Sun, 27 Nov 2022 13:33:30 +0100

author
Olaf Wintermann <olaf.wintermann@gmail.com>
date
Sun, 27 Nov 2022 13:33:30 +0100
changeset 443
ef3c8a0e1fee
parent 390
144332e23ffd
permissions
-rw-r--r--

improve daemon startup
parent will wait until daemon is started and returns error code if startup failed
daemon startup log messages will be printed by parent

270
4cfaa02055cd add first code for postgresql plugin: resourcepool type implementation
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
diff changeset
1 /*
4cfaa02055cd add first code for postgresql plugin: resourcepool type implementation
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
diff changeset
2 * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS HEADER.
4cfaa02055cd add first code for postgresql plugin: resourcepool type implementation
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
diff changeset
3 *
4cfaa02055cd add first code for postgresql plugin: resourcepool type implementation
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
diff changeset
4 * Copyright 2022 Olaf Wintermann. All rights reserved.
4cfaa02055cd add first code for postgresql plugin: resourcepool type implementation
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
diff changeset
5 *
4cfaa02055cd add first code for postgresql plugin: resourcepool type implementation
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
diff changeset
6 * Redistribution and use in source and binary forms, with or without
4cfaa02055cd add first code for postgresql plugin: resourcepool type implementation
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
diff changeset
7 * modification, are permitted provided that the following conditions are met:
4cfaa02055cd add first code for postgresql plugin: resourcepool type implementation
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
diff changeset
8 *
4cfaa02055cd add first code for postgresql plugin: resourcepool type implementation
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
diff changeset
9 * 1. Redistributions of source code must retain the above copyright
4cfaa02055cd add first code for postgresql plugin: resourcepool type implementation
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
diff changeset
10 * notice, this list of conditions and the following disclaimer.
4cfaa02055cd add first code for postgresql plugin: resourcepool type implementation
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
diff changeset
11 *
4cfaa02055cd add first code for postgresql plugin: resourcepool type implementation
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
diff changeset
12 * 2. Redistributions in binary form must reproduce the above copyright
4cfaa02055cd add first code for postgresql plugin: resourcepool type implementation
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
diff changeset
13 * notice, this list of conditions and the following disclaimer in the
4cfaa02055cd add first code for postgresql plugin: resourcepool type implementation
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
diff changeset
14 * documentation and/or other materials provided with the distribution.
4cfaa02055cd add first code for postgresql plugin: resourcepool type implementation
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
diff changeset
15 *
4cfaa02055cd add first code for postgresql plugin: resourcepool type implementation
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
diff changeset
16 * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS"
4cfaa02055cd add first code for postgresql plugin: resourcepool type implementation
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
diff changeset
17 * AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
4cfaa02055cd add first code for postgresql plugin: resourcepool type implementation
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
diff changeset
18 * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE
4cfaa02055cd add first code for postgresql plugin: resourcepool type implementation
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
diff changeset
19 * ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDER OR CONTRIBUTORS BE
4cfaa02055cd add first code for postgresql plugin: resourcepool type implementation
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
diff changeset
20 * LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR
4cfaa02055cd add first code for postgresql plugin: resourcepool type implementation
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
diff changeset
21 * CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF
4cfaa02055cd add first code for postgresql plugin: resourcepool type implementation
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
diff changeset
22 * SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS
4cfaa02055cd add first code for postgresql plugin: resourcepool type implementation
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
diff changeset
23 * INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN
4cfaa02055cd add first code for postgresql plugin: resourcepool type implementation
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
diff changeset
24 * CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE)
4cfaa02055cd add first code for postgresql plugin: resourcepool type implementation
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
diff changeset
25 * ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE
4cfaa02055cd add first code for postgresql plugin: resourcepool type implementation
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
diff changeset
26 * POSSIBILITY OF SUCH DAMAGE.
4cfaa02055cd add first code for postgresql plugin: resourcepool type implementation
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
diff changeset
27 */
4cfaa02055cd add first code for postgresql plugin: resourcepool type implementation
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
diff changeset
28
4cfaa02055cd add first code for postgresql plugin: resourcepool type implementation
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
diff changeset
29 #include "resource.h"
4cfaa02055cd add first code for postgresql plugin: resourcepool type implementation
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
diff changeset
30
4cfaa02055cd add first code for postgresql plugin: resourcepool type implementation
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
diff changeset
31 static ResourceType pg_resource_type = {
4cfaa02055cd add first code for postgresql plugin: resourcepool type implementation
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
diff changeset
32 (resource_pool_init_func)pg_resourcepool_init,
4cfaa02055cd add first code for postgresql plugin: resourcepool type implementation
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
diff changeset
33 (resource_pool_destroy_func)pg_resourcepool_destroy,
4cfaa02055cd add first code for postgresql plugin: resourcepool type implementation
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
diff changeset
34 (resource_pool_createresource_func)pg_resourcepool_createresource,
4cfaa02055cd add first code for postgresql plugin: resourcepool type implementation
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
diff changeset
35 (resource_pool_freeresource_func)pg_resourcepool_freeresource,
4cfaa02055cd add first code for postgresql plugin: resourcepool type implementation
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
diff changeset
36 (resource_pool_prepare_func)pg_resourcepool_prepare,
4cfaa02055cd add first code for postgresql plugin: resourcepool type implementation
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
diff changeset
37 (resource_pool_finish_func)pg_resourcepool_finish,
4cfaa02055cd add first code for postgresql plugin: resourcepool type implementation
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
diff changeset
38 (resource_pool_getresourcedata_func)pg_resourcepool_getresourcedata
4cfaa02055cd add first code for postgresql plugin: resourcepool type implementation
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
diff changeset
39 };
4cfaa02055cd add first code for postgresql plugin: resourcepool type implementation
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
diff changeset
40
4cfaa02055cd add first code for postgresql plugin: resourcepool type implementation
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
diff changeset
41 ResourceType* pg_get_resource_type(void) {
4cfaa02055cd add first code for postgresql plugin: resourcepool type implementation
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
diff changeset
42 return &pg_resource_type;
4cfaa02055cd add first code for postgresql plugin: resourcepool type implementation
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
diff changeset
43 }
4cfaa02055cd add first code for postgresql plugin: resourcepool type implementation
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
diff changeset
44
4cfaa02055cd add first code for postgresql plugin: resourcepool type implementation
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
diff changeset
45 void * pg_resourcepool_init(pool_handle_t *pool, const char *rpname, pblock *pb) {
4cfaa02055cd add first code for postgresql plugin: resourcepool type implementation
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
diff changeset
46 char *connection = pblock_findval("Connection", pb);
4cfaa02055cd add first code for postgresql plugin: resourcepool type implementation
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
diff changeset
47 if(!connection) {
4cfaa02055cd add first code for postgresql plugin: resourcepool type implementation
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
diff changeset
48 log_ereport(LOG_MISCONFIG, "Resource pool %s: Missing Connection parameter", rpname);
4cfaa02055cd add first code for postgresql plugin: resourcepool type implementation
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
diff changeset
49 return NULL;
4cfaa02055cd add first code for postgresql plugin: resourcepool type implementation
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
diff changeset
50 }
4cfaa02055cd add first code for postgresql plugin: resourcepool type implementation
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
diff changeset
51
4cfaa02055cd add first code for postgresql plugin: resourcepool type implementation
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
diff changeset
52 // test connection
4cfaa02055cd add first code for postgresql plugin: resourcepool type implementation
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
diff changeset
53 PGconn *test_connection = PQconnectdb(connection);
390
144332e23ffd reduce log warnings in case pg_check_connection fails
Olaf Wintermann <olaf.wintermann@gmail.com>
parents: 389
diff changeset
54 // pg_check_connections logs errors, so we don't really need to handle
144332e23ffd reduce log warnings in case pg_check_connection fails
Olaf Wintermann <olaf.wintermann@gmail.com>
parents: 389
diff changeset
55 // any error here
144332e23ffd reduce log warnings in case pg_check_connection fails
Olaf Wintermann <olaf.wintermann@gmail.com>
parents: 389
diff changeset
56 pg_check_connection(LOG_WARN, rpname, test_connection);
271
fd5765c5068c don't fail webserver init in case a resourcepool ping fails
Olaf Wintermann <olaf.wintermann@gmail.com>
parents: 270
diff changeset
57 if(test_connection) PQfinish(test_connection);
270
4cfaa02055cd add first code for postgresql plugin: resourcepool type implementation
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
diff changeset
58
4cfaa02055cd add first code for postgresql plugin: resourcepool type implementation
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
diff changeset
59 PgResourcePool *pg = pool_malloc(pool, sizeof(PgResourcePool));
4cfaa02055cd add first code for postgresql plugin: resourcepool type implementation
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
diff changeset
60 if(!pg) {
4cfaa02055cd add first code for postgresql plugin: resourcepool type implementation
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
diff changeset
61 return NULL;
4cfaa02055cd add first code for postgresql plugin: resourcepool type implementation
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
diff changeset
62 }
4cfaa02055cd add first code for postgresql plugin: resourcepool type implementation
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
diff changeset
63 pg->pool = pool;
4cfaa02055cd add first code for postgresql plugin: resourcepool type implementation
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
diff changeset
64 pg->name = rpname;
4cfaa02055cd add first code for postgresql plugin: resourcepool type implementation
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
diff changeset
65 pg->connection = connection;
4cfaa02055cd add first code for postgresql plugin: resourcepool type implementation
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
diff changeset
66
4cfaa02055cd add first code for postgresql plugin: resourcepool type implementation
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
diff changeset
67 return pg;
4cfaa02055cd add first code for postgresql plugin: resourcepool type implementation
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
diff changeset
68
4cfaa02055cd add first code for postgresql plugin: resourcepool type implementation
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
diff changeset
69 }
4cfaa02055cd add first code for postgresql plugin: resourcepool type implementation
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
diff changeset
70
271
fd5765c5068c don't fail webserver init in case a resourcepool ping fails
Olaf Wintermann <olaf.wintermann@gmail.com>
parents: 270
diff changeset
71 int pg_check_connection(int loglevel, const char *rpname, PGconn *connection) {
270
4cfaa02055cd add first code for postgresql plugin: resourcepool type implementation
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
diff changeset
72 if(!connection) {
271
fd5765c5068c don't fail webserver init in case a resourcepool ping fails
Olaf Wintermann <olaf.wintermann@gmail.com>
parents: 270
diff changeset
73 log_ereport(loglevel, "Resource pool %s: Cannot create PQ connection", rpname);
270
4cfaa02055cd add first code for postgresql plugin: resourcepool type implementation
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
diff changeset
74 return 1;
4cfaa02055cd add first code for postgresql plugin: resourcepool type implementation
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
diff changeset
75 }
4cfaa02055cd add first code for postgresql plugin: resourcepool type implementation
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
diff changeset
76 if(PQstatus(connection) != CONNECTION_OK) {
4cfaa02055cd add first code for postgresql plugin: resourcepool type implementation
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
diff changeset
77 char *err = PQerrorMessage(connection);
4cfaa02055cd add first code for postgresql plugin: resourcepool type implementation
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
diff changeset
78 int errlen = 0;
4cfaa02055cd add first code for postgresql plugin: resourcepool type implementation
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
diff changeset
79 if(err) {
4cfaa02055cd add first code for postgresql plugin: resourcepool type implementation
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
diff changeset
80 errlen = strlen(err);
4cfaa02055cd add first code for postgresql plugin: resourcepool type implementation
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
diff changeset
81 if(errlen > 0 && err[errlen-1] == '\n') {
4cfaa02055cd add first code for postgresql plugin: resourcepool type implementation
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
diff changeset
82 errlen--;
4cfaa02055cd add first code for postgresql plugin: resourcepool type implementation
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
diff changeset
83 }
4cfaa02055cd add first code for postgresql plugin: resourcepool type implementation
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
diff changeset
84 }
271
fd5765c5068c don't fail webserver init in case a resourcepool ping fails
Olaf Wintermann <olaf.wintermann@gmail.com>
parents: 270
diff changeset
85 log_ereport(loglevel, "Resource pool %s: Failed to connect to database: %.*s", rpname, errlen, err);
270
4cfaa02055cd add first code for postgresql plugin: resourcepool type implementation
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
diff changeset
86 return 1;
4cfaa02055cd add first code for postgresql plugin: resourcepool type implementation
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
diff changeset
87 }
4cfaa02055cd add first code for postgresql plugin: resourcepool type implementation
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
diff changeset
88 return 0;
4cfaa02055cd add first code for postgresql plugin: resourcepool type implementation
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
diff changeset
89 }
4cfaa02055cd add first code for postgresql plugin: resourcepool type implementation
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
diff changeset
90
4cfaa02055cd add first code for postgresql plugin: resourcepool type implementation
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
diff changeset
91
272
f210681d9dd0 add minimal working implementation for resourcepool_lookup()
Olaf Wintermann <olaf.wintermann@gmail.com>
parents: 271
diff changeset
92 void pg_resourcepool_destroy(PgResourcePool *pg) {
270
4cfaa02055cd add first code for postgresql plugin: resourcepool type implementation
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
diff changeset
93 // unused
4cfaa02055cd add first code for postgresql plugin: resourcepool type implementation
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
diff changeset
94 }
4cfaa02055cd add first code for postgresql plugin: resourcepool type implementation
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
diff changeset
95
4cfaa02055cd add first code for postgresql plugin: resourcepool type implementation
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
diff changeset
96 void * pg_resourcepool_createresource(PgResourcePool *pg) {
4cfaa02055cd add first code for postgresql plugin: resourcepool type implementation
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
diff changeset
97 PGconn *connection = PQconnectdb(pg->connection);
271
fd5765c5068c don't fail webserver init in case a resourcepool ping fails
Olaf Wintermann <olaf.wintermann@gmail.com>
parents: 270
diff changeset
98 if(pg_check_connection(LOG_FAILURE, pg->name, connection)) {
270
4cfaa02055cd add first code for postgresql plugin: resourcepool type implementation
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
diff changeset
99 return NULL;
4cfaa02055cd add first code for postgresql plugin: resourcepool type implementation
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
diff changeset
100 }
4cfaa02055cd add first code for postgresql plugin: resourcepool type implementation
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
diff changeset
101
4cfaa02055cd add first code for postgresql plugin: resourcepool type implementation
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
diff changeset
102 PgResource *res = pool_malloc(pg->pool, sizeof(PgResource));
4cfaa02055cd add first code for postgresql plugin: resourcepool type implementation
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
diff changeset
103 if(!res) {
4cfaa02055cd add first code for postgresql plugin: resourcepool type implementation
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
diff changeset
104 PQfinish(connection);
4cfaa02055cd add first code for postgresql plugin: resourcepool type implementation
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
diff changeset
105 log_ereport(LOG_CATASTROPHE, "pg_resourcepool_createresource: OOM");
4cfaa02055cd add first code for postgresql plugin: resourcepool type implementation
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
diff changeset
106 return NULL;
4cfaa02055cd add first code for postgresql plugin: resourcepool type implementation
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
diff changeset
107 }
4cfaa02055cd add first code for postgresql plugin: resourcepool type implementation
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
diff changeset
108 res->connection = connection;
4cfaa02055cd add first code for postgresql plugin: resourcepool type implementation
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
diff changeset
109
4cfaa02055cd add first code for postgresql plugin: resourcepool type implementation
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
diff changeset
110 return res;
4cfaa02055cd add first code for postgresql plugin: resourcepool type implementation
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
diff changeset
111 }
4cfaa02055cd add first code for postgresql plugin: resourcepool type implementation
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
diff changeset
112
272
f210681d9dd0 add minimal working implementation for resourcepool_lookup()
Olaf Wintermann <olaf.wintermann@gmail.com>
parents: 271
diff changeset
113 void pg_resourcepool_freeresource(PgResourcePool *pg, PgResource *res) {
270
4cfaa02055cd add first code for postgresql plugin: resourcepool type implementation
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
diff changeset
114 if(res->connection) {
4cfaa02055cd add first code for postgresql plugin: resourcepool type implementation
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
diff changeset
115 PQfinish(res->connection);
4cfaa02055cd add first code for postgresql plugin: resourcepool type implementation
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
diff changeset
116 }
343
78ce9733a54f fix resource pool memory management
Olaf Wintermann <olaf.wintermann@gmail.com>
parents: 283
diff changeset
117 pool_free(pg->pool, res);
270
4cfaa02055cd add first code for postgresql plugin: resourcepool type implementation
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
diff changeset
118 }
4cfaa02055cd add first code for postgresql plugin: resourcepool type implementation
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
diff changeset
119
272
f210681d9dd0 add minimal working implementation for resourcepool_lookup()
Olaf Wintermann <olaf.wintermann@gmail.com>
parents: 271
diff changeset
120 int pg_resourcepool_prepare(PgResourcePool *pg, PgResource *res) {
283
25e5b771677d minimal working send_file with postgresql vfs
Olaf Wintermann <olaf.wintermann@gmail.com>
parents: 272
diff changeset
121 PGresult *result = PQexec(res->connection, "BEGIN");
25e5b771677d minimal working send_file with postgresql vfs
Olaf Wintermann <olaf.wintermann@gmail.com>
parents: 272
diff changeset
122 PQclear(result); // TODO: handle error
270
4cfaa02055cd add first code for postgresql plugin: resourcepool type implementation
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
diff changeset
123 return 0;
4cfaa02055cd add first code for postgresql plugin: resourcepool type implementation
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
diff changeset
124 }
4cfaa02055cd add first code for postgresql plugin: resourcepool type implementation
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
diff changeset
125
272
f210681d9dd0 add minimal working implementation for resourcepool_lookup()
Olaf Wintermann <olaf.wintermann@gmail.com>
parents: 271
diff changeset
126 int pg_resourcepool_finish(PgResourcePool *pg, PgResource *res) {
283
25e5b771677d minimal working send_file with postgresql vfs
Olaf Wintermann <olaf.wintermann@gmail.com>
parents: 272
diff changeset
127 PGresult *result = PQexec(res->connection, "COMMIT");
382
9e2289c77b04 disable pg large object IO functions for collections
Olaf Wintermann <olaf.wintermann@gmail.com>
parents: 343
diff changeset
128 if(PQresultStatus(result) != PGRES_COMMAND_OK) {
9e2289c77b04 disable pg large object IO functions for collections
Olaf Wintermann <olaf.wintermann@gmail.com>
parents: 343
diff changeset
129 log_ereport(LOG_FAILURE, "pg_dav_proppatch_finish: COMMIT failed failed: %s", PQerrorMessage(res->connection));
9e2289c77b04 disable pg large object IO functions for collections
Olaf Wintermann <olaf.wintermann@gmail.com>
parents: 343
diff changeset
130 }
9e2289c77b04 disable pg large object IO functions for collections
Olaf Wintermann <olaf.wintermann@gmail.com>
parents: 343
diff changeset
131 PQclear(result);
270
4cfaa02055cd add first code for postgresql plugin: resourcepool type implementation
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
diff changeset
132 return 0;
4cfaa02055cd add first code for postgresql plugin: resourcepool type implementation
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
diff changeset
133 }
4cfaa02055cd add first code for postgresql plugin: resourcepool type implementation
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
diff changeset
134
4cfaa02055cd add first code for postgresql plugin: resourcepool type implementation
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
diff changeset
135 void * pg_resourcepool_getresourcedata(PgResource *res) {
4cfaa02055cd add first code for postgresql plugin: resourcepool type implementation
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
diff changeset
136 return res->connection;
4cfaa02055cd add first code for postgresql plugin: resourcepool type implementation
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
diff changeset
137 }

mercurial