[hibernate-dev] Fail fast feature for Hibernate Validator

Max Rydahl Andersen max.andersen at redhat.com
Tue Oct 5 17:31:43 EDT 2010


On Oct 5, 2010, at 17:43, Emmanuel Bernard wrote:

> If we /really/ want stopAfterNFailures, I'd go straight to it. It's easy to implement and will confuse people less. But the number of failures will be a guaranteed to be above int (if there are enough ;) ) and the order will be unspecified though today we do breadth-first I believe which is what most people will want.
> 
> I am still not 100% foreseeing why a UI would want 5 errors at most :)
> 
> Max, want to weight in?

the intent was really just that only showing the *first* failure would introduce an annoying "enter data, submit, 1 error, fix that 1 error, submit, 1 new error, fix that 1 error, submit, ...0 errors"-cycle; thus saying "get at most 5 errors" would reduce that cycle but again if you are waiting for a response waiting those few msecs are probably fine.

/max

> 
> On 5 oct. 2010, at 15:54, Gunnar Morling wrote:
> 
>> Hi,
>> 
>> a use case might be a data-centric application, where you for performance reasons don't want to validate graphs completely once a failure occured, but don't want to face the user with single validation errors one after the other either.
>> 
>> Specifying the validation order would surely be useful. But I wouldn't tie these things together. I suggest to introduce a numeric parameter and for a start either make clear that the validation order is not specified or only support values 0 (don't stop on first error) and 1 (= failFast). Later on, if validation order is spec'd, other values than these could easily be supported. If we now introduce a boolean parameter, the API would be somewhat "polluted" if we come up with a numeric parameter later on. Then we either had two parameters (leaving space for inconsistent configurations) or had to remove the boolean parameter again.
>> 
>> Gunnar
>> 
>> 
>> 2010/10/4 Emmanuel Bernard <emmanuel at hibernate.org>
>> Ive been toying with the number idea while talking with Max. 
>> Im not sure what use case that solves provided the highly unpredictable nature of what's get returned. 
>> 
>> It might be more useful and get a usecase if we spec what gets returned roughly. Like deep-last algorithm etc. 
>> 
>> 
>> 
>> On 4 oct. 2010, at 22:17, Gunnar Morling <gunnar.morling at googlemail.com> wrote:
>> 
>>> Hi,
>>> 
>>> I like the idea. Emmanuel's performance test showed an execution time per validation of 11 vs. 74 ms on my system, so there seems to be some potential. Instead of having a "failFast" flag one could also introduce a numeric parameter to control, when validation should stop. A value of "1" would be equal to the flag being true, but one could also decide to stop just after 3 validation errors for instance.
>>> 
>>> Gunnar
>>> 
>>> 
>>> 2010/10/4 Emmanuel Bernard <emmanuel at hibernate.org>
>>> That or slowish validations.
>>> 
>>> One typical use case is that:
>>> 
>>> if ( validator.validate(customer, StraightToValidationScreen.class).size() >0 ) {
>>>  //manual process
>>> }
>>> else {
>>>  //automatic process
>>> }
>>> 
>>> BTW, I've committed a non scientific perf test that shows an average of 5x perf improvement on an object graph of 5 object (one master and 4 children) and 4 constraints on A and 3 on B. Around 22ms vs 120 ms. (log4j logs set to ERROR). The perf change is visible even on smallish graphs.
>>> 
>>> It can be worthwhile.
>>> 
>>> On 4 oct. 2010, at 16:20, Hardy Ferentschik wrote:
>>> 
>>> > What would be the usecase? Saving time in large object graphs where I am only interested in whether there is a
>>> > failure at all? You really need LARGE object graphs to make this worth while.
>>> >
>>> >
>>> > On Mon, 04 Oct 2010 15:45:34 +0200, Emmanuel Bernard <emmanuel at hibernate.org> wrote:
>>> >
>>> >> http://github.com/emmanuelbernard/hibernate-validator/commits/failFast
>>> >>
>>> >> What do you guys think?
>>> >>
>>> >> The idea is to stop a the first failure.
>>> >> You can enable that :
>>> >> - by property
>>> >> - at config time
>>> >> - when the Validator is created
>>> >>
>>> >> Look at
>>> >> http://github.com/emmanuelbernard/hibernate-validator/blob/failFast/hibernate-validator/src/test/java/org/hibernate/validator/test/engine/failFast/FailFastTest.java
>>> >> for code examples.
>>> >>
>>> >> Emmanuel
>>> >>
>>> >
>>> 
>>> 
>>> _______________________________________________
>>> hibernate-dev mailing list
>>> hibernate-dev at lists.jboss.org
>>> https://lists.jboss.org/mailman/listinfo/hibernate-dev
>>> 
>> 
> 





More information about the hibernate-dev mailing list