Aha! Fixed a phantom exception that would appear on shutdown; we must first close the channel group and only then shutdown the executors.

Change-Id: I43cba836321a156023a7ab2dbd3b937867ffd5c5
This commit is contained in:
Thomas Vachuska 2015-05-18 14:58:53 -07:00 committed by Gerrit Code Review
parent 8db1640b58
commit 1c681d71f7
2 changed files with 16 additions and 33 deletions

View File

@ -16,16 +16,6 @@
package org.onosproject.openflow.controller.driver; package org.onosproject.openflow.controller.driver;
import java.io.IOException;
import java.net.InetSocketAddress;
import java.net.SocketAddress;
import java.util.ArrayList;
import java.util.Collections;
import java.util.List;
import java.util.concurrent.RejectedExecutionException;
import java.util.concurrent.atomic.AtomicInteger;
import java.util.stream.Collectors;
import org.jboss.netty.channel.Channel; import org.jboss.netty.channel.Channel;
import org.onlab.packet.IpAddress; import org.onlab.packet.IpAddress;
import org.onosproject.net.driver.AbstractHandlerBehaviour; import org.onosproject.net.driver.AbstractHandlerBehaviour;
@ -48,6 +38,15 @@ import org.projectfloodlight.openflow.protocol.OFVersion;
import org.slf4j.Logger; import org.slf4j.Logger;
import org.slf4j.LoggerFactory; import org.slf4j.LoggerFactory;
import java.io.IOException;
import java.net.InetSocketAddress;
import java.net.SocketAddress;
import java.util.ArrayList;
import java.util.Collections;
import java.util.List;
import java.util.concurrent.atomic.AtomicInteger;
import java.util.stream.Collectors;
/** /**
* An abstract representation of an OpenFlow switch. Can be extended by others * An abstract representation of an OpenFlow switch. Can be extended by others
* to serve as a base for their vendor specific representation of a switch. * to serve as a base for their vendor specific representation of a switch.
@ -57,8 +56,6 @@ public abstract class AbstractOpenFlowSwitch extends AbstractHandlerBehaviour
protected final Logger log = LoggerFactory.getLogger(getClass()); protected final Logger log = LoggerFactory.getLogger(getClass());
private static final String SHUTDOWN_MSG = "Worker has already been shutdown";
private Channel channel; private Channel channel;
protected String channelId; protected String channelId;
@ -100,28 +97,14 @@ public abstract class AbstractOpenFlowSwitch extends AbstractHandlerBehaviour
@Override @Override
public final void sendMsg(OFMessage m) { public final void sendMsg(OFMessage m) {
if (role == RoleState.MASTER) { if (role == RoleState.MASTER) {
try { channel.write(Collections.singletonList(m));
channel.write(Collections.singletonList(m));
} catch (RejectedExecutionException e) {
log.warn(e.getMessage());
if (!e.getMessage().contains(SHUTDOWN_MSG)) {
throw e;
}
}
} }
} }
@Override @Override
public final void sendMsg(List<OFMessage> msgs) { public final void sendMsg(List<OFMessage> msgs) {
if (role == RoleState.MASTER) { if (role == RoleState.MASTER) {
try { channel.write(msgs);
channel.write(msgs);
} catch (RejectedExecutionException e) {
log.warn(e.getMessage());
if (!e.getMessage().contains(SHUTDOWN_MSG)) {
throw e;
}
}
} }
} }
@ -150,7 +133,7 @@ public abstract class AbstractOpenFlowSwitch extends AbstractHandlerBehaviour
@Override @Override
public final void setConnected(boolean connected) { public final void setConnected(boolean connected) {
this.connected = connected; this.connected = connected;
}; }
@Override @Override
public final void setChannel(Channel channel) { public final void setChannel(Channel channel) {
@ -165,7 +148,7 @@ public abstract class AbstractOpenFlowSwitch extends AbstractHandlerBehaviour
channelId = '[' + ipAddress.toString() + "]:" + inetAddress.getPort(); channelId = '[' + ipAddress.toString() + "]:" + inetAddress.getPort();
} }
} }
}; }
@Override @Override
public String channelId() { public String channelId() {
@ -180,7 +163,7 @@ public abstract class AbstractOpenFlowSwitch extends AbstractHandlerBehaviour
@Override @Override
public final long getId() { public final long getId() {
return this.dpid.value(); return this.dpid.value();
}; }
@Override @Override
public final String getStringId() { public final String getStringId() {
@ -223,7 +206,7 @@ public abstract class AbstractOpenFlowSwitch extends AbstractHandlerBehaviour
@Override @Override
public RoleState getRole() { public RoleState getRole() {
return role; return role;
}; }
@Override @Override
public final boolean connectSwitch() { public final boolean connectSwitch() {

View File

@ -232,8 +232,8 @@ public class Controller {
public void stop() { public void stop() {
log.info("Stopping OpenFlow IO"); log.info("Stopping OpenFlow IO");
execFactory.shutdown();
cg.close(); cg.close();
execFactory.shutdown();
} }
} }