X-Git-Url: https://gerrit.onap.org/r/gitweb?a=blobdiff_plain;f=datarouter-prov%2Fsrc%2Fmain%2Fjava%2Forg%2Fonap%2Fdmaap%2Fdatarouter%2Fprovisioning%2FPoker.java;fp=datarouter-prov%2Fsrc%2Fmain%2Fjava%2Forg%2Fonap%2Fdmaap%2Fdatarouter%2Fprovisioning%2FPoker.java;h=f2c511c1eb68fc8a71afca438401dcc1ed78f5ee;hb=e06737d701ff5b3dcab311f4337ce40be52c966e;hp=4250624b442ed3006a4d9fb4ca0c40ee59e7f40b;hpb=49fbf9a09d244bbdc19783d9ff10cd03cd89640a;p=dmaap%2Fdatarouter.git diff --git a/datarouter-prov/src/main/java/org/onap/dmaap/datarouter/provisioning/Poker.java b/datarouter-prov/src/main/java/org/onap/dmaap/datarouter/provisioning/Poker.java index 4250624b..f2c511c1 100644 --- a/datarouter-prov/src/main/java/org/onap/dmaap/datarouter/provisioning/Poker.java +++ b/datarouter-prov/src/main/java/org/onap/dmaap/datarouter/provisioning/Poker.java @@ -23,9 +23,7 @@ package org.onap.dmaap.datarouter.provisioning; -import java.io.FileInputStream; import java.io.IOException; -import java.io.InputStream; import java.net.HttpURLConnection; import java.net.InetAddress; import java.net.MalformedURLException; @@ -34,14 +32,11 @@ import java.net.UnknownHostException; import java.util.Arrays; import java.util.HashSet; import java.util.Map; -import java.util.Properties; import java.util.Set; import java.util.Timer; import java.util.TimerTask; import java.util.TreeSet; -import javax.servlet.ServletException; - import org.apache.log4j.Logger; import org.json.JSONException; import org.json.JSONObject; @@ -56,84 +51,92 @@ import org.onap.dmaap.datarouter.provisioning.beans.Subscription; import org.onap.dmaap.datarouter.provisioning.utils.*; /** - * This class handles the two timers (described in R1 Design Notes), and takes care of issuing - * the GET to each node of the URL to "poke". + * This class handles the two timers (described in R1 Design Notes), and takes care of issuing the GET to each node of + * the URL to "poke". * * @author Robert Eby * @version $Id: Poker.java,v 1.11 2014/01/08 16:13:47 eby Exp $ */ public class Poker extends TimerTask { - /** Template used to generate the URL to issue the GET against */ - public static final String POKE_URL_TEMPLATE = "http://%s/internal/fetchProv"; - - + /** + * Template used to generate the URL to issue the GET against + */ + private static final String POKE_URL_TEMPLATE = "http://%s/internal/fetchProv"; - /** This is a singleton -- there is only one Poker object in the server */ - private static Poker p; + /** + * This is a singleton -- there is only one Poker object in the server + */ + private static Poker poker; /** * Get the singleton Poker object. + * * @return the Poker */ public static synchronized Poker getPoker() { - if (p == null) - p = new Poker(); - return p; + if (poker == null) { + poker = new Poker(); + } + return poker; } private long timer1; private long timer2; - private Timer rolex; - private String this_pod; // DNS name of this machine + private String thisPod; // DNS name of this machine private Logger logger; - private String provstring; + private String provString; private Poker() { timer1 = timer2 = 0; - rolex = new Timer(); + Timer rolex = new Timer(); logger = Logger.getLogger("org.onap.dmaap.datarouter.provisioning.internal"); try { - this_pod = InetAddress.getLocalHost().getHostName(); + thisPod = InetAddress.getLocalHost().getHostName(); } catch (UnknownHostException e) { - this_pod = "*UNKNOWN*"; // not a major problem + thisPod = "*UNKNOWN*"; // not a major problem } - provstring = buildProvisioningString(); + provString = buildProvisioningString(); rolex.scheduleAtFixedRate(this, 0L, 1000L); // Run once a second to check the timers } /** * This method sets the two timers described in the design notes. - * @param t1 the first timer controls how long to wait after a provisioning request before poking each node - * This timer can be reset if it has not "gone off". + * + * @param t1 the first timer controls how long to wait after a provisioning request before poking each node This + * timer can be reset if it has not "gone off". * @param t2 the second timer set the outer bound on how long to wait. It cannot be reset. */ public void setTimers(long t1, long t2) { - synchronized (this_pod) { - if (timer1 == 0 || t1 > timer1) + synchronized (thisPod) { + if (timer1 == 0 || t1 > timer1) { timer1 = t1; - if (timer2 == 0) + } + if (timer2 == 0) { timer2 = t2; + } } - if (logger.isDebugEnabled()) + if (logger.isDebugEnabled()) { logger.debug("Poker timers set to " + timer1 + " and " + timer2); + } } /** * Return the last provisioning string built. + * * @return the last provisioning string built. */ public String getProvisioningString() { - return provstring; + return provString; } /** - * The method to run at the predefined interval (once per second). This method checks - * to see if either of the two timers has expired, and if so, will rebuild the provisioning - * string, and poke all the nodes and other PODs. The timers are then reset to 0. + * The method to run at the predefined interval (once per second). This method checks to see if either of the two + * timers has expired, and if so, will rebuild the provisioning string, and poke all the nodes and other PODs. The + * timers are then reset to 0. */ @Override public void run() { @@ -141,62 +144,61 @@ public class Poker extends TimerTask { if (timer1 > 0) { long now = System.currentTimeMillis(); boolean fire = false; - synchronized (this_pod) { + synchronized (thisPod) { if (now > timer1 || now > timer2) { timer1 = timer2 = 0; fire = true; } } if (fire) { - // Rebuild the prov string - provstring = buildProvisioningString(); - - // Only the active POD should poke nodes, etc. - boolean active = SynchronizerTask.getSynchronizer().isActive(); - if (active) { - // Poke all the DR nodes - for (String n : BaseServlet.getNodes()) { - pokeNode(n); - } - // Poke the pod that is not us - for (String n : BaseServlet.getPods()) { - if (n.length() > 0 && !n.equals(this_pod)) - pokeNode(n); - } - } + pokeNodes(); } } } catch (Exception e) { - logger.warn("PROV0020: Caught exception in Poker: "+e); + logger.warn("PROV0020: Caught exception in Poker: " + e); e.printStackTrace(); } } - private void pokeNode(final String nodename) { - logger.debug("PROV0012 Poking node " + nodename + " ..."); - Runnable r = new Runnable() { - @Override - public void run() { - try { - String u = String.format(POKE_URL_TEMPLATE, nodename+":"+DB.HTTP_PORT); - URL url = new URL(u); - HttpURLConnection conn = (HttpURLConnection) url.openConnection(); - conn.setConnectTimeout(60000); //Fixes for Itrack DATARTR-3, poke timeout - conn.connect(); - conn.getContentLength(); // Force the GET through - conn.disconnect(); - } catch (MalformedURLException e) { - logger.warn("PROV0013 MalformedURLException Error poking node "+nodename+": " + e.getMessage()); - } catch (IOException e) { - logger.warn("PROV0013 IOException Error poking node "+nodename+": " + e.getMessage()); + private void pokeNodes() { + // Rebuild the prov string + provString = buildProvisioningString(); + // Only the active POD should poke nodes, etc. + boolean active = SynchronizerTask.getSynchronizer().isActive(); + if (active) { + // Poke all the DR nodes + for (String n : BaseServlet.getNodes()) { + pokeNode(n); + } + // Poke the pod that is not us + for (String n : BaseServlet.getPods()) { + if (n.length() > 0 && !n.equals(thisPod)) { + pokeNode(n); } } + } + } + + private void pokeNode(final String nodename) { + logger.debug("PROV0012 Poking node " + nodename + " ..."); + String nodeUrl = String.format(POKE_URL_TEMPLATE, nodename + ":" + DB.HTTP_PORT); + Runnable r = () -> { + try { + URL url = new URL(nodeUrl); + HttpURLConnection conn = (HttpURLConnection) url.openConnection(); + conn.setConnectTimeout(60000); //Fixes for Itrack DATARTR-3, poke timeout + conn.connect(); + conn.getContentLength(); // Force the GET through + conn.disconnect(); + } catch (MalformedURLException e) { + logger.warn("PROV0013 MalformedURLException Error poking node at " + nodeUrl + " : " + e.getMessage()); + } catch (IOException e) { + logger.warn("PROV0013 IOException Error poking node at " + nodeUrl + " : " + e.getMessage()); + } }; -// Thread t = new Thread(r); -// t.start(); r.run(); } - @SuppressWarnings("unused") + private String buildProvisioningString() { StringBuilder sb = new StringBuilder("{\n"); @@ -220,14 +222,14 @@ public class Poker extends TimerTask { } sb.append("\n],\n"); - // Append Subscriptions to the string pfx = "\n"; sb.append("\"subscriptions\": ["); for (Subscription s : Subscription.getAllSubscriptions()) { sb.append(pfx); - if(s!=null) - sb.append(s.asJSONObject().toString()); + if (s != null) { + sb.append(s.asJSONObject().toString()); + } pfx = ",\n"; } sb.append("\n],\n"); @@ -235,11 +237,12 @@ public class Poker extends TimerTask { // Append Parameters to the string pfx = "\n"; sb.append("\"parameters\": {"); - Map props = Parameters.getParameters(); + Map props = Parameters.getParameters(); Set ivals = new HashSet(); String intv = props.get("_INT_VALUES"); - if (intv != null) + if (intv != null) { ivals.addAll(Arrays.asList(intv.split("\\|"))); + } for (String key : new TreeSet(props.keySet())) { String v = props.get(key); sb.append(pfx); @@ -279,7 +282,7 @@ public class Poker extends TimerTask { for (EgressRoute eg : EgressRoute.getAllEgressRoutes()) { sb.append(pfx); String t = eg.asJSONObject().toString(); - t = t.substring(1, t.length()-1); + t = t.substring(1, t.length() - 1); sb.append(t); pfx = ",\n"; } @@ -296,14 +299,15 @@ public class Poker extends TimerTask { sb.append("\n}"); // Convert to string and verify it is valid JSON - String provstring = sb.toString(); + String tempProvString = sb.toString(); try { - new JSONObject(new JSONTokener(provstring)); + new JSONObject(new JSONTokener(tempProvString)); } catch (JSONException e) { - logger.warn("PROV0016: Possible invalid prov string: "+e); + logger.warn("PROV0016: Possible invalid prov string: " + e); } - return provstring; + return tempProvString; } + private String quote(String s) { StringBuilder sb = new StringBuilder(); for (char ch : s.toCharArray()) {