+1 on using libs.

> On Jan 16, 2018, at 10:52 AM, Dan Kirkwood <[email protected]> wrote:
> 
> +1 -- agree with Jeff -- the validation of the fields of
> deliveryservice is something that is incomplete in the Perl
> traffic_ops.
> 
> These libraries make for concise code to do the validation so it will
> be easier to extend without much extra code.   It will not be called
> on every API function,  but only once on each POST/PUT which are a
> small minority of calls.   It also need not be used in every case.
> That, to me,  makes the reflection argument much less of a concern.
> 
> I would like to see it go in sooner than Friday,  but won't argue that point..
> 
> -dan
> 
> 
> On Tue, Jan 16, 2018 at 10:10 AM, Dewayne Richardson <[email protected]> 
> wrote:
>> So, it's been a few days on this topic and I'd like to call a vote for the
>> dependencies listed in this thread.  Please vote +1 or -1 by Noon Friday so
>> that we can move forward the Golang Proxy development.
>> 
>> Thanks,
>> 
>> -Dew
>> 
>> On Thu, Jan 11, 2018 at 10:53 AM, Jeff Elsloo <[email protected]> wrote:
>> 
>>> I don't think we should assume anything about the performance just
>>> because it uses reflection. Yes, traditionally reflection is
>>> computationally expensive, however, when used properly the penalty can
>>> be negligible. I don't think we have enough understanding of these
>>> libraries to know whether there is a concerning performance penalty.
>>> 
>>> As Dewayne said, create, update and delete actions represent a tiny
>>> fraction of the overall requests into TO. Given that the majority of
>>> these actions are performed by humans, I would be shocked if there was
>>> a perceptible performance difference with the reflection based
>>> validation in place. It's not like we're trying to validate enormous
>>> and complex objects here; we're talking 20 fields or so for any given
>>> post.
>>> 
>>> I'm +1 on using validation libraries such as these even if they use
>>> reflection, provided that we do not see dramatic changes in
>>> performance. I think that's highly unlikely in this case.
>>> --
>>> Thanks,
>>> Jeff
>>> 
>>> 
>>> On Thu, Jan 11, 2018 at 10:07 AM, Chris Lemmons <[email protected]>
>>> wrote:
>>>> True, but how many of those out-of-the-box checks are both useful and
>>>> relevantly complex?
>>>> 
>>>> To me, the cool part of ozzo is the way it collects the output and
>>>> formats it. That's unfortunately also the computationally expensive
>>>> part.
>>>> 
>>>> On Thu, Jan 11, 2018 at 9:49 AM, Dewayne Richardson <[email protected]>
>>> wrote:
>>>>> Please keep in mind that we do not Create/Update/Delete very often in
>>>>> Traffic Ops, so the performance penalty for Validation should be taken
>>> into
>>>>> consideration.  I also don't want to re-invent all of those
>>> out-of-the-box
>>>>> field level checks by hand when I can just use them from here:
>>>>> https://github.com/asaskevich/govalidator#list-of-functions
>>>>> 
>>>>> -Dew
>>>>> 
>>>>> On Thu, Jan 11, 2018 at 9:24 AM, Chris Lemmons <[email protected]>
>>> wrote:
>>>>> 
>>>>>> I like the output style, but I'm a bit concerned on the performance
>>>>>> front. ozzo appears to do all it's magic with heavy use of reflection,
>>>>>> which is often a slow spot in go. Most places, it wouldn't matter
>>>>>> much, but this will be called on every element of every API function,
>>>>>> so a nod toward performance may be in order. Have we done some
>>>>>> measurement to see whether this adds a relevant amount of overhead to
>>>>>> the calls? Or are the calls still dominated by the DB lookup?
>>>>>> 
>>>>>> Relatedly, is this a major advantage over something like this:
>>>>>> 
>>>>>> if ds.Active == nil { errMsgs = append(errMsgs, `"active" must be
>>>>>> provided`) }
>>>>>> 
>>>>>> On Thu, Jan 11, 2018 at 8:49 AM, Dewayne Richardson <
>>> [email protected]>
>>>>>> wrote:
>>>>>>> We've been moving along with more functionality in the Golang proxy,
>>>>>> mostly
>>>>>>> the Read's up until now, comparatively TO does much fewer
>>> Create/Updates.
>>>>>>> Our current task is to circle back and start implementing the
>>> (C)reate,
>>>>>>> (U)pdate, and (D)eletes.  One of the obvious needs for the this task
>>> are
>>>>>>> validation rules.  I've been doing research to figure out the
>>> cleanest
>>>>>> and
>>>>>>> most maintainable way to rewrite the Perl validation rules in Go.
>>>>>>> 
>>>>>>> TC Issue for tracking
>>>>>>> https://github.com/apache/incubator-trafficcontrol/issues/1756
>>>>>>> 
>>>>>>> These are the two dependencies I'd like to leverage and provide
>>> feedback:
>>>>>>> 
>>>>>>> Both are MIT Licenses
>>>>>>> Uses normal programming constructs rather than error-prone struct
>>> tags to
>>>>>>> specify how data should be validated.
>>>>>>> https://github.com/go-ozzo/ozzo-validation
>>>>>>> https://github.com/go-ozzo/ozzo-validation/blob/master/LICENSE
>>>>>>> 
>>>>>>> Core Validation library that the prior library uses that has a lot of
>>>>>>> useful convenience methods that I'd rather not re-invent
>>>>>>> https://github.com/asaskevich/govalidator
>>>>>>> https://github.com/asaskevich/govalidator#list-of-functions
>>>>>>> https://github.com/asaskevich/govalidator/blob/master/LICENSE
>>>>>>> 
>>>>>>> And here is how I've used these as sample validation rules that I've
>>>>>>> implemented as a POC:
>>>>>>> 
>>>>>>> https://github.com/dewrich/incubator-trafficcontrol/blob/
>>>>>> tor-api-ds/traffic_ops/traffic_ops_golang/deliveryservice/
>>>>>> deliveryservices.go#L93
>>>>>>> 
>>>>>>> Existing Mojo Perl Rules for comparison.
>>>>>>> https://github.com/apache/incubator-trafficcontrol/blob/
>>>>>> master/traffic_ops/app/lib/API/Deliveryservice.pm#L1363
>>>>>>> 
>>>>>>> 
>>>>>>> -Dew
>>>>>> 
>>> 

Reply via email to