You are viewing a plain text version of this content. The canonical link for it is here.
Posted to dev@stratos.apache.org by Sajith Kariyawasam <sa...@wso2.com> on 2014/01/11 21:15:59 UTC

Re: git commit: updating cartridge agent and rules file with the modified method

Hi Devs,


On Fri, Jan 10, 2014 at 3:51 PM, <re...@apache.org> wrote:

> Updated Branches:
>   refs/heads/master f937bb298 -> 236a1b375
>
>
> updating cartridge agent and rules file with the modified method
>
>
> Project: http://git-wip-us.apache.org/repos/asf/incubator-stratos/repo
> Commit:
> http://git-wip-us.apache.org/repos/asf/incubator-stratos/commit/236a1b37
> Tree:
> http://git-wip-us.apache.org/repos/asf/incubator-stratos/tree/236a1b37
> Diff:
> http://git-wip-us.apache.org/repos/asf/incubator-stratos/diff/236a1b37
>
> Branch: refs/heads/master
> Commit: 236a1b3755404559d1bd864a84fd5e93b9d35212
> Parents: f937bb2
> Author: rekathiru <rt...@gmail.com>
> Authored: Fri Jan 10 15:50:41 2014 +0530
> Committer: rekathiru <rt...@gmail.com>
> Committed: Fri Jan 10 15:50:41 2014 +0530
>
> ----------------------------------------------------------------------
>  .../stratos/cartridge/agent/CartridgeAgent.java | 49 +++++++++++++-------
>  .../agent/util/CartridgeAgentConstants.java     |  1 +
>  .../cartridge/agent/util/ExtensionUtils.java    | 13 ++++++
>  .../InstanceCleanupClusterEventListener.java    | 24 ++++++++++
>  .../notifier/InstanceCleanupEventListener.java  | 25 ----------
>  .../InstanceCleanupMemberEventListener.java     | 25 ++++++++++
>  .../InstanceNotifierMessageProcessorChain.java  |  4 +-
>  .../distribution/src/main/conf/mincheck.drl     |  2 +-
>  8 files changed, 99 insertions(+), 44 deletions(-)
> ----------------------------------------------------------------------
>
>
>
> http://git-wip-us.apache.org/repos/asf/incubator-stratos/blob/236a1b37/components/org.apache.stratos.cartridge.agent/src/main/java/org/apache/stratos/cartridge/agent/CartridgeAgent.java
> ----------------------------------------------------------------------
> diff --git
> a/components/org.apache.stratos.cartridge.agent/src/main/java/org/apache/stratos/cartridge/agent/CartridgeAgent.java
> b/components/org.apache.stratos.cartridge.agent/src/main/java/org/apache/stratos/cartridge/agent/CartridgeAgent.java
> index 3344282..c4fe290 100644
> ---
> a/components/org.apache.stratos.cartridge.agent/src/main/java/org/apache/stratos/cartridge/agent/CartridgeAgent.java
> +++
> b/components/org.apache.stratos.cartridge.agent/src/main/java/org/apache/stratos/cartridge/agent/CartridgeAgent.java
> @@ -12,9 +12,11 @@ import
> org.apache.stratos.cartridge.agent.util.CartridgeAgentUtils;
>  import org.apache.stratos.cartridge.agent.util.ExtensionUtils;
>  import org.apache.stratos.messaging.event.Event;
>  import
> org.apache.stratos.messaging.event.instance.notifier.ArtifactUpdatedEvent;
> +import
> org.apache.stratos.messaging.event.instance.notifier.InstanceCleanupClusterEvent;
>  import
> org.apache.stratos.messaging.event.instance.notifier.InstanceCleanupMemberEvent;
>  import
> org.apache.stratos.messaging.listener.instance.notifier.ArtifactUpdateEventListener;
> -import
> org.apache.stratos.messaging.listener.instance.notifier.InstanceCleanupEventListener;
> +import
> org.apache.stratos.messaging.listener.instance.notifier.InstanceCleanupClusterEventListener;
> +import
> org.apache.stratos.messaging.listener.instance.notifier.InstanceCleanupMemberEventListener;
>  import
> org.apache.stratos.messaging.message.processor.instance.notifier.InstanceNotifierMessageProcessorChain;
>  import
> org.apache.stratos.messaging.message.receiver.instance.notifier.InstanceNotifierEventMessageDelegator;
>  import
> org.apache.stratos.messaging.message.receiver.instance.notifier.InstanceNotifierEventMessageReceiver;
> @@ -69,10 +71,25 @@ public class CartridgeAgent implements Runnable {
>              }
>          });
>
> -        processorChain.addEventListener(new
> InstanceCleanupEventListener() {
> +        processorChain.addEventListener(new
> InstanceCleanupMemberEventListener() {
>              @Override
>              protected void onEvent(Event event) {
> -               onInstanceCleanupEvent((InstanceCleanupMemberEvent) event);
> +                String memberIdInPayload =
> CartridgeAgentConfiguration.getInstance().getClusterId();
> +                InstanceCleanupMemberEvent instanceCleanupMemberEvent =
> (InstanceCleanupMemberEvent)event;
> +
>  if(memberIdInPayload.equals(instanceCleanupMemberEvent.getMemberId())) {
> +                    onInstanceCleanupEvent();
> +                }
> +            }
> +        });
> +
> +        processorChain.addEventListener(new
> InstanceCleanupClusterEventListener() {
> +            @Override
> +            protected void onEvent(Event event) {
> +                String clusterIdInPayload =
> CartridgeAgentConfiguration.getInstance().getClusterId();
> +                InstanceCleanupClusterEvent instanceCleanupClusterEvent =
> (InstanceCleanupClusterEvent)event;
> +
>  if(clusterIdInPayload.equals(instanceCleanupClusterEvent.getClusterId())) {
> +                    onInstanceCleanupEvent();
> +                }
>              }
>          });
>          InstanceNotifierEventMessageDelegator messageDelegator = new
> InstanceNotifierEventMessageDelegator(processorChain);
> @@ -154,20 +171,20 @@ public class CartridgeAgent implements Runnable {
>          }
>      }
>


In CartridgeAgent I'm getting following exception,

*Exception in thread "Thread-0" java.lang.RuntimeException: Unknown event
listener*
* at
org.apache.stratos.messaging.message.processor.instance.notifier.InstanceNotifierMessageProcessorChain.addEventListener(InstanceNotifierMessageProcessorChain.java:56)*
* at
org.apache.stratos.cartridge.agent.CartridgeAgent.run(CartridgeAgent.java:85)*
* at java.lang.Thread.run(Thread.java:722)*

Reason seems to be that in InstanceNotifierMessageProcessorChain,
eventListener was not expected to be a
"InstanceCleanupClusterEventListener".

Is adding an instance of check for InstanceCleanupClusterEventListener the
correct way to fix it?



>
> -    private void onInstanceCleanupEvent(InstanceCleanupMemberEvent event)
> {
> -        InstanceCleanupMemberEvent instanceCleanupEvent =
> (InstanceCleanupMemberEvent)event;
> -        String memberIdInPayload =
> CartridgeAgentConfiguration.getInstance().getMemberId();
> -        String memberId = instanceCleanupEvent.getMemberId();
> -        if(memberId != null && memberId.equals(memberIdInPayload)) {
> -            if(log.isInfoEnabled()) {
> -                log.info("Executing cleaning up the data in the
> cartridge instance...");
> -            }
> -            // TODO
> -            //cleaning up the cartridge instance's data
> -
> -            //publishing the Ready to shutdown event after performing the
> cleanup
> -
>  CartridgeAgentEventPublisher.publishInstanceReadyToShutdownEvent();
> +    private void onInstanceCleanupEvent() {
> +        if(log.isInfoEnabled()) {
> +            log.info("Executing cleaning up the data in the cartridge
> instance...");
> +        }
> +        //cleaning up the cartridge instance's data
> +        ExtensionUtils.executeCleanupExtension();
> +        if(log.isInfoEnabled()) {
> +            log.info("cleaning up finished in the cartridge
> instance...");
> +        }
> +        if(log.isInfoEnabled()) {
> +            log.info("publishing ready to shutdown event...");
>          }
> +        //publishing the Ready to shutdown event after performing the
> cleanup
> +
>  CartridgeAgentEventPublisher.publishInstanceReadyToShutdownEvent();
>      }
>
>      public void terminate() {
>
>
> http://git-wip-us.apache.org/repos/asf/incubator-stratos/blob/236a1b37/components/org.apache.stratos.cartridge.agent/src/main/java/org/apache/stratos/cartridge/agent/util/CartridgeAgentConstants.java
> ----------------------------------------------------------------------
> diff --git
> a/components/org.apache.stratos.cartridge.agent/src/main/java/org/apache/stratos/cartridge/agent/util/CartridgeAgentConstants.java
> b/components/org.apache.stratos.cartridge.agent/src/main/java/org/apache/stratos/cartridge/agent/util/CartridgeAgentConstants.java
> index dc24f28..65a7594 100644
> ---
> a/components/org.apache.stratos.cartridge.agent/src/main/java/org/apache/stratos/cartridge/agent/util/CartridgeAgentConstants.java
> +++
> b/components/org.apache.stratos.cartridge.agent/src/main/java/org/apache/stratos/cartridge/agent/util/CartridgeAgentConstants.java
> @@ -31,6 +31,7 @@ public class CartridgeAgentConstants implements
> Serializable{
>      public static final String START_SERVERS_SH = "start-servers.sh";
>      public static final String INSTANCE_ACTIVATED_SH =
> "instance-activated.sh";
>      public static final String ARTIFACTS_UPDATED_SH =
> "artifacts-updated.sh";
> +    public static final String CLEAN_UP_SH = "clean.sh";
>
>         public static final String CARTRIDGE_KEY = "CARTRIDGE_KEY";
>         public static final String APP_PATH = "APP_PATH";
>
>
> http://git-wip-us.apache.org/repos/asf/incubator-stratos/blob/236a1b37/components/org.apache.stratos.cartridge.agent/src/main/java/org/apache/stratos/cartridge/agent/util/ExtensionUtils.java
> ----------------------------------------------------------------------
> diff --git
> a/components/org.apache.stratos.cartridge.agent/src/main/java/org/apache/stratos/cartridge/agent/util/ExtensionUtils.java
> b/components/org.apache.stratos.cartridge.agent/src/main/java/org/apache/stratos/cartridge/agent/util/ExtensionUtils.java
> index 06b113f..e164022 100644
> ---
> a/components/org.apache.stratos.cartridge.agent/src/main/java/org/apache/stratos/cartridge/agent/util/ExtensionUtils.java
> +++
> b/components/org.apache.stratos.cartridge.agent/src/main/java/org/apache/stratos/cartridge/agent/util/ExtensionUtils.java
> @@ -60,6 +60,19 @@ public class ExtensionUtils {
>          }
>      }
>
> +    public static void executeCleanupExtension() {
> +        try {
> +            if(log.isDebugEnabled()) {
> +                log.debug("Executing start servers extension");
> +            }
> +            String command =
> prepareCommand(CartridgeAgentConstants.CLEAN_UP_SH);
> +            CommandUtils.executeCommand(command);
> +        }
> +        catch (Exception e) {
> +            log.error("Could not execute start servers extension", e);
> +        }
> +    }
> +
>      public static void executeInstanceStartedExtension() {
>          try {
>              if(log.isDebugEnabled()) {
>
>
> http://git-wip-us.apache.org/repos/asf/incubator-stratos/blob/236a1b37/components/org.apache.stratos.messaging/src/main/java/org/apache/stratos/messaging/listener/instance/notifier/InstanceCleanupClusterEventListener.java
> ----------------------------------------------------------------------
> diff --git
> a/components/org.apache.stratos.messaging/src/main/java/org/apache/stratos/messaging/listener/instance/notifier/InstanceCleanupClusterEventListener.java
> b/components/org.apache.stratos.messaging/src/main/java/org/apache/stratos/messaging/listener/instance/notifier/InstanceCleanupClusterEventListener.java
> new file mode 100644
> index 0000000..9423b17
> --- /dev/null
> +++
> b/components/org.apache.stratos.messaging/src/main/java/org/apache/stratos/messaging/listener/instance/notifier/InstanceCleanupClusterEventListener.java
> @@ -0,0 +1,24 @@
> +/*
> + * Licensed to the Apache Software Foundation (ASF) under one
> + * or more contributor license agreements.  See the NOTICE file
> + * distributed with this work for additional information
> + * regarding copyright ownership.  The ASF licenses this file
> + * to you under the Apache License, Version 2.0 (the
> + * "License"); you may not use this file except in compliance
> + * with the License.  You may obtain a copy of the License at
> + *
> + *    http://www.apache.org/licenses/LICENSE-2.0
> + *
> + * Unless required by applicable law or agreed to in writing,
> + * software distributed under the License is distributed on an
> + * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
> + * KIND, either express or implied.  See the License for the
> + * specific language governing permissions and limitations
> + * under the License.
> + */
> +package org.apache.stratos.messaging.listener.instance.notifier;
> +
> +import org.apache.stratos.messaging.listener.EventListener;
> +
> +public abstract class InstanceCleanupClusterEventListener extends
> EventListener {
> +}
>
>
> http://git-wip-us.apache.org/repos/asf/incubator-stratos/blob/236a1b37/components/org.apache.stratos.messaging/src/main/java/org/apache/stratos/messaging/listener/instance/notifier/InstanceCleanupEventListener.java
> ----------------------------------------------------------------------
> diff --git
> a/components/org.apache.stratos.messaging/src/main/java/org/apache/stratos/messaging/listener/instance/notifier/InstanceCleanupEventListener.java
> b/components/org.apache.stratos.messaging/src/main/java/org/apache/stratos/messaging/listener/instance/notifier/InstanceCleanupEventListener.java
> deleted file mode 100644
> index ccc8dbc..0000000
> ---
> a/components/org.apache.stratos.messaging/src/main/java/org/apache/stratos/messaging/listener/instance/notifier/InstanceCleanupEventListener.java
> +++ /dev/null
> @@ -1,25 +0,0 @@
> -/*
> - * Licensed to the Apache Software Foundation (ASF) under one
> - * or more contributor license agreements.  See the NOTICE file
> - * distributed with this work for additional information
> - * regarding copyright ownership.  The ASF licenses this file
> - * to you under the Apache License, Version 2.0 (the
> - * "License"); you may not use this file except in compliance
> - * with the License.  You may obtain a copy of the License at
> - *
> - *    http://www.apache.org/licenses/LICENSE-2.0
> - *
> - * Unless required by applicable law or agreed to in writing,
> - * software distributed under the License is distributed on an
> - * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
> - * KIND, either express or implied.  See the License for the
> - * specific language governing permissions and limitations
> - * under the License.
> - */
> -package org.apache.stratos.messaging.listener.instance.notifier;
> -
> -import org.apache.stratos.messaging.listener.EventListener;
> -
> -public abstract class InstanceCleanupEventListener extends EventListener {
> -
> -}
> \ No newline at end of file
>
>
> http://git-wip-us.apache.org/repos/asf/incubator-stratos/blob/236a1b37/components/org.apache.stratos.messaging/src/main/java/org/apache/stratos/messaging/listener/instance/notifier/InstanceCleanupMemberEventListener.java
> ----------------------------------------------------------------------
> diff --git
> a/components/org.apache.stratos.messaging/src/main/java/org/apache/stratos/messaging/listener/instance/notifier/InstanceCleanupMemberEventListener.java
> b/components/org.apache.stratos.messaging/src/main/java/org/apache/stratos/messaging/listener/instance/notifier/InstanceCleanupMemberEventListener.java
> new file mode 100644
> index 0000000..ae64bbb
> --- /dev/null
> +++
> b/components/org.apache.stratos.messaging/src/main/java/org/apache/stratos/messaging/listener/instance/notifier/InstanceCleanupMemberEventListener.java
> @@ -0,0 +1,25 @@
> +/*
> + * Licensed to the Apache Software Foundation (ASF) under one
> + * or more contributor license agreements.  See the NOTICE file
> + * distributed with this work for additional information
> + * regarding copyright ownership.  The ASF licenses this file
> + * to you under the Apache License, Version 2.0 (the
> + * "License"); you may not use this file except in compliance
> + * with the License.  You may obtain a copy of the License at
> + *
> + *    http://www.apache.org/licenses/LICENSE-2.0
> + *
> + * Unless required by applicable law or agreed to in writing,
> + * software distributed under the License is distributed on an
> + * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
> + * KIND, either express or implied.  See the License for the
> + * specific language governing permissions and limitations
> + * under the License.
> + */
> +package org.apache.stratos.messaging.listener.instance.notifier;
> +
> +import org.apache.stratos.messaging.listener.EventListener;
> +
> +public abstract class InstanceCleanupMemberEventListener extends
> EventListener {
> +
> +}
> \ No newline at end of file
>
>
> http://git-wip-us.apache.org/repos/asf/incubator-stratos/blob/236a1b37/components/org.apache.stratos.messaging/src/main/java/org/apache/stratos/messaging/message/processor/instance/notifier/InstanceNotifierMessageProcessorChain.java
> ----------------------------------------------------------------------
> diff --git
> a/components/org.apache.stratos.messaging/src/main/java/org/apache/stratos/messaging/message/processor/instance/notifier/InstanceNotifierMessageProcessorChain.java
> b/components/org.apache.stratos.messaging/src/main/java/org/apache/stratos/messaging/message/processor/instance/notifier/InstanceNotifierMessageProcessorChain.java
> index 235c749..b844d2d 100644
> ---
> a/components/org.apache.stratos.messaging/src/main/java/org/apache/stratos/messaging/message/processor/instance/notifier/InstanceNotifierMessageProcessorChain.java
> +++
> b/components/org.apache.stratos.messaging/src/main/java/org/apache/stratos/messaging/message/processor/instance/notifier/InstanceNotifierMessageProcessorChain.java
> @@ -23,7 +23,7 @@ import org.apache.commons.logging.Log;
>  import org.apache.commons.logging.LogFactory;
>  import org.apache.stratos.messaging.listener.EventListener;
>  import
> org.apache.stratos.messaging.listener.instance.notifier.ArtifactUpdateEventListener;
> -import
> org.apache.stratos.messaging.listener.instance.notifier.InstanceCleanupEventListener;
> +import
> org.apache.stratos.messaging.listener.instance.notifier.InstanceCleanupMemberEventListener;
>  import
> org.apache.stratos.messaging.message.processor.MessageProcessorChain;
>
>  /**
> @@ -50,7 +50,7 @@ public class InstanceNotifierMessageProcessorChain
> extends MessageProcessorChain
>      public void addEventListener(EventListener eventListener) {
>          if (eventListener instanceof ArtifactUpdateEventListener) {
>
>  artifactUpdateMessageProcessor.addEventListener(eventListener);
> -        } else if (eventListener instanceof InstanceCleanupEventListener)
> {
> +        } else if (eventListener instanceof
> InstanceCleanupMemberEventListener) {
>
>  artifactUpdateMessageProcessor.addEventListener(eventListener);
>          } else {
>              throw new RuntimeException("Unknown event listener");
>
>
> http://git-wip-us.apache.org/repos/asf/incubator-stratos/blob/236a1b37/products/autoscaler/modules/distribution/src/main/conf/mincheck.drl
> ----------------------------------------------------------------------
> diff --git
> a/products/autoscaler/modules/distribution/src/main/conf/mincheck.drl
> b/products/autoscaler/modules/distribution/src/main/conf/mincheck.drl
> index b7bf7e0..2c04459 100755
> --- a/products/autoscaler/modules/distribution/src/main/conf/mincheck.drl
> +++ b/products/autoscaler/modules/distribution/src/main/conf/mincheck.drl
> @@ -74,6 +74,6 @@ dialect "mvel"
>              eval(log.debug("[obsolete-check] [network-partition] " +
> $ctxt.getNetworkPartitionId() + " [partition] " + $ctxt.getPartitionId() +
> " Member id: " + memberId))
>              eval($ctxt.removeObsoleteMember(memberId))
>          then
> -           $delegator.delegateTerminate(memberId);
> +           $delegator.terminateObsoleteInstance(memberId);
>  end
>
>
>


-- 
*Sajith Kariyawasam*
*Senior Software Engineer; WSO2, Inc.*
*AMIE (SL)*
*Blog: http://sajithblogs.blogspot.com/ <http://sajithblogs.blogspot.com/>*
*Mobile: +94772269575*

Re: git commit: updating cartridge agent and rules file with the modified method

Posted by Reka Thirunavukkarasu <re...@wso2.com>.
Hi


On Mon, Jan 13, 2014 at 6:44 PM, Imesh Gunaratne <im...@apache.org> wrote:

> Hi Sajith,
>
> A good point! I think we could re-factor this logic:
>
> *Current implementation:*
> public void addEventListener(EventListener eventListener) {
>         if (eventListener instanceof ArtifactUpdateEventListener) {
>             artifactUpdateMessageProcessor.addEventListener(eventListener);
>         } else if (eventListener instanceof InstanceCleanupEventListener) {
>             artifactUpdateMessageProcessor.addEventListener(eventListener);
>         } else {
>             throw new RuntimeException("Unknown event listener");
>         }
>     }
>
> *Proposed implementation:*
> public void addEventListener(InstanceNotifierEventListener eventListener) {
>         artifactUpdateMessageProcessor.addEventListener(eventListener);
> }
>
> Here we could implement a super type for instance notifier event listeners
> and accept only that type in addEventListener() method. WDYT?
>

Since i have introduced other notifier type events, i have added the
relevant listeners and updated the processors accordingly. Please find the
fix in bf9d67c8a42b4a5eb9d4709c63037c7415970c50.

Thanks,
Reka

>
> Thanks
> Imesh
>
>
>
> On Sat, Jan 11, 2014 at 3:15 PM, Sajith Kariyawasam <sa...@wso2.com>wrote:
>
>> Hi Devs,
>>
>>
>> On Fri, Jan 10, 2014 at 3:51 PM, <re...@apache.org> wrote:
>>
>>> Updated Branches:
>>>   refs/heads/master f937bb298 -> 236a1b375
>>>
>>>
>>> updating cartridge agent and rules file with the modified method
>>>
>>>
>>> Project: http://git-wip-us.apache.org/repos/asf/incubator-stratos/repo
>>> Commit:
>>> http://git-wip-us.apache.org/repos/asf/incubator-stratos/commit/236a1b37
>>> Tree:
>>> http://git-wip-us.apache.org/repos/asf/incubator-stratos/tree/236a1b37
>>> Diff:
>>> http://git-wip-us.apache.org/repos/asf/incubator-stratos/diff/236a1b37
>>>
>>> Branch: refs/heads/master
>>> Commit: 236a1b3755404559d1bd864a84fd5e93b9d35212
>>> Parents: f937bb2
>>> Author: rekathiru <rt...@gmail.com>
>>> Authored: Fri Jan 10 15:50:41 2014 +0530
>>> Committer: rekathiru <rt...@gmail.com>
>>> Committed: Fri Jan 10 15:50:41 2014 +0530
>>>
>>> ----------------------------------------------------------------------
>>>  .../stratos/cartridge/agent/CartridgeAgent.java | 49
>>> +++++++++++++-------
>>>  .../agent/util/CartridgeAgentConstants.java     |  1 +
>>>  .../cartridge/agent/util/ExtensionUtils.java    | 13 ++++++
>>>  .../InstanceCleanupClusterEventListener.java    | 24 ++++++++++
>>>  .../notifier/InstanceCleanupEventListener.java  | 25 ----------
>>>  .../InstanceCleanupMemberEventListener.java     | 25 ++++++++++
>>>  .../InstanceNotifierMessageProcessorChain.java  |  4 +-
>>>  .../distribution/src/main/conf/mincheck.drl     |  2 +-
>>>  8 files changed, 99 insertions(+), 44 deletions(-)
>>> ----------------------------------------------------------------------
>>>
>>>
>>>
>>> http://git-wip-us.apache.org/repos/asf/incubator-stratos/blob/236a1b37/components/org.apache.stratos.cartridge.agent/src/main/java/org/apache/stratos/cartridge/agent/CartridgeAgent.java
>>> ----------------------------------------------------------------------
>>> diff --git
>>> a/components/org.apache.stratos.cartridge.agent/src/main/java/org/apache/stratos/cartridge/agent/CartridgeAgent.java
>>> b/components/org.apache.stratos.cartridge.agent/src/main/java/org/apache/stratos/cartridge/agent/CartridgeAgent.java
>>> index 3344282..c4fe290 100644
>>> ---
>>> a/components/org.apache.stratos.cartridge.agent/src/main/java/org/apache/stratos/cartridge/agent/CartridgeAgent.java
>>> +++
>>> b/components/org.apache.stratos.cartridge.agent/src/main/java/org/apache/stratos/cartridge/agent/CartridgeAgent.java
>>> @@ -12,9 +12,11 @@ import
>>> org.apache.stratos.cartridge.agent.util.CartridgeAgentUtils;
>>>  import org.apache.stratos.cartridge.agent.util.ExtensionUtils;
>>>  import org.apache.stratos.messaging.event.Event;
>>>  import
>>> org.apache.stratos.messaging.event.instance.notifier.ArtifactUpdatedEvent;
>>> +import
>>> org.apache.stratos.messaging.event.instance.notifier.InstanceCleanupClusterEvent;
>>>  import
>>> org.apache.stratos.messaging.event.instance.notifier.InstanceCleanupMemberEvent;
>>>  import
>>> org.apache.stratos.messaging.listener.instance.notifier.ArtifactUpdateEventListener;
>>> -import
>>> org.apache.stratos.messaging.listener.instance.notifier.InstanceCleanupEventListener;
>>> +import
>>> org.apache.stratos.messaging.listener.instance.notifier.InstanceCleanupClusterEventListener;
>>> +import
>>> org.apache.stratos.messaging.listener.instance.notifier.InstanceCleanupMemberEventListener;
>>>  import
>>> org.apache.stratos.messaging.message.processor.instance.notifier.InstanceNotifierMessageProcessorChain;
>>>  import
>>> org.apache.stratos.messaging.message.receiver.instance.notifier.InstanceNotifierEventMessageDelegator;
>>>  import
>>> org.apache.stratos.messaging.message.receiver.instance.notifier.InstanceNotifierEventMessageReceiver;
>>> @@ -69,10 +71,25 @@ public class CartridgeAgent implements Runnable {
>>>              }
>>>          });
>>>
>>> -        processorChain.addEventListener(new
>>> InstanceCleanupEventListener() {
>>> +        processorChain.addEventListener(new
>>> InstanceCleanupMemberEventListener() {
>>>              @Override
>>>              protected void onEvent(Event event) {
>>> -               onInstanceCleanupEvent((InstanceCleanupMemberEvent)
>>> event);
>>> +                String memberIdInPayload =
>>> CartridgeAgentConfiguration.getInstance().getClusterId();
>>> +                InstanceCleanupMemberEvent instanceCleanupMemberEvent =
>>> (InstanceCleanupMemberEvent)event;
>>> +
>>>  if(memberIdInPayload.equals(instanceCleanupMemberEvent.getMemberId())) {
>>> +                    onInstanceCleanupEvent();
>>> +                }
>>> +            }
>>> +        });
>>> +
>>> +        processorChain.addEventListener(new
>>> InstanceCleanupClusterEventListener() {
>>> +            @Override
>>> +            protected void onEvent(Event event) {
>>> +                String clusterIdInPayload =
>>> CartridgeAgentConfiguration.getInstance().getClusterId();
>>> +                InstanceCleanupClusterEvent instanceCleanupClusterEvent
>>> = (InstanceCleanupClusterEvent)event;
>>> +
>>>  if(clusterIdInPayload.equals(instanceCleanupClusterEvent.getClusterId())) {
>>> +                    onInstanceCleanupEvent();
>>> +                }
>>>              }
>>>          });
>>>          InstanceNotifierEventMessageDelegator messageDelegator = new
>>> InstanceNotifierEventMessageDelegator(processorChain);
>>> @@ -154,20 +171,20 @@ public class CartridgeAgent implements Runnable {
>>>          }
>>>      }
>>>
>>
>>
>> In CartridgeAgent I'm getting following exception,
>>
>> *Exception in thread "Thread-0" java.lang.RuntimeException: Unknown event
>> listener*
>> * at
>> org.apache.stratos.messaging.message.processor.instance.notifier.InstanceNotifierMessageProcessorChain.addEventListener(InstanceNotifierMessageProcessorChain.java:56)*
>> * at
>> org.apache.stratos.cartridge.agent.CartridgeAgent.run(CartridgeAgent.java:85)*
>> * at java.lang.Thread.run(Thread.java:722)*
>>
>> Reason seems to be that in InstanceNotifierMessageProcessorChain,
>> eventListener was not expected to be a
>> "InstanceCleanupClusterEventListener".
>>
>> Is adding an instance of check for InstanceCleanupClusterEventListener
>> the correct way to fix it?
>>
>>
>>
>>>
>>> -    private void onInstanceCleanupEvent(InstanceCleanupMemberEvent
>>> event) {
>>> -        InstanceCleanupMemberEvent instanceCleanupEvent =
>>> (InstanceCleanupMemberEvent)event;
>>> -        String memberIdInPayload =
>>> CartridgeAgentConfiguration.getInstance().getMemberId();
>>> -        String memberId = instanceCleanupEvent.getMemberId();
>>> -        if(memberId != null && memberId.equals(memberIdInPayload)) {
>>> -            if(log.isInfoEnabled()) {
>>> -                log.info("Executing cleaning up the data in the
>>> cartridge instance...");
>>> -            }
>>> -            // TODO
>>> -            //cleaning up the cartridge instance's data
>>> -
>>> -            //publishing the Ready to shutdown event after performing
>>> the cleanup
>>> -
>>>  CartridgeAgentEventPublisher.publishInstanceReadyToShutdownEvent();
>>> +    private void onInstanceCleanupEvent() {
>>> +        if(log.isInfoEnabled()) {
>>> +            log.info("Executing cleaning up the data in the cartridge
>>> instance...");
>>> +        }
>>> +        //cleaning up the cartridge instance's data
>>> +        ExtensionUtils.executeCleanupExtension();
>>> +        if(log.isInfoEnabled()) {
>>> +            log.info("cleaning up finished in the cartridge
>>> instance...");
>>> +        }
>>> +        if(log.isInfoEnabled()) {
>>> +            log.info("publishing ready to shutdown event...");
>>>          }
>>> +        //publishing the Ready to shutdown event after performing the
>>> cleanup
>>> +
>>>  CartridgeAgentEventPublisher.publishInstanceReadyToShutdownEvent();
>>>      }
>>>
>>>      public void terminate() {
>>>
>>>
>>> http://git-wip-us.apache.org/repos/asf/incubator-stratos/blob/236a1b37/components/org.apache.stratos.cartridge.agent/src/main/java/org/apache/stratos/cartridge/agent/util/CartridgeAgentConstants.java
>>> ----------------------------------------------------------------------
>>> diff --git
>>> a/components/org.apache.stratos.cartridge.agent/src/main/java/org/apache/stratos/cartridge/agent/util/CartridgeAgentConstants.java
>>> b/components/org.apache.stratos.cartridge.agent/src/main/java/org/apache/stratos/cartridge/agent/util/CartridgeAgentConstants.java
>>> index dc24f28..65a7594 100644
>>> ---
>>> a/components/org.apache.stratos.cartridge.agent/src/main/java/org/apache/stratos/cartridge/agent/util/CartridgeAgentConstants.java
>>> +++
>>> b/components/org.apache.stratos.cartridge.agent/src/main/java/org/apache/stratos/cartridge/agent/util/CartridgeAgentConstants.java
>>> @@ -31,6 +31,7 @@ public class CartridgeAgentConstants implements
>>> Serializable{
>>>      public static final String START_SERVERS_SH = "start-servers.sh";
>>>      public static final String INSTANCE_ACTIVATED_SH =
>>> "instance-activated.sh";
>>>      public static final String ARTIFACTS_UPDATED_SH =
>>> "artifacts-updated.sh";
>>> +    public static final String CLEAN_UP_SH = "clean.sh";
>>>
>>>         public static final String CARTRIDGE_KEY = "CARTRIDGE_KEY";
>>>         public static final String APP_PATH = "APP_PATH";
>>>
>>>
>>> http://git-wip-us.apache.org/repos/asf/incubator-stratos/blob/236a1b37/components/org.apache.stratos.cartridge.agent/src/main/java/org/apache/stratos/cartridge/agent/util/ExtensionUtils.java
>>> ----------------------------------------------------------------------
>>> diff --git
>>> a/components/org.apache.stratos.cartridge.agent/src/main/java/org/apache/stratos/cartridge/agent/util/ExtensionUtils.java
>>> b/components/org.apache.stratos.cartridge.agent/src/main/java/org/apache/stratos/cartridge/agent/util/ExtensionUtils.java
>>> index 06b113f..e164022 100644
>>> ---
>>> a/components/org.apache.stratos.cartridge.agent/src/main/java/org/apache/stratos/cartridge/agent/util/ExtensionUtils.java
>>> +++
>>> b/components/org.apache.stratos.cartridge.agent/src/main/java/org/apache/stratos/cartridge/agent/util/ExtensionUtils.java
>>> @@ -60,6 +60,19 @@ public class ExtensionUtils {
>>>          }
>>>      }
>>>
>>> +    public static void executeCleanupExtension() {
>>> +        try {
>>> +            if(log.isDebugEnabled()) {
>>> +                log.debug("Executing start servers extension");
>>> +            }
>>> +            String command =
>>> prepareCommand(CartridgeAgentConstants.CLEAN_UP_SH);
>>> +            CommandUtils.executeCommand(command);
>>> +        }
>>> +        catch (Exception e) {
>>> +            log.error("Could not execute start servers extension", e);
>>> +        }
>>> +    }
>>> +
>>>      public static void executeInstanceStartedExtension() {
>>>          try {
>>>              if(log.isDebugEnabled()) {
>>>
>>>
>>> http://git-wip-us.apache.org/repos/asf/incubator-stratos/blob/236a1b37/components/org.apache.stratos.messaging/src/main/java/org/apache/stratos/messaging/listener/instance/notifier/InstanceCleanupClusterEventListener.java
>>> ----------------------------------------------------------------------
>>> diff --git
>>> a/components/org.apache.stratos.messaging/src/main/java/org/apache/stratos/messaging/listener/instance/notifier/InstanceCleanupClusterEventListener.java
>>> b/components/org.apache.stratos.messaging/src/main/java/org/apache/stratos/messaging/listener/instance/notifier/InstanceCleanupClusterEventListener.java
>>> new file mode 100644
>>> index 0000000..9423b17
>>> --- /dev/null
>>> +++
>>> b/components/org.apache.stratos.messaging/src/main/java/org/apache/stratos/messaging/listener/instance/notifier/InstanceCleanupClusterEventListener.java
>>> @@ -0,0 +1,24 @@
>>> +/*
>>> + * Licensed to the Apache Software Foundation (ASF) under one
>>> + * or more contributor license agreements.  See the NOTICE file
>>> + * distributed with this work for additional information
>>> + * regarding copyright ownership.  The ASF licenses this file
>>> + * to you under the Apache License, Version 2.0 (the
>>> + * "License"); you may not use this file except in compliance
>>> + * with the License.  You may obtain a copy of the License at
>>> + *
>>> + *    http://www.apache.org/licenses/LICENSE-2.0
>>> + *
>>> + * Unless required by applicable law or agreed to in writing,
>>> + * software distributed under the License is distributed on an
>>> + * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
>>> + * KIND, either express or implied.  See the License for the
>>> + * specific language governing permissions and limitations
>>> + * under the License.
>>> + */
>>> +package org.apache.stratos.messaging.listener.instance.notifier;
>>> +
>>> +import org.apache.stratos.messaging.listener.EventListener;
>>> +
>>> +public abstract class InstanceCleanupClusterEventListener extends
>>> EventListener {
>>> +}
>>>
>>>
>>> http://git-wip-us.apache.org/repos/asf/incubator-stratos/blob/236a1b37/components/org.apache.stratos.messaging/src/main/java/org/apache/stratos/messaging/listener/instance/notifier/InstanceCleanupEventListener.java
>>> ----------------------------------------------------------------------
>>> diff --git
>>> a/components/org.apache.stratos.messaging/src/main/java/org/apache/stratos/messaging/listener/instance/notifier/InstanceCleanupEventListener.java
>>> b/components/org.apache.stratos.messaging/src/main/java/org/apache/stratos/messaging/listener/instance/notifier/InstanceCleanupEventListener.java
>>> deleted file mode 100644
>>> index ccc8dbc..0000000
>>> ---
>>> a/components/org.apache.stratos.messaging/src/main/java/org/apache/stratos/messaging/listener/instance/notifier/InstanceCleanupEventListener.java
>>> +++ /dev/null
>>> @@ -1,25 +0,0 @@
>>> -/*
>>> - * Licensed to the Apache Software Foundation (ASF) under one
>>> - * or more contributor license agreements.  See the NOTICE file
>>> - * distributed with this work for additional information
>>> - * regarding copyright ownership.  The ASF licenses this file
>>> - * to you under the Apache License, Version 2.0 (the
>>> - * "License"); you may not use this file except in compliance
>>> - * with the License.  You may obtain a copy of the License at
>>> - *
>>> - *    http://www.apache.org/licenses/LICENSE-2.0
>>> - *
>>> - * Unless required by applicable law or agreed to in writing,
>>> - * software distributed under the License is distributed on an
>>> - * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
>>> - * KIND, either express or implied.  See the License for the
>>> - * specific language governing permissions and limitations
>>> - * under the License.
>>> - */
>>> -package org.apache.stratos.messaging.listener.instance.notifier;
>>> -
>>> -import org.apache.stratos.messaging.listener.EventListener;
>>> -
>>> -public abstract class InstanceCleanupEventListener extends
>>> EventListener {
>>> -
>>> -}
>>> \ No newline at end of file
>>>
>>>
>>> http://git-wip-us.apache.org/repos/asf/incubator-stratos/blob/236a1b37/components/org.apache.stratos.messaging/src/main/java/org/apache/stratos/messaging/listener/instance/notifier/InstanceCleanupMemberEventListener.java
>>> ----------------------------------------------------------------------
>>> diff --git
>>> a/components/org.apache.stratos.messaging/src/main/java/org/apache/stratos/messaging/listener/instance/notifier/InstanceCleanupMemberEventListener.java
>>> b/components/org.apache.stratos.messaging/src/main/java/org/apache/stratos/messaging/listener/instance/notifier/InstanceCleanupMemberEventListener.java
>>> new file mode 100644
>>> index 0000000..ae64bbb
>>> --- /dev/null
>>> +++
>>> b/components/org.apache.stratos.messaging/src/main/java/org/apache/stratos/messaging/listener/instance/notifier/InstanceCleanupMemberEventListener.java
>>> @@ -0,0 +1,25 @@
>>> +/*
>>> + * Licensed to the Apache Software Foundation (ASF) under one
>>> + * or more contributor license agreements.  See the NOTICE file
>>> + * distributed with this work for additional information
>>> + * regarding copyright ownership.  The ASF licenses this file
>>> + * to you under the Apache License, Version 2.0 (the
>>> + * "License"); you may not use this file except in compliance
>>> + * with the License.  You may obtain a copy of the License at
>>> + *
>>> + *    http://www.apache.org/licenses/LICENSE-2.0
>>> + *
>>> + * Unless required by applicable law or agreed to in writing,
>>> + * software distributed under the License is distributed on an
>>> + * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
>>> + * KIND, either express or implied.  See the License for the
>>> + * specific language governing permissions and limitations
>>> + * under the License.
>>> + */
>>> +package org.apache.stratos.messaging.listener.instance.notifier;
>>> +
>>> +import org.apache.stratos.messaging.listener.EventListener;
>>> +
>>> +public abstract class InstanceCleanupMemberEventListener extends
>>> EventListener {
>>> +
>>> +}
>>> \ No newline at end of file
>>>
>>>
>>> http://git-wip-us.apache.org/repos/asf/incubator-stratos/blob/236a1b37/components/org.apache.stratos.messaging/src/main/java/org/apache/stratos/messaging/message/processor/instance/notifier/InstanceNotifierMessageProcessorChain.java
>>> ----------------------------------------------------------------------
>>> diff --git
>>> a/components/org.apache.stratos.messaging/src/main/java/org/apache/stratos/messaging/message/processor/instance/notifier/InstanceNotifierMessageProcessorChain.java
>>> b/components/org.apache.stratos.messaging/src/main/java/org/apache/stratos/messaging/message/processor/instance/notifier/InstanceNotifierMessageProcessorChain.java
>>> index 235c749..b844d2d 100644
>>> ---
>>> a/components/org.apache.stratos.messaging/src/main/java/org/apache/stratos/messaging/message/processor/instance/notifier/InstanceNotifierMessageProcessorChain.java
>>> +++
>>> b/components/org.apache.stratos.messaging/src/main/java/org/apache/stratos/messaging/message/processor/instance/notifier/InstanceNotifierMessageProcessorChain.java
>>> @@ -23,7 +23,7 @@ import org.apache.commons.logging.Log;
>>>  import org.apache.commons.logging.LogFactory;
>>>  import org.apache.stratos.messaging.listener.EventListener;
>>>  import
>>> org.apache.stratos.messaging.listener.instance.notifier.ArtifactUpdateEventListener;
>>> -import
>>> org.apache.stratos.messaging.listener.instance.notifier.InstanceCleanupEventListener;
>>> +import
>>> org.apache.stratos.messaging.listener.instance.notifier.InstanceCleanupMemberEventListener;
>>>  import
>>> org.apache.stratos.messaging.message.processor.MessageProcessorChain;
>>>
>>>  /**
>>> @@ -50,7 +50,7 @@ public class InstanceNotifierMessageProcessorChain
>>> extends MessageProcessorChain
>>>      public void addEventListener(EventListener eventListener) {
>>>          if (eventListener instanceof ArtifactUpdateEventListener) {
>>>
>>>  artifactUpdateMessageProcessor.addEventListener(eventListener);
>>> -        } else if (eventListener instanceof
>>> InstanceCleanupEventListener) {
>>> +        } else if (eventListener instanceof
>>> InstanceCleanupMemberEventListener) {
>>>
>>>  artifactUpdateMessageProcessor.addEventListener(eventListener);
>>>          } else {
>>>              throw new RuntimeException("Unknown event listener");
>>>
>>>
>>> http://git-wip-us.apache.org/repos/asf/incubator-stratos/blob/236a1b37/products/autoscaler/modules/distribution/src/main/conf/mincheck.drl
>>> ----------------------------------------------------------------------
>>> diff --git
>>> a/products/autoscaler/modules/distribution/src/main/conf/mincheck.drl
>>> b/products/autoscaler/modules/distribution/src/main/conf/mincheck.drl
>>> index b7bf7e0..2c04459 100755
>>> --- a/products/autoscaler/modules/distribution/src/main/conf/mincheck.drl
>>> +++ b/products/autoscaler/modules/distribution/src/main/conf/mincheck.drl
>>> @@ -74,6 +74,6 @@ dialect "mvel"
>>>              eval(log.debug("[obsolete-check] [network-partition] " +
>>> $ctxt.getNetworkPartitionId() + " [partition] " + $ctxt.getPartitionId() +
>>> " Member id: " + memberId))
>>>              eval($ctxt.removeObsoleteMember(memberId))
>>>          then
>>> -           $delegator.delegateTerminate(memberId);
>>> +           $delegator.terminateObsoleteInstance(memberId);
>>>  end
>>>
>>>
>>>
>>
>>
>> --
>> *Sajith Kariyawasam*
>> *Senior Software Engineer; WSO2, Inc.*
>> *AMIE (SL)*
>> *Blog: http://sajithblogs.blogspot.com/
>> <http://sajithblogs.blogspot.com/>*
>> *Mobile: +94772269575 <%2B94772269575>*
>>
>
>


-- 
Reka Thirunavukkarasu
Software Engineer,
WSO2, Inc.:http://wso2.com,
Mobile: +94776442007

Re: git commit: updating cartridge agent and rules file with the modified method

Posted by Imesh Gunaratne <im...@apache.org>.
Hi Sajith,

A good point! I think we could re-factor this logic:

*Current implementation:*
public void addEventListener(EventListener eventListener) {
        if (eventListener instanceof ArtifactUpdateEventListener) {
            artifactUpdateMessageProcessor.addEventListener(eventListener);
        } else if (eventListener instanceof InstanceCleanupEventListener) {
            artifactUpdateMessageProcessor.addEventListener(eventListener);
        } else {
            throw new RuntimeException("Unknown event listener");
        }
    }

*Proposed implementation:*
public void addEventListener(InstanceNotifierEventListener eventListener) {
        artifactUpdateMessageProcessor.addEventListener(eventListener);
}

Here we could implement a super type for instance notifier event listeners
and accept only that type in addEventListener() method. WDYT?

Thanks
Imesh



On Sat, Jan 11, 2014 at 3:15 PM, Sajith Kariyawasam <sa...@wso2.com> wrote:

> Hi Devs,
>
>
> On Fri, Jan 10, 2014 at 3:51 PM, <re...@apache.org> wrote:
>
>> Updated Branches:
>>   refs/heads/master f937bb298 -> 236a1b375
>>
>>
>> updating cartridge agent and rules file with the modified method
>>
>>
>> Project: http://git-wip-us.apache.org/repos/asf/incubator-stratos/repo
>> Commit:
>> http://git-wip-us.apache.org/repos/asf/incubator-stratos/commit/236a1b37
>> Tree:
>> http://git-wip-us.apache.org/repos/asf/incubator-stratos/tree/236a1b37
>> Diff:
>> http://git-wip-us.apache.org/repos/asf/incubator-stratos/diff/236a1b37
>>
>> Branch: refs/heads/master
>> Commit: 236a1b3755404559d1bd864a84fd5e93b9d35212
>> Parents: f937bb2
>> Author: rekathiru <rt...@gmail.com>
>> Authored: Fri Jan 10 15:50:41 2014 +0530
>> Committer: rekathiru <rt...@gmail.com>
>> Committed: Fri Jan 10 15:50:41 2014 +0530
>>
>> ----------------------------------------------------------------------
>>  .../stratos/cartridge/agent/CartridgeAgent.java | 49 +++++++++++++-------
>>  .../agent/util/CartridgeAgentConstants.java     |  1 +
>>  .../cartridge/agent/util/ExtensionUtils.java    | 13 ++++++
>>  .../InstanceCleanupClusterEventListener.java    | 24 ++++++++++
>>  .../notifier/InstanceCleanupEventListener.java  | 25 ----------
>>  .../InstanceCleanupMemberEventListener.java     | 25 ++++++++++
>>  .../InstanceNotifierMessageProcessorChain.java  |  4 +-
>>  .../distribution/src/main/conf/mincheck.drl     |  2 +-
>>  8 files changed, 99 insertions(+), 44 deletions(-)
>> ----------------------------------------------------------------------
>>
>>
>>
>> http://git-wip-us.apache.org/repos/asf/incubator-stratos/blob/236a1b37/components/org.apache.stratos.cartridge.agent/src/main/java/org/apache/stratos/cartridge/agent/CartridgeAgent.java
>> ----------------------------------------------------------------------
>> diff --git
>> a/components/org.apache.stratos.cartridge.agent/src/main/java/org/apache/stratos/cartridge/agent/CartridgeAgent.java
>> b/components/org.apache.stratos.cartridge.agent/src/main/java/org/apache/stratos/cartridge/agent/CartridgeAgent.java
>> index 3344282..c4fe290 100644
>> ---
>> a/components/org.apache.stratos.cartridge.agent/src/main/java/org/apache/stratos/cartridge/agent/CartridgeAgent.java
>> +++
>> b/components/org.apache.stratos.cartridge.agent/src/main/java/org/apache/stratos/cartridge/agent/CartridgeAgent.java
>> @@ -12,9 +12,11 @@ import
>> org.apache.stratos.cartridge.agent.util.CartridgeAgentUtils;
>>  import org.apache.stratos.cartridge.agent.util.ExtensionUtils;
>>  import org.apache.stratos.messaging.event.Event;
>>  import
>> org.apache.stratos.messaging.event.instance.notifier.ArtifactUpdatedEvent;
>> +import
>> org.apache.stratos.messaging.event.instance.notifier.InstanceCleanupClusterEvent;
>>  import
>> org.apache.stratos.messaging.event.instance.notifier.InstanceCleanupMemberEvent;
>>  import
>> org.apache.stratos.messaging.listener.instance.notifier.ArtifactUpdateEventListener;
>> -import
>> org.apache.stratos.messaging.listener.instance.notifier.InstanceCleanupEventListener;
>> +import
>> org.apache.stratos.messaging.listener.instance.notifier.InstanceCleanupClusterEventListener;
>> +import
>> org.apache.stratos.messaging.listener.instance.notifier.InstanceCleanupMemberEventListener;
>>  import
>> org.apache.stratos.messaging.message.processor.instance.notifier.InstanceNotifierMessageProcessorChain;
>>  import
>> org.apache.stratos.messaging.message.receiver.instance.notifier.InstanceNotifierEventMessageDelegator;
>>  import
>> org.apache.stratos.messaging.message.receiver.instance.notifier.InstanceNotifierEventMessageReceiver;
>> @@ -69,10 +71,25 @@ public class CartridgeAgent implements Runnable {
>>              }
>>          });
>>
>> -        processorChain.addEventListener(new
>> InstanceCleanupEventListener() {
>> +        processorChain.addEventListener(new
>> InstanceCleanupMemberEventListener() {
>>              @Override
>>              protected void onEvent(Event event) {
>> -               onInstanceCleanupEvent((InstanceCleanupMemberEvent)
>> event);
>> +                String memberIdInPayload =
>> CartridgeAgentConfiguration.getInstance().getClusterId();
>> +                InstanceCleanupMemberEvent instanceCleanupMemberEvent =
>> (InstanceCleanupMemberEvent)event;
>> +
>>  if(memberIdInPayload.equals(instanceCleanupMemberEvent.getMemberId())) {
>> +                    onInstanceCleanupEvent();
>> +                }
>> +            }
>> +        });
>> +
>> +        processorChain.addEventListener(new
>> InstanceCleanupClusterEventListener() {
>> +            @Override
>> +            protected void onEvent(Event event) {
>> +                String clusterIdInPayload =
>> CartridgeAgentConfiguration.getInstance().getClusterId();
>> +                InstanceCleanupClusterEvent instanceCleanupClusterEvent
>> = (InstanceCleanupClusterEvent)event;
>> +
>>  if(clusterIdInPayload.equals(instanceCleanupClusterEvent.getClusterId())) {
>> +                    onInstanceCleanupEvent();
>> +                }
>>              }
>>          });
>>          InstanceNotifierEventMessageDelegator messageDelegator = new
>> InstanceNotifierEventMessageDelegator(processorChain);
>> @@ -154,20 +171,20 @@ public class CartridgeAgent implements Runnable {
>>          }
>>      }
>>
>
>
> In CartridgeAgent I'm getting following exception,
>
> *Exception in thread "Thread-0" java.lang.RuntimeException: Unknown event
> listener*
> * at
> org.apache.stratos.messaging.message.processor.instance.notifier.InstanceNotifierMessageProcessorChain.addEventListener(InstanceNotifierMessageProcessorChain.java:56)*
> * at
> org.apache.stratos.cartridge.agent.CartridgeAgent.run(CartridgeAgent.java:85)*
> * at java.lang.Thread.run(Thread.java:722)*
>
> Reason seems to be that in InstanceNotifierMessageProcessorChain,
> eventListener was not expected to be a
> "InstanceCleanupClusterEventListener".
>
> Is adding an instance of check for InstanceCleanupClusterEventListener the
> correct way to fix it?
>
>
>
>>
>> -    private void onInstanceCleanupEvent(InstanceCleanupMemberEvent
>> event) {
>> -        InstanceCleanupMemberEvent instanceCleanupEvent =
>> (InstanceCleanupMemberEvent)event;
>> -        String memberIdInPayload =
>> CartridgeAgentConfiguration.getInstance().getMemberId();
>> -        String memberId = instanceCleanupEvent.getMemberId();
>> -        if(memberId != null && memberId.equals(memberIdInPayload)) {
>> -            if(log.isInfoEnabled()) {
>> -                log.info("Executing cleaning up the data in the
>> cartridge instance...");
>> -            }
>> -            // TODO
>> -            //cleaning up the cartridge instance's data
>> -
>> -            //publishing the Ready to shutdown event after performing
>> the cleanup
>> -
>>  CartridgeAgentEventPublisher.publishInstanceReadyToShutdownEvent();
>> +    private void onInstanceCleanupEvent() {
>> +        if(log.isInfoEnabled()) {
>> +            log.info("Executing cleaning up the data in the cartridge
>> instance...");
>> +        }
>> +        //cleaning up the cartridge instance's data
>> +        ExtensionUtils.executeCleanupExtension();
>> +        if(log.isInfoEnabled()) {
>> +            log.info("cleaning up finished in the cartridge
>> instance...");
>> +        }
>> +        if(log.isInfoEnabled()) {
>> +            log.info("publishing ready to shutdown event...");
>>          }
>> +        //publishing the Ready to shutdown event after performing the
>> cleanup
>> +
>>  CartridgeAgentEventPublisher.publishInstanceReadyToShutdownEvent();
>>      }
>>
>>      public void terminate() {
>>
>>
>> http://git-wip-us.apache.org/repos/asf/incubator-stratos/blob/236a1b37/components/org.apache.stratos.cartridge.agent/src/main/java/org/apache/stratos/cartridge/agent/util/CartridgeAgentConstants.java
>> ----------------------------------------------------------------------
>> diff --git
>> a/components/org.apache.stratos.cartridge.agent/src/main/java/org/apache/stratos/cartridge/agent/util/CartridgeAgentConstants.java
>> b/components/org.apache.stratos.cartridge.agent/src/main/java/org/apache/stratos/cartridge/agent/util/CartridgeAgentConstants.java
>> index dc24f28..65a7594 100644
>> ---
>> a/components/org.apache.stratos.cartridge.agent/src/main/java/org/apache/stratos/cartridge/agent/util/CartridgeAgentConstants.java
>> +++
>> b/components/org.apache.stratos.cartridge.agent/src/main/java/org/apache/stratos/cartridge/agent/util/CartridgeAgentConstants.java
>> @@ -31,6 +31,7 @@ public class CartridgeAgentConstants implements
>> Serializable{
>>      public static final String START_SERVERS_SH = "start-servers.sh";
>>      public static final String INSTANCE_ACTIVATED_SH =
>> "instance-activated.sh";
>>      public static final String ARTIFACTS_UPDATED_SH =
>> "artifacts-updated.sh";
>> +    public static final String CLEAN_UP_SH = "clean.sh";
>>
>>         public static final String CARTRIDGE_KEY = "CARTRIDGE_KEY";
>>         public static final String APP_PATH = "APP_PATH";
>>
>>
>> http://git-wip-us.apache.org/repos/asf/incubator-stratos/blob/236a1b37/components/org.apache.stratos.cartridge.agent/src/main/java/org/apache/stratos/cartridge/agent/util/ExtensionUtils.java
>> ----------------------------------------------------------------------
>> diff --git
>> a/components/org.apache.stratos.cartridge.agent/src/main/java/org/apache/stratos/cartridge/agent/util/ExtensionUtils.java
>> b/components/org.apache.stratos.cartridge.agent/src/main/java/org/apache/stratos/cartridge/agent/util/ExtensionUtils.java
>> index 06b113f..e164022 100644
>> ---
>> a/components/org.apache.stratos.cartridge.agent/src/main/java/org/apache/stratos/cartridge/agent/util/ExtensionUtils.java
>> +++
>> b/components/org.apache.stratos.cartridge.agent/src/main/java/org/apache/stratos/cartridge/agent/util/ExtensionUtils.java
>> @@ -60,6 +60,19 @@ public class ExtensionUtils {
>>          }
>>      }
>>
>> +    public static void executeCleanupExtension() {
>> +        try {
>> +            if(log.isDebugEnabled()) {
>> +                log.debug("Executing start servers extension");
>> +            }
>> +            String command =
>> prepareCommand(CartridgeAgentConstants.CLEAN_UP_SH);
>> +            CommandUtils.executeCommand(command);
>> +        }
>> +        catch (Exception e) {
>> +            log.error("Could not execute start servers extension", e);
>> +        }
>> +    }
>> +
>>      public static void executeInstanceStartedExtension() {
>>          try {
>>              if(log.isDebugEnabled()) {
>>
>>
>> http://git-wip-us.apache.org/repos/asf/incubator-stratos/blob/236a1b37/components/org.apache.stratos.messaging/src/main/java/org/apache/stratos/messaging/listener/instance/notifier/InstanceCleanupClusterEventListener.java
>> ----------------------------------------------------------------------
>> diff --git
>> a/components/org.apache.stratos.messaging/src/main/java/org/apache/stratos/messaging/listener/instance/notifier/InstanceCleanupClusterEventListener.java
>> b/components/org.apache.stratos.messaging/src/main/java/org/apache/stratos/messaging/listener/instance/notifier/InstanceCleanupClusterEventListener.java
>> new file mode 100644
>> index 0000000..9423b17
>> --- /dev/null
>> +++
>> b/components/org.apache.stratos.messaging/src/main/java/org/apache/stratos/messaging/listener/instance/notifier/InstanceCleanupClusterEventListener.java
>> @@ -0,0 +1,24 @@
>> +/*
>> + * Licensed to the Apache Software Foundation (ASF) under one
>> + * or more contributor license agreements.  See the NOTICE file
>> + * distributed with this work for additional information
>> + * regarding copyright ownership.  The ASF licenses this file
>> + * to you under the Apache License, Version 2.0 (the
>> + * "License"); you may not use this file except in compliance
>> + * with the License.  You may obtain a copy of the License at
>> + *
>> + *    http://www.apache.org/licenses/LICENSE-2.0
>> + *
>> + * Unless required by applicable law or agreed to in writing,
>> + * software distributed under the License is distributed on an
>> + * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
>> + * KIND, either express or implied.  See the License for the
>> + * specific language governing permissions and limitations
>> + * under the License.
>> + */
>> +package org.apache.stratos.messaging.listener.instance.notifier;
>> +
>> +import org.apache.stratos.messaging.listener.EventListener;
>> +
>> +public abstract class InstanceCleanupClusterEventListener extends
>> EventListener {
>> +}
>>
>>
>> http://git-wip-us.apache.org/repos/asf/incubator-stratos/blob/236a1b37/components/org.apache.stratos.messaging/src/main/java/org/apache/stratos/messaging/listener/instance/notifier/InstanceCleanupEventListener.java
>> ----------------------------------------------------------------------
>> diff --git
>> a/components/org.apache.stratos.messaging/src/main/java/org/apache/stratos/messaging/listener/instance/notifier/InstanceCleanupEventListener.java
>> b/components/org.apache.stratos.messaging/src/main/java/org/apache/stratos/messaging/listener/instance/notifier/InstanceCleanupEventListener.java
>> deleted file mode 100644
>> index ccc8dbc..0000000
>> ---
>> a/components/org.apache.stratos.messaging/src/main/java/org/apache/stratos/messaging/listener/instance/notifier/InstanceCleanupEventListener.java
>> +++ /dev/null
>> @@ -1,25 +0,0 @@
>> -/*
>> - * Licensed to the Apache Software Foundation (ASF) under one
>> - * or more contributor license agreements.  See the NOTICE file
>> - * distributed with this work for additional information
>> - * regarding copyright ownership.  The ASF licenses this file
>> - * to you under the Apache License, Version 2.0 (the
>> - * "License"); you may not use this file except in compliance
>> - * with the License.  You may obtain a copy of the License at
>> - *
>> - *    http://www.apache.org/licenses/LICENSE-2.0
>> - *
>> - * Unless required by applicable law or agreed to in writing,
>> - * software distributed under the License is distributed on an
>> - * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
>> - * KIND, either express or implied.  See the License for the
>> - * specific language governing permissions and limitations
>> - * under the License.
>> - */
>> -package org.apache.stratos.messaging.listener.instance.notifier;
>> -
>> -import org.apache.stratos.messaging.listener.EventListener;
>> -
>> -public abstract class InstanceCleanupEventListener extends EventListener
>> {
>> -
>> -}
>> \ No newline at end of file
>>
>>
>> http://git-wip-us.apache.org/repos/asf/incubator-stratos/blob/236a1b37/components/org.apache.stratos.messaging/src/main/java/org/apache/stratos/messaging/listener/instance/notifier/InstanceCleanupMemberEventListener.java
>> ----------------------------------------------------------------------
>> diff --git
>> a/components/org.apache.stratos.messaging/src/main/java/org/apache/stratos/messaging/listener/instance/notifier/InstanceCleanupMemberEventListener.java
>> b/components/org.apache.stratos.messaging/src/main/java/org/apache/stratos/messaging/listener/instance/notifier/InstanceCleanupMemberEventListener.java
>> new file mode 100644
>> index 0000000..ae64bbb
>> --- /dev/null
>> +++
>> b/components/org.apache.stratos.messaging/src/main/java/org/apache/stratos/messaging/listener/instance/notifier/InstanceCleanupMemberEventListener.java
>> @@ -0,0 +1,25 @@
>> +/*
>> + * Licensed to the Apache Software Foundation (ASF) under one
>> + * or more contributor license agreements.  See the NOTICE file
>> + * distributed with this work for additional information
>> + * regarding copyright ownership.  The ASF licenses this file
>> + * to you under the Apache License, Version 2.0 (the
>> + * "License"); you may not use this file except in compliance
>> + * with the License.  You may obtain a copy of the License at
>> + *
>> + *    http://www.apache.org/licenses/LICENSE-2.0
>> + *
>> + * Unless required by applicable law or agreed to in writing,
>> + * software distributed under the License is distributed on an
>> + * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
>> + * KIND, either express or implied.  See the License for the
>> + * specific language governing permissions and limitations
>> + * under the License.
>> + */
>> +package org.apache.stratos.messaging.listener.instance.notifier;
>> +
>> +import org.apache.stratos.messaging.listener.EventListener;
>> +
>> +public abstract class InstanceCleanupMemberEventListener extends
>> EventListener {
>> +
>> +}
>> \ No newline at end of file
>>
>>
>> http://git-wip-us.apache.org/repos/asf/incubator-stratos/blob/236a1b37/components/org.apache.stratos.messaging/src/main/java/org/apache/stratos/messaging/message/processor/instance/notifier/InstanceNotifierMessageProcessorChain.java
>> ----------------------------------------------------------------------
>> diff --git
>> a/components/org.apache.stratos.messaging/src/main/java/org/apache/stratos/messaging/message/processor/instance/notifier/InstanceNotifierMessageProcessorChain.java
>> b/components/org.apache.stratos.messaging/src/main/java/org/apache/stratos/messaging/message/processor/instance/notifier/InstanceNotifierMessageProcessorChain.java
>> index 235c749..b844d2d 100644
>> ---
>> a/components/org.apache.stratos.messaging/src/main/java/org/apache/stratos/messaging/message/processor/instance/notifier/InstanceNotifierMessageProcessorChain.java
>> +++
>> b/components/org.apache.stratos.messaging/src/main/java/org/apache/stratos/messaging/message/processor/instance/notifier/InstanceNotifierMessageProcessorChain.java
>> @@ -23,7 +23,7 @@ import org.apache.commons.logging.Log;
>>  import org.apache.commons.logging.LogFactory;
>>  import org.apache.stratos.messaging.listener.EventListener;
>>  import
>> org.apache.stratos.messaging.listener.instance.notifier.ArtifactUpdateEventListener;
>> -import
>> org.apache.stratos.messaging.listener.instance.notifier.InstanceCleanupEventListener;
>> +import
>> org.apache.stratos.messaging.listener.instance.notifier.InstanceCleanupMemberEventListener;
>>  import
>> org.apache.stratos.messaging.message.processor.MessageProcessorChain;
>>
>>  /**
>> @@ -50,7 +50,7 @@ public class InstanceNotifierMessageProcessorChain
>> extends MessageProcessorChain
>>      public void addEventListener(EventListener eventListener) {
>>          if (eventListener instanceof ArtifactUpdateEventListener) {
>>
>>  artifactUpdateMessageProcessor.addEventListener(eventListener);
>> -        } else if (eventListener instanceof
>> InstanceCleanupEventListener) {
>> +        } else if (eventListener instanceof
>> InstanceCleanupMemberEventListener) {
>>
>>  artifactUpdateMessageProcessor.addEventListener(eventListener);
>>          } else {
>>              throw new RuntimeException("Unknown event listener");
>>
>>
>> http://git-wip-us.apache.org/repos/asf/incubator-stratos/blob/236a1b37/products/autoscaler/modules/distribution/src/main/conf/mincheck.drl
>> ----------------------------------------------------------------------
>> diff --git
>> a/products/autoscaler/modules/distribution/src/main/conf/mincheck.drl
>> b/products/autoscaler/modules/distribution/src/main/conf/mincheck.drl
>> index b7bf7e0..2c04459 100755
>> --- a/products/autoscaler/modules/distribution/src/main/conf/mincheck.drl
>> +++ b/products/autoscaler/modules/distribution/src/main/conf/mincheck.drl
>> @@ -74,6 +74,6 @@ dialect "mvel"
>>              eval(log.debug("[obsolete-check] [network-partition] " +
>> $ctxt.getNetworkPartitionId() + " [partition] " + $ctxt.getPartitionId() +
>> " Member id: " + memberId))
>>              eval($ctxt.removeObsoleteMember(memberId))
>>          then
>> -           $delegator.delegateTerminate(memberId);
>> +           $delegator.terminateObsoleteInstance(memberId);
>>  end
>>
>>
>>
>
>
> --
> *Sajith Kariyawasam*
> *Senior Software Engineer; WSO2, Inc.*
> *AMIE (SL)*
> *Blog: http://sajithblogs.blogspot.com/ <http://sajithblogs.blogspot.com/>*
> *Mobile: +94772269575 <%2B94772269575>*
>