Revert "Creating a registry for gRPC services, early version restarts on each modification of the set of services."

This reverts commit 2d69ca1c88b3b86800aac0a453be33838ff39c1c.

Change-Id: I6236393929ba43eb98e139766f0c2377f47ff3a5
diff --git a/incubator/api/BUCK b/incubator/api/BUCK
index c606814..eb7b036 100644
--- a/incubator/api/BUCK
+++ b/incubator/api/BUCK
@@ -1,7 +1,6 @@
 COMPILE_DEPS = [
     '//lib:CORE_DEPS',
     '//lib:JACKSON',
-    '//lib:grpc-core'
 ]
 
 TEST_DEPS = [
diff --git a/incubator/api/pom.xml b/incubator/api/pom.xml
index 391ad3a..fe86161 100644
--- a/incubator/api/pom.xml
+++ b/incubator/api/pom.xml
@@ -43,11 +43,6 @@
             <artifactId>easymock</artifactId>
             <scope>test</scope>
         </dependency>
-        <dependency>
-            <groupId>io.grpc</groupId>
-            <artifactId>grpc-core</artifactId>
-            <version>1.2.0</version>
-        </dependency>
     </dependencies>
 
 </project>
diff --git a/incubator/api/src/main/java/org/onosproject/incubator/grpc/GrpcServiceRegistry.java b/incubator/api/src/main/java/org/onosproject/incubator/grpc/GrpcServiceRegistry.java
deleted file mode 100644
index 0e33f2f..0000000
--- a/incubator/api/src/main/java/org/onosproject/incubator/grpc/GrpcServiceRegistry.java
+++ /dev/null
@@ -1,50 +0,0 @@
-/*
- * Copyright 2017-present Open Networking Foundation
- *
- * Licensed under the Apache License, Version 2.0 (the "License");
- * you may not use this file except in compliance with the License.
- * You may obtain a copy of the License at
- *
- *     http://www.apache.org/licenses/LICENSE-2.0
- *
- * Unless required by applicable law or agreed to in writing, software
- * distributed under the License is distributed on an "AS IS" BASIS,
- * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
- * See the License for the specific language governing permissions and
- * limitations under the License.
- */
-
-package org.onosproject.incubator.grpc;
-
-import io.grpc.BindableService;
-
-/**
- * A service that allows for de/registration of gRPC services, and determining
- * whether a service is present.
- */
-public interface GrpcServiceRegistry {
-    /**
-     * Register a gRPC service with this registry.
-     * @param service the service to be registered
-     * @return true if the service was added and server successfully started,
-     * false otherwise
-     */
-    boolean register(BindableService service);
-
-    /**
-     * Unregister a gRPC service with this registry.
-     * @param service the service to be unregistered
-     * @return true if the service was removed and the server successfully
-     * started, false otherwise
-     */
-    boolean unregister(BindableService service);
-
-    /**
-     * Checks if an instance of the  provided serviceClass is currently
-     * registered with this registry.
-     * @param serviceClass the class being queries
-     * @return true if an instance of this specified class has been registered,
-     * false otherwise
-     */
-    boolean containsService(Class<BindableService> serviceClass);
-}
diff --git a/incubator/api/src/main/java/org/onosproject/incubator/grpc/package-info.java b/incubator/api/src/main/java/org/onosproject/incubator/grpc/package-info.java
deleted file mode 100644
index eac386d..0000000
--- a/incubator/api/src/main/java/org/onosproject/incubator/grpc/package-info.java
+++ /dev/null
@@ -1,20 +0,0 @@
-/*
- * Copyright 2017-present Open Networking Foundation
- *
- * Licensed under the Apache License, Version 2.0 (the "License");
- * you may not use this file except in compliance with the License.
- * You may obtain a copy of the License at
- *
- *     http://www.apache.org/licenses/LICENSE-2.0
- *
- * Unless required by applicable law or agreed to in writing, software
- * distributed under the License is distributed on an "AS IS" BASIS,
- * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
- * See the License for the specific language governing permissions and
- * limitations under the License.
- */
-
-/**
- * Abstractions for interacting with the gRPC subsystem.
- */
-package org.onosproject.incubator.grpc;
diff --git a/incubator/protobuf/pom.xml b/incubator/protobuf/pom.xml
index 5d2c530..303c1ee 100644
--- a/incubator/protobuf/pom.xml
+++ b/incubator/protobuf/pom.xml
@@ -16,18 +16,6 @@
   -->
 <project xmlns="http://maven.apache.org/POM/4.0.0" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd">
     <modelVersion>4.0.0</modelVersion>
-    <build>
-        <plugins>
-            <plugin>
-                <groupId>org.apache.maven.plugins</groupId>
-                <artifactId>maven-compiler-plugin</artifactId>
-                <configuration>
-                    <source>1.8</source>
-                    <target>1.8</target>
-                </configuration>
-            </plugin>
-        </plugins>
-    </build>
     <parent>
         <artifactId>onos-incubator-grpc-dependencies</artifactId>
         <groupId>org.onosproject</groupId>
@@ -66,17 +54,6 @@
             <scope>provided</scope>
         </dependency>
 
-        <dependency>
-            <groupId>org.onosproject</groupId>
-            <artifactId>onos-incubator-api</artifactId>
-            <version>${project.version}</version>
-        </dependency>
-        <dependency>
-            <groupId>org.osgi</groupId>
-            <artifactId>org.osgi.compendium</artifactId>
-            <scope>compile</scope>
-        </dependency>
-
     </dependencies>
 
     <modules>
diff --git a/incubator/protobuf/src/main/java/org/onosproject/incubator/protobuf/net/GrpcServiceRegistryImpl.java b/incubator/protobuf/src/main/java/org/onosproject/incubator/protobuf/net/GrpcServiceRegistryImpl.java
deleted file mode 100644
index 5716926..0000000
--- a/incubator/protobuf/src/main/java/org/onosproject/incubator/protobuf/net/GrpcServiceRegistryImpl.java
+++ /dev/null
@@ -1,207 +0,0 @@
-/*
- * Copyright 2017-present Open Networking Laboratory
- *
- * Licensed under the Apache License, Version 2.0 (the "License");
- * you may not use this file except in compliance with the License.
- * You may obtain a copy of the License at
- *
- *     http://www.apache.org/licenses/LICENSE-2.0
- *
- * Unless required by applicable law or agreed to in writing, software
- * distributed under the License is distributed on an "AS IS" BASIS,
- * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
- * See the License for the specific language governing permissions and
- * limitations under the License.
- */
-
-package org.onosproject.incubator.protobuf.net;
-
-import com.google.common.collect.Maps;
-import io.grpc.BindableService;
-import io.grpc.Server;
-import io.grpc.ServerBuilder;
-import org.apache.felix.scr.annotations.Activate;
-import org.apache.felix.scr.annotations.Component;
-import org.apache.felix.scr.annotations.Deactivate;
-import org.apache.felix.scr.annotations.Modified;
-import org.apache.felix.scr.annotations.Property;
-import org.apache.felix.scr.annotations.Service;
-import org.onosproject.incubator.grpc.GrpcServiceRegistry;
-import org.osgi.service.component.ComponentContext;
-import org.slf4j.Logger;
-import org.slf4j.LoggerFactory;
-
-import java.io.IOException;
-import java.util.Dictionary;
-import java.util.Map;
-import java.util.concurrent.ConcurrentMap;
-import java.util.concurrent.TimeUnit;
-import java.util.concurrent.atomic.AtomicBoolean;
-import java.util.function.BiFunction;
-import java.util.function.Function;
-
-import static org.onlab.util.Tools.get;
-
-/**
- * A basic implementation of {@link GrpcServiceRegistry} designed for use with
- * built in gRPC services.
- *
- * NOTE: this is an early implementation in which the addition of any new
- * service forces a restart of the server, this is sufficient for testing but
- * inappropriate for deployment.
- */
-@Service
-@Component(immediate = false)
-public class GrpcServiceRegistryImpl implements GrpcServiceRegistry {
-
-    private static final int DEFAULT_SERVER_PORT = 64000;
-    private static final int DEFAULT_SHUTDOWN_TIME = 1;
-    private static final AtomicBoolean servicesModifiedSinceStart = new AtomicBoolean(false);
-
-    private static final String PORT_PROPERTY_NAME = "listeningPort";
-
-    private final Map<Class<? extends BindableService>, BindableService> registeredServices =
-            Maps.newHashMap();
-    private final Logger log = LoggerFactory.getLogger(getClass());
-
-    private Server server;
-
-    /* It is currently the responsibility of the administrator to notify
-    clients of nonstandard port usage as there is no mechanism available to
-    discover the port hosting gRPC services.
-     */
-    @Property(name = PORT_PROPERTY_NAME, intValue = DEFAULT_SERVER_PORT,
-             label = "The port number which ONOS will use to host gRPC services.")
-    private int listeningPort = DEFAULT_SERVER_PORT;
-
-    @Activate
-    public void activate() {
-        log.info("Started");
-    }
-
-    @Deactivate
-    public void deactivate() {
-        attemptGracefulShutdownThenForce(DEFAULT_SHUTDOWN_TIME);
-        log.info("Stopped");
-    }
-
-    @Modified
-    public void modified(ComponentContext context) {
-        if (context != null) {
-            setProperties(context);
-        }
-        log.info("Connection was restarted to allow service to be added, " +
-                         "this is a temporary workaround");
-        restartServer(listeningPort);
-    }
-
-    @Override
-    public boolean register(BindableService service) {
-        synchronized (registeredServices) {
-            if (!registeredServices.containsKey(service.getClass())) {
-                registeredServices.put(service.getClass(), service);
-            } else {
-                log.warn("The specified class \"{}\" was not added because an " +
-                                 "instance of the class is already registered.",
-                         service.getClass().toString());
-                return false;
-            }
-        }
-        return restartServer(listeningPort);
-    }
-
-    @Override
-    public boolean unregister(BindableService service) {
-        synchronized (registeredServices) {
-            if (registeredServices.containsKey(service.getClass())) {
-                registeredServices.remove(service.getClass());
-            } else {
-                log.warn("The specified class \"{}\" was not removed because it " +
-                                 "was not present.", service.getClass().toString());
-                return false;
-            }
-        }
-        return restartServer(listeningPort);
-    }
-
-    @Override
-    public boolean containsService(Class<BindableService> serviceClass) {
-        return registeredServices.containsKey(serviceClass);
-    }
-
-    private void setProperties(ComponentContext context) {
-        Dictionary<String, Object> properties = context.getProperties();
-        String listeningPort = get(properties, PORT_PROPERTY_NAME);
-        this.listeningPort = listeningPort == null ? DEFAULT_SERVER_PORT :
-                Integer.parseInt(listeningPort.trim());
-    }
-
-    /**
-     * Attempts a graceful shutdown allowing {@code timeLimitSeconds} to elapse
-     * before forcing a shutdown.
-     *
-     * @param timeLimitSeconds time before a shutdown is forced in seconds
-     * @return true if the server is terminated, false otherwise
-     */
-    private boolean attemptGracefulShutdownThenForce(int timeLimitSeconds) {
-        if (!server.isShutdown()) {
-            server.shutdown();
-        }
-        try {
-            /*This is not conditional in case the server is shutdown but
-            handling requests submitted before shutdown was called.*/
-            server.awaitTermination(timeLimitSeconds, TimeUnit.SECONDS);
-        } catch (InterruptedException e) {
-            log.error("Awaiting server termination failed with error {}",
-                      e.getMessage());
-        }
-        if (!server.isTerminated()) {
-            server.shutdownNow();
-            try {
-                server.awaitTermination(10, TimeUnit.MILLISECONDS);
-            } catch (InterruptedException e) {
-                log.error("Server failed to terminate as expected with error" +
-                                  " {}", e.getMessage());
-            }
-        }
-        return server.isTerminated();
-    }
-
-    private boolean restartServer(int port) {
-        if (!attemptGracefulShutdownThenForce(DEFAULT_SHUTDOWN_TIME)) {
-            log.error("Shutdown failed, the previous server may still be" +
-                              " active.");
-        }
-        return createServerAndStart(port);
-    }
-
-    /**
-     * Creates a server with the set of registered services on the specified
-     * port.
-     *
-     * @param port the port on which this server will listen
-     * @return true if the server was started successfully, false otherwise
-     */
-    private boolean createServerAndStart(int port) {
-
-        ServerBuilder serverBuilder =
-                ServerBuilder.forPort(port);
-        synchronized (registeredServices) {
-            registeredServices.values().forEach(
-                    service -> serverBuilder.addService(service));
-        }
-        server = serverBuilder.build();
-        try {
-            server.start();
-        } catch (IllegalStateException e) {
-            log.error("The server could not be started because an existing " +
-                              "server is already running: {}", e.getMessage());
-            return false;
-        } catch (IOException e) {
-            log.error("The server could not be started due to a failure to " +
-                              "bind: {} ", e.getMessage());
-            return false;
-        }
-        return true;
-    }
-}
diff --git a/lib/BUCK b/lib/BUCK
index 77dc5bf..ce7e0a6 100644
--- a/lib/BUCK
+++ b/lib/BUCK
@@ -1,4 +1,4 @@
-# ***** This file was auto-generated at Fri, 25 Aug 2017 00:23:12 GMT. Do not edit this file manually. *****
+# ***** This file was auto-generated at Thu, 24 Aug 2017 21:35:03 GMT. Do not edit this file manually. *****
 # ***** Use onos-lib-gen *****
 
 pass_thru_pom(
@@ -910,42 +910,6 @@
 )
 
 remote_jar (
-  name = 'catalyst-concurrent',
-  out = 'catalyst-concurrent-1.2.0.jar',
-  url = 'mvn:io.atomix.catalyst:catalyst-concurrent:jar:1.2.0',
-  sha1 = 'ba91527a1c0a68c8f46cc591ef0dded3d2d0c298',
-  maven_coords = 'io.atomix.catalyst:catalyst-concurrent:1.2.0',
-  visibility = [ 'PUBLIC' ],
-)
-
-remote_jar (
-  name = 'catalyst-netty',
-  out = 'catalyst-netty-1.2.0.jar',
-  url = 'mvn:io.atomix.catalyst:catalyst-netty:jar:1.2.0',
-  sha1 = 'abb694b6fe835eb66d30ae6979ec0f7e4ac2e738',
-  maven_coords = 'io.atomix.catalyst:catalyst-netty:1.2.0',
-  visibility = [ 'PUBLIC' ],
-)
-
-remote_jar (
-  name = 'catalyst-transport',
-  out = 'catalyst-transport-1.2.0.jar',
-  url = 'mvn:io.atomix.catalyst:catalyst-transport:jar:1.2.0',
-  sha1 = '1469017e168a5e611fa4c251273184a763e0cd7f',
-  maven_coords = 'io.atomix.catalyst:catalyst-transport:1.2.0',
-  visibility = [ 'PUBLIC' ],
-)
-
-remote_jar (
-  name = 'grpc-core',
-  out = 'grpc-core-1.2.0.jar',
-  url = 'mvn:io.grpc:grpc-core:jar:1.2.0',
-  sha1 = 'f12a213e2b59a0615df2cc9bed35dc15fd2fee37',
-  maven_coords = 'io.grpc:grpc-core:jar:NON-OSGI:1.2.0',
-  visibility = [ 'PUBLIC' ],
-)
-
-remote_jar (
   name = 'objenesis',
   out = 'objenesis-2.2.jar',
   url = 'mvn:org.objenesis:objenesis:jar:2.2',
diff --git a/lib/deps.json b/lib/deps.json
index 74e4b1e..640f630 100644
--- a/lib/deps.json
+++ b/lib/deps.json
@@ -196,10 +196,6 @@
     "netty-resolver": "mvn:io.netty:netty-resolver:4.1.8.Final",
     "netty-codec-http2": "mvn:io.netty:netty-codec-http2:4.1.8.Final",
     "netty-codec-http": "mvn:io.netty:netty-codec-http:4.1.8.Final",
-    "catalyst-concurrent": "mvn:io.atomix.catalyst:catalyst-concurrent:1.2.0",
-    "catalyst-netty": "mvn:io.atomix.catalyst:catalyst-netty:1.2.0",
-    "catalyst-transport": "mvn:io.atomix.catalyst:catalyst-transport:1.2.0",
-    "grpc-core": "mvn:io.grpc:grpc-core:1.2.0",
     "objenesis": "mvn:org.objenesis:objenesis:2.2",
     "openflowj": "mvn:org.onosproject:openflowj:3.2.0.onos",
     "org.apache.felix.scr": "mvn:org.apache.felix:org.apache.felix.scr:1.8.2",