Hi Sudharma/Tammo,

Kindly review attached document on my proposed approach. Let me know if you
have any concerns or doubts on it.

regards,
sathwik

On Fri, Jun 5, 2015 at 6:56 PM, Sathwik B P <sathwik...@gmail.com> wrote:

> find response inline
>
> On Wed, Jun 3, 2015 at 10:22 PM, sudharma subasinghe <
> suba...@cse.mrt.ac.lk> wrote:
>
>> Hi,
>>
>> Sorry for the late reply. I was trying to achieve a proper solution.
>> Following is my approach.
>>
>> 1) I elected master node for deploying purpose. So when a master node goes
>> down hazelcast will elect the next oldest node for master.
>>
>
>     Perfect
>
>
>> 2) ODEServer can identify whether clustering is enabled or not by getting
>> the property value in ode-axis2.properties file. So I introduced new
>> property called "ode-axis2.hazelcast.clustering.enabled". If there is no
>> clustering enabled server will work as it is. If clustering is enabled,
>> cluster will be initialized.
>>
>
>     Perfect
>
>
>> 3) In manual deployment its responsibility is taken by the
>> DeploymentPoller. So I give the deployment capability to master node,s
>> poller by setting "isDeploymentFromODEFileSystemAllowed()" to true.So
>> others will not be able to go into check() method in DeploymentPoller. So
>> deployment will be done by only the master node.
>>
>
>     Perfect
>
>
>>
>> 4) In DeploymentWebService, I had to consider few cases.If the deploy
>> request goes to the master node, it will deploy the process through web
>> service.Others pollers will not go into check() method as they are not
>> masters. So master can continue without any involvement of others.
>>
>>
>     Perfect
>
>
>> 5) If the deploy request goes to a slave node, it will do up to file
>> creation in the file system.Slave will be stopped at that point. As only
>> master poller is checking, master can continue from created files in the
>> file system.
>>
>
>     DeploymentWebService provides synchronous operations. The status of
> the operation should be communicated to the calling client in the same call.
>     DeploymentPoller is a backend thread that goes over each and every
> directory under the Deployment directory checking for any changes to
> deploy.xml in existing processes and deploy newly added processes. This
> process is  sequential and time consuming. As the process directories
> grows, so does the time taken for execution of the thread.
>
>     Since the request is on a slave node and the processing is done on
> master node, how do you check for the completion of the
> deployment/undeployment of processes and respond back to the client since
> the web service call is a synchronous operation. As DeploymentPoller is
> taking a lot of time in processing, your request will time out right.
>
>
>>
>> 6) But there was problem with _deploymentUnits in ProcessStoreImpl. Each
>> _deploymentUnits stores only what its server has deployed. So think, that
>> a
>> master node goes down another master node appears.But its
>> __deploymentUnits
>> does not have dus which has deployed by the earlier master node. Hence it
>> will not be able retire earlier version of the process which is deployed
>> by
>> previous master. So there will two process which are in "ACTIVE" state
>
>
>> 7) To avoid this, I add the ODEServer as an Observer to check when a new
>> master is electing, then load all the deployment units out of the store.
>> So
>> new master node can have all the dus and can retire appropriate version.
>> Usually loadAll() is called at the server start-up time. But there is no
>> other way to solve this. I tried to use Hazelcast IMap to store all dus
>> among all nodes. But it wasn't success as du is not serializable object.
>>
>
>> 8) I figured out that we do not need send cluster message to others as all
>> the dus' data are persisted to the shared DB. So each node can take the du
>> and retrieve necessary data using already implemented methods in Process
>> Store.
>>
>> 9) But there is an another problem.The axis2 service corresponding to a
>> deployed process does not appear on all nodes of the cluster. That is
>> because each server add du which is deployed by it to the process
>> store.That is why I had use loadAll() when masters are changing. How to
>> solve this?
>>
>
>     I do appriciate your efforts in understanding the implmentation and
> changes that need to be done. You are bang on it.
>     fireEvent(..) is the method that triggers process activation and
> necessary service creation.
>
>
>     But with this given apporach from steps 6 to 8, ODE cannot have
> atleast 2 Active servers for Load balancing. You are concentrating on only
> one active node that will do deployments and cater to process invocations.
>     We should also think about scaling ODE to multiple servers to handle
> load.
>
>     What do you think.
>
>
>> Thank you,
>> Sudharma
>>
>> On 2 June 2015 at 08:51, Sathwik B P <sathwik...@gmail.com> wrote:
>>
>> > Sudharma,
>> >
>> > Any updates?
>> >
>> > regards,
>> > sathwik
>> >
>> > On Fri, May 29, 2015 at 5:26 PM, Sathwik B P <sathwik...@gmail.com>
>> wrote:
>> >
>> > > Sudharma,
>> > >
>> > > Can you elaborate on your option 1).
>> > >
>> > > Response to your option 2).
>> > >
>> > >     Process Store is the component that handles process metadata,
>> > > compilation and deployment in ODE. Integration layers in ODE (Axis2,
>> JBI)
>> > > use the process store.
>> > >     Future implementations of IL for ODE will also use the process
>> store.
>> > > We should not be thinking of moving the process store functionality to
>> > the
>> > > integration layers.
>> > >
>> > >
>> > > On Thu, May 28, 2015 at 9:33 PM, sudharma subasinghe <
>> > > suba...@cse.mrt.ac.lk> wrote:
>> > >
>> > >> Hi,
>> > >>
>> > >> I understood the problem within dynamic master/slave configuration.
>> In
>> > my
>> > >> approach, when a deployment request is routed to a slave node there
>> will
>> > >> not be a deployment. I suggest two options to avoid it.
>> > >> 1) Have static master/slave configuration only for deploy process
>> > >>
>> > > 2) Modify the deployment web service to complie and verify the process
>> > and
>> > >> then copy it to the deploy folder irrespective of whether its a
>> master
>> > or
>> > >> slave, then deployment poller should take care of the deployment
>> > >>
>> > >>
>> > >
>> > >>
>> > >> On 28 May 2015 at 14:43, Sathwik B P <sathwik...@gmail.com> wrote:
>> > >>
>> > >> > Sudharma,
>> > >> >
>> > >> > We definitely need a master/slave in the hazelcast cluster. This is
>> > >> > probably needed for the job migration in the Scheduler to migrate
>> the
>> > >> jobs
>> > >> > associated with a down node. Let hold on this topic for future
>> > >> discussion.
>> > >> >
>> > >> > Going by the explanation where the master/slave nodes have certain
>> > >> > predefined tasks to perform is perfectly fine.
>> > >> >
>> > >> > I have this scenario,
>> > >> >
>> > >> > I am using HAProxy as my load balancer and configured 3 nodes in
>> the
>> > >> > cluster.
>> > >> >
>> > >> > Node1 - Active
>> > >> > Node2 - Active
>> > >> > Node3 - Backup
>> > >> >
>> > >> > Load balancing algorithm: RoundRobin
>> > >> >
>> > >> > A Backup node (Node3) is one which the load balancer will not route
>> > >> > requests to, until one of the Active node i.e either Node1 or Node2
>> > has
>> > >> > gone down.
>> > >> >
>> > >> > All these 3 nodes are also part of the hazelcast cluster as well.
>> > >> >
>> > >> > In the hazelcast cluster, assume Node1 is elected as the
>> leader/master
>> > >> and
>> > >> > Node2,Node3 as slaves.
>> > >> >
>> > >> > I initiate the deploy operation on the DeploymentWebService which
>> the
>> > >> load
>> > >> > balancer routes it to one of the Active nodes in the cluster, lets
>> say
>> > >> it's
>> > >> > the Node1. Since Node1 is also the master in the hazelcast cluster,
>> > >> > deployment is a success.
>> > >> >
>> > >> > I initiate another deploy operation on the DeploymentWebService
>> which
>> > >> the
>> > >> > load balancer routes it to the next active node which is Node2.
>> Since
>> > >> Node2
>> > >> > is a slave in the Hazelcast cluster, What happens to the
>> deployment?
>> > >> >
>> > >> > regards,
>> > >> > sathwik
>> > >> >
>> > >> > On Wed, May 27, 2015 at 10:55 PM, sudharma subasinghe <
>> > >> > suba...@cse.mrt.ac.lk
>> > >> > > wrote:
>> > >> >
>> > >> > > Hi,
>> > >> > >
>> > >> > > I will explain my approach as much as possible. The oldest node
>> in
>> > the
>> > >> > > hazelcast cluster is elected as the master node. In the failure
>> of
>> > the
>> > >> > > master node, next oldest node will be elected as the master node.
>> > This
>> > >> > > master-slave configuration is just for deployment. When the
>> > hazelcast
>> > >> > > cluster elected the master node, that node becomes a master node
>> for
>> > >> > > deploying process. So it will do the deploying artifacts. If you
>> > want
>> > >> to
>> > >> > > get the idea of electing master node please refer the code which
>> I
>> > >> have
>> > >> > > located in the github. (
>> > >> > > https://github.com/Subasinghe/ode/tree/ode_clustering)
>> > >> > >
>> > >> > > I identified separated actions which should be followed by the
>> > master
>> > >> and
>> > >> > > salve nodes.
>> > >> > > Actions which are followed by master node only
>> > >> > > 1) create deployment unit
>> > >> > > 2) set the version nu to deployment unit
>> > >> > > 3) compile deployment unit
>> > >> > > 4) scan deployment unit
>> > >> > > 5) retire previous versions
>> > >> > > Master node and slave nodes should create _processes which stores
>> > >> > > ProcessConfImpl
>> > >> > > Only master node will write the version nu to database, create
>> > >> .deployed
>> > >> > > file
>> > >> > >
>> > >> > > So there are some actions which should be followed only by master
>> > node
>> > >> > > while other actions should be followed by all the nodes.The idea
>> of
>> > >> > having
>> > >> > > a master node is deploying artifacts and avoid others from
>> writing
>> > the
>> > >> > > version nu to database.
>> > >> > > Whether a node is active or passive, all nodes should do the
>> > >> > > deployment.Master
>> > >> > > and slaves will follow necessary actions as in above.
>> > >> > >
>> > >> > >
>> > >> > >
>> > >> > >
>> > >> > >
>> > >> > > On 27 May 2015 at 15:49, Sathwik B P <sathwik...@gmail.com>
>> wrote:
>> > >> > >
>> > >> > > > Nandika,
>> > >> > > >
>> > >> > > > I very well understand what you have put across, but it's
>> > secondary
>> > >> to
>> > >> > me
>> > >> > > > now.
>> > >> > > >
>> > >> > > > Sudharma,
>> > >> > > > My primary concern is to understand at a high level the
>> deployment
>> > >> > > > architecture and how would master-slave configuration fit in.
>> Are
>> > >> there
>> > >> > > any
>> > >> > > > restrictions imposed by the in-progress design?
>> > >> > > >
>> > >> > > > Firstly, how would ODE process deployment work under these
>> cluster
>> > >> > > > configurations?
>> > >> > > >
>> > >> > > > Sample Cluster configurations: A load balancer is frontending
>> the
>> > >> > > servers.
>> > >> > > > 1) Cluster consisting of 2 nodes all Active-Active.
>> > >> > > > 2) Cluster consisting of 2 nodes Active-Passive.
>> > >> > > > 3) Cluster with 2+ nodes with additional nodes either in
>> Active or
>> > >> > > Passive.
>> > >> > > >
>> > >> > > > regards,
>> > >> > > > sathwik
>> > >> > > >
>> > >> > > >
>> > >> > > >
>> > >> > > >
>> > >> > > >
>> > >> > > >
>> > >> > > >
>> > >> > > > On Wed, May 27, 2015 at 3:04 PM, Nandika Jayawardana <
>> > >> > jayaw...@gmail.com
>> > >> > > >
>> > >> > > > wrote:
>> > >> > > >
>> > >> > > > > Hi Sathwik,
>> > >> > > > >
>> > >> > > > > According to my understanding, in the clustering scenario,
>> the
>> > >> master
>> > >> > > > node
>> > >> > > > > should perform all the deployment actions and the slave nodes
>> > also
>> > >> > need
>> > >> > > > to
>> > >> > > > > perform some deployment actions. For example, the slave nodes
>> > also
>> > >> > > should
>> > >> > > > > handle the process ACTIVATED event so that the process
>> > >> configuration
>> > >> > is
>> > >> > > > > added to the engine and necessary web services are created so
>> > that
>> > >> > when
>> > >> > > > the
>> > >> > > > > load balancer send requests to any node in the cluster, it is
>> > >> ready
>> > >> > to
>> > >> > > > > accept those requests.
>> > >> > > > >
>> > >> > > > > Regards
>> > >> > > > > Nandika
>> > >> > > > >
>> > >> > > > >
>> > >> > > > >
>> > >> > > > >
>> > >> > > > > On Wed, May 27, 2015 at 12:30 PM, Sathwik B P <
>> > >> sathwik...@gmail.com>
>> > >> > > > > wrote:
>> > >> > > > >
>> > >> > > > > > Sudharma,
>> > >> > > > > >
>> > >> > > > > > Where are you going to configure the master-slaves, is it
>> in
>> > the
>> > >> > web
>> > >> > > > > > application level or at the load balancer?
>> > >> > > > > >
>> > >> > > > > > regards,
>> > >> > > > > > sathwik
>> > >> > > > > >
>> > >> > > > > > On Tue, May 26, 2015 at 7:42 PM, sudharma subasinghe <
>> > >> > > > > > suba...@cse.mrt.ac.lk>
>> > >> > > > > > wrote:
>> > >> > > > > >
>> > >> > > > > > > Hi Tammo,
>> > >> > > > > > >
>> > >> > > > > > > Can you suggest the best method from these to implement?
>> As
>> > >> > first I
>> > >> > > > > > > suggested the master-slaves scenario I think it is easy
>> to
>> > >> > > implement
>> > >> > > > > than
>> > >> > > > > > > distributed lock scenario. However if you can suggest one
>> > from
>> > >> > > these
>> > >> > > > > two,
>> > >> > > > > > > then I can think about it.
>> > >> > > > > > >
>> > >> > > > > > > Thank you
>> > >> > > > > > >
>> > >> > > > > > > On 21 May 2015 at 12:40, Sathwik B P <
>> sathwik...@gmail.com>
>> > >> > wrote:
>> > >> > > > > > >
>> > >> > > > > > > > With respect to the hotdeployment,
>> > >> > > > > > > >
>> > >> > > > > > > > We can drop the deployment archive onto the deployment
>> > >> folder.
>> > >> > > > Since
>> > >> > > > > > the
>> > >> > > > > > > > DeploymentPoller are acquiring the distributed lock for
>> > the
>> > >> > > > > > > DeploymentUnit,
>> > >> > > > > > > > only one of the nodes will get the lock and initiate
>> the
>> > >> > > > deployment.
>> > >> > > > > > > > DeploymentPollers on other nodes will fail in acquiring
>> > the
>> > >> > lock
>> > >> > > > and
>> > >> > > > > > > hence
>> > >> > > > > > > > will silently ignore it.
>> > >> > > > > > > >
>> > >> > > > > > > > On Thu, May 21, 2015 at 12:30 PM, Sathwik B P <
>> > >> > > > sathwik...@gmail.com>
>> > >> > > > > > > > wrote:
>> > >> > > > > > > >
>> > >> > > > > > > > > Hi Tammo,
>> > >> > > > > > > > >
>> > >> > > > > > > > > The distributed lock acquisition on the
>> DeploymentUnit
>> > >> should
>> > >> > > be
>> > >> > > > > > added
>> > >> > > > > > > to
>> > >> > > > > > > > > both DeploymentWebService and DeploymentPoller.
>> > >> > > > > > > > >
>> > >> > > > > > > > > When a deployment operation is initiated through the
>> > >> > > > > > > > DeploymentWebService,
>> > >> > > > > > > > > The load balancer routes it to any of the available
>> > nodes.
>> > >> > > > > > > > >
>> > >> > > > > > > > > On the routed node, the DeploymentWebService acquires
>> > the
>> > >> > > > > Distributed
>> > >> > > > > > > > > lock. On the remaining nodes the DeploymentPoller
>> will
>> > >> try to
>> > >> > > > > acquire
>> > >> > > > > > > the
>> > >> > > > > > > > > distributed lock and will not get it and hence will
>> > >> silently
>> > >> > > > ignore
>> > >> > > > > > it.
>> > >> > > > > > > > >
>> > >> > > > > > > > > Once the routed node completes the deployment, it
>> will
>> > >> > release
>> > >> > > > the
>> > >> > > > > > > lock.
>> > >> > > > > > > > > This way we don't have to stall the DeploymentPoller
>> in
>> > >> other
>> > >> > > > > nodes.
>> > >> > > > > > > > >
>> > >> > > > > > > > > Does it answer the concerns?
>> > >> > > > > > > > >
>> > >> > > > > > > > >
>> > >> > > > > > > > > Now, if we give the responsibility of identifying the
>> > >> master
>> > >> > > node
>> > >> > > > > to
>> > >> > > > > > > the
>> > >> > > > > > > > > hazelcast, how do we plan to intimate the load
>> balancer
>> > to
>> > >> > > change
>> > >> > > > > > it's
>> > >> > > > > > > > > configuration about the master node?
>> > >> > > > > > > > > Assuming there are 3 nodes in the cluster,
>> > >> > > > > > > > > node1 -master
>> > >> > > > > > > > > node2 - slave
>> > >> > > > > > > > > node3 - slave
>> > >> > > > > > > > >
>> > >> > > > > > > > > Node1 goes down, the LB will promote Node2 as master
>> > node,
>> > >> > but
>> > >> > > > > > > hazelcast
>> > >> > > > > > > > > might promote Node3 as master node. They are out of
>> > sync.
>> > >> > > > > > > > >
>> > >> > > > > > > > > Is this argument valid?
>> > >> > > > > > > > >
>> > >> > > > > > > > > regards,
>> > >> > > > > > > > > sathwik
>> > >> > > > > > > > >
>> > >> > > > > > > > > On Wed, May 20, 2015 at 1:51 PM, Tammo van Lessen <
>> > >> > > > > > > tvanles...@gmail.com>
>> > >> > > > > > > > > wrote:
>> > >> > > > > > > > >
>> > >> > > > > > > > >> Hi Sudharma,
>> > >> > > > > > > > >>
>> > >> > > > > > > > >> what do you expect from the "other nodes
>> deployment"?
>> > >> > > > Compilation
>> > >> > > > > is
>> > >> > > > > > > not
>> > >> > > > > > > > >> needed since the CBP file is written to the (shared)
>> > FS.
>> > >> > > > > > Registration
>> > >> > > > > > > is
>> > >> > > > > > > > >> also not needed, since it is done via the shared
>> > >> database.
>> > >> > So
>> > >> > > > the
>> > >> > > > > > only
>> > >> > > > > > > > >> thing that might be needed is to tell the engine
>> that
>> > >> there
>> > >> > > is a
>> > >> > > > > new
>> > >> > > > > > > > >> deployment. I'd need to check that. If this is
>> needed,
>> > I
>> > >> > > revert
>> > >> > > > my
>> > >> > > > > > > last
>> > >> > > > > > > > >> statement, then it is perhaps better to just send an
>> > >> event
>> > >> > > over
>> > >> > > > > > > > Hazelcast
>> > >> > > > > > > > >> to all nodes that the deployment has changed.
>> > >> > > > > > > > >>
>> > >> > > > > > > > >> Best,
>> > >> > > > > > > > >>   Tammo
>> > >> > > > > > > > >>
>> > >> > > > > > > > >> On Wed, May 20, 2015 at 10:13 AM, sudharma
>> subasinghe <
>> > >> > > > > > > > >> suba...@cse.mrt.ac.lk
>> > >> > > > > > > > >> > wrote:
>> > >> > > > > > > > >>
>> > >> > > > > > > > >> > Hi Tammo,
>> > >> > > > > > > > >> >
>> > >> > > > > > > > >> > The master node writes meta data. But runtime
>> > >> information
>> > >> > > must
>> > >> > > > > be
>> > >> > > > > > > > >> available
>> > >> > > > > > > > >> > in all nodes.Since the folder is shared, all nodes
>> > will
>> > >> > see
>> > >> > > > the
>> > >> > > > > > > > >> > availability of a new process. My idea is for
>> master
>> > >> node
>> > >> > to
>> > >> > > > > write
>> > >> > > > > > > the
>> > >> > > > > > > > >> meta
>> > >> > > > > > > > >> > data and other nodes to just read the meta data
>> and
>> > >> load
>> > >> > > > > > process.So
>> > >> > > > > > > we
>> > >> > > > > > > > >> need
>> > >> > > > > > > > >> > a small delay between master node deployment and
>> > other
>> > >> > nodes
>> > >> > > > > > > > deployment.
>> > >> > > > > > > > >> >
>> > >> > > > > > > > >> > Is there anyway to set the delay between master
>> node
>> > >> and
>> > >> > > > slaves
>> > >> > > > > > > until
>> > >> > > > > > > > >> > master node finish the deployment?
>> > >> > > > > > > > >> >
>> > >> > > > > > > > >> > Thank you
>> > >> > > > > > > > >> > Sudharma
>> > >> > > > > > > > >> >
>> > >> > > > > > > > >> >
>> > >> > > > > > > > >> > On 20 May 2015 at 13:01, Tammo van Lessen <
>> > >> > > > tvanles...@gmail.com
>> > >> > > > > >
>> > >> > > > > > > > wrote:
>> > >> > > > > > > > >> >
>> > >> > > > > > > > >> > > Hi Sathwik,
>> > >> > > > > > > > >> > >
>> > >> > > > > > > > >> > > On Wed, May 20, 2015 at 6:40 AM, Sathwik B P <
>> > >> > > > > > > sathwik...@gmail.com>
>> > >> > > > > > > > >> > wrote:
>> > >> > > > > > > > >> > >
>> > >> > > > > > > > >> > > > Sudharma/Tammo,
>> > >> > > > > > > > >> > > >
>> > >> > > > > > > > >> > > > 1) How do we plan to decide which is the
>> master
>> > >> node
>> > >> > in
>> > >> > > > the
>> > >> > > > > > > > cluster?
>> > >> > > > > > > > >> > > >
>> > >> > > > > > > > >> > >
>> > >> > > > > > > > >> > > I think the easiest approach is to always elect
>> the
>> > >> > oldest
>> > >> > > > > node
>> > >> > > > > > in
>> > >> > > > > > > > the
>> > >> > > > > > > > >> > > cluster to be the master. AFAIK Hazelcast can
>> > easily
>> > >> > asked
>> > >> > > > for
>> > >> > > > > > > this
>> > >> > > > > > > > >> > > information.
>> > >> > > > > > > > >> > >
>> > >> > > > > > > > >> > >
>> > >> > > > > > > > >> > >
>> > >> > > > > > > > >> > > > 2) Don't we need to stall the Deployment
>> Pollers
>> > in
>> > >> > the
>> > >> > > > > slave
>> > >> > > > > > > > nodes?
>> > >> > > > > > > > >> > > >
>> > >> > > > > > > > >> > > >
>> > >> > > > > > > > >> > > Absolutely.
>> > >> > > > > > > > >> > >
>> > >> > > > > > > > >> > > Suggestion:
>> > >> > > > > > > > >> > > > I am not sure whether do we need
>> Master-SLaves.
>> > Why
>> > >> > not
>> > >> > > > give
>> > >> > > > > > > every
>> > >> > > > > > > > >> node
>> > >> > > > > > > > >> > > in
>> > >> > > > > > > > >> > > > the cluster the same status (Active-Active).
>> > >> > > > > > > > >> > > >
>> > >> > > > > > > > >> > > > When a new deployment is made, the load
>> balancer
>> > >> can
>> > >> > > push
>> > >> > > > it
>> > >> > > > > > to
>> > >> > > > > > > > any
>> > >> > > > > > > > >> of
>> > >> > > > > > > > >> > > the
>> > >> > > > > > > > >> > > > available nodes. That node will probably
>> acquire
>> > a
>> > >> > > > > distributed
>> > >> > > > > > > > lock
>> > >> > > > > > > > >> on
>> > >> > > > > > > > >> > > the
>> > >> > > > > > > > >> > > > deployment unit and acts as master for that
>> > >> > deployment.
>> > >> > > > This
>> > >> > > > > > > > ensures
>> > >> > > > > > > > >> > > > optimum usage of the cluster nodes. Probably
>> no
>> > >> static
>> > >> > > > > > > > >> configuration of
>> > >> > > > > > > > >> > > > Master-Slave in the load balancer nor in the
>> > >> > hazelcast.
>> > >> > > > > > > > >> > > >
>> > >> > > > > > > > >> > >
>> > >> > > > > > > > >> > > But this would not allow to have the
>> hotdeployment
>> > >> via
>> > >> > > > > > filesystem
>> > >> > > > > > > > >> still
>> > >> > > > > > > > >> > > enabled, right?
>> > >> > > > > > > > >> > >
>> > >> > > > > > > > >> > > Best,
>> > >> > > > > > > > >> > >   Tammo
>> > >> > > > > > > > >> > >
>> > >> > > > > > > > >> > >
>> > >> > > > > > > > >> > > --
>> > >> > > > > > > > >> > > Tammo van Lessen - http://www.taval.de
>> > >> > > > > > > > >> > >
>> > >> > > > > > > > >> >
>> > >> > > > > > > > >>
>> > >> > > > > > > > >>
>> > >> > > > > > > > >>
>> > >> > > > > > > > >> --
>> > >> > > > > > > > >> Tammo van Lessen - http://www.taval.de
>> > >> > > > > > > > >>
>> > >> > > > > > > > >
>> > >> > > > > > > > >
>> > >> > > > > > > >
>> > >> > > > > > >
>> > >> > > > > >
>> > >> > > > >
>> > >> > > >
>> > >> > >
>> > >> >
>> > >>
>> > >
>> > >
>> >
>>
>
>

Reply via email to