You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@zeppelin.apache.org by pd...@apache.org on 2022/03/14 09:17:21 UTC

[zeppelin] 01/01: Try to solve surefire update

This is an automated email from the ASF dual-hosted git repository.

pdallig pushed a commit to branch surefire
in repository https://gitbox.apache.org/repos/asf/zeppelin.git

commit 1e9a7f56919f1fdaca429f71ed5e00853238a6a4
Author: Philipp Dallig <ph...@gmail.com>
AuthorDate: Fri Mar 11 17:30:50 2022 +0100

    Try to solve surefire update
---
 .../org/apache/zeppelin/server/ZeppelinServer.java | 133 +++++++++++----------
 .../zeppelin/socket/SessionConfigurator.java       |   3 +-
 .../java/org/apache/zeppelin/utils/TestUtils.java  |   2 +-
 .../zeppelin/cluster/ZeppelinServerMock.java       |   2 +-
 .../org/apache/zeppelin/recovery/RecoveryTest.java |   3 +-
 .../apache/zeppelin/rest/AbstractTestRestApi.java  |   7 +-
 .../apache/zeppelin/rest/NotebookRestApiTest.java  |   4 +-
 7 files changed, 84 insertions(+), 70 deletions(-)

diff --git a/zeppelin-server/src/main/java/org/apache/zeppelin/server/ZeppelinServer.java b/zeppelin-server/src/main/java/org/apache/zeppelin/server/ZeppelinServer.java
index 428cdd9..fb7baa7 100644
--- a/zeppelin-server/src/main/java/org/apache/zeppelin/server/ZeppelinServer.java
+++ b/zeppelin-server/src/main/java/org/apache/zeppelin/server/ZeppelinServer.java
@@ -135,30 +135,36 @@ public class ZeppelinServer extends ResourceConfig {
   private static final Logger LOG = LoggerFactory.getLogger(ZeppelinServer.class);
   private static final String WEB_APP_CONTEXT_NEXT = "/next";
 
-  public static Server jettyWebServer;
-  public static ServiceLocator sharedServiceLocator;
+  //private static Server jettyWebServer;
+  //public static ServiceLocator sharedServiceLocator;
 
-  private static ZeppelinConfiguration conf;
-  private static PrometheusMeterRegistry promMetricRegistry;
+  //private static ZeppelinConfiguration conf;
+  //private static PrometheusMeterRegistry promMetricRegistry;
 
   public static void reset() {
-    conf = null;
-    jettyWebServer = null;
-    sharedServiceLocator = null;
+    //conf = null;
+    //jettyWebServer = null;
+    //sharedServiceLocator = null;
   }
 
   @Inject
-  public ZeppelinServer() {
+  public ZeppelinServer(ZeppelinConfiguration conf) {
     LOG.info("Instantiated ZeppelinServer");
     InterpreterOutput.LIMIT = conf.getInt(ConfVars.ZEPPELIN_INTERPRETER_OUTPUT_LIMIT);
 
     packages("org.apache.zeppelin.rest");
   }
 
-  public static void main(String[] args) throws InterruptedException, IOException {
-    ZeppelinServer.conf = ZeppelinConfiguration.create();
+  public static void main(String[] args) throws IOException {
+    ZeppelinConfiguration conf = ZeppelinConfiguration.create();
 
-    jettyWebServer = setupJettyServer(conf);
+    Server jettyWebServer = setupJettyServer(conf);
+
+    PrometheusMeterRegistry promMetricRegistry = null;
+    if (conf.isPrometheusMetricEnabled()) {
+      promMetricRegistry = new PrometheusMeterRegistry(PrometheusConfig.DEFAULT);
+      Metrics.addRegistry(promMetricRegistry);
+    }
     initMetrics(conf);
 
     TimedHandler timedHandler = new TimedHandler(Metrics.globalRegistry, Tags.empty());
@@ -167,7 +173,7 @@ public class ZeppelinServer extends ResourceConfig {
     ContextHandlerCollection contexts = new ContextHandlerCollection();
     timedHandler.setHandler(contexts);
 
-    sharedServiceLocator = ServiceLocatorFactory.getInstance().create("shared-locator");
+    ServiceLocator sharedServiceLocator = ServiceLocatorFactory.getInstance().create("shared-locator");
     ServiceLocatorUtilities.enableImmediateScope(sharedServiceLocator);
     ServiceLocatorUtilities.addClasses(sharedServiceLocator,
       NotebookRepoSync.class,
@@ -230,10 +236,10 @@ public class ZeppelinServer extends ResourceConfig {
     final WebAppContext defaultWebApp = setupWebAppContext(contexts, conf, conf.getString(ConfVars.ZEPPELIN_WAR), conf.getServerContextPath());
     final WebAppContext nextWebApp = setupWebAppContext(contexts, conf, conf.getString(ConfVars.ZEPPELIN_ANGULAR_WAR), WEB_APP_CONTEXT_NEXT);
 
-    initWebApp(defaultWebApp);
-    initWebApp(nextWebApp);
+    initWebApp(defaultWebApp, conf, sharedServiceLocator, promMetricRegistry);
+    initWebApp(nextWebApp, conf, sharedServiceLocator, promMetricRegistry);
     // Cluster Manager Server
-    setupClusterManagerServer(sharedServiceLocator);
+    setupClusterManagerServer(sharedServiceLocator, conf);
 
     // JMX Enable
     if (conf.isJMXEnabled()) {
@@ -251,25 +257,9 @@ public class ZeppelinServer extends ResourceConfig {
       LOG.info("JMX Enabled with port: {}", port);
     }
 
-    LOG.info("Starting zeppelin server");
-    try {
-      jettyWebServer.start(); // Instantiates ZeppelinServer
-      List<ErrorData> errorData = handler.waitForAtLeastOneConstructionError(5 * 1000);
-      if(errorData.size() > 0 && errorData.get(0).getThrowable() != null) {
-        throw new Exception(errorData.get(0).getThrowable());
-      }
-      if (conf.getJettyName() != null) {
-        org.eclipse.jetty.http.HttpGenerator.setJettyVersion(conf.getJettyName());
-      }
-    } catch (Exception e) {
-      LOG.error("Error while running jettyServer", e);
-      System.exit(-1);
-    }
-    LOG.info("Done, zeppelin server started");
-
-    runNoteOnStart(conf);
+    runNoteOnStart(conf, jettyWebServer, sharedServiceLocator);
 
-    Runtime.getRuntime().addShutdownHook(shutdown(conf));
+    Runtime.getRuntime().addShutdownHook(shutdown(conf, jettyWebServer, sharedServiceLocator));
 
     // Try to get Notebook from ServiceLocator, because Notebook instantiation is lazy, it is
     // created when user open zeppelin in browser if we don't get it explicitly here.
@@ -283,28 +273,42 @@ public class ZeppelinServer extends ResourceConfig {
     // Try to recover here, don't do it in constructor of Notebook, because it would cause deadlock.
     notebook.recoveryIfNecessary();
 
-    // when zeppelin is started inside of ide (especially for eclipse)
-    // for graceful shutdown, input any key in console window
-    if (System.getenv("ZEPPELIN_IDENT_STRING") == null) {
-      try {
-        System.in.read();
-      } catch (IOException e) {
-        LOG.error("Exception in ZeppelinServer while main ", e);
+    try {
+      List<ErrorData> errorDatas = handler.waitForAtLeastOneConstructionError(5000);
+      for (ErrorData errorData : errorDatas) {
+        LOG.error("Error in Construction", errorData.getThrowable());
+      }
+      if (!errorDatas.isEmpty()) {
+        LOG.error("{} error(s) while starting - Termination", errorDatas.size());
+        System.exit(-1);
       }
-      System.exit(0);
+    } catch (InterruptedException e) {
+      LOG.error("Error while Constrcut Services", e);
+      System.exit(-1);
     }
 
-    jettyWebServer.join();
+
+    LOG.info("Starting zeppelin server");
+    try {
+      jettyWebServer.start(); // Instantiates ZeppelinServer
+    } catch (Exception e) {
+      LOG.error("Error while running jettyServer", e);
+      System.exit(-1);
+    }
+    LOG.info("Done, zeppelin server started");
+
+    try {
+      jettyWebServer.join();
+    } catch (InterruptedException e) {
+      shutdown(conf, jettyWebServer, sharedServiceLocator).start();
+      Thread.currentThread().interrupt();
+    }
     if (!conf.isRecoveryEnabled()) {
       sharedServiceLocator.getService(InterpreterSettingManager.class).close();
     }
   }
 
   private static void initMetrics(ZeppelinConfiguration conf) {
-    if (conf.isPrometheusMetricEnabled()) {
-      promMetricRegistry = new PrometheusMeterRegistry(PrometheusConfig.DEFAULT);
-      Metrics.addRegistry(promMetricRegistry);
-    }
     if (conf.isJMXEnabled()) {
       Metrics.addRegistry(new JmxMeterRegistry(JmxConfig.DEFAULT, Clock.SYSTEM));
     }
@@ -317,7 +321,7 @@ public class ZeppelinServer extends ResourceConfig {
     new JVMInfoBinder().bindTo(Metrics.globalRegistry);
   }
 
-  private static Thread shutdown(ZeppelinConfiguration conf) {
+  private static Thread shutdown(ZeppelinConfiguration conf, Server jettyWebServer, ServiceLocator sharedServiceLocator) {
     return new Thread(
             () -> {
               LOG.info("Shutting down Zeppelin Server ... ");
@@ -346,10 +350,10 @@ public class ZeppelinServer extends ResourceConfig {
                            conf.getInt(ConfVars.ZEPPELIN_SERVER_JETTY_THREAD_POOL_MIN),
                            conf.getInt(ConfVars.ZEPPELIN_SERVER_JETTY_THREAD_POOL_TIMEOUT));
     final Server server = new Server(threadPool);
-    initServerConnector(server, conf.getServerPort(), conf.getServerSslPort());
+    initServerConnector(server, conf);
     return server;
   }
-  private static void initServerConnector(Server server, int port, int sslPort) {
+  private static void initServerConnector(Server server, ZeppelinConfiguration conf) {
 
     ServerConnector connector;
     HttpConfiguration httpConfig = new HttpConfiguration();
@@ -357,9 +361,9 @@ public class ZeppelinServer extends ResourceConfig {
     httpConfig.setSendServerVersion(conf.sendJettyName());
     httpConfig.setRequestHeaderSize(conf.getJettyRequestHeaderSize());
     if (conf.useSsl()) {
-      LOG.debug("Enabling SSL for Zeppelin Server on port {}", sslPort);
+      LOG.debug("Enabling SSL for Zeppelin Server on port {}", conf.getServerSslPort());
       httpConfig.setSecureScheme(HttpScheme.HTTPS.asString());
-      httpConfig.setSecurePort(sslPort);
+      httpConfig.setSecurePort(conf.getServerSslPort());
 
       HttpConfiguration httpsConfig = new HttpConfiguration(httpConfig);
       httpsConfig.addCustomizer(new SecureRequestCustomizer());
@@ -371,7 +375,7 @@ public class ZeppelinServer extends ResourceConfig {
                       server,
                       sslConnectionFactory,
                       httpsConnectionFactory);
-      connector.setPort(sslPort);
+      connector.setPort(conf.getServerSslPort());
       connector.addBean(new JettySslHandshakeMetrics(Metrics.globalRegistry, Tags.empty()));
     } else {
       HttpConnectionFactory httpConnectionFactory = new HttpConnectionFactory(httpConfig);
@@ -379,7 +383,7 @@ public class ZeppelinServer extends ResourceConfig {
               new ServerConnector(
                       server,
                       httpConnectionFactory);
-      connector.setPort(port);
+      connector.setPort(conf.getServerPort());
     }
     // Set some timeout options to make debugging easier.
     int timeout = 1000 * 30;
@@ -389,7 +393,7 @@ public class ZeppelinServer extends ResourceConfig {
     server.addConnector(connector);
   }
 
-  private static void runNoteOnStart(ZeppelinConfiguration conf) throws IOException, InterruptedException {
+  private static void runNoteOnStart(ZeppelinConfiguration conf, Server jettyWebServer, ServiceLocator sharedServiceLocator) throws IOException {
     String noteIdToRun = conf.getNotebookRunId();
     if (!StringUtils.isEmpty(noteIdToRun)) {
       LOG.info("Running note {} on start", noteIdToRun);
@@ -422,9 +426,14 @@ public class ZeppelinServer extends ResourceConfig {
       });
 
       if (conf.getNotebookRunAutoShutdown()) {
-        Thread t = shutdown(conf);
+        Thread t = shutdown(conf, jettyWebServer, sharedServiceLocator);
         t.start();
-        t.join();
+        try {
+          t.join();
+        } catch (InterruptedException e) {
+          LOG.error("Interrupt during shutdown - immediate termination");
+          System.exit(1);
+        }
         System.exit(success ? 0 : 1);
       }
     }
@@ -440,7 +449,7 @@ public class ZeppelinServer extends ResourceConfig {
             });
   }
 
-  private static void setupClusterManagerServer(ServiceLocator serviceLocator) {
+  private static void setupClusterManagerServer(ServiceLocator serviceLocator, ZeppelinConfiguration conf) {
     if (conf.isClusterMode()) {
       LOG.info("Cluster mode is enabled, starting ClusterManagerServer");
       ClusterManagerServer clusterManagerServer = ClusterManagerServer.getInstance(conf);
@@ -458,7 +467,7 @@ public class ZeppelinServer extends ResourceConfig {
       // when the zeppelin service starts, Create a ClusterInterpreterLauncher object,
       // This allows the ClusterInterpreterLauncher to listen for cluster events.
       try {
-        InterpreterSettingManager intpSettingManager = sharedServiceLocator.getService(InterpreterSettingManager.class);
+        InterpreterSettingManager intpSettingManager = serviceLocator.getService(InterpreterSettingManager.class);
         RecoveryStorage recoveryStorage = ReflectionUtils.createClazzInstance(
                 conf.getRecoveryStorageClass(),
                 new Class[] {ZeppelinConfiguration.class, InterpreterSettingManager.class},
@@ -567,7 +576,7 @@ public class ZeppelinServer extends ResourceConfig {
     }
   }
 
-  private static void setupPrometheusContextHandler(WebAppContext webapp) {
+  private static void setupPrometheusContextHandler(WebAppContext webapp, PrometheusMeterRegistry promMetricRegistry) {
     webapp.addServlet(new ServletHolder(new PrometheusServlet(promMetricRegistry)), "/metrics");
   }
 
@@ -647,7 +656,7 @@ public class ZeppelinServer extends ResourceConfig {
     };
   }
 
-  private static void initWebApp(WebAppContext webApp) {
+  private static void initWebApp(WebAppContext webApp, ZeppelinConfiguration conf, ServiceLocator sharedServiceLocator, PrometheusMeterRegistry promMetricRegistry) {
     webApp.addEventListener(
             new ServletContextListener() {
               @Override
@@ -665,7 +674,9 @@ public class ZeppelinServer extends ResourceConfig {
     setupRestApiContextHandler(webApp, conf);
 
     // prometheus endpoint
-    setupPrometheusContextHandler(webApp);
+    if (promMetricRegistry != null) {
+      setupPrometheusContextHandler(webApp, promMetricRegistry);
+    }
     // health endpoints
     setupHealthCheckContextHandler(webApp);
 
diff --git a/zeppelin-server/src/main/java/org/apache/zeppelin/socket/SessionConfigurator.java b/zeppelin-server/src/main/java/org/apache/zeppelin/socket/SessionConfigurator.java
index e6f6727..b6bd59e 100644
--- a/zeppelin-server/src/main/java/org/apache/zeppelin/socket/SessionConfigurator.java
+++ b/zeppelin-server/src/main/java/org/apache/zeppelin/socket/SessionConfigurator.java
@@ -25,6 +25,7 @@ import javax.websocket.server.ServerEndpointConfig;
 import org.apache.zeppelin.server.ZeppelinServer;
 import org.apache.zeppelin.util.WatcherSecurityKey;
 import org.apache.zeppelin.utils.CorsUtils;
+import org.glassfish.hk2.api.ServiceLocatorFactory;
 
 /**
  * This class set headers to websocket sessions and inject hk2 when initiating instances by ServerEndpoint annotation.
@@ -44,6 +45,6 @@ public class SessionConfigurator extends ServerEndpointConfig.Configurator {
 
   @Override
   public <T> T getEndpointInstance(Class<T> endpointClass) throws InstantiationException {
-    return ZeppelinServer.sharedServiceLocator.getService(endpointClass);
+    return ServiceLocatorFactory.getInstance().find("shared-locator").getService(endpointClass);
   }
 }
diff --git a/zeppelin-server/src/main/java/org/apache/zeppelin/utils/TestUtils.java b/zeppelin-server/src/main/java/org/apache/zeppelin/utils/TestUtils.java
index 930817b..2806f49 100644
--- a/zeppelin-server/src/main/java/org/apache/zeppelin/utils/TestUtils.java
+++ b/zeppelin-server/src/main/java/org/apache/zeppelin/utils/TestUtils.java
@@ -25,7 +25,7 @@ import org.glassfish.hk2.api.ServiceLocatorFactory;
 public class TestUtils {
   public static <T> T getInstance(Class<T> clazz) {
     checkCalledByTestMethod();
-    return getInstance(ZeppelinServer.sharedServiceLocator, clazz);
+    return getInstance(ServiceLocatorFactory.getInstance().find("shared-locator"), clazz);
   }
 
   public static void clearInstances() {
diff --git a/zeppelin-server/src/test/java/org/apache/zeppelin/cluster/ZeppelinServerMock.java b/zeppelin-server/src/test/java/org/apache/zeppelin/cluster/ZeppelinServerMock.java
index fa6d859..d8004a8 100644
--- a/zeppelin-server/src/test/java/org/apache/zeppelin/cluster/ZeppelinServerMock.java
+++ b/zeppelin-server/src/test/java/org/apache/zeppelin/cluster/ZeppelinServerMock.java
@@ -145,7 +145,7 @@ public class ZeppelinServerMock {
         }
       }
       LOG.info("ZeppelinServerMock shutDown...");
-      ZeppelinServer.jettyWebServer.stop();
+      //ZeppelinServer.jettyWebServer.stop();
       executor.shutdown();
       System.clearProperty(ZeppelinConfiguration.ConfVars.ZEPPELIN_HOME.getVarName());
       System.clearProperty(ZeppelinConfiguration.ConfVars.ZEPPELIN_WAR.getVarName());
diff --git a/zeppelin-server/src/test/java/org/apache/zeppelin/recovery/RecoveryTest.java b/zeppelin-server/src/test/java/org/apache/zeppelin/recovery/RecoveryTest.java
index fb51806..ec7968f 100644
--- a/zeppelin-server/src/test/java/org/apache/zeppelin/recovery/RecoveryTest.java
+++ b/zeppelin-server/src/test/java/org/apache/zeppelin/recovery/RecoveryTest.java
@@ -35,6 +35,7 @@ import org.apache.zeppelin.scheduler.Job;
 import org.apache.zeppelin.server.ZeppelinServer;
 import org.apache.zeppelin.user.AuthenticationInfo;
 import org.apache.zeppelin.utils.TestUtils;
+import org.glassfish.hk2.api.ServiceLocatorFactory;
 import org.junit.After;
 import org.junit.Before;
 import org.junit.Test;
@@ -66,7 +67,7 @@ public class RecoveryTest extends AbstractTestRestApi {
             recoveryDir.getAbsolutePath());
     startUp(RecoveryTest.class.getSimpleName());
 
-    notebook = ZeppelinServer.sharedServiceLocator.getService(Notebook.class);
+    notebook = ServiceLocatorFactory.getInstance().find("shared-locator").getService(Notebook.class);
   }
 
   @After
diff --git a/zeppelin-server/src/test/java/org/apache/zeppelin/rest/AbstractTestRestApi.java b/zeppelin-server/src/test/java/org/apache/zeppelin/rest/AbstractTestRestApi.java
index 912183d..93a6f42 100644
--- a/zeppelin-server/src/test/java/org/apache/zeppelin/rest/AbstractTestRestApi.java
+++ b/zeppelin-server/src/test/java/org/apache/zeppelin/rest/AbstractTestRestApi.java
@@ -326,10 +326,11 @@ public abstract class AbstractTestRestApi {
         FileUtils.deleteQuietly(shiroIni);
       }
       LOG.info("Terminating Zeppelin Server...");
-      ZeppelinServer.jettyWebServer.stop();
+      //ZeppelinServer.jettyWebServer.stop();
       executor.shutdown();
-      PluginManager.reset();
-      ZeppelinConfiguration.reset();
+      executor.shutdownNow();
+      //PluginManager.reset();
+      //ZeppelinConfiguration.reset();
 
       long s = System.currentTimeMillis();
       boolean started = true;
diff --git a/zeppelin-server/src/test/java/org/apache/zeppelin/rest/NotebookRestApiTest.java b/zeppelin-server/src/test/java/org/apache/zeppelin/rest/NotebookRestApiTest.java
index dc95df5..4178919 100644
--- a/zeppelin-server/src/test/java/org/apache/zeppelin/rest/NotebookRestApiTest.java
+++ b/zeppelin-server/src/test/java/org/apache/zeppelin/rest/NotebookRestApiTest.java
@@ -120,7 +120,7 @@ public class NotebookRestApiTest extends AbstractTestRestApi {
       }
     }
   }
-  
+
   @Test
   public void testGetNoteByPath() throws IOException {
     LOG.info("Running testGetNoteByPath");
@@ -890,7 +890,7 @@ public class NotebookRestApiTest extends AbstractTestRestApi {
           new TypeToken<Map<String, Object>>() {}.getType());
       assertEquals("OK", resp.get("status"));
       post2.close();
-
+      Thread.sleep(60000);
       TestUtils.getInstance(Notebook.class).processNote(note1Id,
         note1 -> {
           Paragraph p1 = note1.getParagraph(0);