mirror of https://github.com/yandex/odyssey.git
odissey: add connection pooler object
This commit is contained in:
parent
3535c35eda
commit
8198e87686
13
core/od.c
13
core/od.c
|
@ -28,12 +28,10 @@ void od_init(od_t *od)
|
||||||
od_loginit(&od->log);
|
od_loginit(&od->log);
|
||||||
od_schemeinit(&od->scheme);
|
od_schemeinit(&od->scheme);
|
||||||
od_configinit(&od->config, &od->log, &od->scheme);
|
od_configinit(&od->config, &od->log, &od->scheme);
|
||||||
od_poolinit(&od->pool);
|
|
||||||
}
|
}
|
||||||
|
|
||||||
void od_free(od_t *od)
|
void od_free(od_t *od)
|
||||||
{
|
{
|
||||||
od_poolfree(&od->pool);
|
|
||||||
od_schemefree(&od->scheme);
|
od_schemefree(&od->scheme);
|
||||||
od_configclose(&od->config);
|
od_configclose(&od->config);
|
||||||
od_logclose(&od->log);
|
od_logclose(&od->log);
|
||||||
|
@ -48,6 +46,7 @@ od_usage(od_t *od, char *path)
|
||||||
|
|
||||||
int od_main(od_t *od, int argc, char **argv)
|
int od_main(od_t *od, int argc, char **argv)
|
||||||
{
|
{
|
||||||
|
/* validate command line options */
|
||||||
if (argc != 2) {
|
if (argc != 2) {
|
||||||
od_usage(od, argv[0]);
|
od_usage(od, argv[0]);
|
||||||
return 1;
|
return 1;
|
||||||
|
@ -65,6 +64,7 @@ int od_main(od_t *od, int argc, char **argv)
|
||||||
}
|
}
|
||||||
config_file = argv[1];
|
config_file = argv[1];
|
||||||
}
|
}
|
||||||
|
/* config file */
|
||||||
int rc;
|
int rc;
|
||||||
rc = od_configopen(&od->config, config_file);
|
rc = od_configopen(&od->config, config_file);
|
||||||
if (rc == -1)
|
if (rc == -1)
|
||||||
|
@ -75,17 +75,24 @@ int od_main(od_t *od, int argc, char **argv)
|
||||||
od_log(&od->log, "odissey.");
|
od_log(&od->log, "odissey.");
|
||||||
od_log(&od->log, "");
|
od_log(&od->log, "");
|
||||||
od_schemeprint(&od->scheme, &od->log);
|
od_schemeprint(&od->scheme, &od->log);
|
||||||
|
/* reopen log file after config parsing */
|
||||||
if (od->scheme.log_file) {
|
if (od->scheme.log_file) {
|
||||||
rc = od_logopen(&od->log, od->scheme.log_file);
|
rc = od_logopen(&od->log, od->scheme.log_file);
|
||||||
if (rc == -1)
|
if (rc == -1)
|
||||||
return 1;
|
return 1;
|
||||||
}
|
}
|
||||||
od_log(&od->log, "");
|
od_log(&od->log, "");
|
||||||
|
/* validate configuration scheme */
|
||||||
rc = od_schemevalidate(&od->scheme, &od->log);
|
rc = od_schemevalidate(&od->scheme, &od->log);
|
||||||
if (rc == -1)
|
if (rc == -1)
|
||||||
return 1;
|
return 1;
|
||||||
od_log(&od->log, "ready.");
|
od_log(&od->log, "ready.");
|
||||||
rc = od_pooler(od);
|
/* run connection pooler */
|
||||||
|
odpooler_t pooler;
|
||||||
|
rc = od_pooler_init(&pooler, od);
|
||||||
|
if (rc == -1)
|
||||||
|
return 1;
|
||||||
|
rc = od_pooler_start(&pooler);
|
||||||
if (rc == -1)
|
if (rc == -1)
|
||||||
return 1;
|
return 1;
|
||||||
return 0;
|
return 0;
|
||||||
|
|
|
@ -13,7 +13,6 @@ struct od_t {
|
||||||
odlog_t log;
|
odlog_t log;
|
||||||
odconfig_t config;
|
odconfig_t config;
|
||||||
odscheme_t scheme;
|
odscheme_t scheme;
|
||||||
odpool_t pool;
|
|
||||||
};
|
};
|
||||||
|
|
||||||
void od_init(od_t*);
|
void od_init(od_t*);
|
||||||
|
|
|
@ -23,8 +23,30 @@
|
||||||
#include "od.h"
|
#include "od.h"
|
||||||
#include "od_pooler.h"
|
#include "od_pooler.h"
|
||||||
|
|
||||||
int od_pooler(od_t *od)
|
static inline void
|
||||||
|
od_pooler(void *arg)
|
||||||
{
|
{
|
||||||
(void)od;
|
(void)arg;
|
||||||
|
}
|
||||||
|
|
||||||
|
int od_pooler_init(odpooler_t *p, od_t *od)
|
||||||
|
{
|
||||||
|
p->env = ft_new();
|
||||||
|
if (p->env == NULL)
|
||||||
|
return -1;
|
||||||
|
p->server = ft_io_new(p->env);
|
||||||
|
if (p->server == NULL) {
|
||||||
|
ft_free(p->env);
|
||||||
|
return -1;
|
||||||
|
}
|
||||||
|
p->od = od;
|
||||||
|
od_poolinit(&p->pool);
|
||||||
|
return 0;
|
||||||
|
}
|
||||||
|
|
||||||
|
int od_pooler_start(odpooler_t *p)
|
||||||
|
{
|
||||||
|
ft_create(p->env, od_pooler, p);
|
||||||
|
ft_start(p->env);
|
||||||
return 0;
|
return 0;
|
||||||
}
|
}
|
||||||
|
|
|
@ -7,6 +7,16 @@
|
||||||
* PostgreSQL connection pooler and request router.
|
* PostgreSQL connection pooler and request router.
|
||||||
*/
|
*/
|
||||||
|
|
||||||
int od_pooler(od_t*);
|
typedef struct odpooler_t odpooler_t;
|
||||||
|
|
||||||
|
struct odpooler_t {
|
||||||
|
ft_t env;
|
||||||
|
ftio_t server;
|
||||||
|
odpool_t pool;
|
||||||
|
od_t *od;
|
||||||
|
};
|
||||||
|
|
||||||
|
int od_pooler_init(odpooler_t*, od_t*);
|
||||||
|
int od_pooler_start(odpooler_t*);
|
||||||
|
|
||||||
#endif
|
#endif
|
||||||
|
|
Loading…
Reference in New Issue