Hi Chamila,

Please find the diff with changes to fix the issue.
WDYT ?

On Tue, Mar 24, 2015 at 1:50 PM, Chamila De Alwis <chami...@wso2.com> wrote:

> Hi Anuruddha,
>
> Yes, this seems to be missing from the ArtifactUpdatedEvent processing. If
> the extension is being manually executed in the non-repo based path, it
> should also be the case in the repo based path. It might have been dropped
> while being refactored.
>
>
> Regards,
> Chamila de Alwis
> Software Engineer | WSO2 | +94772207163
> Blog: code.chamiladealwis.com
>
>
>
> On Tue, Mar 24, 2015 at 12:51 PM, Anuruddha Liyanarachchi <
> anurudd...@wso2.com> wrote:
>
>> Hi,
>>
>> Found that the instance activated extension is not getting called
>> when onArtifactUpdatedEvent is publishing Instance activated event. However
>> artifactUpdate extension is getting called.
>>
>> Shouldn't artifactUpdatedEvent trigger both instanceActivated and
>> artifactUpdated Extensions?
>>
>>
>>
>> --
>> *Thanks and Regards,*
>> Anuruddha Lanka Liyanarachchi
>> Software Engineer - WSO2
>> Mobile : +94 (0) 712762611
>> Tel      : +94 112 145 345
>> a <thili...@wso2.com>nurudd...@wso2.com
>>
>
>


-- 
*Thanks and Regards,*
Anuruddha Lanka Liyanarachchi
Software Engineer - WSO2
Mobile : +94 (0) 712762611
Tel      : +94 112 145 345
a <thili...@wso2.com>nurudd...@wso2.com
Index: 
source/components/org.apache.stratos.cartridge.agent/src/main/java/org/apache/stratos/cartridge/agent/CartridgeAgent.java
===================================================================
--- 
source/components/org.apache.stratos.cartridge.agent/src/main/java/org/apache/stratos/cartridge/agent/CartridgeAgent.java
   (revision 31093)
+++ 
source/components/org.apache.stratos.cartridge.agent/src/main/java/org/apache/stratos/cartridge/agent/CartridgeAgent.java
   (working copy)
@@ -118,10 +118,6 @@
             }
         }
 
-        // Wait for all ports to be active
-        
CartridgeAgentUtils.waitUntilPortsActive(CartridgeAgentConfiguration.getInstance().getListenAddress(),
-                CartridgeAgentConfiguration.getInstance().getPorts());
-
         // Check repo url
         String repoUrl = 
CartridgeAgentConfiguration.getInstance().getRepoUrl();
         /*if(CartridgeAgentConfiguration.getInstance().isMultitenant()) {
@@ -148,11 +144,13 @@
             if (log.isInfoEnabled()) {
                 log.info("No artifact repository found");
             }
+
+            // Publish instance activated event
+            CartridgeAgentEventPublisher.publishInstanceActivatedEvent();
+
             // Execute instance activated shell script
             extensionHandler.onInstanceActivatedEvent();
 
-            // Publish instance activated event
-            CartridgeAgentEventPublisher.publishInstanceActivatedEvent();
         } else {
             //Start periodical file checker task
             /*if 
(CartridgeAgentConfiguration.getInstance().isCommitsEnabled()) {
Index: 
source/components/org.apache.stratos.cartridge.agent/src/main/java/org/apache/stratos/cartridge/agent/event/publisher/CartridgeAgentEventPublisher.java
===================================================================
--- 
source/components/org.apache.stratos.cartridge.agent/src/main/java/org/apache/stratos/cartridge/agent/event/publisher/CartridgeAgentEventPublisher.java
     (revision 31093)
+++ 
source/components/org.apache.stratos.cartridge.agent/src/main/java/org/apache/stratos/cartridge/agent/event/publisher/CartridgeAgentEventPublisher.java
     (working copy)
@@ -25,6 +25,7 @@
 import org.apache.commons.logging.LogFactory;
 import org.apache.stratos.cartridge.agent.config.CartridgeAgentConfiguration;
 import 
org.apache.stratos.cartridge.agent.statistics.publisher.HealthStatisticsNotifier;
+import org.apache.stratos.cartridge.agent.util.CartridgeAgentUtils;
 import org.apache.stratos.iaas.metadata.client.model.InstanceMetadata;
 import org.apache.stratos.messaging.broker.publish.EventPublisher;
 import org.apache.stratos.messaging.broker.publish.EventPublisherPool;
@@ -35,6 +36,8 @@
 import org.apache.stratos.messaging.event.instance.status.InstanceStartedEvent;
 import org.apache.stratos.messaging.util.Constants;
 
+import java.util.List;
+
 /**
  * Cartridge agent event publisher.
  */
@@ -96,7 +99,12 @@
     }
 
     public static void publishInstanceActivatedEvent() {
-        if (!isActivated()) {
+        // Wait for all ports to be active, if ports are not activated, do not 
publish instance activated since
+        // the service is not up
+        List<Integer> ports = 
CartridgeAgentConfiguration.getInstance().getPorts();
+        String listenAddress = 
CartridgeAgentConfiguration.getInstance().getListenAddress();
+        boolean portsActivated = 
CartridgeAgentUtils.waitUntilPortsActive(listenAddress, ports);
+        if (!isActivated() && portsActivated) {
             if (log.isInfoEnabled()) {
                 log.info("Publishing instance activated event");
             }
@@ -125,9 +133,25 @@
                 log.info("Health statistics notifier started");
             }
         } else {
-            if (log.isWarnEnabled()) {
-                log.warn("Instance already activated");
+            if (isActivated()) {
+                if (log.isWarnEnabled()) {
+                    log.warn("Instance already activated");
+                }
+            } else {
+                //ports are not active
+                if (log.isInfoEnabled()) {
+                    // There would not be a large number of ports
+                    String portsStr = "";
+                    for (Integer port : ports) {
+                        portsStr += port + ", ";
+                    }
+                    log.info(String.format(
+                            "Ports activation timed out. Aborting 
InstanceActivatedEvent publishing. [IPAddress] %s [Ports] %s",
+                            listenAddress,
+                            portsStr));
+                }
             }
+
         }
     }
 
Index: 
source/components/org.apache.stratos.cartridge.agent/src/main/java/org/apache/stratos/cartridge/agent/extensions/DefaultExtensionHandler.java
===================================================================
--- 
source/components/org.apache.stratos.cartridge.agent/src/main/java/org/apache/stratos/cartridge/agent/extensions/DefaultExtensionHandler.java
       (revision 31093)
+++ 
source/components/org.apache.stratos.cartridge.agent/src/main/java/org/apache/stratos/cartridge/agent/extensions/DefaultExtensionHandler.java
       (working copy)
@@ -142,6 +142,9 @@
             if (!cloneExists && !isMultitenant) {
                 // Executed git clone, publish instance activated event
                 CartridgeAgentEventPublisher.publishInstanceActivatedEvent();
+
+                // Execute instance activated shell script
+                ExtensionUtils.executeInstanceActivatedExtension();
             }
 
             // Start the artifact update task
Index: 
source/components/org.apache.stratos.cartridge.agent/src/main/java/org/apache/stratos/cartridge/agent/util/CartridgeAgentUtils.java
===================================================================
--- 
source/components/org.apache.stratos.cartridge.agent/src/main/java/org/apache/stratos/cartridge/agent/util/CartridgeAgentUtils.java
 (revision 31093)
+++ 
source/components/org.apache.stratos.cartridge.agent/src/main/java/org/apache/stratos/cartridge/agent/util/CartridgeAgentUtils.java
 (working copy)
@@ -80,7 +80,7 @@
         return decryptPassword;
     }
 
-    public static void waitUntilPortsActive(String ipAddress, List<Integer> 
ports) {
+    public static boolean waitUntilPortsActive(String ipAddress, List<Integer> 
ports) {
         long portCheckTimeOut = 1000 * 60 * 10;
         String portCheckTimeOutStr = System.getProperty("port.check.timeout");
         if (StringUtils.isNotBlank(portCheckTimeOutStr)) {
@@ -100,7 +100,7 @@
             long endTime = System.currentTimeMillis();
             long duration = endTime - startTime;
             if (duration > portCheckTimeOut) {
-                return;
+                return false;
             }
             try {
                 Thread.sleep(5000);
@@ -110,6 +110,7 @@
         if(log.isInfoEnabled()) {
             log.info("Ports activated: [ip] " + ipAddress + " [ports] "+ports);
         }
+        return true;
     }
 
     public static boolean checkPortsActive(String ipAddress, List<Integer> 
ports) {

Reply via email to