package org.onap.dmaap.datarouter.node;
-import java.util.*;
-import java.io.*;
+import com.att.eelf.configuration.EELFLogger;
+import com.att.eelf.configuration.EELFManager;
+import java.io.BufferedReader;
+import java.io.FileOutputStream;
+import java.io.FileReader;
+import java.io.OutputStream;
+import java.util.HashMap;
+import java.util.Map;
+import java.util.Timer;
/**
- * Track redirections of subscriptions
+ * Track redirections of subscriptions.
*/
public class RedirManager {
- private Hashtable<String, String> sid2primary = new Hashtable<String, String>();
- private Hashtable<String, String> sid2secondary = new Hashtable<String, String>();
- private String redirfile;
+
+ private static EELFLogger eelfLogger = EELFManager.getInstance().getLogger(RedirManager.class);
RateLimitedOperation op;
+ private HashMap<String, String> sid2primary = new HashMap<>();
+ private HashMap<String, String> sid2secondary = new HashMap<>();
+ private String redirfile;
/**
* Create a mechanism for maintaining subscription redirections.
*
- * @param redirfile The file to store the redirection information.
+ * @param redirfile The file to store the redirection information.
* @param mininterval The minimum number of milliseconds between writes to the redirection information file.
- * @param timer The timer thread used to run delayed file writes.
+ * @param timer The timer thread used to run delayed file writes.
*/
public RedirManager(String redirfile, long mininterval, Timer timer) {
this.redirfile = redirfile;
op = new RateLimitedOperation(mininterval, timer) {
public void run() {
try {
- StringBuffer sb = new StringBuffer();
- for (String s : sid2primary.keySet()) {
- sb.append(s).append(' ').append(sid2primary.get(s)).append(' ').append(sid2secondary.get(s)).append('\n');
+ StringBuilder sb = new StringBuilder();
+ for (Map.Entry<String, String> entry : sid2primary.entrySet()) {
+ String key = entry.getKey();
+ String value = entry.getValue();
+ sb.append(key).append(' ').append(value).append(' ')
+ .append(sid2secondary.get(key)).append('\n');
+ }
+ try (OutputStream os = new FileOutputStream(RedirManager.this.redirfile)) {
+ os.write(sb.toString().getBytes());
}
- OutputStream os = new FileOutputStream(RedirManager.this.redirfile);
- os.write(sb.toString().getBytes());
- os.close();
} catch (Exception e) {
+ eelfLogger.error("Exception", e);
}
}
};
try {
- String s;
- BufferedReader br = new BufferedReader(new FileReader(redirfile));
- while ((s = br.readLine()) != null) {
- s = s.trim();
- String[] sx = s.split(" ");
- if (s.startsWith("#") || sx.length != 3) {
- continue;
+ String line;
+ try (BufferedReader br = new BufferedReader(new FileReader(redirfile))) {
+ while ((line = br.readLine()) != null) {
+ addSubRedirInfo(line);
}
- sid2primary.put(sx[0], sx[1]);
- sid2secondary.put(sx[0], sx[2]);
}
- br.close();
} catch (Exception e) {
- // missing file is normal
+ eelfLogger.debug("Missing file is normal", e);
}
}
/**
- * Set up redirection. If a request is to be sent to subscription ID sid, and that is configured to go to URL primary, instead, go to secondary.
+ * Set up redirection. If a request is to be sent to subscription ID sid, and that is configured to go to URL
+ * primary, instead, go to secondary.
*
- * @param sid The subscription ID to be redirected
- * @param primary The URL associated with that subscription ID
+ * @param sid The subscription ID to be redirected
+ * @param primary The URL associated with that subscription ID
* @param secondary The replacement URL to use instead
*/
public synchronized void redirect(String sid, String primary, String secondary) {
/**
* Cancel redirection. If a request is to be sent to subscription ID sid, send it to its primary URL.
*
- * @param sid The subscription ID to remove from the table.
+ * @param sid The subscription ID to remove from the table.
*/
public synchronized void forget(String sid) {
sid2primary.remove(sid);
}
/**
- * Look up where to send a subscription. If the primary has changed or there is no redirection, use the primary. Otherwise, redirect to the secondary URL.
+ * Look up where to send a subscription. If the primary has changed or there is no redirection, use the primary.
+ * Otherwise, redirect to the secondary URL.
*
- * @param sid The subscription ID to look up.
- * @param primary The configured primary URL.
+ * @param sid The subscription ID to look up.
+ * @param primary The configured primary URL.
* @return The destination URL to really use.
*/
public synchronized String lookup(String sid, String primary) {
}
/**
- * Is a subscription redirected?
+ * Is a subscription redirected.
*/
public synchronized boolean isRedirected(String sid) {
return (sid != null && sid2secondary.get(sid) != null);
}
+
+ private void addSubRedirInfo(String subRedirInfo) {
+ subRedirInfo = subRedirInfo.trim();
+ String[] sx = subRedirInfo.split(" ");
+ if (subRedirInfo.startsWith("#") || sx.length != 3) {
+ return;
+ }
+ sid2primary.put(sx[0], sx[1]);
+ sid2secondary.put(sx[0], sx[2]);
+ }
}