stratos-dev mailing list archives

Site index · List index
Message view « Date » · « Thread »
Top « Date » · « Thread »
From Nirmal Fernando <nirmal070...@gmail.com>
Subject Re: Validating Inputs to REST API
Date Mon, 01 Sep 2014 09:08:11 GMT
On Mon, Sep 1, 2014 at 2:25 PM, Akila Ravihansa Perera <ravihansa@wso2.com>
wrote:

> Hi,
>
> Bringing up this thread back since validation is broken in master
> branch. I've fixed validations schema to reflect the recent changes
> done to auto-scaling policy (in STRATOS-645).
>
> @Nirmal, can you remember what policies were not covered in the
> validation schema? I did some cross checking but I guess I'm missing
> something here.
>

Unfortunately no Akila.. I remember pointing out few, but have lost track
of it. I guess someone just need to put bit care onto validation schemas
and fix it :-)

>
> Thanks.
>
> On Wed, May 7, 2014 at 4:11 AM, Nirmal Fernando <nirmal070125@gmail.com>
> wrote:
> > Hi Pradeep,
> >
> > XSD schema seems validating only few levels of the policy files. Is there
> > any reason for not validating full config?
> >
> >
> > On Tue, Apr 29, 2014 at 10:47 AM, Pradeep Fernando <pradeepfn@gmail.com>
> > wrote:
> >>
> >> Hi Akila,
> >>
> >>
> >> On Mon, Apr 28, 2014 at 1:24 PM, Akila Ravihansa Perera
> >> <ravihansa@wso2.com> wrote:
> >>>
> >>> Hi Pradeep,
> >>>
> >>> I have some concerns regarding the schema.
> >>>
> >>> 1. In partition deployment, do we really need to make it mandatory to
> >>> include partitionMin and partitionMax?
> >>> IMO, minOccurs should be 0 for these two properties since this can be
> >>> overridden in the deployment definition
> >>
> >>
> >> +1. Please go ahead and change
> >>>
> >>>
> >>> 2. What is the need for having a sequence in properties definition?
> >>> For eg - In cartridge definition if the user don't enter the values in
> >>> the order that you have defined in the schema it won't validate. IMO,
> >>> we should use <xs:choice> instead of  <xs:sequence> when describing
> >>> properties.
> >>
> >>
> >> Sorry i did not get you. I used xs:all when definining property arrays.
> >>
> >>>
> >>>
> >>> Thanks.
> >>>
> >>> On Wed, Apr 23, 2014 at 4:22 PM, Pradeep Fernando <pradeepfn@gmail.com
> >
> >>> wrote:
> >>> > Hi devs,
> >>> >
> >>> > Now the API spits error messages irrespective of the backend
> exception.
> >>> > It
> >>> > sends the JSON error message even if there is an Nullpointer in our
> >>> > backend.
> >>> > Writing a exception mapper for throwable did the trick.
> >>> >
> >>> > Here is the schema I came up with for validating input. I derived it
> >>> > from
> >>> > the sample inputs i have. Please review it. Pretty sure there is
> space
> >>> > for
> >>> > improvements particularly min occurs.
> >>> >
> >>> >
> >>> > <?xml version="1.0" encoding="UTF-8" ?>
> >>> > <xs:schema xmlns:xs="http://www.w3.org/2001/XMLSchema">
> >>> >     <xs:element name="partition">
> >>> >         <xs:complexType>
> >>> >             <xs:sequence>
> >>> >                 <xs:element name="id" type="xs:string" minOccurs="1"
> >>> > maxOccurs="1" nillable="false"/>
> >>> >                 <xs:element name="provider" type="xs:string"
> >>> > minOccurs="1"
> >>> > maxOccurs="1" nillable="false"/>
> >>> >                 <xs:element name="property" minOccurs="1"
> >>> > maxOccurs="unbounded">
> >>> >                     <xs:complexType>
> >>> >                         <xs:all>
> >>> >                             <xs:element name="name" type="xs:string"
> >>> > minOccurs="1" maxOccurs="1" nillable="false"/>
> >>> >                             <xs:element name="value" type="xs:string"
> >>> > minOccurs="1" maxOccurs="1" nillable="false"/>
> >>> >                         </xs:all>
> >>> >                     </xs:complexType>
> >>> >                 </xs:element>
> >>> >                 <xs:element name="partitionMin" type="xs:int"
> >>> > minOccurs="1"
> >>> > maxOccurs="1" nillable="false"/>
> >>> >                 <xs:element name="partitionMax" type="xs:int"
> >>> > minOccurs="1"
> >>> > maxOccurs="1" nillable="false"/>
> >>> >             </xs:sequence>
> >>> >         </xs:complexType>
> >>> >     </xs:element>
> >>> >
> >>> >     <xs:element name="autoscalePolicy">
> >>> >         <xs:complexType>
> >>> >             <xs:sequence>
> >>> >                 <xs:element name="id" type="xs:string" minOccurs="1"
> >>> > maxOccurs="1" nillable="false"/>
> >>> >                 <xs:element name="loadThresholds" minOccurs="1"
> >>> > maxOccurs="1" nillable="false">
> >>> >                     <xs:complexType>
> >>> >                         <xs:all>
> >>> >                             <xs:element name="requestsInFlight"
> >>> > type="thresholdValues" minOccurs="1" maxOccurs="1" nillable="false"/>
> >>> >                             <xs:element name="memoryConsumption"
> >>> > type="thresholdValues" minOccurs="1" maxOccurs="1" nillable="false"/>
> >>> >                             <xs:element name="loadAverage"
> >>> > type="thresholdValues" minOccurs="1" maxOccurs="1" nillable="false"/>
> >>> >                         </xs:all>
> >>> >                     </xs:complexType>
> >>> >                 </xs:element>
> >>> >             </xs:sequence>
> >>> >         </xs:complexType>
> >>> >     </xs:element>
> >>> >
> >>> >     <xs:element name="deploymentPolicy">
> >>> >         <xs:complexType>
> >>> >             <xs:sequence>
> >>> >                 <xs:element name="id" type="xs:string" maxOccurs="1"
> >>> > minOccurs="1" nillable="false"/>
> >>> >                 <xs:element name="partitionGroup">
> >>> >                     <xs:complexType>
> >>> >                         <xs:sequence>
> >>> >                             <xs:element name="id" type="xs:string"
> >>> > maxOccurs="1" minOccurs="1" nillable="false"/>
> >>> >                             <xs:element name="partitionAlgo"
> >>> > minOccurs="1"
> >>> > maxOccurs="1" nillable="false">
> >>> >                                 <xs:simpleType>
> >>> >                                     <xs:restriction base="xs:string">
> >>> >                                         <xs:enumeration
> >>> > value="round-robin"/>
> >>> >                                         <xs:enumeration
> >>> > value="one-after-another"/>
> >>> >                                     </xs:restriction>
> >>> >                                 </xs:simpleType>
> >>> >                             </xs:element>
> >>> >                             <xs:element name="partition"
> minOccurs="1"
> >>> > maxOccurs="unbounded">
> >>> >                                 <xs:complexType>
> >>> >                                     <xs:all>
> >>> >                                         <xs:element name="id"
> >>> > type="xs:string" maxOccurs="1" minOccurs="1" nillable="false"/>
> >>> >                                         <xs:element
> name="partitionMax"
> >>> > type="xs:int" minOccurs="1" maxOccurs="1" nillable="false"/>
> >>> >                                         <xs:element
> name="partitionMin"
> >>> > type="xs:int" minOccurs="1" maxOccurs="1" nillable="false"/>
> >>> >                                     </xs:all>
> >>> >                                 </xs:complexType>
> >>> >                             </xs:element>
> >>> >                         </xs:sequence>
> >>> >                     </xs:complexType>
> >>> >                 </xs:element>
> >>> >             </xs:sequence>
> >>> >         </xs:complexType>
> >>> >     </xs:element>
> >>> >
> >>> >     <xs:element name="cartridgeDefinitionBean">
> >>> >         <xs:complexType>
> >>> >             <xs:sequence>
> >>> >                 <xs:element name="type" type="xs:string"
> minOccurs="1"
> >>> > maxOccurs="1" nillable="false"/>
> >>> >                 <xs:element name="provider" type="xs:string"
> >>> > minOccurs="1"
> >>> > maxOccurs="1" nillable="false"/>
> >>> >                 <xs:element name="host" type="xs:string"
> minOccurs="1"
> >>> > maxOccurs="1" nillable="false"/>
> >>> >                 <xs:element name="displayName" type="xs:string"
> >>> > minOccurs="1" maxOccurs="1" nillable="false"/>
> >>> >                 <xs:element name="description" type="xs:string"
> >>> > minOccurs="1" maxOccurs="1" nillable="false"/>
> >>> >                 <xs:element name="version" type="xs:float"
> >>> > minOccurs="1"
> >>> > maxOccurs="1" nillable="false"/>
> >>> >                 <xs:element name="defaultAutoscalingPolicy"
> >>> > type="xs:string"
> >>> > minOccurs="0" maxOccurs="1" nillable="false"/>
> >>> >                 <xs:element name="multiTenant" type="xs:boolean"
> >>> > minOccurs="1" maxOccurs="1" nillable="false"/>
> >>> >                 <xs:element name="portMapping" minOccurs="1"
> >>> > maxOccurs="unbounded">
> >>> >                     <xs:complexType>
> >>> >                         <xs:all>
> >>> >                             <xs:element name="protocol"
> >>> > type="xs:string"
> >>> > maxOccurs="1" minOccurs="1" nillable="false"/>
> >>> >                             <xs:element name="port" type="xs:int"
> >>> > minOccurs="1" maxOccurs="1" nillable="false"/>
> >>> >                             <xs:element name="proxyPort"
> type="xs:int"
> >>> > minOccurs="1" maxOccurs="1" nillable="false"/>
> >>> >                         </xs:all>
> >>> >                     </xs:complexType>
> >>> >                 </xs:element>
> >>> >                 <xs:element name="iaasProvider" minOccurs="0"
> >>> > maxOccurs="unbounded">
> >>> >                     <xs:complexType>
> >>> >                         <xs:sequence>
> >>> >                             <xs:element name="type" type="xs:string"
> >>> > minOccurs="1" maxOccurs="1" nillable="false"/>
> >>> >                             <xs:element name="imageId"
> type="xs:string"
> >>> > minOccurs="1" maxOccurs="1" nillable="false"/>
> >>> >                             <xs:element name="maxInstanceLimit"
> >>> > type="xs:int" minOccurs="1" maxOccurs="1" nillable="false"/>
> >>> >                             <xs:element name="property" minOccurs="1"
> >>> > maxOccurs="unbounded">
> >>> >                                 <xs:complexType>
> >>> >                                     <xs:all>
> >>> >                                         <xs:element name="name"
> >>> > type="xs:string" minOccurs="1" maxOccurs="1" nillable="false"/>
> >>> >                                         <xs:element name="value"
> >>> > type="xs:string" minOccurs="1" maxOccurs="1" nillable="false"/>
> >>> >                                     </xs:all>
> >>> >                                 </xs:complexType>
> >>> >                             </xs:element>
> >>> >                         </xs:sequence>
> >>> >                     </xs:complexType>
> >>> >                 </xs:element>
> >>> >                 <xs:element name="loadBalancer" minOccurs="0"
> >>> > maxOccurs="1"
> >>> > nillable="true">
> >>> >                     <xs:complexType>
> >>> >                         <xs:sequence>
> >>> >                             <xs:element name="type" type="xs:string"
> >>> > minOccurs="1" maxOccurs="1" nillable="false"/>
> >>> >                             <xs:element name="property" minOccurs="1"
> >>> > maxOccurs="unbounded">
> >>> >                                 <xs:complexType>
> >>> >                                     <xs:all>
> >>> >                                         <xs:element name="name"
> >>> > type="xs:string" minOccurs="1" maxOccurs="1" nillable="false"/>
> >>> >                                         <xs:element name="value"
> >>> > type="xs:string" minOccurs="1" maxOccurs="1" nillable="false"/>
> >>> >                                     </xs:all>
> >>> >                                 </xs:complexType>
> >>> >                             </xs:element>
> >>> >                         </xs:sequence>
> >>> >                     </xs:complexType>
> >>> >                 </xs:element>
> >>> >                 <xs:element name="property" minOccurs="0"
> >>> > maxOccurs="unbounded">
> >>> >                     <xs:complexType>
> >>> >                         <xs:all>
> >>> >                             <xs:element name="name" type="xs:string"
> >>> > minOccurs="1" maxOccurs="1" nillable="false"/>
> >>> >                             <xs:element name="value" type="xs:string"
> >>> > minOccurs="1" maxOccurs="1" nillable="false"/>
> >>> >                         </xs:all>
> >>> >                     </xs:complexType>
> >>> >                 </xs:element>
> >>> >             </xs:sequence>
> >>> >         </xs:complexType>
> >>> >     </xs:element>
> >>> >
> >>> >     <xs:complexType name="thresholdValues">
> >>> >         <xs:all>
> >>> >             <xs:element name="average" type="xs:int" minOccurs="1"
> >>> > maxOccurs="1"/>
> >>> >             <xs:element name="gradient" type="xs:float" minOccurs="1"
> >>> > maxOccurs="1"/>
> >>> >             <xs:element name="secondDerivative" type="xs:float"
> >>> > minOccurs="1" maxOccurs="1"/>
> >>> >             <xs:element name="scaleDownMarginOfGradient"
> >>> > type="xs:float"
> >>> > minOccurs="1" maxOccurs="1"/>
> >>> >             <xs:element name="scaleDownMarginOfSecondDerivative"
> >>> > type="xs:float" minOccurs="1" maxOccurs="1"/>
> >>> >         </xs:all>
> >>> >     </xs:complexType>
> >>> > </xs:schema>
> >>> >
> >>> >
> >>>
> >>>
> >>>
> >>> --
> >>> Akila Ravihansa Perera
> >>> Software Engineer
> >>> WSO2 Inc.
> >>> http://wso2.com
> >>>
> >>> Phone: +94 77 64 154 38
> >>> Blog: http://ravihansa3000.blogspot.com
> >>
> >>
> >>
> >>
> >> --
> >> Pradeep Fernando.
> >> http://pradeepfernando.blogspot.com/
> >
> >
> >
> >
> > --
> > Best Regards,
> > Nirmal
> >
> > Nirmal Fernando.
> > PPMC Member & Committer of Apache Stratos,
> > Senior Software Engineer, WSO2 Inc.
> >
> > Blog: http://nirmalfdo.blogspot.com/
>
>
>
> --
> Akila Ravihansa Perera
> Software Engineer, WSO2
> Committer & PMC Member, Apache Stratos
>
> Blog: http://ravihansa3000.blogspot.com
>



-- 
Best Regards,
Nirmal

Nirmal Fernando.
PPMC Member & Committer of Apache Stratos,
Senior Software Engineer, WSO2 Inc.

Blog: http://nirmalfdo.blogspot.com/

Mime
View raw message