Toggle navigation
Toggle navigation
This project
Loading...
Sign in
홍길동
/
onos
Go to a project
Toggle navigation
Toggle navigation pinning
Projects
Groups
Snippets
Help
Project
Activity
Repository
Pipelines
Graphs
Issues
0
Merge Requests
0
Wiki
Snippets
Network
Create a new issue
Builds
Commits
Issue Boards
Authored by
alshabib
2014-09-25 14:30:31 -0700
Browse Files
Options
Browse Files
Download
Plain Diff
Commit
38f0b606b095e164b18487512f12cbe6d3514c88
38f0b606
2 parents
99b8fdcd
497c884d
Merge branch 'master' of
ssh://gerrit.onlab.us:29418/onos-next
Show whitespace changes
Inline
Side-by-side
Showing
13 changed files
with
465 additions
and
6 deletions
core/api/src/main/java/org/onlab/onos/cluster/MastershipTerm.java
core/api/src/main/java/org/onlab/onos/cluster/MastershipTermService.java
core/api/src/main/java/org/onlab/onos/net/device/DeviceProviderService.java
core/api/src/main/java/org/onlab/onos/store/Timestamp.java
core/store/src/main/java/org/onlab/onos/store/impl/OnosTimestamp.java
core/store/src/main/java/org/onlab/onos/store/impl/StoreManager.java
core/store/src/main/java/org/onlab/onos/store/serializers/DefaultPortSerializer.java
core/store/src/main/java/org/onlab/onos/store/serializers/DeviceIdSerializer.java
core/store/src/main/java/org/onlab/onos/store/serializers/IpPrefixSerializer.java
core/store/src/main/java/org/onlab/onos/store/serializers/OnosTimestampSerializer.java
core/store/src/main/java/org/onlab/onos/store/serializers/PortNumberSerializer.java
core/store/src/main/java/org/onlab/onos/store/serializers/ProviderIdSerializer.java
openflow/ctl/src/test/java/org/onlab/onos/openflow/controller/impl/RoleManagerTest.java
core/api/src/main/java/org/onlab/onos/cluster/MastershipTerm.java
0 → 100644
View file @
38f0b60
package
org
.
onlab
.
onos
.
cluster
;
public
class
MastershipTerm
{
private
final
NodeId
master
=
null
;
private
int
termNumber
;
}
core/api/src/main/java/org/onlab/onos/cluster/MastershipTermService.java
0 → 100644
View file @
38f0b60
package
org
.
onlab
.
onos
.
cluster
;
import
org.onlab.onos.net.DeviceId
;
// TODO give me a better name
/**
* Service to obtain mastership term information.
*/
public
interface
MastershipTermService
{
// TBD: manage/increment per device mastership change
// or increment on any change
/**
* Returns the term number of mastership change occurred for given device.
*
* @param deviceId the identifier of the device
* @return current master's term.
*/
MastershipTerm
getMastershipTerm
(
DeviceId
deviceId
);
}
core/api/src/main/java/org/onlab/onos/net/device/DeviceProviderService.java
View file @
38f0b60
...
...
@@ -51,7 +51,7 @@ public interface DeviceProviderService extends ProviderService<DeviceProvider> {
* mastership role on the device.
*
* @param deviceId identity of the device
* @param role mastership role
being assert
ed
* @param role mastership role
that was asserted but fail
ed
*/
void
unableToAssertRole
(
DeviceId
deviceId
,
MastershipRole
role
);
...
...
core/api/src/main/java/org/onlab/onos/store/Timestamp.java
0 → 100644
View file @
38f0b60
package
org
.
onlab
.
onos
.
store
;
/**
* Opaque version structure.
*/
public
interface
Timestamp
extends
Comparable
<
Timestamp
>
{
}
core/store/src/main/java/org/onlab/onos/store/impl/OnosTimestamp.java
0 → 100644
View file @
38f0b60
package
org
.
onlab
.
onos
.
store
.
impl
;
import
static
com
.
google
.
common
.
base
.
Preconditions
.
checkNotNull
;
import
static
com
.
google
.
common
.
base
.
Preconditions
.
checkArgument
;
import
java.util.Objects
;
import
org.onlab.onos.net.ElementId
;
import
org.onlab.onos.store.Timestamp
;
import
com.google.common.base.MoreObjects
;
import
com.google.common.collect.ComparisonChain
;
// If it is store specific, implement serializable interfaces?
/**
* Default implementation of Timestamp.
*/
public
final
class
OnosTimestamp
implements
Timestamp
{
private
final
ElementId
id
;
private
final
int
termNumber
;
private
final
int
sequenceNumber
;
/**
* Default version tuple.
*
* @param id identifier of the element
* @param termNumber the mastership termNumber
* @param sequenceNumber the sequenceNumber number within the termNumber
*/
public
OnosTimestamp
(
ElementId
id
,
int
termNumber
,
int
sequenceNumber
)
{
this
.
id
=
checkNotNull
(
id
);
this
.
termNumber
=
termNumber
;
this
.
sequenceNumber
=
sequenceNumber
;
}
@Override
public
int
compareTo
(
Timestamp
o
)
{
checkArgument
(
o
instanceof
OnosTimestamp
,
"Must be OnosTimestamp"
,
o
);
OnosTimestamp
that
=
(
OnosTimestamp
)
o
;
checkArgument
(
this
.
id
.
equals
(
that
.
id
),
"Cannot compare version for different element this:%s, that:%s"
,
this
,
that
);
return
ComparisonChain
.
start
()
.
compare
(
this
.
termNumber
,
that
.
termNumber
)
.
compare
(
this
.
sequenceNumber
,
that
.
sequenceNumber
)
.
result
();
}
@Override
public
int
hashCode
()
{
return
Objects
.
hash
(
id
,
termNumber
,
sequenceNumber
);
}
@Override
public
boolean
equals
(
Object
obj
)
{
if
(
this
==
obj
)
{
return
true
;
}
if
(!(
obj
instanceof
OnosTimestamp
))
{
return
false
;
}
OnosTimestamp
that
=
(
OnosTimestamp
)
obj
;
return
Objects
.
equals
(
this
.
id
,
that
.
id
)
&&
Objects
.
equals
(
this
.
termNumber
,
that
.
termNumber
)
&&
Objects
.
equals
(
this
.
sequenceNumber
,
that
.
sequenceNumber
);
}
@Override
public
String
toString
()
{
return
MoreObjects
.
toStringHelper
(
getClass
())
.
add
(
"id"
,
id
)
.
add
(
"termNumber"
,
termNumber
)
.
add
(
"sequenceNumber"
,
sequenceNumber
)
.
toString
();
}
/**
* Returns the element.
*
* @return element identifier
*/
public
ElementId
id
()
{
return
id
;
}
/**
* Returns the termNumber.
*
* @return termNumber
*/
public
int
termNumber
()
{
return
termNumber
;
}
/**
* Returns the sequenceNumber number.
*
* @return sequenceNumber
*/
public
int
sequenceNumber
()
{
return
sequenceNumber
;
}
}
core/store/src/main/java/org/onlab/onos/store/impl/StoreManager.java
View file @
38f0b60
...
...
@@ -4,7 +4,9 @@ import com.hazelcast.config.Config;
import
com.hazelcast.config.FileSystemXmlConfig
;
import
com.hazelcast.core.Hazelcast
;
import
com.hazelcast.core.HazelcastInstance
;
import
de.javakaffee.kryoserializers.URISerializer
;
import
org.apache.felix.scr.annotations.Activate
;
import
org.apache.felix.scr.annotations.Component
;
import
org.apache.felix.scr.annotations.Deactivate
;
...
...
@@ -26,6 +28,7 @@ import org.onlab.onos.store.serializers.DefaultPortSerializer;
import
org.onlab.onos.store.serializers.DeviceIdSerializer
;
import
org.onlab.onos.store.serializers.IpPrefixSerializer
;
import
org.onlab.onos.store.serializers.NodeIdSerializer
;
import
org.onlab.onos.store.serializers.OnosTimestampSerializer
;
import
org.onlab.onos.store.serializers.PortNumberSerializer
;
import
org.onlab.onos.store.serializers.ProviderIdSerializer
;
import
org.onlab.packet.IpPrefix
;
...
...
@@ -90,6 +93,7 @@ public class StoreManager implements StoreService {
.
register
(
DeviceId
.
class
,
new
DeviceIdSerializer
())
.
register
(
PortNumber
.
class
,
new
PortNumberSerializer
())
.
register
(
DefaultPort
.
class
,
new
DefaultPortSerializer
())
.
register
(
OnosTimestamp
.
class
,
new
OnosTimestampSerializer
())
.
build
()
.
populate
(
10
);
}
...
...
core/store/src/main/java/org/onlab/onos/store/serializers/DefaultPortSerializer.java
View file @
38f0b60
...
...
@@ -9,7 +9,6 @@ import com.esotericsoftware.kryo.Serializer;
import
com.esotericsoftware.kryo.io.Input
;
import
com.esotericsoftware.kryo.io.Output
;
// TODO move to util, etc.
/**
* Kryo Serializer for {@link DefaultPort}.
*/
...
...
core/store/src/main/java/org/onlab/onos/store/serializers/DeviceIdSerializer.java
View file @
38f0b60
...
...
@@ -9,7 +9,6 @@ import com.esotericsoftware.kryo.Serializer;
import
com.esotericsoftware.kryo.io.Input
;
import
com.esotericsoftware.kryo.io.Output
;
//TODO move to util, etc.
/**
* Kryo Serializer for {@link DeviceId}.
*/
...
...
core/store/src/main/java/org/onlab/onos/store/serializers/IpPrefixSerializer.java
View file @
38f0b60
...
...
@@ -7,7 +7,6 @@ import com.esotericsoftware.kryo.Serializer;
import
com.esotericsoftware.kryo.io.Input
;
import
com.esotericsoftware.kryo.io.Output
;
// TODO move to util, etc.
/**
* Kryo Serializer for {@link IpPrefix}.
*/
...
...
core/store/src/main/java/org/onlab/onos/store/serializers/OnosTimestampSerializer.java
0 → 100644
View file @
38f0b60
package
org
.
onlab
.
onos
.
store
.
serializers
;
import
org.onlab.onos.net.ElementId
;
import
org.onlab.onos.store.impl.OnosTimestamp
;
import
com.esotericsoftware.kryo.Kryo
;
import
com.esotericsoftware.kryo.Serializer
;
import
com.esotericsoftware.kryo.io.Input
;
import
com.esotericsoftware.kryo.io.Output
;
/**
* Kryo Serializer for {@link OnosTimestamp}.
*/
public
class
OnosTimestampSerializer
extends
Serializer
<
OnosTimestamp
>
{
/**
* Default constructor.
*/
public
OnosTimestampSerializer
()
{
// non-null, immutable
super
(
false
,
true
);
}
@Override
public
void
write
(
Kryo
kryo
,
Output
output
,
OnosTimestamp
object
)
{
kryo
.
writeClassAndObject
(
output
,
object
.
id
());
output
.
writeInt
(
object
.
termNumber
());
output
.
writeInt
(
object
.
sequenceNumber
());
}
@Override
public
OnosTimestamp
read
(
Kryo
kryo
,
Input
input
,
Class
<
OnosTimestamp
>
type
)
{
ElementId
id
=
(
ElementId
)
kryo
.
readClassAndObject
(
input
);
final
int
term
=
input
.
readInt
();
final
int
sequence
=
input
.
readInt
();
return
new
OnosTimestamp
(
id
,
term
,
sequence
);
}
}
core/store/src/main/java/org/onlab/onos/store/serializers/PortNumberSerializer.java
View file @
38f0b60
...
...
@@ -7,7 +7,6 @@ import com.esotericsoftware.kryo.Serializer;
import
com.esotericsoftware.kryo.io.Input
;
import
com.esotericsoftware.kryo.io.Output
;
// TODO move to util, etc.
/**
* Serializer for {@link PortNumber}.
*/
...
...
core/store/src/main/java/org/onlab/onos/store/serializers/ProviderIdSerializer.java
View file @
38f0b60
...
...
@@ -7,7 +7,6 @@ import com.esotericsoftware.kryo.Serializer;
import
com.esotericsoftware.kryo.io.Input
;
import
com.esotericsoftware.kryo.io.Output
;
//TODO move to util, etc.
/**
* Serializer for {@link ProviderId}.
*/
...
...
openflow/ctl/src/test/java/org/onlab/onos/openflow/controller/impl/RoleManagerTest.java
0 → 100644
View file @
38f0b60
package
org
.
onlab
.
onos
.
openflow
.
controller
.
impl
;
import
java.io.IOException
;
import
java.util.List
;
import
org.jboss.netty.channel.Channel
;
import
org.junit.After
;
import
org.junit.Before
;
import
org.junit.Test
;
import
org.onlab.onos.openflow.controller.RoleState
;
import
org.onlab.onos.openflow.controller.driver.OpenFlowAgent
;
import
org.onlab.onos.openflow.controller.driver.OpenFlowSwitchDriver
;
import
org.onlab.onos.openflow.controller.driver.RoleHandler
;
import
org.onlab.onos.openflow.controller.driver.RoleRecvStatus
;
import
org.onlab.onos.openflow.controller.driver.RoleReplyInfo
;
import
org.onlab.onos.openflow.controller.driver.SwitchStateException
;
import
org.projectfloodlight.openflow.protocol.OFDescStatsReply
;
import
org.projectfloodlight.openflow.protocol.OFErrorMsg
;
import
org.projectfloodlight.openflow.protocol.OFFactories
;
import
org.projectfloodlight.openflow.protocol.OFFactory
;
import
org.projectfloodlight.openflow.protocol.OFFeaturesReply
;
import
org.projectfloodlight.openflow.protocol.OFMessage
;
import
org.projectfloodlight.openflow.protocol.OFPortDesc
;
import
org.projectfloodlight.openflow.protocol.OFPortDescStatsReply
;
import
org.projectfloodlight.openflow.protocol.OFVersion
;
import
org.projectfloodlight.openflow.types.U64
;
import
static
org
.
junit
.
Assert
.
assertEquals
;
import
static
org
.
onlab
.
onos
.
openflow
.
controller
.
RoleState
.*;
import
static
org
.
onlab
.
onos
.
openflow
.
controller
.
driver
.
RoleRecvStatus
.*;
public
class
RoleManagerTest
{
private
static
final
U64
GID
=
U64
.
of
(
10L
);
private
static
final
long
XID
=
1L
;
private
OpenFlowSwitchDriver
sw
;
private
RoleManager
manager
;
@Before
public
void
setUp
()
{
sw
=
new
TestSwitchDriver
();
manager
=
new
RoleManager
(
sw
);
}
@After
public
void
tearDown
()
{
manager
=
null
;
sw
=
null
;
}
@Test
public
void
deliverRoleReply
()
{
RoleRecvStatus
status
;
RoleReplyInfo
asserted
=
new
RoleReplyInfo
(
MASTER
,
GID
,
XID
);
RoleReplyInfo
unasserted
=
new
RoleReplyInfo
(
SLAVE
,
GID
,
XID
);
try
{
//call without sendRoleReq() for requestPending = false
//first, sw.role == null
status
=
manager
.
deliverRoleReply
(
asserted
);
assertEquals
(
"expectation wrong"
,
OTHER_EXPECTATION
,
status
);
sw
.
setRole
(
MASTER
);
assertEquals
(
"expectation wrong"
,
OTHER_EXPECTATION
,
status
);
sw
.
setRole
(
SLAVE
);
//match to pendingRole = MASTER, requestPending = true
manager
.
sendRoleRequest
(
MASTER
,
MATCHED_CURRENT_ROLE
);
status
=
manager
.
deliverRoleReply
(
asserted
);
assertEquals
(
"expectation wrong"
,
MATCHED_CURRENT_ROLE
,
status
);
//requestPending never gets reset -- this might be a bug.
status
=
manager
.
deliverRoleReply
(
unasserted
);
assertEquals
(
"expectation wrong"
,
OTHER_EXPECTATION
,
status
);
assertEquals
(
"pending role mismatch"
,
MASTER
,
((
TestSwitchDriver
)
sw
).
failed
);
}
catch
(
IOException
|
SwitchStateException
e
)
{
assertEquals
(
"unexpected error thrown"
,
SwitchStateException
.
class
,
e
.
getClass
());
}
}
private
class
TestSwitchDriver
implements
OpenFlowSwitchDriver
{
RoleState
failed
=
null
;
RoleState
current
=
null
;
@Override
public
void
sendMsg
(
OFMessage
msg
)
{
}
@Override
public
void
sendMsg
(
List
<
OFMessage
>
msgs
)
{
}
@Override
public
void
handleMessage
(
OFMessage
fromSwitch
)
{
}
@Override
public
void
setRole
(
RoleState
role
)
{
current
=
role
;
}
@Override
public
RoleState
getRole
()
{
return
current
;
}
@Override
public
List
<
OFPortDesc
>
getPorts
()
{
return
null
;
}
@Override
public
OFFactory
factory
()
{
// return what-ever triggers requestPending = true
return
OFFactories
.
getFactory
(
OFVersion
.
OF_10
);
}
@Override
public
String
getStringId
()
{
return
"100"
;
}
@Override
public
long
getId
()
{
return
0
;
}
@Override
public
String
manfacturerDescription
()
{
return
null
;
}
@Override
public
String
datapathDescription
()
{
return
null
;
}
@Override
public
String
hardwareDescription
()
{
return
null
;
}
@Override
public
String
softwareDescription
()
{
return
null
;
}
@Override
public
String
serialNumber
()
{
return
null
;
}
@Override
public
void
disconnectSwitch
()
{
}
@Override
public
void
returnRoleAssertFailure
(
RoleState
role
)
{
failed
=
role
;
}
@Override
public
void
setAgent
(
OpenFlowAgent
agent
)
{
}
@Override
public
void
setRoleHandler
(
RoleHandler
roleHandler
)
{
}
@Override
public
void
reassertRole
()
{
}
@Override
public
boolean
handleRoleError
(
OFErrorMsg
error
)
{
return
false
;
}
@Override
public
void
handleNiciraRole
(
OFMessage
m
)
throws
SwitchStateException
{
}
@Override
public
void
handleRole
(
OFMessage
m
)
throws
SwitchStateException
{
}
@Override
public
void
startDriverHandshake
()
{
}
@Override
public
boolean
isDriverHandshakeComplete
()
{
return
false
;
}
@Override
public
void
processDriverHandshakeMessage
(
OFMessage
m
)
{
}
@Override
public
boolean
connectSwitch
()
{
return
false
;
}
@Override
public
boolean
activateMasterSwitch
()
{
return
false
;
}
@Override
public
boolean
activateEqualSwitch
()
{
return
false
;
}
@Override
public
void
transitionToEqualSwitch
()
{
}
@Override
public
void
transitionToMasterSwitch
()
{
}
@Override
public
void
removeConnectedSwitch
()
{
}
@Override
public
void
setPortDescReply
(
OFPortDescStatsReply
portDescReply
)
{
}
@Override
public
void
setFeaturesReply
(
OFFeaturesReply
featuresReply
)
{
}
@Override
public
void
setSwitchDescription
(
OFDescStatsReply
desc
)
{
}
@Override
public
int
getNextTransactionId
()
{
return
(
int
)
XID
;
}
@Override
public
Boolean
supportNxRole
()
{
return
true
;
}
@Override
public
void
setOFVersion
(
OFVersion
ofV
)
{
}
@Override
public
void
setTableFull
(
boolean
full
)
{
}
@Override
public
void
setChannel
(
Channel
channel
)
{
}
@Override
public
void
setConnected
(
boolean
connected
)
{
}
@Override
public
boolean
isConnected
()
{
return
false
;
}
@Override
public
void
write
(
OFMessage
msg
)
{
}
@Override
public
void
write
(
List
<
OFMessage
>
msgs
)
{
}
}
}
Please
register
or
login
to post a comment