mirror of
https://github.com/opennetworkinglab/onos.git
synced 2025-10-23 21:31:00 +02:00
Merge branch 'master' of ssh://gerrit.onlab.us:29418/onos-next
This commit is contained in:
commit
0a7a815f6b
@ -1,5 +1,7 @@
|
|||||||
package org.onlab.onos.store.service;
|
package org.onlab.onos.store.service;
|
||||||
|
|
||||||
|
import com.google.common.base.MoreObjects;
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* Database read request.
|
* Database read request.
|
||||||
*/
|
*/
|
||||||
@ -31,6 +33,9 @@ public class ReadRequest {
|
|||||||
|
|
||||||
@Override
|
@Override
|
||||||
public String toString() {
|
public String toString() {
|
||||||
return "ReadRequest [tableName=" + tableName + ", key=" + key + "]";
|
return MoreObjects.toStringHelper(getClass())
|
||||||
|
.add("tableName", tableName)
|
||||||
|
.add("key", key)
|
||||||
|
.toString();
|
||||||
}
|
}
|
||||||
}
|
}
|
@ -1,5 +1,7 @@
|
|||||||
package org.onlab.onos.store.service;
|
package org.onlab.onos.store.service;
|
||||||
|
|
||||||
|
import com.google.common.base.MoreObjects;
|
||||||
|
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* Database read result.
|
* Database read result.
|
||||||
@ -18,7 +20,7 @@ public class ReadResult {
|
|||||||
|
|
||||||
/**
|
/**
|
||||||
* Returns database table name.
|
* Returns database table name.
|
||||||
* @return table name.
|
* @return table name
|
||||||
*/
|
*/
|
||||||
public String tableName() {
|
public String tableName() {
|
||||||
return tableName;
|
return tableName;
|
||||||
@ -26,7 +28,7 @@ public class ReadResult {
|
|||||||
|
|
||||||
/**
|
/**
|
||||||
* Returns database table key.
|
* Returns database table key.
|
||||||
* @return key.
|
* @return key
|
||||||
*/
|
*/
|
||||||
public String key() {
|
public String key() {
|
||||||
return key;
|
return key;
|
||||||
@ -39,4 +41,13 @@ public class ReadResult {
|
|||||||
public VersionedValue value() {
|
public VersionedValue value() {
|
||||||
return value;
|
return value;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@Override
|
||||||
|
public String toString() {
|
||||||
|
return MoreObjects.toStringHelper(getClass())
|
||||||
|
.add("tableName", tableName)
|
||||||
|
.add("key", key)
|
||||||
|
.add("value", value)
|
||||||
|
.toString();
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
@ -2,6 +2,8 @@ package org.onlab.onos.store.service;
|
|||||||
|
|
||||||
import java.util.Arrays;
|
import java.util.Arrays;
|
||||||
|
|
||||||
|
import com.google.common.base.MoreObjects;
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* Wrapper object that holds the object (as byte array) and its version.
|
* Wrapper object that holds the object (as byte array) and its version.
|
||||||
*/
|
*/
|
||||||
@ -38,7 +40,9 @@ public class VersionedValue {
|
|||||||
|
|
||||||
@Override
|
@Override
|
||||||
public String toString() {
|
public String toString() {
|
||||||
return "VersionedValue [value=" + Arrays.toString(value) + ", version="
|
return MoreObjects.toStringHelper(getClass())
|
||||||
+ version + "]";
|
.add("version", version)
|
||||||
|
.add("value", Arrays.toString(value))
|
||||||
|
.toString();
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
@ -4,6 +4,8 @@ import static com.google.common.base.Preconditions.checkArgument;
|
|||||||
|
|
||||||
import java.util.Objects;
|
import java.util.Objects;
|
||||||
|
|
||||||
|
import com.google.common.base.MoreObjects;
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* Database write request.
|
* Database write request.
|
||||||
*/
|
*/
|
||||||
@ -67,10 +69,13 @@ public class WriteRequest {
|
|||||||
|
|
||||||
@Override
|
@Override
|
||||||
public String toString() {
|
public String toString() {
|
||||||
return "WriteRequest [tableName=" + tableName + ", key=" + key
|
return MoreObjects.toStringHelper(getClass())
|
||||||
+ ", newValue=" + newValue
|
.add("tableName", tableName)
|
||||||
+ ", previousVersion=" + previousVersion
|
.add("key", key)
|
||||||
+ ", oldValue=" + oldValue;
|
.add("newValue", newValue)
|
||||||
|
.add("previousVersion", previousVersion)
|
||||||
|
.add("oldValue", oldValue)
|
||||||
|
.toString();
|
||||||
}
|
}
|
||||||
|
|
||||||
@Override
|
@Override
|
||||||
|
@ -1,5 +1,7 @@
|
|||||||
package org.onlab.onos.store.service;
|
package org.onlab.onos.store.service;
|
||||||
|
|
||||||
|
import com.google.common.base.MoreObjects;
|
||||||
|
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* Database write result.
|
* Database write result.
|
||||||
@ -27,4 +29,13 @@ public class WriteResult {
|
|||||||
public VersionedValue previousValue() {
|
public VersionedValue previousValue() {
|
||||||
return previousValue;
|
return previousValue;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@Override
|
||||||
|
public String toString() {
|
||||||
|
return MoreObjects.toStringHelper(getClass())
|
||||||
|
.add("tableName", tableName)
|
||||||
|
.add("key", key)
|
||||||
|
.add("previousValue", previousValue)
|
||||||
|
.toString();
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
@ -69,10 +69,10 @@ public class ClusterMessagingProtocol implements Protocol<TcpMember> {
|
|||||||
private final Logger log = getLogger(getClass());
|
private final Logger log = getLogger(getClass());
|
||||||
|
|
||||||
@Reference(cardinality = ReferenceCardinality.MANDATORY_UNARY)
|
@Reference(cardinality = ReferenceCardinality.MANDATORY_UNARY)
|
||||||
ClusterService clusterService;
|
protected ClusterService clusterService;
|
||||||
|
|
||||||
@Reference(cardinality = ReferenceCardinality.MANDATORY_UNARY)
|
@Reference(cardinality = ReferenceCardinality.MANDATORY_UNARY)
|
||||||
ClusterCommunicationService clusterCommunicator;
|
protected ClusterCommunicationService clusterCommunicator;
|
||||||
|
|
||||||
public static final MessageSubject COPYCAT_PING =
|
public static final MessageSubject COPYCAT_PING =
|
||||||
new MessageSubject("copycat-raft-consensus-ping");
|
new MessageSubject("copycat-raft-consensus-ping");
|
||||||
|
@ -49,10 +49,10 @@ public class DatabaseManager implements DatabaseService, DatabaseAdminService {
|
|||||||
private final Logger log = getLogger(getClass());
|
private final Logger log = getLogger(getClass());
|
||||||
|
|
||||||
@Reference(cardinality = ReferenceCardinality.MANDATORY_UNARY)
|
@Reference(cardinality = ReferenceCardinality.MANDATORY_UNARY)
|
||||||
ClusterService clusterService;
|
protected ClusterService clusterService;
|
||||||
|
|
||||||
@Reference(cardinality = ReferenceCardinality.MANDATORY_UNARY)
|
@Reference(cardinality = ReferenceCardinality.MANDATORY_UNARY)
|
||||||
ClusterMessagingProtocol copycatMessagingProtocol;
|
protected ClusterMessagingProtocol copycatMessagingProtocol;
|
||||||
|
|
||||||
public static final String LOG_FILE_PREFIX = "onos-copy-cat-log";
|
public static final String LOG_FILE_PREFIX = "onos-copy-cat-log";
|
||||||
|
|
||||||
|
@ -82,7 +82,7 @@ public class LinkDiscovery implements TimerTask {
|
|||||||
private final PacketService pktService;
|
private final PacketService pktService;
|
||||||
private final MastershipService mastershipService;
|
private final MastershipService mastershipService;
|
||||||
private Timeout timeout;
|
private Timeout timeout;
|
||||||
private boolean isStopped;
|
private volatile boolean isStopped;
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* Instantiates discovery manager for the given physical switch. Creates a
|
* Instantiates discovery manager for the given physical switch. Creates a
|
||||||
@ -243,8 +243,10 @@ public class LinkDiscovery implements TimerTask {
|
|||||||
public void run(final Timeout t) {
|
public void run(final Timeout t) {
|
||||||
boolean isMaster = mastershipService.getLocalRole(device.id()) == MASTER;
|
boolean isMaster = mastershipService.getLocalRole(device.id()) == MASTER;
|
||||||
if (!isMaster) {
|
if (!isMaster) {
|
||||||
// reschedule timer
|
if (!isStopped()) {
|
||||||
timeout = Timer.getTimer().newTimeout(this, this.probeRate, MILLISECONDS);
|
// reschedule timer
|
||||||
|
timeout = Timer.getTimer().newTimeout(this, this.probeRate, MILLISECONDS);
|
||||||
|
}
|
||||||
return;
|
return;
|
||||||
}
|
}
|
||||||
|
|
||||||
@ -280,16 +282,18 @@ public class LinkDiscovery implements TimerTask {
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
// reschedule timer
|
if (!isStopped()) {
|
||||||
timeout = Timer.getTimer().newTimeout(this, this.probeRate, MILLISECONDS);
|
// reschedule timer
|
||||||
|
timeout = Timer.getTimer().newTimeout(this, this.probeRate, MILLISECONDS);
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
public void stop() {
|
public synchronized void stop() {
|
||||||
timeout.cancel();
|
timeout.cancel();
|
||||||
isStopped = true;
|
isStopped = true;
|
||||||
}
|
}
|
||||||
|
|
||||||
public void start() {
|
public synchronized void start() {
|
||||||
if (isStopped) {
|
if (isStopped) {
|
||||||
timeout = Timer.getTimer().newTimeout(this, 0, MILLISECONDS);
|
timeout = Timer.getTimer().newTimeout(this, 0, MILLISECONDS);
|
||||||
isStopped = false;
|
isStopped = false;
|
||||||
|
@ -71,6 +71,7 @@
|
|||||||
var ONOS = $.onos({
|
var ONOS = $.onos({
|
||||||
comment: "configuration options",
|
comment: "configuration options",
|
||||||
startVid: 'topo',
|
startVid: 'topo',
|
||||||
|
// startVid: 'sampleKeys',
|
||||||
trace: false
|
trace: false
|
||||||
});
|
});
|
||||||
</script>
|
</script>
|
||||||
@ -82,6 +83,7 @@
|
|||||||
<script src="sample2.js"></script>
|
<script src="sample2.js"></script>
|
||||||
<script src="sampleAlt2.js"></script>
|
<script src="sampleAlt2.js"></script>
|
||||||
<script src="sampleRadio.js"></script>
|
<script src="sampleRadio.js"></script>
|
||||||
|
<script src="sampleKeys.js"></script>
|
||||||
|
|
||||||
<!-- Contributed (application) views injected here -->
|
<!-- Contributed (application) views injected here -->
|
||||||
<!-- TODO: replace with template marker and inject refs server-side -->
|
<!-- TODO: replace with template marker and inject refs server-side -->
|
||||||
|
@ -28,7 +28,7 @@
|
|||||||
|
|
||||||
// configuration data
|
// configuration data
|
||||||
var config = {
|
var config = {
|
||||||
useLiveData: true,
|
useLiveData: false,
|
||||||
debugOn: false,
|
debugOn: false,
|
||||||
debug: {
|
debug: {
|
||||||
showNodeXY: false,
|
showNodeXY: false,
|
||||||
|
@ -49,13 +49,40 @@
|
|||||||
ctx: ''
|
ctx: ''
|
||||||
},
|
},
|
||||||
built = false,
|
built = false,
|
||||||
errorCount = 0;
|
errorCount = 0,
|
||||||
|
keyHandler = {};
|
||||||
|
|
||||||
// DOM elements etc.
|
// DOM elements etc.
|
||||||
var $view,
|
var $view,
|
||||||
$mastRadio;
|
$mastRadio;
|
||||||
|
|
||||||
|
|
||||||
|
function whatKey(code) {
|
||||||
|
switch (code) {
|
||||||
|
case 13: return 'enter';
|
||||||
|
case 16: return 'shift';
|
||||||
|
case 17: return 'ctrl';
|
||||||
|
case 18: return 'alt';
|
||||||
|
case 27: return 'esc';
|
||||||
|
case 32: return 'space';
|
||||||
|
case 37: return 'leftArrow';
|
||||||
|
case 38: return 'upArrow';
|
||||||
|
case 39: return 'rightArrow';
|
||||||
|
case 40: return 'downArrow';
|
||||||
|
case 91: return 'cmdLeft';
|
||||||
|
case 93: return 'cmdRight';
|
||||||
|
default:
|
||||||
|
if ((code >= 48 && code <= 57) ||
|
||||||
|
(code >= 65 && code <= 90)) {
|
||||||
|
return String.fromCharCode(code);
|
||||||
|
} else if (code >= 112 && code <= 123) {
|
||||||
|
return 'F' + (code - 111);
|
||||||
|
}
|
||||||
|
return '.';
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
// ..........................................................
|
// ..........................................................
|
||||||
// Internal functions
|
// Internal functions
|
||||||
|
|
||||||
@ -206,9 +233,11 @@
|
|||||||
// the incoming view, then unload it...
|
// the incoming view, then unload it...
|
||||||
if (current.view && (current.view.vid !== view.vid)) {
|
if (current.view && (current.view.vid !== view.vid)) {
|
||||||
current.view.unload();
|
current.view.unload();
|
||||||
// detach radio buttons, if they were there..
|
|
||||||
$('#mastRadio').children().detach();
|
|
||||||
|
|
||||||
|
// detach radio buttons, key handlers, etc.
|
||||||
|
$('#mastRadio').children().detach();
|
||||||
|
keyHandler.fn = null;
|
||||||
|
keyHandler.map = {};
|
||||||
}
|
}
|
||||||
|
|
||||||
// cache new view and context
|
// cache new view and context
|
||||||
@ -283,6 +312,27 @@
|
|||||||
$mastRadio.node().appendChild(btnG.node());
|
$mastRadio.node().appendChild(btnG.node());
|
||||||
}
|
}
|
||||||
|
|
||||||
|
function setKeyBindings(keyArg) {
|
||||||
|
if ($.isFunction(keyArg)) {
|
||||||
|
// set general key handler callback
|
||||||
|
keyHandler.fn = keyArg;
|
||||||
|
} else {
|
||||||
|
// set specific key filter map
|
||||||
|
keyHandler.map = keyArg;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
function keyIn() {
|
||||||
|
var event = d3.event,
|
||||||
|
keyCode = event.keyCode,
|
||||||
|
key = whatKey(keyCode),
|
||||||
|
cb = isF(keyHandler.map[key]) || isF(keyHandler.fn);
|
||||||
|
|
||||||
|
if (cb) {
|
||||||
|
cb(current.view.token(), key, keyCode, event);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
function resize(e) {
|
function resize(e) {
|
||||||
d3.selectAll('.onosView').call(setViewDimensions);
|
d3.selectAll('.onosView').call(setViewDimensions);
|
||||||
// allow current view to react to resize event...
|
// allow current view to react to resize event...
|
||||||
@ -320,7 +370,6 @@
|
|||||||
this.radioButtons = null; // no radio buttons yet
|
this.radioButtons = null; // no radio buttons yet
|
||||||
this.ok = true; // valid view
|
this.ok = true; // valid view
|
||||||
}
|
}
|
||||||
|
|
||||||
}
|
}
|
||||||
|
|
||||||
function validateViewArgs(vid) {
|
function validateViewArgs(vid) {
|
||||||
@ -348,7 +397,8 @@
|
|||||||
width: this.width,
|
width: this.width,
|
||||||
height: this.height,
|
height: this.height,
|
||||||
uid: this.uid,
|
uid: this.uid,
|
||||||
setRadio: this.setRadio
|
setRadio: this.setRadio,
|
||||||
|
setKeys: this.setKeys
|
||||||
}
|
}
|
||||||
},
|
},
|
||||||
|
|
||||||
@ -433,6 +483,10 @@
|
|||||||
setRadioButtons(this.vid, btnSet, cb);
|
setRadioButtons(this.vid, btnSet, cb);
|
||||||
},
|
},
|
||||||
|
|
||||||
|
setKeys: function (keyArg) {
|
||||||
|
setKeyBindings(keyArg);
|
||||||
|
},
|
||||||
|
|
||||||
uid: function (id) {
|
uid: function (id) {
|
||||||
return uid(this, id);
|
return uid(this, id);
|
||||||
}
|
}
|
||||||
@ -536,6 +590,8 @@
|
|||||||
$(window).on('hashchange', hash);
|
$(window).on('hashchange', hash);
|
||||||
$(window).on('resize', resize);
|
$(window).on('resize', resize);
|
||||||
|
|
||||||
|
d3.select('body').on('keydown', keyIn);
|
||||||
|
|
||||||
// Invoke hashchange callback to navigate to content
|
// Invoke hashchange callback to navigate to content
|
||||||
// indicated by the window location hash.
|
// indicated by the window location hash.
|
||||||
hash();
|
hash();
|
||||||
@ -544,7 +600,6 @@
|
|||||||
reportBuildErrors();
|
reportBuildErrors();
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
// export the api and build-UI function
|
// export the api and build-UI function
|
||||||
return {
|
return {
|
||||||
ui: uiApi,
|
ui: uiApi,
|
||||||
|
90
web/gui/src/main/webapp/sampleKeys.js
Normal file
90
web/gui/src/main/webapp/sampleKeys.js
Normal file
@ -0,0 +1,90 @@
|
|||||||
|
/*
|
||||||
|
* Copyright 2014 Open Networking Laboratory
|
||||||
|
*
|
||||||
|
* Licensed under the Apache License, Version 2.0 (the "License");
|
||||||
|
* you may not use this file except in compliance with the License.
|
||||||
|
* You may obtain a copy of the License at
|
||||||
|
*
|
||||||
|
* http://www.apache.org/licenses/LICENSE-2.0
|
||||||
|
*
|
||||||
|
* Unless required by applicable law or agreed to in writing, software
|
||||||
|
* distributed under the License is distributed on an "AS IS" BASIS,
|
||||||
|
* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
|
||||||
|
* See the License for the specific language governing permissions and
|
||||||
|
* limitations under the License.
|
||||||
|
*/
|
||||||
|
|
||||||
|
/*
|
||||||
|
Sample view to illustrate key bindings.
|
||||||
|
|
||||||
|
@author Simon Hunt
|
||||||
|
*/
|
||||||
|
|
||||||
|
(function (onos) {
|
||||||
|
'use strict';
|
||||||
|
|
||||||
|
var keyDispatch = {
|
||||||
|
Z: keyUndo,
|
||||||
|
X: keyCut,
|
||||||
|
C: keyCopy,
|
||||||
|
V: keyPaste,
|
||||||
|
space: keySpace
|
||||||
|
};
|
||||||
|
|
||||||
|
function keyUndo(view) {
|
||||||
|
note(view, 'Z = UNDO');
|
||||||
|
}
|
||||||
|
|
||||||
|
function keyCut(view) {
|
||||||
|
note(view, 'X = CUT');
|
||||||
|
}
|
||||||
|
|
||||||
|
function keyCopy(view) {
|
||||||
|
note(view, 'C = COPY');
|
||||||
|
}
|
||||||
|
|
||||||
|
function keyPaste(view) {
|
||||||
|
note(view, 'V = PASTE');
|
||||||
|
}
|
||||||
|
|
||||||
|
function keySpace(view) {
|
||||||
|
note(view, 'The SpaceBar');
|
||||||
|
}
|
||||||
|
|
||||||
|
function note(view, msg) {
|
||||||
|
view.$div.append('p')
|
||||||
|
.text(msg)
|
||||||
|
.style({
|
||||||
|
'font-size': '10pt',
|
||||||
|
color: 'darkorange',
|
||||||
|
padding: '0 20px',
|
||||||
|
margin: 0
|
||||||
|
});
|
||||||
|
}
|
||||||
|
|
||||||
|
function keyCallback(view, key, keyCode, event) {
|
||||||
|
note(view, 'Key = ' + key + ' KeyCode = ' + keyCode);
|
||||||
|
}
|
||||||
|
|
||||||
|
// Keys using a keyset to target specific keys only
|
||||||
|
function load(view, ctx) {
|
||||||
|
// this maps specific keys to specific functions (1)
|
||||||
|
view.setKeys(keyDispatch);
|
||||||
|
// whereas, this installs a general key handler function (2)
|
||||||
|
view.setKeys(keyCallback);
|
||||||
|
|
||||||
|
// Note that (1) takes precedence over (2)
|
||||||
|
|
||||||
|
view.$div.append('p')
|
||||||
|
.text('Press a key or two (try Z,X,C,V and others) ...')
|
||||||
|
.style('padding', '2px 8px');
|
||||||
|
}
|
||||||
|
|
||||||
|
// == register the view here, with links to lifecycle callbacks
|
||||||
|
|
||||||
|
onos.ui.addView('sampleKeys', {
|
||||||
|
reset: true, // empty the div on reset
|
||||||
|
load: load
|
||||||
|
});
|
||||||
|
|
||||||
|
}(ONOS));
|
Loading…
x
Reference in New Issue
Block a user