Hi Ian
Also commited the 3 new test classes for CUD to google code repo.

On Tue, Sep 10, 2013 at 10:30 AM, Dishara Wijewardana <
ddwijeward...@gmail.com> wrote:

> Hi Ian,
> Finally was able to fix ;-). Had to debug along with the path and fix some
> other issues also in Cassandra Provider impl. I have updated the JIRA with
> the new reports of CUD.
> (I ran them one after the other respectively)
>
> In brief as follows.
> CREATE
> Average Latency Under Node LA  = 165 (ms)
> Average Latency Under Node MA  = 203 (ms)
> Average Latency Under Node SA  = 256 (ms)
> #TOTAL CALLS = 300 Total Average Latency = 208 (ms)
>
> UPDATE
> Average Latency Under Node LA   = 36 (ms)
> Average Latency Under Node MA   = 29 (ms)
> Average Latency Under Node SA   = 25 (ms)
> #TOTAL CALLS = 300 Total Average Latency = 30 (ms)
>
> DELETE
> Average Latency Under Node LA   = 20 (ms)
> Average Latency Under Node MA   = 19 (ms)
> Average Latency Under Node SA   = 19 (ms)
> #TOTAL CALLS = 300 Total Average Latency = 19 (ms)
>
>
>
>
>
>
>
> On Mon, Sep 9, 2013 at 5:47 PM, Ian Boston <i...@tfd.co.uk> wrote:
>
>> Hi
>> The CassandraImpl needs to return something suitable to represent
>>
>>  /content/cassandra/p
>>
>> For the moment, if the column family p does exist, return a new type
>> of read only resource, eg CassandraColumnFamilyResource.
>>
>> Ian
>>
>>
>> On 9 September 2013 13:02, Dishara Wijewardana <ddwijeward...@gmail.com>
>> wrote:
>> > On Mon, Sep 9, 2013 at 2:09 PM, Ian Boston <i...@tfd.co.uk> wrote:
>> >
>> >> Hi,
>> >> The call to processCreate a few lines earlier should have created the
>> >> resource so that the subsequent call to getResource returned the new
>> >> resource into newResource.
>> >>
>> >> If you look through the calls the create operation is called in
>> >>
>> >>
>> >>
>> org.apache.sling.servlets.post.impl.operations.AbstractCreateOperation.deepGetOrCreateNode(ResourceResolver,
>> >> String, Map<String, RequestProperty>, List<Modification>,
>> >> VersioningConfiguration)
>> >>
>> >> Line 533
>> >>
>> >>                     resource = resolver.create(resource, name, props);
>> >>
>> >> Stick a breakpoint at that line and see, if its called, and if the
>> >> resource resolver calls your code.
>> >>
>> >>
>> >>
>> > Hi Ian,
>> > Yes it calls the create method. As I see the issue is the commit not
>> > getting called and hence resolver cannot get the created resource.
>> > So I thought of commit on the fly @create method to verify that. But we
>> > have a problem here.
>> >
>> > When I try to create /content/cassandra/p/c node, as you exactly
>> mentioned
>> > before, it tries to create  /content/cassandra/p node.  In Cassandra
>> Impl,
>> > there cannot be a node like  /content/cassandra/p and hence returns
>> NULL as
>> > earlier and still create fails. Because "p" is the column family (the
>> model
>> > which we agreed and implemented). So what is the best approach to
>> overcome
>> > this.
>> >
>> >
>> >
>> >> BTW: Its Ok that there is a newResource.adaptTo(Node.class) as the
>> >> result is checked for Null a moment later. You do not need to support
>> >> adaptTo(Node.class), which is a special case for Jcr.
>> >>
>> >> Best Regards
>> >> Ian
>> >>
>> >> On 9 September 2013 06:05, Dishara Wijewardana <
>> ddwijeward...@gmail.com>
>> >> wrote:
>> >> > Hi Ian,
>> >> > I debug the servlet from line to line and locate the NPE that causes
>> this
>> >> > failure. The request path
>> >> >
>> >> > SlingPostServlet > AbstractCreateOperation > ModifyOperation@line105
>> >> > where newResource = null.  The resource resolver at this point
>> >> > is org.apache.sling.resourceresolver.impl.ResourceResolverImpl.
>> >> >
>> >> > 104     final Resource newResource =
>> >> > request.getResourceResolver().getResource(response.getPath());
>> >> > 105     final Node newNode = *newResource*.adaptTo(Node.class);
>> >> >
>> >> > The resolver get a resource if the resource is already existing
>> >> > one(obviously). So either this should be a bug or my request goes
>> through
>> >> > the wrong path. Please advice.
>> >> >
>> >> >
>> >> >
>> >> >
>> >> > On Mon, Sep 9, 2013 at 8:45 AM, Dishara Wijewardana <
>> >> ddwijeward...@gmail.com
>> >> >> wrote:
>> >> >
>> >> >> I also checked in Cassandra Provider impl and with system logs and
>> >> >> verified the Error not comes due to exception throws from the
>> Provider
>> >> >> implementation itself.
>> >> >> So probably it will be a missing a property. I still could not
>> figure
>> >> out
>> >> >> which. If I can find which servlet get called I can debug and
>> >> see(already
>> >> >> post a mail to dev list).
>> >> >>
>> >> >>
>> >> >> On Sun, Sep 8, 2013 at 5:10 AM, Dishara Wijewardana <
>> >> >> ddwijeward...@gmail.com> wrote:
>> >> >>
>> >> >>> Hi Ian,
>> >> >>> I found it difficult to use createNode method to work. It returns
>> 200
>> >> >>> response. I was trying to get this working but could not find a
>> way.
>> >> >>> Probably I might be missing some properties. What I set was only
>> >> content
>> >> >>> type to be json. What are the appropriate properties that you
>> >> mentioned.
>> >> >>> How can someone get to know what are the properties required
>> minimum to
>> >> >>> create a node. I debug and verified my create method gets hit in
>> >> provider
>> >> >>> side.
>> >> >>>
>> >> >>> *P.S If I give a already existing path it works and gives 302
>> >> response. *
>> >> >>> i.e /content/cassandra/p1/c1 this works since it is already there.
>> >> >>> But /content/cassandra/pp/cc fails. I also tried
>> >> >>> adding /content/cassandra/pp first and then
>> /content/cassandra/pp/cc.
>> >> It
>> >> >>> fails at /content/cassandra/pp.
>> >> >>>
>> >> >>> Tests run: 1, Failures: 0, Errors: 1, Skipped: 0, Time elapsed:
>> 36.21
>> >> sec
>> >> >>> <<< FAILURE!
>> >> >>>
>> >>
>> testResourceCreate(org.apache.sling.launchpad.webapp.integrationtest.resourceprovider.CassandraResourceCUDTest)
>> >> >>>  Time elapsed: 36.187 sec  <<< ERROR!
>> >> >>>
>> org.apache.sling.commons.testing.integration.HttpStatusCodeException:
>> >> >>> Expected status code 302 for POST, got 200, URL=
>> >> >>> http://localhost:8080/content/cassandra/pp/cc, Content=[<html>
>> >> >>> <head>
>> >> >>>     <title>Error while processing /content/cassandra/pp/cc</title>
>> >> >>> </head>
>> >> >>>     <body>
>> >> >>>     <h1>Error while processing /content/cassandra/pp/cc</h1>
>> >> >>>     <table>
>> >> >>>         <tbody>
>> >> >>>             <tr>
>> >> >>>                 <td>Status</td>
>> >> >>>                 <td><div id="Status">500</div></td>
>> >> >>>             </tr>
>> >> >>>             <tr>
>> >> >>>                 <td>Message</td>
>> >> >>>                 <td><div
>> >> >>> id="Message">java.lang.NullPointerException</div></td>
>> >> >>>             </tr>
>> >> >>>             <tr>
>> >> >>>                 <td>Location</td>
>> >> >>>                 <td><a href="/cassandra/pp/cc"
>> >> >>> id="Location">/cassandra/pp/cc</a></td>
>> >> >>>             </tr>
>> >> >>>             <tr>
>> >> >>>                 <td>Parent Location</td>
>> >> >>>                 <td><a href="/cassandra/pp"
>> >> >>> id="ParentLocation">/cassandra/pp</a></td>
>> >> >>>             </tr>
>> >> >>>             <tr>
>> >> >>>                 <td>Path</td>
>> >> >>>                 <td><div
>> id="Path">/content/cassandra/pp/cc</div></td>
>> >> >>>             </tr>
>> >> >>>             <tr>
>> >> >>>                 <td>Referer</td>
>> >> >>>                 <td><a href="" id="Referer"></a></td>
>> >> >>>             </tr>
>> >> >>>             <tr>
>> >> >>>                 <td>ChangeLog</td>
>> >> >>>                 <td><div
>> >> id="ChangeLog">&lt;pre&gt;&lt;/pre&gt;</div></td>
>> >> >>>             </tr>
>> >> >>>         </tbody>
>> >> >>>     </table>
>> >> >>>     <p><a href="">Go Back</a></p>
>> >> >>>     <p><a href="/cassandra/pp/cc">Modified Resource</a></p>
>> >> >>>     <p><a href="/cassandra/pp">Parent of Modified Resource</a></p>
>> >> >>>     </body>
>> >> >>> </html>]
>> >> >>> at
>> >> >>>
>> >>
>> org.apache.sling.commons.testing.integration.SlingIntegrationTestClient.createNode(SlingIntegrationTestClient.java:188)
>> >> >>>  at
>> >> >>>
>> >>
>> org.apache.sling.commons.testing.integration.SlingIntegrationTestClient.createNode(SlingIntegrationTestClient.java:119)
>> >> >>> at
>> >> >>>
>> >>
>> org.apache.sling.commons.testing.integration.SlingIntegrationTestClient.createNode(SlingIntegrationTestClient.java:109)
>> >> >>>  at
>> >> >>>
>> >>
>> org.apache.sling.launchpad.webapp.integrationtest.resourceprovider.CassandraResourceCUDTest.testResourceCreate(CassandraResourceCUDTest.java:29)
>> >> >>> at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method)
>> >> >>>  at
>> >> >>>
>> >>
>> sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:39)
>> >> >>> at
>> >> >>>
>> >>
>> sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:25)
>> >> >>>  at java.lang.reflect.Method.invoke(Method.java:597)
>> >> >>> at junit.framework.TestCase.runTest(TestCase.java:168)
>> >> >>>  at junit.framework.TestCase.runBare(TestCase.java:134)
>> >> >>> at junit.framework.TestResult$1.protect(TestResult.java:110)
>> >> >>>  at junit.framework.TestResult.runProtected(TestResult.java:128)
>> >> >>> at junit.framework.TestResult.run(TestResult.java:113)
>> >> >>>  at junit.framework.TestCase.run(TestCase.java:124)
>> >> >>> at junit.framework.TestSuite.runTest(TestSuite.java:232)
>> >> >>>  at junit.framework.TestSuite.run(TestSuite.java:227)
>> >> >>> at
>> >> >>>
>> >>
>> org.junit.internal.runners.JUnit38ClassRunner.run(JUnit38ClassRunner.java:81)
>> >> >>>  at
>> >> >>>
>> >>
>> org.apache.maven.surefire.junit4.JUnit4Provider.execute(JUnit4Provider.java:252)
>> >> >>> at
>> >> >>>
>> >>
>> org.apache.maven.surefire.junit4.JUnit4Provider.executeTestSet(JUnit4Provider.java:141)
>> >> >>>  at
>> >> >>>
>> >>
>> org.apache.maven.surefire.junit4.JUnit4Provider.invoke(JUnit4Provider.java:112)
>> >> >>> at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method)
>> >> >>>  at
>> >> >>>
>> >>
>> sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:39)
>> >> >>> at
>> >> >>>
>> >>
>> sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:25)
>> >> >>>  at java.lang.reflect.Method.invoke(Method.java:597)
>> >> >>> at
>> >> >>>
>> >>
>> org.apache.maven.surefire.util.ReflectionUtils.invokeMethodWithArray(ReflectionUtils.java:189)
>> >> >>>  at
>> >> >>>
>> >>
>> org.apache.maven.surefire.booter.ProviderFactory$ProviderProxy.invoke(ProviderFactory.java:165)
>> >> >>> at
>> >> >>>
>> >>
>> org.apache.maven.surefire.booter.ProviderFactory.invokeProvider(ProviderFactory.java:85)
>> >> >>>  at
>> >> >>>
>> >>
>> org.apache.maven.surefire.booter.ForkedBooter.runSuitesInProcess(ForkedBooter.java:115)
>> >> >>> at
>> >> >>>
>> >>
>> org.apache.maven.surefire.booter.ForkedBooter.main(ForkedBooter.java:75)
>> >> >>>
>> >> >>>
>> >> >>> Results :
>> >> >>>
>> >> >>> Tests in error:
>> >> >>>
>> >> >>>
>> >>
>> testResourceCreate(org.apache.sling.launchpad.webapp.integrationtest.resourceprovider.CassandraResourceCUDTest):
>> >> >>> Expected status code 302 for POST, got 200, URL=
>> >> >>> http://localhost:8080/content/cassandra/pp/cc, Content=[<html>(..)
>> >> >>>
>> >> >>> Tests run: 1, Failures: 0, Errors: 1, Skipped: 0
>> >> >>>
>> >> >>> [INFO]
>> >> >>>
>> >>
>> ------------------------------------------------------------------------
>> >> >>> [INFO] BUILD FAILURE
>> >> >>> [INFO]
>> >> >>>
>> >>
>> ------------------------------------------------------------------------
>> >> >>> [INFO] Total time: 40.126s
>> >> >>> [INFO] Finished at: Sun Sep 08 05:05:47 IST 2013
>> >> >>> [INFO] Final Memory: 13M/490M
>> >> >>>
>> >> >>>
>> >> >>>
>> >> >>>
>> >> >>> On Fri, Sep 6, 2013 at 1:23 PM, Ian Boston <i...@tfd.co.uk> wrote:
>> >> >>>
>> >> >>>> Hi,
>> >> >>>> Thanks, now I see how you're doing it. Its good.
>> >> >>>>
>> >> >>>> So to do a Write (CUD[1]) test, create another class that extends
>> >> >>>> HttpBaseTest and write a test method that invokes
>> >> >>>>
>> >> >>>> testClient.createNode(...) with an appropriate set of properties
>> and a
>> >> >>>> collection managed by the CassandraProvider. You will probably
>> need to
>> >> >>>> create that collection first, and its parent, or better still,
>> reuse
>> >> >>>> the existing pre-populated collections since we are looking for
>> the
>> >> >>>> scalability of CUD relative to collection size.
>> >> >>>>
>> >> >>>> I think if you use createNode on an existing node it will update
>> it,
>> >> >>>> and there is a delete method as well.
>> >> >>>>
>> >> >>>> testClient is a
>> >> >>>>
>> >> org.apache.sling.commons.testing.integration.SlingIntegrationTestClient
>> >> >>>> and is protected in HttpBaseTest so you should have access.
>> >> >>>>
>> >> >>>> As I said, perform CUD on 100 new nodes in each collection and
>> print
>> >> >>>> the results out.
>> >> >>>>
>> >> >>>> Obviously add all new code to you repository so its all in one
>> place.
>> >> >>>>
>> >> >>>> Best Regards
>> >> >>>> Ian
>> >> >>>>
>> >> >>>> 1 Create Update Delete (you've done read, we need stats for each
>> of
>> >> >>>> these operations)
>> >> >>>>
>> >> >>>>
>> >> >>>> On 6 September 2013 04:31, Dishara Wijewardana <
>> >> ddwijeward...@gmail.com>
>> >> >>>> wrote:
>> >> >>>> > Hi Ian,
>> >> >>>> > Done.
>> >> >>>> >
>> >> >>>> >
>> >> >>>> > On Thu, Sep 5, 2013 at 10:53 AM, Ian Boston <i...@tfd.co.uk>
>> wrote:
>> >> >>>> >
>> >> >>>> >> Hi Dishara,
>> >> >>>> >>
>> >> >>>> >> On Thursday, September 5, 2013, Dishara Wijewardana wrote:
>> >> >>>> >>
>> >> >>>> >> > Hi Ian,
>> >> >>>> >> > Did you mean the sling integration test (which runs the
>> >> performance
>> >> >>>> tests
>> >> >>>> >> > and provides reports) to move inside google code repo ?
>> >> >>>> >>
>> >> >>>> >>
>> >> >>>> >> Yes please.
>> >> >>>> >> Thanks
>> >> >>>> >>
>> >> >>>> >> Best regards
>> >> >>>> >> Ian
>> >> >>>> >>
>> >> >>>> >>
>> >> >>>> >>
>> >> >>>> >>
>> >> >>>> >> >
>> >> >>>> >> >
>> >> >>>> >> > On Wed, Sep 4, 2013 at 5:41 PM, Ian Boston <i...@tfd.co.uk>
>> >> wrote:
>> >> >>>> >> >
>> >> >>>> >> > > On 4 September 2013 13:42, Dishara Wijewardana <
>> >> >>>> >> ddwijeward...@gmail.com>
>> >> >>>> >> > > wrote:
>> >> >>>> >> > > > HI Ian,
>> >> >>>> >> > > >
>> >> >>>> >> > > >
>> >> >>>> >> > > >
>> >> >>>> >> > > > On Wed, Sep 4, 2013 at 4:00 PM, Ian Boston <
>> i...@tfd.co.uk>
>> >> >>>> wrote:
>> >> >>>> >> > > >
>> >> >>>> >> > > >> On 4 September 2013 12:20, Dishara Wijewardana <
>> >> >>>> >> > ddwijeward...@gmail.com
>> >> >>>> >> > > >
>> >> >>>> >> > > >> wrote:
>> >> >>>> >> > > >> <snip>
>> >> >>>> >> > > >>
>> >> >>>> >> > > >> >> How long does it take to add, update and delete, 100
>> new
>> >> >>>> items to
>> >> >>>> >> > the
>> >> >>>> >> > > >> >> existing collections that you used for the read
>> tests. If
>> >> >>>> its
>> >> >>>> >> > quick,
>> >> >>>> >> > > you
>> >> >>>> >> > > >> >> may need to make that 1000 new items.
>> >> >>>> >> > > >> >>
>> >> >>>> >> > > >> >>
>> >> >>>> >> > > >> > Hi Ian,
>> >> >>>> >> > > >> >
>> >> >>>> >> > > >> > In the modify provider interface there is no "update"
>> >> >>>> method. Am I
>> >> >>>> >> > > >> missing
>> >> >>>> >> > > >> > something?
>> >> >>>> >> > > >>
>> >> >>>> >> > > >> You need to support adapTo(ModifyableValueMap.class)
>> IIRC.
>> >> >>>> >> > > >>
>> >> >>>> >> > > > I saw the interface ModifyableValueMap, but could not
>> find a
>> >> >>>> clear
>> >> >>>> >> > > example
>> >> >>>> >> > > > usage of it as in PlanetResource case. But will see
>> further.
>> >> >>>> >> > > >
>> >> >>>> >> > >
>> >> >>>> >> > > IIRC the MongoDB ResourceProvider allows modification.
>> grep the
>> >> >>>> Sling
>> >> >>>> >> > > source code for it.
>> >> >>>> >> > >
>> >> >>>> >> > >
>> >> >>>> >> > > >>
>> >> >>>> >> > > >> >
>> >> >>>> >> > > >> > Can you please elaborate more on exact scope and
>> goals on
>> >> >>>> what is
>> >> >>>> >> > > >> expected
>> >> >>>> >> > > >> > from the new performance test class?Is it to capture
>> the
>> >> >>>> >> add/delete
>> >> >>>> >> > > >> latency
>> >> >>>> >> > > >> > on nodes added in each collection.
>> >> >>>> >> > > >>
>> >> >>>> >> > > >> yes.
>> >> >>>> >> > > >>
>> >> >>>> >> > > >> >
>> >> >>>> >> > > >> > If so, is it possible to test add/delete extending
>> >> HTTPBase
>> >> >>>> test
>> >> >>>> >> as
>> >> >>>> >> > > done
>> >> >>>> >> > > >> > for reading ? Or any other class that provides
>> abstract
>> >> test
>> >> >>>> >> class/
>> >> >>>> >> > > APIs
>> >> >>>> >> > > >> to
>> >> >>>> >> > > >> > add/delete ?
>> >> >>>> >> > > >> >
>> >> >>>> >> > > >>
>> >> >>>> >> > > >> Where are the classes that you used to perform the read
>> >> tests,
>> >> >>>> I
>> >> >>>> >> cant
>> >> >>>> >> > > >> see them in the repo ?
>> >> >>>> >> > > >>
>> >> >>>> >> > > >> The class  that I used was
>> >> >>>> >> > > >
>> org.apache.sling.commons.testing.integration.HttpTestBase . I
>> >> >>>> have
>> >> >>>> >> > > attached
>> >> >>>> >> > > > the patch of my class which extends this class. There I
>> am
>> >> usinf
>> >> >>>> >> > > > getContent() method of the base class to do HTTP get
>> content
>> >> >>>> >> > operations.
>> >> >>>> >> > >
>> >> >>>> >> > >
>> >> >>>> >> > > Could we get your test classes to run the load test into
>> your
>> >> >>>> >> > > repository please, even if its something that has to be run
>> >> >>>> manually.
>> >> >>>> >> > >
>> >> >>>> >> > > Thanks
>> >> >>>> >> > >
>> >> >>>> >> > >
>> >> >>>> >> > > Best Regards
>> >> >>>> >> > > Ian
>> >> >>>> >> > >
>> >> >>>> >> > >
>> >> >>>> >> > > >
>> >> >>>> >> > > >> Ian
>> >> >>>> >> > > >>
>> >> >>>> >> > > >>
>> >> >>>> >> > > >>
>> >> >>>> >> > > >> >
>> >> >>>> >> > > >> >
>> >> >>>> >> > > >> >> Best regards
>> >> >>>> >> > > >> >> Ian
>> >> >>>> >> > > >> >>
>> >> >>>> >> > > >> >>
>> >> >>>> >> > > >> >>
>> >> >>>> >> > > >> >>
>> >> >>>> >> > > >> >>
>> >> >>>> >> > > >> >> >
>> >> >>>> >> > > >> >> >
>> >> >>>> >> > > >> >> > > Best Regards
>> >> >>>> >> > > >> >> > > Ian
>> >> >>>> >> > > >> >> > >
>> >> >>>> >> > > >> >> > > On 3 September 2013 01:23, Dishara Wijewardana <
>> >> >>>> >> > > >> >> ddwijeward...@gmail.com<javascript:;>
>> >> >>>> >> > > >> >> > >
>> >> >>>> >> > > >> >> > > wrote:
>> >> >>>> >> > > >> >> > > > Hi Ian,
>> >> >>>> >> > > >> >> > > > Thank you for the references. I just commited
>> the
>> >> >>>> changes.
>> >> >>>> >> > > There I
>> >> >>>> >> > > >> >> have
>> >> >>>> >> > > >> >> > > > completed the whole implementation of
>> >> >>>> >> > ModifyingResourceProvider
>> >> >>>> >> > > >> >> > interface
>> >> >>>> >> > > >> >> > > > for  Cassandra Resource Provider (create,
>> delete,
>> >> >>>> commit ,
>> >> >>>> >> > > >> rollback
>> >> >>>> >> > > >> >> > etc)
>> >> >>>> >> > > >> >> > > > and wrote 3 test classes (
>> >> >>>> >> > > >> CassandraModifyResourceProvide**rAddTest,
>> >> >>>> >> > > >> >> > > Cassan
>> >> >>>> >> > > >> >> > > > draModif--
>> >> >>>> >> > Thanks
>> >> >>>> >> > /Dishara
>> >> >>>> >> >
>> >> >>>> >>
>> >> >>>> >
>> >> >>>> >
>> >> >>>> >
>> >> >>>> > --
>> >> >>>> > Thanks
>> >> >>>> > /Dishara
>> >> >>>>
>> >> >>>
>> >> >>>
>> >> >>>
>> >> >>> --
>> >> >>> Thanks
>> >> >>> /Dishara
>> >> >>>
>> >> >>
>> >> >>
>> >> >>
>> >> >> --
>> >> >> Thanks
>> >> >> /Dishara
>> >> >>
>> >> >
>> >> >
>> >> >
>> >> > --
>> >> > Thanks
>> >> > /Dishara
>> >>
>> >
>> >
>> >
>> > --
>> > Thanks
>> > /Dishara
>>
>
>
>
> --
> Thanks
> /Dishara
>



-- 
Thanks
/Dishara

Reply via email to