Fix avrorouter client notification
The avrorouter client notification now uses dcb_foreach.
This commit is contained in:
@ -446,31 +446,22 @@ static GWBUF* read_event_data(Avro *router, REP_HEADER* hdr, uint64_t pos)
|
|||||||
return result;
|
return result;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
bool notify_cb(DCB* dcb, void* data)
|
||||||
|
{
|
||||||
|
SERVICE* service = static_cast<SERVICE*>(data);
|
||||||
|
|
||||||
|
if (dcb->service == service && dcb->dcb_role == DCB_ROLE_CLIENT_HANDLER)
|
||||||
|
{
|
||||||
|
AvroSession* ses = reinterpret_cast<AvroSession*>(dcb->session->router_session);
|
||||||
|
avro_notify_client(ses);
|
||||||
|
}
|
||||||
|
|
||||||
|
return true;
|
||||||
|
}
|
||||||
|
|
||||||
void notify_all_clients(Avro *router)
|
void notify_all_clients(Avro *router)
|
||||||
{
|
{
|
||||||
AvroSession *client = router->clients;
|
dcb_foreach(notify_cb, router->service);
|
||||||
int notified = 0;
|
|
||||||
|
|
||||||
/* TODO: Use dcb_foreach or some similar mechanism for this
|
|
||||||
|
|
||||||
while (client)
|
|
||||||
{
|
|
||||||
spinlock_acquire(&client->catch_lock);
|
|
||||||
if (client->cstate & AVRO_WAIT_DATA)
|
|
||||||
{
|
|
||||||
notified++;
|
|
||||||
avro_notify_client(client);
|
|
||||||
}
|
|
||||||
spinlock_release(&client->catch_lock);
|
|
||||||
|
|
||||||
client = client->next;
|
|
||||||
}
|
|
||||||
*/
|
|
||||||
|
|
||||||
if (notified > 0)
|
|
||||||
{
|
|
||||||
MXS_INFO("Notified %d clients about new data.", notified);
|
|
||||||
}
|
|
||||||
}
|
}
|
||||||
|
|
||||||
void do_checkpoint(Avro *router, uint64_t *total_rows, uint64_t *total_commits)
|
void do_checkpoint(Avro *router, uint64_t *total_rows, uint64_t *total_commits)
|
||||||
|
|||||||
Reference in New Issue
Block a user