I think that 2) (client warning on accessing vtable) is pretty obtrusive /
irritating, that means that every single time I would e.g. SELECT from such
a table, it would emit a warning to a client / cqlsh? I do not think that
is necessary.

What about putting such a table to system_experimental keyspace? Then it
would be about deciding when it is not considered experimental anymore and
once that happens, we just move it to the appropriate keyspace. I think
that it is better if users (rather admins) execute a query against
system_experimental.accord_epochs so they immediately know what they access
(something experimental) rather than being constantly reminded about that
by a client warning.

Maxim's idea about "experimental_virtual_tables_enabled" property is also
viable. However, I can't help it but that somehow reminds me a property for
a guardrail. Just a thought. I do not see yet how we could leverage it,
just saying how I perceive it.

On Wed, May 29, 2024 at 9:02 PM David Capwell <dcapw...@apple.com> wrote:

> We agreed a long time ago that all new features are disabled by default,
> but I wanted to try to flesh out what we “should” do with something that
> might still be experimental and subject to breaking changes; I would prefer
> we keep this thread specific to vtables as the UX is different for
> different types of things…
>
> So, lets say we are adding a set of vtables but we are not 100% sure what
> the schema should be and we learn after the release that changes should be
> made, but that would end up breaking the table… we currently define
> everything as “don’t break this” so if we publish a table that isn’t 100%
> baked we are kinda stuck with it for a very very long time… I would like to
> define a way to expose vtables that are subject to change (breaking schema
> changes) across different release and rules around them (only in minor?
> Maybe even in patch?).
>
> Lets try to use a concrete example so everyone is on the same page.
>
> Accord is disabled by default (it is a new feature), so the vtables to
> expose internals would be expected to be undefined and not present on the
> instance.
>
> When accord is enabled (accord.enabled = true) we add a set of vtables:
>
> Epochs - shows what epochs are known to accord
> Cache - shows how the internal caches are performing
> Etc.
>
> Using epochs as an example it currently only shows a single column: the
> long epoch
>
> CREATE VIRTUAL TABLE system_accord.epochs (epoch bigint PRIMARY KEY);
>
> Lets say we find that this table isn’t enough and we really need to scope
> it to each of the “stores” (threads for processing accord tasks)
>
> CREATE VIRTUAL TABLE system_accord.epochs (epoch bigint, store_id int,
> PRIMARY KEY (epoch, store_id));
>
> In this example the table changed the schema in a way that could break
> users, so this normally is not allowed.
>
> Since we don’t really have a way to define something experimental other
> than NEWS.txt, we kinda get stuck with this table and are forced to make
> new versions and maintain them for a long time (in this example we would
> have epochs and epochs_v2)… it would be nice if we could define a way to
> express that tables are free to be changed (modified or even deleted) and
> the life cycle for them….
>
> I propose that we allow such a case and make changes to the UX (as best as
> we can) to warn about this:
>
> 1) update NEWS.txt to denote that the feature is experimental
> 2) when you access an experimental table you get a ClientWarning stating
> that this is free to change
> 3) the tables comments starts with “[EXPERIMENTAL]”
>
> What do others think?
>
>
>

Reply via email to