import org.opendaylight.openflowplugin.api.openflow.device.RequestContextStack;
import org.opendaylight.openflowplugin.api.openflow.device.Xid;
import org.opendaylight.openflowplugin.impl.role.RoleChangeException;
-import org.opendaylight.yang.gen.v1.urn.opendaylight.inventory.rev130819.NodeId;
import org.opendaylight.yang.gen.v1.urn.opendaylight.openflow.protocol.rev130731.OfHeader;
import org.opendaylight.yang.gen.v1.urn.opendaylight.openflow.protocol.rev130731.RoleRequestOutput;
import org.opendaylight.yang.gen.v1.urn.opendaylight.role.service.rev150727.OfpRole;
private final DeviceContext deviceContext;
private final RoleService roleService;
- private final NodeId nodeId;
- private final Short version;
private final Semaphore currentRoleGuard = new Semaphore(1, true);
super(requestContextStack, deviceContext, SetRoleOutput.class);
this.deviceContext = Preconditions.checkNotNull(deviceContext);
this.roleService = new RoleService(requestContextStack, deviceContext, RoleRequestOutput.class);
- nodeId = deviceContext.getPrimaryConnectionContext().getNodeId();
- version = deviceContext.getPrimaryConnectionContext().getFeatures().getVersion();
}
@Override
- protected OfHeader buildRequest(final Xid xid, final SetRoleInput input) {
+ protected OfHeader buildRequest(final Xid xid, final SetRoleInput input) throws ServiceException {
return null;
}
LOG.info("SetRole called with input:{}", input);
try {
currentRoleGuard.acquire();
- LOG.trace("currentRole lock queue: " + currentRoleGuard.getQueueLength());
+ LOG.trace("currentRole lock queue length: {} " + currentRoleGuard.getQueueLength());
} catch (final InterruptedException e) {
- LOG.warn("Unexpected exception for acquire semaphor for input {}", input);
+ LOG.error("Unexpected exception {} for acquire semaphore for input {}", e, input);
return RpcResultBuilder.<SetRoleOutput> failed().buildFuture();
}
// compare with last known role and set if different. If they are same, then return.
@Override
public void onFailure(final Throwable t) {
- LOG.warn("SetRoleService set Role {} for Node: {} fail.", input.getControllerRole(),
+ LOG.error("SetRoleService set Role {} for Node: {} fail . Reason {}", input.getControllerRole(),
input.getNode().getValue(), t);
currentRoleGuard.release();
}
return;
case WORKING:
// We can proceed
+ LOG.trace("Device {} has been working", input.getNode());
break;
default:
LOG.warn("Device {} is in state {}, role change is not allowed", input.getNode(), state);
currentRole = input.getControllerRole();
future.set(RpcResultBuilder.<SetRoleOutput> success().withResult(result.getResult()).build());
} else {
- LOG.info("setRole() failed with errors, will retry: {} times.", MAX_RETRIES - retryCounter);
+ LOG.error("setRole() failed with errors, will retry: {} times.", MAX_RETRIES - retryCounter);
repeaterForChangeRole(future, input, (retryCounter + 1));
}
}
@Override
public void onFailure(final Throwable t) {
- LOG.info("Exception in setRole(), will retry: {} times.", MAX_RETRIES - retryCounter, t);
+ LOG.error("Exception in setRole(), will retry: {} times.", t, MAX_RETRIES - retryCounter);
repeaterForChangeRole(future, input, (retryCounter + 1));
}
});
}
private ListenableFuture<RpcResult<SetRoleOutput>> tryToChangeRole(final OfpRole role) {
- LOG.info("RoleChangeTask called on device:{} OFPRole:{}", nodeId.getValue(), role);
+ LOG.info("RoleChangeTask called on device:{} OFPRole:{}", getDeviceInfo().getNodeId().getValue(), role);
- final Future<BigInteger> generationFuture = roleService.getGenerationIdFromDevice(version);
+ final Future<BigInteger> generationFuture = roleService.getGenerationIdFromDevice(getVersion());
return Futures.transform(JdkFutureAdapters.listenInPoolThread(generationFuture), (AsyncFunction<BigInteger, RpcResult<SetRoleOutput>>) generationId -> {
- LOG.debug("RoleChangeTask, GenerationIdFromDevice from device {} is {}", nodeId.getValue(), generationId);
+ LOG.debug("RoleChangeTask, GenerationIdFromDevice from device {} is {}", getDeviceInfo().getNodeId().getValue(), generationId);
final BigInteger nextGenerationId = getNextGenerationId(generationId);
- LOG.debug("nextGenerationId received from device:{} is {}", nodeId.getValue(), nextGenerationId);
- final Future<RpcResult<SetRoleOutput>> submitRoleFuture = roleService.submitRoleChange(role, version, nextGenerationId);
+ LOG.debug("nextGenerationId received from device:{} is {}", getDeviceInfo().getNodeId().getValue(), nextGenerationId);
+ final Future<RpcResult<SetRoleOutput>> submitRoleFuture = roleService.submitRoleChange(role, getVersion(), nextGenerationId);
return JdkFutureAdapters.listenInPoolThread(submitRoleFuture);
});
}