From 28372c395644e7ff1f2b83b1dbb715732e45d563 Mon Sep 17 00:00:00 2001 From: Robert Varga Date: Fri, 13 Jan 2017 14:02:34 +0100 Subject: [PATCH] BUG-5222: do not use reflection on Optional Remove the horrible use of reflection to examine Optional returned from the data store. Also close the transaction properly. Change-Id: I8141263588552d0768b2d23ec58e157f723e3bf3 Signed-off-by: Robert Varga --- .../md/sal/dom/xsql/XSQLAdapter.java | 35 ++++++++++--------- .../md/sal/dom/xsql/XSQLODLUtils.java | 2 +- 2 files changed, 19 insertions(+), 18 deletions(-) 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 5f7cef5f05..cb0a704ec6 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 @@ -7,6 +7,7 @@ */ package org.opendaylight.controller.md.sal.dom.xsql; +import com.google.common.base.Optional; import java.io.File; import java.io.FileOutputStream; import java.io.InputStream; @@ -21,10 +22,11 @@ import java.util.List; 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; +import org.opendaylight.controller.md.sal.dom.api.DOMDataReadOnlyTransaction; import org.opendaylight.controller.md.sal.dom.xsql.jdbc.JDBCResultSet; import org.opendaylight.controller.md.sal.dom.xsql.jdbc.JDBCServer; import org.opendaylight.yangtools.yang.data.api.YangInstanceIdentifier; +import org.opendaylight.yangtools.yang.data.api.schema.NormalizedNode; import org.opendaylight.yangtools.yang.model.api.Module; import org.opendaylight.yangtools.yang.model.api.SchemaContext; import org.opendaylight.yangtools.yang.model.api.SchemaContextListener; @@ -61,7 +63,6 @@ public class XSQLAdapter extends Thread implements SchemaContextListener { private String pinningFile; private ServerSocket serverSocket = null; private DOMDataBroker domDataBroker = null; - private static final String REFERENCE_FIELD_NAME = "reference"; @GuardedBy("this") private SchemaContext context; @@ -163,24 +164,24 @@ public class XSQLAdapter extends Thread implements SchemaContextListener { return bluePrint; } - public List collectModuleRoots(final XSQLBluePrintNode table,final LogicalDatastoreType type) { + public List> collectModuleRoots(final XSQLBluePrintNode table,final LogicalDatastoreType type) { if (table.getParent().isModule()) { try { - List result = new LinkedList<>(); + List> result = new LinkedList<>(); YangInstanceIdentifier instanceIdentifier = YangInstanceIdentifier .builder() .node(XSQLODLUtils.getPath(table.getFirstFromSchemaNodes()).get(0)) .build(); - DOMDataReadTransaction t = this.domDataBroker + DOMDataReadOnlyTransaction t = this.domDataBroker .newReadOnlyTransaction(); - Object node = t.read(type, + Optional> node = t.read(type, instanceIdentifier).get(); + t.close(); - node = XSQLODLUtils.get(node, REFERENCE_FIELD_NAME); - if (node == null) { - return result; + if (node.isPresent()) { + result.add(node.get()); } - result.add(node); + return result; } catch (Exception err) { XSQLAdapter.log(err); @@ -197,7 +198,7 @@ public class XSQLAdapter extends Thread implements SchemaContextListener { return; } List tables = rs.getTables(); - List roots = collectModuleRoots(tables.get(0),LogicalDatastoreType.OPERATIONAL); + List> roots = collectModuleRoots(tables.get(0),LogicalDatastoreType.OPERATIONAL); roots.addAll(collectModuleRoots(tables.get(0),LogicalDatastoreType.CONFIGURATION)); if(roots.isEmpty()){ rs.setFinished(true); @@ -205,7 +206,7 @@ public class XSQLAdapter extends Thread implements SchemaContextListener { XSQLBluePrintNode main = rs.getMainTable(); List tasks = new LinkedList<>(); - for (Object entry : roots) { + for (NormalizedNode entry : roots) { NETask task = new NETask(rs, entry, main, getBluePrint()); rs.numberOfTasks++; tasks.add(task); @@ -451,12 +452,12 @@ public class XSQLAdapter extends Thread implements SchemaContextListener { public static class NETask implements Runnable { - private JDBCResultSet rs = null; - private Object modelRoot = null; - private XSQLBluePrintNode main = null; - private XSQLBluePrint bluePrint = null; + private final JDBCResultSet rs; + private final NormalizedNode modelRoot; + private final XSQLBluePrintNode main; + private final XSQLBluePrint bluePrint; - public NETask(final JDBCResultSet _rs, final Object _modelRoot, + public NETask(final JDBCResultSet _rs, final NormalizedNode _modelRoot, final XSQLBluePrintNode _main, final XSQLBluePrint _bluePrint) { this.rs = _rs; this.modelRoot = _modelRoot; diff --git a/opendaylight/md-sal/sal-dom-xsql/src/main/java/org/opendaylight/controller/md/sal/dom/xsql/XSQLODLUtils.java b/opendaylight/md-sal/sal-dom-xsql/src/main/java/org/opendaylight/controller/md/sal/dom/xsql/XSQLODLUtils.java index a42e47ba00..834e273168 100644 --- a/opendaylight/md-sal/sal-dom-xsql/src/main/java/org/opendaylight/controller/md/sal/dom/xsql/XSQLODLUtils.java +++ b/opendaylight/md-sal/sal-dom-xsql/src/main/java/org/opendaylight/controller/md/sal/dom/xsql/XSQLODLUtils.java @@ -209,7 +209,7 @@ public class XSQLODLUtils { } - public static Object get(final Object o, final String name) { + private static Object get(final Object o, final String name) { try { Class c = o.getClass(); Field f = findField(c, name); -- 2.36.6