I was planning on replacing the internals of TxnArg with the Extendible. I
haven't fully fleshed out the API. I had planned to keep the C API backward
compatible. But I really want to dive into a C++ API with type safety,
which was a major goal in the Extendible implementation.

On Fri, Mar 6, 2020 at 9:09 PM Alan Carroll
<solidwallofc...@verizonmedia.com.invalid> wrote:

> I am in favor of this because although the replace of In Name Only types
> with void * makes a more risky API, it is (in my judgement) a relatively
> minor risk especially since almost all of those types are in fact
> Continuations and the internals can
> check the dynamic_cast for success. I think it is more than balanced by the
> cleaner, thinner, and more regular API. Obviously this is a judgement call,
> but my judgement is this is an improvement overall. It has a clear benefit
> and a relatively minor cost.
>
> On Wed, Mar 4, 2020 at 1:29 PM Leif Hedstrom <zw...@apache.org> wrote:
>
> >
> >
> > > On Mar 4, 2020, at 12:18 PM, Walt Karas <wka...@verizonmedia.com
> .INVALID>
> > wrote:
> > >
> > > Instead of int argument indexes, how about argument IDs of type:
> > >
> > > typedef struct
> > > {
> > >  TSUserArgType type;
> > >   short idx;
> > > } TSUserArgIDType;
> > >
> > > This would allow for more run-time type checking.
> >
> >
> > Not sure I follow that… The type safety stuff is in the Get() / Set()
> > functions void*, not the index, and this doesn’t help that ? Also, seems
> > non-ATS API to require this additional struct .
> >
> > — Leif
> >
> >
> > >
> > > On Wed, Mar 4, 2020 at 12:40 PM Alan Carroll
> > > <solidwallofc...@verizonmedia.com.invalid> wrote:
> > >
> > >> I like thinner and more automatic APIs. This is less typing overall,
> > >> because the Get/Set functions don't require a type name in them. It
> also
> > >> makes it easier to add or remove object args. Also, in the longer term
> > (ATS
> > >> 10) we should move to Extendible anyway, which provides real type
> > safety.
> > >>
> > >> On Wed, Mar 4, 2020 at 12:31 PM Leif Hedstrom <zw...@apache.org>
> wrote:
> > >>
> > >>>
> > >>>
> > >>>> On Mar 4, 2020, at 11:17 AM, Walt Karas <wka...@verizonmedia.com
> > >> .INVALID>
> > >>> wrote:
> > >>>>
> > >>>> So why do you like this?
> > >>>
> > >>> - Less code
> > >>> - Fewer APIs
> > >>> - Generalizes the concept
> > >>>
> > >>>
> > >>> I don’t feel super strongly about the Get() / Set()’ers, I can
> > definitely
> > >>> retain the underlying core changes (which are good), and keep (and
> add
> > >>> more) of the old style APIs). Now, had you guys not -1’d my
> suggestion
> > to
> > >>> turn ts/ts.h into a C++ header file for 9.0.0, we could totally have
> > made
> > >>> these two APIs type safe. ;-)
> > >>>
> > >>> I do feel strongly about the “register” functions though, there’s no
> > >> point
> > >>> in 4x’ing those again, and they are most definitely type safe in this
> > >>> version, and just overall cleaner.
> > >>>
> > >>> I’ll let amc decide how strongly he prefers this over the explicit
> > (more
> > >>> type safe) APIs for the Get()/ Set()’ers.
> > >>>
> > >>> Cheers,
> > >>>
> > >>> — Leif
> > >>>
> > >>>
> > >>>>
> > >>>> - Breaks lots of existing code.
> > >>>> - Less typesafe.
> > >>>> - Makes use more verbose.
> > >>>>
> > >>>> It's good how the API has avoided the use of void pointers.  We
> should
> > >>> not
> > >>>> reverse that design goal.
> > >>>>
> > >>>> On Wed, Mar 4, 2020 at 12:03 PM Leif Hedstrom <zw...@apache.org>
> > >> wrote:
> > >>>>
> > >>>>>
> > >>>>>
> > >>>>>> On Feb 27, 2020, at 10:13 AM, Leif Hedstrom <zw...@apache.org>
> > >> wrote:
> > >>>>>>
> > >>>>>> Hi all,
> > >>>>>>
> > >>>>>> This is an idea from Bryan Call, which he suggested as a solution
> > for
> > >>>>> reloadable plugins changes that are now in 9.0.x. I recently ran
> into
> > >> a
> > >>>>> different use case (thanks Miles …), which could really benefit
> > >>>>> (performance wise) with such APIs. I *could* use the TxnArg APIs
> > >>> instead,
> > >>>>> but these new global arg APIs would make it noticeable faster (and
> > >> less
> > >>>>> locking). So, I’m writing up this proposal based on these ideas,
> for
> > >>>>> discussion / adjustments.
> > >>>>>
> > >>>>>
> > >>>>> After discussions here, and with help from Alan and Bryan, I’ve
> made
> > >>> some
> > >>>>> significant changes to these APIs now. Here’s the new design:
> > >>>>>
> > >>>>>       1) All old APIs are marked deprecated!
> > >>>>>       2) 5 new APIs are introduced
> > >>>>>       3) The Global (GLB) type of user args is added.
> > >>>>>
> > >>>>>
> > >>>>> Item #2 now makes the API look like this:
> > >>>>>
> > >>>>> tsapi TSReturnCode TSUserArgIndexReserve(TSUserArgType type, const
> > >> char
> > >>>>> *name, const char *description, int *arg_idx);
> > >>>>> tsapi TSReturnCode TSUserArgIndexNameLookup(TSUserArgType type,
> const
> > >>> char
> > >>>>> *name, int *arg_idx, const char **description);
> > >>>>> tsapi TSReturnCode TSUserArgIndexLookup(TSUserArgType type, int
> > >> arg_idx,
> > >>>>> const char **name, const char **description);
> > >>>>>
> > >>>>> tsapi void TSUserArgSet(void *data, int arg_idx, void *arg);
> > >>>>> tsapi void *TSUserArgGet(void *data, int arg_idx);
> > >>>>>
> > >>>>>
> > >>>>> The first three now takes a TSUserArgType argument:
> > >>>>>
> > >>>>> typedef enum {
> > >>>>> TS_USER_ARGS_TXN,   ///< Transaction based.
> > >>>>> TS_USER_ARGS_SSN,   ///< Session based
> > >>>>> TS_USER_ARGS_VCONN, ///< VConnection based
> > >>>>> TS_USER_ARGS_GLB,   ///< Global based
> > >>>>> TS_USER_ARGS_COUNT  ///< Fake enum, # of valid entries.
> > >>>>> } TSUserArgType;
> > >>>>>
> > >>>>>
> > >>>>>
> > >>>>> The Get()/Set() are then context sensitive. You pass in a “txnp”,
> it
> > >>> uses
> > >>>>> the TXN slots, you pass in a “ssnp”, it uses the SSN slot. For the
> > >> “GLB”
> > >>>>> slots, simply pass in a nullptr (since the global doesn’t have a
> > >>> context).
> > >>>>>
> > >>>>> Thoughts? One question is if we should change the “int” type on the
> > >>> index
> > >>>>> to e.g. “size_t”. That’s slightly unorthodox for our existing APIs,
> > >>> where
> > >>>>> we frivolously use “int” for such things (so size_t would be
> somewhat
> > >>>>> unorthodox in ts/ts.h).
> > >>>>>
> > >>>>> — Leif
> > >>>>>
> > >>>>>
> > >>>>>
> > >>>
> > >>>
> > >>
> >
> >
>

Reply via email to