All Downloads are FREE. Search and download functionalities are using the official Maven repository.

oracle.kv.impl.topo.RepGroup Maven / Gradle / Ivy

/*-
 * Copyright (C) 2011, 2018 Oracle and/or its affiliates. All rights reserved.
 *
 * This file was distributed by Oracle as part of a version of Oracle NoSQL
 * Database made available at:
 *
 * http://www.oracle.com/technetwork/database/database-technologies/nosqldb/downloads/index.html
 *
 * Please see the LICENSE file included in the top-level directory of the
 * appropriate version of Oracle NoSQL Database for a copy of the license and
 * additional information.
 */

package oracle.kv.impl.topo;

import java.io.DataInput;
import java.io.DataOutput;
import java.io.IOException;
import java.io.ObjectInputStream;
import java.util.Collection;

import oracle.kv.impl.topo.ResourceId.ResourceType;
import oracle.kv.impl.topo.Topology.Component;
import oracle.kv.impl.topo.change.TopologyChange;
import oracle.kv.impl.util.JsonUtils;

import com.sleepycat.persist.model.Persistent;

import org.codehaus.jackson.node.ObjectNode;

/**
 * The RepGroup in a {@link RepGroupMap}. It identifies the RNs within the
 * group.
 * 

* Note that a RepGroup simply serves to group RepNodes. It does not have any * attributes associated with it. * *

DPL versions: *

    *
  • version 0: original *
  • version 1: added arbNodeMap field *
* * @see #writeFastExternal FastExternalizable format */ @Persistent(version=1) public class RepGroup extends Component { private static final long serialVersionUID = 1L; private final ComponentMap repNodeMap; private ComponentMap arbNodeMap; public RepGroup() { repNodeMap = new RepNodeComponentMap(this, null); arbNodeMap = new ArbNodeComponentMap(this, null); } /** * Note that this constructor does not copy the component map. It's * intended exclusively for use by the cloning operation below to create a * RepGroup entry in the topology change list. */ private RepGroup(RepGroup repGroup) { super(repGroup); repNodeMap = new RepNodeComponentMap(this, null); arbNodeMap = new ArbNodeComponentMap(this, null); } RepGroup(Topology topology, RepGroupId rgId, DataInput in, short serialVersion) throws IOException { super(topology, rgId, in, serialVersion); repNodeMap = new RepNodeComponentMap(this, topology, in, serialVersion); arbNodeMap = new ArbNodeComponentMap(this, topology, in, serialVersion); } /** * Writes this object to the output stream. Format: *
    *
  1. ({@link Component}) {@code super} *
  2. ({@link RepNodeComponentMap}) RepNode map *
  3. ({@link ArbNodeComponentMap}) ArbNode map *
*/ @Override public void writeFastExternal(DataOutput out, short serialVersion) throws IOException { super.writeFastExternal(out, serialVersion); repNodeMap.writeFastExternal(out, serialVersion); arbNodeMap.writeFastExternal(out, serialVersion); } /* (non-Javadoc) * @see oracle.kv.impl.topo.Topology.Component#getResourceType() */ @Override public ResourceType getResourceType() { return ResourceType.REP_GROUP; } public Collection getRepNodes() { return repNodeMap.getAll(); } /* (non-Javadoc) * @see oracle.kv.impl.topo.Topology.Component#clone() */ @Override public Component clone() { return new RepGroup(this); } @Override public int hashCode() { final int prime = 31; int result = super.hashCode(); result = prime * result + ((repNodeMap == null) ? 0 : repNodeMap.hashCode()); return result; } @Override public boolean equals(Object obj) { if (this == obj) { return true; } if (!super.equals(obj)) { return false; } if (getClass() != obj.getClass()) { return false; } RepGroup other = (RepGroup) obj; if (repNodeMap == null) { if (other.repNodeMap != null) { return false; } } else if (!repNodeMap.equals(other.repNodeMap)) { return false; } else if (!super.equals(obj)) { return false; } return true; } public RepNode get(RepNodeId repNodeId) { return repNodeMap.get(repNodeId); } public RepNode add(RepNode repNode) { return repNodeMap.add(repNode); } public RepNode update(RepNodeId resourceId, RepNode repNode) { return repNodeMap.update(resourceId, repNode); } public RepNode remove(RepNodeId repNodeId) { return repNodeMap.remove(repNodeId); } public void apply(TopologyChange change) { repNodeMap.apply(change); } public Collection getArbNodes() { return arbNodeMap.getAll(); } public ArbNode get(ArbNodeId arbNodeId) { return arbNodeMap.get(arbNodeId); } public ArbNode add(ArbNode arbNode) { return arbNodeMap.add(arbNode); } public ArbNode update(ArbNodeId resourceId, ArbNode arbNode) { return arbNodeMap.update(resourceId, arbNode); } public ArbNode remove(ArbNodeId arbNodeId) { return arbNodeMap.remove(arbNodeId); } public void applyArbChange(TopologyChange change) { arbNodeMap.apply(change); } /** * Wraps the set method to ensure that the "topology" associated with the * repNodeMap is set appropriately as well. */ @Override public void setTopology(Topology topology) { super.setTopology(topology); repNodeMap.setTopology(topology); arbNodeMap.setTopology(topology); } @Override public String toString() { return "[" + getResourceId() + "]"; } @Override public ObjectNode toJson() { final ObjectNode top = JsonUtils.createObjectNode(); top.put("resourceId", getResourceId().toString()); return top; } private void readObject(ObjectInputStream in) throws IOException, ClassNotFoundException { in.defaultReadObject(); if (arbNodeMap == null) { arbNodeMap = new ArbNodeComponentMap(this, null); } } }




© 2015 - 2025 Weber Informatics LLC | Privacy Policy