Skip to content

Commit

Permalink
Merge pull request #3702 from jbee/PAYARA-3344-graceful-server-shutdown
Browse files Browse the repository at this point in the history
PAYARA-3344 Added System Property for Shutdown Grace Period
  • Loading branch information
Pandrex247 authored Feb 12, 2019
2 parents aba8cb5 + 287cd1f commit 4195298
Show file tree
Hide file tree
Showing 4 changed files with 29 additions and 6 deletions.
Original file line number Diff line number Diff line change
@@ -1,7 +1,7 @@
/*
* DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS HEADER.
*
* Copyright (c) 2016 Payara Foundation and/or its affiliates. All rights reserved.
* Copyright (c) 2016-2019 Payara Foundation and/or its affiliates. All rights reserved.
*
* The contents of this file are subject to the terms of either the GNU
* General Public License Version 2 only ("GPL") or the Common Development
Expand Down Expand Up @@ -39,6 +39,7 @@
*/
package fish.payara.micro.boot.runtime;

import com.sun.enterprise.glassfish.bootstrap.GlassFishImpl;
import com.sun.enterprise.module.bootstrap.ModuleStartup;
import java.util.Properties;
import org.glassfish.embeddable.CommandRunner;
Expand Down Expand Up @@ -74,19 +75,20 @@ public void start() throws GlassFishException {
}

@Override
public void stop() throws GlassFishException {
public synchronized void stop() throws GlassFishException {
if (status == Status.STOPPED || status == Status.STOPPING || status == Status.DISPOSED) {
throw new IllegalStateException("Already in " + status + " state.");
}

status = Status.STOPPING;
GlassFishImpl.sleepShutdownGracePeriod();
kernel.stop();
habitat.shutdown();
status = Status.STOPPED;
}

@Override
public void dispose() throws GlassFishException {
public synchronized void dispose() throws GlassFishException {
if (status == Status.DISPOSED) {
throw new IllegalStateException("Already disposed.");
} else if (status != Status.STOPPED) {
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -103,7 +103,8 @@ public enum RUNTIME_OPTION {
sslcert(true),
help(false),
enablesni(false),
hzpublicaddress(true);
hzpublicaddress(true),
shutdowngrace(true, new IntegerValidator(1, Integer.MAX_VALUE));

private RUNTIME_OPTION(boolean hasValue) {
this(hasValue, new Validator());
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -77,6 +77,7 @@
import org.glassfish.embeddable.GlassFishRuntime;
import com.sun.appserv.server.util.Version;
import com.sun.enterprise.glassfish.bootstrap.Constants;
import com.sun.enterprise.glassfish.bootstrap.GlassFishImpl;
import com.sun.enterprise.server.logging.ODLLogFormatter;
import fish.payara.micro.PayaraMicroRuntime;
import fish.payara.micro.boot.PayaraMicroBoot;
Expand Down Expand Up @@ -1382,6 +1383,9 @@ else if (requestTracing[0].matches("\\D+")) {
case hzpublicaddress:
publicAddress = value;
break;
case shutdowngrace:
System.setProperty(GlassFishImpl.PAYARA_SHUTDOWNGRACE_PROPERTY, value);
break;
default:
break;
}
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -37,7 +37,7 @@
* only if the new code is made subject to such option by the copyright
* holder.
*
* Portions Copyright [2017] Payara Foundation and/or affiliates
* Portions Copyright [2017-2019] Payara Foundation and/or affiliates
*/

package com.sun.enterprise.glassfish.bootstrap;
Expand All @@ -57,6 +57,8 @@

public class GlassFishImpl implements GlassFish {

public static final String PAYARA_SHUTDOWNGRACE_PROPERTY = "fish.payara.shutdowngrace";

private ModuleStartup gfKernel;
private ServiceLocator habitat;
volatile Status status = Status.INIT;
Expand Down Expand Up @@ -87,10 +89,24 @@ public synchronized void stop() throws GlassFishException {
throw new IllegalStateException("Already in " + status + " state.");
}
status = Status.STOPPING;
sleepShutdownGracePeriod();
gfKernel.stop();
status = Status.STOPPED;
}

public static void sleepShutdownGracePeriod() {
String shutdowngrace = System.getProperty(PAYARA_SHUTDOWNGRACE_PROPERTY);
if (shutdowngrace != null) {
try {
Thread.sleep(Integer.parseInt(shutdowngrace));
} catch (InterruptedException e) {
Thread.currentThread().interrupt();
} catch (NumberFormatException e) {
// no sleep, continue shutdown
}
}
}

public synchronized void dispose() throws GlassFishException {
if (status == Status.DISPOSED) {
throw new IllegalStateException("Already disposed.");
Expand Down

0 comments on commit 4195298

Please sign in to comment.