X-Git-Url: https://git.opendaylight.org/gerrit/gitweb?p=controller.git;a=blobdiff_plain;f=opendaylight%2Fmd-sal%2Fsal-dom-xsql%2Fsrc%2Fmain%2Fjava%2Forg%2Fopendaylight%2Fcontroller%2Fmd%2Fsal%2Fdom%2Fxsql%2FXSQLAdapter.java;h=5f7cef5f053d9dc00adf5c42aeda3bf25e029974;hp=386d925b00d02de486500cab807d0d5ce865ea0f;hb=d0dc66335889ecec5dbc962a8604c3df96eca758;hpb=bcb714c3684edcb0afeac1e5649fcdeec4ee7fae diff --git a/opendaylight/md-sal/sal-dom-xsql/src/main/java/org/opendaylight/controller/md/sal/dom/xsql/XSQLAdapter.java b/opendaylight/md-sal/sal-dom-xsql/src/main/java/org/opendaylight/controller/md/sal/dom/xsql/XSQLAdapter.java index 386d925b00..5f7cef5f05 100644 --- a/opendaylight/md-sal/sal-dom-xsql/src/main/java/org/opendaylight/controller/md/sal/dom/xsql/XSQLAdapter.java +++ b/opendaylight/md-sal/sal-dom-xsql/src/main/java/org/opendaylight/controller/md/sal/dom/xsql/XSQLAdapter.java @@ -18,10 +18,7 @@ import java.util.Arrays; import java.util.Date; import java.util.LinkedList; import java.util.List; -import java.util.Map; -import java.util.Set; -import java.util.concurrent.ConcurrentHashMap; - +import javax.annotation.concurrent.GuardedBy; import org.opendaylight.controller.md.sal.common.api.data.LogicalDatastoreType; import org.opendaylight.controller.md.sal.dom.api.DOMDataBroker; import org.opendaylight.controller.md.sal.dom.api.DOMDataReadTransaction; @@ -31,6 +28,8 @@ import org.opendaylight.yangtools.yang.data.api.YangInstanceIdentifier; import org.opendaylight.yangtools.yang.model.api.Module; import org.opendaylight.yangtools.yang.model.api.SchemaContext; import org.opendaylight.yangtools.yang.model.api.SchemaContextListener; +import org.slf4j.Logger; +import org.slf4j.LoggerFactory; /** * @author Sharon Aicler(saichler@gmail.com) **/ @@ -39,6 +38,7 @@ import org.opendaylight.yangtools.yang.model.api.SchemaContextListener; */ @Deprecated public class XSQLAdapter extends Thread implements SchemaContextListener { + private static final Logger LOG = LoggerFactory.getLogger(XSQLAdapter.class); private static final int SLEEP = 10000; private static XSQLAdapter a = new XSQLAdapter(); @@ -46,26 +46,28 @@ public class XSQLAdapter extends Thread implements SchemaContextListener { private static String tmpDir = null; private static File xqlLog = null; public boolean stopped = false; - private List elementHosts = new ArrayList<>(); private String username; private String password; - private String transport = "tcp"; + private final String transport = "tcp"; private int reconnectTimeout; private int nThreads; private int qsize; - private String applicationName = "NQL Adapter"; - private Map elements = new ConcurrentHashMap<>(); + private final String applicationName = "NQL Adapter"; private StringBuffer lastInputString = new StringBuffer(); - private XSQLBluePrint bluePrint = new XSQLBluePrint(); private boolean toCsv = false; private String exportToFileName = null; - private XSQLThreadPool threadPool = new XSQLThreadPool(1, "Tasks", 2000); - private JDBCServer jdbcServer = new JDBCServer(this); + private final XSQLThreadPool threadPool = new XSQLThreadPool(1, "Tasks", 2000); + private final JDBCServer jdbcServer = new JDBCServer(this); private String pinningFile; private ServerSocket serverSocket = null; private DOMDataBroker domDataBroker = null; private static final String REFERENCE_FIELD_NAME = "reference"; + @GuardedBy("this") + private SchemaContext context; + @GuardedBy("this") + private XSQLBluePrint bluePrint = new XSQLBluePrint(); + private XSQLAdapter() { XSQLAdapter.log("Starting Adapter"); this.setDaemon(true); @@ -79,13 +81,13 @@ public class XSQLAdapter extends Thread implements SchemaContextListener { } - public void loadBluePrint(){ + public synchronized void loadBluePrint(){ try{ InputStream in = this.getClass().getClassLoader().getResourceAsStream("BluePrintCache.dat"); if(in!=null){ - this.bluePrint = XSQLBluePrint.load(in); + this.bluePrint = XSQLBluePrint.load(in); + in.close(); } - in.close(); }catch(Exception err){ err.printStackTrace(); } @@ -101,12 +103,12 @@ public class XSQLAdapter extends Thread implements SchemaContextListener { return xqlLog; } - public static void main(String args[]) { + public static void main(final String args[]) { XSQLAdapter adapter = new XSQLAdapter(); adapter.start(); } - public static void log(String str) { + public static void log(final String str) { try { if (l == null) { synchronized (XSQLAdapter.class) { @@ -124,7 +126,7 @@ public class XSQLAdapter extends Thread implements SchemaContextListener { } } - public static void log(Exception e) { + public static void log(final Exception e) { try { if (l == null) { synchronized (XSQLAdapter.class) { @@ -143,24 +145,25 @@ public class XSQLAdapter extends Thread implements SchemaContextListener { } @Override - public void onGlobalContextUpdated(SchemaContext context) { - Set modules = context.getModules(); - for (Module m : modules) { - if (XSQLODLUtils.createOpenDaylightCache(this.bluePrint, m)) { - this.addRootElement(m); - } - } + public synchronized void onGlobalContextUpdated(final SchemaContext context) { + this.bluePrint = null; + this.context = context; } - public void setDataBroker(DOMDataBroker ddb) { + public void setDataBroker(final DOMDataBroker ddb) { this.domDataBroker = ddb; } - public XSQLBluePrint getBluePrint() { - return this.bluePrint; + public synchronized XSQLBluePrint getBluePrint() { + if (bluePrint == null) { + LOG.warn("XSQL is not supported in production environments and will be removed in a future release"); + bluePrint = XSQLBluePrint.create(context); + } + + return bluePrint; } - public List collectModuleRoots(XSQLBluePrintNode table,LogicalDatastoreType type) { + public List collectModuleRoots(final XSQLBluePrintNode table,final LogicalDatastoreType type) { if (table.getParent().isModule()) { try { List result = new LinkedList<>(); @@ -188,7 +191,7 @@ public class XSQLAdapter extends Thread implements SchemaContextListener { return null; } - public void execute(JDBCResultSet rs) { + public void execute(final JDBCResultSet rs) { if(this.domDataBroker==null){ rs.setFinished(true); return; @@ -203,7 +206,7 @@ public class XSQLAdapter extends Thread implements SchemaContextListener { List tasks = new LinkedList<>(); for (Object entry : roots) { - NETask task = new NETask(rs, entry, main, bluePrint); + NETask task = new NETask(rs, entry, main, getBluePrint()); rs.numberOfTasks++; tasks.add(task); } @@ -212,6 +215,7 @@ public class XSQLAdapter extends Thread implements SchemaContextListener { } } + @Override public void run() { while (!stopped) { try { @@ -228,13 +232,7 @@ public class XSQLAdapter extends Thread implements SchemaContextListener { } } - public void addRootElement(Object o) { - NEEntry entry = new NEEntry(o); - elements.put(o.toString(), entry); - - } - - public void processCommand(StringBuffer inputString, PrintStream sout) { + public void processCommand(StringBuffer inputString, final PrintStream sout) { if (inputString.toString().trim().equals("r")) { sout.println(lastInputString); inputString = lastInputString; @@ -249,8 +247,7 @@ public class XSQLAdapter extends Thread implements SchemaContextListener { // sout.println("Excel Path="+excelPath01); } else if (input.startsWith("list vrel")) { String substr = input.substring("list vrel".length()).trim(); - XSQLBluePrintNode node = bluePrint - .getBluePrintNodeByTableName(substr); + XSQLBluePrintNode node = getBluePrint().getBluePrintNodeByTableName(substr); if (node == null) { sout.println("Unknown Interface " + substr); return; @@ -259,15 +256,14 @@ public class XSQLAdapter extends Thread implements SchemaContextListener { for (XSQLBluePrintRelation r : node.getRelations()) { fld.add(r.toString()); } - String p[] = (String[]) fld.toArray(new String[fld.size()]); + String p[] = fld.toArray(new String[fld.size()]); Arrays.sort(p); - for (int i = 0; i < p.length; i++) { - sout.println(p[i]); + for (String element : p) { + sout.println(element); } } else if (input.startsWith("list vfields")) { String substr = input.substring("list vfields".length()).trim(); - XSQLBluePrintNode node = bluePrint - .getBluePrintNodeByTableName(substr); + XSQLBluePrintNode node = getBluePrint().getBluePrintNodeByTableName(substr); if (node == null) { sout.println("Unknown Interface " + substr); return; @@ -276,10 +272,10 @@ public class XSQLAdapter extends Thread implements SchemaContextListener { for (XSQLColumn c : node.getColumns()) { fld.add(c.getName()); } - String p[] = (String[]) fld.toArray(new String[fld.size()]); + String p[] = fld.toArray(new String[fld.size()]); Arrays.sort(p); - for (int i = 0; i < p.length; i++) { - sout.println(p[i]); + for (String element : p) { + sout.println(element); } } else if (input.startsWith("jdbc")) { String addr = input.substring(5).trim(); @@ -289,12 +285,12 @@ public class XSQLAdapter extends Thread implements SchemaContextListener { // fetchSize = Integer.parseInt(input.substring(6).trim()); } else if (input.startsWith("list vtables")) { - String iNames[] = bluePrint.getAllTableNames().toArray( + String iNames[] = getBluePrint().getAllTableNames().toArray( new String[0]); Arrays.sort(iNames); sout.println(); - for (int i = 0; i < iNames.length; i++) { - sout.println(iNames[i]); + for (String iName : iNames) { + sout.println(iName); } } else if (input.equals("help") || input.equals("?")) { // sout.println(getLongDescription()); @@ -312,7 +308,7 @@ public class XSQLAdapter extends Thread implements SchemaContextListener { } catch (Exception err) { } } else if (input.equals("save")) { - XSQLBluePrint.save(this.bluePrint); + getBluePrint().save(); } else if (input.equals("tocsv")) { toCsv = !toCsv; sout.println("to csv file is " + toCsv); @@ -350,7 +346,7 @@ public class XSQLAdapter extends Thread implements SchemaContextListener { sout.println(); } - public void executeSql(String sql, PrintStream out) { + public void executeSql(final String sql, final PrintStream out) { JDBCResultSet rs = new JDBCResultSet(sql); try { int count = 0; @@ -460,14 +456,15 @@ public class XSQLAdapter extends Thread implements SchemaContextListener { private XSQLBluePrintNode main = null; private XSQLBluePrint bluePrint = null; - public NETask(JDBCResultSet _rs, Object _modelRoot, - XSQLBluePrintNode _main, XSQLBluePrint _bluePrint) { + public NETask(final JDBCResultSet _rs, final Object _modelRoot, + final XSQLBluePrintNode _main, final XSQLBluePrint _bluePrint) { this.rs = _rs; this.modelRoot = _modelRoot; this.main = _main; this.bluePrint = _bluePrint; } + @Override public void run() { rs.addRecords(modelRoot, main, true, main.getBluePrintNodeName(), bluePrint); @@ -481,27 +478,14 @@ public class XSQLAdapter extends Thread implements SchemaContextListener { } } - private static class NEEntry { - private Object ne = null; - - public NEEntry(Object _ne) { - this.ne = _ne; - } - - public String toString() { - Module m = (Module) ne; - return m.getName() + " [" + m.getNamespace().toString() + "]"; - } - } - private class TelnetConnection extends Thread { private Socket socket = null; private InputStream in = null; private PrintStream out = null; - private Module currentModule = null; + private final Module currentModule = null; - public TelnetConnection(Socket s) { + public TelnetConnection(final Socket s) { this.socket = s; try { this.in = s.getInputStream(); @@ -512,6 +496,7 @@ public class XSQLAdapter extends Thread implements SchemaContextListener { } } + @Override public void run() { StringBuffer inputString = new StringBuffer(); String prompt = "XSQL>";