odissey: add scheme obsolete logic

This commit is contained in:
Dmitry Simonenko 2017-07-17 17:05:46 +03:00
parent 438296ae28
commit a9969ca1ca
6 changed files with 27 additions and 27 deletions

View File

@ -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);
}
}

View File

@ -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*

View File

@ -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*,

View File

@ -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);

View File

@ -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*);

View File

@ -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*