mirror of https://github.com/yandex/odyssey.git
odissey: add scheme obsolete logic
This commit is contained in:
parent
438296ae28
commit
a9969ca1ca
|
@ -134,7 +134,7 @@ od_periodic_expire(od_periodic_t *periodic)
|
|||
od_backend_close(server);
|
||||
|
||||
/* cleanup unused dynamic route */
|
||||
od_routepool_gc_route(&router->route_pool, route);
|
||||
od_routepool_gc(&router->route_pool, route);
|
||||
}
|
||||
}
|
||||
|
||||
|
|
|
@ -50,32 +50,23 @@ void od_routepool_free(od_routepool_t *pool)
|
|||
}
|
||||
}
|
||||
|
||||
void od_routepool_gc(od_routepool_t *pool)
|
||||
void od_routepool_gc(od_routepool_t *pool, od_route_t *route)
|
||||
{
|
||||
od_list_t *i, *n;
|
||||
od_list_foreach_safe(&pool->list, i, n) {
|
||||
od_route_t *route;
|
||||
route = od_container_of(i, od_route_t, link);
|
||||
od_routepool_gc_route(pool, route);
|
||||
}
|
||||
}
|
||||
if (od_serverpool_total(&route->server_pool) > 0 ||
|
||||
od_clientpool_total(&route->client_pool) > 0)
|
||||
return;
|
||||
|
||||
static inline void
|
||||
od_routepool_unlink(od_routepool_t *pool, od_route_t *route)
|
||||
{
|
||||
od_schemedb_t *scheme = route->scheme->db;
|
||||
|
||||
/* free route data */
|
||||
assert(pool->count > 0);
|
||||
pool->count--;
|
||||
od_list_unlink(&route->link);
|
||||
od_route_free(route);
|
||||
}
|
||||
|
||||
void od_routepool_gc_route(od_routepool_t *pool, od_route_t *route)
|
||||
{
|
||||
if (od_serverpool_total(&route->server_pool) == 0 &&
|
||||
od_clientpool_total(&route->client_pool) == 0)
|
||||
{
|
||||
od_routepool_unlink(pool, route);
|
||||
}
|
||||
/* maybe free obsolete scheme db */
|
||||
if (scheme->is_obsolete)
|
||||
od_schemedb_free(scheme);
|
||||
}
|
||||
|
||||
od_route_t*
|
||||
|
|
|
@ -17,9 +17,7 @@ struct od_routepool
|
|||
|
||||
void od_routepool_init(od_routepool_t*);
|
||||
void od_routepool_free(od_routepool_t*);
|
||||
|
||||
void od_routepool_gc(od_routepool_t*);
|
||||
void od_routepool_gc_route(od_routepool_t*, od_route_t*);
|
||||
void od_routepool_gc(od_routepool_t*, od_route_t*);
|
||||
|
||||
od_route_t*
|
||||
od_routepool_new(od_routepool_t*, od_schemeuser_t*,
|
||||
|
|
|
@ -310,7 +310,7 @@ od_router(void *arg)
|
|||
router->clients--;
|
||||
|
||||
/* maybe remove empty route */
|
||||
od_routepool_gc_route(&router->route_pool, route);
|
||||
od_routepool_gc(&router->route_pool, route);
|
||||
|
||||
msg_unroute->status = OD_ROK;
|
||||
machine_queue_put(msg_unroute->response, msg);
|
||||
|
|
|
@ -10,6 +10,7 @@
|
|||
#include <stdio.h>
|
||||
#include <string.h>
|
||||
#include <inttypes.h>
|
||||
#include <assert.h>
|
||||
|
||||
#include <machinarium.h>
|
||||
|
||||
|
@ -55,6 +56,9 @@ void od_scheme_init(od_scheme_t *scheme)
|
|||
od_list_init(&scheme->storages);
|
||||
}
|
||||
|
||||
static void
|
||||
od_schemestorage_free(od_schemestorage_t*);
|
||||
|
||||
void od_scheme_free(od_scheme_t *scheme)
|
||||
{
|
||||
od_list_t *i, *n;
|
||||
|
@ -128,7 +132,8 @@ od_schemestorage_match(od_scheme_t *scheme, char *name, int version)
|
|||
return match;
|
||||
}
|
||||
|
||||
void od_schemestorage_free(od_schemestorage_t *storage)
|
||||
static void
|
||||
od_schemestorage_free(od_schemestorage_t *storage)
|
||||
{
|
||||
if (storage->name)
|
||||
free(storage->name);
|
||||
|
@ -191,6 +196,12 @@ od_schemedb_match(od_scheme_t *scheme, char *name, int version)
|
|||
return match;
|
||||
}
|
||||
|
||||
void od_schemedb_mark_obsolete(od_schemedb_t *db)
|
||||
{
|
||||
assert(! db->is_obsolete);
|
||||
db->is_obsolete = 1;
|
||||
}
|
||||
|
||||
static void
|
||||
od_schemeuser_free(od_schemeuser_t*);
|
||||
|
||||
|
|
|
@ -66,6 +66,7 @@ struct od_schemedb
|
|||
od_list_t users;
|
||||
od_schemeuser_t *user_default;
|
||||
int is_default;
|
||||
int is_obsolete;
|
||||
int version;
|
||||
od_list_t link;
|
||||
};
|
||||
|
@ -150,14 +151,13 @@ void od_scheme_print(od_scheme_t*, od_log_t*);
|
|||
od_schemestorage_t*
|
||||
od_schemestorage_add(od_scheme_t*, int);
|
||||
|
||||
void od_schemestorage_free(od_schemestorage_t*);
|
||||
|
||||
od_schemestorage_t*
|
||||
od_schemestorage_match(od_scheme_t*, char*, int);
|
||||
|
||||
od_schemedb_t*
|
||||
od_schemedb_add(od_scheme_t*, int);
|
||||
|
||||
void od_schemedb_mark_obsolete(od_schemedb_t*);
|
||||
void od_schemedb_free(od_schemedb_t*);
|
||||
|
||||
od_schemedb_t*
|
||||
|
|
Loading…
Reference in New Issue