blob: f6a7efc706398cc8a25a1b090a408ff419813a0f [file] [log] [blame]
/*
* Licensed to the Apache Software Foundation (ASF) under one or more contributor license
* agreements. See the NOTICE file distributed with this work for additional information regarding
* copyright ownership. The ASF licenses this file to You 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.
*/
package org.apache.geode.cache;
import java.io.ObjectStreamException;
import java.io.Serializable;
import java.util.Arrays;
import java.util.Collections;
import java.util.List;
import org.apache.geode.annotations.Immutable;
/**
* Specifies how access to the region is affected when one or more required roles are lost. A role
* is lost when it is are offline and no longer present in the system membership. The
* <code>LossAction</code> is specified when configuring a region's
* {@link org.apache.geode.cache.MembershipAttributes}.
*
* @deprecated this feature is scheduled to be removed
*/
@Immutable
public class LossAction implements Serializable {
private static final long serialVersionUID = -832035480397447797L;
// NOTE: to change/add these files are impacted:
// LossAction, package.html
/**
* The region is unavailable when required roles are missing. All operations including read and
* write access are denied. All read and write operations on the region will result in
* {@link RegionAccessException} while any required roles are absent. Basic administration of the
* region is allowed, including {@linkplain Region#close close} and
* {@linkplain Region#localDestroyRegion() localDestroyRegion}.
*/
@Immutable
public static final LossAction NO_ACCESS = new LossAction("NO_ACCESS", 0);
/**
* Only local access to the region is allowed when required roles are missing. All distributed
* write operations on the region will throw {@link RegionAccessException} while any required
* roles are absent. Reads which result in a netSearch behave normally, while any attempt to
* invoke a netLoad is not allowed.
*/
@Immutable
public static final LossAction LIMITED_ACCESS = new LossAction("LIMITED_ACCESS", 1);
/**
* Access to the region is unaffected when required roles are missing.
*/
@Immutable
public static final LossAction FULL_ACCESS = new LossAction("FULL_ACCESS", 2);
/**
* Loss of required roles causes the entire cache to be closed. In addition, this process will
* disconnect from the DistributedSystem and then reconnect. Attempting to use any existing
* references to the regions or cache will throw a {@link CacheClosedException}.
*/
@Immutable
public static final LossAction RECONNECT = new LossAction("RECONNECT", 3);
/** The name of this mirror type. */
private final transient String name;
// The 4 declarations below are necessary for serialization
/** byte used as ordinal to represent this Scope */
public final byte ordinal;
@Immutable
private static final LossAction[] PRIVATE_VALUES =
{NO_ACCESS, LIMITED_ACCESS, FULL_ACCESS, RECONNECT};
/** List of all LossAction values */
@Immutable
public static final List VALUES = Collections.unmodifiableList(Arrays.asList(PRIVATE_VALUES));
private Object readResolve() throws ObjectStreamException {
return PRIVATE_VALUES[ordinal]; // Canonicalize
}
/** Creates a new instance of LossAction. */
private LossAction(String name, int ordinal) {
this.name = name;
this.ordinal = (byte) ordinal;
}
/** Return the LossAction represented by specified ordinal */
public static LossAction fromOrdinal(byte ordinal) {
return PRIVATE_VALUES[ordinal];
}
/** Return the LossAction specified by name */
public static LossAction fromName(String name) {
if (name == null || name.length() == 0) {
throw new IllegalArgumentException(
String.format("Invalid LossAction name: %s", name));
}
for (int i = 0; i < PRIVATE_VALUES.length; i++) {
if (name.equals(PRIVATE_VALUES[i].name)) {
return PRIVATE_VALUES[i];
}
}
throw new IllegalArgumentException(
String.format("Invalid LossAction name: %s", name));
}
/** Returns true if this is <code>NO_ACCESS</code>. */
public boolean isNoAccess() {
return this == NO_ACCESS;
}
/** Returns true if this is <code>LIMITED_ACCESS</code>. */
public boolean isLimitedAccess() {
return this == LIMITED_ACCESS;
}
/** Returns true if this is <code>FULL_ACCESS</code>. */
public boolean isAllAccess() {
return this == FULL_ACCESS;
}
/** Returns true if this is <code>RECONNECT</code>. */
public boolean isReconnect() {
return this == RECONNECT;
}
/**
* Returns a string representation for this loss action.
*
* @return the name of this loss action
*/
@Override
public String toString() {
return this.name;
}
}