I agree with David that the annotations seem a bit too many but if I have
to choose from the three approaches - the annotations one seems most
reasonable to me and I didn’t have the chance to consider any others.
Volatile seems fragile and unclear as a differentiator. I agree

On Tue, 28 Feb 2023 at 17:47, Maxim Muzafarov <mmu...@apache.org> wrote:

> Folks,
>
> If there are no objections to the approach described in this thread,
> I'd like to proceed with this change. The change seems to be valuable
> for the upcoming release, so any comments are really appreciated.
>
> On Wed, 22 Feb 2023 at 21:51, David Capwell <dcapw...@apple.com> wrote:
> >
> > I guess back to the point of the thread, we need a way to know what
> configs are mutable for the settings virtual table, so need some way to
> denote that the config
> replica_filtering_protection.cached_rows_fail_threshold is mutable.  Given
> the way that the yaml config works, we can’t rely on the presences of
> “final” or not, so need some way to mark a config is mutable for that
> table, does anyone want to offer feedback on what works best for them?
> >
> > Out of all proposals given so far “volatile” is the least verbose but
> also not explicit (as this thread is showing there is debate on if this
> should be present), new annotations are a little more verbose but would be
> explicit (no surprises), and getter/setters in different classes (such as
> DD) is the most verbose and suffers from not being explicit and ambiguity
> for mapping back to Config.
> >
> > Given the above, annotations sounds like the best option, but do we
> really want our config to look as follows?
> >
> > @Replaces(oldName = "native_transport_idle_timeout_in_ms", converter =
> Converters.MILLIS_DURATION_LONG, deprecated = true)
> > @Mutable
> > public DurationSpec.LongMillisecondsBound native_transport_idle_timeout
> = new DurationSpec.LongMillisecondsBound("0ms”);
> > @Mutable
> > public DurationSpec.LongMillisecondsBound transaction_timeout = new
> DurationSpec.LongMillisecondsBound("30s”);
> > @Mutable
> > public double phi_convict_threshold = 8.0;
> > public String partitioner; // assume immutable by default?
> >
> >
> > > On Feb 22, 2023, at 6:20 AM, Benedict <bened...@apache.org> wrote:
> > >
> > > Could you describe the issues? Config that is globally exposed should
> ideally be immutable with final members, in which case volatile is only
> necessary if you’re using the config parameter in a tight loop that you
> need to witness a new value - which shouldn’t apply to any of our config.
> > >
> > > There are some weird niches, like updating long values on some
> (unsupported by us) JVMs that may tear. Technically you also require it for
> visibility with the JMM. But in practice it is mostly unnecessary. Often
> what seems to be a volatile issue is really something else.
> > >
> > >> On 22 Feb 2023, at 13:18, Benjamin Lerer <b.le...@gmail.com> wrote:
> > >>
> > >> I have seen issues with some updatable parameters which were missing
> the volatile keyword.
> > >>
> > >> Le mer. 22 févr. 2023 à 11:36, Aleksey Yeshchenko <alek...@apple.com>
> a écrit :
> > >> FWIW most of those volatile fields, if not in fact all of them,
> should NOT be volatile at all. Someone started the trend and most folks
> have been copycatting or doing the same for consistency with the rest of
> the codebase.
> > >>
> > >> Please definitely don’t rely on that.
> > >>
> > >>> On 21 Feb 2023, at 21:06, Maxim Muzafarov <mmu...@apache.org> wrote:
> > >>>
> > >>> 1. Rely on the volatile keyword in front of fields in the Config
> class;
> > >>>
> > >>> I would say this is the most confusing option for me because it
> > >>> doesn't give us all the guarantees we need, and also:
> > >>> - We have no explicit control over what exactly we expose to a user.
> > >>> When we modify the JMX API, we're implementing a new method for the
> > >>> MBean, which in turn makes this action an explicit exposure;
> > >>> - The volatile keyword is not the only way to achieve thread safety,
> > >>> and looks strange for the public API design point;
> > >>> - A good example is the setEnableDropCompactStorage method, which
> > >>> changes the volatile field, but is only visible for testing purposes;
> > >>
> > >>
> >
>

Reply via email to