First round of ClusterMetadata improvements:
Introduced a PartitionId type for identifying partitions
Introduced a admin service for making metadata updates
Update cluster.json format to specify all partitions (including p0) and changed partitionId to be an int.
Change-Id: Ia0617f1ed0ce886680dcee4f5396a4bbdfa225da
diff --git a/core/api/src/main/java/org/onosproject/cluster/Partition.java b/core/api/src/main/java/org/onosproject/cluster/Partition.java
index 1eca4ae..e3a1352 100644
--- a/core/api/src/main/java/org/onosproject/cluster/Partition.java
+++ b/core/api/src/main/java/org/onosproject/cluster/Partition.java
@@ -1,5 +1,5 @@
/*
- * Copyright 2015 Open Networking Laboratory
+ * Copyright 2016 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.
@@ -15,77 +15,23 @@
*/
package org.onosproject.cluster;
-import java.util.Arrays;
import java.util.Collection;
-import java.util.Set;
-
-import com.google.common.collect.ImmutableSet;
-import com.google.common.collect.Sets;
-
-import static com.google.common.base.Preconditions.checkNotNull;
/**
- * A data partition.
- * <p>
- * Partition represents a slice of the data space and is made up of a collection
- * of {@link org.onosproject.cluster.ControllerNode nodes}
- * that all maintain copies of this data.
+ * A partition or shard is a group of controller nodes that are work together to maintain state.
+ * A ONOS cluster is typically made of of one or partitions over which the the data is partitioned.
*/
-public class Partition {
-
- private final String name;
- private final Set<NodeId> members;
-
- private Partition() {
- name = null;
- members = null;
- }
-
- public Partition(String name, Collection<NodeId> members) {
- this.name = checkNotNull(name);
- this.members = ImmutableSet.copyOf(checkNotNull(members));
- }
+public interface Partition {
/**
- * Returns the partition name.
- * <p>
- * Each partition is identified by a unique name.
- * @return partition name
+ * Returns the partition identifier.
+ * @return partition identifier
*/
- public String getName() {
- return this.name;
- }
+ PartitionId getId();
/**
- * Returns the collection of controller node identifiers that make up this partition.
+ * Returns the controller nodes that are members of this partition.
* @return collection of controller node identifiers
*/
- public Collection<NodeId> getMembers() {
- return this.members;
- }
-
- @Override
- public int hashCode() {
- return Arrays.deepHashCode(new Object[] {name, members});
- }
-
- @Override
- public boolean equals(Object other) {
- if (this == other) {
- return true;
- }
-
- if (other == null || !Partition.class.isInstance(other)) {
- return false;
- }
-
- Partition that = (Partition) other;
-
- if (!this.name.equals(that.name) || (this.members == null && that.members != null)
- || (this.members != null && that.members == null) || this.members.size() != that.members.size()) {
- return false;
- }
-
- return Sets.symmetricDifference(this.members, that.members).isEmpty();
- }
-}
\ No newline at end of file
+ Collection<NodeId> getMembers();
+}