Christian, it's not fair. I think that Jamie votes -1 with strong arguments and you can be sure he tested it.

Just kidding: "Have YOU tested YOUR code ?" ;)
It's always the question I asked to myself before committing (do I cover all test case, do I make a complete build, do I consider all remarks coming from the team, from the users, etc).

Our work is not so easy ;)

Regards
JB

On 08/13/2012 01:17 PM, Christian Schneider wrote:
Am I missing something? The default is that the delayed start is turned
off. Have you guys tested the code?

Christian

Am 13.08.2012 13:01, schrieb Achim Nierbeck:
-1, I thought it was clearly communicated that this shouldn't be the
default behavior.


2012/8/13 Jamie G. <[email protected]>:
-1 This behaviour was discussed on the dev list to not be made default.

On Mon, Aug 13, 2012 at 6:40 AM,  <[email protected]> wrote:
Author: cschneider
Date: Mon Aug 13 09:10:22 2012
New Revision: 1372333

URL: http://svn.apache.org/viewvc?rev=1372333&view=rev
Log:
KARAF-1640: Adding option to start console delayed. Showing some
stats when console comes up

Modified:

karaf/trunk/main/src/main/java/org/apache/karaf/main/ConfigProperties.java

     karaf/trunk/main/src/main/java/org/apache/karaf/main/Main.java

karaf/trunk/main/src/main/java/org/apache/karaf/main/StartupListener.java


karaf/trunk/shell/console/src/main/java/org/apache/karaf/shell/console/impl/jline/DelayedStarted.java


karaf/trunk/shell/console/src/main/java/org/apache/karaf/shell/console/impl/jline/LocalConsoleManager.java


Modified:
karaf/trunk/main/src/main/java/org/apache/karaf/main/ConfigProperties.java

URL:
http://svn.apache.org/viewvc/karaf/trunk/main/src/main/java/org/apache/karaf/main/ConfigProperties.java?rev=1372333&r1=1372332&r2=1372333&view=diff

==============================================================================

---
karaf/trunk/main/src/main/java/org/apache/karaf/main/ConfigProperties.java
(original)
+++
karaf/trunk/main/src/main/java/org/apache/karaf/main/ConfigProperties.java
Mon Aug 13 09:10:22 2012
@@ -113,6 +113,10 @@ public class ConfigProperties {
      private static final String KARAF_SHUTDOWN_COMMAND =
"karaf.shutdown.command";

      private static final String KARAF_SHUTDOWN_PID_FILE =
"karaf.shutdown.pid.file";
+
+    private static final String KARAF_STARTUP_MESSAGE =
"karaf.startup.message";
+
+    private static final String KARAF_DELAY_CONSOLE =
"karaf.delay.console";

      private static final String DEFAULT_SHUTDOWN_COMMAND =
"SHUTDOWN";

@@ -120,7 +124,7 @@ public class ConfigProperties {

      private static final String SECURITY_PROVIDERS =
"org.apache.karaf.security.providers";

-    private static final String KARAF_STARTUP_MESSAGE =
"karaf.startup.message";
+

      /**
       * If a lock should be used before starting the runtime
@@ -154,6 +158,7 @@ public class ConfigProperties {
      String optionals;
      File etcFolder;
      String startupMessage;
+    boolean delayConsoleStart;

      public ConfigProperties() throws Exception {
          this.karafHome =
Utils.getKarafHome(ConfigProperties.class, PROP_KARAF_HOME,
ENV_KARAF_HOME);
@@ -206,6 +211,8 @@ public class ConfigProperties {
          this.portFile = props.getProperty(KARAF_SHUTDOWN_PORT_FILE);
          this.shutdownCommand =
props.getProperty(KARAF_SHUTDOWN_COMMAND, DEFAULT_SHUTDOWN_COMMAND);
          this.startupMessage =
props.getProperty(KARAF_STARTUP_MESSAGE, "Apache Karaf starting up.
Press Enter to open the shell now...");
+        this.delayConsoleStart =
Boolean.parseBoolean(props.getProperty(KARAF_DELAY_CONSOLE, "true"));
+        System.setProperty(KARAF_DELAY_CONSOLE, new
Boolean(this.delayConsoleStart).toString());
      }

      private String getProperyOrFail(String propertyName) {

Modified:
karaf/trunk/main/src/main/java/org/apache/karaf/main/Main.java
URL:
http://svn.apache.org/viewvc/karaf/trunk/main/src/main/java/org/apache/karaf/main/Main.java?rev=1372333&r1=1372332&r2=1372333&view=diff

==============================================================================

--- karaf/trunk/main/src/main/java/org/apache/karaf/main/Main.java
(original)
+++ karaf/trunk/main/src/main/java/org/apache/karaf/main/Main.java
Mon Aug 13 09:10:22 2012
@@ -210,7 +210,9 @@ public class Main {

      public void launch() throws Exception {
          config = new ConfigProperties();
-        System.out.println(config.startupMessage);
+        if (config.delayConsoleStart) {
+            System.out.println(config.startupMessage);
+        }
          BootstrapLogManager.setProperties(config.props);
          Lock lock = createLock();
          lockManager = new LockManager(lock, new
KarafLockCallback(), config.lockDelay);
@@ -252,7 +254,9 @@ public class Main {

          setStartLevel(config.lockStartLevel);
          // Progress bar
-        new StartupListener(framework.getBundleContext());
+        if (config.delayConsoleStart) {
+            new StartupListener(LOG, framework.getBundleContext());
+        }
          lockManager.startLockMonitor();
      }


Modified:
karaf/trunk/main/src/main/java/org/apache/karaf/main/StartupListener.java

URL:
http://svn.apache.org/viewvc/karaf/trunk/main/src/main/java/org/apache/karaf/main/StartupListener.java?rev=1372333&r1=1372332&r2=1372333&view=diff

==============================================================================

---
karaf/trunk/main/src/main/java/org/apache/karaf/main/StartupListener.java
(original)
+++
karaf/trunk/main/src/main/java/org/apache/karaf/main/StartupListener.java
Mon Aug 13 09:10:22 2012
@@ -1,5 +1,7 @@
  package org.apache.karaf.main;

+import java.util.logging.Logger;
+
  import org.osgi.framework.Bundle;
  import org.osgi.framework.BundleContext;
  import org.osgi.framework.BundleEvent;
@@ -10,20 +12,29 @@ import org.osgi.framework.SynchronousBun
  import org.osgi.framework.startlevel.FrameworkStartLevel;

  /**
- * Watches the startup of the framework and displays a progress bar
of the number of bundles started / total.
- * The listener will remove itself after the desired start level is
reached or the system property karaf.console.started is set to
- * true.
+ * Watches the startup of the framework and displays a progress bar
of the
+ * number of bundles started / total. The listener will remove
itself after the
+ * desired start level is reached or the system property
karaf.console.started
+ * is set to true.
   */
  class StartupListener implements FrameworkListener,
SynchronousBundleListener {
+    private Logger log;
      private static final String SYSTEM_PROP_KARAF_CONSOLE_STARTED
= "karaf.console.started";
+    private long startTime;
+    private int currentPercentage;
+
+    private final BundleContext context;

-       private final BundleContext context;
-    StartupListener(BundleContext context) {
+    StartupListener(Logger log, BundleContext context) {
+        this.log = log;
          this.context = context;
+        this.currentPercentage = 0;
+        this.startTime = System.currentTimeMillis();
          context.addBundleListener(this);
          context.addFrameworkListener(this);
      }
-    public synchronized void bundleChanged(BundleEvent bundleEvent) {
+
+    public BundleStats getBundleStats() {
          Bundle[] bundles = context.getBundles();
          int numActive = 0;
          int numBundles = bundles.length;
@@ -31,42 +42,76 @@ class StartupListener implements Framewo
              if (bundle.getHeaders().get(Constants.FRAGMENT_HOST)
!= null) {
                  numBundles--;
              } else if (bundle.getState() == Bundle.ACTIVE) {
-                numActive ++;
+                numActive++;
              }
          }
-        boolean started =
Boolean.parseBoolean(System.getProperty(SYSTEM_PROP_KARAF_CONSOLE_STARTED,
"false"));
-        if (!started) {
-            showProgressBar(numActive, numBundles);
+        BundleStats stats = new BundleStats();
+        stats.numActive = numActive;
+        stats.numTotal = numBundles;
+        return stats;
+    }
+
+    public synchronized void bundleChanged(BundleEvent bundleEvent) {
+        BundleStats stats = getBundleStats();
+        if (!isConsoleStarted()) {
+            showProgressBar(stats.numActive, stats.numTotal);
          }
      }
+
+    private boolean isConsoleStarted() {
+        return
Boolean.parseBoolean(System.getProperty(SYSTEM_PROP_KARAF_CONSOLE_STARTED,
"false"));
+    }
+
      public synchronized void frameworkEvent(FrameworkEvent
frameworkEvent) {
          if (frameworkEvent.getType() ==
FrameworkEvent.STARTLEVEL_CHANGED) {
-            int defStartLevel =
Integer.parseInt(System.getProperty(Constants.FRAMEWORK_BEGINNING_STARTLEVEL));

-            int startLevel =
context.getBundle(0).adapt(FrameworkStartLevel.class).getStartLevel();
+            int defStartLevel = Integer.parseInt(System
+
.getProperty(Constants.FRAMEWORK_BEGINNING_STARTLEVEL));
+            int startLevel = context.getBundle(0)
+                    .adapt(FrameworkStartLevel.class).getStartLevel();
              if (startLevel >= defStartLevel) {
                  context.removeBundleListener(this);
                  context.removeFrameworkListener(this);
+                long startTimeSeconds = (System.currentTimeMillis()
- this.startTime) / 1000;
+                BundleStats stats = getBundleStats();
+                String message = "Karaf started in " +
startTimeSeconds + "s. Bundle stats: " + stats.numActive
+                        + " active , " + stats.numTotal + " total";
+                log.info(message);
+                if (!isConsoleStarted()) {
+                    showProgressBar(100, 100);
+                    System.out.println(message);
+                }
+
              }
          }
      }
+
      public void showProgressBar(int done, int total) {
          int percent = (done * 100) / total;
-        StringBuilder sb = new StringBuilder();
-        sb.append(String.format("\r%3d%% [", percent));
-        for (int i = 0; i < 100; i++) {
-            if (i < percent) {
-                sb.append('=');
-            } else if (i == percent) {
-                sb.append('>');
-            } else {
-                sb.append(' ');
+        // Make sure we do not go backwards with percentage
+        if (percent > currentPercentage) {
+            currentPercentage = percent;
+            StringBuilder sb = new StringBuilder();
+            sb.append(String.format("\r%3d%% [", percent));
+            for (int i = 0; i < 100; i++) {
+                if (i < percent) {
+                    sb.append('=');
+                } else if (i == percent) {
+                    sb.append('>');
+                } else {
+                    sb.append(' ');
+                }
              }
+            sb.append(']');
+            System.out.print(sb.toString());
+            System.out.flush();
          }
-        sb.append(']');
-        System.out.print(sb.toString());
-        System.out.flush();
          if (done == total) {
              System.out.println();
          }
      }
+
+    class BundleStats {
+        int numActive;
+        int numTotal;
+    }
  }
\ No newline at end of file

Modified:
karaf/trunk/shell/console/src/main/java/org/apache/karaf/shell/console/impl/jline/DelayedStarted.java

URL:
http://svn.apache.org/viewvc/karaf/trunk/shell/console/src/main/java/org/apache/karaf/shell/console/impl/jline/DelayedStarted.java?rev=1372333&r1=1372332&r2=1372333&view=diff

==============================================================================

---
karaf/trunk/shell/console/src/main/java/org/apache/karaf/shell/console/impl/jline/DelayedStarted.java
(original)
+++
karaf/trunk/shell/console/src/main/java/org/apache/karaf/shell/console/impl/jline/DelayedStarted.java
Mon Aug 13 09:10:22 2012
@@ -55,8 +55,6 @@ class DelayedStarted extends Thread impl

          // Signal to the main module that it can stop displaying
the startup progress
          System.setProperty(SYSTEM_PROP_KARAF_CONSOLE_STARTED,
"true");
-
-        System.out.println();
          this.bundleContext.removeFrameworkListener(this);
          console.run();
      }

Modified:
karaf/trunk/shell/console/src/main/java/org/apache/karaf/shell/console/impl/jline/LocalConsoleManager.java

URL:
http://svn.apache.org/viewvc/karaf/trunk/shell/console/src/main/java/org/apache/karaf/shell/console/impl/jline/LocalConsoleManager.java?rev=1372333&r1=1372332&r2=1372333&view=diff

==============================================================================

---
karaf/trunk/shell/console/src/main/java/org/apache/karaf/shell/console/impl/jline/LocalConsoleManager.java
(original)
+++
karaf/trunk/shell/console/src/main/java/org/apache/karaf/shell/console/impl/jline/LocalConsoleManager.java
Mon Aug 13 09:10:22 2012
@@ -88,14 +88,20 @@ public class LocalConsoleManager {
          String agentId = startAgent("karaf");
          this.console =
consoleFactory.createLocal(this.commandProcessor, terminal, callback);

this.console.getSession().put(SshAgent.SSH_AUTHSOCKET_ENV_NAME,
agentId);
-        DelayedStarted watcher = new DelayedStarted(new Runnable() {
-
-            @Override
+
+        Runnable consoleStarter = new Runnable() {
              public void run() {
                  consoleFactory.startConsoleAs(console, subject);
              }
-        }, bundleContext, System.in);
-        new Thread(watcher).start();
+        };
+
+        boolean delayconsole =
Boolean.parseBoolean(System.getProperty("karaf.delay.console"));
+        if (delayconsole) {
+            DelayedStarted watcher = new
DelayedStarted(consoleStarter, bundleContext, System.in);
+            new Thread(watcher).start();
+        } else {
+            consoleStarter.run();
+        }
      }

      protected String startAgent(String user) {







--
Jean-Baptiste Onofré
[email protected]
http://blog.nanthrax.net
Talend - http://www.talend.com

Reply via email to