Using encapsulation/data abstraction is fine, but it doesn't seem like
TSHeapBuf makes sense. No TS API receives it. If plugin code is the only
user and it has to deal with a non-const raw pointer and a data length
after all, why do we want to wrap them in the first place?

As for smaller steps, like I suggested on the PR, you could introduce
TSHeapBuf separately from the fix, I think. And if there are similar TS
APIs that could return TSHeapBuf, supporting TSHeapBuf on only one of them
makes inconsistency in TS API. IMO, the two changes, the fix and the new
API, should be made like 1 + 1, but not 1.5 + 0.5 nor 1 + 0.5 + 0.5.

Masakazu

On Thu, Sep 1, 2022 at 10:08 AM Walt Karas <wka...@yahooinc.com.invalid>
wrote:

> As a rule of thumb, I prefer using encapsulation/data abstraction.  I think
> perhaps that is one reason I've been a poor match to this project.  There
> doesn't seem to be a consensus that  we should follow this rule of thumb.
>
> KIt, that would be my preference.  But I am part of the consensus I think
> we have, that we should favor a series of smaller steps, rather than doing
> all of them in one big step.
>
> On Wed, Aug 31, 2022 at 12:13 PM Shu Kit Chan <chanshu...@gmail.com>
> wrote:
>
> > Also are we planning to eventually rewrite our existing APIs (where
> > applicable) to use this?
> >
> > On Wed, Aug 31, 2022 at 8:36 AM Masakazu Kitajo <mas...@apache.org>
> wrote:
> > >
> > > What's the advantage of using TSHeapBuf? What issue does it solve?
> > >
> > >
> > > On Wed, Aug 31, 2022 at 7:48 AM Walt Karas <wka...@yahooinc.com.invalid
> >
> > > wrote:
> > >
> > > > Described here:
> > > >
> > > >
> >
> https://urldefense.com/v3/__https://github.com/apache/trafficserver/blob/os_pkey_cnf_reload/doc/developer-guide/api/functions/TSHeapBuf.en.rst*tsheapbufdata__;Iw!!Op6eflyXZCqGR5I!Du0fBfMhb4pdM2ECFijJ7aJ-jT70jEPeZwjhsvWt2Dr2cSZ5G7HWY20wZOmFHIR3MxnvPZpoRDMlII5dgow$
> >
> > > > ,
> > > >
> > > > In PR
> >
> https://urldefense.com/v3/__https://github.com/apache/trafficserver/pull/8790__;!!Op6eflyXZCqGR5I!Du0fBfMhb4pdM2ECFijJ7aJ-jT70jEPeZwjhsvWt2Dr2cSZ5G7HWY20wZOmFHIR3MxnvPZpoRDMlYh9lIuc$
> >  .
> > > >
> > > > This allows a dynamically allocated buffer, of any reasonable length,
> > to be
> > > > returned by a TS API function, like this:
> > > >
> > > > TSHeapBuf hb = TSSomething(x, y, z);
> > > >
> > > > One alternative is an interface like this:
> > > >
> > > > int length;
> > > > char *data = TSSomething(x, y, z, &length);
> > > >
> > > > The data is dynamically allocated, and would be freed with TSfree().
> > > >
> > > > Another alternative is:
> > > >
> > > > char *buf = TSalloc(BUF_SIZE);
> > > > int actual_size = TSSomething(x, y, z, buf, BUF_SIZE);
> > > > if (actual_size > BUF_SIZE) {
> > > >   // buf was too small, unchanged.
> > > >   TSfree(buf);
> > > >   buf = TSalloc(actual_size);
> > > >   TSSomething(x, y, z, buf, actual_size);
> > > > }
> > > >
> >
>

Reply via email to