static void deliveryServiceUnSubscribe( void *o, void *arg) { v_partition p = v_partition(o); v_deliveryServiceEntry e = v_deliveryServiceEntry(arg); v_kernel kernel; v_group g; c_value params[2]; c_iter list; assert(C_TYPECHECK(e,v_deliveryServiceEntry)); assert(C_TYPECHECK(p,v_partition)); params[0] = c_objectValue(p); params[1] = c_objectValue(e->topic); kernel = v_objectKernel(e); list = v_groupSetSelect(kernel->groupSet, "partition = %0 and topic = %1", params); while ((g = c_iterTakeFirst(list)) != NULL) { v_groupRemoveEntry(g,v_entry(e)); c_free(g); } c_iterFree(list); }
c_bool v_groupStreamSubscribe( v_groupStream stream, v_partition partition) { c_iter list; v_kernel kernel; c_value params[1]; v_group group; assert(C_TYPECHECK(stream,v_groupStream)); kernel = v_objectKernel(v_entity(partition)); params[0] = c_objectValue(partition); list = v_groupSetSelect(kernel->groupSet,"partition = %0 ",params); group = c_iterTakeFirst(list); while (group != NULL) { v_groupStreamSubscribeGroup(stream, group); c_free(group); group = c_iterTakeFirst(list); } c_iterFree(list); return TRUE; }