Committed by
Gerrit Code Review
ONOS-3839 Fixing errors in sending requests and hanging on future.join
Change-Id: I6da5bf1ff728efeb0d531cf7f04f6bf49f11a0a9
Showing
4 changed files
with
44 additions
and
20 deletions
... | @@ -52,10 +52,11 @@ public class NetconfControllerConfig extends AbstractHandlerBehaviour | ... | @@ -52,10 +52,11 @@ public class NetconfControllerConfig extends AbstractHandlerBehaviour |
52 | Preconditions.checkNotNull(controller, "Netconf controller is null"); | 52 | Preconditions.checkNotNull(controller, "Netconf controller is null"); |
53 | List<ControllerInfo> controllers = new ArrayList<>(); | 53 | List<ControllerInfo> controllers = new ArrayList<>(); |
54 | try { | 54 | try { |
55 | + String reply = controller.getDevicesMap().get(ofDeviceId).getSession(). | ||
56 | + getConfig("running"); | ||
57 | + log.debug("Reply XML {}", reply); | ||
55 | controllers.addAll(XmlConfigParser.parseStreamControllers(XmlConfigParser. | 58 | controllers.addAll(XmlConfigParser.parseStreamControllers(XmlConfigParser. |
56 | - loadXml(new ByteArrayInputStream(controller. | 59 | + loadXml(new ByteArrayInputStream(reply.getBytes(StandardCharsets.UTF_8))))); |
57 | - getDevicesMap().get(ofDeviceId).getSession(). | ||
58 | - getConfig("running").getBytes(StandardCharsets.UTF_8))))); | ||
59 | } catch (IOException e) { | 60 | } catch (IOException e) { |
60 | log.error("Cannot comunicate to device {} ", ofDeviceId); | 61 | log.error("Cannot comunicate to device {} ", ofDeviceId); |
61 | } | 62 | } |
... | @@ -70,16 +71,15 @@ public class NetconfControllerConfig extends AbstractHandlerBehaviour | ... | @@ -70,16 +71,15 @@ public class NetconfControllerConfig extends AbstractHandlerBehaviour |
70 | Preconditions.checkNotNull(controller, "Netconf controller is null"); | 71 | Preconditions.checkNotNull(controller, "Netconf controller is null"); |
71 | try { | 72 | try { |
72 | NetconfDevice device = controller.getNetconfDevice(deviceId); | 73 | NetconfDevice device = controller.getNetconfDevice(deviceId); |
73 | - log.warn("provider map {}", controller.getDevicesMap()); | ||
74 | String config = null; | 74 | String config = null; |
75 | + | ||
75 | try { | 76 | try { |
77 | + String reply = device.getSession().getConfig("running"); | ||
78 | + log.info("reply XML {}", reply); | ||
76 | config = XmlConfigParser.createControllersConfig( | 79 | config = XmlConfigParser.createControllersConfig( |
77 | XmlConfigParser.loadXml(getClass().getResourceAsStream("controllers.xml")), | 80 | XmlConfigParser.loadXml(getClass().getResourceAsStream("controllers.xml")), |
78 | XmlConfigParser.loadXml( | 81 | XmlConfigParser.loadXml( |
79 | - new ByteArrayInputStream(device.getSession() | 82 | + new ByteArrayInputStream(reply.getBytes(StandardCharsets.UTF_8))), |
80 | - .getConfig("running") | ||
81 | - .getBytes( | ||
82 | - StandardCharsets.UTF_8))), | ||
83 | "running", "merge", "create", controllers | 83 | "running", "merge", "create", controllers |
84 | ); | 84 | ); |
85 | } catch (IOException e) { | 85 | } catch (IOException e) { | ... | ... |
... | @@ -91,14 +91,26 @@ public final class NetconfDeviceOutputEvent extends | ... | @@ -91,14 +91,26 @@ public final class NetconfDeviceOutputEvent extends |
91 | this.messageID = msgID; | 91 | this.messageID = msgID; |
92 | } | 92 | } |
93 | 93 | ||
94 | + /** | ||
95 | + * return the message payload of the reply form the device. | ||
96 | + * @return reply | ||
97 | + */ | ||
94 | public String getMessagePayload() { | 98 | public String getMessagePayload() { |
95 | return messagePayload; | 99 | return messagePayload; |
96 | } | 100 | } |
97 | 101 | ||
102 | + /** | ||
103 | + * Event-related device information. | ||
104 | + * @return information about the device | ||
105 | + */ | ||
98 | public NetconfDeviceInfo getDeviceInfo() { | 106 | public NetconfDeviceInfo getDeviceInfo() { |
99 | return deviceInfo; | 107 | return deviceInfo; |
100 | } | 108 | } |
101 | 109 | ||
110 | + /** | ||
111 | + * Reply messageId. | ||
112 | + * @return messageId | ||
113 | + */ | ||
102 | public Integer getMessageID() { | 114 | public Integer getMessageID() { |
103 | return messageID; | 115 | return messageID; |
104 | } | 116 | } | ... | ... |
This diff is collapsed. Click to expand it.
... | @@ -49,17 +49,20 @@ public class NetconfStreamThread extends Thread implements NetconfStreamHandler | ... | @@ -49,17 +49,20 @@ public class NetconfStreamThread extends Thread implements NetconfStreamHandler |
49 | private static final String RPC_ERROR = "rpc-error"; | 49 | private static final String RPC_ERROR = "rpc-error"; |
50 | private static final String NOTIFICATION_LABEL = "<notification>"; | 50 | private static final String NOTIFICATION_LABEL = "<notification>"; |
51 | 51 | ||
52 | - private static PrintWriter outputStream; | 52 | + private PrintWriter outputStream; |
53 | - private static NetconfDeviceInfo netconfDeviceInfo; | 53 | + private final InputStream err; |
54 | - private static NetconfSessionDelegate sessionDelegate; | 54 | + private final InputStream in; |
55 | - private static NetconfMessageState state; | 55 | + private NetconfDeviceInfo netconfDeviceInfo; |
56 | - private static List<NetconfDeviceOutputEventListener> netconfDeviceEventListeners | 56 | + private NetconfSessionDelegate sessionDelegate; |
57 | + private NetconfMessageState state; | ||
58 | + private List<NetconfDeviceOutputEventListener> netconfDeviceEventListeners | ||
57 | = Lists.newArrayList(); | 59 | = Lists.newArrayList(); |
58 | 60 | ||
59 | public NetconfStreamThread(final InputStream in, final OutputStream out, | 61 | public NetconfStreamThread(final InputStream in, final OutputStream out, |
60 | final InputStream err, NetconfDeviceInfo deviceInfo, | 62 | final InputStream err, NetconfDeviceInfo deviceInfo, |
61 | NetconfSessionDelegate delegate) { | 63 | NetconfSessionDelegate delegate) { |
62 | - super(handler(in, err)); | 64 | + this.in = in; |
65 | + this.err = err; | ||
63 | outputStream = new PrintWriter(out); | 66 | outputStream = new PrintWriter(out); |
64 | netconfDeviceInfo = deviceInfo; | 67 | netconfDeviceInfo = deviceInfo; |
65 | state = NetconfMessageState.NO_MATCHING_PATTERN; | 68 | state = NetconfMessageState.NO_MATCHING_PATTERN; |
... | @@ -70,6 +73,7 @@ public class NetconfStreamThread extends Thread implements NetconfStreamHandler | ... | @@ -70,6 +73,7 @@ public class NetconfStreamThread extends Thread implements NetconfStreamHandler |
70 | 73 | ||
71 | @Override | 74 | @Override |
72 | public CompletableFuture<String> sendMessage(String request) { | 75 | public CompletableFuture<String> sendMessage(String request) { |
76 | + log.debug("Sending message {} to device {}", request, netconfDeviceInfo); | ||
73 | outputStream.print(request); | 77 | outputStream.print(request); |
74 | outputStream.flush(); | 78 | outputStream.flush(); |
75 | return new CompletableFuture<>(); | 79 | return new CompletableFuture<>(); |
... | @@ -147,9 +151,8 @@ public class NetconfStreamThread extends Thread implements NetconfStreamHandler | ... | @@ -147,9 +151,8 @@ public class NetconfStreamThread extends Thread implements NetconfStreamHandler |
147 | abstract NetconfMessageState evaluateChar(char c); | 151 | abstract NetconfMessageState evaluateChar(char c); |
148 | } | 152 | } |
149 | 153 | ||
150 | - private static Runnable handler(final InputStream in, final InputStream err) { | 154 | + public void run() { |
151 | BufferedReader bufferReader = new BufferedReader(new InputStreamReader(in)); | 155 | BufferedReader bufferReader = new BufferedReader(new InputStreamReader(in)); |
152 | - return () -> { | ||
153 | try { | 156 | try { |
154 | boolean socketClosed = false; | 157 | boolean socketClosed = false; |
155 | StringBuilder deviceReplyBuilder = new StringBuilder(); | 158 | StringBuilder deviceReplyBuilder = new StringBuilder(); |
... | @@ -157,6 +160,7 @@ public class NetconfStreamThread extends Thread implements NetconfStreamHandler | ... | @@ -157,6 +160,7 @@ public class NetconfStreamThread extends Thread implements NetconfStreamHandler |
157 | int cInt = bufferReader.read(); | 160 | int cInt = bufferReader.read(); |
158 | if (cInt == -1) { | 161 | if (cInt == -1) { |
159 | socketClosed = true; | 162 | socketClosed = true; |
163 | + log.debug("char {} " + bufferReader.read()); | ||
160 | NetconfDeviceOutputEvent event = new NetconfDeviceOutputEvent( | 164 | NetconfDeviceOutputEvent event = new NetconfDeviceOutputEvent( |
161 | NetconfDeviceOutputEvent.Type.DEVICE_UNREGISTERED, | 165 | NetconfDeviceOutputEvent.Type.DEVICE_UNREGISTERED, |
162 | null, null, -1, netconfDeviceInfo); | 166 | null, null, -1, netconfDeviceInfo); |
... | @@ -167,8 +171,15 @@ public class NetconfStreamThread extends Thread implements NetconfStreamHandler | ... | @@ -167,8 +171,15 @@ public class NetconfStreamThread extends Thread implements NetconfStreamHandler |
167 | state = state.evaluateChar(c); | 171 | state = state.evaluateChar(c); |
168 | deviceReplyBuilder.append(c); | 172 | deviceReplyBuilder.append(c); |
169 | if (state == NetconfMessageState.END_PATTERN) { | 173 | if (state == NetconfMessageState.END_PATTERN) { |
170 | - String deviceReply = deviceReplyBuilder.toString() | 174 | + String deviceReply = deviceReplyBuilder.toString(); |
171 | - .replace(END_PATTERN, ""); | 175 | + if (deviceReply.equals(END_PATTERN)) { |
176 | + NetconfDeviceOutputEvent event = new NetconfDeviceOutputEvent( | ||
177 | + NetconfDeviceOutputEvent.Type.DEVICE_UNREGISTERED, | ||
178 | + null, null, -1, netconfDeviceInfo); | ||
179 | + netconfDeviceEventListeners.forEach( | ||
180 | + listener -> listener.event(event)); | ||
181 | + } else { | ||
182 | + deviceReply = deviceReply.replace(END_PATTERN, ""); | ||
172 | if (deviceReply.contains(RPC_REPLY) || | 183 | if (deviceReply.contains(RPC_REPLY) || |
173 | deviceReply.contains(RPC_ERROR) || | 184 | deviceReply.contains(RPC_ERROR) || |
174 | deviceReply.contains(HELLO)) { | 185 | deviceReply.contains(HELLO)) { |
... | @@ -183,20 +194,21 @@ public class NetconfStreamThread extends Thread implements NetconfStreamHandler | ... | @@ -183,20 +194,21 @@ public class NetconfStreamThread extends Thread implements NetconfStreamHandler |
183 | netconfDeviceEventListeners.forEach( | 194 | netconfDeviceEventListeners.forEach( |
184 | listener -> listener.event(new NetconfDeviceOutputEvent( | 195 | listener -> listener.event(new NetconfDeviceOutputEvent( |
185 | NetconfDeviceOutputEvent.Type.DEVICE_NOTIFICATION, | 196 | NetconfDeviceOutputEvent.Type.DEVICE_NOTIFICATION, |
186 | - null, finalDeviceReply, getMsgId(finalDeviceReply), netconfDeviceInfo))); | 197 | + null, finalDeviceReply, getMsgId(finalDeviceReply), |
198 | + netconfDeviceInfo))); | ||
187 | } else { | 199 | } else { |
188 | log.info("Error on replay from device {} ", deviceReply); | 200 | log.info("Error on replay from device {} ", deviceReply); |
189 | } | 201 | } |
190 | deviceReplyBuilder.setLength(0); | 202 | deviceReplyBuilder.setLength(0); |
191 | } | 203 | } |
192 | } | 204 | } |
205 | + } | ||
193 | } catch (IOException e) { | 206 | } catch (IOException e) { |
194 | log.warn("Error in reading from the session for device " + netconfDeviceInfo, e); | 207 | log.warn("Error in reading from the session for device " + netconfDeviceInfo, e); |
195 | throw new RuntimeException(new NetconfException("Error in reading from the session for device {}" + | 208 | throw new RuntimeException(new NetconfException("Error in reading from the session for device {}" + |
196 | netconfDeviceInfo, e)); | 209 | netconfDeviceInfo, e)); |
197 | //TODO should we send a socket closed message to listeners ? | 210 | //TODO should we send a socket closed message to listeners ? |
198 | } | 211 | } |
199 | - }; | ||
200 | } | 212 | } |
201 | 213 | ||
202 | private static int getMsgId(String reply) { | 214 | private static int getMsgId(String reply) { | ... | ... |
-
Please register or login to post a comment