[PATCH v2 3/4] session: store vtab in struct session

Vladimir Davydov vdavydov.dev at gmail.com
Fri Dec 21 14:04:56 MSK 2018


On Tue, Dec 11, 2018 at 07:10:22PM +0300, Vladislav Shpilevoy wrote:
> @@ -587,7 +587,8 @@ applier_f(va_list ap)
>  	 * Set correct session type for use in on_replace()
>  	 * triggers.
>  	 */
> -	if (session_create_on_demand(SESSION_TYPE_APPLIER) == NULL) {
> +	if (session_create_on_demand(SESSION_TYPE_APPLIER,
> +				     &generic_session_vtab) == NULL) {
>  		diag_log();
>  		return -1;
>  	}

> @@ -51,12 +52,12 @@ lbox_session_create(struct lua_State *L, enum session_type type)
>  {
>  	struct session *session = fiber_get_session(fiber());
>  	if (session == NULL) {
> -		session = session_create_on_demand(type);
> +		session = session_create_on_demand(type, &console_session_vtab);
>  		if (session == NULL)
>  			return luaT_error(L);
>  		session->meta.fd = lua_tointeger(L, 1);
>  	} else {
> -		session_set_type(session, type);
> +		session_set_type(session, type, &console_session_vtab);
>  	}

IMHO the new API is confusing, because it allows to do e.g.

  session_set_type(SESSION_TYPE_APPLIER, &console_session_vtab);

What about leaving the session vtab registry and using it in
session_set_type to set session->vtab consistent with a given type?
Then, to kill a session we would introduce a separate method, which
would reset session->vtab. And we could add an assertion ensuring that
session_set_type isn't called on a dead session.



More information about the Tarantool-patches mailing list