MXS-936: destroyInstance added for filters

MXS-936: destroyInstance added for filters
This commit is contained in:
MassimilianoPinto
2016-11-08 17:09:49 +01:00
parent 61f0603e39
commit 4e36e86820
17 changed files with 56 additions and 14 deletions

View File

@ -83,6 +83,7 @@ typedef struct filter_object
int (*clientReply)(FILTER *instance, void *fsession, GWBUF *queue);
void (*diagnostics)(FILTER *instance, void *fsession, DCB *dcb);
uint64_t (*getCapabilities)(void);
void (*destroyInstance)(FILTER *instance);
} FILTER_OBJECT;
/**

View File

@ -1833,6 +1833,18 @@ void service_shutdown()
{
svc->router->destroyInstance(svc->router_instance);
}
if (svc->n_filters)
{
FILTER_DEF **filters = svc->filters;
for (int i=0; i < svc->n_filters; i++)
{
if (filters[i]->obj->destroyInstance)
{
/* Call destroyInstance hook for filters */
filters[i]->obj->destroyInstance(filters[i]->filter);
}
}
}
svc = svc->next;
}
spinlock_release(&service_spin);

View File

@ -80,7 +80,8 @@ FILTER_OBJECT *GetModuleObject()
routeQuery,
clientReply,
diagnostics,
getCapabilities
getCapabilities,
NULL, // destroyInstance
};
return &object;

View File

@ -75,9 +75,10 @@ static FILTER_OBJECT MyObject =
setDownstream,
NULL, // No Upstream requirement
routeQuery,
NULL,
NULL, // No clientReply
diagnostic,
getCapabilities,
NULL, // No destroyInstance
};
#define CCR_DEFAULT_TIME 60

View File

@ -114,11 +114,12 @@ static FILTER_OBJECT MyObject =
closeSession,
freeSession,
setDownstream,
NULL,
NULL, // No setUpStream
routeQuery,
NULL,
NULL, // No clientReply
diagnostic,
getCapabilities,
NULL, // No destroyInstance
};
/**

View File

@ -103,9 +103,10 @@ static FILTER_OBJECT MyObject =
setDownstream,
NULL, // No upstream requirement
routeQuery,
NULL,
NULL, // No clientReply
diagnostic,
getCapabilities,
NULL, // No destroyInstance
};
/**

View File

@ -52,9 +52,10 @@ static FILTER_OBJECT MyObject =
setDownstream,
NULL, // No upstream requirement
routeQuery,
NULL,
NULL, // No clientReply
diagnostic,
getCapabilities,
NULL, // No destroyInstance
};
/**

View File

@ -96,6 +96,7 @@ static FILTER_OBJECT MyObject =
clientReply,
diagnostic,
getCapabilities,
NULL, // No destroyInstance
};
/**

View File

@ -98,7 +98,8 @@ FILTER_OBJECT *GetModuleObject()
routeQuery,
clientReply,
diagnostics,
getCapabilities
getCapabilities,
NULL, // No destroyInstance
};
return &object;
@ -917,4 +918,3 @@ static int send_ok_upstream(MAXROWS_SESSION_DATA *csdata)
return rv;
}

View File

@ -116,6 +116,7 @@ static FILTER_OBJECT MyObject =
clientReply,
diagnostic,
getCapabilities,
NULL, // No destroyInstance
};
/**

View File

@ -69,9 +69,10 @@ static FILTER_OBJECT MyObject =
setDownstream,
NULL, // No Upstream requirement
routeQuery,
NULL,
NULL, // No clientReply
diagnostic,
getCapabilities,
NULL, // No destroyInstance
};
/**

View File

@ -87,6 +87,7 @@ static FILTER_OBJECT MyObject =
NULL, // No client reply
diagnostic,
getCapabilities,
NULL, // No destroyInstance
};
/**

View File

@ -71,9 +71,10 @@ static FILTER_OBJECT MyObject =
setDownstream,
NULL, // No Upstream requirement
routeQuery,
NULL,
NULL, // No clientReply
diagnostic,
getCapabilities,
NULL, // No destroyInstance
};
/**

View File

@ -130,6 +130,7 @@ static FILTER_OBJECT MyObject =
clientReply,
diagnostic,
getCapabilities,
NULL, // No destroyInstance
};
/**

View File

@ -37,7 +37,7 @@ MODULE_INFO info =
"A simple query counting filter"
};
static char *version_str = "V1.0.0";
static char *version_str = "V2.0.0";
static FILTER *createInstance(const char *name, char **options, FILTER_PARAMETER **params);
static void *newSession(FILTER *instance, SESSION *session);
@ -47,6 +47,7 @@ static void setDownstream(FILTER *instance, void *fsession, DOWNSTREAM *down
static int routeQuery(FILTER *instance, void *fsession, GWBUF *queue);
static void diagnostic(FILTER *instance, void *fsession, DCB *dcb);
static uint64_t getCapabilities(void);
static void destroyInstance(FILTER *instance);
static FILTER_OBJECT MyObject =
@ -58,9 +59,10 @@ static FILTER_OBJECT MyObject =
setDownstream,
NULL, // No upstream requirement
routeQuery,
NULL,
NULL, // No clientReply
diagnostic,
getCapabilities,
destroyInstance,
};
/**
@ -68,6 +70,7 @@ static FILTER_OBJECT MyObject =
*/
typedef struct
{
const char *name;
int sessions;
} TEST_INSTANCE;
@ -135,6 +138,7 @@ createInstance(const char *name, char **options, FILTER_PARAMETER **params)
if ((my_instance = MXS_CALLOC(1, sizeof(TEST_INSTANCE))) != NULL)
{
my_instance->sessions = 0;
my_instance->name = name;
}
return (FILTER *)my_instance;
}
@ -258,3 +262,15 @@ static uint64_t getCapabilities(void)
{
return RCAP_TYPE_NONE;
}
/**
* destroyInstance routine.
*
* @param The filter instance.
*/
static void destroyInstance(FILTER *instance)
{
TEST_INSTANCE *cinstance = (TEST_INSTANCE *)instance;
MXS_INFO("Destroying filter %s", cinstance->name);
}

View File

@ -82,6 +82,7 @@ static FILTER_OBJECT MyObject =
clientReply,
diagnostic,
getCapabilities,
NULL, // No destroyInstance
};
/**

View File

@ -95,6 +95,7 @@ static FILTER_OBJECT MyObject =
clientReply,
diagnostic,
getCapabilities,
NULL, // No destroyInstance
};
/**