Emit error on service discovery failure 37/81937/2
authorFilip Krzywka <filip.krzywka@nokia.com>
Mon, 11 Mar 2019 12:52:55 +0000 (13:52 +0100)
committerFilip Krzywka <filip.krzywka@nokia.com>
Mon, 11 Mar 2019 13:21:34 +0000 (14:21 +0100)
- moved cbs-client exceptions to single API module

Change-Id: I1b0d45f231d39b600beebb7fad1ef2dba941dbad
Issue-ID: DCAEGEN2-1302
Signed-off-by: Filip Krzywka <filip.krzywka@nokia.com>
rest-services/cbs-client/src/main/java/org/onap/dcaegen2/services/sdk/rest/services/cbs/client/api/CbsClientFactory.java
rest-services/cbs-client/src/main/java/org/onap/dcaegen2/services/sdk/rest/services/cbs/client/api/exceptions/CbsClientException.java [new file with mode: 0644]
rest-services/cbs-client/src/main/java/org/onap/dcaegen2/services/sdk/rest/services/cbs/client/api/exceptions/ServiceLookupException.java [new file with mode: 0644]
rest-services/cbs-client/src/main/java/org/onap/dcaegen2/services/sdk/rest/services/cbs/client/api/exceptions/StreamParserError.java [moved from rest-services/cbs-client/src/main/java/org/onap/dcaegen2/services/sdk/rest/services/cbs/client/api/streams/StreamParserError.java with 98% similarity]
rest-services/cbs-client/src/main/java/org/onap/dcaegen2/services/sdk/rest/services/cbs/client/api/exceptions/StreamParsingException.java [moved from rest-services/cbs-client/src/main/java/org/onap/dcaegen2/services/sdk/rest/services/cbs/client/api/streams/StreamParsingException.java with 94% similarity]
rest-services/cbs-client/src/main/java/org/onap/dcaegen2/services/sdk/rest/services/cbs/client/api/streams/StreamParser.java
rest-services/cbs-client/src/main/java/org/onap/dcaegen2/services/sdk/rest/services/cbs/client/impl/CbsLookup.java
rest-services/cbs-client/src/test/java/org/onap/dcaegen2/services/sdk/rest/services/cbs/client/impl/CbsLookupTest.java

index f5bf0da..36589da 100644 (file)
@@ -42,6 +42,10 @@ public class CbsClientFactory {
      * This method will do a lookup of Config Binding Service using Consul as service discovery mechanism and create
      * client configured with found address. Created client will be published in returned Mono instance.
      * </p>
+     * <p>
+     * In case of failure during CBS resolution, returned Mono will emit error signal with possible cause.
+     * User is expected to handle this signal and possibly retry subscription to returned Mono.
+     * </p>
      *
      * @param env required environment properties
      * @return non-null {@link Mono} of {@link CbsClient} instance
diff --git a/rest-services/cbs-client/src/main/java/org/onap/dcaegen2/services/sdk/rest/services/cbs/client/api/exceptions/CbsClientException.java b/rest-services/cbs-client/src/main/java/org/onap/dcaegen2/services/sdk/rest/services/cbs/client/api/exceptions/CbsClientException.java
new file mode 100644 (file)
index 0000000..f6749eb
--- /dev/null
@@ -0,0 +1,29 @@
+/*
+ * ============LICENSE_START====================================
+ * DCAEGEN2-SERVICES-SDK
+ * =========================================================
+ * Copyright (C) 2019 Nokia. All rights reserved.
+ * =========================================================
+ * 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.
+ * ============LICENSE_END=====================================
+ */
+
+package org.onap.dcaegen2.services.sdk.rest.services.cbs.client.api.exceptions;
+
+import org.jetbrains.annotations.NotNull;
+
+public class CbsClientException extends RuntimeException {
+    CbsClientException(final @NotNull String message) {
+        super(message);
+    }
+}
diff --git a/rest-services/cbs-client/src/main/java/org/onap/dcaegen2/services/sdk/rest/services/cbs/client/api/exceptions/ServiceLookupException.java b/rest-services/cbs-client/src/main/java/org/onap/dcaegen2/services/sdk/rest/services/cbs/client/api/exceptions/ServiceLookupException.java
new file mode 100644 (file)
index 0000000..dfbcdd9
--- /dev/null
@@ -0,0 +1,27 @@
+/*
+ * ============LICENSE_START====================================
+ * DCAEGEN2-SERVICES-SDK
+ * =========================================================
+ * Copyright (C) 2019 Nokia. All rights reserved.
+ * =========================================================
+ * 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.
+ * ============LICENSE_END=====================================
+ */
+
+package org.onap.dcaegen2.services.sdk.rest.services.cbs.client.api.exceptions;
+
+public class ServiceLookupException extends CbsClientException {
+    public ServiceLookupException(String message) {
+        super(message);
+    }
+}
@@ -18,7 +18,7 @@
  * ============LICENSE_END=====================================
  */
 
-package org.onap.dcaegen2.services.sdk.rest.services.cbs.client.api.streams;
+package org.onap.dcaegen2.services.sdk.rest.services.cbs.client.api.exceptions;
 
 import org.onap.dcaegen2.services.sdk.rest.services.annotations.ExperimentalApi;
 
@@ -27,7 +27,7 @@ import org.onap.dcaegen2.services.sdk.rest.services.annotations.ExperimentalApi;
  * @since 1.1.2
  */
 @ExperimentalApi
-public class StreamParsingException extends RuntimeException {
+public class StreamParsingException extends CbsClientException {
 
     private final StreamParserError cause;
 
index f839343..9ba7047 100644 (file)
@@ -22,6 +22,8 @@ package org.onap.dcaegen2.services.sdk.rest.services.cbs.client.api.streams;
 
 import io.vavr.control.Either;
 import org.onap.dcaegen2.services.sdk.rest.services.annotations.ExperimentalApi;
+import org.onap.dcaegen2.services.sdk.rest.services.cbs.client.api.exceptions.StreamParserError;
+import org.onap.dcaegen2.services.sdk.rest.services.cbs.client.api.exceptions.StreamParsingException;
 import org.onap.dcaegen2.services.sdk.rest.services.cbs.client.api.listener.MerkleTree;
 import org.onap.dcaegen2.services.sdk.rest.services.cbs.client.model.streams.DataStream;
 
index 3c11d23..53d0bd3 100644 (file)
@@ -22,7 +22,10 @@ package org.onap.dcaegen2.services.sdk.rest.services.cbs.client.impl;
 
 import com.google.gson.JsonArray;
 import com.google.gson.JsonObject;
+
 import java.net.InetSocketAddress;
+
+import org.onap.dcaegen2.services.sdk.rest.services.cbs.client.api.exceptions.ServiceLookupException;
 import org.onap.dcaegen2.services.sdk.rest.services.cbs.client.model.EnvProperties;
 import org.onap.dcaegen2.services.sdk.rest.services.adapters.http.CloudHttpClient;
 import reactor.core.publisher.Mono;
@@ -58,7 +61,7 @@ public class CbsLookup {
 
     private Mono<JsonObject> firstService(JsonArray services) {
         return services.size() == 0
-                ? Mono.empty()
+                ? Mono.error(new ServiceLookupException("Consul server did not return any service with given name"))
                 : Mono.just(services.get(0).getAsJsonObject());
     }
 
@@ -69,4 +72,3 @@ public class CbsLookup {
     }
 
 }
-
index 77cfaf6..6843e0e 100644 (file)
@@ -31,6 +31,7 @@ import com.google.gson.JsonParser;
 import java.io.InputStreamReader;
 import java.net.InetSocketAddress;
 import org.junit.jupiter.api.Test;
+import org.onap.dcaegen2.services.sdk.rest.services.cbs.client.api.exceptions.ServiceLookupException;
 import org.onap.dcaegen2.services.sdk.rest.services.cbs.client.model.EnvProperties;
 import org.onap.dcaegen2.services.sdk.rest.services.adapters.http.CloudHttpClient;
 import org.onap.dcaegen2.services.sdk.rest.services.cbs.client.model.ImmutableEnvProperties;
@@ -65,7 +66,7 @@ class CbsLookupTest {
     }
 
     @Test
-    void lookupShouldReturnEmptyResultWhenServiceArrayIsEmpty() {
+    void lookupShouldEmitErrorWhenServiceArrayIsEmpty() {
         // given
         givenConsulResponse(new JsonArray());
 
@@ -73,7 +74,7 @@ class CbsLookupTest {
         final Mono<InetSocketAddress> result = cut.lookup(env);
 
         // then
-        StepVerifier.create(result).verifyComplete();
+        StepVerifier.create(result).verifyError(ServiceLookupException.class);
     }
 
     private JsonElement parseResource(String resource) {