ONOS-6825: added OFAgent tracer
Change-Id: Ib04184b5fe108c636f8fb9c4b721a1004b72c0a7
diff --git a/apps/ofagent/src/main/java/org/onosproject/ofagent/api/OFAgent.java b/apps/ofagent/src/main/java/org/onosproject/ofagent/api/OFAgent.java
index ed1b2be..4602185 100644
--- a/apps/ofagent/src/main/java/org/onosproject/ofagent/api/OFAgent.java
+++ b/apps/ofagent/src/main/java/org/onosproject/ofagent/api/OFAgent.java
@@ -16,6 +16,7 @@
package org.onosproject.ofagent.api;
import org.onosproject.incubator.net.virtual.NetworkId;
+import org.onosproject.incubator.net.virtual.TenantId;
import java.util.Set;
@@ -25,6 +26,8 @@
*/
public interface OFAgent {
+ String TRACER_LOG_TENANT_ID_PREFIX = "OFAGENT_tenantId:";
+
enum State {
/**
@@ -46,6 +49,13 @@
NetworkId networkId();
/**
+ * Returns the identifier of the tenant which owns virtual network this agent cares for.
+ *
+ * @return id of the tenant
+ */
+ TenantId tenantId();
+
+ /**
* Returns the external OpenFlow controllers of the virtual network.
*
* @return set of openflow controllers
@@ -89,6 +99,14 @@
Builder networkId(NetworkId networkId);
/**
+ * Returns OF agent builder with the supplied tenant ID.
+ *
+ * @param tenantId id of the virtual network
+ * @return of agent builder
+ */
+ Builder tenantId(TenantId tenantId);
+
+ /**
* Returns OF agent builder with the supplied controllers.
*
* @param controllers set of openflow controllers
diff --git a/apps/ofagent/src/main/java/org/onosproject/ofagent/cli/OFAgentCreateCommand.java b/apps/ofagent/src/main/java/org/onosproject/ofagent/cli/OFAgentCreateCommand.java
index 101a1ff..b70d191 100644
--- a/apps/ofagent/src/main/java/org/onosproject/ofagent/cli/OFAgentCreateCommand.java
+++ b/apps/ofagent/src/main/java/org/onosproject/ofagent/cli/OFAgentCreateCommand.java
@@ -22,6 +22,8 @@
import org.onlab.packet.TpPort;
import org.onosproject.cli.AbstractShellCommand;
import org.onosproject.incubator.net.virtual.NetworkId;
+import org.onosproject.incubator.net.virtual.TenantId;
+import org.onosproject.incubator.net.virtual.VirtualNetworkService;
import org.onosproject.ofagent.api.OFAgent;
import org.onosproject.ofagent.api.OFAgentAdminService;
import org.onosproject.ofagent.api.OFController;
@@ -30,6 +32,8 @@
import java.util.Set;
+import static com.google.common.base.Preconditions.checkNotNull;
+
/**
* Creates a new OFAagent.
*/
@@ -60,14 +64,18 @@
TpPort.tpPort(Integer.valueOf(temp[1]))));
}
+ VirtualNetworkService virtualNetworkService = get(VirtualNetworkService.class);
+ TenantId tenantId = virtualNetworkService.getTenantId(NetworkId.networkId(networkId));
+ checkNotNull(tenantId, "Virtual network %s does not have tenant.", networkId);
OFAgentAdminService adminService = get(OFAgentAdminService.class);
OFAgent ofAgent = DefaultOFAgent.builder()
.networkId(NetworkId.networkId(networkId))
+ .tenantId(tenantId)
.controllers(ctrls)
.state(OFAgent.State.STOPPED)
.build();
adminService.createAgent(ofAgent);
- print("Successfully created OFAgent for network %s", networkId);
+ print("Successfully created OFAgent for network %s, tenant %s", networkId, tenantId);
}
private boolean isValidController(String ctrl) {
diff --git a/apps/ofagent/src/main/java/org/onosproject/ofagent/impl/DefaultOFAgent.java b/apps/ofagent/src/main/java/org/onosproject/ofagent/impl/DefaultOFAgent.java
index c82dc94..d87e474 100644
--- a/apps/ofagent/src/main/java/org/onosproject/ofagent/impl/DefaultOFAgent.java
+++ b/apps/ofagent/src/main/java/org/onosproject/ofagent/impl/DefaultOFAgent.java
@@ -19,6 +19,7 @@
import com.google.common.collect.ImmutableSet;
import com.google.common.collect.Sets;
import org.onosproject.incubator.net.virtual.NetworkId;
+import org.onosproject.incubator.net.virtual.TenantId;
import org.onosproject.ofagent.api.OFAgent;
import org.onosproject.ofagent.api.OFController;
@@ -33,13 +34,16 @@
public final class DefaultOFAgent implements OFAgent {
private final NetworkId networkId;
+ private final TenantId tenantId;
+
private final Set<OFController> controllers;
private final State state;
- private DefaultOFAgent(NetworkId networkId,
+ private DefaultOFAgent(NetworkId networkId, TenantId tenantId,
Set<OFController> controllers,
State state) {
this.networkId = networkId;
+ this.tenantId = tenantId;
this.controllers = controllers;
this.state = state;
}
@@ -50,6 +54,11 @@
}
@Override
+ public TenantId tenantId() {
+ return tenantId;
+ }
+
+ @Override
public Set<OFController> controllers() {
return controllers;
}
@@ -83,6 +92,7 @@
public String toString() {
return MoreObjects.toStringHelper(this)
.add("networkId", this.networkId)
+ .add("tenantId", this.tenantId)
.add("controllers", this.controllers)
.add("state", this.state)
.toString();
@@ -100,6 +110,7 @@
public static final class Builder implements OFAgent.Builder {
private NetworkId networkId;
+ private TenantId tenantId;
private Set<OFController> controllers = Sets.newHashSet();
private State state;
@@ -109,15 +120,17 @@
@Override
public OFAgent build() {
checkNotNull(networkId, "Network ID cannot be null");
+ checkNotNull(tenantId, "Tenant ID cannot be null");
checkNotNull(state, "State cannot be null");
controllers = controllers == null ? ImmutableSet.of() : controllers;
- return new DefaultOFAgent(networkId, controllers, state);
+ return new DefaultOFAgent(networkId, tenantId, controllers, state);
}
@Override
public Builder from(OFAgent ofAgent) {
this.networkId = ofAgent.networkId();
+ this.tenantId = ofAgent.tenantId();
this.controllers = Sets.newHashSet(ofAgent.controllers());
this.state = ofAgent.state();
return this;
@@ -130,6 +143,12 @@
}
@Override
+ public Builder tenantId(TenantId tenantId) {
+ this.tenantId = tenantId;
+ return this;
+ }
+
+ @Override
public Builder controllers(Set<OFController> controllers) {
this.controllers = controllers;
return this;
diff --git a/apps/ofagent/src/main/java/org/onosproject/ofagent/impl/DefaultOFSwitch.java b/apps/ofagent/src/main/java/org/onosproject/ofagent/impl/DefaultOFSwitch.java
index 3c04364..1fbd561 100644
--- a/apps/ofagent/src/main/java/org/onosproject/ofagent/impl/DefaultOFSwitch.java
+++ b/apps/ofagent/src/main/java/org/onosproject/ofagent/impl/DefaultOFSwitch.java
@@ -49,6 +49,7 @@
import org.onosproject.net.meter.MeterRequest;
import org.onosproject.net.meter.MeterService;
import org.onosproject.net.packet.InboundPacket;
+import org.onosproject.ofagent.api.OFAgent;
import org.onosproject.ofagent.api.OFSwitch;
import org.onosproject.ofagent.api.OFSwitchCapabilities;
import org.onosproject.ofagent.api.OFSwitchService;
@@ -176,7 +177,9 @@
this.flowRuleService = virtualNetworkService.get(networkId, FlowRuleService.class);
this.groupService = virtualNetworkService.get(networkId, GroupService.class);
this.meterService = virtualNetworkService.get(networkId, MeterService.class);
- log = LoggerFactory.getLogger(getClass().getName() + " : " + dpid);
+
+ log = LoggerFactory.getLogger(OFAgent.TRACER_LOG_TENANT_ID_PREFIX + virtualNetworkService.getTenantId(networkId)
+ + " " + getClass().getSimpleName() + " : " + dpid);
}
public static DefaultOFSwitch of(DatapathId dpid, OFSwitchCapabilities capabilities,
diff --git a/apps/ofagent/src/main/java/org/onosproject/ofagent/impl/DistributedOFAgentStore.java b/apps/ofagent/src/main/java/org/onosproject/ofagent/impl/DistributedOFAgentStore.java
index e405c14..7e41243 100644
--- a/apps/ofagent/src/main/java/org/onosproject/ofagent/impl/DistributedOFAgentStore.java
+++ b/apps/ofagent/src/main/java/org/onosproject/ofagent/impl/DistributedOFAgentStore.java
@@ -26,6 +26,7 @@
import org.onosproject.core.ApplicationId;
import org.onosproject.core.CoreService;
import org.onosproject.incubator.net.virtual.NetworkId;
+import org.onosproject.incubator.net.virtual.TenantId;
import org.onosproject.ofagent.api.OFAgent;
import org.onosproject.ofagent.api.OFAgentEvent;
import org.onosproject.ofagent.api.OFAgentEvent.Type;
@@ -72,6 +73,7 @@
.register(OFAgent.class)
.register(OFAgent.State.class)
.register(NetworkId.class)
+ .register(TenantId.class)
.register(DefaultOFAgent.class)
.register(OFController.class)
.register(DefaultOFController.class)
@@ -155,7 +157,8 @@
switch (event.type()) {
case INSERT:
eventExecutor.execute(() -> {
- log.debug("OFAgent for network {} created", event.key());
+ log.debug(OFAgent.TRACER_LOG_TENANT_ID_PREFIX + event.newValue().value().tenantId()
+ + " OFAgent for network {} created", event.key());
notifyDelegate(new OFAgentEvent(
Type.OFAGENT_CREATED,
event.newValue().value()));
@@ -163,13 +166,15 @@
break;
case UPDATE:
eventExecutor.execute(() -> {
- log.debug("OFAgent for network {} updated", event.key());
+ log.debug(OFAgent.TRACER_LOG_TENANT_ID_PREFIX + event.newValue().value().tenantId()
+ + " OFAgent for network {} updated", event.key());
processUpdated(event.oldValue().value(), event.newValue().value());
});
break;
case REMOVE:
eventExecutor.execute(() -> {
- log.debug("OFAgent for network {} removed", event.key());
+ log.debug(OFAgent.TRACER_LOG_TENANT_ID_PREFIX + event.oldValue().value().tenantId()
+ + " OFAgent for network {} removed", event.key());
notifyDelegate(new OFAgentEvent(
Type.OFAGENT_REMOVED,
event.oldValue().value()));
diff --git a/apps/ofagent/src/main/java/org/onosproject/ofagent/rest/OFAgentCodec.java b/apps/ofagent/src/main/java/org/onosproject/ofagent/rest/OFAgentCodec.java
index aae3614..4b8683c 100644
--- a/apps/ofagent/src/main/java/org/onosproject/ofagent/rest/OFAgentCodec.java
+++ b/apps/ofagent/src/main/java/org/onosproject/ofagent/rest/OFAgentCodec.java
@@ -23,6 +23,7 @@
import org.onosproject.codec.CodecContext;
import org.onosproject.codec.JsonCodec;
import org.onosproject.incubator.net.virtual.NetworkId;
+import org.onosproject.incubator.net.virtual.TenantId;
import org.onosproject.ofagent.api.OFAgent;
import org.onosproject.ofagent.api.OFController;
import org.onosproject.ofagent.impl.DefaultOFAgent;
@@ -45,6 +46,7 @@
ObjectNode ofAgentNode = mapper.createObjectNode();
ofAgentNode
.put("networkId", ofAgent.networkId().toString())
+ .put("tenantId", ofAgent.tenantId().toString())
.put("state", ofAgent.state().toString());
ArrayNode controllers = mapper.createArrayNode();
@@ -59,6 +61,9 @@
JsonNode networkId = json.get("networkId");
checkNotNull(networkId);
+ JsonNode tenantId = json.get("tenantId");
+ checkNotNull(tenantId);
+
checkNotNull(json.get("controllers"));
checkState(json.get("controllers").isArray());
Set<OFController> controllers = Sets.newHashSet();
@@ -67,6 +72,7 @@
return DefaultOFAgent.builder()
.networkId(NetworkId.networkId(networkId.asLong()))
+ .tenantId(TenantId.tenantId(tenantId.asText()))
.controllers(controllers)
.state(OFAgent.State.STOPPED)
.build();