private synchronized void stop() {
            LOG.info("Shutting down");
            if (stopped) {
                LOG.info("Already stopped");
                return;
            }

            if (MANUAL_DISCOVERY_STATUS.get()) {
                // Flag status as down.
                // that we can flag to return DOWN here (would that then update Discovery? or still be a delay?)
                serverStatusManager.localStatus(InstanceInfo.InstanceStatus.DOWN);
            }

            // Shutdown each of the client connections (blocks until complete).
            // NOTE: ClientConnectionsShutdown can also be configured to gracefully close connections when the
            // discovery status changes to DOWN. So if it has been configured that way, then this will be an additional
            // call to gracefullyShutdownClientChannels(), which will be a noop.
            clientConnectionsShutdown.gracefullyShutdownClientChannels().syncUninterruptibly();

            LOG.info("Shutting down event loops");
            List<EventLoopGroup> allEventLoopGroups = new ArrayList<>();
            allEventLoopGroups.add(clientToProxyBossPool);
            allEventLoopGroups.add(clientToProxyWorkerPool);
            for (EventLoopGroup group : allEventLoopGroups) {
                group.shutdownGracefully();
            }

            for (EventLoopGroup group : allEventLoopGroups) {
                try {
                    group.awaitTermination(20, TimeUnit.SECONDS);
                } catch (InterruptedException ie) {
                    LOG.warn("Interrupted while shutting down event loop");
                }
            }

            stopped = true;
            LOG.info("Done shutting down");
        }
A name for this ServerGroup to use in naming threads.
zuul-core/src/main/java/com/netflix/zuul/netty/server/Server.java