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

com.gemstone.gemfire.internal.cache.Node Maven / Gradle / Ivy

There is a newer version: 2.0-BETA
Show newest version
/*
 * Copyright (c) 2010-2015 Pivotal Software, Inc. All rights reserved.
 *
 * 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. See accompanying
 * LICENSE file.
 */

package com.gemstone.gemfire.internal.cache;
import java.io.*;

import com.gemstone.gemfire.internal.ExternalizableDSFID;
import com.gemstone.gemfire.internal.InternalDataSerializer;
import com.gemstone.gemfire.internal.shared.Version;
import com.gemstone.gemfire.DataSerializer;
import com.gemstone.gemfire.distributed.internal.membership.InternalDistributedMember;

/**
 * Stores information about a PartitionedRegion singleton instance running
 * inside a virtual machine. This Node is said to be a participant, cooperating
 * with other Nodes to physically manage a logically named PartitionedRegion.
 * 

* Nodes are stored in a list within PartitionedRegionConfig which is stored * globally as the value of an named entry in the * DistributedHashMap.PARTITIONED_REGION_NAME. Node must be * Serializable and have a no args Constructor. Since Nodes are used as keys in * each Thread's ThreadLocal map of Nodes to Connections, Node must implement * hashCode and equals. *

* Node maintains a field for maxMemory (fixed) to enable other Nodes to * determine whether the Node should be the target of a canRebalance request. If * the Node's maxMemory is 0, then the Node is advertising that it never should * receive a request to rebalance. * * @author Russell Okamoto */ public final class Node extends ExternalizableDSFID { private InternalDistributedMember memberId; public static final int NONE = 0; public static final int ACCESSOR = 1; public static final int DATASTORE = 2; public static final int ACCESSOR_DATASTORE = 3; public static final int FIXED_PR_ACCESSOR = 4; public static final int FIXED_PR_DATASTORE = 5; private int prType = Node.NONE; private boolean isPersistent = false; byte cacheLoaderWriterByte; private int serialNumber; public Node(InternalDistributedMember id, int serialNumber) { this.memberId = id; this.serialNumber = serialNumber; } public Node(Node node) { this.memberId = node.getMemberId(); this.serialNumber = node.serialNumber; } public Node(DataInput in) throws IOException, ClassNotFoundException { fromData(in); } // for Externalizable public Node() { } public InternalDistributedMember getMemberId() { return this.memberId; } public boolean isPersistent() { return this.isPersistent; } public void setPersistence(boolean isPersistent) { this.isPersistent = isPersistent; } @Override public String toString() { return ("Node=[memberId=" + this.memberId + "; prType=" + prType + "; isPersistent="+ isPersistent+"]"); } @Override public int hashCode() { return this.memberId.hashCode() + 31 * serialNumber; } public int getPRType() { return prType; } public void setPRType(int type) { this.prType = type; } public void setLoaderWriterByte(byte b) { this.cacheLoaderWriterByte = b; } public boolean isCacheLoaderAttached() { if (this.cacheLoaderWriterByte == 0x01 || this.cacheLoaderWriterByte == 0x03) { return true; } else { return false; } } public boolean isCacheWriterAttached() { if (this.cacheLoaderWriterByte == 0x02 || this.cacheLoaderWriterByte == 0x03) { return true; } else { return false; } } @Override public boolean equals(Object obj) { if (obj == this) { return true; } if (obj instanceof Node) { Node n = (Node)obj; if (this.memberId.equals(n.memberId) && this.serialNumber == n.serialNumber) { return true; } } return false; } @Override public int getDSFID() { return PR_NODE; } @Override public void toData(DataOutput out) throws IOException { InternalDataSerializer.invokeToData(this.memberId, out); out.writeInt(this.prType); out.writeBoolean(this.isPersistent); out.writeByte(this.cacheLoaderWriterByte); out.writeInt(serialNumber); } @Override public void fromData(DataInput in) throws IOException, ClassNotFoundException { this.memberId = new InternalDistributedMember(); InternalDataSerializer.invokeFromData(this.memberId, in); this.prType = in.readInt(); this.isPersistent = in.readBoolean(); this.cacheLoaderWriterByte = in.readByte(); this.serialNumber = in.readInt(); } @Override public Version[] getSerializationVersions() { return null; } }





© 2015 - 2024 Weber Informatics LLC | Privacy Policy