diff --git a/extensions/geode-modules-hibernate/src/main/java/com/gemstone/gemfire/modules/hibernate/EnumType.java b/extensions/geode-modules-hibernate/src/main/java/com/gemstone/gemfire/modules/hibernate/EnumType.java index 55b824c207ee..1e6641207ccf 100644 --- a/extensions/geode-modules-hibernate/src/main/java/com/gemstone/gemfire/modules/hibernate/EnumType.java +++ b/extensions/geode-modules-hibernate/src/main/java/com/gemstone/gemfire/modules/hibernate/EnumType.java @@ -36,7 +36,6 @@ * </type> * </property> * - * @author sbawaska */ public class EnumType extends org.hibernate.type.EnumType { diff --git a/extensions/geode-modules-hibernate/src/main/java/com/gemstone/gemfire/modules/hibernate/internal/EntityVersion.java b/extensions/geode-modules-hibernate/src/main/java/com/gemstone/gemfire/modules/hibernate/internal/EntityVersion.java index abfb6753286d..d5d63d27e9e0 100644 --- a/extensions/geode-modules-hibernate/src/main/java/com/gemstone/gemfire/modules/hibernate/internal/EntityVersion.java +++ b/extensions/geode-modules-hibernate/src/main/java/com/gemstone/gemfire/modules/hibernate/internal/EntityVersion.java @@ -20,7 +20,6 @@ /** * - * @author sbawaska */ public interface EntityVersion extends SoftLock { diff --git a/extensions/geode-modules-hibernate/src/main/java/com/gemstone/gemfire/modules/hibernate/internal/EntityVersionImpl.java b/extensions/geode-modules-hibernate/src/main/java/com/gemstone/gemfire/modules/hibernate/internal/EntityVersionImpl.java index ad160e46ab6c..5f7971c65877 100644 --- a/extensions/geode-modules-hibernate/src/main/java/com/gemstone/gemfire/modules/hibernate/internal/EntityVersionImpl.java +++ b/extensions/geode-modules-hibernate/src/main/java/com/gemstone/gemfire/modules/hibernate/internal/EntityVersionImpl.java @@ -18,7 +18,6 @@ /** * - * @author sbawaska */ public class EntityVersionImpl implements EntityVersion { diff --git a/extensions/geode-modules-hibernate/src/main/java/com/gemstone/gemfire/modules/hibernate/internal/KeyWrapper.java b/extensions/geode-modules-hibernate/src/main/java/com/gemstone/gemfire/modules/hibernate/internal/KeyWrapper.java index c32107622168..8496631e1d14 100644 --- a/extensions/geode-modules-hibernate/src/main/java/com/gemstone/gemfire/modules/hibernate/internal/KeyWrapper.java +++ b/extensions/geode-modules-hibernate/src/main/java/com/gemstone/gemfire/modules/hibernate/internal/KeyWrapper.java @@ -30,7 +30,6 @@ * wraps {@link CacheKey}, and implements equals and * hashCode. This is required for register interest * operation/prefetching - * @author sbawaska * */ public class KeyWrapper implements DataSerializable { diff --git a/extensions/geode-modules-hibernate/src/test/java/com/gemstone/gemfire/modules/Owner.java b/extensions/geode-modules-hibernate/src/test/java/com/gemstone/gemfire/modules/Owner.java index 92ef56fb8c77..9a90345c95e6 100644 --- a/extensions/geode-modules-hibernate/src/test/java/com/gemstone/gemfire/modules/Owner.java +++ b/extensions/geode-modules-hibernate/src/test/java/com/gemstone/gemfire/modules/Owner.java @@ -34,9 +34,6 @@ /** * Simple JavaBean domain object representing an owner. * - * @author Ken Krebs - * @author Juergen Hoeller - * @author Sam Brannen */ @javax.persistence.Entity @Entity diff --git a/extensions/geode-modules-session/src/test/java/com/gemstone/gemfire/modules/session/internal/filter/AbstractListener.java b/extensions/geode-modules-session/src/test/java/com/gemstone/gemfire/modules/session/internal/filter/AbstractListener.java index 0bca8957c5e3..f9dbb62180c2 100644 --- a/extensions/geode-modules-session/src/test/java/com/gemstone/gemfire/modules/session/internal/filter/AbstractListener.java +++ b/extensions/geode-modules-session/src/test/java/com/gemstone/gemfire/modules/session/internal/filter/AbstractListener.java @@ -23,7 +23,6 @@ import java.util.concurrent.TimeUnit; /** - * @author jdeppe */ public abstract class AbstractListener { diff --git a/extensions/geode-modules-session/src/test/java/com/gemstone/gemfire/modules/session/internal/filter/ServletRequestAttributeListenerImpl.java b/extensions/geode-modules-session/src/test/java/com/gemstone/gemfire/modules/session/internal/filter/ServletRequestAttributeListenerImpl.java index ab0635602cfd..35ff756e1393 100644 --- a/extensions/geode-modules-session/src/test/java/com/gemstone/gemfire/modules/session/internal/filter/ServletRequestAttributeListenerImpl.java +++ b/extensions/geode-modules-session/src/test/java/com/gemstone/gemfire/modules/session/internal/filter/ServletRequestAttributeListenerImpl.java @@ -21,7 +21,6 @@ import javax.servlet.ServletRequestAttributeListener; /** - * @author jdeppe */ public class ServletRequestAttributeListenerImpl extends AbstractListener implements ServletRequestAttributeListener { diff --git a/extensions/geode-modules-session/src/test/java/com/gemstone/gemfire/modules/session/junit/NamedRunner.java b/extensions/geode-modules-session/src/test/java/com/gemstone/gemfire/modules/session/junit/NamedRunner.java index e717c9ac5ca6..de66632028db 100644 --- a/extensions/geode-modules-session/src/test/java/com/gemstone/gemfire/modules/session/junit/NamedRunner.java +++ b/extensions/geode-modules-session/src/test/java/com/gemstone/gemfire/modules/session/junit/NamedRunner.java @@ -27,7 +27,6 @@ * marked with @After and @Before (but also the Test method itself) can request * this name for which it is running. * - * @author Rudy De Busscher */ public class NamedRunner extends BlockJUnit4ClassRunner { diff --git a/extensions/geode-modules-session/src/test/java/com/gemstone/gemfire/modules/session/junit/SeparateClassloaderTestRunner.java b/extensions/geode-modules-session/src/test/java/com/gemstone/gemfire/modules/session/junit/SeparateClassloaderTestRunner.java index 4337f5a08fd0..9b4cb64eb524 100644 --- a/extensions/geode-modules-session/src/test/java/com/gemstone/gemfire/modules/session/junit/SeparateClassloaderTestRunner.java +++ b/extensions/geode-modules-session/src/test/java/com/gemstone/gemfire/modules/session/junit/SeparateClassloaderTestRunner.java @@ -23,7 +23,6 @@ import java.net.URLClassLoader; /** - * @author StackOverflow */ public class SeparateClassloaderTestRunner extends BlockJUnit4ClassRunner { diff --git a/extensions/geode-modules-tomcat7/src/test/java/com/gemstone/gemfire/modules/session/Tomcat7SessionsJUnitTest.java b/extensions/geode-modules-tomcat7/src/test/java/com/gemstone/gemfire/modules/session/Tomcat7SessionsJUnitTest.java index f31254529e06..5ac87aba2b55 100644 --- a/extensions/geode-modules-tomcat7/src/test/java/com/gemstone/gemfire/modules/session/Tomcat7SessionsJUnitTest.java +++ b/extensions/geode-modules-tomcat7/src/test/java/com/gemstone/gemfire/modules/session/Tomcat7SessionsJUnitTest.java @@ -22,7 +22,6 @@ import org.junit.experimental.categories.Category; /** - * @author Jens Deppe */ @Category(UnitTest.class) public class Tomcat7SessionsJUnitTest extends TestSessionsBase { diff --git a/extensions/geode-modules/src/main/java/com/gemstone/gemfire/modules/util/ModuleStatistics.java b/extensions/geode-modules/src/main/java/com/gemstone/gemfire/modules/util/ModuleStatistics.java index dff5b950ec64..82e882ca9951 100644 --- a/extensions/geode-modules/src/main/java/com/gemstone/gemfire/modules/util/ModuleStatistics.java +++ b/extensions/geode-modules/src/main/java/com/gemstone/gemfire/modules/util/ModuleStatistics.java @@ -27,7 +27,6 @@ /** * Statistics for modules. * - * @author sbawaska */ public class ModuleStatistics { diff --git a/extensions/geode-modules/src/main/java/com/gemstone/gemfire/modules/util/RegionConfiguration.java b/extensions/geode-modules/src/main/java/com/gemstone/gemfire/modules/util/RegionConfiguration.java index 5b025bc50187..e8d491d7ca90 100644 --- a/extensions/geode-modules/src/main/java/com/gemstone/gemfire/modules/util/RegionConfiguration.java +++ b/extensions/geode-modules/src/main/java/com/gemstone/gemfire/modules/util/RegionConfiguration.java @@ -31,7 +31,6 @@ * Class RegionConfiguration encapsulates the configuration attributes for a Region to be * created on the server. * - * @author Barry Oglesby * @since 6.5 */ @SuppressWarnings({"serial", "unchecked"}) diff --git a/extensions/geode-modules/src/main/java/com/gemstone/gemfire/modules/util/TouchPartitionedRegionEntriesFunction.java b/extensions/geode-modules/src/main/java/com/gemstone/gemfire/modules/util/TouchPartitionedRegionEntriesFunction.java index d2b74c8094c4..15212b77ff32 100644 --- a/extensions/geode-modules/src/main/java/com/gemstone/gemfire/modules/util/TouchPartitionedRegionEntriesFunction.java +++ b/extensions/geode-modules/src/main/java/com/gemstone/gemfire/modules/util/TouchPartitionedRegionEntriesFunction.java @@ -31,7 +31,6 @@ /** * Touches the keys contained in the set of keys by performing a get on the partitioned region. * - * @author Barry Oglesby */ public class TouchPartitionedRegionEntriesFunction implements Function, Declarable { diff --git a/extensions/geode-modules/src/main/java/com/gemstone/gemfire/modules/util/TouchReplicatedRegionEntriesFunction.java b/extensions/geode-modules/src/main/java/com/gemstone/gemfire/modules/util/TouchReplicatedRegionEntriesFunction.java index 735c27f4cacb..0e1561ea8752 100644 --- a/extensions/geode-modules/src/main/java/com/gemstone/gemfire/modules/util/TouchReplicatedRegionEntriesFunction.java +++ b/extensions/geode-modules/src/main/java/com/gemstone/gemfire/modules/util/TouchReplicatedRegionEntriesFunction.java @@ -30,7 +30,6 @@ * Touches the keys contained in the set of keys by performing a get on the replicated region. This is a non-data-aware * function invoked using onMembers or onServers. * - * @author Barry Oglesby */ public class TouchReplicatedRegionEntriesFunction implements Function, Declarable { diff --git a/extensions/geode-modules/src/test/java/com/gemstone/gemfire/modules/session/Tomcat6SessionsJUnitTest.java b/extensions/geode-modules/src/test/java/com/gemstone/gemfire/modules/session/Tomcat6SessionsJUnitTest.java index 0ce73aec9d23..7500a3c58008 100644 --- a/extensions/geode-modules/src/test/java/com/gemstone/gemfire/modules/session/Tomcat6SessionsJUnitTest.java +++ b/extensions/geode-modules/src/test/java/com/gemstone/gemfire/modules/session/Tomcat6SessionsJUnitTest.java @@ -22,7 +22,6 @@ import org.junit.experimental.categories.Category; /** - * @author Jens Deppe */ @Category(UnitTest.class) public class Tomcat6SessionsJUnitTest extends TestSessionsBase { diff --git a/gemfire-core/src/main/java/com/gemstone/gemfire/cache/client/internal/OpExecutorImpl.java b/gemfire-core/src/main/java/com/gemstone/gemfire/cache/client/internal/OpExecutorImpl.java new file mode 100644 index 000000000000..af19584d9184 --- /dev/null +++ b/gemfire-core/src/main/java/com/gemstone/gemfire/cache/client/internal/OpExecutorImpl.java @@ -0,0 +1,972 @@ +/* + * 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 com.gemstone.gemfire.cache.client.internal; + +import java.io.EOFException; +import java.io.IOException; +import java.io.NotSerializableException; +import java.net.ConnectException; +import java.net.SocketException; +import java.net.SocketTimeoutException; +import java.nio.BufferUnderflowException; +import java.util.HashMap; +import java.util.HashSet; +import java.util.List; +import java.util.Map; +import java.util.Set; + +import org.apache.logging.log4j.Logger; + +import com.gemstone.gemfire.CancelCriterion; +import com.gemstone.gemfire.CancelException; +import com.gemstone.gemfire.CopyException; +import com.gemstone.gemfire.GemFireException; +import com.gemstone.gemfire.SerializationException; +import com.gemstone.gemfire.cache.CacheRuntimeException; +import com.gemstone.gemfire.cache.RegionDestroyedException; +import com.gemstone.gemfire.cache.SynchronizationCommitConflictException; +import com.gemstone.gemfire.cache.TransactionException; +import com.gemstone.gemfire.cache.client.NoAvailableServersException; +import com.gemstone.gemfire.cache.client.ServerConnectivityException; +import com.gemstone.gemfire.cache.client.ServerOperationException; +import com.gemstone.gemfire.cache.client.ServerRefusedConnectionException; +import com.gemstone.gemfire.cache.client.SubscriptionNotEnabledException; +import com.gemstone.gemfire.cache.client.internal.ExecuteFunctionOp.ExecuteFunctionOpImpl; +import com.gemstone.gemfire.cache.client.internal.ExecuteRegionFunctionOp.ExecuteRegionFunctionOpImpl; +import com.gemstone.gemfire.cache.client.internal.QueueManager.QueueConnections; +import com.gemstone.gemfire.cache.client.internal.pooling.ConnectionDestroyedException; +import com.gemstone.gemfire.cache.client.internal.pooling.ConnectionManager; +import com.gemstone.gemfire.cache.execute.FunctionException; +import com.gemstone.gemfire.cache.execute.FunctionInvocationTargetException; +import com.gemstone.gemfire.distributed.internal.ServerLocation; +import com.gemstone.gemfire.internal.cache.PoolManagerImpl; +import com.gemstone.gemfire.internal.cache.PutAllPartialResultException; +import com.gemstone.gemfire.internal.cache.TXManagerImpl; +import com.gemstone.gemfire.internal.cache.TXStateProxy; +import com.gemstone.gemfire.internal.cache.execute.InternalFunctionInvocationTargetException; +import com.gemstone.gemfire.internal.cache.tier.BatchException; +import com.gemstone.gemfire.internal.cache.wan.BatchException70; +import com.gemstone.gemfire.internal.logging.LogService; +import com.gemstone.gemfire.internal.logging.log4j.LogMarker; +import com.gemstone.gemfire.security.AuthenticationRequiredException; +import com.gemstone.gemfire.security.GemFireSecurityException; + +/** + * Called from the client and execute client to server + * requests against servers. Handles retrying to different servers, + * and marking servers dead if we get exception from them. + * @since 5.7 + */ +public class OpExecutorImpl implements ExecutablePool { + private static final Logger logger = LogService.getLogger(); + + private static final boolean TRY_SERVERS_ONCE = Boolean.getBoolean("gemfire.PoolImpl.TRY_SERVERS_ONCE"); + private static final int TX_RETRY_ATTEMPT = Integer.getInteger("gemfire.txRetryAttempt", 500); + + private final ConnectionManager connectionManager; + private final int retryAttempts; + private final long serverTimeout; + private final boolean threadLocalConnections; + private final ThreadLocal localConnection = new ThreadLocal(); + /** + * maps serverLocations to Connections when threadLocalConnections is enabled with single-hop. + */ + private final ThreadLocal> localConnectionMap = new ThreadLocal>(); + private final EndpointManager endpointManager; + private final RegisterInterestTracker riTracker; + private final QueueManager queueManager; + private final CancelCriterion cancelCriterion; + private /*final*/ PoolImpl pool; + private final ThreadLocal serverAffinity = new ThreadLocal() { + @Override + protected Boolean initialValue() { + return Boolean.FALSE;}; + }; + private boolean serverAffinityFailover = false; + private final ThreadLocal affinityServerLocation = new ThreadLocal(); + private final ThreadLocal affinityRetryCount = new ThreadLocal() { + protected Integer initialValue() { + return 0; + }; + }; + + public OpExecutorImpl(ConnectionManager manager, QueueManager queueManager, EndpointManager endpointManager, RegisterInterestTracker riTracker, int retryAttempts, + long serverTimeout, boolean threadLocalConnections, CancelCriterion cancelCriterion, PoolImpl pool) { + this.connectionManager = manager; + this.queueManager = queueManager; + this.endpointManager = endpointManager; + this.riTracker = riTracker; + this.retryAttempts = retryAttempts; + this.serverTimeout = serverTimeout; + this.threadLocalConnections = threadLocalConnections; + this.cancelCriterion = cancelCriterion; + this.pool = pool; + } + + public Object execute(Op op) { + return execute(op, retryAttempts); + } + + public Object execute(Op op, int retries) { + if (this.serverAffinity.get()) { + ServerLocation loc = this.affinityServerLocation.get(); + if (loc == null) { + loc = getNextOpServerLocation(); + this.affinityServerLocation.set(loc); + if (logger.isDebugEnabled()) { + logger.debug("setting server affinity to {}", this.affinityServerLocation.get()); + } + } + return executeWithServerAffinity(loc, op); + } + boolean success = false; + + Set attemptedServers = new HashSet(); + + Connection conn = (Connection) (threadLocalConnections ? localConnection.get() : null); + if (conn == null || conn.isDestroyed()) { + conn = connectionManager.borrowConnection(serverTimeout); + } + else if (threadLocalConnections) { + //Fix for 43718. Clear the thread local connection + //while we're performing the op. It will be reset + //if the op succeeds. + localConnection.set(null); + try { + this.connectionManager.activate(conn); + } + catch (ConnectionDestroyedException ex) { + conn = connectionManager.borrowConnection(serverTimeout); + } + } + try { + for(int attempt = 0; true; attempt++) { + // when an op is retried we may need to try to recover the previous + // attempt's version stamp + if (attempt == 1 && (op instanceof AbstractOp)) { + AbstractOp absOp = (AbstractOp)op; + absOp.getMessage().setIsRetry(); + } + try { + authenticateIfRequired(conn, op); + Object result = executeWithPossibleReAuthentication(conn, op); + success = true; + return result; + } + catch (Exception e) { + //This method will throw an exception if we need to stop + //It also unsets the threadlocal connection and notifies + //the connection manager if there are failures. + handleException(e, conn, attempt, attempt >= retries && retries != -1); + attemptedServers.add(conn.getServer()); + try { + conn = connectionManager.exchangeConnection(conn, attemptedServers, serverTimeout); + } + catch(NoAvailableServersException nse) { + //if retries is -1, don't try again after the last server has failed + if(retries == -1 || TRY_SERVERS_ONCE) { + handleException(e, conn, attempt, true); + } + else { + //try one of the failed servers again, until we exceed the retry attempts. + attemptedServers.clear(); + try { + conn = connectionManager.exchangeConnection(conn, attemptedServers, serverTimeout); + } + catch(NoAvailableServersException nse2) { + handleException(e, conn, attempt, true); + } + } + } + } + } + } finally { + if(threadLocalConnections) { + this.connectionManager.passivate(conn, success); + //Fix for 43718. If the thread local was set to a different + //connection deeper in the call stack, return that connection + //and set our connection on the thread local. + Connection existingConnection = localConnection.get(); + if(existingConnection != null && existingConnection != conn) { + connectionManager.returnConnection(existingConnection); + } + + if(!conn.isDestroyed()) { + localConnection.set(conn); + } else { + localConnection.set(null); + } + } else { + connectionManager.returnConnection(conn); + } + } + } + + /** + * execute the given op on the given server. If the server cannot + * be reached, sends a TXFailoverOp, then retries the given op + * @param loc the server to execute the op on + * @param op the op to execute + * @return the result of execution + */ + private Object executeWithServerAffinity(ServerLocation loc, Op op) { + try { + Object retVal = executeOnServer(loc, op, true, false); + affinityRetryCount.set(0); + return retVal; + } catch (ServerConnectivityException e) { + if (logger.isDebugEnabled()) { + logger.debug("caught exception while executing with affinity:{}", e.getMessage(), e); + } + if (!this.serverAffinityFailover || e instanceof ServerOperationException) { + affinityRetryCount.set(0); + throw e; + } + int retryCount = affinityRetryCount.get(); + if ((retryAttempts != -1 && retryCount >= retryAttempts) || + retryCount > TX_RETRY_ATTEMPT) { // prevent stack overflow fixes bug 46535 + affinityRetryCount.set(0); + throw e; + } + affinityRetryCount.set(retryCount + 1); + } + this.affinityServerLocation.set(null); + if (logger.isDebugEnabled()) { + logger.debug("reset server affinity: attempting txFailover"); + } + // send TXFailoverOp, so that new server can + // do bootstrapping, then re-execute original op + AbstractOp absOp = (AbstractOp) op; + absOp.getMessage().setIsRetry(); + int transactionId = absOp.getMessage().getTransactionId(); + // for CommitOp we do not have transactionId in AbstractOp + // so set it explicitly for TXFailoverOp + try { + TXFailoverOp.execute(this.pool, transactionId); + } catch (TransactionException e) { + // If this is the first operation in the transaction then + // do not throw TransactionDataNodeHasDeparted back to the + // user, re-try the op instead. fixes bug 44375. NOTE: TXFailoverOp + // is sent even after first op, as it is not known if the first + // operation has established a TXState already + TXStateProxy txState = TXManagerImpl.getCurrentTXState(); + if (txState == null) { + throw e; + } else if (txState.operationCount() > 1) { + throw e; + } + } + if(op instanceof ExecuteRegionFunctionOpImpl){ + op = new ExecuteRegionFunctionOpImpl( + (ExecuteRegionFunctionOpImpl)op, (byte)1/*isReExecute*/, new HashSet()); + ((ExecuteRegionFunctionOpImpl)op).getMessage().setTransactionId(transactionId); + }else if (op instanceof ExecuteFunctionOpImpl){ + op = new ExecuteFunctionOpImpl( + (ExecuteFunctionOpImpl)op, (byte)1/*isReExecute*/); + ((ExecuteFunctionOpImpl)op).getMessage().setTransactionId(transactionId); + } + return this.pool.execute(op); + } + + public void setupServerAffinity(boolean allowFailover) { + if (logger.isDebugEnabled()) { + logger.debug("setting up server affinity"); + } + this.serverAffinityFailover = allowFailover; + this.serverAffinity.set(Boolean.TRUE); + } + + public void releaseServerAffinity() { + if (logger.isDebugEnabled()) { + logger.debug("reset server affinity"); + } + this.serverAffinity.set(Boolean.FALSE); + this.affinityServerLocation.set(null); + } + + public ServerLocation getServerAffinityLocation() { + return this.affinityServerLocation.get(); + } + + public void setServerAffinityLocation(ServerLocation serverLocation) { + assert this.affinityServerLocation.get() == null; + this.affinityServerLocation.set(serverLocation); + } + + public ServerLocation getNextOpServerLocation() { + ServerLocation retVal = null; + Connection conn = (Connection) (threadLocalConnections ? localConnection.get() : null); + if (conn == null || conn.isDestroyed()) { + conn = connectionManager.borrowConnection(serverTimeout); + retVal = conn.getServer(); + this.connectionManager.returnConnection(conn); + } else { + retVal = conn.getServer(); + } + return retVal; + } + + /* (non-Javadoc) + * @see com.gemstone.gemfire.cache.client.internal.OpExecutor#executeOn(com.gemstone.gemfire.distributed.internal.ServerLocation, com.gemstone.gemfire.cache.client.internal.Op) + */ + public Object executeOn(ServerLocation server, Op op) { + return executeOn(server, op, true,false); + } + public Object executeOn(ServerLocation p_server, Op op, boolean accessed,boolean onlyUseExistingCnx) { + ServerLocation server = p_server; + if (this.serverAffinity.get()) { + ServerLocation affinityserver = this.affinityServerLocation.get(); + if (affinityserver != null) { + server = affinityserver; + } else { + this.affinityServerLocation.set(server); + } + // redirect to executeWithServerAffinity so that we + // can send a TXFailoverOp. + return executeWithServerAffinity(server, op); + } + return executeOnServer(server, op, accessed, onlyUseExistingCnx); + } + private Object executeOnServer(ServerLocation p_server, Op op, boolean accessed,boolean onlyUseExistingCnx) { + ServerLocation server = p_server; + boolean returnCnx = true; + boolean pingOp = (op instanceof PingOp.PingOpImpl); + Connection conn = null; + if (pingOp) { + // currently for pings we prefer to queue clientToServer cnx so that we will + // not create a pooled cnx when all we have is queue cnxs. + if (this.queueManager != null) { + // see if our QueueManager has a connection to this guy that we can send + // the ping on. + Endpoint ep = (Endpoint)this.endpointManager.getEndpointMap().get(server); + if (ep != null) { + QueueConnections qcs = this.queueManager.getAllConnectionsNoWait(); + conn = qcs.getConnection(ep); + if (conn != null) { + // we found one to do the ping on + returnCnx = false; + } + } + } + } + if (conn == null) { + if (useThreadLocalConnection(op, pingOp)) { + // no need to set threadLocal to null while the op is in progress since + // 43718 does not impact single-hop + conn = getActivatedThreadLocalConnectionForSingleHop(server, onlyUseExistingCnx); + returnCnx = false; + } else { + conn = connectionManager.borrowConnection(server, serverTimeout,onlyUseExistingCnx); + } + } + boolean success = true; + try { + return executeWithPossibleReAuthentication(conn, op); + } catch (Exception e) { + success = false; + //This method will throw an exception if we need to stop + //It also unsets the threadlocal connection and notifies + //the connection manager if there are failures. + handleException(e, conn, 0, true); + //this shouldn't actually be reached, handle exception will throw something + throw new ServerConnectivityException("Received error connecting to server", e); + } finally { + if (this.serverAffinity.get() && this.affinityServerLocation.get() == null) { + if (logger.isDebugEnabled()) { + logger.debug("setting server affinity to {} server:{}", conn.getEndpoint().getMemberId(), conn.getServer()); + } + this.affinityServerLocation.set(conn.getServer()); + } + if (useThreadLocalConnection(op, pingOp)) { + this.connectionManager.passivate(conn, success); + setThreadLocalConnectionForSingleHop(server, conn); + } + if (returnCnx) { + connectionManager.returnConnection(conn, accessed); + } + } + } + + private boolean useThreadLocalConnection(Op op, boolean pingOp) { + return threadLocalConnections && !pingOp && op.useThreadLocalConnection(); + } + + /** + * gets a connection to the given serverLocation either by looking up the threadLocal {@link #localConnectionMap}. + * If a connection does not exist (or has been destroyed) we borrow one from connectionManager. + * @return the activated connection + */ + private Connection getActivatedThreadLocalConnectionForSingleHop(ServerLocation server, boolean onlyUseExistingCnx) { + assert threadLocalConnections; + Connection conn = null; + Map connMap = this.localConnectionMap.get(); + if (connMap != null && !connMap.isEmpty()) { + conn = connMap.get(server); + } + boolean borrow = true; + if (conn != null) { + try { + this.connectionManager.activate(conn); + borrow = false; + if (!conn.getServer().equals(server)) { + // poolLoadConditioningMonitor can replace the connection's + // endpoint from underneath us. fixes bug 45151 + borrow = true; + } + } catch (ConnectionDestroyedException e) { + } + } + if (conn == null || borrow) { + conn = connectionManager.borrowConnection(server, serverTimeout, onlyUseExistingCnx); + } + if (borrow && connMap != null) { + connMap.remove(server); + } + return conn; + } + + /** + * initializes the threadLocal {@link #localConnectionMap} and adds mapping + * of serverLocation to Connection. + */ + private void setThreadLocalConnectionForSingleHop(ServerLocation server, + Connection conn) { + assert threadLocalConnections; + Map connMap = this.localConnectionMap.get(); + if (connMap == null) { + connMap = new HashMap(); + this.localConnectionMap.set(connMap); + } + connMap.put(server, conn); + } + + /* + * (non-Javadoc) + * @see com.gemstone.gemfire.cache.client.internal.ExecutablePool#executeOnPrimary(com.gemstone.gemfire.cache.client.internal.Op) + */ + public Object executeOnPrimary(Op op) { + if(queueManager == null) { + throw new SubscriptionNotEnabledException(); + } + + HashSet attemptedPrimaries = new HashSet(); + while(true) { + Connection primary = queueManager.getAllConnections().getPrimary(); + try { + return executeWithPossibleReAuthentication(primary, op); + } catch (Exception e) { + boolean finalAttempt = ! attemptedPrimaries.add(primary.getServer()); + handleException(e, primary, 0, finalAttempt); + //we shouldn't reach this code, but just in case + if(finalAttempt) { + throw new ServerConnectivityException("Tried the same primary server twice.", e); + } + } + } + } + + public void executeOnAllQueueServers(Op op) { + if(queueManager == null) { + throw new SubscriptionNotEnabledException(); + } + + RuntimeException lastException = null; + + QueueConnections connections = queueManager.getAllConnectionsNoWait(); + Connection primary = connections.getPrimary(); + if(primary != null) { + try { + executeWithPossibleReAuthentication(primary, op); + } catch (Exception e) { + try { + handleException(e, primary, 0, false); + } catch(RuntimeException e2) { + lastException = e2; + } + } + } + + List backups = connections.getBackups(); + for(int i = 0; i < backups.size(); i++) { + Connection conn = (Connection) backups.get(i); + try { + executeWithPossibleReAuthentication(conn, op); + } catch (Exception e) { + try { + handleException(e, conn, 0, false); + } catch(RuntimeException e2) { + lastException = e2; + } + } + } + + if (lastException != null) { + throw lastException; + } + } + + /* + * (non-Javadoc) + * @see com.gemstone.gemfire.cache.client.internal.ExecutablePool#executeOnAllQueueServers(com.gemstone.gemfire.cache.client.internal.Op) + */ + public Object executeOnQueuesAndReturnPrimaryResult(Op op) { + if(queueManager == null) { + throw new SubscriptionNotEnabledException(); + } + QueueConnections connections = queueManager.getAllConnections(); + + List backups = connections.getBackups(); + if (logger.isTraceEnabled(LogMarker.BRIDGE_SERVER)) { + logger.trace(LogMarker.BRIDGE_SERVER, "sending {} to backups: {}", op, backups); + } + for(int i = backups.size() - 1; i >= 0; i--) { + Connection conn = (Connection) backups.get(i); + try { + executeWithPossibleReAuthentication(conn, op); + } catch (Exception e) { + handleException(e, conn, 0, false); + } + } + + Connection primary = connections.getPrimary(); + HashSet attemptedPrimaries = new HashSet(); + while(true) { + try { + if (logger.isTraceEnabled(LogMarker.BRIDGE_SERVER)) { + logger.trace(LogMarker.BRIDGE_SERVER, "sending {} to primary: {}", op, primary); + } + return executeWithPossibleReAuthentication(primary, op); + } catch (Exception e) { + if (logger.isTraceEnabled(LogMarker.BRIDGE_SERVER)) { + logger.trace(LogMarker.BRIDGE_SERVER, "caught exception sending to primary {}", e.getMessage(), e); + } + boolean finalAttempt = !attemptedPrimaries.add(primary.getServer()); + handleException(e, primary, 0, finalAttempt); + primary = queueManager.getAllConnections().getPrimary(); + //we shouldn't reach this code, but just in case + if(finalAttempt) { + throw new ServerConnectivityException("Tried the same primary server twice.", e); + } + } + } + } + + public void releaseThreadLocalConnection() { + Connection conn = localConnection.get(); + localConnection.set(null); + if(conn != null) { + connectionManager.returnConnection(conn); + } + Map connMap = localConnectionMap.get(); + localConnectionMap.set(null); + if (connMap != null) { + for (Connection c : connMap.values()) { + connectionManager.returnConnection(c); + } + } + } + + /** + * Used by GatewayBatchOp + */ + public Object executeOn(Connection conn, Op op, boolean timeoutFatal) { + try { + return executeWithPossibleReAuthentication(conn, op); + } catch (Exception e) { + //This method will throw an exception if we need to stop + //It also unsets the threadlocal connection and notifies + //the connection manager if there are failures. + handleException(op, e, conn, 0, true, timeoutFatal); + //this shouldn't actually be reached, handle exception will throw something + throw new ServerConnectivityException("Received error connecting to server", e); + } + } + /** + * This is used by unit tests + */ + public Object executeOn(Connection conn, Op op) { + return executeOn(conn, op, false); + } + + public RegisterInterestTracker getRITracker() { + return riTracker; + } + + protected void handleException(Throwable e, + Connection conn, + int retryCount, boolean finalAttempt) { + handleException(e, conn, retryCount, finalAttempt, false/*timeoutFatal*/); + } + + protected void handleException(Op op, + Throwable e, + Connection conn, + int retryCount, + boolean finalAttempt, + boolean timeoutFatal) + throws CacheRuntimeException { + if (op instanceof AuthenticateUserOp.AuthenticateUserOpImpl) { + if (e instanceof GemFireSecurityException) { + throw (GemFireSecurityException)e; + } else if (e instanceof ServerRefusedConnectionException) { + throw (ServerRefusedConnectionException)e; + } + } + handleException(e, conn, retryCount, finalAttempt, timeoutFatal); + } + + protected void handleException(Throwable e, + Connection conn, + int retryCount, + boolean finalAttempt, + boolean timeoutFatal) + throws CacheRuntimeException + { + GemFireException exToThrow = null; + String title; + boolean invalidateServer = true; + boolean warn = true; + boolean forceThrow = false; + Throwable cause = e; + + cancelCriterion.checkCancelInProgress(e); + + if(logger.isDebugEnabled() && !(e instanceof java.io.EOFException)) { + if (e instanceof java.io.EOFException){ + logger.debug("OpExecutor.handleException on Connection to {} found EOF", conn.getServer()); + } else if (e instanceof java.net.SocketTimeoutException) { + logger.debug("OpExecutor.handleException on Connection to {} read timed out", conn.getServer()); + } else { + logger.debug("OpExecutor.handleException on Connection to {}", conn.getServer(),e); + } + } + if (e instanceof NotSerializableException) { + title = null; //no message + exToThrow = new SerializationException("Pool message failure", e); + } + else if (e instanceof BatchException || e instanceof BatchException70) { + title = null; //no message + exToThrow = new ServerOperationException(e); + } + else if (e instanceof RegionDestroyedException) { + invalidateServer = false; + title = null; + exToThrow =(RegionDestroyedException) e; + } + else if (e instanceof GemFireSecurityException) { + title = null; + exToThrow = new ServerOperationException(e); + } + else if (e instanceof SerializationException) { + title = null; // no message + exToThrow = new ServerOperationException(e); + } + else if (e instanceof CopyException) { + title = null; // no message + exToThrow = new ServerOperationException(e); + } + else if (e instanceof ClassNotFoundException) { + title = null; // no message + exToThrow = new ServerOperationException(e); + } + else if (e instanceof TransactionException) { + title = null; // no message + exToThrow = (TransactionException)e; + invalidateServer = false; + } + else if (e instanceof SynchronizationCommitConflictException) { + title = null; + exToThrow = (SynchronizationCommitConflictException)e; + invalidateServer = false; + } + else if (e instanceof SocketException) { + if ("Socket closed".equals(e.getMessage()) + || "Connection reset".equals(e.getMessage()) + || "Connection refused: connect".equals(e.getMessage()) + || "Connection refused".equals(e.getMessage())) { + title = e.getMessage(); + } else { + title = "SocketException"; + } + } + else if (e instanceof SocketTimeoutException) { + invalidateServer = timeoutFatal; + title = "socket timed out on client"; + cause = null; + } + else if (e instanceof ConnectionDestroyedException) { + invalidateServer = false; + title = "connection was asynchronously destroyed"; + cause = null; + } + else if (e instanceof java.io.EOFException) { + /* +// it is still listening so make this into a timeout exception + invalidateServer = false; + title = "socket closed on server"; + SocketTimeoutException ste = new SocketTimeoutException(title); + ste.setStackTrace(e.getStackTrace()); + e = ste; + cause = null; + */ + + /* + * note: the old code in ConnectionProxyImpl used to create a new socket here to the server to determine if it really crashed. + * We may have to add this back in for some reason, but hopefully not. + * + * note 05/21/08: an attempt to address this was made by increasing the time waited on server before closing timeoutd clients + * see ServerConnection.hasBeenTimedOutOnClient + */ + title = "closed socket on server"; + } + else if (e instanceof IOException) { + title = "IOException"; + } + else if (e instanceof BufferUnderflowException) { + title = "buffer underflow reading from server"; + } + else if (e instanceof CancelException) { + title = "Cancelled"; + warn = false; + } + else if (e instanceof InternalFunctionInvocationTargetException) { + //In this case, function will be re executed + title = null; + exToThrow = (InternalFunctionInvocationTargetException)e; + } + else if (e instanceof FunctionInvocationTargetException) { + //in this case function will not be re executed + title = null; + exToThrow = (GemFireException)e; + } + else if (e instanceof PutAllPartialResultException) { + title = null; + exToThrow =(PutAllPartialResultException) e; + invalidateServer = false; + } + else { + Throwable t = e.getCause(); + if ((t instanceof ConnectException) + || (t instanceof SocketException) + || (t instanceof SocketTimeoutException) + || (t instanceof IOException) + || (t instanceof SerializationException) + || (t instanceof CopyException) + || (t instanceof GemFireSecurityException) + || (t instanceof ServerOperationException) + || (t instanceof TransactionException) + || (t instanceof CancelException)) { + handleException(t, conn, retryCount, finalAttempt, timeoutFatal); + return; + } else if (e instanceof ServerOperationException) { + title = null; // no message + exToThrow = (ServerOperationException)e; + invalidateServer = false; // fix for bug #42225 + } + else if (e instanceof FunctionException) { + if (t instanceof InternalFunctionInvocationTargetException) { + // Client server to re-execute for node failure + handleException(t, conn, retryCount, finalAttempt, timeoutFatal); + return; + } + else { + title = null; // no message + exToThrow = (FunctionException)e; + } + } else if (e instanceof ServerConnectivityException + && e.getMessage() + .equals("Connection error while authenticating user")) { + title = null; + if (logger.isDebugEnabled()) { + logger.debug(e.getMessage(), e); + } + } else { + title = e.toString(); + forceThrow = true; + } + } + if (title != null) { + conn.destroy(); + if(invalidateServer) { + endpointManager.serverCrashed(conn.getEndpoint()); + } + boolean logEnabled = warn ? logger.isWarnEnabled() : logger.isDebugEnabled(); + boolean msgNeeded = logEnabled || finalAttempt; + if (msgNeeded) { + final StringBuffer sb = getExceptionMessage(title, retryCount, finalAttempt, conn, e); + final String msg = sb.toString(); + if (logEnabled) { + if (warn) { + logger.warn(msg /*, e*/); + } else { + logger.debug(msg /*, e*/); + } + } + if (forceThrow || finalAttempt) { + exToThrow = new ServerConnectivityException(msg, cause); + } + } + } + if (exToThrow != null) { + throw exToThrow; + } + } + + private StringBuffer getExceptionMessage(String exceptionName, + int retryCount, + boolean finalAttempt, + Connection connection, + Throwable ex) { + StringBuffer message = new StringBuffer(200); + message + .append("Pool unexpected ") + .append(exceptionName); + if (connection != null) { + message + .append(" connection=") + .append(connection); + } + if (retryCount > 0) { + message + .append(" attempt=") + .append(retryCount+1); + } + message.append(')'); + if (finalAttempt) { + message + .append(". Server unreachable: could not connect after ") + .append(retryCount+1) + .append(" attempts"); + } + return message; + } + + public Connection getThreadLocalConnection() { + return localConnection.get(); + } + + public void setThreadLocalConnection(Connection conn) { + localConnection.set(conn); + } + + private void authenticateIfRequired(Connection conn, Op op) { + if (!conn.getServer().getRequiresCredentials()) { + return; + } + + if (this.pool == null) { + PoolImpl poolImpl = (PoolImpl)PoolManagerImpl.getPMI().find( + this.endpointManager.getPoolName()); + if (poolImpl == null) { + return; + } + this.pool = poolImpl; + } + if (this.pool.getMultiuserAuthentication()) { + if (((AbstractOp)op).needsUserId()) { + UserAttributes ua = UserAttributes.userAttributes.get(); + if (ua != null) { + if (!ua.getServerToId().containsKey(conn.getServer())) { + authenticateMultiuser(this.pool, conn, ua); + } + } else { + // This should never be reached. + } + } + } else if (((AbstractOp)op).needsUserId()) { + // This should not be reached, but keeping this code here in case it is + // reached. + if (conn.getServer().getUserId() == -1) { + Connection connImpl = this.connectionManager.getConnection(conn); + conn.getServer().setUserId( + (Long)AuthenticateUserOp.executeOn(connImpl, this.pool)); + if (logger.isDebugEnabled()) { + logger.debug("OpExecutorImpl.execute() - single user mode - authenticated this user on {}", conn); + } + } + } + } + + private void authenticateMultiuser(PoolImpl pool, Connection conn, + UserAttributes ua) { + try { + Long userId = (Long)AuthenticateUserOp.executeOn(conn.getServer(), + pool, ua.getCredentials()); + if (userId != null) { + ua.setServerToId(conn.getServer(), userId); + if (logger.isDebugEnabled()) { + logger.debug("OpExecutorImpl.execute() - multiuser mode - authenticated this user on {}", conn); + } + } + } catch (ServerConnectivityException sce) { + Throwable cause = sce.getCause(); + if (cause instanceof SocketException + || cause instanceof EOFException + || cause instanceof IOException + || cause instanceof BufferUnderflowException + || cause instanceof CancelException + || (sce.getMessage() != null && (sce.getMessage().indexOf( + "Could not create a new connection to server") != -1 + || sce.getMessage().indexOf("socket timed out on client") != -1 || sce + .getMessage().indexOf( + "connection was asynchronously destroyed") != -1))) { + throw new ServerConnectivityException( + "Connection error while authenticating user"); + } else { + throw sce; + } + } + } + + private Object executeWithPossibleReAuthentication(Connection conn, Op op) + throws Exception { + try { + return conn.execute(op); + + } catch (ServerConnectivityException sce) { + Throwable cause = sce.getCause(); + if ((cause instanceof AuthenticationRequiredException + && "User authorization attributes not found.".equals(cause + .getMessage())) + || sce.getMessage().contains( + "Connection error while authenticating user")) { + // (ashetkar) Need a cleaner way of doing above check. + // 2nd exception-message above is from AbstractOp.sendMessage() + + PoolImpl pool = (PoolImpl)PoolManagerImpl.getPMI().find( + this.endpointManager.getPoolName()); + if (!pool.getMultiuserAuthentication()) { + Connection connImpl = this.connectionManager.getConnection(conn); + conn.getServer().setUserId( + (Long)AuthenticateUserOp.executeOn(connImpl, this)); + return conn.execute(op); + } else { + UserAttributes ua = UserAttributes.userAttributes.get(); + if (ua != null) { + authenticateMultiuser(pool, conn, ua); + } + return conn.execute(op); + } + + } else { + throw sce; + } + } + } + +} + diff --git a/gemfire-core/src/main/java/com/gemstone/gemfire/cache/operations/internal/GetOperationContextImpl.java b/gemfire-core/src/main/java/com/gemstone/gemfire/cache/operations/internal/GetOperationContextImpl.java new file mode 100644 index 000000000000..5a42f63c5a6b --- /dev/null +++ b/gemfire-core/src/main/java/com/gemstone/gemfire/cache/operations/internal/GetOperationContextImpl.java @@ -0,0 +1,123 @@ +/* + * 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 com.gemstone.gemfire.cache.operations.internal; + +import com.gemstone.gemfire.SerializationException; +import com.gemstone.gemfire.cache.operations.GetOperationContext; +import com.gemstone.gemfire.internal.offheap.Chunk; +import com.gemstone.gemfire.internal.offheap.Releasable; +import com.gemstone.gemfire.internal.offheap.StoredObject; +import com.gemstone.gemfire.internal.offheap.annotations.Unretained; + +/** + * This subclass's job is to keep customers from getting a reference to a value + * that is off-heap. Any access to an off-heap value should appear to the customer + * as a serialized value. + * + * + */ +public class GetOperationContextImpl extends GetOperationContext implements Releasable { + + private boolean released; + + public GetOperationContextImpl(Object key, boolean postOperation) { + super(key, postOperation); + } + + /** + * This method is for internal use and should not be on the public apis. + */ + public @Unretained Object getRawValue() { + return super.getValue(); + } + + @Override + public Object getObject() { + Object result = super.getObject(); + if (result instanceof StoredObject) { + // For off-heap object act as if they are serialized forcing them to call getSerializedValue or getValue + result = null; + } + return result; + } + + @Override + public void setObject(Object value, boolean isObject) { + this.released = false; + super.setObject(value, isObject); + } + + @Override + public void setValue(Object value, boolean isObject) { + this.released = false; + super.setValue(value, isObject); + } + + private void checkForReleasedOffHeapValue(Object v) { + // Note that we only care about Chunk (instead of all StoredObject) because it is the only one using a refcount + if (this.released && v instanceof Chunk) { + throw new IllegalStateException("Attempt to access off-heap value after the OperationContext callback returned."); + } + } + + @Override + public byte[] getSerializedValue() { + byte[] result = super.getSerializedValue(); + if (result == null) { + Object v = super.getValue(); + if (v instanceof StoredObject) { + checkForReleasedOffHeapValue(v); + result = ((StoredObject) v).getValueAsHeapByteArray(); + } + } + return result; + } + + @Override + public Object getDeserializedValue() throws SerializationException { + Object result = super.getDeserializedValue(); + if (result instanceof StoredObject) { + checkForReleasedOffHeapValue(result); + result = ((StoredObject) result).getValueAsDeserializedHeapObject(); + } + return result; + } + + @Override + public Object getValue() { + Object result = super.getValue(); + if (result instanceof StoredObject) { + checkForReleasedOffHeapValue(result); + // since they called getValue they don't care if it is serialized or deserialized so return it as serialized + result = ((StoredObject) result).getValueAsHeapByteArray(); + } + return result; + } + + @Override + public void release() { + // Note that if the context's value is stored off-heap + // and release has been called then we do not release + // our value (since this context did not retain it) + // but we do make sure that any future attempt to access + // the off-heap value fails. + if (super.getValue() instanceof Chunk) { + this.released = true; + } + } + +} diff --git a/gemfire-core/src/main/java/com/gemstone/gemfire/cache/query/internal/index/AbstractIndex.java b/gemfire-core/src/main/java/com/gemstone/gemfire/cache/query/internal/index/AbstractIndex.java new file mode 100644 index 000000000000..fe707057cc81 --- /dev/null +++ b/gemfire-core/src/main/java/com/gemstone/gemfire/cache/query/internal/index/AbstractIndex.java @@ -0,0 +1,2400 @@ +/* + * 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 com.gemstone.gemfire.cache.query.internal.index; + +import java.util.ArrayList; +import java.util.Arrays; +import java.util.Collection; +import java.util.Iterator; +import java.util.List; +import java.util.Map; +import java.util.Set; +import java.util.concurrent.ConcurrentHashMap; +import java.util.concurrent.atomic.AtomicInteger; +import java.util.concurrent.locks.ReadWriteLock; +import java.util.concurrent.locks.ReentrantReadWriteLock; + +import org.apache.logging.log4j.Logger; + +import com.gemstone.gemfire.cache.Cache; +import com.gemstone.gemfire.cache.Region; +import com.gemstone.gemfire.cache.query.AmbiguousNameException; +import com.gemstone.gemfire.cache.query.FunctionDomainException; +import com.gemstone.gemfire.cache.query.Index; +import com.gemstone.gemfire.cache.query.IndexStatistics; +import com.gemstone.gemfire.cache.query.NameResolutionException; +import com.gemstone.gemfire.cache.query.QueryInvocationTargetException; +import com.gemstone.gemfire.cache.query.QueryService; +import com.gemstone.gemfire.cache.query.SelectResults; +import com.gemstone.gemfire.cache.query.Struct; +import com.gemstone.gemfire.cache.query.TypeMismatchException; +import com.gemstone.gemfire.cache.query.internal.Bag; +import com.gemstone.gemfire.cache.query.internal.CompiledID; +import com.gemstone.gemfire.cache.query.internal.CompiledIndexOperation; +import com.gemstone.gemfire.cache.query.internal.CompiledIteratorDef; +import com.gemstone.gemfire.cache.query.internal.CompiledOperation; +import com.gemstone.gemfire.cache.query.internal.CompiledPath; +import com.gemstone.gemfire.cache.query.internal.CompiledValue; +import com.gemstone.gemfire.cache.query.internal.CqEntry; +import com.gemstone.gemfire.cache.query.internal.DefaultQuery; +import com.gemstone.gemfire.cache.query.internal.ExecutionContext; +import com.gemstone.gemfire.cache.query.internal.IndexInfo; +import com.gemstone.gemfire.cache.query.internal.QRegion; +import com.gemstone.gemfire.cache.query.internal.QueryMonitor; +import com.gemstone.gemfire.cache.query.internal.QueryUtils; +import com.gemstone.gemfire.cache.query.internal.RuntimeIterator; +import com.gemstone.gemfire.cache.query.internal.StructFields; +import com.gemstone.gemfire.cache.query.internal.StructImpl; +import com.gemstone.gemfire.cache.query.internal.Support; +import com.gemstone.gemfire.cache.query.internal.index.IndexStore.IndexStoreEntry; +import com.gemstone.gemfire.cache.query.internal.parse.OQLLexerTokenTypes; +import com.gemstone.gemfire.cache.query.internal.types.StructTypeImpl; +import com.gemstone.gemfire.cache.query.internal.types.TypeUtils; +import com.gemstone.gemfire.cache.query.types.ObjectType; +import com.gemstone.gemfire.internal.Assert; +import com.gemstone.gemfire.internal.cache.BucketRegion; +import com.gemstone.gemfire.internal.cache.CachedDeserializable; +import com.gemstone.gemfire.internal.cache.GemFireCacheImpl; +import com.gemstone.gemfire.internal.cache.LocalRegion; +import com.gemstone.gemfire.internal.cache.PartitionedRegion; +import com.gemstone.gemfire.internal.cache.RegionEntry; +import com.gemstone.gemfire.internal.cache.persistence.query.CloseableIterator; +import com.gemstone.gemfire.internal.i18n.LocalizedStrings; +import com.gemstone.gemfire.internal.logging.LogService; +import com.gemstone.gemfire.internal.offheap.Chunk; +import com.gemstone.gemfire.internal.offheap.annotations.Released; +import com.gemstone.gemfire.internal.offheap.annotations.Retained; +import com.gemstone.gemfire.pdx.PdxInstance; +import com.gemstone.gemfire.pdx.internal.PdxString; + +/** + * This class implements abstract algorithms common to all indexes, such as + * index creation, use of a path evaluator object, etc. It serves as the factory + * for a path evaluator object and maintains the path evaluator object to use + * for index creation and index maintenance. It also maintains a reference to + * the root collection on which the index is created. This class also implements + * the abstract methods to add and remove entries to an underlying storage + * structure (e.g. a btree), and as part of this algorithm, maintains a map of + * entries that map to null at the end of the index path, and entries that + * cannot be traversed to the end of the index path (traversal is undefined). + * + */ +public abstract class AbstractIndex implements IndexProtocol +{ + private static final Logger logger = LogService.getLogger(); + + final String indexName; + + final Region region; + + final String indexedExpression; + + final String fromClause; + + final String projectionAttributes; + + final String originalIndexedExpression; + + final String originalFromClause; + + final String originalProjectionAttributes; + + final String[] canonicalizedDefinitions; + + private boolean isValid; + + protected IndexedExpressionEvaluator evaluator; + // Statistics + protected InternalIndexStatistics internalIndexStats; + + //For PartitionedIndex for now + protected Index prIndex; + //Flag to indicate if index map has keys as PdxString + //All the keys in the index map should be either Strings or PdxStrings + protected Boolean isIndexedPdxKeys = false; + + //Flag to indicate if the flag isIndexedPdxKeys is set + protected Boolean isIndexedPdxKeysFlagSet = false; + + protected boolean indexOnRegionKeys = false; + + protected boolean indexOnValues = false; + + private final ReadWriteLock removeIndexLock = new ReentrantReadWriteLock(); + + //Flag to indicate if the index is populated with data + protected volatile boolean isPopulated = false; + + AbstractIndex(String indexName, Region region, String fromClause, + String indexedExpression, String projectionAttributes, + String origFromClause, String origIndxExpr, String[] defintions, IndexStatistics stats) { + this.indexName = indexName; + this.region = region; + this.indexedExpression = indexedExpression; + this.fromClause = fromClause; + this.originalIndexedExpression = origIndxExpr; + this.originalFromClause = origFromClause; + this.canonicalizedDefinitions = defintions; + if (projectionAttributes == null || projectionAttributes.length() == 0) { + projectionAttributes = "*"; + } + this.projectionAttributes = projectionAttributes; + this.originalProjectionAttributes = projectionAttributes; + if (stats != null) { + this.internalIndexStats = (InternalIndexStatistics)stats; + } else { + this.internalIndexStats = createStats(indexName); + } + } + + /** + * Must be implemented by all implementing classes + * iff they have any forward map for index-key->RE. + * + * @return the forward map of respective index. + */ + public Map getValueToEntriesMap() { + return null; + } + /** + * Get statistics information for this index. + */ + public IndexStatistics getStatistics() + { + return this.internalIndexStats; + } + + public void destroy() + { + markValid(false); + if (this.internalIndexStats != null) { + this.internalIndexStats.updateNumKeys(0); + this.internalIndexStats.close(); + } + } + + long updateIndexUpdateStats() + { + long result = System.nanoTime(); + this.internalIndexStats.incUpdatesInProgress(1); + return result; + } + + void updateIndexUpdateStats(long start) + { + long end = System.nanoTime(); + this.internalIndexStats.incUpdatesInProgress(-1); + this.internalIndexStats.incUpdateTime(end - start); + } + + long updateIndexUseStats() { + return updateIndexUseStats(true); + } + + long updateIndexUseStats(boolean updateStats) + { + long result = 0; + if (updateStats) { + this.internalIndexStats.incUsesInProgress(1); + result = System.nanoTime(); + } + return result; + } + + void updateIndexUseEndStats(long start) { + updateIndexUseEndStats(start, true); + } + + void updateIndexUseEndStats(long start, boolean updateStats) + { + if (updateStats) { + long end = System.nanoTime(); + this.internalIndexStats.incUsesInProgress(-1); + this.internalIndexStats.incNumUses(); + this.internalIndexStats.incUseTime(end - start); + } + } + + public IndexedExpressionEvaluator getEvaluator() + { + return evaluator; + } + + /** + * The Region this index is on + * + * @return the Region for this index + */ + public Region getRegion() + { + return this.region; + } + + /** + * Returns the unique name of this index + */ + public String getName() + { + return this.indexName; + } + + // ////////// Index default implementation + public void query(Object key, int operator, Collection results, ExecutionContext context) + throws TypeMismatchException, FunctionDomainException, + NameResolutionException, QueryInvocationTargetException { + // get a read lock when doing a lookup + if (context.getBucketList() != null && (this.region instanceof BucketRegion)) { + PartitionedRegion pr = ((BucketRegion)region).getPartitionedRegion(); + long start = updateIndexUseStats(); + try { + for (Object b :context.getBucketList()) { + AbstractIndex i = PartitionedIndex.getBucketIndex(pr, this.indexName, (Integer)b); + if (i == null) { + continue; + } + i.lockedQuery(key, operator, results, null/* No Keys to be removed */, context); + + } + } finally { + updateIndexUseEndStats(start); + } + } else { + long start = updateIndexUseStats(); + try { + lockedQuery(key, operator, results, null/* No Keys to be removed */, context); + return; + } finally { + updateIndexUseEndStats(start); + } + } + } + + public void query(Object key, int operator, Collection results, + @Retained CompiledValue iterOp, RuntimeIterator indpndntIr, + ExecutionContext context, List projAttrib, + SelectResults intermediateResults, boolean isIntersection) + throws TypeMismatchException, FunctionDomainException, + NameResolutionException, QueryInvocationTargetException { + // get a read lock when doing a lookup + if (context.getBucketList() != null + && (this.region instanceof BucketRegion)) { + PartitionedRegion pr = ((BucketRegion) region).getPartitionedRegion(); + long start = updateIndexUseStats(); + try { + for (Object b : context.getBucketList()) { + AbstractIndex i = PartitionedIndex.getBucketIndex(pr, this.indexName, + (Integer) b); + if (i == null) { + continue; + } + i.lockedQuery(key, operator, results, iterOp, indpndntIr, context, + projAttrib, intermediateResults, isIntersection); + } + } finally { + updateIndexUseEndStats(start); + } + } else { + long start = updateIndexUseStats(); + try { + lockedQuery(key, operator, results, iterOp, indpndntIr, context, + projAttrib, intermediateResults, isIntersection); + } finally { + updateIndexUseEndStats(start); + } + } + return; + } + + public void query(Object key, int operator, Collection results, + Set keysToRemove, ExecutionContext context) throws TypeMismatchException, FunctionDomainException, + NameResolutionException, QueryInvocationTargetException { + // get a read lock when doing a lookup + if (context.getBucketList() != null && (this.region instanceof BucketRegion)) { + PartitionedRegion pr = ((BucketRegion)region).getPartitionedRegion(); + long start = updateIndexUseStats(); + try { + for (Object b :context.getBucketList()) { + AbstractIndex i = PartitionedIndex.getBucketIndex(pr, this.indexName, (Integer)b); + if (i == null) { + continue; + } + i.lockedQuery(key, operator, results, keysToRemove, context); + } + } finally { + updateIndexUseEndStats(start); + } + } else { + long start = updateIndexUseStats(); + try { + lockedQuery(key, operator, results, keysToRemove, context); + } finally { + updateIndexUseEndStats(start); + } + } + return; + } + + public void query(Collection results, Set keysToRemove, ExecutionContext context) + throws TypeMismatchException, FunctionDomainException, + NameResolutionException, QueryInvocationTargetException { + Iterator itr = keysToRemove.iterator(); + Object temp = itr.next(); + itr.remove(); + if (context.getBucketList() != null && (this.region instanceof BucketRegion)) { + long start = updateIndexUseStats(); + try { + PartitionedRegion pr = ((BucketRegion)region).getPartitionedRegion(); + for (Object b :context.getBucketList()) { + AbstractIndex i = PartitionedIndex.getBucketIndex(pr, this.indexName, (Integer)b); + if (i == null) { + continue; + } + i.lockedQuery(temp, OQLLexerTokenTypes.TOK_NE, results, + itr.hasNext() ? keysToRemove : null, context); + } + } finally { + updateIndexUseEndStats(start); + } + } else { + long start = updateIndexUseStats(); + try { + lockedQuery(temp, OQLLexerTokenTypes.TOK_NE, results, + itr.hasNext() ? keysToRemove : null, context); + } finally { + updateIndexUseEndStats(start); + } + } + return; + } + + public void query(Object lowerBoundKey, int lowerBoundOperator, + Object upperBoundKey, int upperBoundOperator, Collection results, + Set keysToRemove, ExecutionContext context) throws TypeMismatchException, FunctionDomainException, + NameResolutionException, QueryInvocationTargetException { + if (context.getBucketList() != null) { + if (this.region instanceof BucketRegion) { + PartitionedRegion pr = ((BucketRegion)region).getPartitionedRegion(); + long start = updateIndexUseStats(); + try { + for (Object b :context.getBucketList()) { + AbstractIndex i = PartitionedIndex.getBucketIndex(pr, this.indexName, (Integer)b); + if (i == null) { + continue; + } + i.lockedQuery(lowerBoundKey, lowerBoundOperator, upperBoundKey, + upperBoundOperator, results, keysToRemove, context); + } + } finally { + updateIndexUseEndStats(start); + } + } + } else { + long start = updateIndexUseStats(); + try { + lockedQuery(lowerBoundKey, lowerBoundOperator, upperBoundKey, + upperBoundOperator, results, keysToRemove, context); + } finally { + updateIndexUseEndStats(start); + } + } + return; + } + + + public List queryEquijoinCondition(IndexProtocol index, ExecutionContext context) + throws TypeMismatchException, FunctionDomainException, NameResolutionException, QueryInvocationTargetException + { + Support + .assertionFailed(" This function should have never got invoked as its meaningful implementation is present only in RangeIndex class"); + return null; + } + + /** + * Get the projectionAttributes for this expression. + * + * @return the projectionAttributes, or "*" if there were none specified at + * index creation. + */ + public String getProjectionAttributes() + { + return this.originalProjectionAttributes; + } + + /** + * Get the projectionAttributes for this expression. + * + * @return the projectionAttributes, or "*" if there were none specified at + * index creation. + */ + public String getCanonicalizedProjectionAttributes() + { + return this.projectionAttributes; + } + + /** + * Get the Original indexedExpression for this index. + */ + public String getIndexedExpression() + { + return this.originalIndexedExpression; + } + + /** + * Get the Canonicalized indexedExpression for this index. + */ + public String getCanonicalizedIndexedExpression() + { + return this.indexedExpression; + } + + /** + * Get the original fromClause for this index. + */ + public String getFromClause() + { + return this.originalFromClause; + } + + /** + * Get the canonicalized fromClause for this index. + */ + public String getCanonicalizedFromClause() + { + return this.fromClause; + } + + public boolean isMapType() + { + return false; + } + + // ////////// IndexProtocol default implementation + public boolean addIndexMapping(RegionEntry entry) throws IMQException + { + this.addMapping(entry); + return true; // if no exception, then success + } + + public boolean addAllIndexMappings(Collection c) throws IMQException + { + Iterator iterator = c.iterator(); + while (iterator.hasNext()) { + this.addMapping((RegionEntry)iterator.next()); + } + return true; // if no exception, then success + } + + /** + * @param opCode + * one of OTHER_OP, BEFORE_UPDATE_OP, AFTER_UPDATE_OP. + */ + public boolean removeIndexMapping(RegionEntry entry, int opCode) + throws IMQException + { + removeMapping(entry, opCode); + return true; // if no exception, then success + } + + public boolean removeAllIndexMappings(Collection c) throws IMQException + { + Iterator iterator = c.iterator(); + while (iterator.hasNext()) { + removeMapping((RegionEntry)iterator.next(), OTHER_OP); + } + return true; // if no exception, then success + } + + public boolean isValid() + { + return isValid; + } + + public void markValid(boolean b) + { + isValid = b; + } + + public boolean isMatchingWithIndexExpression(CompiledValue indexExpr, + String conditionExprStr, ExecutionContext context) + throws AmbiguousNameException, TypeMismatchException, + NameResolutionException + { + return this.indexedExpression.equals(conditionExprStr); + } + + private Object verifyAndGetPdxDomainObject(Object value) { + if (value instanceof StructImpl) { + // Doing hasPdx check first, since its cheaper. + if (((StructImpl)value).isHasPdx() && !((GemFireCacheImpl) + this.region.getCache()).getPdxReadSerializedByAnyGemFireServices()) { + // Set the pdx values for the struct object. + StructImpl v = (StructImpl)value; + Object[] fieldValues = v.getPdxFieldValues(); + return new StructImpl((StructTypeImpl)v.getStructType(), fieldValues); + } + } else if (value instanceof PdxInstance && !((GemFireCacheImpl) + this.region.getCache()).getPdxReadSerializedByAnyGemFireServices()) { + return ((PdxInstance)value).getObject(); + } + return value; + } + + private void addToResultsWithUnionOrIntersection(Collection results, + SelectResults intermediateResults, boolean isIntersection, Object value) + { + value = verifyAndGetPdxDomainObject(value); + + if (intermediateResults == null) { + results.add(value); + } + else { + if (isIntersection) { + int numOcc = intermediateResults.occurrences(value); + if (numOcc > 0) { + results.add(value); + intermediateResults.remove(value); + } + } + else { + // intermediateResults.add(value); + results.add(value); + } + } + } + + private void addToStructsWithUnionOrIntersection(Collection results, + SelectResults intermediateResults, boolean isIntersection, Object[] values) + { + for (int i=0; i < values.length; i++) { + values[i] = verifyAndGetPdxDomainObject(values[i]); + } + + if (intermediateResults == null) { + if( results instanceof StructFields) { + ((StructFields)results).addFieldValues(values); + }else { + //The results could be LinkedStructSet or SortedResultsBag or StructSet + //LinkedStructSet lss = (LinkedStructSet)results; + SelectResults sr = (SelectResults)results; + StructImpl structImpl = new StructImpl( (StructTypeImpl)sr.getCollectionType().getElementType(), values); + //lss.add(structImpl); + sr.add(structImpl); + } + } + else { + if (isIntersection) { + if(results instanceof StructFields) { + int numOcc = intermediateResults.occurrences(values); + if (numOcc > 0) { + ((StructFields)results).addFieldValues(values); + ((StructFields)intermediateResults).removeFieldValues(values); + } + }else { + //LinkedStructSet lss = (LinkedStructSet)results; + // could be LinkedStructSet or SortedResultsBag + SelectResults sr = (SelectResults)results; + StructImpl structImpl = new StructImpl( (StructTypeImpl)sr.getCollectionType().getElementType(), values); + if( intermediateResults.remove(structImpl)) { + sr.add(structImpl); + } + } + } + else { + if( results instanceof StructFields) { + ((StructFields)results).addFieldValues(values); + }else { + // could be LinkedStructSet or SortedResultsBag + SelectResults sr = (SelectResults)results; + //LinkedStructSet lss = (LinkedStructSet)results; + StructImpl structImpl = new StructImpl( (StructTypeImpl)sr.getCollectionType().getElementType(), values); + if( ((SelectResults)intermediateResults).remove(structImpl)) { + sr.add(structImpl); + } + } + } + } + } + + void applyProjection(List projAttrib, ExecutionContext context, + Collection result, Object iterValue, SelectResults intermediateResults, + boolean isIntersection) throws FunctionDomainException, + TypeMismatchException, NameResolutionException, + QueryInvocationTargetException + { + if (projAttrib == null) { + iterValue = deserializePdxForLocalDistinctQuery(context, iterValue); + this.addToResultsWithUnionOrIntersection(result, intermediateResults, + isIntersection, iterValue); + } + else { + //TODO : Asif : Optimize this . This condition looks ugly. + /* if (result instanceof StructBag || result instanceof LinkedStructSet + || result instanceof LinkedStructBag) {*/ + boolean isStruct = result instanceof SelectResults + && ((SelectResults)result).getCollectionType().getElementType() != null + && ((SelectResults)result).getCollectionType().getElementType().isStructType(); + if (isStruct) { + int projCount = projAttrib.size(); + Object[] values = new Object[projCount]; + Iterator projIter = projAttrib.iterator(); + int i = 0; + while (projIter.hasNext()) { + Object projDef[] = (Object[])projIter.next(); + values[i] = deserializePdxForLocalDistinctQuery(context, ((CompiledValue)projDef[1]).evaluate(context)); + i++; + } + this.addToStructsWithUnionOrIntersection(result, intermediateResults, + isIntersection, values); + } + else { + Object[] temp = (Object[])projAttrib.get(0); + Object val = deserializePdxForLocalDistinctQuery(context, ((CompiledValue)temp[1]).evaluate(context)); + this.addToResultsWithUnionOrIntersection(result, + intermediateResults, isIntersection, val); + } + } + } + + // For local queries with distinct, deserialize all PdxInstances + // as we do not have a way to compare Pdx and non Pdx objects in case + // the cache has a mix of pdx and non pdx objects. + // We still have to honor the cache level readserialized flag in + // case of all Pdx objects in cache. + // Also always convert PdxString to String before adding to resultset + // for remote queries + private Object deserializePdxForLocalDistinctQuery(ExecutionContext context, + Object val) throws QueryInvocationTargetException { + if (!((DefaultQuery) context.getQuery()).isRemoteQuery()) { + if (context.isDistinct() && val instanceof PdxInstance + && !this.region.getCache().getPdxReadSerialized()) { + try { + val = ((PdxInstance) val).getObject(); + } catch (Exception ex) { + throw new QueryInvocationTargetException( + "Unable to retrieve domain object from PdxInstance while building the ResultSet. " + + ex.getMessage()); + } + } else if (val instanceof PdxString) { + val = ((PdxString) val).toString(); + } + } + return val; + } + + private void removeFromResultsWithUnionOrIntersection(Collection results, + SelectResults intermediateResults, boolean isIntersection, Object value) + { + if (intermediateResults == null) { + results.remove(value); + } + else { + if (isIntersection) { + int numOcc = ((SelectResults)results).occurrences(value); + if (numOcc > 0) { + results.remove(value); + intermediateResults.add(value); + } + } + else { + results.remove(value); + } + } + } + + private void removeFromStructsWithUnionOrIntersection(Collection results, + SelectResults intermediateResults, boolean isIntersection, + Object values[], ExecutionContext context) + { + if (intermediateResults == null) { + ((StructFields)results).removeFieldValues(values); + } + else { + if (isIntersection) { + int numOcc = ((SelectResults)results).occurrences(values); + if (numOcc > 0) { + ((StructFields)results).removeFieldValues(values); + ((StructFields)intermediateResults).addFieldValues(values); + + } + } + else { + ((StructFields)results).removeFieldValues(values); + } + } + } + + void removeProjection(List projAttrib, ExecutionContext context, + Collection result, Object iterValue, SelectResults intermediateResults, + boolean isIntersection) throws FunctionDomainException, + TypeMismatchException, NameResolutionException, + QueryInvocationTargetException + { + if (projAttrib == null) { + this.removeFromResultsWithUnionOrIntersection(result, + intermediateResults, isIntersection, iterValue); + } + else { + if (result instanceof StructFields) { + int projCount = projAttrib.size(); + Object[] values = new Object[projCount]; + Iterator projIter = projAttrib.iterator(); + int i = 0; + while (projIter.hasNext()) { + Object projDef[] = (Object[])projIter.next(); + values[i++] = ((CompiledValue)projDef[1]).evaluate(context); + } + this.removeFromStructsWithUnionOrIntersection(result, + intermediateResults, isIntersection, values, context); + } + else { + Object[] temp = (Object[])projAttrib.get(0); + Object val = ((CompiledValue)temp[1]).evaluate(context); + this.removeFromResultsWithUnionOrIntersection(result, + intermediateResults, isIntersection, val); + } + } + + } + + /* + * This function returns the canonicalized defintions of the from clauses used + * in Index creation TODO:Asif :How to make it final so that it is immutable + */ + public String[] getCanonicalizedIteratorDefinitions() + { + return this.canonicalizedDefinitions; + } + + // Asif : This implementation is for PrimaryKeyIndex. RangeIndex has its + // own implementation. For PrimaryKeyIndex , this method should not be used + // TODO: Asif : Check if an Exception should be thrown if the function + // implementation of this class gets invoked + public boolean containsEntry(RegionEntry entry) + { + return false; + } + + void instantiateEvaluator(IndexCreationHelper ich) + { + } + + public void initializeIndex(boolean loadEntries) throws IMQException + { + } + + + @Override + public String toString() + { + StringBuffer sb = new StringBuffer(); + sb.append("Index ["); + sb.append(" Name=").append(getName()); + sb.append(" Type =").append(getType()); + sb.append(" IdxExp=").append(getIndexedExpression()); + sb.append(" From=").append(getFromClause()); + sb.append(" Proj=").append(getProjectionAttributes()); + sb.append("]"); + return sb.toString(); + } + + public abstract boolean isEmpty(); + + protected abstract boolean isCompactRangeIndex(); + + protected abstract InternalIndexStatistics createStats(String indexName); + + public abstract ObjectType getResultSetType(); + + abstract void recreateIndexData() throws IMQException; + + abstract void addMapping(RegionEntry entry) throws IMQException; + + abstract void removeMapping(RegionEntry entry, int opCode) + throws IMQException; + + abstract void addMapping(Object key, Object value, RegionEntry entry) + throws IMQException; + + /** + * Shobhit: This is used to buffer the index entries evaluated from a + * RegionEntry which is getting updated at present. These buffered index + * entries are replaced into the index later all together to avoid + * remove-add sequence. + * @param key + * @param value + * @param entry + * @throws IMQException + */ + abstract void saveMapping(Object key, Object value, RegionEntry entry) + throws IMQException; + + /** Lookup method used when appropriate lock is held */ + abstract void lockedQuery(Object key, int operator, Collection results, + CompiledValue iterOps, RuntimeIterator indpndntItr, + ExecutionContext context, List projAttrib, + SelectResults intermediateResults, boolean isIntersection) + throws TypeMismatchException, FunctionDomainException, + NameResolutionException, QueryInvocationTargetException; + + abstract void lockedQuery(Object lowerBoundKey, int lowerBoundOperator, + Object upperBoundKey, int upperBoundOperator, Collection results, + Set keysToRemove, ExecutionContext context) throws TypeMismatchException, FunctionDomainException, + NameResolutionException, QueryInvocationTargetException; + + abstract void lockedQuery(Object key, int operator, Collection results, + Set keysToRemove, ExecutionContext context) throws TypeMismatchException, FunctionDomainException, + NameResolutionException, QueryInvocationTargetException; + + public Index getPRIndex() { + return prIndex; + } + + public void setPRIndex(Index parIndex) { + this.prIndex = parIndex; + } + + + /** + * Dummy implementation that subclasses can override. + */ + protected static abstract class InternalIndexStatistics implements + IndexStatistics + { + public long getNumUpdates() + { + return 0L; + } + + public long getTotalUpdateTime() + { + return 0L; + } + + public long getTotalUses() + { + return 0L; + } + + public long getNumberOfKeys() + { + return 0L; + } + + public long getNumberOfValues() + { + return 0L; + } + + public long getNumberOfValues(Object key) + { + return 0L; + } + + public long getUpdateTime() { + return 0L; + } + + public long getUseTime() { + return 0L; + } + + public int getReadLockCount() { + return 0; + } + + public long getNumberOfMapIndexKeys() { + return 0; + } + + public int getNumberOfBucketIndexes(){ + return 0; + } + + public void close() + { + } + + public void incNumValues(int delta) + { + } + + public void incNumUpdates() + { + } + + public void incNumUpdates(int delta) + { + } + + public void incUpdatesInProgress(int delta) + { + } + + public void incUsesInProgress(int delta) + { + } + + public void updateNumKeys(long count) + { + } + + public void incNumKeys(long count) + { + } + + public void incNumMapIndexKeys(long numKeys) { + } + + public void incUpdateTime(long delta) + { + } + + public void incNumUses() + { + } + + public void incUseTime(long delta) + { + } + + public void incReadLockCount(int delta) + { + } + + public void incNumBucketIndexes(int delta) + { + } + } + + /** + * + */ + class IMQEvaluator implements IndexedExpressionEvaluator + { + private Cache cache; + + private List fromIterators = null; + + private CompiledValue indexedExpr = null; + + final private String[] canonicalIterNames; + + private ObjectType indexResultSetType = null; + + private Map dependencyGraph = null; + + /* + * Asif : The boolean if true indicates that the 0th iterator is on entries + * . If the 0th iterator is on collection of Region.Entry objects, then the + * RegionEntry object used in Index data objects is obtained directly from + * its corresponding Region.Entry object. However if the 0th iterator is not + * on entries then the boolean is false. In this case the additional + * projection attribute gives us the original value of the iterator while + * the Region.Entry object is obtained from 0th iterator. It is possible to + * have index being created on a Region Entry itself , instead of a Region. + * A Map operator( Compiled Index Operator) used with Region enables, us to + * create such indexes. In such case the 0th iterator, even if it represents + * a collection of Objects which are not Region.Entry objects, still the + * boolean remains true, as the Entry object can be easily obtained from the + * 0th iterator. In this case, the additional projection attribute s not + * null as it is used to evaluate the Entry object from the 0th iterator. + */ + private boolean isFirstItrOnEntry = false; + + //Shobhit: The boolean if true indicates that the 0th iterator is on keys. + private boolean isFirstItrOnKey = false; + + // Asif: List of modified iterators, not null only when the booelan + // isFirstItrOnEntry is false. + private List indexInitIterators = null; + + // Asif : The additional Projection attribute representing the value of the + // original 0th iterator. + // If the isFirstItrOnEntry is false, then it is not null. However if the + // isFirstItrOnEntry is + // true but & still this attribute is not null, this indicates that the 0th + // iterator + // is derived using an individual entry thru Map operator on the Region. + private CompiledValue additionalProj = null; + + // Asif : This is not null iff the boolean isFirstItrOnEntry is false. + private CompiledValue modifiedIndexExpr = null; + + private ObjectType addnlProjType = null; + + private int initEntriesUpdated = 0; + + private boolean hasInitOccuredOnce = false; + + private ExecutionContext initContext = null; + + private int iteratorSize = -1; + + private Region rgn = null; + + /** Creates a new instance of IMQEvaluator */ + IMQEvaluator(IndexCreationHelper helper) { + this.cache = helper.getCache(); + this.fromIterators = helper.getIterators(); + this.indexedExpr = helper.getCompiledIndexedExpression(); + this.rgn = helper.getRegion(); + // Asif : The modified iterators for optmizing Index cxreation + isFirstItrOnEntry = ((FunctionalIndexCreationHelper)helper).isFirstIteratorRegionEntry; + isFirstItrOnKey = ((FunctionalIndexCreationHelper)helper).isFirstIteratorRegionKey; + additionalProj = ((FunctionalIndexCreationHelper)helper).additionalProj; + Object params1[] = { new QRegion(rgn, false) }; + initContext = new ExecutionContext(params1, cache); + this.canonicalIterNames = ((FunctionalIndexCreationHelper)helper).canonicalizedIteratorNames; + if (isFirstItrOnEntry) { + this.indexInitIterators = this.fromIterators; + } + else { + this.indexInitIterators = ((FunctionalIndexCreationHelper)helper).indexInitIterators; + modifiedIndexExpr = ((FunctionalIndexCreationHelper)helper).modifiedIndexExpr; + addnlProjType = ((FunctionalIndexCreationHelper)helper).addnlProjType; + } + this.iteratorSize = this.indexInitIterators.size(); + + } + + public String getIndexedExpression() + { + return AbstractIndex.this.getCanonicalizedIndexedExpression(); + } + + public String getProjectionAttributes() + { + return AbstractIndex.this.getCanonicalizedProjectionAttributes(); + } + + public String getFromClause() + { + return AbstractIndex.this.getCanonicalizedFromClause(); + } + + public void expansion(List expandedResults, Object lowerBoundKey, Object upperBoundKey, int lowerBoundOperator, int upperBoundOperator, Object value) throws IMQException { + //no-op + } + + public void evaluate(RegionEntry target, boolean add) throws IMQException + { + assert add; // ignored, but should be true here + DummyQRegion dQRegion = new DummyQRegion(rgn); + dQRegion.setEntry(target); + Object params[] = { dQRegion }; + ExecutionContext context = new ExecutionContext(params, this.cache); + context.newScope(IndexCreationHelper.INDEX_QUERY_SCOPE_ID); + try { + boolean computeDependency = true; + if (dependencyGraph != null) { + context.setDependencyGraph(dependencyGraph); + computeDependency = false; + } + + for (int i = 0; i < this.iteratorSize; i++) { + CompiledIteratorDef iterDef = (CompiledIteratorDef) fromIterators.get(i); + // Asif: Compute the dependency only once. The call to methods of this + // class are thread safe as for update lock on Index is taken . + if (computeDependency) { + iterDef.computeDependencies(context); + } + RuntimeIterator rIter = iterDef.getRuntimeIterator(context); + context.addToIndependentRuntimeItrMapForIndexCreation(iterDef); + context.bindIterator(rIter); + } + // Save the dependency graph for future updates. + if (dependencyGraph == null) { + dependencyGraph = context.getDependencyGraph(); + } + + Support + .Assert( + this.indexResultSetType != null, + "IMQEvaluator::evaluate:The StrcutType should have been initialized during index creation"); + + doNestedIterations(0, context); + } + catch (IMQException imqe) { + throw imqe; + } + catch (Exception e) { + throw new IMQException(e); + } + finally { + context.popScope(); + } + } + + /** + * Asif : This function is used for creating Index data at the start + * + */ + public void initializeIndex(boolean loadEntries) throws IMQException + { + this.initEntriesUpdated = 0; + try { + // Asif: Since an index initialization can happen multiple times + // for a given region, due to clear operation, we are using harcoded + // scope ID of 1 , as otherwise if obtained from ExecutionContext + // object, + // it will get incremented on very index initialization + this.initContext.newScope(1); + for (int i = 0; i < this.iteratorSize; i++) { + CompiledIteratorDef iterDef = (CompiledIteratorDef)this.indexInitIterators.get(i); + RuntimeIterator rIter = null; + if (!this.hasInitOccuredOnce) { + iterDef.computeDependencies(this.initContext); + rIter = iterDef.getRuntimeIterator(this.initContext); + this.initContext.addToIndependentRuntimeItrMapForIndexCreation(iterDef); + } + if (rIter == null) { + rIter = iterDef.getRuntimeIterator(this.initContext); + } + this.initContext.bindIterator(rIter); + } + this.hasInitOccuredOnce = true; + if (this.indexResultSetType == null) { + this.indexResultSetType = createIndexResultSetType(); + } + if(loadEntries) { + doNestedIterationsForIndexInit(0, this.initContext + .getCurrentIterators()); + } + } + catch (IMQException imqe) { + throw imqe; + } + catch (Exception e) { + throw new IMQException(e); + } + finally { + this.initContext.popScope(); + } + } + + private void doNestedIterationsForIndexInit(int level, List runtimeIterators) + throws TypeMismatchException, AmbiguousNameException, + FunctionDomainException, NameResolutionException, + QueryInvocationTargetException, IMQException + { + if (level == 1) { + ++this.initEntriesUpdated; + } + if (level == this.iteratorSize) { + applyProjectionForIndexInit(runtimeIterators); + } + else { + RuntimeIterator rIter = (RuntimeIterator)runtimeIterators.get(level); + // System.out.println("Level = "+level+" Iter = "+rIter.getDef()); + Collection c = rIter.evaluateCollection(this.initContext); + if (c == null) + return; + Iterator cIter = c.iterator(); + while (cIter.hasNext()) { + rIter.setCurrent(cIter.next()); + doNestedIterationsForIndexInit(level + 1, runtimeIterators); + } + } + } + + /* + * Asif : This function is used to obtain Indxe data at the time of index + * creation. Each element of the List is an Object Array of size 3. The 0th + * element of Object Array stores the value of Index Expression. The 1st + * element of ObjectArray contains the RegionEntry object ( If the booelan + * isFirstItrOnEntry is false, then the 0th iterator will give us the + * Region.Entry object which can be used to obtain the underlying + * RegionEntry object. If the boolean is true & additional projection + * attribute is not null, then the Region.Entry object can be obtained by + * evaluating the additional projection attribute. If the boolean + * isFirstItrOnEntry is tru e& additional projection attribute is null, then + * teh 0th iterator itself will evaluate to Region.Entry Object. + * + * The 2nd element of Object Array contains the Struct object ( tuple) + * created. If the boolean isFirstItrOnEntry is false, then the first + * attribute of the Struct object is obtained by evaluating the additional + * projection attribute. + */ + private void applyProjectionForIndexInit(List currrentRuntimeIters) + throws FunctionDomainException, TypeMismatchException, + NameResolutionException, QueryInvocationTargetException, IMQException + { + if (QueryMonitor.isLowMemory()) { + throw new IMQException(LocalizedStrings.IndexCreationMsg_CANCELED_DUE_TO_LOW_MEMORY.toLocalizedString()); + } + + LocalRegion.NonTXEntry temp = null; + + //Evaluate NonTXEntry for index on entries or additional projections + //on Entry or just entry value. + if (this.isFirstItrOnEntry && this.additionalProj != null) { + temp = (LocalRegion.NonTXEntry)additionalProj + .evaluate(this.initContext); + } + else { + temp = (LocalRegion.NonTXEntry)(((RuntimeIterator)currrentRuntimeIters + .get(0)).evaluate(this.initContext)); + } + + RegionEntry re = temp.getRegionEntry(); + Object indxResultSet = null; + + // Object tuple[] ; + if (this.iteratorSize == 1) { + indxResultSet = this.isFirstItrOnEntry ? ((this.additionalProj == null) ? temp + : ((RuntimeIterator)currrentRuntimeIters.get(0)) + .evaluate(this.initContext)) + : additionalProj.evaluate(this.initContext); + } + else { + Object[] tuple = new Object[this.iteratorSize]; + int i = (this.isFirstItrOnEntry) ? 0 : 1; + for (; i < this.iteratorSize; i++) { + RuntimeIterator iter = (RuntimeIterator)currrentRuntimeIters.get(i); + tuple[i] = iter.evaluate(this.initContext); + } + if (!this.isFirstItrOnEntry) + tuple[0] = additionalProj.evaluate(this.initContext); + Support + .Assert( + this.indexResultSetType instanceof StructTypeImpl, + "The Index ResultType should have been an instance of StructTypeImpl rather than ObjectTypeImpl. The indxeResultType is " + + this.indexResultSetType); + indxResultSet = new StructImpl( + (StructTypeImpl)this.indexResultSetType, tuple); + } + + //Key must be evaluated after indexResultSet evaluation is done as Entry might be getting destroyed + //and so if value is UNDEFINED, key will definitely will be UNDEFINED. + Object indexKey = this.isFirstItrOnEntry ? this.indexedExpr + .evaluate(this.initContext) : modifiedIndexExpr + .evaluate(this.initContext); + //based on the first key convert the rest to PdxString or String + if(!isIndexedPdxKeysFlagSet){ + setPdxStringFlag(indexKey); + } + indexKey = getPdxStringForIndexedPdxKeys(indexKey); + addMapping(indexKey, indxResultSet, re); + } + + // TODO:Asif : This appears to be incorrect. + private void doNestedIterations(int level, ExecutionContext context) throws TypeMismatchException, + AmbiguousNameException, FunctionDomainException, + NameResolutionException, QueryInvocationTargetException, IMQException + { + List iterList = context.getCurrentIterators(); + if (level == this.iteratorSize) { + applyProjection(context); + } + else { + RuntimeIterator rIter = (RuntimeIterator)iterList.get(level); + // System.out.println("Level = "+level+" Iter = "+rIter.getDef()); + Collection c = rIter.evaluateCollection(context); + if (c == null) + return; + Iterator cIter = c.iterator(); + while (cIter.hasNext()) { + rIter.setCurrent(cIter.next()); + doNestedIterations(level + 1, context); + } + } + } + + private void applyProjection(ExecutionContext context) throws FunctionDomainException, + TypeMismatchException, NameResolutionException, + QueryInvocationTargetException, IMQException + { + List currrentRuntimeIters = context.getCurrentIterators(); + Object indxResultSet = null; + // int size = currrentRuntimeIters.size(); + Object indexKey = indexedExpr.evaluate(context); + //based on the first key convert the rest to PdxString or String + if(!isIndexedPdxKeysFlagSet){ + setPdxStringFlag(indexKey); + } + indexKey = getPdxStringForIndexedPdxKeys(indexKey); + if (this.iteratorSize == 1) { + RuntimeIterator iter = (RuntimeIterator)currrentRuntimeIters.get(0); + indxResultSet = iter.evaluate(context); + } + else { + Object tuple[] = new Object[this.iteratorSize]; + for (int i = 0; i < this.iteratorSize; i++) { + RuntimeIterator iter = (RuntimeIterator)currrentRuntimeIters.get(i); + tuple[i] = iter.evaluate(context); + } + Support + .Assert( + this.indexResultSetType instanceof StructTypeImpl, + "The Index ResultType should have been an instance of StructTypeImpl rather than ObjectTypeImpl. The indxeResultType is " + + this.indexResultSetType); + indxResultSet = new StructImpl( + (StructTypeImpl)this.indexResultSetType, tuple); + } + + //Keep Entry value in fly untill all keys are evaluated + RegionEntry entry = ((DummyQRegion) context.getBindArgument(1)).getEntry(); + saveMapping(indexKey, indxResultSet, entry); + } + + // TODO :Asif: Test this function . + // The struct type calculation is modified if the + // 0th iterator is modified to make it dependent on Entry + private ObjectType createIndexResultSetType() + { + List currentIterators = this.initContext.getCurrentIterators(); + int len = currentIterators.size(); + ObjectType type = null; + // String fieldNames[] = new String[len]; + ObjectType fieldTypes[] = new ObjectType[len]; + int start = this.isFirstItrOnEntry ? 0 : 1; + for (; start < len; start++) { + RuntimeIterator iter = (RuntimeIterator)currentIterators.get(start); + // fieldNames[start] = iter.getInternalId(); + fieldTypes[start] = iter.getElementType(); + } + if (!this.isFirstItrOnEntry) { + // fieldNames[0] = "iter1"; + fieldTypes[0] = addnlProjType; + } + type = (len == 1) ? fieldTypes[0] : new StructTypeImpl( + this.canonicalIterNames, fieldTypes); + return type; + } + + private void printList(List list) + { + System.out.println("results.size = " + list.size()); + for (int i = 0; i < list.size(); i++) { + Object arr[] = (Object[])list.get(i); + System.out.println("Key = " + arr[0]); + System.out.println("Value =" + arr[1]); + } + } + + int getTotalEntriesUpdated() + { + return this.initEntriesUpdated; + } + + public ObjectType getIndexResultSetType() + { + return this.indexResultSetType; + } + + public boolean isFirstItrOnEntry() { + return isFirstItrOnEntry; + } + + public boolean isFirstItrOnKey() { + return isFirstItrOnKey; + } + + @Override + public List getAllDependentIterators() { + return fromIterators; + } + } + + /** + * Checks the limit for the resultset for distinct and non-distinct + * queries separately. In case of non-distinct distinct elements size + * of result-set is matched against limit passed in as an argument. + * + * @param result + * @param limit + * @param context + * @return true if limit is satisfied. + */ + protected boolean verifyLimit(Collection result, int limit, + ExecutionContext context) { + if (limit > 0) { + /* if (!context.isDistinct()) { + return ((Bag)result).size() == limit; + } else if (result.size() == limit) { + return true; + }*/ + return result.size() == limit; + } + return false; + } + + /** + * This will verify the consistency between RegionEntry and IndexEntry. + * RangeIndex has following entry structure, + * + * IndexKey --> [RegionEntry, [Iterator1, Iterator2....., IteratorN]] + * + * Where Iterator1 to IteratorN are iterators defined in index from clause. + * + * For example: "/portfolio p, p.positions.values pos" from clause has two + * iterators where p is independent iterator and pos is dependent iterator. + * + * Query iterators can be a subset, superset or exact match of index iterators. + * But we take query iterators which are matching with index iterators to evaluate + * RegionEntry for new value and compare it with index value which could be + * a plain object or a Struct. + * + * Note: Struct evaluated from RegionEntry can NOT have more field values than + * Index Value Struct as we filter out iterators in query context before evaluating + * Struct from RegionEntry. + * @param re + * @param value + * @param context + * @return True if Region and Index entries are consistent. + */ + protected boolean verifyEntryAndIndexVaue(RegionEntry re, Object value, ExecutionContext context) { + IMQEvaluator evaluator = (IMQEvaluator)getEvaluator(); + List valuesInRegion = null; + Object valueInIndex = null; + + try { + // In a RegionEntry key and Entry itself can not be modified else + // RegionEntry itself will change. So no need to verify anything just return + // true. + if (evaluator.isFirstItrOnKey()) { + return true; + } else if (evaluator.isFirstItrOnEntry()) { + valuesInRegion = evaluateIndexIteratorsFromRE(re, context); + valueInIndex = verifyAndGetPdxDomainObject(value); + } else{ + @Released Object val = re.getValueInVM(context.getPartitionedRegion()); + Chunk valToFree = null; + if (val instanceof Chunk) { + valToFree = (Chunk)val; + } + try { + if (val instanceof CachedDeserializable) { + val = ((CachedDeserializable)val).getDeserializedValue(getRegion(), re); + } + val = verifyAndGetPdxDomainObject(val); + valueInIndex = verifyAndGetPdxDomainObject(value); + valuesInRegion = evaluateIndexIteratorsFromRE(val, context); + } finally { + if (valToFree != null) { + valToFree.release(); + } + } + } + } catch (Exception e) { + // TODO: Create a new LocalizedString for this. + if (logger.isDebugEnabled()) { + logger.debug("Exception occured while verifying a Region Entry value during a Query when the Region Entry is under update operation", e); + } + } + + // We could have many index keys available in one Region entry or just one. + if (!valuesInRegion.isEmpty()) { + for (Object valueInRegion : valuesInRegion) { + if (compareStructWithNonStruct(valueInRegion, valueInIndex)) { + return true; + } + } + return false; + } else { + // Seems like value has been invalidated. + return false; + } + } + + /** + * This method compares two objects in which one could be StructType and + * other ObjectType. + * Fur conditions are possible, + * Object1 -> Struct Object2-> Struct + * Object1 -> Struct Object2-> Object + * Object1 -> Object Object2-> Struct + * Object1 -> Object Object2-> Object + * + * @param valueInRegion + * @param valueInIndex + * @return true if valueInRegion's all objects are part of valueInIndex. + */ + private boolean compareStructWithNonStruct(Object valueInRegion, + Object valueInIndex) { + if (valueInRegion instanceof Struct && valueInIndex instanceof Struct) { + Object[] regFields = ((StructImpl) valueInRegion).getFieldValues(); + List indFields = Arrays.asList(((StructImpl) valueInIndex).getFieldValues()); + for (Object regField : regFields) { + if (!indFields.contains(regField)) { + return false; + } + } + return true; + } else if (valueInRegion instanceof Struct && !(valueInIndex instanceof Struct)) { + Object[] fields = ((StructImpl) valueInRegion).getFieldValues(); + for (Object field : fields) { + if (field.equals(valueInIndex)) { + return true; + } + } + } else if (!(valueInRegion instanceof Struct) && valueInIndex instanceof Struct) { + Object[] fields = ((StructImpl) valueInIndex).getFieldValues(); + for (Object field : fields) { + if (field.equals(valueInRegion)) { + return true; + } + } + } else { + return valueInRegion.equals(valueInIndex); + } + return false; + } + + /** + * Returns evaluated collection for dependent runtime iterator for this index + * from clause and given RegionEntry. + * + * @param context passed here is query context. + * @return Evaluated second level collection. + * @throws QueryInvocationTargetException + * @throws NameResolutionException + * @throws TypeMismatchException + * @throws FunctionDomainException + */ + protected List evaluateIndexIteratorsFromRE(Object value, ExecutionContext context) + throws FunctionDomainException, + TypeMismatchException, NameResolutionException, + QueryInvocationTargetException { + //We need NonTxEntry to call getValue() on it. RegionEntry does + //NOT have public getValue() method. + if (value instanceof RegionEntry) { + value = ((LocalRegion) this.getRegion()).new NonTXEntry( + (RegionEntry) value); + } + // Get all Independent and dependent iterators for this Index. + List itrs = getAllDependentRuntimeIterators(context); + + List values = evaluateLastColl(value, context, itrs, 0); + return values; + } + + private List evaluateLastColl(Object value, ExecutionContext context, + List itrs, int level) + throws FunctionDomainException, TypeMismatchException, + NameResolutionException, QueryInvocationTargetException { + // A tuple is a value generated from RegionEntry value which could be + // a StructType (Multiple Dependent Iterators) or ObjectType (Single + // Iterator) value. + List tuples = new ArrayList(1); + + RuntimeIterator currItrator = (RuntimeIterator) itrs.get(level); + currItrator.setCurrent(value); + // If its last iterator then just evaluate final struct. + if ((itrs.size() - 1) == level) { + if (itrs.size() > 1) { + Object tuple[] = new Object[itrs.size()]; + for (int i = 0; i < itrs.size(); i++) { + RuntimeIterator iter = (RuntimeIterator)itrs.get(i); + tuple[i] = iter.evaluate(context); + } + // Its ok to pass type as null as we are only interested in values. + tuples.add(new StructImpl(new StructTypeImpl(), tuple)); + } else { + tuples.add(currItrator.evaluate(context)); + } + } else { + // Not the last iterator. + RuntimeIterator nextItr = (RuntimeIterator) itrs.get(level + 1); + Collection nextLevelValues = nextItr.evaluateCollection(context); + + // If value is null or INVALID then the evaluated collection would be + // Null. + if (nextLevelValues != null) { + for (Object nextLevelValue : nextLevelValues) { + tuples.addAll(evaluateLastColl(nextLevelValue, context, + itrs, level + 1)); + } + } + } + return tuples; + } + + /** + * Matches the Collection reference in given context for this index's + * from-clause in all current independent collection references associated to + * the context. For example, if a join Query has "/region1 p, region2 e" from clause + * context contains two region references for p and e and Index could be used for + * any of those of both of those regions. + * + * Note: This Index contains its own from clause definition which corresponds to + * a region collection reference in given context and must be contained at 0th index + * in {@link AbstractIndex#canonicalizedDefinitions}. + * + * @param context + * @return {@link RuntimeIterator} this should not be null ever. + */ + public RuntimeIterator getRuntimeIteratorForThisIndex(ExecutionContext context) { + List indItrs = context.getCurrentIterators(); + Region rgn = this.getRegion(); + if (rgn instanceof BucketRegion) { + rgn = ((BucketRegion)rgn).getPartitionedRegion(); + } + String regionPath = rgn.getFullPath(); + String definition = this.getCanonicalizedIteratorDefinitions()[0]; + for (RuntimeIterator itr: indItrs) { + //GemFireCacheImpl.getInstance().getLogger().fine("Shobhit: "+ itr.getDefinition() + " "+ this.getRegion().getFullPath()); + if (itr.getDefinition().equals(regionPath) || itr.getDefinition().equals(definition)) { + return itr; + } + } + return null; + } + + /** + * Similar to {@link #getRuntimeIteratorForThisIndex(ExecutionContext)} except + * that this one also matches the iterator name if present with alias used + * in the {@link IndexInfo} + * + * @param context + * @param info + * @return {@link RuntimeIterator} + */ + public RuntimeIterator getRuntimeIteratorForThisIndex( + ExecutionContext context, IndexInfo info) { + List indItrs = context.getCurrentIterators(); + Region rgn = this.getRegion(); + if (rgn instanceof BucketRegion) { + rgn = ((BucketRegion) rgn).getPartitionedRegion(); + } + String regionPath = rgn.getFullPath(); + String definition = this.getCanonicalizedIteratorDefinitions()[0]; + for (RuntimeIterator itr : indItrs) { + if ((itr.getDefinition().equals(regionPath) || itr.getDefinition() + .equals(definition))) { + // if iterator has name alias must be used in the query + if(itr.getName() != null){ + CompiledValue path = info._path(); + // match the iterator name with alias + String pathName = getReceiverNameFromPath(path); + if(path.getType() == OQLLexerTokenTypes.Identifier + || itr.getName().equals(pathName)) { + return itr; + } + } else{ + return itr; + } + } + } + return null; + } + + private String getReceiverNameFromPath(CompiledValue path) { + if (path instanceof CompiledID) { + return ((CompiledID) path).getId(); + } + else if (path instanceof CompiledPath) { + return getReceiverNameFromPath(path.getReceiver()); + } + else if (path instanceof CompiledOperation) { + return getReceiverNameFromPath(path.getReceiver()); + } + else if (path instanceof CompiledIndexOperation) { + return getReceiverNameFromPath(((CompiledIndexOperation)path).getReceiver()); + } + return ""; + } + + /** + * Take all independent iterators from context and remove the one which + * matches for this Index's independent iterator. Then get all Dependent + * iterators from given context for this Index's independent iterator. + * + * @param context from executing query. + * @return List of all iterators pertaining to this Index. + */ + public List getAllDependentRuntimeIterators(ExecutionContext context) { + List indItrs = context + .getCurrScopeDpndntItrsBasedOnSingleIndpndntItr(getRuntimeIteratorForThisIndex(context)); + + List definitions = Arrays.asList(this.getCanonicalizedIteratorDefinitions()); + // These are the common iterators between query from clause and index from clause. + ArrayList itrs = new ArrayList(); + + for (RuntimeIterator itr : indItrs) { + if (definitions.contains(itr.getDefinition())) { + itrs.add(itr); + } + } + return itrs; + } + + /** + * This map is not thread-safe. We rely on the fact that every thread which is + * trying to update this kind of map (In Indexes), must have RegionEntry lock + * before adding OR removing elements. + * + * This map does NOT provide an iterator. To iterate over its element caller + * has to get inside the map itself through addValuesToCollection() calls. + * + * + */ + class RegionEntryToValuesMap + { + protected Map map; + private boolean useList; + private AtomicInteger numValues = new AtomicInteger(0); + + RegionEntryToValuesMap(boolean useList) { + this.map = new ConcurrentHashMap(2, 0.75f, 1); + this.useList = useList; + } + + RegionEntryToValuesMap(Map map, boolean useList) { + this.map = map; + this.useList = useList; + } + + /** + * We do NOT use any locks here as every add is for a RegionEntry + * which is locked before coming here. No two threads can be + * entering in this method together for a RegionEntry. + * + * @param entry + * @param value + */ + public void add(RegionEntry entry, Object value) + { + assert value != null; + // Values must NOT be null and ConcurrentHashMap does not + // support null values. + if (value == null) { + return; + } + Object object = map.get(entry); + if (object == null) { + map.put(entry, value); + } else if (object instanceof Collection) { + Collection coll = (Collection) object; + // If its a list query might get ConcurrentModificationException. + // This can only happen for Null mapped or Undefined entries in a + // RangeIndex. So we are synchronizing on ArrayList. + if (useList) { + synchronized (coll) { + coll.add(value); + } + } else { + coll.add(value); + } + } else { + Collection coll = useList?new ArrayList(2):new IndexConcurrentHashSet(2, 0.75f, 1); + coll.add(object); + coll.add(value); + map.put(entry, coll); + } + numValues.incrementAndGet(); + } + + public void addAll(RegionEntry entry, Collection values) + { + Object object = map.get(entry); + if (object == null) { + Collection coll = useList?new ArrayList(values.size()):new IndexConcurrentHashSet(values.size(), 0.75f, 1); + coll.addAll(values); + map.put(entry, coll); + numValues.addAndGet(values.size()); + } else if (object instanceof Collection) { + Collection coll = (Collection) object; + // If its a list query might get ConcurrentModificationException. + // This can only happen for Null mapped or Undefined entries in a + // RangeIndex. So we are synchronizing on ArrayList. + if (useList) { + synchronized (coll) { + coll.addAll(values); + } + } else { + coll.addAll(values); + } + } else { + Collection coll = useList?new ArrayList(values.size() + 1):new IndexConcurrentHashSet(values.size()+1, 0.75f, 1); + coll.addAll(values); + coll.add(object); + map.put(entry, coll); + } + numValues.addAndGet(values.size()); + } + + public Object get(RegionEntry entry) + { + return map.get(entry); + } + + /** + * We do NOT use any locks here as every remove is for a RegionEntry + * which is locked before coming here. No two threads can be + * entering in this method together for a RegionEntry. + * + * @param entry + * @param value + */ + public void remove(RegionEntry entry, Object value) + { + Object object = map.get(entry); + if (object == null) + return; + if (object instanceof Collection) { + Collection coll= (Collection)object; + boolean removed = false; + // If its a list query might get ConcurrentModificationException. + // This can only happen for Null mapped or Undefined entries in a + // RangeIndex. So we are synchronizing on ArrayList. + if (useList) { + synchronized (coll) { + removed = coll.remove(value); + } + } else { + removed = coll.remove(value); + } + if (removed) { + if (coll.size() == 0) { + map.remove(entry); + } + numValues.decrementAndGet(); + } + } + else { + if (object.equals(value)) { + map.remove(entry); + } + this.numValues.decrementAndGet(); + } + } + + public Object remove(RegionEntry entry) + { + Object retVal = map.remove(entry); + if (retVal != null) { + numValues.addAndGet((retVal instanceof Collection) ? + - ((Collection) retVal).size() : -1 ); + } + return retVal; + } + + public int getNumValues(RegionEntry entry) + { + Object object = map.get(entry); + if (object == null) + return 0; + if (object instanceof Collection) { + Collection coll = (Collection) object; + return coll.size(); + } else { + return 1; + } + } + + public int getNumValues() + { + return this.numValues.get(); + } + + public int getNumEntries() + { + return map.keySet().size(); + } + + public void addValuesToCollection(Collection result, int limit, ExecutionContext context ) + { + + Iterator entriesIter = map.entrySet().iterator(); + while (entriesIter.hasNext()) { + // Check if query execution on this thread is canceled. + QueryMonitor.isQueryExecutionCanceled(); + if (this.verifylimit(result, limit, context)) { + return; + } + Map.Entry e = (Map.Entry)entriesIter.next(); + Object value = e.getValue(); + assert value != null; + + RegionEntry re = (RegionEntry) e.getKey(); + boolean reUpdateInProgress = re.isUpdateInProgress(); + if (value instanceof Collection) { + // If its a list query might get ConcurrentModificationException. + // This can only happen for Null mapped or Undefined entries in a + // RangeIndex. So we are synchronizing on ArrayList. + if (this.useList) { + synchronized (value) { + Iterator itr = ((Collection) value).iterator(); + while (itr.hasNext()) { + Object val = itr.next(); + //Shobhit: Compare the value in index with in RegionEntry. + if (!reUpdateInProgress || verifyEntryAndIndexVaue(re, val, context)) { + result.add(val); + } + if (limit != -1) { + if (result.size() == limit) { + return; + } + } + } + } + } else { + Iterator itr = ((Collection) value).iterator(); + while (itr.hasNext()) { + Object val = itr.next(); + //Shobhit: Compare the value in index with in RegionEntry. + if (!reUpdateInProgress || verifyEntryAndIndexVaue(re, val, context)) { + result.add(val); + } + if (limit != -1) { + if (this.verifylimit(result, limit, context)) { + return; + } + } + } + } + } + else { + if (!reUpdateInProgress + || verifyEntryAndIndexVaue(re, value, context)) { + if (context.isCqQueryContext()) { + result + .add(new CqEntry(((RegionEntry) e.getKey()).getKey(), value)); + } else { + result.add(verifyAndGetPdxDomainObject(value)); + } + } + } + } + } + + public void addValuesToCollection(Collection result, CompiledValue iterOp, + RuntimeIterator runtimeItr, ExecutionContext context, List projAttrib, + SelectResults intermediateResults, boolean isIntersection, int limit) + throws FunctionDomainException, TypeMismatchException, + NameResolutionException, QueryInvocationTargetException + { + if (this.verifylimit(result, limit, context)) { + return; + } + // Iterator valuesIter = map.values().iterator(); + Iterator entries = map.entrySet().iterator(); + while (entries.hasNext()) { + // Check if query execution on this thread is canceled. + QueryMonitor.isQueryExecutionCanceled(); + Map.Entry e = (Map.Entry)entries.next(); + Object value = e.getValue(); + //Key is a RegionEntry here. + RegionEntry entry = (RegionEntry)e.getKey(); + boolean reUpdateInProgress = false; + if (value != null) { + if (entry.isUpdateInProgress()) { + reUpdateInProgress = true; + } + if (value instanceof Collection) { + // If its a list query might get ConcurrentModificationException. + // This can only happen for Null mapped or Undefined entries in a + // RangeIndex. So we are synchronizing on ArrayList. + if (this.useList) { + synchronized (value) { + Iterator itr = ((Collection)value).iterator(); + while (itr.hasNext()) { + boolean ok = true; + Object val = itr.next(); + if (reUpdateInProgress) { + //Shobhit: Compare the value in index with value in RegionEntry. + ok = verifyEntryAndIndexVaue(entry, val, context); + } + if (ok && runtimeItr != null) { + runtimeItr.setCurrent(val); + ok = QueryUtils.applyCondition(iterOp, context); + } + if (ok) { + applyProjection(projAttrib, context, result, val, + intermediateResults, isIntersection); + if (limit != -1 && result.size() == limit) { + return; + } + // return pResultSet; + } + } + } + } else { + Iterator itr = ((Collection)value).iterator(); + while (itr.hasNext()) { + boolean ok = true; + Object val = itr.next(); + if (reUpdateInProgress) { + //Shobhit: Compare the value in index with value in RegionEntry. + ok = verifyEntryAndIndexVaue(entry, val, context); + } + if (ok && runtimeItr != null) { + runtimeItr.setCurrent(val); + ok = QueryUtils.applyCondition(iterOp, context); + } + if (ok) { + applyProjection(projAttrib, context, result, val, + intermediateResults, isIntersection); + if (this.verifylimit(result, limit, context)) { + return; + } + // return pResultSet; + } + } + } + } + else { + boolean ok = true; + if (reUpdateInProgress) { + //Shobhit: Compare the value in index with in RegionEntry. + ok = verifyEntryAndIndexVaue(entry, value, context); + } + if (ok && runtimeItr != null) { + runtimeItr.setCurrent(value); + ok = QueryUtils.applyCondition(iterOp, context); + } + if (ok) { + if (context.isCqQueryContext()) { + result.add(new CqEntry(((RegionEntry)e.getKey()).getKey(), + value)); + } + else { + applyProjection(projAttrib, context, result, value, + intermediateResults, isIntersection); + } + } + } + } + } + } + + public void removeValuesFromCollection(Collection result, + CompiledValue iterOps, RuntimeIterator runtimeItr, + ExecutionContext context, List projAttrib, + SelectResults intermediateResults, boolean isIntersection) + throws FunctionDomainException, TypeMismatchException, + NameResolutionException, QueryInvocationTargetException + { + // Iterator valuesIter = map.values().iterator(); + Iterator entries = map.entrySet().iterator(); + while (entries.hasNext()) { + Map.Entry e = (Map.Entry)entries.next(); + Object value = e.getValue(); + if (value instanceof Collection) { + Iterator itr = ((Collection)value).iterator(); + while (itr.hasNext()) { + boolean ok = true; + Object val = itr.next(); + if (runtimeItr != null) { + runtimeItr.setCurrent(val); + ok = QueryUtils.applyCondition(iterOps, context); + + } + if (ok) { + removeProjection(projAttrib, context, result, val, + intermediateResults, isIntersection); + } + } + } + else { + boolean ok = true; + if (runtimeItr != null) { + // Attempt to remove only if it was apossibly added + runtimeItr.setCurrent(value); + ok = QueryUtils.applyCondition(iterOps, context); + } + if (ok) { + if (context.isCqQueryContext()) { + result.remove(new CqEntry(((RegionEntry)e.getKey()).getKey(), + value)); + } + else { + removeProjection(projAttrib, context, result, value, + intermediateResults, isIntersection); + } + } + + } + } + } + + public void removeValuesFromCollection(Collection result) + { + Iterator valuesIter = map.values().iterator(); + while (valuesIter.hasNext()) { + Object value = valuesIter.next(); + if (value instanceof Collection) + result.removeAll((Collection)value); + else + result.remove(value); + } + } + + private boolean verifylimit(Collection result, int limit, + ExecutionContext context) { + if (limit > 0) { + if (!context.isDistinct()) { + return ((Bag)result).size() == limit; + } else if (result.size() == limit) { + return true; + } + } + return false; + } + + public boolean containsEntry(RegionEntry entry) + { + return map.containsKey(entry); + } + + public boolean containsValue(Object value) + { + throw new RuntimeException( + LocalizedStrings.RangeIndex_NOT_YET_IMPLEMENTED.toLocalizedString()); + } + + public void clear() + { + map.clear(); + this.numValues.set(0); + } + + public Set entrySet() + { + return map.entrySet(); + } + + /** + * This replaces a key's value along with updating the numValues + * correctly. + * @param entry + * @param values + */ + public void replace(RegionEntry entry, Object values) { + int numOldValues = getNumValues(entry); + this.map.put(entry, values); + this.numValues.addAndGet(((values instanceof Collection) ? ((Collection) values) + .size() : 1) - numOldValues); + } + } + + /** + * This will populate resultset from both type of indexes, + * {@link CompactRangeIndex} and {@link RangeIndex}. + * + * @param list + * @param outerEntries + * @param innerEntries + * @param context + * @param key + * @throws FunctionDomainException + * @throws TypeMismatchException + * @throws NameResolutionException + * @throws QueryInvocationTargetException + */ + protected void populateListForEquiJoin(List list, Object outerEntries, + Object innerEntries, ExecutionContext context, Object key) + throws FunctionDomainException, TypeMismatchException, + NameResolutionException, QueryInvocationTargetException { + + Assert.assertTrue((outerEntries != null && innerEntries != null), "OuterEntries or InnerEntries must not be null"); + + Object values[][] = new Object[2][]; + Iterator itr = null; + int j = 0; + + while (j < 2) { + boolean isRangeIndex = false; + if (j == 0) { + if (outerEntries instanceof RegionEntryToValuesMap) { + itr = ((RegionEntryToValuesMap)outerEntries).map.entrySet().iterator(); + isRangeIndex = true; + } else if (outerEntries instanceof CloseableIterator){ + itr = (Iterator) outerEntries; + } + } + else { + if (innerEntries instanceof RegionEntryToValuesMap) { + itr = ((RegionEntryToValuesMap)innerEntries).map.entrySet().iterator(); + isRangeIndex = true; + } else if (innerEntries instanceof CloseableIterator){ + itr = (Iterator) innerEntries; + } + } + //TODO :Asif Identify appropriate size of the List + + // extract the values from the RegionEntries + List dummy = new ArrayList(); + RegionEntry re = null; + IndexStoreEntry ie = null; + Object val = null; + Object entryVal = null; + + IndexInfo[] indexInfo = (IndexInfo[]) context.cacheGet(CompiledValue.INDEX_INFO); + IndexInfo indInfo = indexInfo[j]; + + while (itr.hasNext()) { + if (isRangeIndex) { + Map.Entry entry = (Map.Entry)itr.next(); + val = entry.getValue(); + if (val instanceof Collection) { + entryVal = ((Collection)val).iterator().next(); + } else { + entryVal = val; + } + re = (RegionEntry) entry.getKey(); + } else { + ie = (IndexStoreEntry)itr.next(); + } + //Bug#41010: We need to verify if Inner and Outer Entries + // are consistent with index key values. + boolean ok = true; + if (isRangeIndex) { + if(re.isUpdateInProgress()) { + ok = ((RangeIndex) indInfo._getIndex()).verifyEntryAndIndexVaue(re, + entryVal, context); + } + } else if (ie.isUpdateInProgress()) { + ok = ((CompactRangeIndex) indInfo._getIndex()) + .verifyInnerAndOuterEntryValues(ie, context, indInfo, key); + } + if (ok) { + if (isRangeIndex) { + if (val instanceof Collection) { + dummy.addAll((Collection) val); + } + else { + dummy.add(val); + } + } else { + if (IndexManager.IS_TEST_EXPANSION) { + dummy.addAll(((CompactRangeIndex)indInfo._getIndex()).expandValue(context, key, null, OQLLexerTokenTypes.TOK_EQ, -1, ie.getDeserializedValue())); + } + else { + dummy.add(ie.getDeserializedValue()); + } + } + } + } + Object[] newValues = new Object[dummy.size()]; + dummy.toArray(newValues); + values[j++] = newValues; + } + list.add(values); + } + + /** + * Sets the isIndexedPdxKeys flag indicating if all the keys in the index are + * Strings or PdxStrings. Also sets another flag isIndexedPdxKeysFlagSet that + * indicates isIndexedPdxKeys has been set/reset to avoid frequent calculation + * of map size + * + * @param key + */ + public synchronized void setPdxStringFlag(Object key) { + // For Null and Undefined keys do not set the isIndexedPdxKeysFlagSet flag + if (key == null || key == IndexManager.NULL + || key == QueryService.UNDEFINED) { + return; + } + if (!isIndexedPdxKeys) { + if (key instanceof PdxString) { + isIndexedPdxKeys = true; + } + } + isIndexedPdxKeysFlagSet = true; + } + + /** + * Converts Strings to PdxStrings and vice-versa based on the isIndexedPdxKeys + * flag + * + * @param key + * @return PdxString or String based on isIndexedPdxKeys flag + */ + public Object getPdxStringForIndexedPdxKeys(Object key) { + if (isIndexedPdxKeys) { + if (key instanceof String){ + return new PdxString((String) key); + } + } else if (key instanceof PdxString) { + return ((PdxString) key).toString(); + } + return key; + } + + public boolean removeFromKeysToRemove(Collection keysToRemove, Object key) { + Iterator iterator = keysToRemove.iterator(); + while (iterator.hasNext()) { + try { + if (TypeUtils.compare(key, iterator.next(), OQLLexerTokenTypes.TOK_EQ).equals(Boolean.TRUE)) { + iterator.remove(); + return true; + } + } + catch (TypeMismatchException e) { + //they are not equals, so we just continue iterating + } + } + return false; + } + + public boolean acquireIndexReadLockForRemove() { + boolean success = this.removeIndexLock.readLock().tryLock(); + if (success) { + this.internalIndexStats.incReadLockCount(1); + if (logger.isDebugEnabled()) { + logger.debug("Acquired read lock on index {}", this.getName()); + } + } + return success; + } + + public void releaseIndexReadLockForRemove() { + this.removeIndexLock.readLock().unlock(); + this.internalIndexStats.incReadLockCount(-1); + if (logger.isDebugEnabled()) { + logger.debug("Released read lock on index {}", this.getName()); + } + } + + /** + * This makes current thread wait until all query threads are done using it. + */ + public void acquireIndexWriteLockForRemove() { + final boolean isDebugEnabled = logger.isDebugEnabled(); + if (logger.isDebugEnabled()) { + logger.debug("Acquiring write lock on Index {}", this.getName()); + } + removeIndexLock.writeLock().lock(); + if (logger.isDebugEnabled()) { + logger.debug("Acquired write lock on index {}", this.getName()); + } + } + + public void releaseIndexWriteLockForRemove() { + final boolean isDebugEnabled = logger.isDebugEnabled(); + if (isDebugEnabled) { + logger.debug("Releasing write lock on Index {}", this.getName()); + } + removeIndexLock.writeLock().unlock(); + if (isDebugEnabled) { + logger.debug("Released write lock on Index {}", this.getName()); + } + } + + public boolean isPopulated() { + return isPopulated; + } + + public void setPopulated(boolean isPopulated) { + this.isPopulated = isPopulated; + } + + +} diff --git a/gemfire-core/src/main/java/com/gemstone/gemfire/cache/query/internal/index/DummyQRegion.java b/gemfire-core/src/main/java/com/gemstone/gemfire/cache/query/internal/index/DummyQRegion.java new file mode 100644 index 000000000000..38417f4e84aa --- /dev/null +++ b/gemfire-core/src/main/java/com/gemstone/gemfire/cache/query/internal/index/DummyQRegion.java @@ -0,0 +1,251 @@ +/* + * 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. + */ +/* + * DummyQRegion.java + * + * Created on March 15, 2005, 6:40 PM + */ + +package com.gemstone.gemfire.cache.query.internal.index; + +import java.util.ArrayList; +import java.util.Collection; +import java.util.Iterator; +import java.util.List; +import java.util.Set; + +import com.gemstone.gemfire.cache.Region; +import com.gemstone.gemfire.cache.query.SelectResults; +import com.gemstone.gemfire.cache.query.internal.QRegion; +import com.gemstone.gemfire.cache.query.internal.ResultsBag; +import com.gemstone.gemfire.cache.query.internal.ResultsSet; +import com.gemstone.gemfire.cache.query.internal.types.TypeUtils; +import com.gemstone.gemfire.cache.query.types.ObjectType; +import com.gemstone.gemfire.internal.cache.CachedDeserializable; +import com.gemstone.gemfire.internal.cache.GemFireCacheImpl; +import com.gemstone.gemfire.internal.cache.LocalRegion; +import com.gemstone.gemfire.internal.cache.RegionEntry; +import com.gemstone.gemfire.internal.cache.RegionEntryContext; +import com.gemstone.gemfire.internal.i18n.LocalizedStrings; +import com.gemstone.gemfire.internal.offheap.Chunk; +import com.gemstone.gemfire.internal.offheap.annotations.Released; +import com.gemstone.gemfire.internal.offheap.annotations.Retained; + +/** + * + */ +public class DummyQRegion extends QRegion { + + private RegionEntry entry = null; + private ObjectType valueType = TypeUtils.OBJECT_TYPE; + private ObjectType keyType = TypeUtils.OBJECT_TYPE; + + private ResultsBag values = null; + private ResultsSet keys = null; + private ResultsSet entries = null; + private List valueInList = null; + private Object[] valueInArray = null; + + public DummyQRegion(Region region) { + super(region, false); + Class constraint = region.getAttributes().getValueConstraint(); + if (constraint != null) + valueType = TypeUtils.getObjectType(constraint); + + constraint = region.getAttributes().getKeyConstraint(); + if (constraint != null) + keyType = TypeUtils.getObjectType(constraint); + values = new ResultsBag(((GemFireCacheImpl)region.getCache()).getCachePerfStats()); + values.setElementType(valueType); + keys = new ResultsSet(); + keys.setElementType(keyType); + entries = new ResultsSet(); + entries.setElementType(TypeUtils.getRegionEntryType(region)); // gets key and value types from region + } + + @Override + public boolean equals(Object o) { // for findbugs + return super.equals(o); + } + + @Override + public int hashCode() { // for findbugs + return super.hashCode(); + } + + public void setEntry(RegionEntry e){ + this.entry = e; + } + + public RegionEntry getEntry(){ + return this.entry; + } + + @Override + public SelectResults getKeys() { + if(keys == null){ + keys = new ResultsSet(); + keys.setElementType(keyType); + } + keys.clear(); + keys.add(entry.getKey()); + return keys; + } + + @Override + public Set keySet() { + return (ResultsSet)getKeys(); + } + + @Override + public Set keys() { + return keySet(); + } + + @Override + public Collection values() { + return getValues(); + } + + @Override + public Set asSet() { + return getValues().asSet(); + } + + @Override + public List asList() { + if(valueInList == null){ + valueInList = new ArrayList(1); + } + valueInList.clear(); + Object val = this.entry.getValueOffHeapOrDiskWithoutFaultIn((LocalRegion) getRegion()); + if (val instanceof Chunk) { + @Retained @Released Chunk ohval = (Chunk) val; + try { + // TODO OFFHEAP: val may be off-heap PdxInstance + val = ohval.getDeserializedValue(getRegion(), this.entry); + } finally { + ohval.release(); + } + } else if (val instanceof CachedDeserializable) { + val = ((CachedDeserializable)val).getDeserializedValue(getRegion(), this.entry); + } + valueInList.add(val); + return valueInList; + } + + @Override + public Object[] toArray() { + if(valueInArray == null){ + valueInArray = new Object[1]; + } + Object val = this.entry.getValueOffHeapOrDiskWithoutFaultIn((LocalRegion) getRegion()); + if (val instanceof Chunk) { + @Retained @Released Chunk ohval = (Chunk) val; + try { + // TODO OFFHEAP: val may be off-heap PdxInstance + val = ohval.getDeserializedValue(getRegion(), this.entry); + } finally { + ohval.release(); + } + } else if (val instanceof CachedDeserializable) { + val = ((CachedDeserializable)val).getDeserializedValue(getRegion(), this.entry); + } + valueInArray[0] = val; + return valueInArray; + } + + @Override + public SelectResults getValues() { + if(values == null){ + values = new ResultsBag(((GemFireCacheImpl)getRegion().getCache()).getCachePerfStats()); + values.setElementType(valueType); + } + values.clear(); + Object val = this.entry.getValueOffHeapOrDiskWithoutFaultIn((LocalRegion) getRegion()); + if (val instanceof Chunk) { + @Retained @Released Chunk ohval = (Chunk) val; + try { + // TODO OFFHEAP: val may be off-heap PdxInstance + val = ohval.getDeserializedValue(getRegion(), this.entry); + } finally { + ohval.release(); + } + } else if (val instanceof CachedDeserializable) { + val = ((CachedDeserializable)val).getDeserializedValue(getRegion(), this.entry); + } + values.add(val); + return values; + } + + @Override + public SelectResults getEntries() { + if(entries == null){ + entries = new ResultsSet(); + entries.setElementType(TypeUtils.getRegionEntryType(getRegion())); + } + entries.clear(); + // return collection of Region.Entry, not (dotless) RegionEntry + Region rgn = getRegion(); + // unwrap until we get the LocalRegion + while (!(rgn instanceof LocalRegion)) { + rgn = ((QRegion)TypeUtils.checkCast(rgn, QRegion.class)).getRegion(); + } + entries.add(((LocalRegion)rgn).new NonTXEntry(entry)); + return entries; + } + + @Override + public SelectResults entrySet() { + return getEntries(); + } + + @Override + public Set entries(boolean recursive) { + return (ResultsSet)getEntries(); + } + + @Override + public Region.Entry getEntry(Object key) { + LocalRegion.NonTXEntry e =(LocalRegion.NonTXEntry)super.getEntry(key); + Region.Entry retVal = null; + if(e != null && this.entry == e.getRegionEntry()) { + retVal = e; + } + return retVal; + } + + @Override + public Iterator iterator() { + return values().iterator(); + } + + @Override + public int size() { + return 1; + } + + @Override + public Object[] toArray(Object[] obj) { + throw new RuntimeException(LocalizedStrings.DummyQRegion_NOT_YET_IMPLEMENTED.toLocalizedString()); + } + + @Override + public String toString(){ + return "DQR "+super.toString(); + } +} diff --git a/gemfire-core/src/main/java/com/gemstone/gemfire/cache/query/internal/index/IndexManager.java b/gemfire-core/src/main/java/com/gemstone/gemfire/cache/query/internal/index/IndexManager.java new file mode 100644 index 000000000000..4673bb6e3a30 --- /dev/null +++ b/gemfire-core/src/main/java/com/gemstone/gemfire/cache/query/internal/index/IndexManager.java @@ -0,0 +1,1716 @@ +/* + * 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. + */ +/* + * IndexManager.java + * + * Created on February 15, 2005, 11:49 AM + */ +package com.gemstone.gemfire.cache.query.internal.index; + +import java.util.ArrayList; +import java.util.Arrays; +import java.util.Collection; +import java.util.HashMap; +import java.util.Iterator; +import java.util.List; +import java.util.Map; +import java.util.concurrent.ArrayBlockingQueue; +import java.util.concurrent.BlockingQueue; +import java.util.concurrent.Callable; +import java.util.concurrent.ConcurrentHashMap; +import java.util.concurrent.ConcurrentMap; +import java.util.concurrent.ExecutionException; +import java.util.concurrent.FutureTask; +import java.util.concurrent.atomic.AtomicLong; +import java.util.concurrent.LinkedBlockingQueue; + +import org.apache.logging.log4j.Logger; + +import com.gemstone.gemfire.SystemFailure; +import com.gemstone.gemfire.cache.Region; +import com.gemstone.gemfire.cache.query.AmbiguousNameException; +import com.gemstone.gemfire.cache.query.Index; +import com.gemstone.gemfire.cache.query.IndexExistsException; +import com.gemstone.gemfire.cache.query.IndexInvalidException; +import com.gemstone.gemfire.cache.query.IndexMaintenanceException; +import com.gemstone.gemfire.cache.query.IndexNameConflictException; +import com.gemstone.gemfire.cache.query.IndexStatistics; +import com.gemstone.gemfire.cache.query.IndexType; +import com.gemstone.gemfire.cache.query.MultiIndexCreationException; +import com.gemstone.gemfire.cache.query.NameResolutionException; +import com.gemstone.gemfire.cache.query.QueryException; +import com.gemstone.gemfire.cache.query.TypeMismatchException; +import com.gemstone.gemfire.cache.query.internal.CompiledPath; +import com.gemstone.gemfire.cache.query.internal.CompiledValue; +import com.gemstone.gemfire.cache.query.internal.DefaultQuery; +import com.gemstone.gemfire.cache.query.internal.ExecutionContext; +import com.gemstone.gemfire.cache.query.internal.MapIndexable; +import com.gemstone.gemfire.cache.query.internal.NullToken; +import com.gemstone.gemfire.cache.query.internal.QueryMonitor; +import com.gemstone.gemfire.cache.query.internal.QueryObserver; +import com.gemstone.gemfire.cache.query.internal.QueryObserverHolder; +import com.gemstone.gemfire.cache.query.internal.index.AbstractIndex.InternalIndexStatistics; +import com.gemstone.gemfire.cache.query.internal.parse.OQLLexerTokenTypes; +import com.gemstone.gemfire.internal.Assert; +import com.gemstone.gemfire.internal.cache.BucketRegion; +import com.gemstone.gemfire.internal.cache.CachePerfStats; +import com.gemstone.gemfire.internal.cache.GemFireCacheImpl; +import com.gemstone.gemfire.internal.cache.LocalRegion; +import com.gemstone.gemfire.internal.cache.PartitionedRegion; +import com.gemstone.gemfire.internal.cache.RegionEntry; +import com.gemstone.gemfire.internal.cache.TXManagerImpl; +import com.gemstone.gemfire.internal.cache.TXStateProxy; +import com.gemstone.gemfire.internal.i18n.LocalizedStrings; +import com.gemstone.gemfire.internal.logging.LogService; +import com.gemstone.gemfire.internal.logging.LoggingThreadGroup; + +/** + */ +public class IndexManager { + private static final Logger logger = LogService.getLogger(); + + public static final int ADD_ENTRY = 1; + public static final int UPDATE_ENTRY = 2; + public static final int REMOVE_ENTRY = 3; + //Asif : This action is to rerun Index creation after + //clear is called on the region + public static final int RECREATE_INDEX = 4; + protected final Region region; + + private final boolean isOverFlowToDisk; + private final boolean offHeap; + private final boolean indexMaintenanceSynchronous; + private int numCreators = 0; + private int numUpdatersInProgress = 0; + private int numUpdatersInWaiting = 0; + private int iternameCounter = 0; + /* + * Map containing or Index>. IndexTask + * represents an index thats completely created or one thats in create phase. + * This is done in order to avoid synchronization on the indexes. + */ + private final ConcurrentMap indexes = new ConcurrentHashMap(); + //TODO Asif : Fix the appropriate size of the Map & the concurrency level + private ConcurrentMap canonicalizedIteratorNameMap = new ConcurrentHashMap(); + private IndexUpdaterThread updater; + + // Threshold for Queue. + private final int INDEX_MAINTENANCE_BUFFER = Integer.getInteger("gemfire.AsynchIndexMaintenanceThreshold", -1).intValue(); + + public static boolean JOIN_OPTIMIZATION = !Boolean.getBoolean("gemfire.index.DisableJoinOptimization"); + + // Added for test purposes only. + public static boolean INPLACE_OBJECT_MODIFICATION_FOR_TEST = false; + + //Added for testing only + public static boolean IS_TEST_LDM = false; + + public static boolean IS_TEST_EXPANSION = false; + + + + /** + * System property to maintain the ReverseMap to take care in-place modification of the + * objects by the application. + * In case of in-place modification the EntryEvent will not have the old-value, without this + * the old-values are not removed from the index-maps thus resulting in inconsistent results. + */ + public static final boolean INPLACE_OBJECT_MODIFICATION = + Boolean.valueOf(System.getProperty("gemfire.index.INPLACE_OBJECT_MODIFICATION", "false")).booleanValue(); + + /** + * System property to turn-off the compact-index support. + */ + public static final boolean RANGEINDEX_ONLY = + Boolean.valueOf(System.getProperty("gemfire.index.RANGEINDEX_ONLY", "false")).booleanValue(); + + /** For test purpose only */ + public static boolean TEST_RANGEINDEX_ONLY = false; + public static final String INDEX_ELEMARRAY_THRESHOLD_PROP = "index_elemarray_threshold"; + public static final String INDEX_ELEMARRAY_SIZE_PROP = "index_elemarray_size"; + public static final int INDEX_ELEMARRAY_THRESHOLD = Integer.parseInt(System.getProperty(INDEX_ELEMARRAY_THRESHOLD_PROP,"100")); + public static final int INDEX_ELEMARRAY_SIZE = Integer.parseInt(System.getProperty(INDEX_ELEMARRAY_SIZE_PROP,"5")); + public final static AtomicLong SAFE_QUERY_TIME = new AtomicLong(0); + public static boolean ENABLE_UPDATE_IN_PROGRESS_INDEX_CALCULATION = true; + /** The NULL constant */ + public static final Object NULL = new NullToken(); + + public static TestHook testHook; + + //private int numCreatorsInWaiting = 0; + // @todo ericz + // there should be a read/write lock PER INDEX in order to maximize + // the concurrency of query execution. + public IndexManager(Region region) { + this.region = region; + // must be a SortedMap to ensure the indexes are iterated over in fixed + // order + // to avoid deadlocks when acquiring locks + //indexes = Collections.synchronizedSortedMap(new TreeMap()); + indexMaintenanceSynchronous = region.getAttributes() + .getIndexMaintenanceSynchronous(); + isOverFlowToDisk = region.getAttributes().getEvictionAttributes() + .getAction().isOverflowToDisk(); + this.offHeap = region.getAttributes().getOffHeap(); + if (!indexMaintenanceSynchronous) { + final LoggingThreadGroup group = + LoggingThreadGroup.createThreadGroup("QueryMonitor Thread Group", logger); + updater = new IndexUpdaterThread(group, this.INDEX_MAINTENANCE_BUFFER, + "OqlIndexUpdater:" + region.getFullPath()); + updater.start(); + } + } + + /** + * Stores the largest combination of current time + delta + * If there is a large delta/hiccup in timings, this allows us to calculate the + * correct results for a query but, reevaluate more aggressively. + * But the large hiccup will eventually be rolled off as time is always increasing + * This is a fix for #47475 + * + * @param operationTime the last modified time from version tag + * @param currentCacheTime + */ + public static boolean setIndexBufferTime(long operationTime, long currentCacheTime) { + long timeDifference = currentCacheTime - operationTime; + return setNewLargestValue(SAFE_QUERY_TIME, currentCacheTime + timeDifference); + } + + /** only for test purposes + * This should not be called from any product code. Calls from product code will + * possibly cause continous reevaluation (performance issue) OR + * incorrect query results (functional issue) + **/ + public static void resetIndexBufferTime() { + SAFE_QUERY_TIME.set(0); + } + + /** + * Calculates whether we need to reevluate the key for the region entry + * We added a way to determine whether to reevaluate an entry for query execution + * The method is to keep track of the delta and current time in a single long value + * The value is then used by the query to determine if a region entry needs to be reevaluated, + * based on subtracting the value with the query execution time. This provides a delta + some false positive time (dts) + * If the dts + last modified time of the region entry is > query start time, + * we can assume that it needs to be reevaluated + * + * This is to fix bug 47475, where references to region entries can be held + * by the executing query either directly or indirectly (iterators can hold + * references for next) but the values underneath could change. + * + * Small amounts of false positives are ok as it will have a slight impact on performance + * @param queryStartTime + * @param lastModifiedTime + */ + public static boolean needsRecalculation(long queryStartTime, long lastModifiedTime) { + return ENABLE_UPDATE_IN_PROGRESS_INDEX_CALCULATION && queryStartTime <= SAFE_QUERY_TIME.get() - queryStartTime + lastModifiedTime; + } + + /** + * + * @param value + * @param newValue + */ + private static boolean setNewLargestValue(AtomicLong value, long newValue) { + boolean done = false; + while (!done) { + long oldValue = value.get(); + if (oldValue < newValue ) { + return value.compareAndSet(oldValue, newValue); + } + else { + done = true; + } + } + return false; + } + + /** Test Hook */ + public interface TestHook { + public void hook(final int spot) throws RuntimeException; + } + + /** + * The Region this IndexManager is associated with + * + * @return the Region for this IndexManager + */ + public Region getRegion() { + return region; + } + + /** + * Used by tests to access the updater thread to determine its progress + */ + public IndexUpdaterThread getUpdaterThread() { + return this.updater; + } + + // @todo need more specific list of exceptions + /** + * Create an index that can be used when executing queries. + * + * @param indexName the name of this index, used for statistics collection + * @param indexType the type of index + * @param origIndexedExpression the expression to index on, a function + * dependent on region entries individually. + * @param origFromClause expression that evaluates to the collection(s) that + * will be queried over, must contain one and only one region path. + * @return the newly created Index + */ + public Index createIndex(String indexName, IndexType indexType, + String origIndexedExpression, String origFromClause, String imports, + ExecutionContext externalContext, PartitionedIndex prIndex, boolean loadEntries) + throws IndexNameConflictException, IndexExistsException, + IndexInvalidException { + + if (QueryMonitor.isLowMemory()) { + throw new IndexInvalidException(LocalizedStrings.IndexCreationMsg_CANCELED_DUE_TO_LOW_MEMORY.toLocalizedString()); + } + + boolean oldReadSerialized = DefaultQuery.getPdxReadSerialized(); + DefaultQuery.setPdxReadSerialized(this.region.getCache(), true); + + TXStateProxy tx = null; + if (!((GemFireCacheImpl)this.region.getCache()).isClient()) { + tx = ((TXManagerImpl) this.region.getCache().getCacheTransactionManager()).internalSuspend(); + } + + try { + String projectionAttributes = "*"; // for now this is the only option + + if (getIndex(indexName) != null) { + throw new IndexNameConflictException(LocalizedStrings. + IndexManager_INDEX_NAMED_0_ALREADY_EXISTS.toLocalizedString(indexName)); + } + + IndexCreationHelper helper = null; + boolean isCompactOrHash = false; + if (indexType != IndexType.PRIMARY_KEY) { + helper = new FunctionalIndexCreationHelper(origFromClause, + origIndexedExpression, projectionAttributes, imports, region.getCache(), + externalContext, this); + //Asif: For now support Map index as non compact .expand later + //The limitation for compact range index also apply to hash index for now + isCompactOrHash = shouldCreateCompactIndex((FunctionalIndexCreationHelper)helper); + } else if (indexType == IndexType.PRIMARY_KEY) { + helper = new PrimaryKeyIndexCreationHelper(origFromClause, + origIndexedExpression, projectionAttributes, region.getCache(), + externalContext, this); + } else { + throw new AssertionError("Don't know how to set helper for " + indexType); + } + if (!isCompactOrHash && indexType != IndexType.PRIMARY_KEY) { + + if (indexType == IndexType.HASH ) { + if (!isIndexMaintenanceTypeSynchronous()) { + throw new UnsupportedOperationException(LocalizedStrings.DefaultQueryService_HASH_INDEX_CREATION_IS_NOT_SUPPORTED_FOR_ASYNC_MAINTENANCE.toLocalizedString()); + } + throw new UnsupportedOperationException(LocalizedStrings.DefaultQueryService_HASH_INDEX_CREATION_IS_NOT_SUPPORTED_FOR_MULTIPLE_ITERATORS.toLocalizedString()); + } + // Overflow is not supported with range index. + if(isOverFlowRegion()) { + throw new UnsupportedOperationException(LocalizedStrings.DefaultQueryService_INDEX_CREATION_IS_NOT_SUPPORTED_FOR_REGIONS_WHICH_OVERFLOW_TO_DISK_THE_REGION_INVOLVED_IS_0.toLocalizedString(region.getFullPath())); + } + // OffHeap is not supported with range index. + if(isOffHeap()) { + if (!isIndexMaintenanceTypeSynchronous()) { + throw new UnsupportedOperationException(LocalizedStrings.DefaultQueryService_OFF_HEAP_INDEX_CREATION_IS_NOT_SUPPORTED_FOR_ASYNC_MAINTENANCE_THE_REGION_IS_0.toLocalizedString(region.getFullPath())); + } + throw new UnsupportedOperationException(LocalizedStrings.DefaultQueryService_OFF_HEAP_INDEX_CREATION_IS_NOT_SUPPORTED_FOR_MULTIPLE_ITERATORS_THE_REGION_IS_0.toLocalizedString(region.getFullPath())); + } + } + + if (logger.isDebugEnabled()) { + logger.debug("Started creating index with indexName: {} On region: {}", indexName, region.getFullPath()); + } + + if (IndexManager.testHook != null) { + if (logger.isDebugEnabled()) { + logger.debug("IndexManager TestHook is set."); + } + + if (((LocalRegion)this.region).isInitialized()) { + testHook.hook(1); + } else { + testHook.hook(0); + } + } + + IndexTask indexTask = new IndexTask(indexName, indexType, origFromClause, + origIndexedExpression, helper, isCompactOrHash, prIndex, loadEntries); + FutureTask indexFutureTask = new FutureTask(indexTask); + Object oldIndex = this.indexes.putIfAbsent(indexTask, indexFutureTask); + + Index index = null; + + boolean interrupted = false; + try { + if (oldIndex == null){ + // Initialize index. + indexFutureTask.run(); + // Set the index. + index = (Index)indexFutureTask.get(); + } else { + // Index with same name or characteristic already exists. + // Check if index creation is complete. + if (!(oldIndex instanceof Index)){ + // Some other thread is creating the same index. + // Wait for index to be initialized from other thread. + ((FutureTask)oldIndex).get(); + } + + // The Index is successfully created, throw appropriate error message + // from this thread. + if (getIndex(indexName) != null) { + throw new IndexNameConflictException(LocalizedStrings. + IndexManager_INDEX_NAMED_0_ALREADY_EXISTS.toLocalizedString(indexName)); + } else { + throw new IndexExistsException(LocalizedStrings. + IndexManager_SIMILAR_INDEX_EXISTS.toLocalizedString()); + } + } + } catch (InterruptedException ie){ + interrupted = true; + } catch (ExecutionException ee){ + Throwable c = ee.getCause(); + if (c instanceof IndexNameConflictException) { + throw (IndexNameConflictException)c; + } else if (c instanceof IndexExistsException){ + throw (IndexExistsException)c; + } else if (c instanceof IMQException) { + throw new IndexInvalidException(c.getMessage()); + } + throw new IndexInvalidException(ee); + + } finally { + // If the index is not successfully created, remove IndexTask from + // the map. + if (oldIndex == null && index == null){ + Object ind = this.indexes.get(indexTask); + if (ind != null && !(ind instanceof Index)){ + this.indexes.remove(indexTask); + } + } + if (interrupted){ + Thread.currentThread().interrupt(); + } + } + assert (index != null); + if (logger.isDebugEnabled()) { + logger.debug("Completed creating index with indexName: {} On region: {}", indexName, region.getFullPath()); + } + return index; + + } finally { + DefaultQuery.setPdxReadSerialized(this.region.getCache(), oldReadSerialized); + + if (tx != null) { + ((TXManagerImpl) this.region.getCache().getCacheTransactionManager()) + .resume(tx); + } + } + } + + /** + * Return true if we should create CompactRangeIndex + * Required conditions: indexedExpression is a path expression, + * fromClause has only one iterator and it is directly on the + * region values. + * Currently we have to use the "fat" implementation when asynchronous + * index updates are on. + */ + private boolean shouldCreateCompactIndex(FunctionalIndexCreationHelper helper) { + if (RANGEINDEX_ONLY || TEST_RANGEINDEX_ONLY){ + return false; + } + + // compact range index is not supported on asynchronous index maintenance. + // since compact range index maintains reference to region entry, in case of + // asynchronous updates the window between cache operation updating the + // index increases causing query thread to return new value before doing + // index evaluation (resulting in wrong value. There is still a small window + // which can be addressed by the sys property: + // gemfire.index.acquireCompactIndexLocksWithRegionEntryLocks + if (!getRegion().getAttributes().getIndexMaintenanceSynchronous()) { + return false; + } + + // indexedExpression requirement + CompiledValue cv = helper.getCompiledIndexedExpression(); + int nodeType; + do { + nodeType = cv.getType(); + if (nodeType == CompiledValue.PATH) { + cv = ((CompiledPath)cv).getReceiver(); + } + } while (nodeType == CompiledValue.PATH); + // end of path, nodeType at this point should be an Identifier + if (nodeType != OQLLexerTokenTypes.Identifier && nodeType != OQLLexerTokenTypes.METHOD_INV) { + if (nodeType == OQLLexerTokenTypes.TOK_LBRACK && !helper.isMapTypeIndex() && helper.modifiedIndexExpr instanceof MapIndexable) { + if (((MapIndexable)helper.modifiedIndexExpr).getIndexingKeys().size() == 1) { + + } + else { + return false; + } + } + else { + return false; + } + } + + // fromClause requirement + List iterators = helper.getIterators(); + if (iterators.size() != 1) { + return false; + } + // "missing link" must be "value". Later to support key, entry, etc. + CompiledValue missingLink = helper.missingLink; + if (helper.isFirstIteratorRegionEntry) { + return true; + } else if (!(missingLink instanceof CompiledPath)) { + return false; + + } + String tailId = ((CompiledPath)missingLink).getTailID(); + if (!(tailId.equals("value") || tailId.equals("key"))) { + return false; + } + return true; + } + + public Index getIndex(String indexName) { + IndexTask indexTask = new IndexTask(indexName); + Object ind = this.indexes.get(indexTask); + // Check if the returned value is instance of Index (this means + // the index is not in create phase, its created successfully). + if (ind instanceof Index){ + return (Index)ind; + } + return null; + } + + public void addIndex(String indexName, Index index) { + IndexTask indexTask = new IndexTask(indexName); + this.indexes.put(indexTask, index); + } + + /** + * Get the Index with the specified indexType, fromClause, indexedExpression + * TODO: Asif :Check if synchronization is needed while obtaining Array of + * Indexes as similar to what we have used during index updates. This function + * will get the exact index , if available, else will return null + * + * @param indexType the type of index + * @param definitions the String array containing the required defintions of the + * fromClause of the index + * @param indexedExpression the indexedExpression for the index + * @param context ExecutionContext + * @return the sole index of the region with these parameters, or null if + * there isn't one + * @throws NameResolutionException + * @throws TypeMismatchException + * @throws AmbiguousNameException + */ + public IndexData getIndex(IndexType indexType, String[] definitions, + CompiledValue indexedExpression, ExecutionContext context) + throws AmbiguousNameException, TypeMismatchException, NameResolutionException { + IndexData indxData = null; + int qItrSize = definitions.length; + Iterator it = this.indexes.values().iterator(); + StringBuffer sb = new StringBuffer(); + indexedExpression.generateCanonicalizedExpression(sb, context); + String indexExprStr = sb.toString(); + while (it.hasNext()) { + int mapping[] = new int[qItrSize]; + Object ind = it.next(); + // Check if the returned value is instance of Index (this means + // the index is not in create phase, its created successfully). + if (!(ind instanceof Index)){ + continue; + } + Index index = (Index)ind; + if( !((IndexProtocol)ind).isMatchingWithIndexExpression(indexedExpression, + indexExprStr, context) || index.getType() != indexType) { + continue; + } + + int matchLevel = getMatchLevel(definitions, + ((IndexProtocol)index).getCanonicalizedIteratorDefinitions(), mapping); + + if (matchLevel == 0){ + indxData = new IndexData((IndexProtocol) index, 0/*Exact Match*/, mapping); + break; + } + + } + return indxData; + } + + public int compareIndexData(IndexType indexType, String[] indexDefinitions, + String indexExpression, IndexType otherType, String[] otherDefinitions, + String otherExpression, int mapping[]) { + + int matchLevel = -2; + + if (indexExpression.equals(otherExpression) && indexType == otherType) { + /* Asif : A match level of zero means exact match. */ + matchLevel = getMatchLevel(otherDefinitions, indexDefinitions, mapping); + } + return matchLevel; + } + + /** + * Asif : Returns the best available Index based on the available iterators in + * the Group + * + * TODO: Asif :Check if synchronization is needed while obtaining Array of + * Indexes as similar to what we have used during index updates + * + * @param indexType Primary or Range Index + * @param definitions String array containing the canonicalized definitions of + * the Iterators of the Group + * @param indexedExpression Index Expression path(CompiledValue) on which + * index needs to be created + * @param context ExecutionContext object + * @return IndexData object + * @throws NameResolutionException + * @throws TypeMismatchException + * @throws AmbiguousNameException + */ + public IndexData getBestMatchIndex(IndexType indexType, String[] definitions, + CompiledValue indexedExpression, ExecutionContext context) + throws AmbiguousNameException, TypeMismatchException, NameResolutionException { + + Index bestIndex = null; + Index bestPRIndex = null; + int[] bestMapping = null; + + int qItrSize = definitions.length; + int bestIndexMatchLevel = qItrSize; + Iterator iter = this.indexes.values().iterator(); + StringBuffer sb = new StringBuffer(); + indexedExpression.generateCanonicalizedExpression(sb, context); + String indexExprStr = sb.toString(); + PartitionedIndex prIndex = null; + Index prevBestPRIndex = null; + Index prevBestIndex = null; + + Index index; + while (iter.hasNext()) { + Object ind = iter.next(); + // Check if the value is instance of FutureTask, this means + // the index is in create phase. + if (ind instanceof FutureTask){ + continue; + } + + //If the index is still empty + if(!((AbstractIndex)ind).isPopulated()) { + continue; + } + + index = (Index)ind; + + if (index instanceof PartitionedIndex) { + prIndex = (PartitionedIndex)index; + // Get one of the bucket index. This index will be + // available on all the buckets. + index = prIndex.getBucketIndex(); + if (index == null) { + continue; + } + } + + //System.out.println(" Index = "+index); + //Use simple strategy just pick first compatible index + if ( ((IndexProtocol)index).isMatchingWithIndexExpression(indexedExpression,indexExprStr, + context) && index.getType() == indexType ){ + + // For PR the matched index needs to be available on all the query buckets. + if (prIndex != null) { + try { + + // Protect the PartitionedIndex from being removed when it is being used. + if (!prIndex.acquireIndexReadLockForRemove()) { + continue; + } + + prIndex.verifyAndCreateMissingIndex(context.getBucketList()); + } catch (Exception ex) { + // Index is not there on all buckets. + // ignore this index. + prIndex.releaseIndexReadLockForRemove(); + prIndex = null; + continue; + } + } else { + // For index on replicated regions + if (!((AbstractIndex)index).acquireIndexReadLockForRemove()) { + continue; + } + } + + /* + * Asif : A match level of zero means exact match. A match level greater + * than 0 means the query from clauses have extra iterators as compared + * to Index resultset ( This does not neccessarily mean that Index + * resultset is not having extra fields. It is just that the criteria + * for match level is the absence or presence of extra iterators. The + * order of preference will be 0 , <0 , > 0 for first cut. + */ + String indexDefinitions[] = ((IndexProtocol) index).getCanonicalizedIteratorDefinitions(); + + int mapping[] = new int[qItrSize]; + int matchLevel = getMatchLevel(definitions, indexDefinitions, mapping); + + if (matchLevel == 0) { + prevBestPRIndex = bestPRIndex; + bestPRIndex = prIndex; + prevBestIndex = bestIndex; + bestIndex = index; + bestIndexMatchLevel = matchLevel; + bestMapping = mapping; + + // If we chose new index we should release lock on previous index + // chosen as bestIndex. + if (prIndex != null && prevBestPRIndex != null && prevBestPRIndex instanceof PartitionedIndex) { + ((PartitionedIndex) prevBestPRIndex).releaseIndexReadLockForRemove(); + prevBestPRIndex = null; + } else if (prevBestIndex != null) { + ((AbstractIndex) prevBestIndex).releaseIndexReadLockForRemove(); + prevBestIndex = null; + } + break; + } else if ((bestIndexMatchLevel > 0 && matchLevel < bestIndexMatchLevel) + || (bestIndexMatchLevel < 0 && matchLevel < 0 && matchLevel > bestIndexMatchLevel)) { + prevBestPRIndex = bestPRIndex; + bestPRIndex = prIndex; + prevBestIndex = bestIndex; + bestIndex = index; + bestIndexMatchLevel = matchLevel; + bestMapping = mapping; + } + + // release the lock if this index is not chosen as bestIndex. + if (prIndex != null && bestPRIndex != prIndex) { + prIndex.releaseIndexReadLockForRemove(); + prIndex = null; + } else if(bestIndex != index) { + ((AbstractIndex)index).releaseIndexReadLockForRemove(); + index = null; + } + + // If we chose new index we should release lock on previous index + // chosen as bestIndex. + if (prevBestPRIndex != null && prevBestPRIndex instanceof PartitionedIndex) { + ((PartitionedIndex) prevBestPRIndex).releaseIndexReadLockForRemove(); + prevBestPRIndex = null; + } else if (prevBestIndex != null) { + ((AbstractIndex) prevBestIndex).releaseIndexReadLockForRemove(); + prevBestIndex = null; + } + } + } + if (bestIndex != null) { + if (logger.isDebugEnabled()) { + logger.debug("The best index found for index expression: {} is: {} with Match-level: {} and mapping: {}", indexExprStr, bestIndex, bestIndexMatchLevel, Arrays.toString(bestMapping)); + } + } + return bestIndex != null ? new IndexData((IndexProtocol) bestIndex, + bestIndexMatchLevel, bestMapping) : null; + } + + /* + * Asif : This function returns the best match index. The crietria used to + * identify best match index is based currently , relative to the query from + * clause. If the iterators of query from clause exactly match the index from + * clause , then match level is zero & is the best match. If the query from + * clause contain extra iterators , not available in index from clause, then + * mach level is > 0 & is not the best. If the match level is < 0 that means + * Index from clause have some extra iterators as compared to query. The int + * array gives the mapping of query iterator's position relative to the index + * resultset fields . The position is '1' based index. That is for the first + * query iterator ( 0 position), the mapping will contain 1 which can be + * thought of as Index ResultSet value at the field with name index_iter1. If + * the second query iterator has a value 3 , that means for (1 position) + * iterator , the field will have name index_iter3 + */ + private static int getMatchLevel(String[] queryDefintions, + String[] indexDefinitions, int[] mapping) { + int qItrLen = queryDefintions.length; + int indxItrLen = indexDefinitions.length; + // Asif : We know that because index expressions have matched that + // itself indicates that the first iterator, which is regon iterator + // has matched. So the index field position of the first RuntimeIterator + // of the Query group is 1 + mapping[0] = 1; + int matchLevel = qItrLen - 1; + for (int i = 1; i < qItrLen; ++i) { + for (int j = 1; j < indxItrLen; ++j) { + if (queryDefintions[i].equals(indexDefinitions[j])) { + mapping[i] = ++j; + --matchLevel; + break; + } + } + } + if (matchLevel == 0 && indxItrLen > qItrLen) { + matchLevel = qItrLen - indxItrLen; + } + return matchLevel; + } + + /* + * private static int getMatchLevel(String fromClause, String iFromClause) { + * if (fromClause.equals(iFromClause)) return 0; if + * (fromClause.startsWith(iFromClause)) { int cnt = -1; int index = + * fromClause.indexOf(',', iFromClause.length() + 1); while (index > 0) { + * cnt--; index = fromClause.indexOf(',', index + 1); } return cnt; } else if + * (iFromClause.startsWith(fromClause)) { int cnt = 1; int index = + * iFromClause.indexOf(',', fromClause.length() + 1); while (index > 0) { + * cnt++; index = iFromClause.indexOf(',', index + 1); } return cnt; } //No + * compatible return Integer.MAX_VALUE; } + */ + /** + * Get a collection of all the indexes. If the IndexType is specified + * returns only the matching indexes. + * @param indexType the type of indexes to get. Currently must be + * Indexable.FUNCTIONAL_SORTED + * @return the collection of indexes for the specified region and type + */ + public Collection getIndexes(IndexType indexType) { + ArrayList list = new ArrayList(); + Iterator it = this.indexes.values().iterator(); + while (it.hasNext()) { + Object ind = it.next(); + // Check if the value is instance of FutureTask, this means + // the index is in create phase. + if (ind instanceof FutureTask){ + continue; + } + Index index = (Index)ind; + + // Check if indexType needs to be matched. + if (indexType == null) { // No type check. + list.add(index); + } else if(index.getType() == indexType) { + list.add(index); + } + } + return list; + } + + /** + * Get a collection of all the indexes managed by IndexManager + * + * @return the collection of indexes on the specified region + */ + public Collection getIndexes() { + return getIndexes(null); + } + + // @todo need more specific list of exceptions + /** + * Remove the specified index. + * + * @param index the Index to remove + */ + public void removeIndex(Index index) { + if (index.getRegion() != this.region) + { + throw new IllegalArgumentException(LocalizedStrings. + IndexManager_INDEX_DOES_NOT_BELONG_TO_THIS_INDEXMANAGER.toLocalizedString()); + } + //Asif: We will just remove the Index from the map. Since the + // TreeMap is synchronized & the operation of adding a newly created + // index is in synch there will not be any situation where the unintended + // Index gets removed( in case of same Index Name scenario). + // If query obtains the Index handle which is getting removed , that + // is OK as we are not clearing data maps . The destroy though marks + // the index invalid , that is OK. Because of this flag a query + // may or may not use the Index + IndexTask indexTask = new IndexTask(index.getName()); + if (this.indexes.remove(indexTask) != null) { + AbstractIndex indexHandle = (AbstractIndex) index; + indexHandle.destroy(); + } + } + + // @todo need more specific list of exceptions + /** + * Remove all the indexes managed by IndexManager + */ + public int removeIndexes() { + // Remove indexes which are available (create completed). + int numIndexes = 0; + Iterator it = this.indexes.entrySet().iterator(); + while (it.hasNext()) { + Map.Entry entry = (Map.Entry)it.next(); + Object ind = entry.getValue(); + // Check if the returned value is instance of Index (this means + // the index is not in create phase, its created successfully). + if (!(ind instanceof Index)){ + continue; + } + numIndexes++; + IndexTask indexTask = (IndexTask)entry.getKey(); + this.indexes.remove(indexTask); + } + return numIndexes; + } + + + /** + * Asif : This function is invoked during clear operation on Region. It causes + * re execution of Index Initialization query on the region & before doing + * this it makes theexisting data maps null. This is needed so that index does + * not miss any entry being put in the region when the Region.clear is in + * progress + * + * @throws QueryException + */ + public void rerunIndexCreationQuery() throws QueryException { + try { + QueryObserver observer = QueryObserverHolder.getInstance(); + observer.beforeRerunningIndexCreationQuery(); + } + catch (Exception e) { + //Asif Ignore any exception as this should not hamper normal code flow + if (logger.isDebugEnabled()) { + logger.debug("IndexMananger::rerunIndexCreationQuery: Exception in callback beforeRerunningIndexcreationQuery", e); + } + } + if (isIndexMaintenanceTypeSynchronous()) { + recreateAllIndexesForRegion(); + } + else { + //System.out.println("Aynchronous update"); + updater.addTask(RECREATE_INDEX, null, IndexProtocol.OTHER_OP); + } + } + + /** + * populates all the indexes in the region + */ + public void populateIndexes(Collection indexSet) throws MultiIndexCreationException { + waitBeforeUpdate(); + if(region.getCache().getLogger().infoEnabled()) { + region.getCache().getLogger().info("Populating indexes for region " + region.getName()); + } + boolean throwException = false; + HashMap exceptionsMap = new HashMap(); + try { + Iterator entryIter = ((LocalRegion) region).getBestIterator(true); + while (entryIter.hasNext()) { + RegionEntry entry = (RegionEntry) entryIter.next(); + if (entry == null || entry.isInvalidOrRemoved()) { + continue; + } + // Fault in the value once before index update so that every index + // update does not have + // to read the value from disk every time. + // TODO OFFHEAP: this optimization (calling getValue to make sure it is faulted in to disk) has a performance problem. + // It also decompresses and deserializes the value and then throws that away. In the case of a heap region the deserialized + // value would be cached in a VMCachedDeserializable. But for compression and/or off-heap the decompression and/or deserialization + // this call does is lost and has to be done again. We could just add a method to RegionEntry that faults the value in without returning it. + // Even better (but more work): could we create a wrapper around RegionEntry that we create here to wrap "entry" and pass the wrapper to addIndexMapping? + // Any indexes that store a reference to the RegionEntry would need to ask the wrapper for the real one but any of them + // that want the value could get it from the wrapper. The first time the wrapper is asked for the value it could get it from + // the real RegionEntry it wraps and cache a reference to that value. I think that gives us the best of both worlds. + entry.getValue((LocalRegion)this.region); + Iterator indexSetIterator = indexSet.iterator(); + while(indexSetIterator.hasNext()) { + AbstractIndex index = (AbstractIndex) indexSetIterator.next(); + if (!index.isPopulated() && index.getType() != IndexType.PRIMARY_KEY) { + if (logger.isDebugEnabled()) { + logger.debug("Adding to index :{}{} value :{}", index.getName(), this.region.getFullPath(), entry.getKey()); + } + long start = ((AbstractIndex) index).updateIndexUpdateStats(); + try { + index.addIndexMapping(entry); + } catch (IMQException e) { + if(logger.isDebugEnabled()) { + logger.debug("Adding to index failed for: {}, {}", index.getName(), e.getMessage(), e); + } + exceptionsMap.put(index.indexName, e); + indexSetIterator.remove(); + throwException = true; + } + ((AbstractIndex) index).updateIndexUpdateStats(start); + } + } + } + setPopulateFlagForIndexes(indexSet); + if (throwException) { + throw new MultiIndexCreationException(exceptionsMap); + } + } finally { + notifyAfterUpdate(); + } + } + + /** + * Sets the {@link AbstractIndex#isPopulated} after + * populating all the indexes in this region + */ + public void setPopulateFlagForIndexes(Collection indexSet) { + for (Object ind : indexSet) { + AbstractIndex index = (AbstractIndex) ind; + if (!index.isPopulated() && index.getType() != IndexType.PRIMARY_KEY) { + index.setPopulated(true); + } + } + } + + public void updateIndexes(RegionEntry entry, int action, int opCode) throws QueryException { + updateIndexes(entry, action, opCode, false); + } + + // @todo need more specific list of exceptions + /** + * Callback for IndexManager to update indexes Called from AbstractRegionMap. + * + * @param entry the RegionEntry being updated + * @param action action to be taken (IndexManager.ADD_ENTRY, + * IndexManager.UPDATE_ENTRY, IndexManager.REMOVE_ENTRY) + * @param opCode one of IndexProtocol.OTHER_OP, BEFORE_UPDATE_OP, AFTER_UPDATE_OP. + * @throws com.gemstone.gemfire.cache.query.IndexMaintenanceException + */ + public void updateIndexes(RegionEntry entry, int action, int opCode, boolean isDiskRecoveryInProgress) + throws QueryException { + if(isDiskRecoveryInProgress) { + assert !((LocalRegion)this.region).isInitialized(); + } else { + assert Assert.assertHoldsLock(entry,true); + } + if(logger.isDebugEnabled()) { + logger.debug("IndexManager.updateIndexes {} + action: {}", entry.getKey(), action); + } + if (entry == null) return; + if (isIndexMaintenanceTypeSynchronous()) { + //System.out.println("Synchronous update"); + processAction(entry, action, opCode); + } + else { + //System.out.println("Aynchronous update"); + updater.addTask(action, entry, opCode); + } + } + + /** + * @param opCode one of IndexProtocol.OTHER_OP, BEFORE_UPDATE_OP, AFTER_UPDATE_OP. + */ + private void processAction(RegionEntry entry, int action, int opCode) + throws QueryException { + final long startPA = getCachePerfStats().startIndexUpdate(); + DefaultQuery.setPdxReadSerialized(this.region.getCache(), true); + TXStateProxy tx = null; + if (!((GemFireCacheImpl)this.region.getCache()).isClient()) { + tx = ((TXManagerImpl) this.region.getCache().getCacheTransactionManager()).internalSuspend(); + } + + try { + //Asif: Allow the thread to update iff there is no current index + //creator thread in progress. There will not be any issue if + // allow the updater thread to proceed if there is any index + //creator thread in waiting , but that can cause starvation + //for index creator thread. So we will give priorityto index + //creation thread + if (IndexManager.testHook != null) { + if (logger.isDebugEnabled()) { + logger.debug("IndexManager TestHook is set."); + } + testHook.hook(6); //ConcurrentIndexInitOnOverflowRegionDUnitTest + } + + long start = 0; + boolean indexLockAcquired = false; + switch (action) { + case ADD_ENTRY: { + if (IndexManager.testHook != null) { + if (logger.isDebugEnabled()) { + logger.debug("IndexManager TestHook in ADD_ENTRY."); + } + testHook.hook(5); + } + // this action is only called after update + assert opCode == IndexProtocol.OTHER_OP; + + //Asif The behaviour can arise if an index creation has already + // acted upon a newly added entry , but by the time callback + // occurs , the index is added to the map & thus + // the add operation will now have an effect of update. + // so we need to remove the mapping even if it is an Add action + // as otherwise the new results will get added into the + // old results instead of replacement + Iterator iter = this.indexes.values().iterator(); + while (iter.hasNext()) { + Object ind = iter.next(); + // Check if the value is instance of FutureTask, this means + // the index is in create phase. + if (ind instanceof FutureTask){ + continue; + } + IndexProtocol index = (IndexProtocol)ind; + + if (((AbstractIndex) index).isPopulated() && index.getType() != IndexType.PRIMARY_KEY) { + // Asif : If the current Index contains an entry inspite + // of add operation , this can only mean that Index + // has already acted on it during creation, so do not + // apply IMQ on it + if (!index.containsEntry(entry)) { + if (logger.isDebugEnabled()) { + logger.debug("Adding to index: {}{} value: {}", index.getName(), this.region.getFullPath(), entry.getKey()); + } + start = ((AbstractIndex) index).updateIndexUpdateStats(); + + index.addIndexMapping(entry); + + ((AbstractIndex) index).updateIndexUpdateStats(start); + } + } + } + break; + } + case UPDATE_ENTRY: { + + if (IndexManager.testHook != null) { + if (logger.isDebugEnabled()) { + logger.debug("IndexManager TestHook in UPDATE_ENTRY."); + } + testHook.hook(5); + testHook.hook(9); //QueryDataInconsistencyDUnitTest + } + + // this action is only called with opCode AFTER_UPDATE_OP + assert opCode == IndexProtocol.AFTER_UPDATE_OP; + Iterator iter = this.indexes.values().iterator(); + while (iter.hasNext()) { + Object ind = iter.next(); + // Check if the value is instance of FutureTask, this means + // the index is in create phase. + if (ind instanceof FutureTask){ + continue; + } + IndexProtocol index = (IndexProtocol)ind; + + if (((AbstractIndex) index).isPopulated() && index.getType() != IndexType.PRIMARY_KEY) { + if (logger.isDebugEnabled()) { + logger.debug("Updating index: {}{} value: ", index.getName(), this.region.getFullPath(), entry.getKey()); + } + start = ((AbstractIndex) index).updateIndexUpdateStats(); + + index.addIndexMapping(entry); + + ((AbstractIndex) index).updateIndexUpdateStats(start); + } + } + break; + } + case REMOVE_ENTRY: { + + if (IndexManager.testHook != null) { + if (logger.isDebugEnabled()) { + logger.debug("IndexManager TestHook in REMOVE_ENTRY."); + } + testHook.hook(5); + testHook.hook(10); + } + Iterator iter = this.indexes.values().iterator(); + while (iter.hasNext()) { + Object ind = iter.next(); + // Check if the value is instance of FutureTask, this means + // the index is in create phase. + if (ind instanceof FutureTask) { + continue; + } + IndexProtocol index = (IndexProtocol) ind; + + if (((AbstractIndex) index).isPopulated() && index.getType() != IndexType.PRIMARY_KEY) { + AbstractIndex abstractIndex = (AbstractIndex) index; + if (logger.isDebugEnabled()) { + logger.debug("Removing from index: {}{} value: {}", index.getName(), this.region.getFullPath(), entry.getKey()); + } + start = ((AbstractIndex) index).updateIndexUpdateStats(); + + index.removeIndexMapping(entry, opCode); + + ((AbstractIndex) index).updateIndexUpdateStats(start); + } + } + break; + } + default: { + throw new IndexMaintenanceException(LocalizedStrings.IndexManager_INVALID_ACTION.toLocalizedString()); + } + } + } + finally { + DefaultQuery.setPdxReadSerialized(this.region.getCache(), false); + if (tx != null) { + ((TXManagerImpl) this.region.getCache().getCacheTransactionManager()) + .resume(tx); + } + getCachePerfStats().endIndexUpdate(startPA); + } + } + + private void waitBeforeUpdate() { + synchronized (indexes) { + ++numCreators; + // Asif : If there exists any updater thread in progress + // we should not allow index creation to proceed. + while (numUpdatersInProgress > 0) { + ((LocalRegion) getRegion()).getCancelCriterion() + .checkCancelInProgress(null); + boolean interrupted = Thread.interrupted(); + try { + indexes.wait(); + } catch (InterruptedException ie) { + interrupted = true; + } finally { + if (interrupted) { + Thread.currentThread().interrupt(); + } + } + } // while + } + } + + private void notifyAfterUpdate() { + synchronized (indexes) { + --numCreators; + // ASIF: If the creator is in progress , this itself + // means that there is no Update active. The updater threads + // are either in wait state or there are no threads at all. + // Since we do not want any update to progress , if there is + // any creator thread in lock seeking mode ( meaning that it has + // entered the previous synch block) . We will not issue + // any notify till the creator count drops to zero & + // also unless there is any updater thread in waiting + if (numCreators == 0 && numUpdatersInWaiting > 0) { + indexes.notifyAll(); + } + } + } + + /** + * Recreates all indexes for this region. This operation blocks all updates + * on all indexes while recreate is in progress. This is required as recreate + * does NOT lock region entries before index update and hence might cause + * inconsistencies in index if concurrent region entry operations are + * going on. + * + */ + private void recreateAllIndexesForRegion() { + + long start = 0; + waitBeforeUpdate(); + try { + // opCode is ignored for this operation + Iterator iter = this.indexes.values().iterator(); + while (iter.hasNext()) { + Object ind = iter.next(); + // Check if the value is instance of FutureTask, this means + // the index is in create phase. + if (ind instanceof FutureTask) { + continue; + } + IndexProtocol index = (IndexProtocol) ind; + if (index.getType() == IndexType.FUNCTIONAL || index.getType() == IndexType.HASH) { + AbstractIndex aIndex = ((AbstractIndex) index); + start = ((AbstractIndex) index).updateIndexUpdateStats(); + ((AbstractIndex) index).recreateIndexData(); + ((AbstractIndex) index).updateIndexUpdateStats(start); + + } + } + } catch (Exception e) { + throw new IndexInvalidException(e); + } finally { + notifyAfterUpdate(); + } + } + + /** + * Wait for index initialization before entry create, update, invalidate or destroy + * operation. + * + * Note: If the region has a disk region then we should wait for index + * initialization before getting region entry lock to avoid deadlock (#44431). + */ + public void waitForIndexInit() { + synchronized (this.indexes) { + ++this.numUpdatersInWaiting; + while (this.numCreators > 0) { + ((LocalRegion)this.getRegion()).getCancelCriterion().checkCancelInProgress(null); + boolean interrupted = Thread.interrupted(); + try { + this.indexes.wait(); + } + catch (InterruptedException ie) { + interrupted = true; + } + finally { + if (interrupted) { + Thread.currentThread().interrupt(); + } + } + } // while + --this.numUpdatersInWaiting; + ++this.numUpdatersInProgress; + } + } + + /** + * Necessary finally block call for above method. + */ + public void countDownIndexUpdaters() { + synchronized (this.indexes) { + --this.numUpdatersInProgress; + //Asif: Since Index creator threads can progress only if + // there is no update threads in progress, thus we need to issue + // notify all iff there are any creator threads in action & also + // if the upDateInProgress Count has dipped to 0 + if (this.numUpdatersInProgress == 0 && this.numCreators > 0) { + this.indexes.notifyAll(); + } + } + } + + private CachePerfStats getCachePerfStats() { + return ((LocalRegion)this.region).getCachePerfStats(); + } + /** + * Callback for destroying IndexManager Called after Region.destroy() called + */ + public void destroy() throws QueryException { + this.indexes.clear(); + if (!isIndexMaintenanceTypeSynchronous()) updater.shutdown(); + } + + /** + * Removes indexes for a destroyed bucket region from the list of bucket indexes + * in the {@link PartitionedIndex}. + * @param prRegion the partition region that this bucket belongs to + * @throws QueryException + */ + public void removeBucketIndexes(PartitionedRegion prRegion) throws QueryException { + IndexManager parentManager = prRegion.getIndexManager(); + if (parentManager != null) { + Iterator bucketIndexIterator = indexes.values().iterator(); + while (bucketIndexIterator.hasNext()) { + Index bucketIndex = (Index)bucketIndexIterator.next(); + Index prIndex = parentManager.getIndex(bucketIndex.getName()); + if (prIndex instanceof PartitionedIndex) { + ((PartitionedIndex)prIndex).removeFromBucketIndexes(this.region, bucketIndex); + } + } + } + } + + @Override + public String toString() { + StringBuffer sb = new StringBuffer(); + Iterator iter = this.indexes.values().iterator(); + while (iter.hasNext()) { + Object ind = iter.next(); + // Check if the value is instance of FutureTask, this means + // the index is in create phase. + if (ind instanceof FutureTask){ + continue; + } + sb.append(((Index)ind).toString()).append('\n'); + } + return sb.toString(); + } + + public boolean isIndexMaintenanceTypeSynchronous() { + return this.indexMaintenanceSynchronous; + } + + public boolean isOverFlowRegion() { + return this.isOverFlowToDisk; + } + public boolean isOffHeap() { + return this.offHeap; + } + + public static boolean isObjectModificationInplace() { + return (INPLACE_OBJECT_MODIFICATION || INPLACE_OBJECT_MODIFICATION_FOR_TEST); + } + /** + * Asif : This function is used exclusively by Index Manager. It gets the + * unique Iterator name for a Iterator definition, if it already exists, else + * creates a unqiue name & also stores it in a map for subsequent use + * + * @param definition String containing definition of the iterator + * @return String containing the name of the Iterator + */ + public String putCanonicalizedIteratorNameIfAbsent(String definition) { + String str = null; + synchronized(canonicalizedIteratorNameMap) { + if ((str = (String) this.canonicalizedIteratorNameMap.get(definition)) == null) { + str = new StringBuffer("index_iter").append(this.getIncrementedCounter()) + .toString(); + String temp; + if ((temp = (String) this.canonicalizedIteratorNameMap.putIfAbsent( + definition, str)) != null) { + str = temp; + } + } + } + return str; + } + + public void putCanonicalizedIteratorName(String definition, String name) { + synchronized(canonicalizedIteratorNameMap) { + this.canonicalizedIteratorNameMap.put(definition, name); + } + } + + private synchronized int getIncrementedCounter() { + return ++this.iternameCounter; + } + + /** + * Asif : Given a definition returns the canonicalized iterator name for the + * definition. If the definition does not exist , null is returned + * + * @param definition + * @return String + */ + public String getCanonicalizedIteratorName(String definition) { + return ((String) (this.canonicalizedIteratorNameMap.get(definition))); + } + + ////////////////////// Inner Classes ////////////////////// + + public class IndexUpdaterThread extends Thread { + + private volatile boolean running = true; + + private volatile boolean shutdownRequested = false; + + private volatile BlockingQueue pendingTasks; + + /** + * Creates instance of IndexUpdaterThread + * @param updateThreshold + * @param threadName + */ + IndexUpdaterThread(ThreadGroup group, int updateThreshold, String threadName) { + super(group, threadName); + // Check if threshold is set. + if (updateThreshold > 0){ + // Create a bounded queue. + pendingTasks = new ArrayBlockingQueue(updateThreshold); + } else { + // Create non-bounded queue. + pendingTasks = new LinkedBlockingQueue(); + } + this.setDaemon(true); + } + + public void addTask(int action, RegionEntry entry, int opCode) { + Object[] task = new Object[3]; + task[0] = Integer.valueOf(action); + task[1] = entry; + task[2] = Integer.valueOf(opCode); // !!!:ezoerner:20081029 change to valueOf jdk 1.5+ + pendingTasks.add(task); + } + + /** + * Stops this thread. Does not return until it has stopped. + */ + public void shutdown() { + if (!this.running) { + return; + } + this.shutdownRequested = true; + this.interrupt(); + try { + this.join(); + } catch (InterruptedException ignore) { + Thread.currentThread().interrupt(); + // just return, we're done + } + } + + @Override + public void run() { + // async writers main loop + // logger.debug("DiskRegion writer started (writer=" + this + ")"); + com.gemstone.gemfire.CancelCriterion stopper = ((LocalRegion)region).getCancelCriterion(); + try { + while (!this.shutdownRequested) { + // Termination checks + SystemFailure.checkFailure(); + if (stopper.cancelInProgress() != null) { + break; + } + try { + Object[] task = (Object[])pendingTasks.take(); + if (this.shutdownRequested) { + break; + } + updateIndexes(task); + } + catch (InterruptedException ignore) { + return; // give up (exit the thread) + } + } + } + finally { + this.running = false; + } + } + + private void updateIndexes(Object[] task) { + int action = ((Integer)task[0]).intValue(); + RegionEntry entry = (RegionEntry)task[1]; + int opCode = ((Integer)task[2]).intValue(); + //System.out.println("entry = "+entry.getKey()); + if (entry != null || action == RECREATE_INDEX) { + try { + if (action == RECREATE_INDEX) { + recreateAllIndexesForRegion(); + } else { + if (entry != null) { + entry.setUpdateInProgress(true); + } + processAction(entry, action, opCode); + } + } + catch (Exception e) { + e.printStackTrace(); + } finally { + if (entry != null && action != RECREATE_INDEX) { + entry.setUpdateInProgress(false); + } + } + } + } + + /** + * Used by tests to determine if the updater thread has finished updating + * its indexes. The list is cleared without synchronization, which makes + * this methods somewhat unsafe from a threading point of view. + */ + public synchronized boolean isDone() { + return this.pendingTasks.size() == 0; + } + + } + + /** + * Index Task used to create the index. This is used along with the + * FutureTask to take care of, same index creation request from multiple + * threads. At any time only one thread succeeds and other threads waits + * for the completion of the index creation. This avoids usage of + * synchronization which could block any index creation. + */ + public class IndexTask implements Callable { + + public String indexName; + + public IndexType indexType; + + public IndexCreationHelper helper; + + public String origFromClause; + + public String origIndexedExpression; + + public boolean isCompactOrHash = false; + + public boolean isLDM = false; + + public PartitionedIndex prIndex; + + public boolean loadEntries; + + IndexTask (String indexName, IndexType type, String origFromClause, String origIndexedExpression, IndexCreationHelper helper, boolean isCompactOrHash, PartitionedIndex prIndex, boolean loadEntries){ + this.indexName = indexName; + this.indexType = type; + this.origFromClause = origFromClause; + this.origIndexedExpression = origIndexedExpression; + this.helper = helper; + this.isCompactOrHash = isCompactOrHash; + this.prIndex = prIndex; + this.loadEntries = loadEntries; + } + + /* For name based index search */ + IndexTask (String indexName){ + this.indexName = indexName; + } + + @Override + public boolean equals (Object other){ + if (other == null) { + return false; + } + IndexTask otherIndexTask = (IndexTask) other; + // compare indexName. + if (this.indexName.equals(otherIndexTask.indexName)){ + return true; + } + + if (otherIndexTask.helper == null || this.helper == null) { + return false; + } + + String[] indexDefinitions = this.helper.getCanonicalizedIteratorDefinitions(); + int[] mapping = new int[indexDefinitions.length]; + // compare index based on its type, expression and definition. + if(compareIndexData(this.indexType, indexDefinitions, + this.helper.getCanonicalizedIndexedExpression(), otherIndexTask.indexType, + otherIndexTask.helper.getCanonicalizedIteratorDefinitions(), + otherIndexTask.helper.getCanonicalizedIndexedExpression(), mapping) == 0) + { + return true; + } + return false; + } + + public int hashCode(){ + // It returns a constant number as the equality check is based on + // the OR condition between the indexName and its characteristics + // (involving type, expression and definition), because of this + // its not possible to come-up with an accurate hash code. + return 99; + } + + /* + * Creates and initializes the index. + */ + public Index call() { + Index index = null; + String indexedExpression = helper.getCanonicalizedIndexedExpression(); + String fromClause = helper.getCanonicalizedFromClause(); + String projectionAttributes = helper.getCanonicalizedProjectionAttributes(); + String[] definitions = helper.getCanonicalizedIteratorDefinitions(); + IndexStatistics stats = null; + this.isLDM = IndexManager.IS_TEST_LDM; + + if (this.prIndex != null) { + stats = this.prIndex.getStatistics(); + } + //Hash index not supported for overflow but we "thought" we were so let's maintain backwards compatibility + //and create a regular compact range index instead + if (indexType == IndexType.HASH && isOverFlowRegion()) { + indexType = IndexType.FUNCTIONAL; + } + if (indexType == IndexType.PRIMARY_KEY) { + index = new PrimaryKeyIndex(indexName, region, fromClause,indexedExpression, + projectionAttributes, origFromClause, + origIndexedExpression, definitions, stats); + logger.info("Using Primary Key index implementation for '{}' on region {}", indexName, region.getFullPath()); + } else if (indexType == IndexType.HASH){ + index = new HashIndex(indexName, region, fromClause, + indexedExpression, projectionAttributes, origFromClause, + origIndexedExpression, definitions, stats); + + logger.info("Using Hash index implementation for '{}' on region {}", indexName, region.getFullPath()); + } + else { + //boolean isCompact = !helper.isMapTypeIndex() && shouldCreateCompactIndex((FunctionalIndexCreationHelper)helper); + if (this.isCompactOrHash || this.isLDM) { + if (indexType == IndexType.FUNCTIONAL && !helper.isMapTypeIndex()) { + index = new CompactRangeIndex(indexName, region, fromClause, + indexedExpression, projectionAttributes, origFromClause, + origIndexedExpression, definitions, stats); + logger.info("Using Compact Range index implementation for '{}' on region {}", indexName, region.getFullPath()); + } + else { + FunctionalIndexCreationHelper fich = (FunctionalIndexCreationHelper)helper; + index = new CompactMapRangeIndex(indexName, region, fromClause, indexedExpression, + projectionAttributes, origFromClause, + origIndexedExpression, definitions, fich.isAllKeys(), fich.multiIndexKeysPattern, + fich.mapKeys, stats); + logger.info("Using Compact Map Range index implementation for '{}' on region {}", indexName, region.getFullPath()); + } + } + else { + assert indexType == IndexType.FUNCTIONAL; + if ( !helper.isMapTypeIndex() ) { + index = new RangeIndex(indexName, region, fromClause, + indexedExpression, projectionAttributes, origFromClause, + origIndexedExpression, definitions, stats); + logger.info("Using Non-Compact index implementation for '{}' on region {}", indexName, region.getFullPath()); + } + else { + FunctionalIndexCreationHelper fich = (FunctionalIndexCreationHelper)helper; + index = new MapRangeIndex(indexName, region, fromClause, indexedExpression, + projectionAttributes, origFromClause, + origIndexedExpression, definitions, fich.isAllKeys(), fich.multiIndexKeysPattern, + fich.mapKeys, stats); + logger.info("Using Non-Compact Map index implementation for '{}' on region {}", indexName, region.getFullPath()); + } + } + } + ((AbstractIndex)index).setPRIndex(prIndex); + + if (index.getType() != IndexType.PRIMARY_KEY) { + AbstractIndex aIndex = ((AbstractIndex) index); + aIndex.instantiateEvaluator(helper); + waitBeforeUpdate(); + boolean indexCreatedSuccessfully = false; + try { + ((LocalRegion)region).setFlagForIndexCreationThread(true); + aIndex.initializeIndex(loadEntries); + logger.info((loadEntries ? "Initialized and loaded entries into the index " + : "Initialized but entries not yet loaded into the index " + + indexName + " on region: " + region.getFullPath())); + aIndex.markValid(true); + indexCreatedSuccessfully = true; + if(loadEntries) { + aIndex.setPopulated(true); + if (this.prIndex != null) { + ((AbstractIndex)this.prIndex).setPopulated(true); + } + } + indexes.put(this, index); + if (region instanceof BucketRegion && prIndex != null) { + prIndex.addToBucketIndexes(region, index); + prIndex.incNumBucketIndexes(); + } + } catch (Exception e) { + throw new IndexInvalidException(e); + } + finally { + notifyAfterUpdate(); + ((LocalRegion)region).setFlagForIndexCreationThread(false); + if (!indexCreatedSuccessfully){ + ((InternalIndexStatistics)index.getStatistics()).close(); + } + } + } else { + // For PrimaryKey index + ((AbstractIndex)index).setPopulated(true); + indexes.put(this, index); + if (region instanceof BucketRegion && prIndex != null) { + prIndex.addToBucketIndexes(region, index); + } + } + return index; + } + } +} diff --git a/gemfire-core/src/main/java/com/gemstone/gemfire/cache/query/internal/index/PrimaryKeyIndexCreationHelper.java b/gemfire-core/src/main/java/com/gemstone/gemfire/cache/query/internal/index/PrimaryKeyIndexCreationHelper.java new file mode 100644 index 000000000000..cb9dc2516f4c --- /dev/null +++ b/gemfire-core/src/main/java/com/gemstone/gemfire/cache/query/internal/index/PrimaryKeyIndexCreationHelper.java @@ -0,0 +1,123 @@ +/* + * 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. + */ +/* + * PrimaryIndexCreationHelper.java + * + * Created on March 20, 2005, 7:21 PM + */ +package com.gemstone.gemfire.cache.query.internal.index; + +import com.gemstone.gemfire.internal.i18n.LocalizedStrings; +import com.gemstone.gemfire.cache.Cache; +import com.gemstone.gemfire.cache.Region; +import com.gemstone.gemfire.cache.query.IndexInvalidException; +import com.gemstone.gemfire.cache.query.internal.*; +import com.gemstone.gemfire.cache.query.internal.parse.OQLLexerTokenTypes; +import java.util.List; + +/** + * + */ +public class PrimaryKeyIndexCreationHelper extends IndexCreationHelper { + + ExecutionContext context = null; + + final Region region; + + public PrimaryKeyIndexCreationHelper(String fromClause, + String indexedExpression, String projectionAttributes, Cache cache, + ExecutionContext externalContext, IndexManager imgr) throws IndexInvalidException { + super(fromClause, projectionAttributes, cache); + if( externalContext == null) { + context = new ExecutionContext(null, cache); + }else { + this.context = externalContext; + } + context.newScope(1); + this.region = imgr.region; + prepareFromClause( imgr); + prepareIndexExpression(indexedExpression); + prepareProjectionAttributes(projectionAttributes); + } + + private void prepareFromClause(IndexManager imgr) + throws IndexInvalidException { + List list = this.compiler.compileFromClause(fromClause); + if (list.size() > 1) { throw new IndexInvalidException(LocalizedStrings.PrimaryKeyIndexCreationHelper_THE_FROMCLAUSE_FOR_A_PRIMARY_KEY_INDEX_SHOULD_ONLY_HAVE_ONE_ITERATOR_AND_THE_COLLECTION_MUST_BE_A_REGION_PATH_ONLY.toLocalizedString()); } + try { + CompiledIteratorDef iterDef = (CompiledIteratorDef) list.get(0); + if (iterDef.getCollectionExpr().getType() != OQLLexerTokenTypes.RegionPath) { throw new IndexInvalidException(LocalizedStrings.PrimaryKeyIndexCreationHelper_THE_FROMCLAUSE_FOR_A_PRIMARY_KEY_INDEX_SHOULD_BE_A_REGION_PATH_ONLY.toLocalizedString()); } + iterDef.computeDependencies(this.context); + RuntimeIterator rIter = (iterDef.getRuntimeIterator(this.context)); + String definition = rIter.getDefinition(); + this.canonicalizedIteratorDefinitions = new String[1]; + this.canonicalizedIteratorDefinitions[0] = definition; + // Asif: Bind the Index_Internal_ID to the RuntimeIterator + String name = imgr.putCanonicalizedIteratorNameIfAbsent(definition); + rIter.setIndexInternalID(name); + this.canonicalizedIteratorNames = new String[1]; + this.canonicalizedIteratorNames[0] = name; + this.fromClause = new StringBuffer(definition).append(' ').append(name) + .toString(); + context.bindIterator(rIter); + } + catch (IndexInvalidException e) { + throw e; //propagate + } + catch (Exception e) { + throw new IndexInvalidException(e); // wrap any other exceptions + } + } + + private void prepareIndexExpression(String indexedExpression) + throws IndexInvalidException { + List indexedExprs = this.compiler + .compileProjectionAttributes(indexedExpression); + if (indexedExprs == null || indexedExprs.size() != 1) { throw new IndexInvalidException(LocalizedStrings.PrimaryKeyIndexCreationHelper_INVALID_INDEXED_EXPRESSOION_0.toLocalizedString(indexedExpression)); } + CompiledValue expr = (CompiledValue) ((Object[]) indexedExprs.get(0))[1]; + if (expr.getType() == CompiledValue.LITERAL) + throw new IndexInvalidException(LocalizedStrings.PrimaryKeyIndexCreationHelper_INVALID_INDEXED_EXPRESSOION_0.toLocalizedString(indexedExpression)); + try { + StringBuffer sb = new StringBuffer(); + expr.generateCanonicalizedExpression(sb, context); + this.indexedExpression = sb.toString(); + } + catch (Exception e) { + //e.printStackTrace(); + throw new IndexInvalidException(LocalizedStrings.PrimaryKeyIndexCreationHelper_INVALID_INDEXED_EXPRESSOION_0_N_1.toLocalizedString(new Object[] {indexedExpression, e.getMessage()})); + } + } + + private void prepareProjectionAttributes(String projectionAttributes) + throws IndexInvalidException { + if (projectionAttributes != null && !projectionAttributes.equals("*")) { throw new IndexInvalidException(LocalizedStrings.PrimaryKeyIndexCreationHelper_INVALID_PROJECTION_ATTRIBUTES_0.toLocalizedString(projectionAttributes)); } + this.projectionAttributes = projectionAttributes; + } + + public Region getRegion() { + return region; + } + + public List getIterators() { + return null; + } + + public CompiledValue getCompiledIndexedExpression() { + return null; + } + +} diff --git a/gemfire-core/src/main/java/com/gemstone/gemfire/distributed/internal/DistributionManager.java b/gemfire-core/src/main/java/com/gemstone/gemfire/distributed/internal/DistributionManager.java new file mode 100644 index 000000000000..224e741ffbdf --- /dev/null +++ b/gemfire-core/src/main/java/com/gemstone/gemfire/distributed/internal/DistributionManager.java @@ -0,0 +1,4804 @@ +/* + * 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 com.gemstone.gemfire.distributed.internal; + +import java.io.Externalizable; +import java.io.IOException; +import java.io.NotSerializableException; +import java.io.ObjectInput; +import java.io.ObjectOutput; +import java.io.Serializable; +import java.net.InetAddress; +import java.net.UnknownHostException; +import java.util.ArrayList; +import java.util.Collection; +import java.util.Collections; +import java.util.Date; +import java.util.HashMap; +import java.util.HashSet; +import java.util.Iterator; +import java.util.List; +import java.util.Map; +import java.util.NoSuchElementException; +import java.util.Set; +import java.util.concurrent.BlockingQueue; +import java.util.concurrent.ConcurrentHashMap; +import java.util.concurrent.ConcurrentMap; +import java.util.concurrent.Executor; +import java.util.concurrent.ExecutorService; +import java.util.concurrent.LinkedBlockingQueue; +import java.util.concurrent.Semaphore; +import java.util.concurrent.SynchronousQueue; +import java.util.concurrent.ThreadFactory; +import java.util.concurrent.ThreadPoolExecutor; +import java.util.concurrent.TimeUnit; + +import org.apache.logging.log4j.Logger; + +import com.gemstone.gemfire.CancelCriterion; +import com.gemstone.gemfire.CancelException; +import com.gemstone.gemfire.ForcedDisconnectException; +import com.gemstone.gemfire.IncompatibleSystemException; +import com.gemstone.gemfire.InternalGemFireError; +import com.gemstone.gemfire.InternalGemFireException; +import com.gemstone.gemfire.InvalidDeltaException; +import com.gemstone.gemfire.SystemConnectException; +import com.gemstone.gemfire.SystemFailure; +import com.gemstone.gemfire.ToDataException; +import com.gemstone.gemfire.admin.GemFireHealthConfig; +import com.gemstone.gemfire.distributed.DistributedMember; +import com.gemstone.gemfire.distributed.DistributedSystemDisconnectedException; +import com.gemstone.gemfire.distributed.Locator; +import com.gemstone.gemfire.distributed.Role; +import com.gemstone.gemfire.distributed.internal.locks.ElderState; +import com.gemstone.gemfire.distributed.internal.membership.DistributedMembershipListener; +import com.gemstone.gemfire.distributed.internal.membership.InternalDistributedMember; +import com.gemstone.gemfire.distributed.internal.membership.MemberFactory; +import com.gemstone.gemfire.distributed.internal.membership.MembershipManager; +import com.gemstone.gemfire.distributed.internal.membership.NetView; +import com.gemstone.gemfire.i18n.StringId; +import com.gemstone.gemfire.internal.Assert; +import com.gemstone.gemfire.internal.NanoTimer; +import com.gemstone.gemfire.internal.OSProcess; +import com.gemstone.gemfire.internal.SetUtils; +import com.gemstone.gemfire.internal.SocketCreator; +import com.gemstone.gemfire.internal.Version; +import com.gemstone.gemfire.internal.admin.remote.AdminConsoleDisconnectMessage; +import com.gemstone.gemfire.internal.admin.remote.RemoteGfManagerAgent; +import com.gemstone.gemfire.internal.admin.remote.RemoteTransportConfig; +import com.gemstone.gemfire.internal.cache.InitialImageOperation; +import com.gemstone.gemfire.internal.i18n.LocalizedStrings; +import com.gemstone.gemfire.internal.logging.LogService; +import com.gemstone.gemfire.internal.logging.LoggingThreadGroup; +import com.gemstone.gemfire.internal.logging.log4j.AlertAppender; +import com.gemstone.gemfire.internal.logging.log4j.LocalizedMessage; +import com.gemstone.gemfire.internal.logging.log4j.LogMarker; +import com.gemstone.gemfire.internal.sequencelog.MembershipLogger; +import com.gemstone.gemfire.internal.tcp.Connection; +import com.gemstone.gemfire.internal.tcp.ConnectionTable; +import com.gemstone.gemfire.internal.tcp.ReenteredConnectException; +import com.gemstone.gemfire.internal.util.concurrent.StoppableReentrantLock; + +/** + * The DistributionManager uses a {@link + * MembershipManager} to distribute {@link DistributionMessage messages} + * queued in {@link MQueue}s. + * + *

+ * + * Code that wishes to send a {@link DistributionMessage} must get + * the DistributionManager and invoke {@link + * #putOutgoing}. + * + *

+ * + * DistributionManager is not intended to be + * serialized. It is Externalizable only to prevent it + * from being copy shared. See {@link #writeExternal}. + * + *

+ * + * Prior to GemFire 4.0, DistributionManager was an + * abstract class with two concrete subclasses, + * LocalDistributionManager and + * ConsoleDistributionManager. We decided that + * ConsoleDistributionManager (which was used for the GUI + * console and admin APIs) did not offer enough interesting + * functionality to warrant a separate class. More importantly, it + * prevented the Cache and admin APIs from being used in the same VM. + * So, we refactored the code of those two subclasses into + * DistributionManager. + * + * @since 2.0 + * + * @see DistributionMessage#process + * @see IgnoredByManager + */ +public class DistributionManager + implements Externalizable, DM { + + private static final Logger logger = LogService.getLogger(); + + private static final boolean SYNC_EVENTS = + Boolean.getBoolean("DistributionManager.syncEvents"); + + /** + * WARNING: setting this to true may break dunit tests. + *

see com.gemstone.gemfire.cache30.ClearMultiVmCallBkDUnitTest + */ + public static final boolean INLINE_PROCESS = + !Boolean.getBoolean("DistributionManager.enqueueOrderedMessages"); + + /** Flag indicating whether to use single Serial-Executor thread or + * Multiple Serial-executor thread, + */ + public static final boolean MULTI_SERIAL_EXECUTORS = + !Boolean.getBoolean("DistributionManager.singleSerialExecutor"); + + /** The name of the distribution manager (identifies it in GemFire) */ + public static final String NAME = "GemFire"; + + /** The number of milliseconds to wait for distribution-related + * things to happen */ + public static final long TIMEOUT = + Long.getLong("DistributionManager.TIMEOUT", -1).longValue(); + + public static final int PUSHER_THREADS = + Integer.getInteger("DistributionManager.PUSHER_THREADS", 50).intValue(); + + public static final int PUSHER_QUEUE_SIZE = + Integer.getInteger("DistributionManager.PUSHER_QUEUE_SIZE", 4096).intValue(); + + + public static final int MAX_WAITING_THREADS = + Integer.getInteger("DistributionManager.MAX_WAITING_THREADS", Integer.MAX_VALUE).intValue(); + + public static final int MAX_PR_META_DATA_CLEANUP_THREADS = + Integer.getInteger("DistributionManager.MAX_PR_META_DATA_CLEANUP_THREADS", 1).intValue(); + + public static final int MAX_THREADS = Integer.getInteger("DistributionManager.MAX_THREADS", 100).intValue(); + public static final int MAX_PR_THREADS = Integer.getInteger("DistributionManager.MAX_PR_THREADS", Math.max(Runtime.getRuntime().availableProcessors()*4, 16)).intValue(); + public static final int MAX_FE_THREADS = Integer.getInteger("DistributionManager.MAX_FE_THREADS", Math.max(Runtime.getRuntime().availableProcessors()*4, 16)).intValue(); + // Integer.getInteger("DistributionManager.MAX_THREADS", max(Runtime.getRuntime().availableProcessors()*2, 2)).intValue(); + + public static final int INCOMING_QUEUE_LIMIT = + Integer.getInteger("DistributionManager.INCOMING_QUEUE_LIMIT", 80000).intValue(); + public static final int INCOMING_QUEUE_THROTTLE = + Integer.getInteger("DistributionManager.INCOMING_QUEUE_THROTTLE", (int)(INCOMING_QUEUE_LIMIT * 0.75)).intValue(); + + /** Throttling based on the Queue byte size */ + public static final double THROTTLE_PERCENT = + (double) (Integer.getInteger("DistributionManager.SERIAL_QUEUE_THROTTLE_PERCENT", 75).intValue())/100; + public static final int SERIAL_QUEUE_BYTE_LIMIT = + Integer.getInteger("DistributionManager.SERIAL_QUEUE_BYTE_LIMIT", (40 * (1024 * 1024))).intValue(); + public static final int SERIAL_QUEUE_THROTTLE = + Integer.getInteger("DistributionManager.SERIAL_QUEUE_THROTTLE", (int)(SERIAL_QUEUE_BYTE_LIMIT * THROTTLE_PERCENT)).intValue(); + public static final int TOTAL_SERIAL_QUEUE_BYTE_LIMIT = + Integer.getInteger("DistributionManager.TOTAL_SERIAL_QUEUE_BYTE_LIMIT", (80 * (1024 * 1024))).intValue(); + public static final int TOTAL_SERIAL_QUEUE_THROTTLE = + Integer.getInteger("DistributionManager.TOTAL_SERIAL_QUEUE_THROTTLE", (int)(SERIAL_QUEUE_BYTE_LIMIT * THROTTLE_PERCENT)).intValue(); + + /** Throttling based on the Queue item size */ + public static final int SERIAL_QUEUE_SIZE_LIMIT = + Integer.getInteger("DistributionManager.SERIAL_QUEUE_SIZE_LIMIT", 20000).intValue(); + public static final int SERIAL_QUEUE_SIZE_THROTTLE = + Integer.getInteger("DistributionManager.SERIAL_QUEUE_SIZE_THROTTLE", (int)(SERIAL_QUEUE_SIZE_LIMIT * THROTTLE_PERCENT)).intValue(); + + /** Max number of serial Queue executors, in case of multi-serial-queue executor */ + public static final int MAX_SERIAL_QUEUE_THREAD = + Integer.getInteger("DistributionManager.MAX_SERIAL_QUEUE_THREAD", 20).intValue(); + + /** + * Whether or not to include link local addresses in the list of addresses we use + * to determine if two members are no the same host. + * + * Added for normura issue 7033 - they have duplicate link local addresses on different boxes + */ + public static volatile boolean INCLUDE_LINK_LOCAL_ADDRESSES = + Boolean.getBoolean("gemfire.IncludeLinkLocalAddresses"); + + /** The DM type for regular distribution managers */ + public static final int NORMAL_DM_TYPE = 10; + + /** The DM type for locator distribution managers + * @since 7.0 + */ + public static final int LOCATOR_DM_TYPE = 11; + + /** The DM type for Console (admin-only) distribution managers */ + public static final int ADMIN_ONLY_DM_TYPE = 12; + + public static final int LONER_DM_TYPE = 13; + + /** + * an NIO priority type + * @see com.gemstone.gemfire.distributed.internal.PooledDistributionMessage + * @see #SERIAL_EXECUTOR + * @see #HIGH_PRIORITY_EXECUTOR + * @see #WAITING_POOL_EXECUTOR + */ + public static final int STANDARD_EXECUTOR = 73; + + /** + * an NIO priority type + * + * @see com.gemstone.gemfire.distributed.internal.SerialDistributionMessage + * @see #STANDARD_EXECUTOR + */ + public static final int SERIAL_EXECUTOR = 74; + + /** + * an NIO priority type + + * @see com.gemstone.gemfire.distributed.internal.HighPriorityDistributionMessage + * @see #STANDARD_EXECUTOR + */ + public static final int HIGH_PRIORITY_EXECUTOR = 75; + + // 76 not in use + + /** + * an NIO priority type + * + * @see com.gemstone.gemfire.internal.cache.InitialImageOperation + * @see #STANDARD_EXECUTOR + */ + public static final int WAITING_POOL_EXECUTOR = 77; + + /** + * an NIO priority type + * + * @see com.gemstone.gemfire.internal.cache.InitialImageOperation + * @see #STANDARD_EXECUTOR + */ + public static final int PARTITIONED_REGION_EXECUTOR = 78; + + + /** + * Executor for view related messages + * + * @see com.gemstone.gemfire.distributed.internal.membership.gms.messages.ViewAckMessage + * @see #STANDARD_EXECUTOR + */ + public static final int VIEW_EXECUTOR = 79; + + + public static final int REGION_FUNCTION_EXECUTION_EXECUTOR = 80; + + /** The number of open distribution managers in this VM */ + private static int openDMs = 0; + +// /** The stack trace of the last time a console DM was opened */ +// private static Exception openStackTrace; + + /** Is this VM dedicated to administration (like a GUI console or a + * JMX agent)? If so, then it creates {@link #ADMIN_ONLY_DM_TYPE} + * type distribution managers. + * + * @since 4.0 + */ + public static volatile boolean isDedicatedAdminVM = false; + + /** + * Is this admin agent used for a command line console. + * This flag controls whether connect will throw + * an exception or just wait for a DS if one is not + * available. If true, we will throw an exception. + * + */ + public static volatile boolean isCommandLineAdminVM = false; + + + + ///////////////////// Instance Fields ////////////////////// + + /** The id of this distribution manager */ + final protected InternalDistributedMember myid; + + /** The distribution manager type of this dm; set in its constructor. */ + private final int dmType; + + /** The MembershipListeners that are registered on this + * manager. */ + private final ConcurrentMap membershipListeners; + + /** A lock to hold while adding and removing membership listeners */ + protected final Object membershipListenersLock = + new MembershipListenersLock(); + /** The MembershipListeners that are registered on this + * manager for ALL members. + * @since 5.7 + */ + protected volatile Set allMembershipListeners = Collections.EMPTY_SET; + /** + * A lock to hold while adding and removing all membership listeners. + * @since 5.7 + */ + protected final Object allMembershipListenersLock = + new MembershipListenersLock(); + /** A queue of MemberEvent instances */ + protected final BlockingQueue membershipEventQueue = + new LinkedBlockingQueue(); + /** Used to invoke registered membership listeners in the background. */ + private Thread memberEventThread; + + + /** A brief description of this DistributionManager */ + protected final String description; + + /** Statistics about distribution */ + protected /*final*/ DistributionStats stats; + + /** Did an exception occur in one of the DM threads? */ + protected boolean exceptionInThreads; + + static ThreadLocal isStartupThread = new ThreadLocal(); + + protected volatile boolean shutdownMsgSent = false; + + /** Set to true when this manager is being shutdown */ + protected volatile boolean closeInProgress = false; + + private volatile boolean receivedStartupResponse = false; + + private volatile String rejectionMessage = null; + + protected MembershipManager membershipManager; + + /** The channel through which distributed communication occurs. */ + protected DistributionChannel channel; + + /** + * The (non-admin-only) members of the distributed system. This is a + * map of memberid->memberid for fast access to canonical ID references. + * All accesses to this + * field must be synchronized on {@link #membersLock}. + */ + private Map members = Collections.emptyMap(); + /** + * All (admin and non-admin) members of the distributed system. All accesses + * to this field must be synchronized on {@link #membersLock}. + */ + private Set membersAndAdmin = Collections.emptySet(); + /** + * Map of all locator members of the distributed system. The value is a + * collection of locator strings that are hosted in that member. All accesses + * to this field must be synchronized on {@link #membersLock}. + */ + private Map> hostedLocatorsAll = Collections.emptyMap(); + + /** + * Map of all locator members of the distributed system which have the shared configuration. The value is a + * collection of locator strings that are hosted in that member. All accesses + * to this field must be synchronized on {@link #membersLock}. + */ + private Map> hostedLocatorsWithSharedConfiguration = Collections.emptyMap(); + + /** + * Since 6.6.2 and hereafter we will save the versions here. But pre-6.6.2's + * StartupResponseMessage does not contain version. We will assign a default + * version for them. + */ + public static final String DEFAULT_VERSION_PRE_6_6_2 = "6.6.0.0"; + /** + * The lock held while accessing the field references to the following:
+ * 1) {@link #members}
+ * 2) {@link #membersAndAdmin}
+ * 3) {@link #hostedLocatorsAll}
+ * 4) {@link #hostedLocatorsWithSharedConfiguration}
+ */ + private final Object membersLock = new MembersLock(); + + /** + * The lock held while writing {@link #adminConsoles}. + */ + private final Object adminConsolesLock = new Object(); + /** + * The ids of all known admin consoles + * Uses Copy on Write. Writers must sync on adminConsolesLock. + * Readers don't need to sync. + */ + private volatile Set adminConsoles = Collections.emptySet(); + + /** The pusher thread */ + //private Thread pusher; + + /** The group of distribution manager threads */ + protected LoggingThreadGroup threadGroup; + + /** Message processing thread pool */ + private ThreadPoolExecutor threadPool; + + /** High Priority processing thread pool, used for initializing messages + * such as UpdateAttributes and CreateRegion messages + */ + private ThreadPoolExecutor highPriorityPool; + + /** Waiting Pool, used for messages that may have to wait on something. + * Use this separate pool with an unbounded queue so that waiting + * runnables don't get in the way of other processing threads. + * Used for threads that will most likely have to wait for a region to be + * finished initializing before it can proceed + */ + private ThreadPoolExecutor waitingPool; + + private ThreadPoolExecutor prMetaDataCleanupThreadPool; + + /** + * Thread used to decouple {@link com.gemstone.gemfire.internal.cache.partitioned.PartitionMessage}s from + * {@link com.gemstone.gemfire.internal.cache.DistributedCacheOperation}s + * @see #SERIAL_EXECUTOR + */ + private ThreadPoolExecutor partitionedRegionThread; + private ThreadPoolExecutor partitionedRegionPool; + private ThreadPoolExecutor functionExecutionThread; + private ThreadPoolExecutor functionExecutionPool; + + /** Message processing executor for serial, ordered, messages. */ + private ThreadPoolExecutor serialThread; + + /** Message processing executor for view messages + * @see com.gemstone.gemfire.distributed.internal.membership.gms.messages.ViewAckMessage + */ + private ThreadPoolExecutor viewThread; + + /** If using a throttling queue for the serialThread, we cache the queue here + so we can see if delivery would block */ + private ThrottlingMemLinkedQueueWithDMStats serialQueue; + + /** a map keyed on InternalDistributedMember, to direct channels to other systems */ + //protected final Map channelMap = CFactory.createCM(); + + protected volatile boolean readyForMessages = false; + + /** + * Set to true once this DM is ready to send messages. + * Note that it is always ready to send the startup message. + */ + private volatile boolean readyToSendMsgs = false; + private final Object readyToSendMsgsLock = new Object(); + + /** Is this distribution manager closed? */ + protected volatile boolean closed = false; + + /** The distributed system to which this distribution manager is + * connected. */ + private InternalDistributedSystem system; + + /** The remote transport configuration for this dm */ + private RemoteTransportConfig transport; + + /** The administration agent associated with this distribution + * manager. */ + private volatile RemoteGfManagerAgent agent; + + private SerialQueuedExecutorPool serialQueuedExecutorPool; + + private final Semaphore parallelGIIs = new Semaphore(InitialImageOperation.MAX_PARALLEL_GIIS); + + /** + * Map of InetAddress to HashSets of InetAddress, to define equivalences + * between network interface cards and hosts. + */ + private final HashMap> equivalentHosts = new HashMap>(); + + private int distributedSystemId = DistributionConfig.DEFAULT_DISTRIBUTED_SYSTEM_ID; + + + private final Map redundancyZones = Collections.synchronizedMap(new HashMap()); + + private boolean enforceUniqueZone = false; + + private volatile boolean isSharedConfigEnabledForDS = false; + + @Override + public boolean isSharedConfigurationServiceEnabledForDS() { + return isSharedConfigEnabledForDS; + } + + /** + * Identifier for function execution threads and any of their children + */ + public static final InheritableThreadLocal isFunctionExecutionThread = new InheritableThreadLocal() { + @Override + protected Boolean initialValue() { + return Boolean.FALSE; + } + }; + ////////////////////// Static Methods ////////////////////// + + /** + * Given two DistributionManager ids, check to see if they are + * from the same host address. + * @param id1 a DistributionManager id + * @param id2 a DistributionManager id + * @return true if id1 and id2 are from the same host, false otherwise + */ + public static boolean isSameHost(InternalDistributedMember id1, InternalDistributedMember id2) { + return (id1.getInetAddress().equals(id2.getInetAddress())); + } + + // @todo davidw Modify JGroups so that we do not have to send out a + // {@link StartupMessage} + /** + * Creates a new distribution manager and discovers the other members of the + * distributed system. Note that it does not check to see whether or not this + * VM already has a distribution manager. + * + * @param system + * The distributed system to which this distribution manager + * will send messages. + */ + public static DistributionManager create(InternalDistributedSystem system) + { + + DistributionManager dm = null; + + try { + + int vmKind; + + if (Boolean.getBoolean(InternalLocator.FORCE_LOCATOR_DM_TYPE)) { + // if this DM is starting for a locator, set it to be a locator DM + vmKind = LOCATOR_DM_TYPE; + + } else if (isDedicatedAdminVM) { + vmKind = ADMIN_ONLY_DM_TYPE; + + } else { + vmKind = NORMAL_DM_TYPE; + } + + RemoteTransportConfig transport = new RemoteTransportConfig(system.getConfig(), vmKind); + transport.setIsReconnectingDS(system.isReconnectingDS()); + transport.setOldDSMembershipInfo(system.oldDSMembershipInfo()); + + long start = System.currentTimeMillis(); + + dm = new DistributionManager(system, transport); + dm.assertDistributionManagerType(); + + { + InternalDistributedMember id = dm.getDistributionManagerId(); + if (!"".equals(id.getName())) { + for (InternalDistributedMember m: (List)dm.getViewMembers()) { + if (m.equals(id)) { + // I'm counting on the members returned by getViewMembers being ordered such that + // members that joined before us will precede us AND members that join after us + // will succeed us. + // SO once we find ourself break out of this loop. + break; + } + if (id.getName().equals(m.getName())) { + if (dm.getMembershipManager().verifyMember(m, "member is using the name of " + id)) { + throw new IncompatibleSystemException("Member " + id + " could not join this distributed system because the existing member " + m + " used the same name. Set the \"name\" gemfire property to a unique value."); + } + } + } + } + dm.addNewMember(id); // add ourselves + dm.selectElder(); // ShutdownException could be thrown here + } + + // Send out a StartupMessage to the other members. + StartupOperation op = new StartupOperation(dm, transport); + + try { + if (!dm.sendStartupMessage(op, true)) { + // We'll we didn't hear back from anyone else. We assume that + // we're the first one. + if (dm.getOtherDistributionManagerIds().size() == 0) { + logger.info(LocalizedMessage.create(LocalizedStrings.DistributionManager_DIDNT_HEAR_BACK_FROM_ANY_OTHER_SYSTEM_I_AM_THE_FIRST_ONE)); + } else if (transport.isMcastEnabled()) { + // perform a multicast ping test + if (!dm.testMulticast()) { + logger.warn(LocalizedMessage.create( + LocalizedStrings.DistributionManager_RECEIVED_NO_STARTUP_RESPONSES_BUT_OTHER_MEMBERS_EXIST_MULTICAST_IS_NOT_RESPONSIVE)); + } + } + } + } catch (InterruptedException ex) { + Thread.currentThread().interrupt(); + // This is ALWAYS bad; don't consult a CancelCriterion. + throw new InternalGemFireException(LocalizedStrings.DistributionManager_INTERRUPTED_WHILE_WAITING_FOR_FIRST_STARTUPRESPONSEMESSAGE.toLocalizedString(), ex); + } catch (IncompatibleSystemException ex) { + logger.fatal(ex.getMessage(), ex); + throw ex; + } finally { + dm.readyToSendMsgs(); + } + + if (logger.isInfoEnabled()) { + long delta = System.currentTimeMillis() - start; + Object[] logArgs = new Object[] { + dm.getDistributionManagerId(), + transport, + Integer.valueOf(dm.getOtherDistributionManagerIds().size()), + dm.getOtherDistributionManagerIds(), + (logger.isInfoEnabled(LogMarker.DM) ? " (VERBOSE, took " + delta + " ms)" : ""), + ((dm.getDMType() == ADMIN_ONLY_DM_TYPE) ? " (admin only)" : (dm.getDMType() == LOCATOR_DM_TYPE) ? " (locator)" : "") + }; + logger.info(LogMarker.DM, LocalizedMessage.create( + LocalizedStrings.DistributionManager_DISTRIBUTIONMANAGER_0_STARTED_ON_1_THERE_WERE_2_OTHER_DMS_3_4_5, logArgs)); + + MembershipLogger.logStartup(dm.getDistributionManagerId()); + } + return dm; + } + catch (RuntimeException r) { + if (dm != null) { + if (logger.isDebugEnabled()) { + logger.debug("cleaning up incompletely started DistributionManager due to exception", r); + } + dm.uncleanShutdown(true); + } + throw r; + } + } + + void runUntilShutdown(Runnable r) { + try { + r.run(); + } + catch (CancelException e) { + if (logger.isTraceEnabled()) { + logger.trace("Caught shutdown exception", e); + } + } + catch (VirtualMachineError err) { + SystemFailure.initiateFailure(err); + // If this ever returns, rethrow the error. We're poisoned + // now, so don't let this thread continue. + throw err; + } + catch (Throwable t) { + // Whenever you catch Error or Throwable, you must also + // catch VirtualMachineError (see above). However, there is + // _still_ a possibility that you are dealing with a cascading + // error condition, so you also need to check to see if the JVM + // is still usable: + SystemFailure.checkFailure(); + if (isCloseInProgress()) { + logger.debug("Caught unusual exception during shutdown: {}", t.getMessage(), t); + } + else { + logger.warn(LocalizedMessage.create(LocalizedStrings.DistributionManager_TASK_FAILED_WITH_EXCEPTION), t); + } + } } + + volatile Throwable rootCause = null; + + private static class Stopper extends CancelCriterion { + private DistributionManager dm; + + // validateDM is commented out because expiry threads hit it with + // an ugly failure... use only for debugging lingering DM bugs +// private String validateDM() { +// GemFireCache cache = GemFireCache.getInstance(); +// if (cache == null) { +// return null; // Distributed system with no cache +// } +// Object obj = cache.getDistributedSystem(); +// if (obj == null) { +// return null; // Cache is very dead +// } +// InternalDistributedSystem ids = (InternalDistributedSystem)obj; +// DM current = ids.getDistributionManager(); +// if (current != dm) { +// String response = LocalizedStrings.DistributionManager_CURRENT_CACHE_DISTRIBUTIONMANAGER_0_IS_NOT_THE_SAME_AS_1 +// .toLocalizedString(new Object[] { current, dm}); +// return response; +// } +// return null; +// } + + Stopper(DistributionManager dm) { + this.dm = dm; + } + @Override + public String cancelInProgress() { + checkFailure(); + + // remove call to validateDM() to fix bug 38356 + + if (dm.shutdownMsgSent) { + return LocalizedStrings.DistributionManager__0_MESSAGE_DISTRIBUTION_HAS_TERMINATED.toLocalizedString(dm.toString()); + } + if (dm.rootCause != null) { + return dm.toString() + ": " + dm.rootCause.getMessage(); + } + + // Nope. + return null; + } + + @Override + public RuntimeException generateCancelledException(Throwable e) { + String reason = cancelInProgress(); + if (reason == null) { + return null; + } + Throwable rc = dm.rootCause; // volatile read + if (rc == null) { + // No root cause, specify the one given and be done with it. + return new DistributedSystemDisconnectedException(reason, e); + } + + if (e == null) { + // Caller did not specify any root cause, so just use our own. + return new DistributedSystemDisconnectedException(reason, rc); + } + + // Attempt to stick rootCause at tail end of the exception chain. + Throwable nt = e; + while (nt.getCause() != null) { + nt = nt.getCause(); + } + if (nt == rc) { + // Root cause already in place; we're done + return new DistributedSystemDisconnectedException(reason, e); + } + + try { + nt.initCause(rc); + return new DistributedSystemDisconnectedException(reason, e); + } + catch (IllegalStateException e2) { + // Bug 39496 (Jrockit related) Give up. The following + // error is not entirely sane but gives the correct general picture. + return new DistributedSystemDisconnectedException(reason, rc); + } + } + } + private final Stopper stopper = new Stopper(this); + + public CancelCriterion getCancelCriterion() { + return stopper; + } + + /////////////////////// Constructors /////////////////////// + + /** + * no-arg constructor for Externalizable + * TODO: does this class really need to implement Externalizable? I + * think it only implements that interface for the old copy-sharing + * shared-memory stuff that's no longer in GemFire + */ + public DistributionManager() { + this.elderLock = null; + this.membershipListeners = null; + this.myid = null; + this.description = null; + this.dmType = 0; + throw new IllegalAccessError("this constructor should never be invoked"); + } + + /** + * Creates a new DistributionManager by initializing + * itself, creating the membership manager and executors + * + * @param transport + * The configuration for the communications transport + * + */ + private DistributionManager(RemoteTransportConfig transport, + InternalDistributedSystem system) { + + this.dmType = transport.getVmKind(); + this.system = system; + this.elderLock = new StoppableReentrantLock(stopper); + this.transport = transport; + + this.membershipListeners = new ConcurrentHashMap(); + this.distributedSystemId = system.getConfig().getDistributedSystemId(); + { + long statId = OSProcess.getId(); + /* deadcoded since we don't know the channel id yet. + if (statId == 0 || statId == -1) { + statId = getChannelId(); + } + */ + this.stats = new DistributionStats(system, statId); + DistributionStats.enableClockStats = system.getConfig().getEnableTimeStatistics(); + } + + this.exceptionInThreads = false; + + // Start the processing threads + final LoggingThreadGroup group = + LoggingThreadGroup.createThreadGroup("DistributionManager Threads", logger); + this.threadGroup = group; + + boolean finishedConstructor = false; + try { + + if (MULTI_SERIAL_EXECUTORS) { + if (logger.isInfoEnabled(LogMarker.DM)) { + logger.info(LogMarker.DM, + "Serial Queue info :" + + " THROTTLE_PERCENT: " + THROTTLE_PERCENT + + " SERIAL_QUEUE_BYTE_LIMIT :" + SERIAL_QUEUE_BYTE_LIMIT + + " SERIAL_QUEUE_THROTTLE :" + SERIAL_QUEUE_THROTTLE + + " TOTAL_SERIAL_QUEUE_BYTE_LIMIT :" + TOTAL_SERIAL_QUEUE_BYTE_LIMIT + + " TOTAL_SERIAL_QUEUE_THROTTLE :" + TOTAL_SERIAL_QUEUE_THROTTLE + + " SERIAL_QUEUE_SIZE_LIMIT :" + SERIAL_QUEUE_SIZE_LIMIT + + " SERIAL_QUEUE_SIZE_THROTTLE :" + SERIAL_QUEUE_SIZE_THROTTLE + ); + } + // when TCP/IP is disabled we can't throttle the serial queue or we run the risk of + // distributed deadlock when we block the UDP reader thread + boolean throttlingDisabled = system.getConfig().getDisableTcp(); + this.serialQueuedExecutorPool = new SerialQueuedExecutorPool(this.threadGroup, this.stats, throttlingDisabled); + } + + { + BlockingQueue poolQueue; + if (SERIAL_QUEUE_BYTE_LIMIT == 0) { + poolQueue = new OverflowQueueWithDMStats(this.stats.getSerialQueueHelper()); + } else { + this.serialQueue = new ThrottlingMemLinkedQueueWithDMStats(TOTAL_SERIAL_QUEUE_BYTE_LIMIT, + TOTAL_SERIAL_QUEUE_THROTTLE, SERIAL_QUEUE_SIZE_LIMIT, SERIAL_QUEUE_SIZE_THROTTLE, + this.stats.getSerialQueueHelper()); + poolQueue = this.serialQueue; + } + ThreadFactory tf = new ThreadFactory() { + public Thread newThread(final Runnable command) { + DistributionManager.this.stats.incSerialThreadStarts(); + final Runnable r = new Runnable() { + public void run() { + DistributionManager.this.stats.incNumSerialThreads(1); + try { + ConnectionTable.threadWantsSharedResources(); + Connection.makeReaderThread(); + runUntilShutdown(command); + // command.run(); + } finally { + ConnectionTable.releaseThreadsSockets(); + DistributionManager.this.stats.incNumSerialThreads(-1); + } + } + }; + Thread thread = new Thread(group, r, LocalizedStrings.DistributionManager_SERIAL_MESSAGE_PROCESSOR.toLocalizedString()); + thread.setDaemon(true); + return thread; + } + }; + SerialQueuedExecutorWithDMStats executor = new SerialQueuedExecutorWithDMStats(poolQueue, + this.stats.getSerialProcessorHelper(), tf); + this.serialThread = executor; + } + { + BlockingQueue q = new LinkedBlockingQueue(); + ThreadFactory tf = new ThreadFactory() { + public Thread newThread(final Runnable command) { + DistributionManager.this.stats.incViewThreadStarts(); + final Runnable r = new Runnable() { + public void run() { + DistributionManager.this.stats.incNumViewThreads(1); + try { + ConnectionTable.threadWantsSharedResources(); + Connection.makeReaderThread(); + runUntilShutdown(command); + } finally { + ConnectionTable.releaseThreadsSockets(); + DistributionManager.this.stats.incNumViewThreads(-1); + } + } + }; + Thread thread = new Thread(group, r, LocalizedStrings.DistributionManager_VIEW_MESSAGE_PROCESSOR.toLocalizedString()); + thread.setDaemon(true); + return thread; + } + }; + this.viewThread = new SerialQueuedExecutorWithDMStats(q, + this.stats.getViewProcessorHelper(), tf); + } + + { + BlockingQueue poolQueue; + if (INCOMING_QUEUE_LIMIT == 0) { + poolQueue = new OverflowQueueWithDMStats(this.stats.getOverflowQueueHelper()); + } else { + poolQueue = new OverflowQueueWithDMStats(INCOMING_QUEUE_LIMIT, this.stats.getOverflowQueueHelper()); + } + ThreadFactory tf = new ThreadFactory() { + private int next = 0; + + public Thread newThread(final Runnable command) { + DistributionManager.this.stats.incProcessingThreadStarts(); + final Runnable r = new Runnable() { + public void run() { + DistributionManager.this.stats.incNumProcessingThreads(1); + try { + ConnectionTable.threadWantsSharedResources(); + Connection.makeReaderThread(); + runUntilShutdown(command); + } finally { + ConnectionTable.releaseThreadsSockets(); + DistributionManager.this.stats.incNumProcessingThreads(-1); + } + } + }; + Thread thread = new Thread(group, r, + LocalizedStrings.DistributionManager_POOLED_MESSAGE_PROCESSOR.toLocalizedString() + (next++)); + thread.setDaemon(true); + return thread; + } + }; + ThreadPoolExecutor pool = + new PooledExecutorWithDMStats(poolQueue, MAX_THREADS, this.stats.getNormalPoolHelper(), tf); + this.threadPool = pool; + } + + + { + BlockingQueue poolQueue; + if (INCOMING_QUEUE_LIMIT == 0) { + poolQueue = new OverflowQueueWithDMStats(this.stats.getHighPriorityQueueHelper()); + } else { + poolQueue = new OverflowQueueWithDMStats(INCOMING_QUEUE_LIMIT, this.stats.getHighPriorityQueueHelper()); + } + ThreadFactory tf = new ThreadFactory() { + private int next = 0; + + public Thread newThread(final Runnable command) { + DistributionManager.this.stats.incHighPriorityThreadStarts(); + final Runnable r = new Runnable() { + public void run() { + DistributionManager.this.stats.incHighPriorityThreads(1); + try { + ConnectionTable.threadWantsSharedResources(); + Connection.makeReaderThread(); + runUntilShutdown(command); + } finally { + ConnectionTable.releaseThreadsSockets(); + DistributionManager.this.stats.incHighPriorityThreads(-1); + } + } + }; + Thread thread = new Thread(group, r, + LocalizedStrings.DistributionManager_POOLED_HIGH_PRIORITY_MESSAGE_PROCESSOR.toLocalizedString() + (next++)); + thread.setDaemon(true); + return thread; + } + }; + this.highPriorityPool = new PooledExecutorWithDMStats(poolQueue, MAX_THREADS, this.stats.getHighPriorityPoolHelper(), tf); + } + + + { + ThreadFactory tf = new ThreadFactory() { + private int next = 0; + + public Thread newThread(final Runnable command) { + DistributionManager.this.stats.incWaitingThreadStarts(); + final Runnable r = new Runnable() { + public void run() { + DistributionManager.this.stats.incWaitingThreads(1); + try { + ConnectionTable.threadWantsSharedResources(); + Connection.makeReaderThread(); + runUntilShutdown(command); + } finally { + ConnectionTable.releaseThreadsSockets(); + DistributionManager.this.stats.incWaitingThreads(-1); + } + } + }; + Thread thread = new Thread(group, r, + LocalizedStrings.DistributionManager_POOLED_WAITING_MESSAGE_PROCESSOR.toLocalizedString() + (next++)); + thread.setDaemon(true); + return thread; + } + }; + BlockingQueue poolQueue; + if (MAX_WAITING_THREADS == Integer.MAX_VALUE) { + // no need for a queue since we have infinite threads + poolQueue = new SynchronousQueue(); + } else { + poolQueue = new OverflowQueueWithDMStats(this.stats.getWaitingQueueHelper()); + } + this.waitingPool = new PooledExecutorWithDMStats(poolQueue, + MAX_WAITING_THREADS, + this.stats.getWaitingPoolHelper(), + tf); + } + + { + ThreadFactory tf = new ThreadFactory() { + private int next = 0; + + public Thread newThread(final Runnable command) { + DistributionManager.this.stats.incWaitingThreadStarts();//will it be ok? + final Runnable r = new Runnable() { + public void run() { + DistributionManager.this.stats.incWaitingThreads(1);//will it be ok + try { + ConnectionTable.threadWantsSharedResources(); + Connection.makeReaderThread(); + runUntilShutdown(command); + } finally { + ConnectionTable.releaseThreadsSockets(); + DistributionManager.this.stats.incWaitingThreads(-1); + } + } + }; + Thread thread = new Thread(group, r, + LocalizedStrings.DistributionManager_PR_META_DATA_CLEANUP_MESSAGE_PROCESSOR.toLocalizedString() + (next++)); + thread.setDaemon(true); + return thread; + } + }; + BlockingQueue poolQueue; + poolQueue = new OverflowQueueWithDMStats(this.stats.getWaitingQueueHelper()); + this.prMetaDataCleanupThreadPool = new PooledExecutorWithDMStats(poolQueue, + MAX_PR_META_DATA_CLEANUP_THREADS, + this.stats.getWaitingPoolHelper(), + tf); + } + + { + BlockingQueue poolQueue; + if (INCOMING_QUEUE_LIMIT == 0) { + poolQueue = new OverflowQueueWithDMStats(this.stats.getPartitionedRegionQueueHelper()); + } else { + poolQueue = new OverflowQueueWithDMStats(INCOMING_QUEUE_LIMIT, this.stats.getPartitionedRegionQueueHelper()); + } + ThreadFactory tf = new ThreadFactory() { + private int next = 0; + + public Thread newThread(final Runnable command) { + DistributionManager.this.stats.incPartitionedRegionThreadStarts(); + final Runnable r = new Runnable() { + public void run() { + stats.incPartitionedRegionThreads(1); + try { + ConnectionTable.threadWantsSharedResources(); + Connection.makeReaderThread(); + runUntilShutdown(command); + } finally { + ConnectionTable.releaseThreadsSockets(); + stats.incPartitionedRegionThreads(-1); + } + } + }; + Thread thread = new Thread(group, r, + "PartitionedRegion Message Processor" + (next++)); + thread.setDaemon(true); + return thread; + } + }; + if (MAX_PR_THREADS > 1) { + this.partitionedRegionPool = new PooledExecutorWithDMStats(poolQueue, + MAX_PR_THREADS, this.stats.getPartitionedRegionPoolHelper(), tf); + } else { + SerialQueuedExecutorWithDMStats executor = new SerialQueuedExecutorWithDMStats(poolQueue, + this.stats.getPartitionedRegionPoolHelper(), tf); + this.partitionedRegionThread = executor; + } + + } + + { + BlockingQueue poolQueue; + if (INCOMING_QUEUE_LIMIT == 0) { + poolQueue = new OverflowQueueWithDMStats(this.stats.getFunctionExecutionQueueHelper()); + } else { + poolQueue = new OverflowQueueWithDMStats(INCOMING_QUEUE_LIMIT, this.stats.getFunctionExecutionQueueHelper()); + } + ThreadFactory tf = new ThreadFactory() { + private int next = 0; + + public Thread newThread(final Runnable command) { + DistributionManager.this.stats.incFunctionExecutionThreadStarts(); + final Runnable r = new Runnable() { + public void run() { + stats.incFunctionExecutionThreads(1); + isFunctionExecutionThread.set(Boolean.TRUE); + try { + ConnectionTable.threadWantsSharedResources(); + Connection.makeReaderThread(); + runUntilShutdown(command); + } finally { + ConnectionTable.releaseThreadsSockets(); + stats.incFunctionExecutionThreads(-1); + } + } + }; + Thread thread = new Thread(group, r, + "Function Execution Processor" + (next++)); + thread.setDaemon(true); + return thread; + } + }; + + if(MAX_FE_THREADS > 1){ + this.functionExecutionPool = new FunctionExecutionPooledExecutor(poolQueue, + MAX_FE_THREADS, this.stats.getFunctionExecutionPoolHelper(), tf,true /*for fn exec*/); + } else { + SerialQueuedExecutorWithDMStats executor = new SerialQueuedExecutorWithDMStats(poolQueue, + this.stats.getFunctionExecutionPoolHelper(), tf); + this.functionExecutionThread = executor; + } + + } + + if (!SYNC_EVENTS) { + this.memberEventThread = new Thread(group, new MemberEventInvoker(), + "DM-MemberEventInvoker"); + this.memberEventThread.setDaemon(true); + } + + StringBuffer sb = new StringBuffer(" (took "); + + long start = System.currentTimeMillis(); + + // Create direct channel first +// DirectChannel dc = new DirectChannel(new MyListener(this), system.getConfig(), logger, null); +// setDirectChannelPort(dc.getPort()); // store in a thread local + + // connect to JGroups + start = System.currentTimeMillis(); + + MyListener l = new MyListener(this); + membershipManager = MemberFactory.newMembershipManager(l, system.getConfig(), transport, stats); + + sb.append(System.currentTimeMillis() - start); + + this.myid = membershipManager.getLocalMember(); + +// dc.patchUpAddress(this.myid); +// id.setDirectChannelPort(dc.getPort()); + + // create the distribution channel + this.channel = new DistributionChannel(membershipManager); + + membershipManager.postConnect(); + + //Assert.assertTrue(this.getChannelMap().size() >= 1); + // System.out.println("Channel Map:"); + // for (Iterator iter = this.getChannelMap().entrySet().iterator(); + // iter.hasNext(); ) { + // Map.Entry entry = (Map.Entry) iter.next(); + // Object key = entry.getKey(); + // System.out.println(" " + key + " a " + + // key.getClass().getName() + " -> " + + // entry.getValue()); + // } + + sb.append(" ms)"); + + logger.info(LocalizedMessage.create(LocalizedStrings.DistributionManager_STARTING_DISTRIBUTIONMANAGER_0_1, + new Object[] { this.myid, (logger.isInfoEnabled(LogMarker.DM) ? sb.toString() : "")})); + + this.description = NAME + " on " + this.myid + " started at " + + (new Date(System.currentTimeMillis())).toString(); + + finishedConstructor = true; + } finally { + if (!finishedConstructor) { + askThreadsToStop(); // fix for bug 42039 + } + } + } + + /** + * Creates a new distribution manager + * + * @param system + * The distributed system to which this distribution manager + * will send messages. + */ + private DistributionManager( + InternalDistributedSystem system, + RemoteTransportConfig transport) + { + this(transport, system); + + boolean finishedConstructor = false; + try { + + isStartupThread.set(Boolean.TRUE); + + startThreads(); + + // Since we need a StartupResponseMessage to make sure licenses + // are compatible the following has been deadcoded. +// // For the time being, invoke processStartupResponse() +// String rejectionMessage = null; +// if (GemFireVersion.getGemFireVersion(). +// equals(state.getGemFireVersion())) { +// rejectionMessage = "Rejected new system node " + +// this.getDistributionManagerId() + " with version \"" + +// GemFireVersion.getGemFireVersion() + +// "\" because the distributed system's version is \"" + +// state.getGemFireVersion() + "\"."; +// } +// this.processStartupResponse(state.getCacheTime(), +// rejectionMessage); + + // Allow events to start being processed. + membershipManager.startEventProcessing(); + for (;;) { + this.getCancelCriterion().checkCancelInProgress(null); + boolean interrupted = Thread.interrupted(); + try { + membershipManager.waitForEventProcessing(); + break; + } + catch (InterruptedException e) { + interrupted = true; + } + finally { + if (interrupted) { + Thread.currentThread().interrupt(); + } + } + } + + synchronized (DistributionManager.class) { + openDMs++; + } + finishedConstructor = true; + } finally { + if (!finishedConstructor) { + askThreadsToStop(); // fix for bug 42039 + } + } + } + + //////////////////// Instance Methods ///////////////////// + + /** + * Returns true if the two members are on the same equivalent host based + * on overlapping IP addresses collected for all NICs during exchange of + * startup messages. + * + * @param member1 First member + * @param member2 Second member + */ + public boolean areOnEquivalentHost(InternalDistributedMember member1, + InternalDistributedMember member2) { + Set equivalents1 = getEquivalents(member1.getInetAddress()); + return equivalents1.contains(member2.getInetAddress()); + } + + /** + * Set the host equivalencies for a given host. This overrides any + * previous information in the tables. + * @param equivs list of InetAddress's that all point at same host + */ + public void setEquivalentHosts(Set equivs) { + Iterator it = equivs.iterator(); + synchronized (equivalentHosts) { + while (it.hasNext()) { + equivalentHosts.put(it.next(), Collections.unmodifiableSet(equivs)); + } + } + } + + public HashMap> getEquivalentHostsSnapshot() { + synchronized (this.equivalentHosts) { + return new HashMap>(this.equivalentHosts); + } + } + + /** + * Return all of the InetAddress's that are equivalent to the given one (same + * host) + * @param in host to match up + * @return all the addresses thus equivalent + */ + public Set getEquivalents(InetAddress in) { + Set result; + synchronized (equivalentHosts) { + result = equivalentHosts.get(in); + } + //DS 11/25/08 - It appears that when using VPN, the distributed member + //id is the vpn address, but that doesn't show up in the equivalents. + if(result == null) { + result = Collections.singleton(in); + } + return result; + } + + public void setRedundancyZone(InternalDistributedMember member, String redundancyZone) { + if(redundancyZone != null && !redundancyZone.equals("")) { + this.redundancyZones.put(member, redundancyZone); + } + if (member != getDistributionManagerId()) { + String relationship = areInSameZone(getDistributionManagerId(), member) ? "" + : "not "; + Object[] logArgs = new Object[] { member, relationship }; + logger.info(LocalizedMessage.create(LocalizedStrings.DistributionManager_DISTRIBUTIONMANAGER_MEMBER_0_IS_1_EQUIVALENT, logArgs)); + } + } + + /** + * Set the flag indicating that we should enforce unique zones. + * If we are already enforcing unique zones, keep it that way. + */ + public void setEnforceUniqueZone(boolean enforceUniqueZone) { + this.enforceUniqueZone |= enforceUniqueZone; + } + + public boolean enforceUniqueZone() { + return enforceUniqueZone; + } + + public String getRedundancyZone(InternalDistributedMember member) { + return redundancyZones.get(member); + } + + /** + * Asserts that distributionManagerType is LOCAL, GEMFIRE, or + * ADMIN_ONLY. Also asserts that the distributionManagerId + * (jgroups DistributedMember) has a VmKind that matches. + */ + private void assertDistributionManagerType() { + // Assert that dmType is one of the three DM types... + int theDmType = getDMType(); + switch (theDmType) { + case NORMAL_DM_TYPE: + case LONER_DM_TYPE: + case ADMIN_ONLY_DM_TYPE: + case LOCATOR_DM_TYPE: + break; + default: + Assert.assertTrue(false, "unknown distribution manager type"); + } + + // Assert InternalDistributedMember VmKind matches this DistributionManagerType... + final InternalDistributedMember theId = getDistributionManagerId(); + final int vmKind = theId.getVmKind(); + if (theDmType != vmKind) { + Assert.assertTrue(false, + "InternalDistributedMember has a vmKind of " + vmKind + + " instead of " + theDmType); + } + } + + public int getDMType() { + return this.dmType; + } + + public List getViewMembers() { + NetView result = null; + DistributionChannel ch = this.channel; + if (ch != null) { + MembershipManager mgr = ch.getMembershipManager(); + if (mgr != null) { + result = mgr.getView(); + } + } + if (result == null) { + result = new NetView(); + } + return result.getMembers(); + } + /* implementation of DM.getOldestMember */ + public DistributedMember getOldestMember(Collection c) throws NoSuchElementException { + List view = getViewMembers(); + for (int i=0; i it = v.getMembers().iterator(); + while (it.hasNext()) { + addNewMember(it.next()); + } + + // Figure out who the elder is... + selectElder(); // ShutdownException could be thrown here + } catch (Exception ex) { + throw new InternalGemFireException(LocalizedStrings.DistributionManager_COULD_NOT_PROCESS_INITIAL_VIEW.toLocalizedString(), ex); + } + try { + getWaitingThreadPool().execute(new Runnable() { + public void run() { + // call in background since it might need to send a reply + // and we are not ready to send messages until startup is finished + isStartupThread.set(Boolean.TRUE); + readyForMessages(); + } + }); + } + catch (VirtualMachineError err) { + SystemFailure.initiateFailure(err); + // If this ever returns, rethrow the error. We're poisoned + // now, so don't let this thread continue. + throw err; + } + catch (Throwable t) { + // Whenever you catch Error or Throwable, you must also + // catch VirtualMachineError (see above). However, there is + // _still_ a possibility that you are dealing with a cascading + // error condition, so you also need to check to see if the JVM + // is still usable: + SystemFailure.checkFailure(); + logger.fatal(LocalizedMessage.create(LocalizedStrings.DistributionManager_UNCAUGHT_EXCEPTION_CALLING_READYFORMESSAGES), t); + } + } + + protected void readyForMessages() { + synchronized (this) { + this.readyForMessages = true; + this.notifyAll(); + } + membershipManager.startEventProcessing(); + } + + protected void waitUntilReadyForMessages() { + if (readyForMessages) + return; +// membershipManager.waitForEventProcessing(); + synchronized (this) { + for (;;) { + if (readyForMessages) + break; + stopper.checkCancelInProgress(null); + boolean interrupted = Thread.interrupted(); + try { + this.wait(); + } + catch (InterruptedException e) { + interrupted = true; + stopper.checkCancelInProgress(e); + } + finally { + if (interrupted) { + Thread.currentThread().interrupt(); + } + } + } // for + } // synchronized + } + + /** + * Call when the DM is ready to send messages. + */ + private void readyToSendMsgs() { + synchronized (this.readyToSendMsgsLock) { + this.readyToSendMsgs = true; + this.readyToSendMsgsLock.notifyAll(); + } + } + /** + * Return when DM is ready to send out messages. + * @param msg the messsage that is currently being sent + */ + protected void waitUntilReadyToSendMsgs(DistributionMessage msg) { + if (this.readyToSendMsgs) { + return; + } + // another process may have been started in the same view, so we need + // to be responsive to startup messages and be able to send responses + if (msg instanceof StartupMessage || msg instanceof StartupResponseMessage + || msg instanceof AdminMessageType) { + return; + } + if (isStartupThread.get() != null) { + // let the startup thread send messages + // the only case I know of that does this is if we happen to log a + // message during startup and an alert listener has registered. + return; + } +// membershipManager.waitForEventProcessing(); + synchronized (this.readyToSendMsgsLock) { + for (;;) { + if (this.readyToSendMsgs) + break; + stopper.checkCancelInProgress(null); + boolean interrupted = Thread.interrupted(); + try { + this.readyToSendMsgsLock.wait(); + } + catch (InterruptedException e) { + interrupted = true; + stopper.checkCancelInProgress(e); + } + finally { + if (interrupted) { + Thread.currentThread().interrupt(); + } + } + } // for + } // synchronized + } + + // DM method + @Override + public void forceUDPMessagingForCurrentThread() { + membershipManager.forceUDPMessagingForCurrentThread(); + } + + // DM method + @Override + public void releaseUDPMessagingForCurrentThread() { + membershipManager.releaseUDPMessagingForCurrentThread(); + } + + /** + * Did an exception occur in one of the threads launched by this + * distribution manager? + */ + public boolean exceptionInThreads() { + return this.exceptionInThreads || this.threadGroup.getUncaughtExceptionsCount() > 0; + } + + /** + * Clears the boolean that determines whether or not an exception + * occurred in one of the worker threads. This method should be + * used for testing purposes only! + */ + void clearExceptionInThreads() { + this.exceptionInThreads = false; + this.threadGroup.clearUncaughtExceptionsCount(); + } + + /** + * Returns the current "cache time" in milliseconds since the epoch. + * The "cache time" takes into account skew among the local clocks + * on the various machines involved in the cache. + */ + public long cacheTimeMillis() { + return this.system.getClock().cacheTimeMillis(); + } + + + + /** + * Returns the id of this distribution manager. + */ + public InternalDistributedMember getDistributionManagerId() { + return this.myid; + } + + /** + * Returns an unmodifiable set containing the identities of all of + * the known (non-admin-only) distribution managers. + */ + public Set getDistributionManagerIds() { + // access to members synchronized under membersLock in order to + // ensure serialization + synchronized (this.membersLock) { + return this.members.keySet(); + } + } + + /** + * Adds the entry in {@link #hostedLocatorsAll} for a member with one or more + * hosted locators. The value is a collection of host[port] strings. If a + * bind-address was used for a locator then the form is bind-addr[port]. + * + * @since 6.6.3 + */ + public void addHostedLocators(InternalDistributedMember member, Collection locators, boolean isSharedConfigurationEnabled) { + synchronized (this.membersLock) { + if (locators == null || locators.isEmpty()) { + throw new IllegalArgumentException("Cannot use empty collection of locators"); + } + if (this.hostedLocatorsAll.isEmpty()) { + this.hostedLocatorsAll = new HashMap>(); + } + + if (!this.isSharedConfigEnabledForDS) { + this.isSharedConfigEnabledForDS = isSharedConfigurationEnabled; + } + + Map> tmp = + new HashMap>(this.hostedLocatorsAll); + tmp.remove(member); + tmp.put(member, locators); + tmp = Collections.unmodifiableMap(tmp); + this.hostedLocatorsAll = tmp; + + if (isSharedConfigurationEnabled) { + if (locators == null || locators.isEmpty()) { + throw new IllegalArgumentException("Cannot use empty collection of locators"); + } + if (this.hostedLocatorsWithSharedConfiguration.isEmpty()) { + this.hostedLocatorsWithSharedConfiguration = new HashMap>(); + } + tmp = new HashMap>(this.hostedLocatorsWithSharedConfiguration); + tmp.remove(member); + tmp.put(member, locators); + tmp = Collections.unmodifiableMap(tmp); + this.hostedLocatorsWithSharedConfiguration = tmp; + } + + } + } + + + private void removeHostedLocators(InternalDistributedMember member) { + synchronized (this.membersLock) { + if (this.hostedLocatorsAll.containsKey(member)) { + Map> tmp = + new HashMap>(this.hostedLocatorsAll); + tmp.remove(member); + if (tmp.isEmpty()) { + tmp = Collections.emptyMap(); + } else { + tmp = Collections.unmodifiableMap(tmp); + } + this.hostedLocatorsAll = tmp; + } + if (this.hostedLocatorsWithSharedConfiguration.containsKey(member)) { + Map> tmp = + new HashMap>(this.hostedLocatorsWithSharedConfiguration); + tmp.remove(member); + if (tmp.isEmpty()) { + tmp = Collections.emptyMap(); + } else { + tmp = Collections.unmodifiableMap(tmp); + } + this.hostedLocatorsWithSharedConfiguration = tmp; + } + } + } + + + + /** + * Gets the value in {@link #hostedLocatorsAll} for a member with one or more + * hosted locators. The value is a collection of host[port] strings. If a + * bind-address was used for a locator then the form is bind-addr[port]. + * + * @since 6.6.3 + */ + public Collection getHostedLocators(InternalDistributedMember member) { + synchronized (this.membersLock) { + return this.hostedLocatorsAll.get(member); + } + } + + /** + * Returns a copy of the map of all members hosting locators. The key is the + * member, and the value is a collection of host[port] strings. If a + * bind-address was used for a locator then the form is bind-addr[port]. + * + * @since 6.6.3 + */ + public Map> getAllHostedLocators() { + synchronized (this.membersLock) { + return this.hostedLocatorsAll; + } + } + /** + * Returns a copy of the map of all members hosting locators with shared configuration. The key is the + * member, and the value is a collection of host[port] strings. If a + * bind-address was used for a locator then the form is bind-addr[port]. + * + * @since 8.0 + */ + @Override + public Map> getAllHostedLocatorsWithSharedConfiguration() { + synchronized (this.membersLock) { + return this.hostedLocatorsWithSharedConfiguration; + } + } + /** + * Returns an unmodifiable set containing the identities of all of + * the known (including admin) distribution managers. + */ + public Set getDistributionManagerIdsIncludingAdmin() { + // access to members synchronized under membersLock in order to + // ensure serialization + synchronized (this.membersLock) { + return this.membersAndAdmin; + } + } + + + /** + * Returns the low-level distribution channel for this distribution + * manager. (brought over from ConsoleDistributionManager) + * + * @since 4.0 + */ + public DistributionChannel getDistributionChannel() { + return this.channel; + } + + + /** + * Returns a private-memory list containing the identities of all + * the other known distribution managers not including me. + */ + public Set getOtherDistributionManagerIds() { + // We return a modified copy of the list, so + // collect the old list and copy under the lock. + Set result = new HashSet(getDistributionManagerIds()); + + InternalDistributedMember me = getDistributionManagerId(); + result.remove(me); + + // It's okay for my own id to not be in the list of all ids yet. + return result; + } + @Override + public Set getOtherNormalDistributionManagerIds() { + // We return a modified copy of the list, so + // collect the old list and copy under the lock. + Set result = new HashSet(getNormalDistributionManagerIds()); + + InternalDistributedMember me = getDistributionManagerId(); + result.remove(me); + + // It's okay for my own id to not be in the list of all ids yet. + return result; + } + + public InternalDistributedMember getCanonicalId(DistributedMember id) { + // the members set is copy-on-write, so it is safe to iterate over it + InternalDistributedMember result = this.members.get(id); + if (result == null) { + return (InternalDistributedMember)id; + } + return result; + } + + /** + * Add a membership listener and return other DistribtionManagerIds + * as an atomic operation + */ + public Set addMembershipListenerAndGetDistributionManagerIds(MembershipListener l) { + // switched sync order to fix bug 30360 + synchronized (this.membersLock) { + // Don't let the members come and go while we are adding this + // listener. This ensures that the listener (probably a + // ReplyProcessor) gets a consistent view of the members. + addMembershipListener(l); + // Note it is ok to return the members set + // because we will never modify the returned set. + return members.keySet(); + } + } + + public void addNewMember(InternalDistributedMember member) { + // This is the place to cleanup the zombieMembers + int vmType = member.getVmKind(); + switch (vmType) { + case ADMIN_ONLY_DM_TYPE: + handleConsoleStartup(member); + break; + case LOCATOR_DM_TYPE: + case NORMAL_DM_TYPE: + handleManagerStartup(member); + break; + default: + throw new InternalGemFireError(LocalizedStrings.DistributionManager_UNKNOWN_MEMBER_TYPE_0.toLocalizedString(Integer.valueOf(vmType))); + } + } + + /** + * Returns the identity of this DistributionManager + */ + public InternalDistributedMember getId() { + return this.myid; + } + + /** + * Returns the id of the underlying distribution channel used for + * communication. + * + * @since 3.0 + */ + public long getChannelId() { + return this.channel.getId(); + } + + /** + * Adds a message to the outgoing queue. Note that + * message should not be modified after it has been + * added to the queue. After message is distributed, + * it will be recycled. + * + * @return list of recipients who did not receive the message + * @throws NotSerializableException if the content is not serializable + */ + public Set putOutgoingUserData(final DistributionMessage message) + throws NotSerializableException { + return sendMessage(message); + } + + /** + * Send outgoing data; message is guaranteed to be serialized. + * @return list of recipients who did not receive the message + * @throws InternalGemFireException if message is not serializable + */ + public Set putOutgoing(final DistributionMessage msg) { + try { + DistributionMessageObserver observer = DistributionMessageObserver.getInstance(); + if(observer != null) { + observer.beforeSendMessage(this, msg); + } + return sendMessage(msg); + } + catch (NotSerializableException e) { + throw new InternalGemFireException(e); + } + catch (ToDataException e) { + // exception from user code + throw e; + } + } + + @Override + public String toString() { + return this.description; + } + + /** + * @see #closeInProgress + */ + private final Object shutdownMutex = new Object(); + + /** + * Informs other members that this dm is shutting down. + * Stops the pusher, puller, and processor threads and closes the + * connection to the transport layer. + */ + protected void shutdown() { + // Make sure only one thread initiates shutdown... + synchronized (shutdownMutex) { + if (closeInProgress) { + return; + } + this.closeInProgress = true; + } // synchronized + + // [bruce] log shutdown at info level and with ID to balance the + // "Starting" message. recycleConn.conf is hard to debug w/o this + final String exceptionStatus = (this.exceptionInThreads() ? LocalizedStrings.DistributionManager_AT_LEAST_ONE_EXCEPTION_OCCURRED.toLocalizedString() : ""); + logger.info(LocalizedMessage.create( + LocalizedStrings.DistributionManager_SHUTTING_DOWN_DISTRIBUTIONMANAGER_0_1, + new Object[] {this.myid, exceptionStatus})); + + final long start = System.currentTimeMillis(); + try { + if (this.rootCause instanceof ForcedDisconnectException) { + if (logger.isDebugEnabled()) { + logger.debug("inhibiting sending of shutdown message to other members due to forced-disconnect"); + } + } else { + // Don't block indefinitely trying to send the shutdown message, in + // case other VMs in the system are ill-behaved. (bug 34710) + final Runnable r = new Runnable() { + public void run() { + try { + ConnectionTable.threadWantsSharedResources(); + sendShutdownMessage(); + } + catch (final CancelException e) { + // We were terminated. + logger.debug("Cancelled during shutdown message", e); + } + } + }; + final Thread t = new Thread(threadGroup, + r, LocalizedStrings.DistributionManager_SHUTDOWN_MESSAGE_THREAD_FOR_0.toLocalizedString(this.myid)); + t.start(); + boolean interrupted = Thread.interrupted(); + try { + t.join(MAX_STOP_TIME); + } + catch (final InterruptedException e) { + interrupted = true; + t.interrupt(); + logger.warn(LocalizedMessage.create( + LocalizedStrings.DistributionManager_INTERRUPTED_SENDING_SHUTDOWN_MESSAGE_TO_PEERS), e); + } + finally { + if (interrupted) { + Thread.currentThread().interrupt(); + } + } + + if (t.isAlive()) { + t.interrupt(); + logger.warn(LocalizedMessage.create(LocalizedStrings.DistributionManager_FAILED_SENDING_SHUTDOWN_MESSAGE_TO_PEERS_TIMEOUT)); + } + } + + } + finally { + this.shutdownMsgSent = true; // in case sendShutdownMessage failed.... + try { + this.uncleanShutdown(false); + } + finally { + final Long delta = Long.valueOf(System.currentTimeMillis() - start); + logger.info(LocalizedMessage.create( + LocalizedStrings.DistributionManager_DISTRIBUTIONMANAGER_STOPPED_IN_0_MS, delta)); + } + } + } + + private void askThreadsToStop() { + // Stop executors after they have finished + ExecutorService es; + es = this.serialThread; + if (es != null) { + es.shutdown(); + } + es = this.viewThread; + if (es != null) { + // Hmmm...OK, I'll let any view events currently in the queue be + // processed. Not sure it's very important whether they get + // handled... + es.shutdown(); + } + if (this.serialQueuedExecutorPool != null) { + this.serialQueuedExecutorPool.shutdown(); + } + es = this.functionExecutionThread; + if (es != null) { + es.shutdown(); + } + es = this.functionExecutionPool; + if (es != null) { + es.shutdown(); + } + es = this.partitionedRegionThread; + if (es != null) { + es.shutdown(); + } + es = this.partitionedRegionPool; + if (es != null) { + es.shutdown(); + } + es = this.highPriorityPool; + if (es != null) { + es.shutdown(); + } + es = this.waitingPool; + if (es != null) { + es.shutdown(); + } + es = this.prMetaDataCleanupThreadPool; + if (es != null) { + es.shutdown(); + } + es = this.threadPool; + if (es != null) { + es.shutdown(); + } + + Thread th = this.memberEventThread; + if (th != null) + th.interrupt(); + } + + private void waitForThreadsToStop(long timeInMillis) throws InterruptedException { + long start = System.currentTimeMillis(); + long remaining = timeInMillis; + + ExecutorService[] allExecutors = new ExecutorService[] { + this.serialThread, + this.viewThread, + this.functionExecutionThread, + this.functionExecutionPool, + this.partitionedRegionThread, + this.partitionedRegionPool, + this.highPriorityPool, + this.waitingPool, + this.prMetaDataCleanupThreadPool, + this.threadPool}; + for(ExecutorService es : allExecutors) { + if (es != null) { + es.awaitTermination(remaining, TimeUnit.MILLISECONDS); + } + remaining = timeInMillis - (System.currentTimeMillis() - start); + if(remaining <= 0) { + return; + } + } + + + this.serialQueuedExecutorPool.awaitTermination(remaining, TimeUnit.MILLISECONDS); + remaining = timeInMillis - (System.currentTimeMillis() - start); + if(remaining <= 0) { + return; + } + Thread th = this.memberEventThread; + if (th != null) { + th.interrupt(); // bug #43452 - this thread sometimes eats interrupts, so we interrupt it again here + th.join(remaining); + } + + } + + /** + * maximum time, in milliseconds, to wait for all threads to exit + */ + static private final int MAX_STOP_TIME = 20000; + + /** + * Time to sleep, in milliseconds, while polling to see if threads have + * finished + */ + static private final int STOP_PAUSE_TIME = 1000; + + /** + * Maximum number of interrupt attempts to stop a thread + */ + static private final int MAX_STOP_ATTEMPTS = 10; + + /** + * Cheap tool to kill a referenced thread + * + * @param t the thread to kill + */ + private void clobberThread(Thread t) { + if (t == null) + return; + if (t.isAlive()) { + logger.warn(LocalizedMessage.create(LocalizedStrings.DistributionManager_FORCING_THREAD_STOP_ON__0_, t)); + + // Start by being nice. + t.interrupt(); + +// we could be more violent here... +// t.stop(); + try { + for (int i = 0; i < MAX_STOP_ATTEMPTS && t.isAlive(); i++) { + t.join(STOP_PAUSE_TIME); + t.interrupt(); + } + } + catch (InterruptedException ex) { + logger.debug("Interrupted while attempting to terminate threads."); + Thread.currentThread().interrupt(); + // just keep going + } + + if (t.isAlive()) { + logger.warn(LocalizedMessage.create(LocalizedStrings.DistributionManager_CLOBBERTHREAD_THREAD_REFUSED_TO_DIE__0, t)); + } + } + } + + /** + * Cheap tool to examine an executor to see if it is still working + * @param tpe + * @return true if executor is still active + */ + private boolean executorAlive(ThreadPoolExecutor tpe, String name) + { + if (tpe == null) { + return false; + } else { + int ac = tpe.getActiveCount(); +// boolean result = tpe.getActiveCount() > 0; + if (ac > 0) { + if (logger.isDebugEnabled()) { + logger.debug("Still waiting for {} threads in '{}' pool to exit", ac, name); + } + return true; + } else { + return false; + } + } + } + + /** + * Wait for the ancillary queues to exit. Kills them if they are + * still around. + * + */ + private void forceThreadsToStop() { + long endTime = System.currentTimeMillis() + MAX_STOP_TIME; + String culprits = ""; + for (;;) { + boolean stillAlive = false; + culprits = ""; + if (executorAlive(this.serialThread, "serial thread")) { + stillAlive = true; + culprits = culprits + " serial thread;"; + } + if (executorAlive(this.viewThread, "view thread")) { + stillAlive = true; + culprits = culprits + " view thread;"; + } + if (executorAlive(this.partitionedRegionThread, "partitioned region thread")) { + stillAlive = true; + culprits = culprits + " partitioned region thread;"; + } + if (executorAlive(this.partitionedRegionPool, "partitioned region pool")) { + stillAlive = true; + culprits = culprits + " partitioned region pool;"; + } + if (executorAlive(this.highPriorityPool, "high priority pool")) { + stillAlive = true; + culprits = culprits + " high priority pool;"; + } + if (executorAlive(this.waitingPool, "waiting pool")) { + stillAlive = true; + culprits = culprits + " waiting pool;"; + } + if (executorAlive(this.prMetaDataCleanupThreadPool, "prMetaDataCleanupThreadPool")) { + stillAlive = true; + culprits = culprits + " special waiting pool;"; + } + if (executorAlive(this.threadPool, "thread pool")) { + stillAlive = true; + culprits = culprits + " thread pool;"; + } + + if (!stillAlive) + return; + + long now = System.currentTimeMillis(); + if (now >= endTime) + break; + + try { + Thread.sleep(STOP_PAUSE_TIME); + } + catch (InterruptedException e) { + Thread.currentThread().interrupt(); + // Desperation, the shutdown thread is being killed. Don't + // consult a CancelCriterion. + logger.warn(LocalizedMessage.create( + LocalizedStrings.DistributionManager_INTERRUPTED_DURING_SHUTDOWN), e); + break; + } + } // for + + logger.warn(LocalizedMessage.create( + LocalizedStrings.DistributionManager_DAEMON_THREADS_ARE_SLOW_TO_STOP_CULPRITS_INCLUDE_0, culprits)); + + // Kill with no mercy + if (this.serialThread != null) { + this.serialThread.shutdownNow(); + } + if (this.viewThread != null) { + this.viewThread.shutdownNow(); + } + if (this.functionExecutionThread != null) { + this.functionExecutionThread.shutdownNow(); + } + if (this.functionExecutionPool != null) { + this.functionExecutionPool.shutdownNow(); + } + if (this.partitionedRegionThread != null) { + this.partitionedRegionThread.shutdownNow(); + } + if (this.partitionedRegionPool != null) { + this.partitionedRegionPool.shutdownNow(); + } + if (this.highPriorityPool != null) { + this.highPriorityPool.shutdownNow(); + } + if (this.waitingPool != null) { + this.waitingPool.shutdownNow(); + } + if (this.prMetaDataCleanupThreadPool != null) { + this.prMetaDataCleanupThreadPool.shutdownNow(); + } + if (this.threadPool != null) { + this.threadPool.shutdownNow(); + } + + Thread th = this.memberEventThread; + if (th != null) { + clobberThread(th); + } + } + + private volatile boolean shutdownInProgress = false; + + /** guard for membershipViewIdAcknowledged */ + private final Object membershipViewIdGuard = new Object(); + + /** the latest view ID that has been processed by all membership listeners */ + private long membershipViewIdAcknowledged; + + public boolean shutdownInProgress() { + return this.shutdownInProgress; + } + + /** + * Stops the pusher, puller and processor threads and closes the + * connection to the transport layer. This should only be used from + * shutdown() or from the dm initialization code + */ + private void uncleanShutdown(boolean duringStartup) + { + try { + this.closeInProgress = true; // set here also to fix bug 36736 + removeAllHealthMonitors(); + shutdownInProgress = true; + if (this.channel != null) { + this.channel.setShutDown(); + } + + askThreadsToStop(); + + // wait a moment before asking threads to terminate + try { waitForThreadsToStop(1000); } + catch (InterruptedException ie) { + // No need to reset interrupt bit, we're really trying to quit... + } + forceThreadsToStop(); + +// // bug36329: desperation measure, send a second interrupt? +// try { Thread.sleep(1000); } +// catch (InterruptedException ie) { +// // No need to reset interrupt bit, we're really trying to quit... +// } +// forceThreadsToStop(); + } // try + finally { + // ABSOLUTELY ESSENTIAL that we close the distribution channel! + try { + // For safety, but channel close in a finally AFTER this... + if (this.stats != null) { + this.stats.close(); + try { Thread.sleep(100); } + catch (InterruptedException ie) { + // No need to reset interrupt bit, we're really trying to quit... + } + } + } + finally { + if (this.channel != null) { + logger.info(LocalizedMessage.create(LocalizedStrings.DistributionManager_NOW_CLOSING_DISTRIBUTION_FOR__0, this.myid)); + this.channel.disconnect(duringStartup); +// this.channel = null; DO NOT NULL OUT INSTANCE VARIABLES AT SHUTDOWN - bug #42087 + } + } + } + } + + /** + * Returns the distributed system to which this distribution manager + * is connected. + */ + public InternalDistributedSystem getSystem() { + return this.system; + } + + /** + * Returns the transport configuration for this distribution manager + * @since 5.0 + */ + public RemoteTransportConfig getTransport() { + return this.transport; + } + + + /** + * Adds a MembershipListener to this distribution + * manager. + */ + public void addMembershipListener(MembershipListener l) { + this.membershipListeners.putIfAbsent(l, Boolean.TRUE); + } + + /** + * Removes a MembershipListener from this distribution + * manager. + * + * @throws IllegalArgumentException + * l was not registered on this distribution + * manager + */ + public void removeMembershipListener(MembershipListener l) { + this.membershipListeners.remove(l); + } + + /** + * Adds a MembershipListener to this distribution + * manager. + * @since 5.7 + */ + public void addAllMembershipListener(MembershipListener l) { + synchronized (this.allMembershipListenersLock) { + Set newAllMembershipListeners = + new HashSet(this.allMembershipListeners); + newAllMembershipListeners.add(l); + this.allMembershipListeners = newAllMembershipListeners; + } + } + + /** + * Removes a MembershipListener listening for all members + * from this distribution manager. + * + * @throws IllegalArgumentException + * l was not registered on this distribution + * manager + * @since 5.7 + */ + public void removeAllMembershipListener(MembershipListener l) { + synchronized (this.allMembershipListenersLock) { + Set newAllMembershipListeners = + new HashSet(this.allMembershipListeners); + if (!newAllMembershipListeners.remove(l)) { + // There seems to be a race condition in which + // multiple departure events can be registered + // on the same peer. We regard this as benign. + // FIXME when membership events become sane again +// String s = "MembershipListener was never registered"; +// throw new IllegalArgumentException(s); + } + this.allMembershipListeners = newAllMembershipListeners; + } + } + + /** + * Returns true if this DM or the DistributedSystem owned by + * it is closing or is closed. + */ + private boolean isCloseInProgress() { + if (closeInProgress) { + return true; + } + InternalDistributedSystem ds = getSystem(); + if (ds != null && ds.isDisconnecting()) { + return true; + } + return false; + } + + private void handleViewInstalledEvent(ViewInstalledEvent ev) { + synchronized(this.membershipViewIdGuard) { + this.membershipViewIdAcknowledged = ev.getViewId(); + this.membershipViewIdGuard.notifyAll(); + } + } + + /** + * This stalls waiting for the current membership view (as seen by the + * membership manager) to be acknowledged by all membership listeners + */ + public void waitForViewInstallation(long id) throws InterruptedException { + if (id <= this.membershipViewIdAcknowledged) { + return; + } + synchronized(this.membershipViewIdGuard) { + while (this.membershipViewIdAcknowledged < id && this.stopper.cancelInProgress() == null) { + if (logger.isDebugEnabled()) { + logger.debug("waiting for view {}. Current DM view processed by all listeners is {}", id, this.membershipViewIdAcknowledged); + } + this.membershipViewIdGuard.wait(); + } + } + } + + protected void handleMemberEvent(MemberEvent ev) { + ev.handleEvent(this); + } + + /** + * This thread processes member events as they occur. + * + * @see com.gemstone.gemfire.distributed.internal.DistributionManager.MemberCrashedEvent + * @see com.gemstone.gemfire.distributed.internal.DistributionManager.MemberJoinedEvent + * @see com.gemstone.gemfire.distributed.internal.DistributionManager.MemberDepartedEvent + * + */ + protected class MemberEventInvoker implements Runnable { + + + @SuppressWarnings("synthetic-access") + public void run() { + for (;;) { + SystemFailure.checkFailure(); + // bug 41539 - member events need to be delivered during shutdown + // or reply processors may hang waiting for replies from + // departed members +// if (getCancelCriterion().cancelInProgress() != null) { +// break; // no message, just quit +// } + if (!DistributionManager.this.system.isConnected && + DistributionManager.this.isClosed()) { + break; + } + try { + MemberEvent ev = (MemberEvent)DistributionManager.this + .membershipEventQueue.take(); + handleMemberEvent(ev); + } + catch (InterruptedException e) { + if (isCloseInProgress()) { + if (logger.isTraceEnabled()) { + logger.trace("MemberEventInvoker: InterruptedException during shutdown"); + } + } + else { + logger.warn(LocalizedMessage.create(LocalizedStrings.DistributionManager_UNEXPECTED_INTERRUPTEDEXCEPTION), e); + } + break; + } + catch (DistributedSystemDisconnectedException e) { + break; + } + catch (CancelException e) { + if (isCloseInProgress()) { + if (logger.isTraceEnabled()) { + logger.trace("MemberEventInvoker: cancelled"); + } + } + else { + logger.warn(LocalizedMessage.create(LocalizedStrings.DistributionManager_UNEXPECTED_CANCELLATION), e); + } + break; + } + catch (Exception e) { + logger.fatal(LocalizedMessage.create(LocalizedStrings.DistributionManager_UNCAUGHT_EXCEPTION_PROCESSING_MEMBER_EVENT), e); + } + } // for + if (logger.isTraceEnabled()) { + logger.trace("MemberEventInvoker on {} stopped", DistributionManager.this); + } + } + } + + private void addMemberEvent(MemberEvent ev) { + if (SYNC_EVENTS) { + handleMemberEvent(ev); + } else { + stopper.checkCancelInProgress(null); + boolean interrupted = Thread.interrupted(); + try { + this.membershipEventQueue.put(ev); + } catch (InterruptedException ex) { + interrupted = true; + stopper.checkCancelInProgress(ex); + handleMemberEvent(ev); // FIXME why??? + } + finally { + if (interrupted) { + Thread.currentThread().interrupt(); + } + } + } + } + + + /** + * Stops the threads associated with this distribution manager and + * closes the connection to the transport layer. + */ + public void close() { + if (!closed) { + this.shutdown(); + logger.info(LocalizedMessage.create( + LocalizedStrings.DistributionManager_MARKING_DISTRIBUTIONMANAGER_0_AS_CLOSED, this.myid)); + MembershipLogger.logShutdown(this.myid); + closed = true; + synchronized (DistributionManager.class) { + openDMs--; + } + } + } + + public void throwIfDistributionStopped() { + if (this.shutdownMsgSent) { + throw new DistributedSystemDisconnectedException(LocalizedStrings.DistributionManager_MESSAGE_DISTRIBUTION_HAS_TERMINATED.toLocalizedString(), this.getRootCause()); + } + } + + /** + * Returns true if this distribution manager has been closed. + */ + public boolean isClosed() { + return this.closed; + } + + /** + * Makes note of a new administration console (admin-only member). + */ + public void addAdminConsole(InternalDistributedMember theId) { + logger.info(LocalizedMessage.create( + LocalizedStrings.DistributionManager_NEW_ADMINISTRATION_MEMBER_DETECTED_AT_0, theId)); + synchronized(this.adminConsolesLock) { + HashSet tmp = new HashSet(this.adminConsoles); + tmp.add(theId); + this.adminConsoles = Collections.unmodifiableSet(tmp); + } + } + + public DMStats getStats() { + return this.stats; + } + + public DistributionConfig getConfig() { + DistributionConfig result = null; + InternalDistributedSystem sys = getSystem(); + if (sys != null) { + result = system.getConfig(); + } + return result; + } + +// /** +// * Initializes and returns a DistributedSystem to be +// * sent to new members of the distributed system. +// * +// * @since 3.0 +// */ +// protected DistributedState getNewDistributedState() { +// DistributedState state = new DistributedState(); +// state.setGemFireVersion(GemFireVersion.getGemFireVersion()); +// state.setCacheTime(this.cacheTimeMillis()); +// return state; +//} + + private static final int STARTUP_TIMEOUT = + Integer.getInteger("DistributionManager.STARTUP_TIMEOUT", 15000).intValue(); + + public static final boolean DEBUG_NO_ACKNOWLEDGEMENTS = Boolean.getBoolean("DistributionManager.DEBUG_NO_ACKNOWLEDGEMENTS"); + + public Set getAllOtherMembers() { + Set result = new HashSet(getDistributionManagerIdsIncludingAdmin()); + result.remove(getDistributionManagerId()); + return result; + } + + @Override // DM method + public void retainMembersWithSameOrNewerVersion(Collection members, Version version) { + for (Iterator it = members.iterator(); it.hasNext(); ) { + InternalDistributedMember id = it.next(); + if (id.getVersionObject().compareTo(version) < 0) { + it.remove(); + } + } + } + + @Override // DM method + public void removeMembersWithSameOrNewerVersion(Collection members, Version version) { + for (Iterator it = members.iterator(); it.hasNext(); ) { + InternalDistributedMember id = it.next(); + if (id.getVersionObject().compareTo(version) >= 0) { + it.remove(); + } + } + } + + /** + * Add a membership listener for all members + * and return other DistribtionManagerIds as an atomic operation + * @since 5.7 + */ + public Set addAllMembershipListenerAndGetAllIds(MembershipListener l) { + // TO fix this deadlock: + // "View Message Processor": + // waiting to lock monitor 0x080f691c (object 0xe3ba7680, a com.gemstone.gemfire.distributed.internal.DistributionManager$MembersLock), + // which is held by "RMI TCP Connection(259)-10.80.10.55" + // "RMI TCP Connection(259)-10.80.10.55": + // waiting to lock monitor 0x080f6598 (object 0xe3bacd90, a com.gemstone.gemfire.distributed.internal.membership.jgroup.JGroupMembershipManager$ViewLock), + // which is held by "View Message Processor" + // NEED to sync on viewLock first. + DistributionChannel ch = this.channel; + if (ch != null) { + MembershipManager mgr = ch.getMembershipManager(); + if (mgr != null) { + mgr.getViewLock().writeLock().lock(); + try { + synchronized (this.membersLock) { + // Don't let the members come and go while we are adding this + // listener. This ensures that the listener (probably a + // ReplyProcessor) gets a consistent view of the members. + addAllMembershipListener(l); + return getDistributionManagerIdsIncludingAdmin(); + } + } finally { + mgr.getViewLock().writeLock().unlock(); + } + } + } + // If we have no channel or MembershipManager then the view is empty + synchronized (this.membersLock) { + // Don't let the members come and go while we are adding this + // listener. This ensures that the listener (probably a + // ReplyProcessor) gets a consistent view of the members. + addAllMembershipListener(l); + return Collections.EMPTY_SET; + } + } + + /** + * Sends a startup message and waits for a response. + * Returns true if response received; false if it timed out or there are no peers. + */ + protected boolean sendStartupMessage(StartupOperation op, boolean cancelOnTimeout) + throws InterruptedException + { + if (Thread.interrupted()) throw new InterruptedException(); + this.receivedStartupResponse = false; + boolean ok = false; + + // Be sure to add ourself to the equivalencies list! + Set equivs = StartupMessage.getMyAddresses(this); + if (equivs == null || equivs.size() == 0) { + // no network interface + equivs = new HashSet(); + try { + equivs.add(SocketCreator.getLocalHost()); + } catch (UnknownHostException e) { + // can't even get localhost + if (getViewMembers().size() > 1) { + throw new SystemConnectException("Unable to examine network cards and other members exist"); + } + } + } + setEquivalentHosts(equivs); + setEnforceUniqueZone(getConfig().getEnforceUniqueHost()); + String redundancyZone = getConfig().getRedundancyZone(); + if(redundancyZone != null && !redundancyZone.equals("")) { + setEnforceUniqueZone(true); + } + setRedundancyZone(getDistributionManagerId(), redundancyZone); + if (logger.isDebugEnabled()) { + StringBuffer sb = new StringBuffer(); + sb.append("Equivalent IPs for this host: "); + Iterator it = equivs.iterator(); + while (it.hasNext()) { + InetAddress in = (InetAddress)it.next(); + sb.append(in.toString()); + if (it.hasNext()) { + sb.append(", "); + } + } // while + logger.debug(sb); + } + + // we need to send this to everyone else; even admin vm + Set allOthers = new HashSet(getViewMembers()); + allOthers.remove(getDistributionManagerId()); + + if (allOthers.isEmpty()) { + return false; // no peers, we are alone. + } + + try { + ok = op.sendStartupMessage(allOthers, STARTUP_TIMEOUT, equivs, + redundancyZone, enforceUniqueZone()); + } + catch (Exception re) { + throw new SystemConnectException(LocalizedStrings.DistributionManager_ONE_OR_MORE_PEERS_GENERATED_EXCEPTIONS_DURING_CONNECTION_ATTEMPT.toLocalizedString(), re); + } + if (this.rejectionMessage != null) { + throw new IncompatibleSystemException(rejectionMessage); + } + + boolean isAdminDM = + getId().getVmKind() == DistributionManager.ADMIN_ONLY_DM_TYPE + || getId().getVmKind() == DistributionManager.LOCATOR_DM_TYPE + || DistributionManager.isDedicatedAdminVM + || Boolean.getBoolean(InternalLocator.FORCE_LOCATOR_DM_TYPE); + + boolean receivedAny = this.receivedStartupResponse; + + if (!ok) { // someone didn't reply + int unresponsiveCount; + + synchronized (unfinishedStartupsLock) { + if (unfinishedStartups == null) + unresponsiveCount = 0; + else + unresponsiveCount = unfinishedStartups.size(); + + if (unresponsiveCount != 0) { + if (Boolean.getBoolean("DistributionManager.requireAllStartupResponses")) { + throw new SystemConnectException(LocalizedStrings.DistributionManager_NO_STARTUP_REPLIES_FROM_0.toLocalizedString(unfinishedStartups)); + } + } + } // synchronized + + + // Bug 35887: + // If there are other members, we must receive at least _one_ response + if (allOthers.size() != 0) { // there exist others + if (!receivedAny) { // and none responded + StringBuffer sb = new StringBuffer(); + Iterator itt = allOthers.iterator(); + while (itt.hasNext()) { + Object m = itt.next(); + sb.append(m.toString()); + if (itt.hasNext()) + sb.append(", "); + } + if (DEBUG_NO_ACKNOWLEDGEMENTS) { + printStacks(allOthers, false); + } + throw new SystemConnectException(LocalizedStrings.DistributionManager_RECEIVED_NO_CONNECTION_ACKNOWLEDGMENTS_FROM_ANY_OF_THE_0_SENIOR_CACHE_MEMBERS_1.toLocalizedString(new Object[] {Integer.toString(allOthers.size()), sb.toString()})); + } // and none responded + } // there exist others + + InternalDistributedMember e = getElderId(); + if (e != null) { // an elder exists + boolean unresponsiveElder; + synchronized (unfinishedStartupsLock) { + if (unfinishedStartups == null) + unresponsiveElder = false; + else + unresponsiveElder = unfinishedStartups.contains(e); + } + if (unresponsiveElder) { + logger.warn(LocalizedMessage.create( + LocalizedStrings.DistributionManager_FORCING_AN_ELDER_JOIN_EVENT_SINCE_A_STARTUP_RESPONSE_WAS_NOT_RECEIVED_FROM_ELDER__0_, e)); + handleManagerStartup(e); + } + } // an elder exists + } // someone didn't reply + return receivedAny; + } + + /** + * List of InternalDistributedMember's that we have + * not received startup replies from. If null, we have + * not finished sending the startup message. + *

+ * Must be synchronized using {@link #unfinishedStartupsLock} + */ + private Set unfinishedStartups = null; + + /** + * Synchronization for {@link #unfinishedStartups} + */ + private final Object unfinishedStartupsLock = new Object(); + + public void setUnfinishedStartups(Collection s) { + synchronized (unfinishedStartupsLock) { + Assert.assertTrue(unfinishedStartups == null, + "Set unfinished startups twice"); + unfinishedStartups = new HashSet(s); + + // OK, I don't _quite_ trust the list to be current, so let's + // prune it here. + Iterator it = unfinishedStartups.iterator(); + synchronized (this.membersLock) { + while (it.hasNext()) { + InternalDistributedMember m = (InternalDistributedMember)it.next(); + if (!isCurrentMember(m)) { + it.remove(); + } + } // while + } // synchronized + } + } + + public void removeUnfinishedStartup(InternalDistributedMember m, + boolean departed) { + synchronized (unfinishedStartupsLock) { + if (logger.isDebugEnabled()) { + logger.debug("removeUnfinishedStartup for {} wtih {}", m, unfinishedStartups); + } + if (unfinishedStartups == null) + return; // not yet done with startup + if (!unfinishedStartups.remove(m)) + return; + StringId msg = null; + if (departed) { + msg = LocalizedStrings.DistributionManager_STOPPED_WAITING_FOR_STARTUP_REPLY_FROM_0_BECAUSE_THE_PEER_DEPARTED_THE_VIEW; + } + else { + msg = LocalizedStrings.DistributionManager_STOPPED_WAITING_FOR_STARTUP_REPLY_FROM_0_BECAUSE_THE_REPLY_WAS_FINALLY_RECEIVED; + } + logger.info(LocalizedMessage.create(msg, m)); + int numLeft = unfinishedStartups.size(); + if (numLeft != 0) { + logger.info(LocalizedMessage.create( + LocalizedStrings.DistributionManager_STILL_AWAITING_0_RESPONSES_FROM_1, + new Object[] {Integer.valueOf(numLeft), unfinishedStartups})); + } + } // synchronized + } + + /** + * Processes the first startup response. + * + * @see StartupResponseMessage#process + */ + void processStartupResponse(InternalDistributedMember sender, + long otherCacheTime, String theRejectionMessage) { + removeUnfinishedStartup(sender, false); + synchronized (this) { + if (!this.receivedStartupResponse) { + this.receivedStartupResponse = true; + } + if (theRejectionMessage != null && this.rejectionMessage == null) { + // remember the first non-null rejection. This fixes bug 33266 + this.rejectionMessage = theRejectionMessage; + } + } + } + + /** + * Processes the first startup response. + * + * @see StartupResponseMessage#process + */ + void processStartupResponse(InternalDistributedMember sender, + String theRejectionMessage) { + removeUnfinishedStartup(sender, false); + synchronized (this) { + if (!this.receivedStartupResponse) { + // only set the cacheTimeDelta once + this.receivedStartupResponse = true; + } + if (theRejectionMessage != null && this.rejectionMessage == null) { + // remember the first non-null rejection. This fixes bug 33266 + this.rejectionMessage = theRejectionMessage; + } + } + } + + /** + * Based on a recent JGroups view, return a member that might be the + * next elder. + * @return the elder candidate, possibly this VM. + */ + private InternalDistributedMember getElderCandidate() { + List theMembers = getViewMembers(); + +// Assert.assertTrue(!closeInProgress +// && theMembers.contains(this.myid)); // bug36202? + + int elderCandidates = 0; + Iterator it; + + // for bug #50510 we need to know if there are any members older than v8.0 + it = theMembers.iterator(); + boolean anyPre80Members = false; + while (it.hasNext()) { + InternalDistributedMember member = it.next(); + if (member.getVersionObject().compareTo(Version.GFE_80) < 0) { + anyPre80Members = true; + } + } + + // determine number of elder candidates (unless adam) + if (!this.adam) { + it = theMembers.iterator(); + while (it.hasNext()) { + InternalDistributedMember member = it.next(); + int managerType = member.getVmKind(); + if (managerType == ADMIN_ONLY_DM_TYPE) + continue; + + if (managerType == LOCATOR_DM_TYPE) { + // Fix for #50510 - pre-8.0 members will not let a locator be the elder + // so we need to make the same decision here + if (anyPre80Members) { + continue; + } + } + + // Fix for #45566. Using a surprise member as the elder can cause a + // deadlock. + if (getMembershipManager().isSurpriseMember(member)) { + continue; + } + + elderCandidates++; + if (elderCandidates > 1) { + // If we have more than one candidate then we are not adam + break; + } + } // while + } + + // Second pass over members... + it = theMembers.iterator(); + while (it.hasNext()) { + InternalDistributedMember member = it.next(); + int managerType = member.getVmKind(); + if (managerType == ADMIN_ONLY_DM_TYPE) + continue; + + if (managerType == LOCATOR_DM_TYPE) { + // Fix for #50510 - pre-8.0 members will not let a locator be the elder + // so we need to make the same decision here + if (anyPre80Members) { + continue; + } + } + + // Fix for #45566. Using a surprise member as the elder can cause a + // deadlock. + if (getMembershipManager().isSurpriseMember(member)) { + continue; + } + + if (member.equals(this.myid)) { // c'est moi + if (!this.adam && elderCandidates == 1) { + this.adam = true; + logger.info(LocalizedMessage.create(LocalizedStrings.DistributionManager_0_IS_THE_ELDER_AND_THE_ONLY_MEMBER, this.myid)); + } else { + logger.info(LocalizedMessage.create(LocalizedStrings.DistributionManager_I_0_AM_THE_ELDER, this.myid)); + } + } // c'est moi + return member; + } // while + // If we get this far then no elder exists + return null; + } + + /** + * Select a new elder + * + */ + protected void selectElder() { + getSystem().getCancelCriterion().checkCancelInProgress(null); // bug 37884, if DS is disconnecting, throw exception + + // Once we are the elder, we're stuck until we leave the view. + if (this.myid.equals(this.elder)) { + return; + } + + // Determine who is the elder... + InternalDistributedMember candidate = getElderCandidate(); + if (candidate == null) { + changeElder(null); + return; // No valid elder in current context + } + + // Carefully switch to new elder + synchronized (this.elderMonitor) { + if (!candidate.equals(this.elder)) { + if (logger.isDebugEnabled()) { + logger.debug("The elder is: {} (was {})", candidate, this.elder); + } + changeElder(candidate); + } + } // synchronized + } + + private String prettifyReason(String r) { + final String str = "java.io.IOException:"; + if (r.startsWith(str)) { + return r.substring(str.length()); + } + return r; + } + + /** + * Returns true if id was removed. + * Returns false if it was not in the list of managers. + */ + private boolean removeManager(InternalDistributedMember theId, + boolean crashed, String p_reason) { + String reason = p_reason; + boolean result = false; // initialization shouldn't be required, but... + + // Test once before acquiring the lock, fault tolerance for potentially + // recursive (and deadlock) conditions -- bug33626 + // Note that it is always safe to _read_ {@link members} without locking + if (isCurrentMember(theId)) { + // Destroy underlying member's resources + reason = prettifyReason(reason); + synchronized (this.membersLock) { + if (logger.isDebugEnabled()) { + logger.debug("DistributionManager: removing member <{}>; crashed {}; reason = {}", theId, crashed, reason); + } + Map tmp = new HashMap(this.members); + if (tmp.remove(theId) != null) { + // Note we don't modify in place. This allows reader to get snapshots + // without locking. + if (tmp.isEmpty()) { + tmp = Collections.EMPTY_MAP; + } else { + tmp = Collections.unmodifiableMap(tmp); + } + this.members = tmp; + result = true; + + } else { + result = false; + // Don't get upset since this can happen twice due to + // an explicit remove followed by an implicit one caused + // by a JavaGroup view change + } + Set tmp2 = new HashSet(this.membersAndAdmin); + if(tmp2.remove(theId)) { + if (tmp2.isEmpty()) { + tmp2 = Collections.EMPTY_SET; + } else { + tmp2 = Collections.unmodifiableSet(tmp2); + } + this.membersAndAdmin = tmp2; + } + this.removeHostedLocators(theId); + } // synchronized + } // if + + // In any event, make sure that this member is no longer an elder. + if (!theId.equals(myid) && theId.equals(elder)) { + try { + selectElder(); + } + catch (DistributedSystemDisconnectedException e) { + // ignore + } + } + + redundancyZones.remove(theId); + + return result; + } + + /** + * Makes note of a new distribution manager that has started up in + * the distributed cache. Invokes the appropriately listeners. + * + * @param theId + * The id of the distribution manager starting up + * + */ + private void handleManagerStartup(InternalDistributedMember theId) { + HashMap tmp = null; + synchronized (this.membersLock) { + // Note test is under membersLock + if (members.containsKey(theId)) { + return; // already accounted for + } + + // Note we don't modify in place. This allows reader to get snapshots + // without locking. + tmp = new HashMap(this.members); + tmp.put(theId,theId); + this.members = Collections.unmodifiableMap(tmp); + + Set stmp = new HashSet(this.membersAndAdmin); + stmp.add(theId); + this.membersAndAdmin = Collections.unmodifiableSet(stmp); + } // synchronized + + if (theId.getVmKind() != DistributionManager.LOCATOR_DM_TYPE) { + this.stats.incNodes(1); + } + logger.info(LocalizedMessage.create( + LocalizedStrings.DistributionManager_ADMITTING_MEMBER_0_NOW_THERE_ARE_1_NONADMIN_MEMBERS, + new Object[] { theId, Integer.valueOf(tmp.size())})); + addMemberEvent(new MemberJoinedEvent(theId)); + } + + /** + * Return true if id is a current member of our system. + */ + public boolean isCurrentMember(InternalDistributedMember id) { + Set m; + synchronized (this.membersLock) { + // access to members synchronized under membersLock in order to + // ensure serialization + m = this.membersAndAdmin; + } + return m.contains(id); + } + + /** + * Makes note of a new console that has started up in + * the distributed cache. + * + */ + private void handleConsoleStartup(InternalDistributedMember theId) { + // if we have an all listener then notify it NOW. + HashSet tmp = null; + synchronized (this.membersLock) { + // Note test is under membersLock + if (membersAndAdmin.contains(theId)) + return; // already accounted for + + // Note we don't modify in place. This allows reader to get snapshots + // without locking. + tmp = new HashSet(this.membersAndAdmin); + tmp.add(theId); + this.membersAndAdmin = Collections.unmodifiableSet(tmp); + } // synchronized + + for (Iterator iter = allMembershipListeners.iterator(); + iter.hasNext(); ) { + MembershipListener listener = (MembershipListener) iter.next(); + listener.memberJoined(theId); + } + logger.info(LocalizedMessage.create(LocalizedStrings.DistributionManager_DMMEMBERSHIP_ADMITTING_NEW_ADMINISTRATION_MEMBER__0_, theId)); + // Note that we don't add the member to the list of admin consoles until + // we receive a message from them. + } + + /** + * Process an incoming distribution message. + * This includes scheduling it correctly based on the message's + * nioPriority (executor type) + */ + public void handleIncomingDMsg(DistributionMessage message) { + /* disabled - not being used + if (message instanceof OutgoingMessageWrapper) { + putOutgoing(((OutgoingMessageWrapper)message).getMessage()); + return; + } + */ + +// long latency = message.getLatency(); +// this.stats.incMessageTransitTime(latency * 1000000L); +// message.resetTimestamp(); + stats.incReceivedMessages(1L); + stats.incReceivedBytes(message.getBytesRead()); + stats.incMessageChannelTime(message.resetTimestamp()); + + // message.setRecipient(DistributionManager.this.getId()); + + if (logger.isDebugEnabled()) { + logger.debug("Received message '{}' from <{}>", message, message.getSender()); + } + scheduleIncomingMessage(message); + } + + /** + * Makes note of a console that has shut down. + * @param theId + * The id of the console shutting down + * @param crashed only true if we detect this id to be gone from + * a javagroup view + * + * @see AdminConsoleDisconnectMessage#process + */ + public void handleConsoleShutdown(InternalDistributedMember theId, boolean crashed, + String reason) { + boolean removedConsole = false; + boolean removedMember = false; + synchronized (this.membersLock) { + // to fix bug 39747 we can only remove this member from + // membersAndAdmin if he is not in members. + // This happens when we have an admin guy colocated with a normal DS. + // In this case we need for the normal DS to shutdown or crash. + if (!this.members.containsKey(theId)) { + if (logger.isDebugEnabled()) + logger.debug("DistributionManager: removing admin member <{}>; crashed = {}; reason = {}", theId, crashed, reason); + Set tmp = new HashSet(this.membersAndAdmin); + if (tmp.remove(theId)) { + // Note we don't modify in place. This allows reader to get snapshots + // without locking. + if (tmp.isEmpty()) { + tmp = Collections.EMPTY_SET; + } else { + tmp = Collections.unmodifiableSet(tmp); + } + this.membersAndAdmin = tmp; + removedMember = true; + } else { + // Don't get upset since this can happen twice due to + // an explicit remove followed by an implicit one caused + // by a JavaGroup view change + } + } + removeHostedLocators(theId); + } + synchronized(this.adminConsolesLock) { + if (this.adminConsoles.contains(theId)) { + removedConsole = true; + Set tmp = new HashSet(this.adminConsoles); + tmp.remove(theId); + if (tmp.isEmpty()) { + tmp = Collections.EMPTY_SET; + } else { + tmp = Collections.unmodifiableSet(tmp); + } + this.adminConsoles = tmp; + } + } + if (removedMember) { + for (Iterator iter = allMembershipListeners.iterator(); + iter.hasNext(); ) { + MembershipListener listener = (MembershipListener) iter.next(); + listener.memberDeparted(theId, crashed); + } + } + if (removedConsole) { + StringId msg = null; + if (crashed) { + msg = LocalizedStrings.DistributionManager_ADMINISTRATION_MEMBER_AT_0_CRASHED_1; + } else { + msg = LocalizedStrings.DistributionManager_ADMINISTRATION_MEMBER_AT_0_CLOSED_1; + } + logger.info(LocalizedMessage.create(msg, new Object[] {theId, reason})); + } + + redundancyZones.remove(theId); + } + + public void shutdownMessageReceived(InternalDistributedMember theId, String reason) { + this.membershipManager.shutdownMessageReceived(theId, reason); + handleManagerDeparture(theId, false, LocalizedStrings.ShutdownMessage_SHUTDOWN_MESSAGE_RECEIVED.toLocalizedString()); + } + + /** used by the DistributedMembershipListener and startup and shutdown operations, this + method decrements the number of nodes and handles lower-level clean up of + the resources used by the departed manager */ + public void handleManagerDeparture(InternalDistributedMember theId, + boolean p_crashed, String p_reason) { + boolean crashed = p_crashed; + String reason = p_reason; + + AlertAppender.getInstance().removeAlertListener(theId); + + // this fixes a race introduced in 5.0.1 by the fact that an explicit + // shutdown will cause a member to no longer be in our DM membership + // but still in the javagroup view. + try { + selectElder(); + } + catch (DistributedSystemDisconnectedException e) { + // keep going + } + + + + int vmType = theId.getVmKind(); + if (vmType == ADMIN_ONLY_DM_TYPE) { + removeUnfinishedStartup(theId, true); + handleConsoleShutdown(theId, crashed, reason); + return; + } + + // not an admin VM... + if (!isCurrentMember(theId)) { + return; // fault tolerance + } + removeUnfinishedStartup(theId, true); + + if (removeManager(theId, crashed, reason)) { + if (theId.getVmKind() != DistributionManager.LOCATOR_DM_TYPE) { + this.stats.incNodes(-1); + } + StringId msg; + if (crashed && ! isCloseInProgress()) { + msg = LocalizedStrings.DistributionManager_MEMBER_AT_0_UNEXPECTEDLY_LEFT_THE_DISTRIBUTED_CACHE_1; + addMemberEvent(new MemberCrashedEvent(theId, reason)); + } else { + msg = LocalizedStrings.DistributionManager_MEMBER_AT_0_GRACEFULLY_LEFT_THE_DISTRIBUTED_CACHE_1; + addMemberEvent(new MemberDepartedEvent(theId, reason)); + } + logger.info(LocalizedMessage.create(msg, new Object[] {theId, prettifyReason(reason)})); + + // Remove this manager from the serialQueueExecutor. + if (this.serialQueuedExecutorPool != null) + { + serialQueuedExecutorPool.handleMemberDeparture(theId); + } + } + } + + /** + * @param reason TODO + */ + public void handleManagerSuspect(InternalDistributedMember suspect, + InternalDistributedMember whoSuspected, String reason) { + if (!isCurrentMember(suspect)) { + return; // fault tolerance + } + + int vmType = suspect.getVmKind(); + if (vmType == ADMIN_ONLY_DM_TYPE) { + return; + } + + addMemberEvent(new MemberSuspectEvent(suspect, whoSuspected, reason)); + } + + public void handleViewInstalled(NetView view) { + addMemberEvent(new ViewInstalledEvent(view)); + } + + public void handleQuorumLost(Set failures, List remaining) { + addMemberEvent(new QuorumLostEvent(failures, remaining)); + } + + /** + * Sends the shutdown message. Not all DistributionManagers need to + * do this. + */ + protected void sendShutdownMessage() { + if (getDMType() == ADMIN_ONLY_DM_TYPE && Locator.getLocators().size() == 0) { +// [bruce] changed above "if" to have ShutdownMessage sent by locators. +// Otherwise the system can hang because an admin member does not trigger +// member-left notification unless a new view is received showing the departure. +// If two locators are simultaneously shut down this may not occur. + return; + } + + ShutdownMessage m = new ShutdownMessage(); + InternalDistributedMember theId = + this.getDistributionManagerId(); + m.setDistributionManagerId(theId); + Set allOthers = new HashSet(getViewMembers()); + allOthers.remove(getDistributionManagerId()); +// ReplyProcessor21 rp = new ReplyProcessor21(this, allOthers); +// m.setProcessorId(rp.getProcessorId()); +// m.setMulticast(system.getConfig().getMcastPort() != 0); + m.setRecipients(allOthers); + + //Address recipient = (Address) m.getRecipient(); + if (logger.isTraceEnabled()) { + logger.trace("{} Sending {} to {}", this.getDistributionManagerId(), m, m.getRecipientsDescription()); + } + + try { + //m.resetTimestamp(); // nanotimers across systems don't match + long startTime = DistributionStats.getStatTime(); + channel.send(m.getRecipients(), m, this, stats); + this.stats.incSentMessages(1L); + if (DistributionStats.enableClockStats) { + stats.incSentMessagesTime(DistributionStats.getStatTime()-startTime); + } + } catch (CancelException e) { + logger.debug("CancelException caught sending shutdown: {}", e.getMessage(), e); + } catch (Exception ex2) { + logger.fatal(LocalizedMessage.create(LocalizedStrings.DistributionManager_WHILE_SENDING_SHUTDOWN_MESSAGE), ex2); + } + finally { + // Even if the message wasn't sent, *lie* about it, so that + // everyone believes that message distribution is done. + this.shutdownMsgSent = true; + } + } + + /** + * Returns the executor for the given type of processor. + * + */ + public final Executor getExecutor(int processorType, InternalDistributedMember sender) { + switch(processorType) { + case STANDARD_EXECUTOR: + return getThreadPool(); + case SERIAL_EXECUTOR: + return getSerialExecutor(sender); + case VIEW_EXECUTOR: + return this.viewThread; + case HIGH_PRIORITY_EXECUTOR: + return getHighPriorityThreadPool(); + case WAITING_POOL_EXECUTOR: + return getWaitingThreadPool(); + case PARTITIONED_REGION_EXECUTOR: + return getPartitionedRegionExcecutor(); + case REGION_FUNCTION_EXECUTION_EXECUTOR: + return getFunctionExcecutor(); + default: + throw new InternalGemFireError( + LocalizedStrings.DistributionManager_UNKNOWN_PROCESSOR_TYPE + .toLocalizedString(processorType)); + } + } + +// /** +// * Return a shortened name of a class that excludes the package +// */ +// private static String shortenClassName(String className) { +// int index = className.lastIndexOf('.'); +// if (index != -1) { +// return className.substring(index + 1); +// +// } else { +// return className; +// } +// } + + /** + * Send a message that is guaranteed to be serialized + * @param msg + * @return the recipients who did not receive the message + */ + protected Set sendOutgoingSerialized(DistributionMessage msg) { + try { + return sendOutgoing(msg); + } + catch (NotSerializableException e) { + throw new InternalGemFireException(e); + } + catch (ToDataException e) { + // exception from user code + throw e; + } + } + + /** + * Actually does the work of sending a message out over the + * distribution channel. + * + * @param message the message to send + * @return list of recipients that did not receive the message because + * they left the view (null if all received it or it was sent to + * {@link DistributionMessage#ALL_RECIPIENTS}. + * @throws NotSerializableException + * If message cannot be serialized + */ + protected Set sendOutgoing(DistributionMessage message) + throws NotSerializableException { + long startTime = DistributionStats.getStatTime(); + + Set result = channel.send(message.getRecipients(), message, + DistributionManager.this, + this.stats); + long endTime = 0L; + if (DistributionStats.enableClockStats) { + endTime = NanoTimer.getTime(); + } + boolean sentToAll = message.forAll(); + + if (sentToAll) { + stats.incBroadcastMessages(1L); + if (DistributionStats.enableClockStats) { + stats.incBroadcastMessagesTime(endTime-startTime); + } + } + stats.incSentMessages(1L); + if (DistributionStats.enableClockStats) { + stats.incSentMessagesTime(endTime-startTime); + stats.incDistributeMessageTime(endTime - message.getTimestamp()); + } + + return result; + } + + + + /** + * @return recipients who did not receive the message + * @throws NotSerializableException + * If message cannot be serialized + */ + Set sendMessage(DistributionMessage message) + throws NotSerializableException { + Set result = null; + try { + // Verify we're not too far into the shutdown + stopper.checkCancelInProgress(null); + + // avoid race condition during startup + waitUntilReadyToSendMsgs(message); + + result = sendOutgoing(message); + } catch (NotSerializableException ex) { + throw ex; // serialization error in user data + } catch (ToDataException ex) { + throw ex; // serialization error in user data + } + catch (ReenteredConnectException ex) { + throw ex; // Recursively tried to get the same connection + } + catch (CancelException ex) { + throw ex; // bug 37194, shutdown conditions + } + catch (InvalidDeltaException ide) { + logger.info(LocalizedMessage.create(LocalizedStrings.DistributionManager_CAUGHT_EXCEPTION_WHILE_SENDING_DELTA), ide.getCause()); + throw (RuntimeException)ide.getCause(); + } + catch (Exception ex) { + DistributionManager.this.exceptionInThreads = true; + String receiver = "NULL"; + if (message != null) { + receiver = message.getRecipientsDescription(); + } + + logger.fatal(LocalizedMessage.create(LocalizedStrings.DistributionManager_WHILE_PUSHING_MESSAGE_0_TO_1, new Object[] {message, receiver}), ex); + if (message == null || message.forAll()) + return null; + result = new HashSet(); + for (int i = 0; i < message.getRecipients().length; i ++) + result.add(message.getRecipients()[i]); + return result; + /* if (ex instanceof com.gemstone.gemfire.GemFireIpcResourceException) { + return; + }*/ + } + return result; + } + + + /** + * Schedule a given message appropriately, depending upon its + * executor kind. + * + * @param message + */ + protected void scheduleIncomingMessage(DistributionMessage message) + { + /* Potential race condition between starting up and getting other + * distribution manager ids -- DM will only be initialized upto + * the point at which it called startThreads + */ + waitUntilReadyForMessages(); + message.schedule(DistributionManager.this); + } + + /** + * Mutex to control access to {@link #waitingForElderChange} + * or {@link #elder}. + */ + protected final Object elderMonitor = new Object(); + + /** + * Must be read/written while holding {@link #elderMonitor} + * + * @see #elderChangeWait() + */ + private boolean waitingForElderChange = false; + + /** + * @see DM#isAdam() + */ + private boolean adam = false; + + /** + * This is the "elder" member of the distributed system, responsible + * for certain types of arbitration. + * + * Must hold {@link #elderMonitor} in order to change this. + * + * @see #getElderId() + */ + protected volatile InternalDistributedMember elder = null; + + public boolean isAdam() { + return this.adam; + } + + public InternalDistributedMember getElderId() + throws DistributedSystemDisconnectedException { +// membershipManager.waitForEventProcessing(); + if (closeInProgress) { + throw new DistributedSystemDisconnectedException(LocalizedStrings.DistributionManager_NO_VALID_ELDER_WHEN_SYSTEM_IS_SHUTTING_DOWN.toLocalizedString(), this.getRootCause()); + } + getSystem().getCancelCriterion().checkCancelInProgress(null); + + // Cache a recent value of the elder + InternalDistributedMember result = elder; + if (result != null && membershipManager.memberExists(result)) { + return result; + } + logger.info(LocalizedMessage.create(LocalizedStrings.DistributionManager_ELDER__0__IS_NOT_CURRENTLY_AN_ACTIVE_MEMBER_SELECTING_NEW_ELDER, elder)); + + selectElder(); // ShutdownException can be thrown here + logger.info(LocalizedMessage.create(LocalizedStrings.DistributionManager_NEWLY_SELECTED_ELDER_IS_NOW__0_, elder)); + return elder; + } + + public boolean isElder() { + return getId().equals(elder); + } + public boolean isLoner() { + return false; + } + + private final StoppableReentrantLock elderLock; + private ElderState elderState; + private volatile boolean elderStateInitialized; + + public ElderState getElderState(boolean force, boolean useTryLock) { + if (force) { + if (logger.isDebugEnabled()) { + if (!this.myid.equals(this.elder)) { + logger.debug("Forcing myself, {}, to be the elder.", this.myid); + } + } + changeElder(this.myid); + } + if (force || this.myid.equals(elder)) { + // we are the elder + if (this.elderStateInitialized) { + return this.elderState; + } + return getElderStateWithTryLock(useTryLock); + } else { + // we are not the elder so return null + return null; + } + } + + /** + * Usage: GrantorRequestProcessor calls getElderState with useTryLock set + * to true if the becomeGrantor Collaboration is already acquired. + *

+ * This tryLock is attempted and if it fails, an exception is thrown to + * cause a Doug Lea style back-off (p. 149). It throws an exception because + * it needs to back down a couple of packages and I didn't want to couple + * this pkg too tightly with the dlock pkg. + *

+ * GrantorRequestProcessor catches the exception, releases and reacquires + * the Collaboration, and then comes back here to attempt the tryLock + * again. Currently nothing will stop it from re-attempting forever. It + * has to get the ElderState and cannot give up, but it can free up the + * Collaboration and then re-enter it. The other thread holding the + * elder lock will hold it only briefly. I've added a volatile called + * elderStateInitialized which should cause this back-off to occur only + * once in the life of a vm... once the elder, always the elder. + *

+ * TODO: Collaboration lock is no longer used. Do we need to to use tryLock? + */ + private ElderState getElderStateWithTryLock(boolean useTryLock) { + boolean locked = false; + if (useTryLock) { + boolean interrupted = Thread.interrupted(); + try { + locked = this.elderLock.tryLock(2000); + } + catch (InterruptedException e) { + interrupted = true; + getCancelCriterion().checkCancelInProgress(e); + // one last attempt and then allow it to fail for back-off... + locked = this.elderLock.tryLock(); + } + finally { + if (interrupted) { + Thread.currentThread().interrupt(); + } + } + } else { + locked = true; + this.elderLock.lock(); + } + if (!locked) { + // try-lock must have failed + throw new IllegalStateException(LocalizedStrings.DistributionManager_POSSIBLE_DEADLOCK_DETECTED.toLocalizedString()); + } + try { + if (this.elderState == null) { + this.elderState = new ElderState(this); + } + } + finally { + this.elderLock.unlock(); + } + this.elderStateInitialized = true; +// if (Thread.currentThread().isInterrupted()) +// throw new RuntimeException("Interrupted"); + return this.elderState; + } + + /** + * Waits until elder if newElder or newElder is no longer a member + * @return true if newElder is the elder; false if he is no longer a member + * or we are the elder. + */ + public boolean waitForElder(final InternalDistributedMember desiredElder) { + MembershipListener l = null; + try { +// Assert.assertTrue( +// desiredElder.getVmKind() != DistributionManager.ADMIN_ONLY_DM_TYPE); + synchronized (this.elderMonitor) { + while (true) { + if (closeInProgress) + return false; + InternalDistributedMember currentElder = this.elder; +// Assert.assertTrue( +// currentElder.getVmKind() != DistributionManager.ADMIN_ONLY_DM_TYPE); + if (desiredElder.equals(currentElder)) { + return true; + } + if (!isCurrentMember(desiredElder)) { + return false; // no longer present + } + if (this.myid.equals(currentElder)) { + // Once we become the elder we no longer allow anyone else to be the + // elder so don't let them wait anymore. + return false; + } + if (l == null) { + l = new MembershipListener() { + public void memberJoined(InternalDistributedMember theId) { + // nothing needed + } + public void memberDeparted(InternalDistributedMember theId, boolean crashed) { + if (desiredElder.equals(theId)) { + notifyElderChangeWaiters(); + } + } + public void memberSuspect(InternalDistributedMember id, + InternalDistributedMember whoSuspected, String reason) { + } + public void viewInstalled(NetView view) { + } + public void quorumLost(Set failures, List remaining) { + } + }; + addMembershipListener(l); + } + logger.info(LocalizedMessage.create(LocalizedStrings.DistributionManager_CHANGING_ELDER_FROM_0_TO_1, + new Object[] {currentElder, desiredElder})); + elderChangeWait(); + } // while true + } + } finally { + if (l != null) { + removeMembershipListener(l); + } + } + } + /** + * Set the elder to newElder and notify anyone waiting for it to change + */ + protected void changeElder(InternalDistributedMember newElder) { + synchronized (this.elderMonitor) { + if (newElder != null && + this.myid != null && !this.myid.equals(newElder)) { + if (this.myid.equals(this.elder)) { + // someone else changed the elder while this thread was off cpu + if (logger.isDebugEnabled()) { + logger.debug("changeElder found this VM to be the elder and is taking an early out"); + } + return; + } + } + this.elder = newElder; + if (this.waitingForElderChange) { + this.waitingForElderChange = false; + this.elderMonitor.notifyAll(); + } + } + } + /** + * Used to wakeup someone in elderChangeWait even though the elder has not changed + */ + protected void notifyElderChangeWaiters() { + synchronized (this.elderMonitor) { + if (this.waitingForElderChange) { + this.waitingForElderChange = false; + this.elderMonitor.notifyAll(); + } + } + } + + /** + * Must be called holding {@link #elderMonitor} lock + */ + private void elderChangeWait() { + // This is OK since we're holding the elderMonitor lock, so no + // new events will come through until the wait() below. + this.waitingForElderChange = true; + + while (this.waitingForElderChange) { + stopper.checkCancelInProgress(null); + boolean interrupted = Thread.interrupted(); + try { + this.elderMonitor.wait(); + break; + } + catch (InterruptedException ignore) { + interrupted = true; + } + finally { + if (interrupted) { + Thread.currentThread().interrupt(); + } + } + } // while + } + + /** + * getThreadPool gets this distribution manager's message-processing thread + * pool + */ + public ExecutorService getThreadPool() { + return this.threadPool; + } + + /** + * Return the high-priority message-processing executor */ + public ExecutorService getHighPriorityThreadPool() { + return this.highPriorityPool; + } + + /** + * Return the waiting message-processing executor + */ + public ExecutorService getWaitingThreadPool() { + return this.waitingPool; + } + + /** + * Return the waiting message-processing executor + */ + public ExecutorService getPrMetaDataCleanupThreadPool() { + return this.prMetaDataCleanupThreadPool; + } + + /** + * Return the waiting message-processing executor + */ + public Executor getPartitionedRegionExcecutor() { + if (this.partitionedRegionThread != null) { + return this.partitionedRegionThread; + } else { + return this.partitionedRegionPool; + } + } + + /** + * Return the waiting message-processing executor + */ + public Executor getFunctionExcecutor() { + if (this.functionExecutionThread != null) { + return this.functionExecutionThread; + } else { + return this.functionExecutionPool; + } + } + + private Executor getSerialExecutor(InternalDistributedMember sender) { + if (MULTI_SERIAL_EXECUTORS) { + return this.serialQueuedExecutorPool.getThrottledSerialExecutor(sender); + } else { + return this.serialThread; + } + } + + /** returns the serialThread's queue if throttling is being used, null if not */ + public OverflowQueueWithDMStats getSerialQueue(InternalDistributedMember sender) { + if (MULTI_SERIAL_EXECUTORS) { + return this.serialQueuedExecutorPool.getSerialQueue(sender); + } else { + return this.serialQueue; + } + } + + /** + * Sets the administration agent associated with this distribution + * manager. + * + * @since 4.0 + */ + public void setAgent(RemoteGfManagerAgent agent) { + // Don't let the agent be set twice. There should be a one-to-one + // correspondence between admin agent and distribution manager. + if (agent != null) { + if (this.agent != null) { + throw new IllegalStateException(LocalizedStrings.DistributionManager_THERE_IS_ALREADY_AN_ADMIN_AGENT_ASSOCIATED_WITH_THIS_DISTRIBUTION_MANAGER.toLocalizedString()); + } + + } else { + if (this.agent == null) { + throw new IllegalStateException(LocalizedStrings.DistributionManager_THERE_WAS_NEVER_AN_ADMIN_AGENT_ASSOCIATED_WITH_THIS_DISTRIBUTION_MANAGER.toLocalizedString()); + } + } + this.agent = agent; + } + + /** + * Returns the agent that owns this distribution manager. + * (in ConsoleDistributionManager) + * @since 3.5 + */ + public RemoteGfManagerAgent getAgent(){ + return this.agent; + } + + /** + * Returns a description of the distribution configuration used for + * this distribution manager. (in ConsoleDistributionManager) + * + * @return null if no admin {@linkplain #getAgent + * agent} is associated with this distribution manager + * + * @since 3.5 + */ + public String getDistributionConfigDescription() { + if (this.agent == null) { + return null; + + } else { + return this.agent.getTransport().toString(); + } + } + + /** + * A DistributionManager is not intented to be + * serialized. This method throws an {@link + * UnsupportedOperationException} to prevent a + * DistributionManager from being copy shared. + */ + public void writeExternal(ObjectOutput out) throws IOException { + throw new UnsupportedOperationException(LocalizedStrings.DistributionManager_DISTRIBUTIONMANAGERS_SHOULD_NOT_BE_COPY_SHARED.toLocalizedString()); + } + + /** + * A DistributionManager is not intented to be + * serialized. This method throws an {@link + * UnsupportedOperationException} to prevent a + * DistributionManager from being copy shared. + */ + public void readExternal(ObjectInput out) + throws IOException, ClassNotFoundException { + throw new UnsupportedOperationException(LocalizedStrings.DistributionManager_DISTRIBUTIONMANAGERS_SHOULD_NOT_BE_COPY_SHARED.toLocalizedString()); + } + + /* -----------------------------Health Monitor------------------------------ */ + private final ConcurrentMap hmMap = new ConcurrentHashMap(); + + /** + * Returns the health monitor for this distribution manager and owner. + * @param owner the agent that owns the returned monitor + * @return the health monitor created by the owner; null + * if the owner has now created a monitor. + * @since 3.5 + */ + public HealthMonitor getHealthMonitor(InternalDistributedMember owner) { + return (HealthMonitor)this.hmMap.get(owner); + } + /** + * Returns the health monitor for this distribution manager. + * + * @param owner the agent that owns the created monitor + * @param cfg the configuration to use when creating the monitor + * @since 3.5 + */ + public void createHealthMonitor(InternalDistributedMember owner, + GemFireHealthConfig cfg) { + if (closeInProgress) { + return; + } + { + final HealthMonitor hm = getHealthMonitor(owner); + if (hm != null) { + hm.stop(); + this.hmMap.remove(owner); + } + } + { + HealthMonitorImpl newHm = new HealthMonitorImpl(owner, cfg, this); + newHm.start(); + this.hmMap.put(owner, newHm); + } + } + /** + * Remove a monitor that was previously created. + * @param owner the agent that owns the monitor to remove + */ + public void removeHealthMonitor(InternalDistributedMember owner, int theId) { + final HealthMonitor hm = getHealthMonitor(owner); + if (hm != null && hm.getId() == theId) { + hm.stop(); + this.hmMap.remove(owner); + } + } + public void removeAllHealthMonitors() { + Iterator it = this.hmMap.values().iterator(); + while (it.hasNext()) { + HealthMonitor hm = (HealthMonitor)it.next(); + hm.stop(); + it.remove(); + } + } + + // For feature request #32887 + public Set getAdminMemberSet() { + return this.adminConsoles; + } + + /** Returns count of members filling the specified role */ + public int getRoleCount(Role role) { + int count = 0; + Set mbrs = getDistributionManagerIds(); + for (Iterator mbrIter = mbrs.iterator(); mbrIter.hasNext();) { + Set roles = ((InternalDistributedMember) mbrIter.next()).getRoles(); + for (Iterator rolesIter = roles.iterator(); rolesIter.hasNext();) { + Role mbrRole = (Role) rolesIter.next(); + if (mbrRole.equals(role)) { + count++; + break; + } + } + } + return count; + } + + /** Returns true if at least one member is filling the specified role */ + public boolean isRolePresent(Role role) { + Set mbrs = getDistributionManagerIds(); + for (Iterator mbrIter = mbrs.iterator(); mbrIter.hasNext();) { + Set roles = ((InternalDistributedMember) mbrIter.next()).getRoles(); + for (Iterator rolesIter = roles.iterator(); rolesIter.hasNext();) { + Role mbrRole = (Role) rolesIter.next(); + if (mbrRole.equals(role)) { + return true; + } + } + } + return false; + } + + /** Returns a set of all roles currently in the distributed system. */ + public Set getAllRoles() { + Set allRoles = new HashSet(); + Set mbrs = getDistributionManagerIds(); + for (Iterator mbrIter = mbrs.iterator(); mbrIter.hasNext();) { + Set roles = ((InternalDistributedMember) mbrIter.next()).getRoles(); + for (Iterator rolesIter = roles.iterator(); rolesIter.hasNext();) { + Role mbrRole = (Role) rolesIter.next(); + allRoles.add(mbrRole); + } + } + return allRoles; + } + + /** Returns the membership manager for this distributed system. + The membership manager owns the membership set and handles + all communications. The manager should NOT be used to + bypass DistributionManager to send or receive messages.

+ This method was added to allow hydra to obtain thread-local + data for transport from one thread to another. */ + public MembershipManager getMembershipManager() { + // NOTE: do not add cancellation checks here. This method is + // used during auto-reconnect after the DS has been closed + return membershipManager; + } + + + ////////////////////// Inner Classes ////////////////////// + + + /** + * This class is used for DM's multi serial executor. + * The serial messages are managed/executed by multiple serial thread. + * This class takes care of executing messages related to a sender + * using the same thread. + */ + static private class SerialQueuedExecutorPool { + /** To store the serial threads */ + ConcurrentMap serialQueuedExecutorMap = new ConcurrentHashMap(MAX_SERIAL_QUEUE_THREAD); + + /** To store the queue associated with thread */ + Map serialQueuedMap = new HashMap(MAX_SERIAL_QUEUE_THREAD); + + /** Holds mapping between sender to the serial thread-id */ + Map senderToSerialQueueIdMap = new HashMap(); + + /** Holds info about unused thread, a thread is marked unused when the + * member associated with it has left distribution system. + */ + ArrayList threadMarkedForUse = new ArrayList(); + + DistributionStats stats; + ThreadGroup threadGroup; + + final boolean throttlingDisabled; + + /** + * Constructor. + * @param group thread group to which the threads will belog to. + * @param stats + */ + SerialQueuedExecutorPool(ThreadGroup group, DistributionStats stats, boolean throttlingDisabled) { + this.threadGroup = group; + this.stats = stats; + this.throttlingDisabled = throttlingDisabled; + } + + /* + * Returns an id of the thread in serialQueuedExecutorMap, thats mapped to the + * given seder. + * + * @param sender + * @param createNew boolean flag to indicate whether to create a new id, if id + * doesnot exists. + */ + private Integer getQueueId(InternalDistributedMember sender, boolean createNew) { + // Create a new Id. + Integer queueId; + + synchronized (senderToSerialQueueIdMap) + { + // Check if there is a executor associated with this sender. + queueId = (Integer)senderToSerialQueueIdMap.get(sender); + + if (!createNew || queueId != null){ + return queueId; + } + + // Create new. + // Check if any threads are availabe that is marked for Use. + if (!threadMarkedForUse.isEmpty()){ + queueId = (Integer)threadMarkedForUse.remove(0); + } + // If Map is full, use the threads in round-robin fashion. + if (queueId == null){ + queueId = Integer.valueOf((serialQueuedExecutorMap.size() + 1) % MAX_SERIAL_QUEUE_THREAD); + } + senderToSerialQueueIdMap.put(sender, queueId); + } + return queueId; + } + + /* + * Returns the queue associated with this sender. + * Used in FlowControl for throttling (based on queue size). + */ + public OverflowQueueWithDMStats getSerialQueue(InternalDistributedMember sender) { + Integer queueId = getQueueId(sender, false); + if (queueId == null){ + return null; + } + return (OverflowQueueWithDMStats)serialQueuedMap.get(queueId); + } + + /* + * Returns the serial queue executor, before returning the thread this + * applies throttling, based on the total serial queue size (total - sum + * of all the serial queue size). + * The throttling is applied during put event, this doesnt block the extract + * operation on the queue. + * + */ + public SerialQueuedExecutorWithDMStats getThrottledSerialExecutor(InternalDistributedMember sender) { + SerialQueuedExecutorWithDMStats executor = getSerialExecutor(sender); + + // Get the total serial queue size. + int totalSerialQueueMemSize = stats.getSerialQueueBytes(); + + // for tcp socket reader threads, this code throttles the thread + // to keep the sender-side from overwhelming the receiver. + // UDP readers are throttled in the FC protocol, which queries + // the queue to see if it should throttle + if (stats.getSerialQueueBytes() > TOTAL_SERIAL_QUEUE_THROTTLE && + !DistributionMessage.isPreciousThread()) + { + do { + boolean interrupted = Thread.interrupted(); + try { + float throttlePercent = (float)(totalSerialQueueMemSize - TOTAL_SERIAL_QUEUE_THROTTLE) / (float)(TOTAL_SERIAL_QUEUE_BYTE_LIMIT - TOTAL_SERIAL_QUEUE_THROTTLE); + int sleep = (int)(100.0 * throttlePercent); + sleep = Math.max(sleep, 1); + Thread.sleep(sleep); + } catch (InterruptedException ex) { + interrupted = true; + // FIXME-InterruptedException + // Perhaps we should return null here? + } + finally { + if (interrupted) { + Thread.currentThread().interrupt(); + } + } + this.stats.getSerialQueueHelper().incThrottleCount(); + } while (stats.getSerialQueueBytes() >= TOTAL_SERIAL_QUEUE_BYTE_LIMIT); + } + return executor; + } + + /* + * Returns the serial queue executor for the given sender. + */ + public SerialQueuedExecutorWithDMStats getSerialExecutor(InternalDistributedMember sender) { + SerialQueuedExecutorWithDMStats executor = null; + Integer queueId = getQueueId(sender, true); + if ((executor = (SerialQueuedExecutorWithDMStats)serialQueuedExecutorMap.get(queueId)) != null){ + return executor; + } + // If executor doesn't exists for this sender, create one. + executor = createSerialExecutor(queueId); + + serialQueuedExecutorMap.put(queueId, executor); + + if (logger.isDebugEnabled()){ + logger.debug("Created Serial Queued Executor With queueId {}. Total number of live Serial Threads :{}", + queueId, serialQueuedExecutorMap.size()); + } + stats.incSerialPooledThread(); + return executor; + } + + /* + * Creates a serial queue executor. + */ + private SerialQueuedExecutorWithDMStats createSerialExecutor(final Integer id) { + + BlockingQueue poolQueue; + + if (SERIAL_QUEUE_BYTE_LIMIT == 0 || this.throttlingDisabled) { + poolQueue = new OverflowQueueWithDMStats(stats.getSerialQueueHelper()); + } else { + poolQueue = new ThrottlingMemLinkedQueueWithDMStats(SERIAL_QUEUE_BYTE_LIMIT, SERIAL_QUEUE_THROTTLE, SERIAL_QUEUE_SIZE_LIMIT, SERIAL_QUEUE_SIZE_THROTTLE, this.stats.getSerialQueueHelper()); + } + + serialQueuedMap.put(id, poolQueue); + + ThreadFactory tf = new ThreadFactory() { + public Thread newThread(final Runnable command) { + SerialQueuedExecutorPool.this.stats.incSerialPooledThreadStarts(); + final Runnable r = new Runnable() { + public void run() { + ConnectionTable.threadWantsSharedResources(); + Connection.makeReaderThread(); + try { + command.run(); + } finally { + ConnectionTable.releaseThreadsSockets(); + } + } + }; + + Thread thread = new Thread(threadGroup, r, "Pooled Serial Message Processor " + id); + thread.setDaemon(true); + return thread; + } + }; + return new SerialQueuedExecutorWithDMStats(poolQueue, this.stats.getSerialPooledProcessorHelper(), tf); + } + + /* + * Does cleanup relating to this member. And marks the serial executor associated + * with this member for re-use. + */ + public void handleMemberDeparture(InternalDistributedMember member) + { + Integer queueId = getQueueId(member, false); + if (queueId == null){ + return; + } + + boolean isUsed = false; + + synchronized (senderToSerialQueueIdMap) + { + senderToSerialQueueIdMap.remove(member); + + // Check if any other members are using the same executor. + for (Iterator iter = senderToSerialQueueIdMap.values().iterator(); iter.hasNext();) { + Integer value = (Integer)iter.next(); + if (value.equals(queueId)) + { + isUsed = true; + break; + } + } + + // If not used mark this as unused. + if (!isUsed) + { + if (logger.isInfoEnabled(LogMarker.DM)) + logger.info(LogMarker.DM, LocalizedMessage.create( + LocalizedStrings.DistributionManager_MARKING_THE_SERIALQUEUEDEXECUTOR_WITH_ID__0__USED_BY_THE_MEMBER__1__TO_BE_UNUSED, + new Object[] {queueId, member})); + + threadMarkedForUse.add(queueId); + } + } + } + + public void awaitTermination(long time, TimeUnit unit) throws InterruptedException { + long timeNanos = unit.toNanos(time); + long remainingNanos = timeNanos; + long start = System.nanoTime(); + for (Iterator iter = serialQueuedExecutorMap.values().iterator(); iter.hasNext();) { + ExecutorService executor = (ExecutorService)iter.next(); + executor.awaitTermination(remainingNanos, TimeUnit.NANOSECONDS); + remainingNanos = timeNanos = (System.nanoTime() - start); + if(remainingNanos <= 0) { + return; + } + } + } + + protected void shutdown(){ + for (Iterator iter = serialQueuedExecutorMap.values().iterator(); iter.hasNext();) { + ExecutorService executor = (ExecutorService)iter.next(); + executor.shutdown(); + } + } + } + + /** + * A simple class used for locking the list of members of the + * distributed system. We give this lock its own class so that it + * shows up nicely in stack traces. + */ + private static final class MembersLock { + protected MembersLock() { + + } + } + + /** + * A simple class used for locking the list of membership listeners. + * We give this lock its own class so that it shows up nicely in + * stack traces. + */ + private static final class MembershipListenersLock { + protected MembershipListenersLock() { + } + } + + /** + * This is the listener implementation for responding from events from + * the Membership Manager. + * + */ + private final class MyListener implements DistributedMembershipListener { + DistributionManager dm; + + public MyListener(DistributionManager dm) { + this.dm = dm; + } + + public boolean isShutdownMsgSent() { + return shutdownMsgSent; + } + + public void membershipFailure(String reason, Throwable t) { + exceptionInThreads = true; + DistributionManager.this.rootCause = t; + getSystem().disconnect(reason, t, true); + } + + public void messageReceived(DistributionMessage message) { + handleIncomingDMsg(message); + } + + public void newMemberConnected(InternalDistributedMember member) { + // Do not elect the elder here as surprise members invoke this callback + // without holding the view lock. That can cause a race condition and + // subsequent deadlock (#45566). Elder selection is now done when a view + // is installed. + dm.addNewMember(member); + } + + public void memberDeparted(InternalDistributedMember theId, boolean crashed, String reason) { + boolean wasAdmin = getAdminMemberSet().contains(theId); + if (wasAdmin) { + // Pretend we received an AdminConsoleDisconnectMessage from the console that + // is no longer in the JavaGroup view. + // He must have died without sending a ShutdownMessage. + // This fixes bug 28454. + AdminConsoleDisconnectMessage message = new AdminConsoleDisconnectMessage(); + message.setSender(theId); + message.setCrashed(crashed); + message.setAlertListenerExpected(true); + message.setIgnoreAlertListenerRemovalFailure(true); // we don't know if it was a listener so don't issue a warning + message.setRecipient(myid); + message.setReason(reason); //added for #37950 + handleIncomingDMsg(message); + } + dm.handleManagerDeparture(theId, crashed, reason); + } + + public void memberSuspect(InternalDistributedMember suspect, InternalDistributedMember whoSuspected, String reason) { + dm.handleManagerSuspect(suspect, whoSuspected, reason); + } + + public void viewInstalled(NetView view) { + processElderSelection(); + dm.handleViewInstalled(view); + } + + /** this is invoked when quorum is being lost, before the view has been installed */ + public void quorumLost(Set failures, List remaining) { + dm.handleQuorumLost(failures, remaining); + } + + public DistributionManager getDM() + { + return dm; + } + + private void processElderSelection() { + // If we currently had no elder, this member might be the elder; + // go through the selection process and decide now. + try { + dm.selectElder(); + } + catch (DistributedSystemDisconnectedException e) { + // ignore + } + } + } + + + private static abstract class MemberEvent { + + private InternalDistributedMember id; + MemberEvent(InternalDistributedMember id) { + this.id = id; + } + public InternalDistributedMember getId() { + return this.id; + } + + public void handleEvent(DistributionManager manager) { + handleEvent(manager, manager.membershipListeners.keySet()); + handleEvent(manager, manager.allMembershipListeners); + } + + protected abstract void handleEvent(MembershipListener listener); + + protected void handleEvent(DistributionManager manager, Set membershipListeners) { + for (MembershipListener listener : membershipListeners) { + try { + handleEvent(listener); + } catch (CancelException e) { + if (manager.isCloseInProgress()) { + if (logger.isTraceEnabled()) { + logger.trace("MemberEventInvoker: cancelled"); + } + } + else { + logger.warn(LocalizedMessage.create(LocalizedStrings.DistributionManager_UNEXPECTED_CANCELLATION), e); + } + break; + } catch (VirtualMachineError err) { + SystemFailure.initiateFailure(err); + // If this ever returns, rethrow the error. We're poisoned + // now, so don't let this thread continue. + throw err; + } catch (Throwable t) { + // Whenever you catch Error or Throwable, you must also + // catch VirtualMachineError (see above). However, there is + // _still_ a possibility that you are dealing with a cascading + // error condition, so you also need to check to see if the JVM + // is still usable: + SystemFailure.checkFailure(); + logger.warn(LocalizedMessage.create(LocalizedStrings.DistributionManager_EXCEPTION_WHILE_CALLING_MEMBERSHIP_LISTENER_FOR_EVENT__0, this), t); + } + } + } +} + + /** + * This is an event reflecting that a InternalDistributedMember has joined + * the system. + * + * + */ + private static final class MemberJoinedEvent extends MemberEvent { + MemberJoinedEvent(InternalDistributedMember id) { + super(id); + } + @Override + public String toString() { + return "member " + getId() + " joined"; + } + @Override + protected void handleEvent(MembershipListener listener) { + listener.memberJoined(getId()); + } + } + + /** + * This is an event reflecting that a InternalDistributedMember has left the system. + * + */ + private static final class MemberDepartedEvent extends MemberEvent { + String reason; + + MemberDepartedEvent(InternalDistributedMember id, String r) { + super(id); + reason = r; + } + @Override + public String toString() { + return "member " + getId() + " departed (" + reason + ")"; + } + @Override + protected void handleEvent(MembershipListener listener) { + listener.memberDeparted(getId(), false); + } + } + + /** + * This is an event reflecting that a InternalDistributedMember has left the + * system in an unexpected way. + * + * + */ + private static final class MemberCrashedEvent extends MemberEvent { + String reason; + + MemberCrashedEvent(InternalDistributedMember id, String r) { + super(id); + reason = r; + } + @Override + public String toString() { + return "member " + getId() + " crashed: " + reason; + } + @Override + protected void handleEvent(MembershipListener listener) { + listener.memberDeparted(getId(), true/*crashed*/); + } + } + + /** + * This is an event reflecting that a InternalDistributedMember may be missing + * but has not yet left the system. + */ + private static final class MemberSuspectEvent extends MemberEvent { + InternalDistributedMember whoSuspected; + String reason; + MemberSuspectEvent(InternalDistributedMember suspect, InternalDistributedMember whoSuspected, String reason) { + super(suspect); + this.whoSuspected = whoSuspected; + this.reason = reason; + } + public InternalDistributedMember whoSuspected() { + return this.whoSuspected; + } + + public String getReason() { + return this.reason; + } + + @Override + public String toString() { + return "member " + getId() + " suspected by: " + this.whoSuspected + " reason: " + reason; + } + @Override + protected void handleEvent(MembershipListener listener) { + listener.memberSuspect(getId(), whoSuspected(), reason); + } + } + + private static final class ViewInstalledEvent extends MemberEvent { + NetView view; + ViewInstalledEvent(NetView view) { + super(null); + this.view = view; + } + public long getViewId() { + return view.getViewId(); + } + @Override + public String toString() { + return "view installed: " + this.view; + } + @Override + public void handleEvent(DistributionManager manager) { + manager.handleViewInstalledEvent(this); + } + @Override + protected void handleEvent(MembershipListener listener) { + throw new UnsupportedOperationException(); + } + } + + private static final class QuorumLostEvent extends MemberEvent { + Set failures; + List remaining; + + QuorumLostEvent(Set failures, List remaining) { + super(null); + this.failures = failures; + this.remaining = remaining; + } + public Set getFailures() { + return this.failures; + } + public List getRemaining() { + return this.remaining; + } + @Override + public String toString() { + return "quorum lost. failures=" + failures + "; remaining=" + remaining; + } + @Override + protected void handleEvent(MembershipListener listener) { + listener.quorumLost(getFailures(), getRemaining()); + } + } + + + /* (non-Javadoc) + * @see com.gemstone.gemfire.distributed.internal.DM#getRootCause() + */ + public Throwable getRootCause() { + return this.rootCause; + } + + /* (non-Javadoc) + * @see com.gemstone.gemfire.distributed.internal.DM#setRootCause(java.lang.Throwable) + */ + public void setRootCause(Throwable t) { + this.rootCause = t; + } + + /* (non-Javadoc) + * @see com.gemstone.gemfire.distributed.internal.DM#getMembersOnThisHost() + * @since gemfire59poc + */ + public Set getMembersInThisZone() { + return getMembersInSameZone(getDistributionManagerId()); + } + + public Set getMembersInSameZone(InternalDistributedMember targetMember) { + Set buddyMembers = new HashSet(); + if(!redundancyZones.isEmpty()) { + synchronized(redundancyZones) { + String targetZone = redundancyZones.get(targetMember); + for(Map.Entry entry : redundancyZones.entrySet()) { + if(entry.getValue().equals(targetZone)) { + buddyMembers.add(entry.getKey()); + } + } + } + } else { + buddyMembers.add(targetMember); + Set targetAddrs = getEquivalents(targetMember.getInetAddress()); + for (Iterator i = getDistributionManagerIds().iterator(); i.hasNext();) { + InternalDistributedMember o = (InternalDistributedMember)i.next(); + if (SetUtils.intersectsWith(targetAddrs, getEquivalents(o.getInetAddress()))) { + buddyMembers.add(o); + } + } + } + return buddyMembers; + } + + public boolean areInSameZone(InternalDistributedMember member1, + InternalDistributedMember member2) { + + if(!redundancyZones.isEmpty()) { + String zone1 = redundancyZones.get(member1); + String zone2 = redundancyZones.get(member2); + return zone1 != null && zone1.equals(zone2); + } else { + return areOnEquivalentHost(member1, member2); + } + } + + public void acquireGIIPermitUninterruptibly() { + this.parallelGIIs.acquireUninterruptibly(); + this.stats.incInitialImageRequestsInProgress(1); + } + + public void releaseGIIPermit() { + this.stats.incInitialImageRequestsInProgress(-1); + this.parallelGIIs.release(); + } + + public void setDistributedSystemId(int distributedSystemId) { + if (distributedSystemId != -1) { + this.distributedSystemId = distributedSystemId; + } + } + + public int getDistributedSystemId() { + return this.distributedSystemId; + } + + /** + * this causes all members in the system to log thread dumps + * If useNative is true we attempt to use OSProcess native code + * for the dumps. This goes to stdout instead of the system.log files. + */ + public void printDistributedSystemStacks(boolean useNative) { + printStacks(new HashSet(getDistributionManagerIds()), useNative); + } + + /** + * this causes the given InternalDistributedMembers to log thread dumps. + * If useNative is true we attempt to use OSProcess native code + * for the dumps. This goes to stdout instead of the system.log files. + */ + public void printStacks(Collection ids, boolean useNative) { + Set requiresMessage = new HashSet(); + if (ids.contains(myid)) { + OSProcess.printStacks(0, useNative); + } + if (useNative) { + requiresMessage.addAll(ids); + ids.remove(myid); + } else { + for (Iterator it=ids.iterator(); it.hasNext(); ) { + InternalDistributedMember mbr = (InternalDistributedMember)it.next(); + if (mbr.getProcessId() > 0 && mbr.getInetAddress().equals(this.myid.getInetAddress())) { + if (!mbr.equals(myid)) { + if (!OSProcess.printStacks(mbr.getProcessId(), false)) { + requiresMessage.add(mbr); + } + } + } else { + requiresMessage.add(mbr); + } + } + } + if (requiresMessage.size() > 0) { + HighPriorityAckedMessage msg = new HighPriorityAckedMessage(); + msg.dumpStacks(requiresMessage, useNative, false); + } + } + + public Set getGroupMembers(String group) { + HashSet result = null; + for (DistributedMember m: (Set)getDistributionManagerIdsIncludingAdmin()) { + if (m.getGroups().contains(group)) { + if (result == null) { + result = new HashSet(); + } + result.add(m); + } + } + if (result == null) { + return Collections.emptySet(); + } else { + return result; + } + } + + @Override + public Set getNormalDistributionManagerIds() { + // access to members synchronized under membersLock in order to + // ensure serialization + synchronized (this.membersLock) { + HashSet result = new HashSet(); + for (InternalDistributedMember m: this.members.keySet()) { + if (m.getVmKind() != DistributionManager.LOCATOR_DM_TYPE) { + result.add(m); + } + } + return result; + } + } + + public Set getLocatorDistributionManagerIds() { + // access to members synchronized under membersLock in order to + // ensure serialization + synchronized (this.membersLock) { + HashSet result = new HashSet(); + for (InternalDistributedMember m: this.members.keySet()) { + if (m.getVmKind() == DistributionManager.LOCATOR_DM_TYPE) { + result.add(m); + } + } + return result; + } + } +} diff --git a/gemfire-core/src/main/java/com/gemstone/gemfire/distributed/internal/membership/gms/mgr/GMSMembershipManager.java b/gemfire-core/src/main/java/com/gemstone/gemfire/distributed/internal/membership/gms/mgr/GMSMembershipManager.java new file mode 100755 index 000000000000..b3e2f2d554ee --- /dev/null +++ b/gemfire-core/src/main/java/com/gemstone/gemfire/distributed/internal/membership/gms/mgr/GMSMembershipManager.java @@ -0,0 +1,2654 @@ +/* + * 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 com.gemstone.gemfire.distributed.internal.membership.gms.mgr; + +import java.io.IOException; +import java.io.NotSerializableException; +import java.util.ArrayList; +import java.util.Arrays; +import java.util.Collection; +import java.util.Collections; +import java.util.HashMap; +import java.util.HashSet; +import java.util.Iterator; +import java.util.LinkedHashMap; +import java.util.LinkedList; +import java.util.List; +import java.util.Map; +import java.util.Set; +import java.util.concurrent.ConcurrentHashMap; +import java.util.concurrent.CountDownLatch; +import java.util.concurrent.TimeUnit; +import java.util.concurrent.TimeoutException; +import java.util.concurrent.locks.ReadWriteLock; +import java.util.concurrent.locks.ReentrantReadWriteLock; + +import org.apache.logging.log4j.Logger; + +import com.gemstone.gemfire.CancelException; +import com.gemstone.gemfire.ForcedDisconnectException; +import com.gemstone.gemfire.GemFireConfigException; +import com.gemstone.gemfire.InternalGemFireError; +import com.gemstone.gemfire.SystemConnectException; +import com.gemstone.gemfire.SystemFailure; +import com.gemstone.gemfire.ToDataException; +import com.gemstone.gemfire.cache.Cache; +import com.gemstone.gemfire.cache.server.CacheServer; +import com.gemstone.gemfire.distributed.DistributedMember; +import com.gemstone.gemfire.distributed.DistributedSystem; +import com.gemstone.gemfire.distributed.DistributedSystemDisconnectedException; +import com.gemstone.gemfire.distributed.Locator; +import com.gemstone.gemfire.distributed.internal.AdminMessageType; +import com.gemstone.gemfire.distributed.internal.DMStats; +import com.gemstone.gemfire.distributed.internal.DSClock; +import com.gemstone.gemfire.distributed.internal.DistributionConfig; +import com.gemstone.gemfire.distributed.internal.DistributionException; +import com.gemstone.gemfire.distributed.internal.DistributionManager; +import com.gemstone.gemfire.distributed.internal.DistributionMessage; +import com.gemstone.gemfire.distributed.internal.InternalDistributedSystem; +import com.gemstone.gemfire.distributed.internal.InternalLocator; +import com.gemstone.gemfire.distributed.internal.OverflowQueueWithDMStats; +import com.gemstone.gemfire.distributed.internal.SizeableRunnable; +import com.gemstone.gemfire.distributed.internal.StartupMessage; +import com.gemstone.gemfire.distributed.internal.direct.DirectChannel; +import com.gemstone.gemfire.distributed.internal.direct.DirectChannelListener; +import com.gemstone.gemfire.distributed.internal.direct.ShunnedMemberException; +import com.gemstone.gemfire.distributed.internal.membership.DistributedMembershipListener; +import com.gemstone.gemfire.distributed.internal.membership.InternalDistributedMember; +import com.gemstone.gemfire.distributed.internal.membership.MembershipManager; +import com.gemstone.gemfire.distributed.internal.membership.MembershipTestHook; +import com.gemstone.gemfire.distributed.internal.membership.NetView; +import com.gemstone.gemfire.distributed.internal.membership.QuorumChecker; +import com.gemstone.gemfire.distributed.internal.membership.gms.GMSMember; +import com.gemstone.gemfire.distributed.internal.membership.gms.Services; +import com.gemstone.gemfire.distributed.internal.membership.gms.SuspectMember; +import com.gemstone.gemfire.distributed.internal.membership.gms.fd.GMSHealthMonitor; +import com.gemstone.gemfire.distributed.internal.membership.gms.interfaces.Manager; +import com.gemstone.gemfire.distributed.internal.membership.gms.membership.GMSJoinLeave; +import com.gemstone.gemfire.distributed.internal.membership.gms.messenger.GMSQuorumChecker; +import com.gemstone.gemfire.internal.Assert; +import com.gemstone.gemfire.internal.SystemTimer; +import com.gemstone.gemfire.internal.Version; +import com.gemstone.gemfire.internal.admin.remote.RemoteTransportConfig; +import com.gemstone.gemfire.internal.cache.CacheServerImpl; +import com.gemstone.gemfire.internal.cache.GemFireCacheImpl; +import com.gemstone.gemfire.internal.cache.xmlcache.CacheServerCreation; +import com.gemstone.gemfire.internal.cache.xmlcache.CacheXmlGenerator; +import com.gemstone.gemfire.internal.i18n.LocalizedStrings; +import com.gemstone.gemfire.internal.logging.log4j.AlertAppender; +import com.gemstone.gemfire.internal.logging.log4j.LocalizedMessage; +import com.gemstone.gemfire.internal.logging.log4j.LogMarker; +import com.gemstone.gemfire.internal.shared.StringPrintWriter; +import com.gemstone.gemfire.internal.tcp.ConnectExceptions; +import com.gemstone.gemfire.internal.tcp.MemberShunnedException; +import com.gemstone.gemfire.internal.util.Breadcrumbs; + +public class GMSMembershipManager implements MembershipManager, Manager +{ + private static final Logger logger = Services.getLogger(); + + /** product version to use for multicast serialization */ + volatile boolean disableMulticastForRollingUpgrade; + + /** + * set to true if the distributed system that created this manager was + * auto-reconnecting when it was created. + */ + boolean wasReconnectingSystem; + + /** + * A quorum checker is created during reconnect and is held + * here so it is available to the UDP protocol for passing off + * the ping-pong responses used in the quorum-checking algorithm. + */ + private volatile QuorumChecker quorumChecker; + + /** + * thread-local used to force use of Messenger for communications, usually to + * avoid deadlock when conserve-sockets=true. Use of this should be removed + * when connection pools are implemented in the direct-channel + */ + private ThreadLocal forceUseUDPMessaging = new ThreadLocal(); + + /** + * Trick class to make the startup synch more + * visible in stack traces + * + * @see GMSMembershipManager#startupLock + */ + static class EventProcessingLock { + public EventProcessingLock() { + } + } + + static class StartupEvent { + static final int SURPRISE_CONNECT = 1; + static final int VIEW = 2; + static final int MESSAGE = 3; + + /** + * indicates whether the event is a departure, a surprise connect + * (i.e., before the view message arrived), a view, or a regular + * message + * + * @see #SURPRISE_CONNECT + * @see #VIEW + * @see #MESSAGE + */ + private int kind; + + // Miscellaneous state depending on the kind of event + InternalDistributedMember member; + boolean crashed; + String reason; + DistributionMessage dmsg; + NetView gmsView; + + @Override + public String toString() { + StringBuffer sb = new StringBuffer(); + sb.append("kind="); + switch (kind) { + case SURPRISE_CONNECT: + sb.append("connect; member = <" + member + ">"); + break; + case VIEW: + String text = gmsView.toString(); + sb.append("view <" + text + ">"); + break; + case MESSAGE: + sb.append("message <" + dmsg + ">"); + break; + default: + sb.append("unknown=<" + kind + ">"); + break; + } + return sb.toString(); + } + + /** + * Create a surprise connect event + * @param member the member connecting + */ + StartupEvent(final InternalDistributedMember member) { + this.kind = SURPRISE_CONNECT; + this.member = member; + } + /** + * Indicate if this is a surprise connect event + * @return true if this is a connect event + */ + boolean isSurpriseConnect() { + return this.kind == SURPRISE_CONNECT; + } + + /** + * Create a view event + * @param v the new view + */ + StartupEvent(NetView v) { + this.kind = VIEW; + this.gmsView = v; + } + + /** + * Indicate if this is a view event + * @return true if this is a view event + */ + boolean isGmsView() { + return this.kind == VIEW; + } + + /** + * Create a message event + * @param d the message + */ + StartupEvent(DistributionMessage d) { + this.kind = MESSAGE; + this.dmsg = d; + } + /** + * Indicate if this is a message event + * @return true if this is a message event + */ + boolean isDistributionMessage() { + return this.kind == MESSAGE; + } + } + + private int membershipCheckTimeout = DistributionConfig.DEFAULT_SECURITY_PEER_VERIFYMEMBER_TIMEOUT; + + /** + * This object synchronizes threads waiting for + * startup to finish. Updates to {@link #startupMessages} + * are synchronized through this object. + */ + protected final EventProcessingLock startupLock = new EventProcessingLock(); + + /** + * This is the latest view (ordered list of DistributedMembers) + * that has been installed + * + * All accesses to this object are protected via {@link #latestViewLock} + */ + protected NetView latestView = new NetView(); + + /** + * This is the lock for protecting access to latestView + * + * @see #latestView + */ + protected ReadWriteLock latestViewLock = new ReentrantReadWriteLock(); + + /** + * This is the listener that accepts our membership events + */ + protected com.gemstone.gemfire.distributed.internal.membership.DistributedMembershipListener listener; + + /** + * Membership failure listeners - for testing + */ + List membershipTestHooks; + + /** + * This is a representation of the local member (ourself) + */ + protected InternalDistributedMember address = null; // new DistributedMember(-1); + + protected DirectChannel directChannel; + + protected MyDCReceiver dcReceiver; + + volatile boolean isJoining; + + /** have we joined successfully? */ + volatile boolean hasJoined; + + /** + * Members of the distributed system that we believe have shut down. + * Keys are instances of {@link InternalDistributedMember}, values are + * Longs indicating the time this member was shunned. + * + * Members are removed after {@link #SHUNNED_SUNSET} seconds have + * passed. + * + * Accesses to this list needs to be under the read or write lock of {@link #latestViewLock} + * + * @see System#currentTimeMillis() + */ +// protected final Set shunnedMembers = Collections.synchronizedSet(new HashSet()); + protected final Map shunnedMembers = new ConcurrentHashMap(); + + /** + * Members that have sent a shutdown message. This is used to suppress + * suspect processing that otherwise becomes pretty aggressive + * when a member is shutting down. + */ + private final Map shutdownMembers = new BoundedLinkedHashMap(1000); + + /** + * per bug 39552, keep a list of members that have been shunned and for + * which a message is printed. Contents of this list are cleared at the + * same time they are removed from {@link #shunnedMembers}. + * + * Accesses to this list needs to be under the read or write lock of {@link #latestViewLock} + */ + protected final HashSet shunnedAndWarnedMembers = new HashSet(); + /** + * The identities and birth-times of others that we have allowed into + * membership at the distributed system level, but have not yet appeared + * in a view. + *

+ * Keys are instances of {@link InternalDistributedMember}, values are + * Longs indicating the time this member was shunned. + *

+ * Members are removed when a view containing them is processed. If, + * after {@link #surpriseMemberTimeout} milliseconds have passed, a view + * containing the member has not arrived, the member is removed from + * membership and member-left notification is performed. + *

> + * Accesses to this list needs to be under the read or write lock of {@link #latestViewLock} + * + * @see System#currentTimeMillis() + */ + protected final Map surpriseMembers = new ConcurrentHashMap(); + + /** + * the timeout interval for surprise members. This is calculated from + * the member-timeout setting + */ + protected int surpriseMemberTimeout; + + /** + * javagroups can skip views and omit telling us about a crashed member. + * This map holds a history of suspected members that we use to detect + * crashes. + */ + private final Map suspectedMembers = new ConcurrentHashMap(); + + /** + * the timeout interval for suspected members + */ + private final long suspectMemberTimeout = 180000; + + /** + * Length of time, in seconds, that a member is retained in the zombie set + * + * @see #shunnedMembers + */ + static private final int SHUNNED_SUNSET = Integer.getInteger( + "gemfire.shunned-member-timeout", 300).intValue(); + + /** + * Set to true when the service should stop. + */ + protected volatile boolean shutdownInProgress = false; + + /** + * Set to true when upcalls should be generated for + * events. + */ + protected volatile boolean processingEvents = false; + + /** + * This is the latest viewId installed + */ + long latestViewId = -1; + + /** distribution manager statistics */ + DMStats stats; + + /** + A list of messages received during channel startup that couldn't be processed yet. + Additions or removals of this list must be synchronized + via {@link #startupLock}. + @since 5.0 + */ + protected LinkedList startupMessages = new LinkedList(); + + /** + * ARB: the map of latches is used to block peer handshakes till + * authentication is confirmed. + */ + final private HashMap memberLatch = new HashMap(); + + /** + * Insert our own MessageReceiver between us and the direct channel, in order + * to correctly filter membership events. + * + * + */ + class MyDCReceiver implements DirectChannelListener + { + + DirectChannelListener upCall; + + /** + * Don't provide events until the caller has told us we are ready. + * + * Synchronization provided via GroupMembershipService.class. + * + * Note that in practice we only need to delay accepting the first + * client; we don't need to put this check before every call... + * + */ + MyDCReceiver(DirectChannelListener up) { + upCall = up; + } + + public void messageReceived(DistributionMessage msg) { + // bug 36851 - notify failure detection that we've had contact from a member + services.getHealthMonitor().contactedBy(msg.getSender()); + handleOrDeferMessage(msg); + } + + public DistributionManager getDM() { + return upCall.getDM(); + } + + } + + + /** if we connect to a locator that has NPD enabled then we enable it in this VM */ + public void enableNetworkPartitionDetection() { + if (logger.isDebugEnabled()) { + logger.debug("Network partition detection is being enabled"); + } + this.services.getConfig().getDistributionConfig().setEnableNetworkPartitionDetection(true); + this.services.getConfig().setNetworkPartitionDetectionEnabled(true); + } + + /** + * Analyze a given view object, generate events as appropriate + * + * @param newView + */ + protected void processView(long newViewId, NetView newView) + { + // Sanity check... + if (logger.isDebugEnabled()) { + StringBuffer msg = new StringBuffer(200); + msg.append("Membership: Processing view "); + msg.append(newView); + msg.append("} on " + address.toString()); + if (!newView.contains(address)) { + logger.info(LocalizedMessage.create( + LocalizedStrings.GroupMembershipService_THE_MEMBER_WITH_ID_0_IS_NO_LONGER_IN_MY_OWN_VIEW_1, + new Object[] {address, newView})); + } + } + +// if (newView.getCrashedMembers().size() > 0) { +// // dump stack for debugging #39827 +// OSProcess.printStacks(0); +// } + // We perform the update under a global lock so that other + // incoming events will not be lost in terms of our global view. + latestViewLock.writeLock().lock(); + try { + // first determine the version for multicast message serialization + Version version = Version.CURRENT; + for (Iterator> it=surpriseMembers.entrySet().iterator(); it.hasNext(); ) { + InternalDistributedMember mbr = it.next().getKey(); + Version itsVersion = mbr.getVersionObject(); + if (itsVersion != null && version.compareTo(itsVersion) < 0) { + version = itsVersion; + } + } + for (InternalDistributedMember mbr: newView.getMembers()) { + Version itsVersion = mbr.getVersionObject(); + if (itsVersion != null && itsVersion.compareTo(version) < 0) { + version = mbr.getVersionObject(); + } + } + disableMulticastForRollingUpgrade = !version.equals(Version.CURRENT); + + if (newViewId < latestViewId) { + // ignore this view since it is old news + return; + } + + // Save previous view, for delta analysis + NetView priorView = latestView; + + // update the view to reflect our changes, so that + // callbacks will see the new (updated) view. + latestViewId = newViewId; + latestView = new NetView(newView, newView.getViewId()); + + // look for additions + for (int i = 0; i < newView.getMembers().size(); i++) { // additions + InternalDistributedMember m = (InternalDistributedMember)newView.getMembers().get(i); + + // Once a member has been seen via a view, remove them from the + // newborn set + boolean wasSurprise = surpriseMembers.remove(m) != null; + + // bug #45155 - membership view processing was slow, causing a member to connect as "surprise" + // and the surprise timeout removed the member and shunned it, keeping it from being + // recognized as a valid member when it was finally seen in a view +// if (isShunned(m)) { +// warnShuns.add(m); +// continue; +// } + + // if it's in a view, it's no longer suspect + suspectedMembers.remove(m); + + if (priorView.contains(m) || wasSurprise) { + continue; // already seen + } + + // ARB: unblock any waiters for this particular member. + // i.e. signal any waiting threads in tcpconduit. + String authInit = this.services.getConfig().getDistributionConfig().getSecurityPeerAuthInit(); + boolean isSecure = authInit != null && authInit.length() != 0; + + if (isSecure) { + CountDownLatch currentLatch; + if ((currentLatch = (CountDownLatch)memberLatch.get(m)) != null) { + currentLatch.countDown(); + } + } + + if (shutdownInProgress()) { + addShunnedMember(m); + continue; // no additions processed after shutdown begins + } else { + boolean wasShunned = endShun(m); // bug #45158 - no longer shun a process that is now in view + if (wasShunned && logger.isDebugEnabled()) { + logger.debug("No longer shunning {} as it is in the current membership view", m); + } + } + + logger.info(LocalizedMessage.create(LocalizedStrings.GroupMembershipService_MEMBERSHIP_PROCESSING_ADDITION__0_, m)); + + try { + listener.newMemberConnected(m); + } + catch (VirtualMachineError err) { + SystemFailure.initiateFailure(err); + // If this ever returns, rethrow the error. We're poisoned + // now, so don't let this thread continue. + throw err; + } + catch (DistributedSystemDisconnectedException e) { + // don't log shutdown exceptions + } + catch (Throwable t) { + // Whenever you catch Error or Throwable, you must also + // catch VirtualMachineError (see above). However, there is + // _still_ a possibility that you are dealing with a cascading + // error condition, so you also need to check to see if the JVM + // is still usable: + SystemFailure.checkFailure(); + logger.info(LocalizedMessage.create( + LocalizedStrings.GroupMembershipService_MEMBERSHIP_FAULT_WHILE_PROCESSING_VIEW_ADDITION_OF__0, m), t); + } + } // additions + + // look for departures + for (int i = 0; i < priorView.getMembers().size(); i++) { // departures + InternalDistributedMember m = (InternalDistributedMember)priorView.getMembers().get(i); + if (newView.contains(m)) { + continue; // still alive + } + + if (surpriseMembers.containsKey(m)) { + continue; // member has not yet appeared in a view + } + + try { + removeWithViewLock(m, + newView.getCrashedMembers().contains(m) || suspectedMembers.containsKey(m) + , "departed membership view"); + } + catch (VirtualMachineError err) { + SystemFailure.initiateFailure(err); + // If this ever returns, rethrow the error. We're poisoned + // now, so don't let this thread continue. + throw err; + } + catch (Throwable t) { + // Whenever you catch Error or Throwable, you must also + // catch VirtualMachineError (see above). However, there is + // _still_ a possibility that you are dealing with a cascading + // error condition, so you also need to check to see if the JVM + // is still usable: + SystemFailure.checkFailure(); + logger.info(LocalizedMessage.create( + LocalizedStrings.GroupMembershipService_MEMBERSHIP_FAULT_WHILE_PROCESSING_VIEW_REMOVAL_OF__0, m), t); + } + } // departures + + // expire surprise members, add others to view + long oldestAllowed = System.currentTimeMillis() - this.surpriseMemberTimeout; + for (Iterator> it=surpriseMembers.entrySet().iterator(); it.hasNext(); ) { + Map.Entry entry = it.next(); + Long birthtime = (Long)entry.getValue(); + if (birthtime.longValue() < oldestAllowed) { + it.remove(); + InternalDistributedMember m = entry.getKey(); + logger.info(LocalizedMessage.create( + LocalizedStrings.GroupMembershipService_MEMBERSHIP_EXPIRING_MEMBERSHIP_OF_SURPRISE_MEMBER_0, m)); + removeWithViewLock(m, true, "not seen in membership view in " + + this.surpriseMemberTimeout + "ms"); + } + else { + if (!latestView.contains(entry.getKey())) { + latestView.add(entry.getKey()); + } + } + } + // expire suspected members + oldestAllowed = System.currentTimeMillis() - this.suspectMemberTimeout; + for (Iterator it=suspectedMembers.entrySet().iterator(); it.hasNext(); ) { + Map.Entry entry = (Map.Entry)it.next(); + Long birthtime = (Long)entry.getValue(); + if (birthtime.longValue() < oldestAllowed) { + InternalDistributedMember m = (InternalDistributedMember)entry.getKey(); + it.remove(); + } + } + try { + listener.viewInstalled(latestView); + startCleanupTimer(); + } + catch (DistributedSystemDisconnectedException se) { + } + } finally { + latestViewLock.writeLock().unlock(); + } + } + + /** + * the timer used to perform periodic tasks + * + * Concurrency: protected by {@link #latestViewLock} ReentrantReadWriteLock + */ + private SystemTimer cleanupTimer; + + private Services services; + + private boolean mcastEnabled; + + private boolean tcpDisabled; + + + @Override + public boolean isMulticastAllowed() { + return !disableMulticastForRollingUpgrade; + } + + /** + * Joins the distributed system + * + * @throws GemFireConfigException - configuration error + * @throws SystemConnectException - problem joining + */ + private void join() { + services.setShutdownCause(null); + services.getCancelCriterion().cancel(null); + + latestViewLock.writeLock().lock(); + try { + try { + this.isJoining = true; // added for bug #44373 + + // connect + long start = System.currentTimeMillis(); + + boolean ok = services.getJoinLeave().join(); + + if (!ok) { + throw new GemFireConfigException("Unable to join the distributed system. " + + "Operation either timed out, was stopped or Locator does not exist."); + } + + long delta = System.currentTimeMillis() - start; + + logger.info(LogMarker.DISTRIBUTION, LocalizedMessage.create( + LocalizedStrings.GroupMembershipService_JOINED_TOOK__0__MS, delta)); + + NetView initialView = services.getJoinLeave().getView(); + latestView = new NetView(initialView, initialView.getViewId()); + listener.viewInstalled(latestView); + + } catch (RuntimeException ex) { + throw ex; + } + catch (Exception ex) { + if (ex.getCause() != null && ex.getCause().getCause() instanceof SystemConnectException) { + throw (SystemConnectException)(ex.getCause().getCause()); + } + throw new DistributionException(LocalizedStrings.GroupMembershipService_AN_EXCEPTION_WAS_THROWN_WHILE_JOINING.toLocalizedString(), ex); + } + finally { + this.isJoining = false; + } + } + finally { + latestViewLock.writeLock().unlock(); + } + } + + + public GMSMembershipManager(DistributedMembershipListener listener) { + Assert.assertTrue(listener != null); + this.listener = listener; + } + + @Override + public void init(Services services) { + this.services = services; + + Assert.assertTrue(services != null); + + this.stats = services.getStatistics(); + DistributionConfig config = services.getConfig().getDistributionConfig(); + RemoteTransportConfig transport = services.getConfig().getTransport(); + + this.membershipCheckTimeout = config.getSecurityPeerMembershipTimeout(); + this.wasReconnectingSystem = transport.getIsReconnectingDS(); + + // cache these settings for use in send() + this.mcastEnabled = transport.isMcastEnabled(); + this.tcpDisabled = transport.isTcpDisabled(); + + if (!this.tcpDisabled) { + dcReceiver = new MyDCReceiver(listener); + } + + surpriseMemberTimeout = Math.max(20 * DistributionConfig.DEFAULT_MEMBER_TIMEOUT, + 20 * config.getMemberTimeout()); + surpriseMemberTimeout = Integer.getInteger("gemfire.surprise-member-timeout", surpriseMemberTimeout).intValue(); + + } + + @Override + public void start() { + DistributionConfig config = services.getConfig().getDistributionConfig(); + RemoteTransportConfig transport = services.getConfig().getTransport(); + + int dcPort = 0; + if (!tcpDisabled) { + directChannel = new DirectChannel(this, dcReceiver, config); + dcPort = directChannel.getPort(); + } + + + services.getMessenger().getMemberID().setDirectChannelPort(dcPort); + + } + + + @Override + public void joinDistributedSystem() { + long startTime = System.currentTimeMillis(); + + try { + join(); + } + catch (RuntimeException e) { + if (directChannel != null) { + directChannel.disconnect(e); + } + throw e; + } + + this.address = services.getMessenger().getMemberID(); + + int dcPort = 0; + if (directChannel != null) { + dcPort = directChannel.getPort(); + } + + if (directChannel != null) { + directChannel.setLocalAddr(address); + } + + this.hasJoined = true; + + // in order to debug startup issues we need to announce the membership + // ID as soon as we know it + logger.info(LocalizedMessage.create(LocalizedStrings.GroupMembershipService_entered_into_membership_in_group_0_with_id_1, + new Object[]{""+(System.currentTimeMillis()-startTime)})); + + } + + @Override + public void started() { + } + + + /** this is invoked by JoinLeave when there is a loss of quorum in the membership system */ + public void quorumLost(Collection failures, NetView view) { + // notify of quorum loss if split-brain detection is enabled (meaning we'll shut down) or + // if the loss is more than one member + + boolean notify = failures.size() > 1; + if (!notify) { + notify = services.getConfig().isNetworkPartitionDetectionEnabled(); + } + + if (notify) { + List remaining = new ArrayList(view.getMembers()); + remaining.removeAll(failures); + + if (inhibitForceDisconnectLogging) { + if (logger.isDebugEnabled()) { + logger.debug("Possible loss of quorum"); + } + } + logger.fatal(LocalizedMessage.create( + LocalizedStrings.GroupMembershipService_POSSIBLE_LOSS_OF_QUORUM_DETECTED, new Object[] {failures.size(), failures})); + if (inhibitForceDisconnectLogging) { + if (logger.isDebugEnabled()) { + logger.debug("Possible loss of quorum"); + } + } + + + try { + this.listener.quorumLost(new HashSet(failures), + remaining); + } catch (CancelException e) { + // safe to ignore - a forced disconnect probably occurred + } + } + } + + + @Override + public boolean testMulticast() { + try { + return services.getMessenger().testMulticast(services.getConfig().getMemberTimeout()); + } catch (InterruptedException e) { + services.getCancelCriterion().checkCancelInProgress(e); + Thread.currentThread().interrupt(); + return false; + } + } + + /** + * Remove a member. {@link #latestViewLock} must be held + * before this method is called. If member is not already shunned, + * the uplevel event handler is invoked. + * + * @param dm + * @param crashed + * @param reason + */ + protected void removeWithViewLock(InternalDistributedMember dm, + boolean crashed, String reason) { + boolean wasShunned = isShunned(dm); + + // Delete resources + destroyMember(dm, crashed, reason); + + if (wasShunned) { + return; // Explicit deletion, no upcall. + } + + try { + listener.memberDeparted(dm, crashed, reason); + } + catch (DistributedSystemDisconnectedException se) { + // let's not get huffy about it + } + } + + /** + * Process a surprise connect event, or place it on the startup queue. + * @param member the member + */ + protected void handleOrDeferSurpriseConnect(InternalDistributedMember member) { + synchronized (startupLock) { + if (!processingEvents) { + startupMessages.add(new StartupEvent(member)); + return; + } + } + processSurpriseConnect(member); + } + + public void startupMessageFailed(DistributedMember mbr, String failureMessage) { + // fix for bug #40666 + addShunnedMember((InternalDistributedMember)mbr); + // fix for bug #41329, hang waiting for replies + try { + listener.memberDeparted((InternalDistributedMember)mbr, true, "failed to pass startup checks"); + } + catch (DistributedSystemDisconnectedException se) { + // let's not get huffy about it + } + } + + + /** + * Logic for handling a direct connection event (message received + * from a member not in the view). Does not employ the + * startup queue. + *

+ * Must be called with {@link #latestViewLock} held. Waits + * until there is a stable view. If the member has already + * been added, simply returns; else adds the member. + * + * @param dm the member joining + */ + public boolean addSurpriseMember(DistributedMember dm) { + final InternalDistributedMember member = (InternalDistributedMember)dm; + boolean warn = false; + + latestViewLock.writeLock().lock(); + try { + // At this point, the join may have been discovered by + // other means. + if (latestView.contains(member)) { + return true; + } + if (surpriseMembers.containsKey(member)) { + return true; + } + if (member.getVmViewId() < 0) { + logger.warn("adding a surprise member that has not yet joined the distributed system: " + member, new Exception("stack trace")); + } + if (latestView.getViewId() > member.getVmViewId()) { + // tell the process that it should shut down distribution. + // Run in a separate thread so we don't hold the view lock during the request. Bug #44995 + new Thread(Thread.currentThread().getThreadGroup(), + "Removing shunned GemFire node " + member) { + @Override + public void run() { + // fix for bug #42548 + // this is an old member that shouldn't be added + logger.warn(LocalizedMessage.create( + LocalizedStrings.GroupMembershipService_Invalid_Surprise_Member, new Object[]{member, latestView})); + requestMemberRemoval(member, "this member is no longer in the view but is initiating connections"); + } + }.start(); + addShunnedMember(member); + return false; + } + + // Adding him to this set ensures we won't remove him if a new + // view comes in and he's still not visible. + surpriseMembers.put(member, Long.valueOf(System.currentTimeMillis())); + + if (shutdownInProgress()) { + // Force disconnect, esp. the TCPConduit + String msg = LocalizedStrings.GroupMembershipService_THIS_DISTRIBUTED_SYSTEM_IS_SHUTTING_DOWN.toLocalizedString(); + if (directChannel != null) { + try { + directChannel.closeEndpoint(member, msg); + } catch (DistributedSystemDisconnectedException e) { + // ignore - happens during shutdown + } + } + destroyMember(member, false, msg); // for good luck + return true; // allow during shutdown + } + + if (isShunned(member)) { + warn = true; + surpriseMembers.remove(member); + } else { + + // Now that we're sure the member is new, add them. + // make sure the surprise-member cleanup task is running + if (this.cleanupTimer == null) { + startCleanupTimer(); + } // cleanupTimer == null + + // Ensure that the member is accounted for in the view + // Conjure up a new view including the new member. This is necessary + // because we are about to tell the listener about a new member, so + // the listener should rightfully expect that the member is in our + // membership view. + + // However, we put the new member at the end of the list. This + // should ensure he's not chosen as an elder. + // This will get corrected when he finally shows up in the + // view. + NetView newMembers = new NetView(latestView, latestView.getViewId()); + newMembers.add(member); + latestView = newMembers; + } + } finally { + latestViewLock.writeLock().unlock(); + } + if (warn) { // fix for bug #41538 - deadlock while alerting + logger.warn(LocalizedMessage.create( + LocalizedStrings.GroupMembershipService_MEMBERSHIP_IGNORING_SURPRISE_CONNECT_FROM_SHUNNED_MEMBER_0, member)); + } else { + listener.newMemberConnected(member); + } + return !warn; + } + + + /** starts periodic task to perform cleanup chores such as expire surprise members */ + private void startCleanupTimer() { + latestViewLock.writeLock().lock(); + try { + if (this.cleanupTimer != null) { + return; + } + DistributedSystem ds = InternalDistributedSystem.getAnyInstance(); + if (ds != null && ds.isConnected()) { + this.cleanupTimer = new SystemTimer(ds, true); + SystemTimer.SystemTimerTask st = new SystemTimer.SystemTimerTask() { + @Override + public void run2() { + latestViewLock.writeLock().lock(); + try { + long oldestAllowed = System.currentTimeMillis() - surpriseMemberTimeout; + for (Iterator it=surpriseMembers.entrySet().iterator(); it.hasNext(); ) { + Map.Entry entry = (Map.Entry)it.next(); + Long birthtime = (Long)entry.getValue(); + if (birthtime.longValue() < oldestAllowed) { + it.remove(); + InternalDistributedMember m = (InternalDistributedMember)entry.getKey(); + logger.info(LocalizedMessage.create( + LocalizedStrings.GroupMembershipService_MEMBERSHIP_EXPIRING_MEMBERSHIP_OF_SURPRISE_MEMBER_0, m)); + removeWithViewLock(m, true, "not seen in membership view in " + + surpriseMemberTimeout + "ms"); + } + } + } finally { + latestViewLock.writeLock().unlock(); + } + } + }; + this.cleanupTimer.scheduleAtFixedRate(st, surpriseMemberTimeout, surpriseMemberTimeout/3); + } // ds != null && ds.isConnected() + } finally { + latestViewLock.writeLock().unlock(); + } + } + /** + * Dispatch the distribution message, or place it on the startup queue. + * + * @param msg the message to process + */ + protected void handleOrDeferMessage(DistributionMessage msg) { + synchronized(startupLock) { + if (!processingEvents) { + startupMessages.add(new StartupEvent(msg)); + return; + } + } + dispatchMessage(msg); + } + + public void warnShun(DistributedMember m) { + latestViewLock.writeLock().lock(); + try { + if (!shunnedMembers.containsKey(m)) { + return; // not shunned + } + if (shunnedAndWarnedMembers.contains(m)) { + return; // already warned + } + shunnedAndWarnedMembers.add(m); + } finally { + latestViewLock.writeLock().unlock(); + } + // issue warning outside of sync since it may cause messaging and we don't + // want to hold the view lock while doing that + logger.warn(LocalizedMessage.create(LocalizedStrings.GroupMembershipService_MEMBERSHIP_DISREGARDING_SHUNNED_MEMBER_0, m)); + } + + @Override + public void processMessage(DistributionMessage msg) { + handleOrDeferMessage(msg); + } + + /** + * Logic for processing a distribution message. + *

+ * It is possible to receive messages not consistent with our view. + * We handle this here, and generate an uplevel event if necessary + * @param msg the message + */ + public void dispatchMessage(DistributionMessage msg) { + boolean isNew = false; + InternalDistributedMember m = msg.getSender(); + boolean shunned = false; + + // First grab the lock: check the sender against our stabilized view. + latestViewLock.writeLock().lock(); + try { + if (isShunned(m)) { + if (msg instanceof StartupMessage) { + endShun(m); + } + else { + // fix for bug 41538 - sick alert listener causes deadlock + // due to view lock being held during messaging + shunned = true; + } + } // isShunned + + if (!shunned) { + isNew = !latestView.contains(m) && !surpriseMembers.containsKey(m); + + // If it's a new sender, wait our turn, generate the event + if (isNew) { + shunned = !addSurpriseMember(m); + } // isNew + } + + // Latch the view before we unlock + } finally { + latestViewLock.writeLock().unlock(); + } + + if (shunned) { // bug #41538 - shun notification must be outside synchronization to avoid hanging + warnShun(m); + logger.info("Membership: Ignoring message from shunned member <{}>:{}", m, msg); + throw new MemberShunnedException(m); + } + + listener.messageReceived(msg); + } + + /** + * Process a new view object, or place on the startup queue + * @param viewArg the new view + */ + protected void handleOrDeferViewEvent(NetView viewArg) { + if (this.isJoining) { + // bug #44373 - queue all view messages while joining. + // This is done under the latestViewLock, but we can't block here because + // we're sitting in the UDP reader thread. + synchronized(startupLock) { + startupMessages.add(new StartupEvent(viewArg)); + return; + } + } + latestViewLock.writeLock().lock(); + try { + synchronized(startupLock) { + if (!processingEvents) { + startupMessages.add(new StartupEvent(viewArg)); + return; + } + } + // view processing can take a while, so we use a separate thread + // to avoid blocking a reader thread + NetView newView = viewArg; + long newId = viewArg.getViewId(); + LocalViewMessage v = new LocalViewMessage(address, newId, newView, + GMSMembershipManager.this); + + listener.messageReceived(v); + } finally { + latestViewLock.writeLock().unlock(); + } + } + + @Override + public void memberSuspected(InternalDistributedMember initiator, InternalDistributedMember suspect, String reason) { + SuspectMember s = new SuspectMember(initiator, suspect, reason); + handleOrDeferSuspect(s); + } + + /** + * Process a new view object, or place on the startup queue + * @param suspectInfo the suspectee and suspector + */ + protected void handleOrDeferSuspect(SuspectMember suspectInfo) { + latestViewLock.writeLock().lock(); + try { + synchronized(startupLock) { + if (!processingEvents) { + return; + } + } + InternalDistributedMember suspect = suspectInfo.suspectedMember; + InternalDistributedMember who = suspectInfo.whoSuspected; + this.suspectedMembers.put(suspect, Long.valueOf(System.currentTimeMillis())); + try { + listener.memberSuspect(suspect, who, suspectInfo.reason); + } + catch (DistributedSystemDisconnectedException se) { + // let's not get huffy about it + } + } finally { + latestViewLock.writeLock().unlock(); + } + } + + /** + * Process a potential direct connect. Does not use + * the startup queue. It grabs the {@link #latestViewLock} + * and then processes the event. + *

+ * It is a potential event, because we don't know until we've + * grabbed a stable view if this is really a new member. + * + * @param member + */ + private void processSurpriseConnect( + InternalDistributedMember member) + { + addSurpriseMember(member); + } + + /** + * Dispatch routine for processing a single startup event + * @param o the startup event to handle + */ + private void processStartupEvent(StartupEvent o) { + // Most common events first + + if (o.isDistributionMessage()) { // normal message + try { + dispatchMessage(o.dmsg); + } + catch (MemberShunnedException e) { + // message from non-member - ignore + } + } + else if (o.isGmsView()) { // view event + processView(o.gmsView.getViewId(), o.gmsView); + } + else if (o.isSurpriseConnect()) { // connect + processSurpriseConnect(o.member); + } + + else // sanity + throw new InternalGemFireError(LocalizedStrings.GroupMembershipService_UNKNOWN_STARTUP_EVENT_0.toLocalizedString(o)); + } + + /** + * Special mutex to create a critical section for + * {@link #startEventProcessing()} + */ + private final Object startupMutex = new Object(); + + + public void startEventProcessing() + { + // Only allow one thread to perform the work + synchronized (startupMutex) { + if (logger.isDebugEnabled()) + logger.debug("Membership: draining startup events."); + // Remove the backqueue of messages, but allow + // additional messages to be added. + for (;;) { + StartupEvent ev; + // Only grab the mutex while reading the queue. + // Other events may arrive while we're attempting to + // drain the queue. This is OK, we'll just keep processing + // events here until we've caught up. + synchronized (startupLock) { + int remaining = startupMessages.size(); + if (remaining == 0) { + // While holding the lock, flip the bit so that + // no more events get put into startupMessages, and + // notify all waiters to proceed. + processingEvents = true; + startupLock.notifyAll(); + break; // ...and we're done. + } + if (logger.isDebugEnabled()) { + logger.debug("Membership: {} remaining startup message(s)", remaining); + } + ev = (StartupEvent)startupMessages.removeFirst(); + } // startupLock + try { + processStartupEvent(ev); + } + catch (VirtualMachineError err) { + SystemFailure.initiateFailure(err); + // If this ever returns, rethrow the error. We're poisoned + // now, so don't let this thread continue. + throw err; + } + catch (Throwable t) { + // Whenever you catch Error or Throwable, you must also + // catch VirtualMachineError (see above). However, there is + // _still_ a possibility that you are dealing with a cascading + // error condition, so you also need to check to see if the JVM + // is still usable: + SystemFailure.checkFailure(); + logger.warn(LocalizedMessage.create(LocalizedStrings.GroupMembershipService_MEMBERSHIP_ERROR_HANDLING_STARTUP_EVENT), t); + } + + } // for + if (logger.isDebugEnabled()) + logger.debug("Membership: finished processing startup events."); + } // startupMutex + } + + + public void waitForEventProcessing() throws InterruptedException { + // First check outside of a synchronized block. Cheaper and sufficient. + if (Thread.interrupted()) throw new InterruptedException(); + if (processingEvents) + return; + if (logger.isDebugEnabled()) { + logger.debug("Membership: waiting until the system is ready for events"); + } + for (;;) { + directChannel.getCancelCriterion().checkCancelInProgress(null); + synchronized (startupLock) { + // Now check using a memory fence and synchronization. + if (processingEvents) + break; + boolean interrupted = Thread.interrupted(); + try { + startupLock.wait(); + } + catch (InterruptedException e) { + interrupted = true; + directChannel.getCancelCriterion().checkCancelInProgress(e); + } + finally { + if (interrupted) { + Thread.currentThread().interrupt(); + } + } + } // synchronized + } // for + if (logger.isDebugEnabled()) { + logger.debug("Membership: continuing"); + } + } + + /** + * for testing we need to validate the startup event list + */ + public List getStartupEvents() { + return this.startupMessages; + } + + public ReadWriteLock getViewLock() { + return this.latestViewLock; + } + + /** + * Returns a copy (possibly not current) of the current + * view (a list of {@link DistributedMember}s) + */ + public NetView getView() + { + // Grab the latest view under a mutex... + NetView v; + + latestViewLock.readLock().lock(); + v = latestView; + latestViewLock.readLock().unlock(); + + NetView result = new NetView(v, v.getViewId()); + + for (InternalDistributedMember m: v.getMembers()) { + if (isShunned(m)) { + result.remove(m); + } + } + + return result; + } + + /** + * test hook

+ * The lead member is the eldest member with partition detection enabled.

+ * If no members have partition detection enabled, there will be no + * lead member and this method will return null. + * @return the lead member associated with the latest view + */ + public DistributedMember getLeadMember() { + latestViewLock.readLock().lock(); + try { + return latestView == null? null : latestView.getLeadMember(); + } finally { + latestViewLock.readLock().unlock(); + } + } + + protected boolean isJoining() { + return this.isJoining; + } + + /** + * test hook + * @return the current membership view coordinator + */ + public DistributedMember getCoordinator() { + // note - we go straight to JoinLeave because the + // DistributionManager queues view changes in a serial executor, where + // they're asynchronously installed. The DS may still see the old coordinator + latestViewLock.readLock().lock(); + try { + return latestView == null? null : latestView.getCoordinator(); + } finally { + latestViewLock.readLock().unlock(); + } + } + + public boolean memberExists(DistributedMember m) { + latestViewLock.readLock().lock(); + NetView v = latestView; + latestViewLock.readLock().unlock(); + return v.getMembers().contains(m); + } + + /** + * Returns the identity associated with this member. WARNING: this value will + * be returned after the channel is closed, but in that case it is good for + * logging purposes only. :-) + */ + public InternalDistributedMember getLocalMember() + { + return address; + } + + public Services getServices() { + return services; + } + + public void postConnect() { + } + + /** + * @see SystemFailure#loadEmergencyClasses() + /** + * break any potential circularity in {@link #loadEmergencyClasses()} + */ + private static volatile boolean emergencyClassesLoaded = false; + + /** + * inhibits logging of ForcedDisconnectException to keep dunit logs clean + * while testing this feature + */ + protected static volatile boolean inhibitForceDisconnectLogging; + + /** + * Ensure that the critical classes from components + * get loaded. + * + * @see SystemFailure#loadEmergencyClasses() + */ + public static void loadEmergencyClasses() { + if (emergencyClassesLoaded) return; + emergencyClassesLoaded = true; + DirectChannel.loadEmergencyClasses(); + GMSJoinLeave.loadEmergencyClasses(); + GMSHealthMonitor.loadEmergencyClasses(); + } + /** + * Close the receiver, avoiding all potential deadlocks and + * eschewing any attempts at being graceful. + * + * @see SystemFailure#emergencyClose() + */ + public void emergencyClose() { + final boolean DEBUG = SystemFailure.TRACE_CLOSE; + + setShutdown(); + + // We can't call close() because they will allocate objects. Attempt + // a surgical strike and touch the important protocols. + + // MOST important, kill the FD protocols... + services.emergencyClose(); + + // Close the TCPConduit sockets... + if (directChannel != null) { + if (DEBUG) { + System.err.println("DEBUG: emergency close of DirectChannel"); + } + directChannel.emergencyClose(); + } + + if (DEBUG) { + System.err.println("DEBUG: done closing GroupMembershipService"); + } + } + + + /** + * in order to avoid split-brain occurring when a member is shutting down due to + * race conditions in view management we add it as a shutdown member when we receive + * a shutdown message. This is not the same as a SHUNNED member. + */ + public void shutdownMessageReceived(InternalDistributedMember id, String reason) { + if (logger.isDebugEnabled()) { + logger.debug("Membership: recording shutdown status of {}", id); + } + synchronized(this.shutdownMembers) { + this.shutdownMembers.put(id, id); + services.getHealthMonitor().memberShutdown(id, reason); + services.getJoinLeave().memberShutdown(id, reason); + } + } + + /** + * returns true if a shutdown message has been received from the given address but + * that member is still in the membership view or is a surprise member. + */ + public boolean isShuttingDown(InternalDistributedMember mbr) { + synchronized(shutdownMembers) { + return shutdownMembers.containsKey(mbr); + } + } + + + public void shutdown() { + setShutdown(); + services.stop(); + } + + @Override + public void stop() { + + // [bruce] Do not null out the channel w/o adding appropriate synchronization + + logger.debug("MembershipManager closing"); + + if (directChannel != null) { + directChannel.disconnect(null); + + if (address != null) { + // Make sure that channel information is consistent + // Probably not important in this particular case, but just + // to be consistent... + latestViewLock.writeLock().lock(); + try { + destroyMember(address, false, "orderly shutdown"); + } finally { + latestViewLock.writeLock().unlock(); + } + } + } + + if (cleanupTimer != null) { + cleanupTimer.cancel(); + } + + if (logger.isDebugEnabled()) { + logger.debug("Membership: channel closed"); + } + } + + public void uncleanShutdown(String reason, final Exception e) { + inhibitForcedDisconnectLogging(false); + + if (services.getShutdownCause() == null) { + services.setShutdownCause(e); + } + + if (this.directChannel != null) { + this.directChannel.disconnect(e); + } + + // first shut down communication so we don't do any more harm to other + // members + services.emergencyClose(); + + if (e != null) { + try { + if (membershipTestHooks != null) { + List l = membershipTestHooks; + for (Iterator it=l.iterator(); it.hasNext(); ) { + MembershipTestHook dml = (MembershipTestHook)it.next(); + dml.beforeMembershipFailure(reason, e); + } + } + listener.membershipFailure(reason, e); + if (membershipTestHooks != null) { + List l = membershipTestHooks; + for (Iterator it=l.iterator(); it.hasNext(); ) { + MembershipTestHook dml = (MembershipTestHook)it.next(); + dml.afterMembershipFailure(reason, e); + } + } + } + catch (RuntimeException re) { + logger.warn(LocalizedMessage.create(LocalizedStrings.GroupMembershipService_EXCEPTION_CAUGHT_WHILE_SHUTTING_DOWN), re); + } + } + } + + /** generate XML for the cache before shutting down due to forced disconnect */ + public void saveCacheXmlForReconnect() { + // there are two versions of this method so it can be unit-tested + boolean sharedConfigEnabled = services.getConfig().getDistributionConfig().getUseSharedConfiguration(); + saveCacheXmlForReconnect(sharedConfigEnabled); + } + + /** generate XML from the cache before shutting down due to forced disconnect */ + public void saveCacheXmlForReconnect(boolean sharedConfigEnabled) { + // first save the current cache description so reconnect can rebuild the cache + GemFireCacheImpl cache = GemFireCacheImpl.getInstance(); + if (cache != null && (cache instanceof Cache)) { + if (!Boolean.getBoolean("gemfire.autoReconnect-useCacheXMLFile") + && !cache.isSqlfSystem() && !sharedConfigEnabled) { + try { + logger.info("generating XML to rebuild the cache after reconnect completes"); + StringPrintWriter pw = new StringPrintWriter(); + CacheXmlGenerator.generate((Cache)cache, pw, true, false); + String cacheXML = pw.toString(); + cache.getCacheConfig().setCacheXMLDescription(cacheXML); + logger.info("XML generation completed: {}", cacheXML); + } catch (CancelException e) { + logger.info(LocalizedMessage.create(LocalizedStrings.GroupMembershipService_PROBLEM_GENERATING_CACHE_XML), e); + } + } else if (sharedConfigEnabled && !cache.getCacheServers().isEmpty()) { + // we need to retain a cache-server description if this JVM was started by gfsh + List list = new ArrayList(cache.getCacheServers().size()); + for (Iterator it = cache.getCacheServers().iterator(); it.hasNext(); ) { + CacheServerImpl cs = (CacheServerImpl)it.next(); + if (cs.isDefaultServer()) { + CacheServerCreation bsc = new CacheServerCreation(cache, cs); + list.add(bsc); + } + } + cache.getCacheConfig().setCacheServerCreation(list); + logger.info("CacheServer configuration saved"); + } + } + } + + public boolean requestMemberRemoval(DistributedMember mbr, String reason) { + if (mbr.equals(this.address)) { + return false; + } + logger.warn(LocalizedMessage.create( + LocalizedStrings.GroupMembershipService_MEMBERSHIP_REQUESTING_REMOVAL_OF_0_REASON_1, + new Object[] {mbr, reason})); + try { + services.getJoinLeave().remove((InternalDistributedMember)mbr, reason); + } + catch (RuntimeException e) { + Throwable problem = e; + if (services.getShutdownCause() != null) { + Throwable cause = services.getShutdownCause(); + // If ForcedDisconnectException occurred then report it as actual + // problem. + if (cause instanceof ForcedDisconnectException) { + problem = (Exception) cause; + } else { + Throwable ne = problem; + while (ne.getCause() != null) { + ne = ne.getCause(); + } + try { + ne.initCause(services.getShutdownCause()); + } + catch (IllegalArgumentException selfCausation) { + // fix for bug 38895 - the cause is already in place + } + } + } + if (!services.getConfig().getDistributionConfig().getDisableAutoReconnect()) { + saveCacheXmlForReconnect(); + } + listener.membershipFailure("Channel closed", problem); + throw new DistributedSystemDisconnectedException("Channel closed", problem); + } + return true; + } + + public void suspectMembers(Set members, String reason) { + for (Iterator it=members.iterator(); it.hasNext(); ) { + verifyMember((DistributedMember)it.next(), reason); + } + } + + public void suspectMember(DistributedMember mbr, String reason) { + if (!this.shutdownInProgress && !this.shutdownMembers.containsKey(mbr)) { + verifyMember(mbr, reason); + } + } + + /* like memberExists() this checks to see if the given ID is in the current + * membership view. If it is in the view though we try to contact it + * to see if it's still around. If we can't contact it then + * suspect messages are sent to initiate final checks + * @param mbr the member to verify + * @param reason why the check is being done (must not be blank/null) + * @return true if the member checks out + */ + public boolean verifyMember(DistributedMember mbr, String reason) { + if (mbr != null && memberExists((InternalDistributedMember)mbr)) { + return this.services.getHealthMonitor().checkIfAvailable(mbr, reason, true); + } + return false; + } + + /** + * Perform the grossness associated with sending a message over + * a DirectChannel + * + * @param destinations the list of destinations + * @param content the message + * @param theStats the statistics object to update + * @return all recipients who did not receive the message (null if + * all received it) + * @throws NotSerializableException if the message is not serializable + */ + protected Set directChannelSend(InternalDistributedMember[] destinations, + DistributionMessage content, + DMStats theStats) + throws NotSerializableException + { + boolean allDestinations; + InternalDistributedMember[] keys; + if (content.forAll()) { + allDestinations = true; + latestViewLock.writeLock().lock(); + try { + List keySet = latestView.getMembers(); + keys = new InternalDistributedMember[keySet.size()]; + keys = (InternalDistributedMember[])keySet.toArray(keys); + } finally { + latestViewLock.writeLock().unlock(); + } + } + else { + allDestinations = false; + keys = destinations; + } + + int sentBytes = 0; + try { + sentBytes = directChannel.send(this, keys, content, + this.services.getConfig().getDistributionConfig().getAckWaitThreshold(), + this.services.getConfig().getDistributionConfig().getAckSevereAlertThreshold()); + + if (theStats != null) { + theStats.incSentBytes(sentBytes); + } + + if (sentBytes == 0) { + if (services.getCancelCriterion().cancelInProgress() != null) { + throw new DistributedSystemDisconnectedException(); + } + } + } + catch (DistributedSystemDisconnectedException ex) { + if (services.getShutdownCause() != null) { + throw new DistributedSystemDisconnectedException("DistributedSystem is shutting down", services.getShutdownCause()); + } else { + throw ex; // see bug 41416 + } + } + catch (ConnectExceptions ex) { + if (allDestinations) + return null; + + List members = ex.getMembers(); // We need to return this list of failures + + // SANITY CHECK: If we fail to send a message to an existing member + // of the view, we have a serious error (bug36202). + NetView view = services.getJoinLeave().getView(); // grab a recent view, excluding shunned members + + // Iterate through members and causes in tandem :-( + Iterator it_mem = members.iterator(); + Iterator it_causes = ex.getCauses().iterator(); + while (it_mem.hasNext()) { + InternalDistributedMember member = (InternalDistributedMember)it_mem.next(); + Throwable th = (Throwable)it_causes.next(); + + if (!view.contains(member) || (th instanceof ShunnedMemberException)) { + continue; + } + logger.fatal(LocalizedMessage.create( + LocalizedStrings.GroupMembershipService_FAILED_TO_SEND_MESSAGE_0_TO_MEMBER_1_VIEW_2, + new Object[] {content, member, view}), th); +// Assert.assertTrue(false, "messaging contract failure"); + } + return new HashSet(members); + } // catch ConnectionExceptions + catch (ToDataException | CancelException e) { + throw e; + } + catch (IOException e) { + if (logger.isDebugEnabled()) { + logger.debug("Membership: directChannelSend caught exception: {}", e.getMessage(), e); + } + if (e instanceof NotSerializableException) { + throw (NotSerializableException)e; + } + } + catch (RuntimeException e) { + if (logger.isDebugEnabled()) { + logger.debug("Membership: directChannelSend caught exception: {}", e.getMessage(), e); + } + throw e; + } + catch (Error e) { + if (logger.isDebugEnabled()) { + logger.debug("Membership: directChannelSend caught exception: {}", e.getMessage(), e); + } + throw e; + } + return null; + } + + /* + * (non-Javadoc) + * @see com.gemstone.gemfire.distributed.internal.membership.MembershipManager#isConnected() + */ + public boolean isConnected() { + return (this.hasJoined && !this.shutdownInProgress); + } + + /** + * Returns true if the distributed system is in the process of auto-reconnecting. + * Otherwise returns false. + */ + public boolean isReconnectingDS() { + if (this.hasJoined) { + return false; + } else { + return this.wasReconnectingSystem; + } + } + + @Override + public QuorumChecker getQuorumChecker() { + if ( ! (services.isShutdownDueToForcedDisconnect()) ) { + return null; + } + if (this.quorumChecker != null) { + return this.quorumChecker; + } + + QuorumChecker impl = services.getMessenger().getQuorumChecker(); + this.quorumChecker = impl; + return impl; + } + + @Override + public void releaseQuorumChecker(QuorumChecker checker) { + ((GMSQuorumChecker)checker).suspend(); + InternalDistributedSystem system = InternalDistributedSystem.getAnyInstance(); + if (system == null || !system.isConnected()) { + checker.close(); + } + } + + public Set send(InternalDistributedMember dest, DistributionMessage msg) + throws NotSerializableException { + + InternalDistributedMember dests[] = new InternalDistributedMember[] { dest }; + return send (dests, msg, null); + } + + public Set send(InternalDistributedMember[] destinations, + DistributionMessage msg, + DMStats theStats) + throws NotSerializableException + { + Set result = null; + boolean allDestinations = msg.forAll(); + + if (services.getCancelCriterion().cancelInProgress() != null) { + throw new DistributedSystemDisconnectedException("Distributed System is shutting down", + services.getCancelCriterion().generateCancelledException(null)); + } + + if (playingDead) { // wellness test hook + while (playingDead && !shutdownInProgress) { + try { + Thread.sleep(1000); + } catch (InterruptedException e) { + Thread.currentThread().interrupt(); + } + } + } + + if (isJoining()) { + // If we get here, we are starting up, so just report a failure. + if (allDestinations) + return null; + else { + result = new HashSet(); + for (int i = 0; i < destinations.length; i ++) + result.add(destinations[i]); + return result; + } + } + + if (msg instanceof AdminMessageType + && this.shutdownInProgress) { + // no admin messages while shutting down - this can cause threads to hang + return new HashSet(Arrays.asList(msg.getRecipients())); + } + + // Handle trivial cases + if (destinations == null) { + if (logger.isTraceEnabled()) + logger.trace("Membership: Message send: returning early because null set passed in: '{}'", msg); + return null; // trivially: all recipients received the message + } + if (destinations.length == 0) { + if (logger.isTraceEnabled()) + logger.trace("Membership: Message send: returning early because empty destination list passed in: '{}'", msg); + return null; // trivially: all recipients received the message + } + + msg.setSender(address); + + msg.setBreadcrumbsInSender(); + Breadcrumbs.setProblem(null); + + boolean useMcast = false; + if (mcastEnabled) { + useMcast = (msg.getMulticast() || allDestinations); + } + + boolean sendViaMessenger = isForceUDPCommunications(); // enable when bug #46438 is fixed: || msg.sendViaUDP(); + + if (useMcast || tcpDisabled || sendViaMessenger) { + checkAddressesForUUIDs(destinations); + result = services.getMessenger().send(msg); + } + else { + result = directChannelSend(destinations, msg, theStats); + } + + // If the message was a broadcast, don't enumerate failures. + if (allDestinations) + return null; + else { + return result; + } + } + + // MembershipManager method + @Override + public void forceUDPMessagingForCurrentThread() { + forceUseUDPMessaging.set(null); + } + + void checkAddressesForUUIDs(InternalDistributedMember[] addresses) { + for (int i=0; i now) + return true; + + // Oh, it _is_ stale. Remove it while we're here. + endShun(m); + return false; + } finally { + latestViewLock.writeLock().unlock(); + } + } + + /** + * Indicate whether the given member is in the surprise member list + *

+ * Unlike isShunned, this method will not cause expiry of a surprise member. + * That must be done during view processing. + *

+ * Like isShunned, this method holds the view lock while executing + * + * Concurrency: protected by {@link #latestViewLock} ReentrantReadWriteLock + * + * @param m the member in question + * @return true if the given member is a surprise member + */ + public boolean isSurpriseMember(DistributedMember m) { + latestViewLock.readLock().lock(); + try { + if (surpriseMembers.containsKey(m)) { + long birthTime = ((Long)surpriseMembers.get(m)).longValue(); + long now = System.currentTimeMillis(); + return (birthTime >= (now - this.surpriseMemberTimeout)); + } + return false; + } finally { + latestViewLock.readLock().unlock(); + } + } + + /** + * for testing we need to be able to inject surprise members into + * the view to ensure that sunsetting works properly + * @param m the member ID to add + * @param birthTime the millisecond clock time that the member was first seen + */ + public void addSurpriseMemberForTesting(DistributedMember m, long birthTime) { + if (logger.isDebugEnabled()) { + logger.debug("test hook is adding surprise member {} birthTime={}", m, birthTime); + } + latestViewLock.writeLock().lock(); + try { + surpriseMembers.put((InternalDistributedMember)m, Long.valueOf(birthTime)); + } finally { + latestViewLock.writeLock().unlock(); + } + } + + /** + * returns the surpriseMemberTimeout interval, in milliseconds + */ + public int getSurpriseMemberTimeout() { + return this.surpriseMemberTimeout; + } + + private boolean endShun(DistributedMember m) { + boolean wasShunned = (shunnedMembers.remove(m) != null); + shunnedAndWarnedMembers.remove(m); + return wasShunned; + } + + /** + * Add the given member to the shunned list. Also, purge any shunned + * members that are really really old. + *

+ * Must be called with {@link #latestViewLock} held and + * the view stable. + * + * @param m the member to add + */ + protected void addShunnedMember(InternalDistributedMember m) { + long deathTime = System.currentTimeMillis() - SHUNNED_SUNSET * 1000; + + surpriseMembers.remove(m); // for safety + + // Update the shunned set. + if (!isShunned(m)) { + shunnedMembers.put(m, Long.valueOf(System.currentTimeMillis())); + } + + // Remove really really old shunned members. + // First, make a copy of the old set. New arrivals _a priori_ don't matter, + // and we're going to be updating the list so we don't want to disturb + // the iterator. + Set oldMembers = new HashSet(shunnedMembers.entrySet()); + + Set removedMembers = new HashSet(); + + Iterator it = oldMembers.iterator(); + while (it.hasNext()) { + Map.Entry e = (Map.Entry)it.next(); + + // Key is the member. Value is the time to remove it. + long ll = ((Long)e.getValue()).longValue(); + if (ll >= deathTime) { + continue; // too new. + } + + InternalDistributedMember mm = (InternalDistributedMember)e.getKey(); + + if (latestView.contains(mm)) { + // Fault tolerance: a shunned member can conceivably linger but never + // disconnect. + // + // We may not delete it at the time that we shun it because the view + // isn't necessarily stable. (Note that a well-behaved cache member + // will depart on its own accord, but we force the issue here.) + destroyMember(mm, true, "shunned but never disconnected"); + } + if (logger.isDebugEnabled()) { + logger.debug("Membership: finally removed shunned member entry <{}>", mm); + } + + removedMembers.add(mm); + } + + // removed timed-out entries from the shunned-members collections + if (removedMembers.size() > 0) { + it = removedMembers.iterator(); + while (it.hasNext()) { + InternalDistributedMember idm = (InternalDistributedMember)it.next(); + endShun(idm); + } + } + } + + + /** + * Retrieve thread-local data for transport to another thread in hydra + */ + public Object getThreadLocalData() { + Map result = new HashMap(); + return result; + } + + /** + * for testing verification purposes, this return the port for the + * direct channel, or zero if there is no direct + * channel + */ + public int getDirectChannelPort() { + return directChannel == null? 0 : directChannel.getPort(); + } + + /** + * for mock testing this allows insertion of a DirectChannel mock + */ + protected void setDirectChannel(DirectChannel dc) { + this.directChannel = dc; + this.tcpDisabled = false; + } + + /* non-thread-owned serial channels and high priority channels are not + * included + */ + public Map getMessageState(DistributedMember member, boolean includeMulticast) { + Map result = new HashMap(); + DirectChannel dc = directChannel; + if (dc != null) { + dc.getChannelStates(member, result); + } + services.getMessenger().getMessageState((InternalDistributedMember)member, result, includeMulticast); + return result; + } + + public void waitForMessageState(DistributedMember otherMember, Map state) + throws InterruptedException + { + if (Thread.interrupted()) throw new InterruptedException(); + DirectChannel dc = directChannel; + if (dc != null) { + dc.waitForChannelState(otherMember, state); + } + services.getMessenger().waitForMessageState((InternalDistributedMember)otherMember, state); + } + + /* + * (non-Javadoc) + * MembershipManager method: wait for the given member to be gone. Throws TimeoutException if + * the wait goes too long + * @see com.gemstone.gemfire.distributed.internal.membership.MembershipManager#waitForDeparture(com.gemstone.gemfire.distributed.DistributedMember) + */ + public boolean waitForDeparture(DistributedMember mbr) throws TimeoutException, InterruptedException { + if (Thread.interrupted()) throw new InterruptedException(); + boolean result = false; + DirectChannel dc = directChannel; + InternalDistributedMember idm = (InternalDistributedMember)mbr; + int memberTimeout = this.services.getConfig().getDistributionConfig().getMemberTimeout(); + long pauseTime = (memberTimeout < 1000) ? 100 : memberTimeout / 10; + boolean wait; + int numWaits = 0; + do { + wait = false; + if (dc != null) { + if (dc.hasReceiversFor(idm)) { + wait = true; + } + if (wait && logger.isDebugEnabled()) { + logger.info("waiting for receivers for {} to shut down", mbr); + } + } + if (!wait) { + latestViewLock.readLock().lock(); + try { + wait = this.latestView.contains(idm); + } finally { + latestViewLock.readLock().unlock(); + } + if (wait && logger.isDebugEnabled()) { + logger.debug("waiting for {} to leave the membership view", mbr); + } + } + if (!wait) { + // run a message through the member's serial execution queue to ensure that all of its + // current messages have been processed + OverflowQueueWithDMStats serialQueue = listener.getDM().getSerialQueue(idm); + if (serialQueue != null) { + final boolean done[] = new boolean[1]; + final FlushingMessage msg = new FlushingMessage(done); + serialQueue.add(new SizeableRunnable(100) { + public void run() { + msg.invoke(); + } + public String toString() { + return "Processing fake message"; + } + }); + synchronized(done) { + while (done[0] == false) { + done.wait(10); + } + result = true; + } + } + } + if (wait) { + numWaits++; + if (numWaits > 40) { + // waited over 4 * memberTimeout ms. Give up at this point + throw new TimeoutException("waited too long for " + idm + " to be removed"); + } + Thread.sleep(pauseTime); + } + } while (wait && (dc != null && dc.isOpen()) + && services.getCancelCriterion().cancelInProgress()==null ); + if (logger.isDebugEnabled()) { + logger.debug("operations for {} should all be in the cache at this point", mbr); + } + return result; + } + + + // TODO remove this overly complex method and replace its use with + // waitForViewChange using the remote member's view ID + public boolean waitForMembershipCheck(InternalDistributedMember remoteId) { + boolean foundRemoteId = false; + CountDownLatch currentLatch = null; + // ARB: preconditions + // remoteId != null + latestViewLock.writeLock().lock(); + try { + if (latestView == null) { + // Not sure how this would happen, but see bug 38460. + // No view?? Not found! + } + else if (latestView.contains(remoteId)) { + // ARB: check if remoteId is already in membership view. + // If not, then create a latch if needed and wait for the latch to open. + foundRemoteId = true; + } + else if ((currentLatch = (CountDownLatch)this.memberLatch.get(remoteId)) == null) { + currentLatch = new CountDownLatch(1); + this.memberLatch.put(remoteId, currentLatch); + } + } finally { + latestViewLock.writeLock().unlock(); + } + + if (!foundRemoteId) { + try { + if (currentLatch.await(membershipCheckTimeout, TimeUnit.MILLISECONDS)) { + foundRemoteId = true; + // @todo + // ARB: remove latch from memberLatch map if this is the last thread waiting on latch. + } + } + catch (InterruptedException ex) { + // ARB: latch attempt was interrupted. + Thread.currentThread().interrupt(); + logger.warn(LocalizedMessage.create( + LocalizedStrings.GroupMembershipService_THE_MEMBERSHIP_CHECK_WAS_TERMINATED_WITH_AN_EXCEPTION)); + } + } + + // ARB: postconditions + // (foundRemoteId == true) ==> (currentLatch is non-null ==> currentLatch is open) + return foundRemoteId; + } + + /* returns the cause of shutdown, if known */ + public Throwable getShutdownCause() { + return services.getShutdownCause(); + } + +// @Override +// public void membershipFailure(String reason, Exception e) { +// try { +// if (this.membershipTestHooks != null) { +// List l = this.membershipTestHooks; +// for (Iterator it=l.iterator(); it.hasNext(); ) { +// MembershipTestHook dml = (MembershipTestHook)it.next(); +// dml.beforeMembershipFailure(reason, e); +// } +// } +// listener.membershipFailure(reason, e); +// if (this.membershipTestHooks != null) { +// List l = this.membershipTestHooks; +// for (Iterator it=l.iterator(); it.hasNext(); ) { +// MembershipTestHook dml = (MembershipTestHook)it.next(); +// dml.afterMembershipFailure(reason, e); +// } +// } +// } +// catch (RuntimeException re) { +// logger.warn(LocalizedMessage.create(LocalizedStrings.GroupMembershipService_EXCEPTION_CAUGHT_WHILE_SHUTTING_DOWN), re); +// } +// } + + public void registerTestHook(MembershipTestHook mth) { + // lock for additions to avoid races during startup + latestViewLock.writeLock().lock(); + try { + if (this.membershipTestHooks == null) { + this.membershipTestHooks = Collections.singletonList(mth); + } + else { + List l = new ArrayList(this.membershipTestHooks); + l.add(mth); + this.membershipTestHooks = l; + } + } finally { + latestViewLock.writeLock().unlock(); + } + } + + public void unregisterTestHook(MembershipTestHook mth) { + latestViewLock.writeLock().lock(); + try { + if (this.membershipTestHooks != null) { + if (this.membershipTestHooks.size() == 1) { + this.membershipTestHooks = null; + } + else { + List l = new ArrayList(this.membershipTestHooks); + l.remove(mth); + } + } + } finally { + latestViewLock.writeLock().unlock(); + } + } + + boolean beingSick; + boolean playingDead; + + /** + * Test hook - be a sick member + */ + public synchronized void beSick() { + if (!beingSick) { + beingSick = true; + logger.info("GroupMembershipService.beSick invoked for {} - simulating sickness", this.address); + services.getJoinLeave().beSick(); + services.getHealthMonitor().beSick(); + if (directChannel != null) { + directChannel.beSick(); + } + } + } + + /** + * Test hook - don't answer "are you alive" requests + */ + public synchronized void playDead() { + if (!playingDead) { + playingDead = true; + logger.info("GroupMembershipService.playDead invoked for {}", this.address); + services.getJoinLeave().playDead(); + services.getHealthMonitor().playDead(); + services.getMessenger().playDead(); + } + } + + /** + * Test hook - recover health + */ + public synchronized void beHealthy() { + if (beingSick || playingDead) { + beingSick = false; + playingDead = false; + logger.info("GroupMembershipService.beHealthy invoked for {} - recovering health now", this.address); + if (directChannel != null) { + directChannel.beHealthy(); + } + services.getJoinLeave().beHealthy(); + services.getHealthMonitor().beHealthy(); + services.getMessenger().beHealthy(); + } + } + + /** + * Test hook + */ + public boolean isBeingSick() { + return this.beingSick; + } + + /** + * Test hook - inhibit ForcedDisconnectException logging to keep dunit logs clean + * @param b + */ + public static void inhibitForcedDisconnectLogging(boolean b) { + inhibitForceDisconnectLogging = true; + } + + /** this is a fake message class that is used to flush the serial execution queue */ + static class FlushingMessage extends DistributionMessage { + boolean[] done; + FlushingMessage(boolean[] done) { + this.done = done; + } + public void invoke() { + synchronized(done) { + done[0] = true; + done.notify(); + } + } + protected void process(DistributionManager dm) { + // not used + } + public int getDSFID() { + return 0; + } + public int getProcessorType() { + return DistributionManager.SERIAL_EXECUTOR; + } + } + + /** + * Sets cache time offset in {@link DistributionManager}. + * + * @param coord + * @param timeOffset + * @see InternalDistributedSystem#getClock() + * @see DSClock#setCacheTimeOffset(DistributedMember, long, boolean) + */ + public void setCacheTimeOffset(InternalDistributedMember coord, long timeOffset, boolean isJoin) { + if (this.listener != null) { + DistributionManager dm = this.listener.getDM(); + dm.getSystem().getClock().setCacheTimeOffset(coord, timeOffset, isJoin); + } + } + + @Override + public void stopped() { + } + + @Override + public void installView(NetView v) { + if (latestViewId < 0 && !isConnected()) { + if (this.directChannel != null) { + this.directChannel.setMembershipSize(v.getMembers().size()); + } + latestViewId = v.getViewId(); + latestView = v; + logger.debug("MembershipManager: initial view is {}", latestView); + } else { + handleOrDeferViewEvent(v); + } + } + + @Override + public Set send(DistributionMessage m) throws NotSerializableException { + return send(m.getRecipients(), m, this.services.getStatistics()); + } + + @Override + public void forceDisconnect(final String reason) { + if (GMSMembershipManager.this.shutdownInProgress || isJoining()) { + return; // probably a race condition + } + + setShutdown(); + + final Exception shutdownCause = new ForcedDisconnectException(reason); + + // cache the exception so it can be appended to ShutdownExceptions + services.setShutdownCause(shutdownCause); + services.getCancelCriterion().cancel(reason); + + AlertAppender.getInstance().shuttingDown(); + + if (!inhibitForceDisconnectLogging) { + logger.fatal(LocalizedMessage.create( + LocalizedStrings.GroupMembershipService_MEMBERSHIP_SERVICE_FAILURE_0, reason), shutdownCause); + } + + if (!services.getConfig().getDistributionConfig().getDisableAutoReconnect()) { + saveCacheXmlForReconnect(); + } + + + Thread reconnectThread = new Thread (new Runnable() { + public void run() { + // stop server locators immediately since they may not have correct + // information. This has caused client failures in bridge/wan + // network-down testing + InternalLocator loc = (InternalLocator)Locator.getLocator(); + if (loc != null) { + loc.stop(true, !services.getConfig().getDistributionConfig() + .getDisableAutoReconnect(), false); + } + + uncleanShutdown(reason, shutdownCause); + } + }); + + reconnectThread.setName("DisconnectThread"); + reconnectThread.setDaemon(false); + reconnectThread.start(); + } + + + public void disableDisconnectOnQuorumLossForTesting() { + services.getJoinLeave().disableDisconnectOnQuorumLossForTesting(); + } + + + /** + * Class BoundedLinkedHashMap is a bounded + * LinkedHashMap. The bound is the maximum + * number of entries the BoundedLinkedHashMap + * can contain. + */ + static class BoundedLinkedHashMap extends LinkedHashMap + { + private static final long serialVersionUID = -3419897166186852692L; + + /** + * The maximum number of entries allowed in this + * BoundedLinkedHashMap + */ + protected int _maximumNumberOfEntries; + + /** + * Constructor. + * + * @param maximumNumberOfEntries The maximum number of allowed entries + */ + public BoundedLinkedHashMap(int maximumNumberOfEntries) { + super(); + this._maximumNumberOfEntries = maximumNumberOfEntries; + } + + @Override + protected boolean removeEldestEntry(Map.Entry entry) { + return size() > this._maximumNumberOfEntries; + } + } + +} diff --git a/gemfire-core/src/main/java/com/gemstone/gemfire/internal/MigrationServer.java b/gemfire-core/src/main/java/com/gemstone/gemfire/internal/MigrationServer.java new file mode 100755 index 000000000000..3d6d6bef0750 --- /dev/null +++ b/gemfire-core/src/main/java/com/gemstone/gemfire/internal/MigrationServer.java @@ -0,0 +1,565 @@ +/* + * 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 com.gemstone.gemfire.internal; + +import com.gemstone.gemfire.admin.internal.InetAddressUtil; +import com.gemstone.gemfire.cache.Cache; +import com.gemstone.gemfire.cache.CacheFactory; +import com.gemstone.gemfire.cache.Region; +import com.gemstone.gemfire.distributed.DistributedSystem; +import com.gemstone.gemfire.distributed.internal.DistributionConfig; +import com.gemstone.gemfire.distributed.internal.InternalDistributedSystem; +import com.gemstone.gemfire.internal.cache.GemFireCacheImpl; +import com.gemstone.gemfire.internal.i18n.LocalizedStrings; + +import java.io.DataInputStream; +import java.io.DataOutputStream; +import java.io.File; +import java.io.IOException; +import java.io.ObjectOutputStream; +import java.io.Serializable; +import java.net.InetAddress; +import java.net.InetSocketAddress; +import java.net.NetworkInterface; +import java.net.ServerSocket; +import java.net.Socket; +import java.net.SocketAddress; +import java.net.SocketException; +import java.util.Enumeration; +import java.util.Iterator; +import java.util.Properties; + +/** + * MigrationServer creates a cache using a supplied cache.xml and then + * opens a server socket that a MigrationClient connects to and requests + * the data from a Region. MigrationServer sends the data to + * the MigrationClient using normal java serialization in + * order to allow migration from incompatible versions of DataSerializer. + * Keys and values stored in the cache must serialize and deserialize correctly. + *

+ * Command line arguments are
+ *   cache-xml-file-name (required)
+ *   listen port (defaults to 10553)
+ *   bind address (defaults to listing on all interfaces)
+ *

+ * Both the MigrationClient and MigrationServer must be configured to have + * the appropriate domain classes in their CLASSPATH, or errors will be + * encountered during deserialization. + *

+ * Details of the transfers can be viewed by setting the system property + * Migration.VERBOSE=true. + *

+ * For example, + *

+ * java -cp $MYCLASSES:migration.jar:$GEMFIRE/lib/gemfire-core-dependencies.jar \
+ *   com.gemstone.gemfire.internal.MigrationServer cacheDescription.xml
+ * 

+ * Where the cacheDescription.xml file might look like this: + *

+ * <!DOCTYPE cache PUBLIC
+  "-//GemStone Systems, Inc.//GemFire Declarative Caching 5.7//EN"
+  "http://www.gemstone.com/dtd/cache5_7.dtd">
+<cache is-server="false">
+  <region name="root">
+    <region-attributes scope="distributed-no-ack">
+    </region-attributes>
+
+    <region name="Test">
+      <region-attributes data-policy="persistent-replicate">
+
+        <disk-write-attributes>
+          <synchronous-writes/>
+        </disk-write-attributes>
+
+        <disk-dirs>
+          <disk-dir>diskfiles</disk-dir>
+        </disk-dirs>
+
+        <eviction-attributes>
+          <lru-memory-size maximum="100" action="overflow-to-disk"/>
+        </eviction-attributes>
+
+      </region-attributes>
+    </region> <!-- Test region -->
+  </region> <!-- root region -->
+</cache>
+
+ * 

+ * The client is then run with a different cache description having different + * disk-dirs to hold the migrated information. + * + * @since 6.0.1 + */ +public class MigrationServer { + final static boolean VERBOSE = Boolean.getBoolean("Migration.VERBOSE"); + + final static int VERSION = 551; // version for backward communications compatibility + + protected static final int CODE_ERROR = 0; + protected static final int CODE_ENTRY = 1; /* serialized key, serialized value */ + protected static final int CODE_COMPLETED = 2; + + public static void main(String[] args) throws Exception { + int argIdx = 0; + String cacheXmlFileName = "cache.xml"; + String bindAddressName = null; + int listenPort = 10533; + + if (args.length > 0) { + cacheXmlFileName = args[argIdx++]; + } else { + System.err.println("MigrationServer cache-xml-file [server-address] [server-port]"); + } + if (args.length > argIdx) { + listenPort = Integer.parseInt(args[argIdx++]); + } + if (args.length > argIdx) { + bindAddressName = args[argIdx++]; + } + + MigrationServer instance = null; + try { + instance = new MigrationServer(cacheXmlFileName, bindAddressName, listenPort); + } catch (IllegalArgumentException e) { + System.err.println(e.getMessage()); + System.exit(1); + } + instance.createDistributedSystem(); + instance.createCache(); + instance.serve(); + } + + + private InetAddress bindAddress; + private int listenPort; + private ServerSocket serverSocket; + private DistributedSystem distributedSystem; + private File cacheXmlFile; + private Cache cache; + + + /** + * Create a MigrationServer to be used with a DistributedSystem and Cache + * that are created using GemFire APIs + * @param bindAddressName the NIC to bind to, or null to use all interfaces + * @param listenPort the port to listen on + */ + public MigrationServer(String bindAddressName, int listenPort) { + this.listenPort = listenPort; + if (bindAddressName != null) { + if (!isLocalHost(bindAddressName)) { + throw new IllegalArgumentException("Error - bind address is not an address of this machine: '" + bindAddressName + "'"); + } + try { + this.bindAddress = InetAddress.getByName(bindAddressName); + } catch (IOException e) { + throw new IllegalArgumentException("Error - bind address cannot be resolved: '" + bindAddressName + "'"); + } + } + try { + if (this.bindAddress != null) { + this.serverSocket = new ServerSocket(); + SocketAddress addr = new InetSocketAddress(this.bindAddress, listenPort); + this.serverSocket.bind(addr); + } else { + this.serverSocket = new ServerSocket(listenPort); + } + if (VERBOSE) { + System.out.println("created server socket " + serverSocket); + } + } catch (IOException e) { + throw new IllegalArgumentException("Port is already in use", e); + } + } + + /** + * this is for use by main() + * + * @param cacheXmlFileName the name of the xml file describing the cache, or null + * @param bindAddressName the name of the NIC to bind to, or null + * @param listenPort the port to listen on (must not be zero) + */ + private MigrationServer(String cacheXmlFileName, String bindAddressName, int listenPort) { + this(bindAddressName, listenPort); + this.cacheXmlFile = new File(cacheXmlFileName); + if (!this.cacheXmlFile.exists()) { + // in 6.x this should be localizable + System.err.println("Warning - file not found in local directory: '" + cacheXmlFileName + "'"); + } + } + + /** + * Create a distributed system. If this method is not invoked before running + * the MigrationServer, an existing distributed system must exist for the + * server to use. + * + * @throws Exception if there are any problems + */ + private void createDistributedSystem() throws Exception { + Properties dsProps = new Properties(); + // if no discovery information has been explicitly given, use a loner ds + if (System.getProperty("gemfire." + DistributionConfig.MCAST_PORT_NAME) == null + && System.getProperty("gemfire." + DistributionConfig.LOCATORS_NAME) == null) { + dsProps.put(DistributionConfig.MCAST_PORT_NAME, "0"); + } + dsProps.put(DistributionConfig.LOG_FILE_NAME, "migrationServer.log"); + if (this.cacheXmlFile != null) { + dsProps.put(DistributionConfig.CACHE_XML_FILE_NAME, this.cacheXmlFile.getName()); + } + this.distributedSystem = DistributedSystem.connect(dsProps); + if (VERBOSE) { + System.out.println("created distributed system " + this.distributedSystem); + } + } + + + /** + * create the cache to be used by this migration server + * @throws Exception if there are any problems + */ + private void createCache() throws Exception { + if (this.distributedSystem == null) { + this.distributedSystem = InternalDistributedSystem.getConnectedInstance(); + } + this.cache = CacheFactory.create(this.distributedSystem); + if (VERBOSE) { + System.out.println("created cache " + this.cache); + } + } + + + /** + * This locates the distributed system and cache, if they have not been + * created by this server, and then listens for requests from MigrationClient + * processes. + * @throws IllegalStateException if an attempt is made to reuse a server that has been stopped + */ + public void serve() throws Exception { + if (this.serverSocket == null || this.serverSocket.isClosed()) { + throw new IllegalStateException("This server has been closed and cannot be reused"); + } + try { + if (this.distributedSystem == null) { + this.distributedSystem = InternalDistributedSystem.getConnectedInstance(); + } + if (this.cache == null) { + this.cache = GemFireCacheImpl.getInstance(); + } + if (this.bindAddress != null) { + System.out.println("Migration server on port " + this.listenPort + + " bound to " + this.bindAddress + " is ready for client requets"); + } else { + System.out.println("Migration server on port " + this.listenPort + + " is ready for client requests"); + } + for (;;) { + if (Thread.interrupted() || this.serverSocket.isClosed()) { + return; + } + Socket clientSocket; + try { + clientSocket = this.serverSocket.accept(); + } catch (java.net.SocketException e) { + return; + } + (new RequestHandler(clientSocket)).serveClientRequest(); + } + } finally { + System.out.println("Closing migration server"); + try { + this.serverSocket.close(); + } catch (Exception e) { + this.serverSocket = null; + } + } + } + + /** + * this causes the migration server to stop serving after it finishes dispatching + * any in-process requests + * @throws IOException if there is a problem closing the server socket + */ + public void stop() throws IOException { + if (this.serverSocket != null && !this.serverSocket.isClosed()) { + this.serverSocket.close(); + } + } + + /** + * get the cache being used by this migration server + * @return the cache, or null if a cache has not yet been associated with this server + */ + public Cache getCache() { + return this.cache; + } + + /** + * get the distributed system being used by this migration server + * @return the distributed system, or null if a system has not yet been associated with this server + */ + public DistributedSystem getDistributedSystem() { + return this.distributedSystem; + } + + + + + + + // copied from 6.0 SocketCreator + public static boolean isLocalHost(Object host) { + if (host instanceof InetAddress) { + if (InetAddressUtil.LOCALHOST.equals(host)) { + return true; + } + else { + try { + Enumeration en=NetworkInterface.getNetworkInterfaces(); + while(en.hasMoreElements()) { + NetworkInterface i=(NetworkInterface)en.nextElement(); + for(Enumeration en2=i.getInetAddresses(); en2.hasMoreElements();) { + InetAddress addr=(InetAddress)en2.nextElement(); + if (host.equals(addr)) { + return true; + } + } + } + return false; + } + catch (SocketException e) { + throw new IllegalArgumentException(LocalizedStrings.InetAddressUtil_UNABLE_TO_QUERY_NETWORK_INTERFACE.toLocalizedString(), e); + } + } + } + else { + return isLocalHost(toInetAddress(host.toString())); + } + } + + // copied from 6.0 SocketCreator + public static InetAddress toInetAddress(String host) { + if (host == null || host.length() == 0) { + return null; + } + try { + if (host.indexOf("/") > -1) { + return InetAddress.getByName(host.substring(host.indexOf("/") + 1)); + } + else { + return InetAddress.getByName(host); + } + } catch (java.net.UnknownHostException e) { + throw new IllegalArgumentException(e.getMessage()); + } + } + + + + + + // R E Q U E S T H A N D L E R + + + class RequestHandler implements Runnable { + Socket clientSocket; + DataInputStream dis; + DataOutputStream dos; + + RequestHandler(Socket clientSocket) throws IOException { + this.clientSocket = clientSocket; + dos = new DataOutputStream(this.clientSocket.getOutputStream()); + dis = new DataInputStream(this.clientSocket.getInputStream()); + } + + + // for now this is a blocking operation - multithread later if necessary + void serveClientRequest() { + try { + run(); + } + finally { + if (!this.clientSocket.isClosed()) { + try { + this.clientSocket.close(); + } catch (IOException e) { + e.printStackTrace(); + } + } + } + } + + public void run() { + try { + // first exchange version information so we can communicate correctly + dos.writeShort(VERSION); + int version = dis.readShort(); + handleRequest(version); + } + catch (IOException e) { + System.err.println("Trouble dispatching request: " + e.getMessage()); + return; + } + finally { + try { + this.clientSocket.close(); + } catch (IOException e) { + System.err.println("Trouble closing client socket: " + e.getMessage()); + } + } + } + + /** + * read and dispatch a single request on client socket + * @param clientVersion + */ + private void handleRequest(int clientVersion) { + // for now we ignore the client version in the server. The client + // is typically of a later release than the server, and this information + // is given to the server in case a situation arises where it's needed + try { + ClientRequest req = ClientRequest.readRequest(this.clientSocket, dis, dos); + if (req != null) { + System.out.println("Processing " + req + " from " + this.clientSocket.getInetAddress().getHostAddress()); + req.process(MigrationServer.this); + dos.flush(); + } + } catch (IOException e) { + e.printStackTrace(); + } + } + + } + + + // R E Q U E S T C L A S S E S + + + + static abstract class ClientRequest { + Socket clientSocket; + DataInputStream dsi; + DataOutputStream dso; + + final static int REGION_REQUEST = 1; + + /** + * Use readRequest to create a new request object, not this constructor. + * Subclasses may refine this constructor to perform other initialization + * @param dsi socket's input stream + * @param dso socket's output stream + * @throws IOException if there are any problems reading initialization information + */ + ClientRequest(Socket clientSocket, DataInputStream dsi, DataOutputStream dso) throws IOException { + this.clientSocket = clientSocket; + this.dsi = dsi; + this.dso = dso; + } + + /** + * Read and return a request from a client + * @param clientSocket + * @param dsi socket input stream + * @param dso socket output stream + * @return the new request + * @throws IOException + */ + static ClientRequest readRequest(Socket clientSocket, DataInputStream dsi, DataOutputStream dso) throws IOException { + int requestType = dsi.readShort(); + switch (requestType) { + case REGION_REQUEST: + return new RegionRequest(clientSocket, dsi, dso); + } + String errorMessage = "Type of request is not implemented in this server"; + dso.writeShort(CODE_ERROR); + dso.writeUTF(errorMessage); + System.err.println("Migration server received unknown type of request (" + + requestType + ") from " + clientSocket.getInetAddress().getHostAddress()); + return null; + } + + void writeErrorResponse(String message) throws IOException { + this.dso.writeShort(CODE_ERROR); + this.dso.writeUTF(message); + } + + abstract void process(MigrationServer server) throws IOException ; + + } + + /** + * RegionRequest represents a request for the keys and values of a Region + * from a client. + */ + static class RegionRequest extends ClientRequest { + String regionName; + + RegionRequest(Socket clientSocket, DataInputStream dsi, DataOutputStream dso) throws IOException { + super(clientSocket, dsi, dso); + regionName = dsi.readUTF(); + } + + @Override + public String toString() { + return "request for contents of region '" + this.regionName + "'"; + } + + @Override + void process(MigrationServer server) throws IOException { + Cache cache = server.getCache(); + Region region = null; + try { + region = cache.getRegion(regionName); + if (region == null) { + String errorMessage = "Error: region " + this.regionName + " not found in cache"; + System.err.println(errorMessage); + writeErrorResponse(errorMessage); + } + } catch (IllegalArgumentException e) { + String errorMessage = "Error: malformed region name"; + System.err.println(errorMessage); + writeErrorResponse(errorMessage); + } + try { + for (Iterator it = region.entrySet().iterator(); it.hasNext(); ) { + sendEntry((Region.Entry)it.next()); + } + this.dso.writeShort(CODE_COMPLETED); + } + catch (Exception e) { + writeErrorResponse(e.getMessage()); + } + } + + private void sendEntry(Region.Entry entry) throws Exception { + Object key = entry.getKey(); + Object value = entry.getValue(); + if ( !(key instanceof Serializable) ) { + throw new IOException("Could not serialize entry for '" + key + "'"); + } + if ( !(value instanceof Serializable) ) { + throw new IOException("Could not serialize entry for '" + key + "'"); + } + if (VERBOSE) { + System.out.println("Sending " + key); + } + dso.writeShort(CODE_ENTRY); + (new ObjectOutputStream(clientSocket.getOutputStream())).writeObject(key); + (new ObjectOutputStream(clientSocket.getOutputStream())).writeObject(value); + } + } + +} diff --git a/gemfire-core/src/main/java/com/gemstone/gemfire/internal/cache/AbstractRegionEntry.java b/gemfire-core/src/main/java/com/gemstone/gemfire/internal/cache/AbstractRegionEntry.java new file mode 100644 index 000000000000..327170ea529b --- /dev/null +++ b/gemfire-core/src/main/java/com/gemstone/gemfire/internal/cache/AbstractRegionEntry.java @@ -0,0 +1,2241 @@ +/* + * 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 com.gemstone.gemfire.internal.cache; + +import java.io.IOException; +import java.util.Arrays; + +import org.apache.logging.log4j.Logger; + +import static com.gemstone.gemfire.internal.offheap.annotations.OffHeapIdentifier.ABSTRACT_REGION_ENTRY_FILL_IN_VALUE; +import static com.gemstone.gemfire.internal.offheap.annotations.OffHeapIdentifier.ABSTRACT_REGION_ENTRY_PREPARE_VALUE_FOR_CACHE; + +import com.gemstone.gemfire.CancelException; +import com.gemstone.gemfire.InvalidDeltaException; +import com.gemstone.gemfire.SystemFailure; +import com.gemstone.gemfire.cache.CacheWriterException; +import com.gemstone.gemfire.cache.EntryEvent; +import com.gemstone.gemfire.cache.EntryNotFoundException; +import com.gemstone.gemfire.cache.Operation; +import com.gemstone.gemfire.cache.TimeoutException; +import com.gemstone.gemfire.cache.query.IndexMaintenanceException; +import com.gemstone.gemfire.cache.query.QueryException; +import com.gemstone.gemfire.cache.query.internal.index.IndexManager; +import com.gemstone.gemfire.cache.query.internal.index.IndexProtocol; +import com.gemstone.gemfire.cache.util.GatewayConflictHelper; +import com.gemstone.gemfire.cache.util.GatewayConflictResolver; +import com.gemstone.gemfire.distributed.internal.DM; +import com.gemstone.gemfire.distributed.internal.membership.InternalDistributedMember; +import com.gemstone.gemfire.internal.Assert; +import com.gemstone.gemfire.internal.ByteArrayDataInput; +import com.gemstone.gemfire.internal.HeapDataOutputStream; +import com.gemstone.gemfire.internal.InternalDataSerializer; +import com.gemstone.gemfire.internal.InternalStatisticsDisabledException; +import com.gemstone.gemfire.internal.Version; +import com.gemstone.gemfire.internal.cache.lru.LRUClockNode; +import com.gemstone.gemfire.internal.cache.lru.NewLRUClockHand; +import com.gemstone.gemfire.internal.cache.persistence.DiskStoreID; +import com.gemstone.gemfire.internal.cache.versions.ConcurrentCacheModificationException; +import com.gemstone.gemfire.internal.cache.versions.RegionVersionVector; +import com.gemstone.gemfire.internal.cache.versions.VersionSource; +import com.gemstone.gemfire.internal.cache.versions.VersionStamp; +import com.gemstone.gemfire.internal.cache.versions.VersionTag; +import com.gemstone.gemfire.internal.cache.wan.GatewaySenderEventImpl; +import com.gemstone.gemfire.internal.i18n.LocalizedStrings; +import com.gemstone.gemfire.internal.lang.StringUtils; +import com.gemstone.gemfire.internal.logging.LogService; +import com.gemstone.gemfire.internal.logging.log4j.LocalizedMessage; +import com.gemstone.gemfire.internal.logging.log4j.LogMarker; +import com.gemstone.gemfire.internal.offheap.Chunk; +import com.gemstone.gemfire.internal.offheap.ChunkWithHeapForm; +import com.gemstone.gemfire.internal.offheap.GemFireChunk; +import com.gemstone.gemfire.internal.offheap.MemoryAllocator; +import com.gemstone.gemfire.internal.offheap.OffHeapCachedDeserializable; +import com.gemstone.gemfire.internal.offheap.OffHeapHelper; +import com.gemstone.gemfire.internal.offheap.ReferenceCountHelper; +import com.gemstone.gemfire.internal.offheap.SimpleMemoryAllocatorImpl; +import com.gemstone.gemfire.internal.offheap.StoredObject; +import com.gemstone.gemfire.internal.offheap.annotations.Released; +import com.gemstone.gemfire.internal.offheap.annotations.Retained; +import com.gemstone.gemfire.internal.offheap.annotations.Unretained; +import com.gemstone.gemfire.internal.util.BlobHelper; +import com.gemstone.gemfire.internal.util.Versionable; +import com.gemstone.gemfire.internal.util.concurrent.CustomEntryConcurrentHashMap; +import com.gemstone.gemfire.internal.util.concurrent.CustomEntryConcurrentHashMap.HashEntry; +import com.gemstone.gemfire.pdx.PdxInstance; +import com.gemstone.gemfire.pdx.PdxSerializable; +import com.gemstone.gemfire.pdx.PdxSerializationException; +import com.gemstone.gemfire.pdx.PdxSerializer; +import com.gemstone.gemfire.pdx.internal.ConvertableToBytes; +import com.gemstone.gemfire.pdx.internal.PdxInstanceImpl; + +/** + * Abstract implementation class of RegionEntry interface. + * This is the topmost implementation class so common behavior + * lives here. + * + * @since 3.5.1 + * + * + */ +public abstract class AbstractRegionEntry implements RegionEntry, + HashEntry { + + private static final Logger logger = LogService.getLogger(); + + /** + * Whether to disable last access time update when a put occurs. The default + * is false (enable last access time update on put). To disable it, set the + * 'gemfire.disableAccessTimeUpdateOnPut' system property. + */ + protected static final boolean DISABLE_ACCESS_TIME_UPDATE_ON_PUT = Boolean + .getBoolean("gemfire.disableAccessTimeUpdateOnPut"); + + /* + * Flags for a Region Entry. + * These flags are stored in the msb of the long used to also store the lastModicationTime. + */ + private static final long VALUE_RESULT_OF_SEARCH = 0x01L<<56; + private static final long UPDATE_IN_PROGRESS = 0x02L<<56; + private static final long TOMBSTONE_SCHEDULED = 0x04L<<56; + private static final long LISTENER_INVOCATION_IN_PROGRESS = 0x08L<<56; + /** used for LRUEntry instances. */ + protected static final long RECENTLY_USED = 0x10L<<56; + /** used for LRUEntry instances. */ + protected static final long EVICTED = 0x20L<<56; + /** + * Set if the entry is being used by a transactions. + * Some features (eviction and expiration) will not modify an entry when a tx is using it + * to prevent the tx to fail do to conflict. + */ + protected static final long IN_USE_BY_TX = 0x40L<<56; + + + protected static final long MARKED_FOR_EVICTION = 0x80L<<56; +// public Exception removeTrace; // debugging hot loop in AbstractRegionMap.basicPut() + + protected AbstractRegionEntry(RegionEntryContext context, + @Retained(ABSTRACT_REGION_ENTRY_PREPARE_VALUE_FOR_CACHE) Object value) { + + setValue(context,this.prepareValueForCache(context, value, false),false); +// setLastModified(System.currentTimeMillis()); [bruce] this must be set later so we can use ==0 to know this is a new entry in checkForConflicts + } + + ///////////////////////////////////////////////////////////////////// + ////////////////////////// instance methods ///////////////////////// + ///////////////////////////////////////////////////////////////////// + + @edu.umd.cs.findbugs.annotations.SuppressWarnings(value="IMSE_DONT_CATCH_IMSE") + public boolean dispatchListenerEvents(final EntryEventImpl event) throws InterruptedException { + final LocalRegion rgn = event.getRegion(); + + if (event.callbacksInvoked()) { + return true; + } + + // don't wait for certain events to reach the head of the queue before + // dispatching listeners. However, we must not notify the gateways for + // remote-origin ops out of order. Otherwise the other systems will have + // inconsistent content. + + event.setCallbacksInvokedByCurrentThread(); + + if (logger.isDebugEnabled()) { + logger.debug("{} dispatching event {}", this, event); + } + // All the following code that sets "thr" is to workaround + // spurious IllegalMonitorStateExceptions caused by JVM bugs. + try { + // call invokeCallbacks while synced on RegionEntry + event.invokeCallbacks(rgn, event.inhibitCacheListenerNotification(), false); + return true; + + } finally { + if (isRemoved() && !isTombstone() && !event.isEvicted()) { + // Phase 2 of region entry removal is done here. The first phase is done + // by the RegionMap. It is unclear why this code is needed. ARM destroy + // does this also and we are now doing it as phase3 of the ARM destroy. + removePhase2(); + rgn.getRegionMap().removeEntry(event.getKey(), this, true, event, rgn, rgn.getIndexUpdater()); + } + } + } + + public long getLastAccessed() throws InternalStatisticsDisabledException { + throw new InternalStatisticsDisabledException(); + } + + public long getHitCount() throws InternalStatisticsDisabledException { + throw new InternalStatisticsDisabledException(); + } + + public long getMissCount() throws InternalStatisticsDisabledException { + throw new InternalStatisticsDisabledException(); + } + + protected void setLastModified(long lastModified) { + _setLastModified(lastModified); + } + + public void txDidDestroy(long currTime) { + setLastModified(currTime); + } + + public final void updateStatsForPut(long lastModifiedTime) { + setLastModified(lastModifiedTime); + } + + public void setRecentlyUsed() { + // do nothing by default; only needed for LRU + } + + public void updateStatsForGet(boolean hit, long time) { + // nothing needed + } + + public void resetCounts() throws InternalStatisticsDisabledException { + throw new InternalStatisticsDisabledException(); + } + + public void _removePhase1() { + _setValue(Token.REMOVED_PHASE1); + // debugging for 38467 (hot thread in ARM.basicUpdate) +// this.removeTrace = new Exception("stack trace for thread " + Thread.currentThread()); + } + public void removePhase1(LocalRegion r, boolean isClear) throws RegionClearedException { + _removePhase1(); + } + + public void removePhase2() { + _setValue(Token.REMOVED_PHASE2); +// this.removeTrace = new Exception("stack trace for thread " + Thread.currentThread()); + } + + public void makeTombstone(LocalRegion r, VersionTag version) throws RegionClearedException { + assert r.getVersionVector() != null; + assert version != null; + if (r.getServerProxy() == null && + r.getVersionVector().isTombstoneTooOld(version.getMemberID(), version.getRegionVersion())) { + // distributed gc with higher vector version preempts this operation + if (!isTombstone()) { + setValue(r, Token.TOMBSTONE); + r.incTombstoneCount(1); + } + r.getRegionMap().removeTombstone(this, version, false, true); + } else { + if (isTombstone()) { + // unschedule the old tombstone + r.unscheduleTombstone(this); + } + setRecentlyUsed(); + boolean newEntry = (getValueAsToken() == Token.REMOVED_PHASE1); + setValue(r, Token.TOMBSTONE); + r.scheduleTombstone(this, version); + if (newEntry) { + // bug #46631 - entry count is decremented by scheduleTombstone but this is a new entry + r.getCachePerfStats().incEntryCount(1); + } + } + } + + + @Override + public void setValueWithTombstoneCheck(@Unretained Object v, EntryEvent e) throws RegionClearedException { + if (v == Token.TOMBSTONE) { + makeTombstone((LocalRegion)e.getRegion(), ((EntryEventImpl)e).getVersionTag()); + } else { + setValue((LocalRegion)e.getRegion(), v, (EntryEventImpl)e); + } + } + + /** + * Return true if the object is removed. + * + * TODO this method does NOT return true if the object + * is Token.DESTROYED. dispatchListenerEvents relies on that + * fact to avoid removing destroyed tokens from the map. + * We should refactor so that this method calls Token.isRemoved, + * and places that don't want a destroyed Token can explicitly check + * for a DESTROY token. + */ + public final boolean isRemoved() { + Token o = getValueAsToken(); + return (o == Token.REMOVED_PHASE1) || (o == Token.REMOVED_PHASE2) || (o == Token.TOMBSTONE); + } + + public final boolean isDestroyedOrRemoved() { + return Token.isRemoved(getValueAsToken()); + } + + public final boolean isDestroyedOrRemovedButNotTombstone() { + Token o = getValueAsToken(); + return o == Token.DESTROYED || o == Token.REMOVED_PHASE1 || o == Token.REMOVED_PHASE2; + } + + public final boolean isTombstone() { + return getValueAsToken() == Token.TOMBSTONE; + } + + public final boolean isRemovedPhase2() { + return getValueAsToken() == Token.REMOVED_PHASE2; + } + + public boolean fillInValue(LocalRegion region, + @Retained(ABSTRACT_REGION_ENTRY_FILL_IN_VALUE) InitialImageOperation.Entry dst, + ByteArrayDataInput in, + DM mgr) + { + dst.setSerialized(false); // starting default value + + @Retained(ABSTRACT_REGION_ENTRY_FILL_IN_VALUE) final Object v; + if (isTombstone()) { + v = Token.TOMBSTONE; + } else { + v = getValue(region); // OFFHEAP: need to incrc, copy bytes, decrc + if (v == null) { + return false; + } + } + + final boolean isEagerDeserialize = dst.isEagerDeserialize(); + if (isEagerDeserialize) { + dst.clearEagerDeserialize(); + } + dst.setLastModified(mgr, getLastModified()); // fix for bug 31059 + if (v == Token.INVALID) { + dst.setInvalid(); + } + else if (v == Token.LOCAL_INVALID) { + dst.setLocalInvalid(); + } + else if (v == Token.TOMBSTONE) { + dst.setTombstone(); + } + else if (v instanceof CachedDeserializable) { + // don't serialize here if it is not already serialized +// if(v instanceof ByteSource && CachedDeserializableFactory.preferObject()) { +// // For SQLFire we prefer eager deserialized +// dst.setEagerDeserialize(); +// } + + if (v instanceof StoredObject && !((StoredObject) v).isSerialized()) { + dst.value = ((StoredObject) v).getDeserializedForReading(); + } else { + /*if (v instanceof ByteSource && CachedDeserializableFactory.preferObject()) { + dst.value = v; + } else */ { + Object tmp = ((CachedDeserializable) v).getValue(); + if (tmp instanceof byte[]) { + byte[] bb = (byte[]) tmp; + dst.value = bb; + } else { + try { + HeapDataOutputStream hdos = new HeapDataOutputStream( + Version.CURRENT); + BlobHelper.serializeTo(tmp, hdos); + hdos.trim(); + dst.value = hdos; + } catch (IOException e) { + RuntimeException e2 = new IllegalArgumentException( + LocalizedStrings.AbstractRegionEntry_AN_IOEXCEPTION_WAS_THROWN_WHILE_SERIALIZING + .toLocalizedString()); + e2.initCause(e); + throw e2; + } + } + dst.setSerialized(true); + } + } + } + else if (v instanceof byte[]) { + dst.value = v; + } + else { + Object preparedValue = v; + if (preparedValue != null) { + preparedValue = prepareValueForGII(preparedValue); + if (preparedValue == null) { + return false; + } + } + if (CachedDeserializableFactory.preferObject()) { + dst.value = preparedValue; + dst.setEagerDeserialize(); + } + else { + try { + HeapDataOutputStream hdos = new HeapDataOutputStream(Version.CURRENT); + BlobHelper.serializeTo(preparedValue, hdos); + hdos.trim(); + dst.value = hdos; + dst.setSerialized(true); + } catch (IOException e) { + RuntimeException e2 = new IllegalArgumentException(LocalizedStrings.AbstractRegionEntry_AN_IOEXCEPTION_WAS_THROWN_WHILE_SERIALIZING.toLocalizedString()); + e2.initCause(e); + throw e2; + } + } + } + return true; + } + + /** + * To fix bug 49901 if v is a GatewaySenderEventImpl then make + * a heap copy of it if it is offheap. + * @return the value to provide to the gii request; null if no value should be provided. + */ + public static Object prepareValueForGII(Object v) { + assert v != null; + if (v instanceof GatewaySenderEventImpl) { + return ((GatewaySenderEventImpl) v).makeHeapCopyIfOffHeap(); + } else { + return v; + } + } + + public boolean isOverflowedToDisk(LocalRegion r, DistributedRegion.DiskPosition dp) { + return false; + } + + @Override + public Object getValue(RegionEntryContext context) { + ReferenceCountHelper.createReferenceCountOwner(); + @Retained Object result = _getValueRetain(context, true); + //Asif: If the thread is an Index Creation Thread & the value obtained is + //Token.REMOVED , we can skip synchronization block. This is required to prevent + // the dead lock caused if an Index Update Thread has gone into a wait holding the + // lock of the Entry object. There should not be an issue if the Index creation thread + // gets the temporary value of token.REMOVED as the correct value will get indexed + // by the Index Update Thread , once the index creation thread has exited. + // Part of Bugfix # 33336 +// if ((result == Token.REMOVED_PHASE1 || result == Token.REMOVED_PHASE2) && !r.isIndexCreationThread()) { +// synchronized (this) { +// result = _getValue(); +// } +// } + + if (Token.isRemoved(result)) { + ReferenceCountHelper.setReferenceCountOwner(null); + return null; + } else { + result = OffHeapHelper.copyAndReleaseIfNeeded(result); // sqlf does not dec ref count in this call + ReferenceCountHelper.setReferenceCountOwner(null); + setRecentlyUsed(); + return result; + } + } + + @Override + @Retained + public Object getValueRetain(RegionEntryContext context) { + @Retained Object result = _getValueRetain(context, true); + if (Token.isRemoved(result)) { + return null; + } else { + setRecentlyUsed(); + return result; + } + } + + @Override + @Released + public void setValue(RegionEntryContext context, @Unretained Object value) throws RegionClearedException { + // @todo darrel: This will mark new entries as being recently used + // It might be better to only mark them when they are modified. + // Or should we only mark them on reads? + setValue(context,value,true); + } + + @Override + public void setValue(RegionEntryContext context, Object value, EntryEventImpl event) throws RegionClearedException { + setValue(context,value); + } + + @Released + protected void setValue(RegionEntryContext context, @Unretained Object value, boolean recentlyUsed) { + _setValue(value); + if (value != null && context != null && (this instanceof OffHeapRegionEntry) + && context instanceof LocalRegion && ((LocalRegion)context).isThisRegionBeingClosedOrDestroyed()) { + ((OffHeapRegionEntry)this).release(); + ((LocalRegion)context).checkReadiness(); + } + if (recentlyUsed) { + setRecentlyUsed(); + } + } + + /** + * This method determines if the value is in a compressed representation and decompresses it if it is. + * + * @param context the values context. + * @param value a region entry value. + * + * @return the decompressed form of the value parameter. + */ + static Object decompress(RegionEntryContext context,Object value) { + if(isCompressible(context, value)) { + long time = context.getCachePerfStats().startDecompression(); + value = EntryEventImpl.deserialize(context.getCompressor().decompress((byte[]) value)); + context.getCachePerfStats().endDecompression(time); + } + + return value; + } + + static protected Object compress(RegionEntryContext context,Object value) { + return compress(context, value, null); + } + + /** + * This method determines if the value is compressible and compresses it if it is. + * + * @param context the values context. + * @param value a region entry value. + * + * @return the compressed form of the value parameter. + */ + static protected Object compress(RegionEntryContext context,Object value, EntryEventImpl event) { + if(isCompressible(context, value)) { + long time = context.getCachePerfStats().startCompression(); + byte[] serializedValue; + if (event != null && event.getCachedSerializedNewValue() != null) { + serializedValue = event.getCachedSerializedNewValue(); + if (value instanceof CachedDeserializable) { + CachedDeserializable cd = (CachedDeserializable) value; + if (!(cd.getValue() instanceof byte[])) { + // The cd now has the object form so use the cached serialized form in a new cd. + // This serialization is much cheaper than reserializing the object form. + serializedValue = EntryEventImpl.serialize(CachedDeserializableFactory.create(serializedValue)); + } else { + serializedValue = EntryEventImpl.serialize(cd); + } + } + } else { + serializedValue = EntryEventImpl.serialize(value); + if (event != null && !(value instanceof byte[])) { + // See if we can cache the serialized new value in the event. + // If value is a byte[] then we don't cache it since it is not serialized. + if (value instanceof CachedDeserializable) { + // For a CacheDeserializable we want to only cache the wrapped value; + // not the serialized CacheDeserializable. + CachedDeserializable cd = (CachedDeserializable) value; + Object cdVal = cd.getValue(); + if (cdVal instanceof byte[]) { + event.setCachedSerializedNewValue((byte[])cdVal); + } + } else { + event.setCachedSerializedNewValue(serializedValue); + } + } + } + value = context.getCompressor().compress(serializedValue); + context.getCachePerfStats().endCompression(time, serializedValue.length, ((byte []) value).length); + } + + return value; + } + + private static byte[] compressBytes(RegionEntryContext context, byte[] uncompressedBytes) { + byte[] result = uncompressedBytes; + if (isCompressible(context, uncompressedBytes)) { + long time = context.getCachePerfStats().startCompression(); + result = context.getCompressor().compress(uncompressedBytes); + context.getCachePerfStats().endCompression(time, uncompressedBytes.length, result.length); + } + return result; + } + + + @Retained + public final Object getValueInVM(RegionEntryContext context) { + ReferenceCountHelper.createReferenceCountOwner(); + @Retained Object v = _getValueRetain(context, true); + + if (v == null) { // should only be possible if disk entry + v = Token.NOT_AVAILABLE; + } + @Retained Object result = OffHeapHelper.copyAndReleaseIfNeeded(v); // TODO OFFHEAP keep it offheap? + ReferenceCountHelper.setReferenceCountOwner(null); + return result; + } + + @Retained + public Object getValueInVMOrDiskWithoutFaultIn(LocalRegion owner) { + return getValueInVM(owner); + } + + @Override + @Retained + public Object getValueOffHeapOrDiskWithoutFaultIn(LocalRegion owner) { + @Retained Object result = _getValueRetain(owner, true); +// if (result instanceof ByteSource) { +// // If the ByteSource contains a Delta or ListOfDelta then we want to deserialize it +// Object deserVal = ((CachedDeserializable)result).getDeserializedForReading(); +// if (deserVal != result) { +// OffHeapHelper.release(result); +// result = deserVal; +// } +// } + return result; + } + + public Object getValueOnDisk(LocalRegion r) + throws EntryNotFoundException + { + throw new IllegalStateException(LocalizedStrings.AbstractRegionEntry_CANNOT_GET_VALUE_ON_DISK_FOR_A_REGION_THAT_DOES_NOT_ACCESS_THE_DISK.toLocalizedString()); + } + + public Object getSerializedValueOnDisk(final LocalRegion r) + throws EntryNotFoundException + { + throw new IllegalStateException(LocalizedStrings.AbstractRegionEntry_CANNOT_GET_VALUE_ON_DISK_FOR_A_REGION_THAT_DOES_NOT_ACCESS_THE_DISK.toLocalizedString()); + } + + public Object getValueOnDiskOrBuffer(LocalRegion r) + throws EntryNotFoundException + { + throw new IllegalStateException(LocalizedStrings.AbstractRegionEntry_CANNOT_GET_VALUE_ON_DISK_FOR_A_REGION_THAT_DOES_NOT_ACCESS_THE_DISK.toLocalizedString()); + // @todo darrel if value is Token.REMOVED || Token.DESTROYED throw EntryNotFoundException + } + + public final boolean initialImagePut(final LocalRegion region, + final long lastModifiedTime, + Object newValue, + boolean wasRecovered, + boolean versionTagAccepted) throws RegionClearedException + { + // note that the caller has already write synced this RegionEntry + return initialImageInit(region, lastModifiedTime, newValue, this.isTombstone(), wasRecovered, versionTagAccepted); + } + + public boolean initialImageInit(final LocalRegion region, + final long lastModifiedTime, + final Object newValue, + final boolean create, + final boolean wasRecovered, + final boolean versionTagAccepted) throws RegionClearedException + { + // note that the caller has already write synced this RegionEntry + boolean result = false; + // if it has been destroyed then don't do anything + Token vTok = getValueAsToken(); + if (versionTagAccepted || create || (vTok != Token.DESTROYED || vTok != Token.TOMBSTONE)) { // OFFHEAP noop + Object newValueToWrite = newValue; + boolean putValue = versionTagAccepted || create + || (newValueToWrite != Token.LOCAL_INVALID + && (wasRecovered || (vTok == Token.LOCAL_INVALID))); // OFFHEAP noop + + if (region.isUsedForPartitionedRegionAdmin() && newValueToWrite instanceof CachedDeserializable) { + // Special case for partitioned region meta data + // We do not need the RegionEntry on this case. + // Because the pr meta data region will not have an LRU. + newValueToWrite = ((CachedDeserializable) newValueToWrite).getDeserializedValue(region, null); + if (!create && newValueToWrite instanceof Versionable) { + @Retained @Released final Object oldValue = getValueInVM(region); // Heap value should always be deserialized at this point // OFFHEAP will not be deserialized + try { + // BUGFIX for 35029. If oldValue is null the newValue should be put. + if(oldValue == null) { + putValue = true; + } + else if (oldValue instanceof Versionable) { + Versionable nv = (Versionable) newValueToWrite; + Versionable ov = (Versionable) oldValue; + putValue = nv.isNewerThan(ov); + } + } finally { + OffHeapHelper.release(oldValue); + } + } + } + + if (putValue) { + // change to INVALID if region itself has been invalidated, + // and current value is recovered + if (create || versionTagAccepted) { + // At this point, since we now always recover from disk first, + // we only care about "isCreate" since "isRecovered" is impossible + // if we had a regionInvalidate or regionClear + ImageState imageState = region.getImageState(); + // this method is called during loadSnapshot as well as getInitialImage + if (imageState.getRegionInvalidated()) { + if (newValueToWrite != Token.TOMBSTONE) { + newValueToWrite = Token.INVALID; + } + } + else if (imageState.getClearRegionFlag()) { + boolean entryOK = false; + RegionVersionVector rvv = imageState.getClearRegionVersionVector(); + if (rvv != null) { // a filtered clear + VersionSource id = getVersionStamp().getMemberID(); + if (id == null) { + id = region.getVersionMember(); + } + if (!rvv.contains(id, getVersionStamp().getRegionVersion())) { + entryOK = true; + } + } + if (!entryOK) { + //Asif: If the region has been issued cleared during + // the GII , then those entries loaded before this one would have + // been cleared from the Map due to clear operation & for the + // currententry whose key may have escaped the clearance , will be + // cleansed by the destroy token. + newValueToWrite = Token.DESTROYED; + imageState.addDestroyedEntry(this.getKey()); + throw new RegionClearedException(LocalizedStrings.AbstractRegionEntry_DURING_THE_GII_PUT_OF_ENTRY_THE_REGION_GOT_CLEARED_SO_ABORTING_THE_OPERATION.toLocalizedString()); + } + } + } + setValue(region, this.prepareValueForCache(region, newValueToWrite, false)); + result = true; + + if (newValueToWrite != Token.TOMBSTONE){ + if (create) { + region.getCachePerfStats().incCreates(); + } + region.updateStatsForPut(this, lastModifiedTime, false); + } + + if (logger.isTraceEnabled()) { + if (newValueToWrite instanceof CachedDeserializable) { + logger.trace("ProcessChunk: region={}; put a CachedDeserializable ({},{})", + region.getFullPath(), getKey(),((CachedDeserializable)newValueToWrite).getStringForm()); + } + else { + logger.trace("ProcessChunk: region={}; put({},{})", region.getFullPath(), getKey(), StringUtils.forceToString(newValueToWrite)); + } + } + } + } + return result; + } + + /** + * @throws EntryNotFoundException if expectedOldValue is + * not null and is not equal to current value + */ + @Released + public final boolean destroy(LocalRegion region, + EntryEventImpl event, + boolean inTokenMode, + boolean cacheWrite, + @Unretained Object expectedOldValue, + boolean forceDestroy, + boolean removeRecoveredEntry) + throws CacheWriterException, + EntryNotFoundException, + TimeoutException, + RegionClearedException { + boolean proceed = false; + { + // A design decision was made to not retrieve the old value from the disk + // if the entry has been evicted to only have the CacheListener afterDestroy + // method ignore it. We don't want to pay the performance penalty. The + // getValueInVM method does not retrieve the value from disk if it has been + // evicted. Instead, it uses the NotAvailable token. + // + // If the region is a WAN queue region, the old value is actually used by the + // afterDestroy callback on a secondary. It is not needed on a primary. + // Since the destroy that sets WAN_QUEUE_TOKEN always originates on the primary + // we only pay attention to WAN_QUEUE_TOKEN if the event is originRemote. + // + // :ezoerner:20080814 We also read old value from disk or buffer + // in the case where there is a non-null expectedOldValue + // see PartitionedRegion#remove(Object key, Object value) + ReferenceCountHelper.skipRefCountTracking(); + @Retained @Released Object curValue = _getValueRetain(region, true); + ReferenceCountHelper.unskipRefCountTracking(); + try { + if (curValue == null) curValue = Token.NOT_AVAILABLE; + + if (curValue == Token.NOT_AVAILABLE) { + // In some cases we need to get the current value off of disk. + + // if the event is transmitted during GII and has an old value, it was + // the state of the transmitting cache's entry & should be used here + if (event.getCallbackArgument() != null + && event.getCallbackArgument().equals(RegionQueue.WAN_QUEUE_TOKEN) + && event.isOriginRemote()) { // check originRemote for bug 40508 + //curValue = getValue(region); can cause deadlock if GII is occurring + curValue = getValueOnDiskOrBuffer(region); + } + else { + FilterProfile fp = region.getFilterProfile(); + // rdubey: Old value also required for SqlfIndexManager. + if (fp != null && ((fp.getCqCount() > 0) || expectedOldValue != null + || event.getRegion().getIndexUpdater() != null)) { + //curValue = getValue(region); can cause deadlock will fault in the value + // and will confuse LRU. rdubey. + curValue = getValueOnDiskOrBuffer(region); + } + } + } + + if (expectedOldValue != null) { + if (!checkExpectedOldValue(expectedOldValue, curValue, region)) { + throw new EntryNotFoundException( + LocalizedStrings.AbstractRegionEntry_THE_CURRENT_VALUE_WAS_NOT_EQUAL_TO_EXPECTED_VALUE.toLocalizedString()); + } + } + + if (inTokenMode && event.hasOldValue()) { + proceed = true; + } + else { + proceed = event.setOldValue(curValue, curValue instanceof GatewaySenderEventImpl) || removeRecoveredEntry + || forceDestroy || region.getConcurrencyChecksEnabled() // fix for bug #47868 - create a tombstone + || (event.getOperation() == Operation.REMOVE // fix for bug #42242 + && (curValue == null || curValue == Token.LOCAL_INVALID + || curValue == Token.INVALID)); + } + } finally { + OffHeapHelper.releaseWithNoTracking(curValue); + } + } // end curValue block + + if (proceed) { + //Generate the version tag if needed. This method should only be + //called if we are in fact going to destroy the entry, so it must be + //after the entry not found exception above. + if(!removeRecoveredEntry) { + region.generateAndSetVersionTag(event, this); + } + if (cacheWrite) { + region.cacheWriteBeforeDestroy(event, expectedOldValue); + if (event.getRegion().getServerProxy() != null) { // server will return a version tag + // update version information (may throw ConcurrentCacheModificationException) + VersionStamp stamp = getVersionStamp(); + if (stamp != null) { + stamp.processVersionTag(event); + } + } + } + region.recordEvent(event); + // don't do index maintenance on a destroy if the value in the + // RegionEntry (the old value) is invalid + if (!region.isProxy() && !isInvalid()) { + IndexManager indexManager = region.getIndexManager(); + if (indexManager != null) { + try { + if(isValueNull()) { + @Released Object value = getValueOffHeapOrDiskWithoutFaultIn(region); + try { + _setValue(prepareValueForCache(region, value, false)); + if (value != null && region != null && (this instanceof OffHeapRegionEntry) && region.isThisRegionBeingClosedOrDestroyed()) { + ((OffHeapRegionEntry)this).release(); + region.checkReadiness(); + } + } finally { + OffHeapHelper.release(value); + } + } + indexManager.updateIndexes(this, + IndexManager.REMOVE_ENTRY, + IndexProtocol.OTHER_OP); + } + catch (QueryException e) { + throw new IndexMaintenanceException(e); + } + } + } + + boolean removeEntry = false; + VersionTag v = event.getVersionTag(); + if (region.concurrencyChecksEnabled && !removeRecoveredEntry + && !event.isFromRILocalDestroy()) { // bug #46780, don't retain tombstones for entries destroyed for register-interest + // Destroy will write a tombstone instead + if (v == null || !v.hasValidVersion()) { + // localDestroy and eviction and ops received with no version tag + // should create a tombstone using the existing version stamp, as should + // (bug #45245) responses from servers that do not have valid version information + VersionStamp stamp = this.getVersionStamp(); + if (stamp != null) { // proxy has no stamps + v = stamp.asVersionTag(); + event.setVersionTag(v); + } + } + removeEntry = (v == null) || !v.hasValidVersion(); + } else { + removeEntry = true; + } + + // See #47887, we do not insert a tombstone for evicted HDFS + // entries since the value is still present in HDFS + // Check if we have to evict or just do destroy. + boolean forceRemoveEntry = + (event.isEviction() || event.isExpiration()) + && event.getRegion().isUsedForPartitionedRegionBucket() + && event.getRegion().getPartitionedRegion().isHDFSRegion(); + + if (removeEntry || forceRemoveEntry) { + boolean isThisTombstone = isTombstone(); + if(inTokenMode && !event.getOperation().isEviction()) { + setValue(region, Token.DESTROYED); + } else { + removePhase1(region, false); + } + if (isThisTombstone) { + region.unscheduleTombstone(this); + } + } else { + makeTombstone(region, v); + } + + return true; + } + else { + return false; + } + } + + + + static boolean checkExpectedOldValue(@Unretained Object expectedOldValue, @Unretained Object actualValue, LocalRegion lr) { + if (Token.isInvalid(expectedOldValue)) { + return (actualValue == null) || Token.isInvalid(actualValue); + } else { + boolean isCompressedOffHeap = lr.getAttributes().getOffHeap() && lr.getAttributes().getCompressor() != null; + return checkEquals(expectedOldValue, actualValue, isCompressedOffHeap); + } + } + + private static boolean basicEquals(Object v1, Object v2) { + if (v2 != null) { + if (v2.getClass().isArray()) { + // fix for 52093 + if (v2 instanceof byte[]) { + if (v1 instanceof byte[]) { + return Arrays.equals((byte[])v2, (byte[])v1); + } else { + return false; + } + } else if (v2 instanceof Object[]) { + if (v1 instanceof Object[]) { + return Arrays.deepEquals((Object[])v2, (Object[])v1); + } else { + return false; + } + } else if (v2 instanceof int[]) { + if (v1 instanceof int[]) { + return Arrays.equals((int[])v2, (int[])v1); + } else { + return false; + } + } else if (v2 instanceof long[]) { + if (v1 instanceof long[]) { + return Arrays.equals((long[])v2, (long[])v1); + } else { + return false; + } + } else if (v2 instanceof boolean[]) { + if (v1 instanceof boolean[]) { + return Arrays.equals((boolean[])v2, (boolean[])v1); + } else { + return false; + } + } else if (v2 instanceof short[]) { + if (v1 instanceof short[]) { + return Arrays.equals((short[])v2, (short[])v1); + } else { + return false; + } + } else if (v2 instanceof char[]) { + if (v1 instanceof char[]) { + return Arrays.equals((char[])v2, (char[])v1); + } else { + return false; + } + } else if (v2 instanceof float[]) { + if (v1 instanceof float[]) { + return Arrays.equals((float[])v2, (float[])v1); + } else { + return false; + } + } else if (v2 instanceof double[]) { + if (v1 instanceof double[]) { + return Arrays.equals((double[])v2, (double[])v1); + } else { + return false; + } + } + // fall through and call equals method + } + return v2.equals(v1); + } else { + return v1 == null; + } + } + + static boolean checkEquals(@Unretained Object v1, @Unretained Object v2, boolean isCompressedOffHeap) { + // need to give PdxInstance#equals priority + if (v1 instanceof PdxInstance) { + return checkPdxEquals((PdxInstance)v1, v2); + } else if (v2 instanceof PdxInstance) { + return checkPdxEquals((PdxInstance)v2, v1); + } else if (v1 instanceof OffHeapCachedDeserializable) { + return checkOffHeapEquals((OffHeapCachedDeserializable)v1, v2); + } else if (v2 instanceof OffHeapCachedDeserializable) { + return checkOffHeapEquals((OffHeapCachedDeserializable)v2, v1); + } else if (v1 instanceof CachedDeserializable) { + return checkCDEquals((CachedDeserializable)v1, v2, isCompressedOffHeap); + } else if (v2 instanceof CachedDeserializable) { + return checkCDEquals((CachedDeserializable)v2, v1, isCompressedOffHeap); + } else { + return basicEquals(v1, v2); + } + } + private static boolean checkOffHeapEquals(@Unretained OffHeapCachedDeserializable cd, @Unretained Object obj) { + if (cd.isSerializedPdxInstance()) { + PdxInstance pi = InternalDataSerializer.readPdxInstance(cd.getSerializedValue(), GemFireCacheImpl.getForPdx("Could not check value equality")); + return checkPdxEquals(pi, obj); + } + if (obj instanceof OffHeapCachedDeserializable) { + return cd.checkDataEquals((OffHeapCachedDeserializable)obj); + } else { + byte[] serializedObj; + if (obj instanceof CachedDeserializable) { + if (!cd.isSerialized()) { + if (obj instanceof StoredObject && !((StoredObject) obj).isSerialized()) { + // both are byte[] + // obj must be DataAsAddress since it was not OffHeapCachedDeserializable + // so its byte[] will be small. + byte[] objBytes = (byte[]) ((StoredObject) obj).getDeserializedForReading(); + return cd.checkDataEquals(objBytes); + } else { + return false; + } + } + serializedObj = ((CachedDeserializable) obj).getSerializedValue(); + } else if (obj instanceof byte[]) { + if (cd.isSerialized()) { + return false; + } + serializedObj = (byte[]) obj; + } else { + if (!cd.isSerialized()) { + return false; + } + if (obj == null || obj == Token.NOT_AVAILABLE + || Token.isInvalidOrRemoved(obj)) { + return false; + } + serializedObj = EntryEventImpl.serialize(obj); + } + return cd.checkDataEquals(serializedObj); + } + } + + private static boolean checkCDEquals(CachedDeserializable cd, Object obj, boolean isCompressedOffHeap) { + if (cd instanceof StoredObject && !((StoredObject) cd).isSerialized()) { + // cd is an actual byte[]. + byte[] ba2; + if (obj instanceof StoredObject) { + if (!((StoredObject) obj).isSerialized()) { + return false; + } + ba2 = (byte[]) ((StoredObject) obj).getDeserializedForReading(); + } else if (obj instanceof byte[]) { + ba2 = (byte[]) obj; + } else { + return false; + } + byte[] ba1 = (byte[]) cd.getDeserializedForReading(); + return Arrays.equals(ba1, ba2); + } + Object cdVal = cd.getValue(); + if (cdVal instanceof byte[]) { + byte[] cdValBytes = (byte[])cdVal; + PdxInstance pi = InternalDataSerializer.readPdxInstance(cdValBytes, GemFireCacheImpl.getForPdx("Could not check value equality")); + if (pi != null) { + return checkPdxEquals(pi, obj); + } + if (isCompressedOffHeap) { // fix for bug 52248 + byte[] serializedObj; + if (obj instanceof CachedDeserializable) { + serializedObj = ((CachedDeserializable) obj).getSerializedValue(); + } else { + serializedObj = EntryEventImpl.serialize(obj); + } + return Arrays.equals(cdValBytes, serializedObj); + } else { + /** + * To be more compatible with previous releases do not compare the serialized forms here. + * Instead deserialize and call the equals method. + */ + Object deserializedObj; + if (obj instanceof CachedDeserializable) { + deserializedObj =((CachedDeserializable) obj).getDeserializedForReading(); + } else { + if (obj == null || obj == Token.NOT_AVAILABLE + || Token.isInvalidOrRemoved(obj)) { + return false; + } + // TODO OPTIMIZE: Before serializing all of obj we could get the top + // level class name of cdVal and compare it to the top level class name of obj. + deserializedObj = obj; + } + return basicEquals(deserializedObj, cd.getDeserializedForReading()); + } +// boolean result = Arrays.equals((byte[])cdVal, serializedObj); +// if (!result) { +// try { +// Object o1 = BlobHelper.deserializeBlob((byte[])cdVal); +// Object o2 = BlobHelper.deserializeBlob(serializedObj); +// SimpleMemoryAllocatorImpl.debugLog("checkCDEquals o1=<" + o1 + "> o2=<" + o2 + ">", false); +// if (o1.equals(o2)) { +// SimpleMemoryAllocatorImpl.debugLog("they are equal! a1=<" + Arrays.toString((byte[])cdVal) + "> a2=<" + Arrays.toString(serializedObj) + ">", false); +// } +// } catch (IOException e) { +// // TODO Auto-generated catch block +// e.printStackTrace(); +// } catch (ClassNotFoundException e) { +// // TODO Auto-generated catch block +// e.printStackTrace(); +// } +// } +// return result; + } else { + // prefer object form + if (obj instanceof CachedDeserializable) { + // TODO OPTIMIZE: Before deserializing all of obj we could get the top + // class name of cdVal and the top level class name of obj and compare. + obj = ((CachedDeserializable) obj).getDeserializedForReading(); + } + return basicEquals(cdVal, obj); + } + } + /** + * This method fixes bug 43643 + */ + private static boolean checkPdxEquals(PdxInstance pdx, Object obj) { + if (!(obj instanceof PdxInstance)) { + // obj may be a CachedDeserializable in which case we want to convert it to a PdxInstance even if we are not readSerialized. + if (obj instanceof CachedDeserializable) { + if (obj instanceof StoredObject && !((StoredObject) obj).isSerialized()) { + // obj is actually a byte[] which will never be equal to a PdxInstance + return false; + } + Object cdVal = ((CachedDeserializable) obj).getValue(); + if (cdVal instanceof byte[]) { + byte[] cdValBytes = (byte[]) cdVal; + PdxInstance pi = InternalDataSerializer.readPdxInstance(cdValBytes, GemFireCacheImpl.getForPdx("Could not check value equality")); + if (pi != null) { + return pi.equals(pdx); + } else { + // since obj is serialized as something other than pdx it must not equal our pdx + return false; + } + } else { + // remove the cd wrapper so that obj is the actual value we want to compare. + obj = cdVal; + } + } + if (obj.getClass().getName().equals(pdx.getClassName())) { + GemFireCacheImpl gfc = GemFireCacheImpl.getForPdx("Could not access Pdx registry"); + if (gfc != null) { + PdxSerializer pdxSerializer; + if (obj instanceof PdxSerializable) { + pdxSerializer = null; + } else { + pdxSerializer = gfc.getPdxSerializer(); + } + if (pdxSerializer != null || obj instanceof PdxSerializable) { + // try to convert obj to a PdxInstance + HeapDataOutputStream hdos = new HeapDataOutputStream(Version.CURRENT); + try { + if (InternalDataSerializer.autoSerialized(obj, hdos) || + InternalDataSerializer.writePdx(hdos, gfc, obj, pdxSerializer)) { + PdxInstance pi = InternalDataSerializer.readPdxInstance(hdos.toByteArray(), gfc); + if (pi != null) { + obj = pi; + } + } + } catch (IOException ignore) { + // we are not able to convert it so just fall through + } catch (PdxSerializationException ignore) { + // we are not able to convert it so just fall through + } + } + } + } + } + return basicEquals(obj, pdx); + } + + + ///////////////////////////////////////////////////////////// + /////////////////////////// fields ////////////////////////// + ///////////////////////////////////////////////////////////// + // Do not add any instance fields to this class. + // Instead add them to LeafRegionEntry.cpp + + public static class HashRegionEntryCreator implements + CustomEntryConcurrentHashMap.HashEntryCreator { + + public HashEntry newEntry(final Object key, final int hash, + final HashEntry next, final Object value) { + final AbstractRegionEntry entry = (AbstractRegionEntry)value; + // if hash is already set then assert that the two should be same + final int entryHash = entry.getEntryHash(); + if (hash == 0 || entryHash != 0) { + if (entryHash != hash) { + Assert.fail("unexpected mismatch of hash, expected=" + hash + + ", actual=" + entryHash + " for " + entry); + } + } + entry.setEntryHash(hash); + entry.setNextEntry(next); + return entry; + } + + public int keyHashCode(final Object key, final boolean compareValues) { + return CustomEntryConcurrentHashMap.keyHash(key, compareValues); + } + }; + + public abstract Object getKey(); + + protected static boolean okToStoreOffHeap(Object v, AbstractRegionEntry e) { + if (v == null) return false; + if (Token.isInvalidOrRemoved(v)) return false; + if (v == Token.NOT_AVAILABLE) return false; + if (v instanceof DiskEntry.RecoveredEntry) return false; // The disk layer has special logic that ends up storing the nested value in the RecoveredEntry off heap + if (!(e instanceof OffHeapRegionEntry)) return false; + // TODO should we check for deltas here or is that a user error? + return true; + } + + /** + * Default implementation. Override in subclasses with primitive keys + * to prevent creating an Object form of the key for each equality check. + */ + @Override + public boolean isKeyEqual(Object k) { + return k.equals(getKey()); + } + + private static final long LAST_MODIFIED_MASK = 0x00FFFFFFFFFFFFFFL; + + protected final void _setLastModified(long lastModifiedTime) { + if (lastModifiedTime < 0 || lastModifiedTime > LAST_MODIFIED_MASK) { + throw new IllegalStateException("Expected lastModifiedTime " + lastModifiedTime + " to be >= 0 and <= " + LAST_MODIFIED_MASK); + } + long storedValue; + long newValue; + do { + storedValue = getlastModifiedField(); + newValue = storedValue & ~LAST_MODIFIED_MASK; + newValue |= lastModifiedTime; + } while (!compareAndSetLastModifiedField(storedValue, newValue)); + } + protected abstract long getlastModifiedField(); + protected abstract boolean compareAndSetLastModifiedField(long expectedValue, long newValue); + public final long getLastModified() { + return getlastModifiedField() & LAST_MODIFIED_MASK; + } + protected final boolean areAnyBitsSet(long bitMask) { + return ( getlastModifiedField() & bitMask ) != 0L; + } + /** + * Any bits in "bitMask" that are 1 will be set. + */ + protected final void setBits(long bitMask) { + boolean done = false; + do { + long bits = getlastModifiedField(); + long newBits = bits | bitMask; + if (bits == newBits) return; + done = compareAndSetLastModifiedField(bits, newBits); + } while(!done); + } + /** + * Any bits in "bitMask" that are 0 will be cleared. + */ + protected final void clearBits(long bitMask) { + boolean done = false; + do { + long bits = getlastModifiedField(); + long newBits = bits & bitMask; + if (bits == newBits) return; + done = compareAndSetLastModifiedField(bits, newBits); + } while(!done); + } + + @Override + @Retained(ABSTRACT_REGION_ENTRY_PREPARE_VALUE_FOR_CACHE) + public Object prepareValueForCache(RegionEntryContext r, + @Retained(ABSTRACT_REGION_ENTRY_PREPARE_VALUE_FOR_CACHE) Object val, + boolean isEntryUpdate) { + return prepareValueForCache(r, val, null, isEntryUpdate); + } + + @Override + @Retained(ABSTRACT_REGION_ENTRY_PREPARE_VALUE_FOR_CACHE) + public Object prepareValueForCache(RegionEntryContext r, + @Retained(ABSTRACT_REGION_ENTRY_PREPARE_VALUE_FOR_CACHE) Object val, + EntryEventImpl event, boolean isEntryUpdate) { + if (r != null && r.getOffHeap() && okToStoreOffHeap(val, this)) { + if (val instanceof StoredObject) { + // Check to see if val has the same compression settings as this region. + // The recursive calls in this section are safe because + // we only do it after copy the off-heap value to the heap. + // This is needed to fix bug 52057. + StoredObject soVal = (StoredObject) val; + assert !soVal.isCompressed(); + if (r.getCompressor() != null) { + // val is uncompressed and we need a compressed value. + // So copy the off-heap value to the heap in a form that can be compressed. + byte[] valAsBytes = soVal.getValueAsHeapByteArray(); + Object heapValue; + if (soVal.isSerialized()) { + heapValue = CachedDeserializableFactory.create(valAsBytes); + } else { + heapValue = valAsBytes; + } + return prepareValueForCache(r, heapValue, event, isEntryUpdate); + } + if (val instanceof Chunk) { + // if the reused guy has a refcount then need to inc it + if (!((Chunk)val).retain()) { + throw new IllegalStateException("Could not use an off heap value because it was freed"); + } + } + // else it is DataAsAddress. This code just returns it as prepared. + // TODO OFFHEAP: Review the callers to see if they will handle DataAsAddress correctly. + } else { + byte[] data; + boolean isSerialized = !(val instanceof byte[]); + if (isSerialized) { + if (event != null && event.getCachedSerializedNewValue() != null) { + data = event.getCachedSerializedNewValue(); + } else if (val instanceof CachedDeserializable) { + data = ((CachedDeserializable)val).getSerializedValue(); + // TODO OFFHEAP: cache data in event? + } else if (val instanceof PdxInstance) { + try { + data = ((ConvertableToBytes)val).toBytes(); + // TODO OFFHEAP: cache data in event? + } catch (IOException e) { + throw new PdxSerializationException("Could not convert " + val + " to bytes", e); + } + } else { + data = EntryEventImpl.serialize(val); + // TODO OFFHEAP: cache data in event? + } + } else { + data = (byte[]) val; + } + byte[] compressedData = compressBytes(r, data); + boolean isCompressed = compressedData != data; + ReferenceCountHelper.setReferenceCountOwner(this); + MemoryAllocator ma = SimpleMemoryAllocatorImpl.getAllocator(); // fix for bug 47875 + val = ma.allocateAndInitialize(compressedData, isSerialized, isCompressed, GemFireChunk.TYPE); // TODO:KIRK:48068 race happens right after this line + ReferenceCountHelper.setReferenceCountOwner(null); + if (val instanceof GemFireChunk) { + val = new com.gemstone.gemfire.internal.offheap.ChunkWithHeapForm((GemFireChunk)val, data); + } +// if (val instanceof Chunk && r instanceof LocalRegion) { +// Chunk c = (Chunk) val; +// LocalRegion lr = (LocalRegion) r; +// SimpleMemoryAllocatorImpl.debugLog("allocated @" + Long.toHexString(c.getMemoryAddress()) + " reg=" + lr.getFullPath(), false); +// } + } + return val; + } + @Unretained Object nv = val; + if (nv instanceof StoredObject) { + // This off heap value is being put into a on heap region. + byte[] data = ((StoredObject) nv).getSerializedValue(); + nv = CachedDeserializableFactory.create(data); + } + // don't bother checking for SQLFire + if (!GemFireCacheImpl.sqlfSystem() && nv instanceof PdxInstanceImpl) { + // We do not want to put PDXs in the cache as values. + // So get the serialized bytes and use a CachedDeserializable. + try { + byte[] data = ((ConvertableToBytes)nv).toBytes(); + byte[] compressedData = compressBytes(r, data); + if (data == compressedData) { + nv = CachedDeserializableFactory.create(data); + } else { + nv = compressedData; + } + } catch (IOException e) { + throw new PdxSerializationException("Could not convert " + nv + " to bytes", e); + } + } else { + nv = compress(r, nv, event); + } + return nv; + } + + @Override + @Unretained + public final Object _getValue() { + return getValueField(); + } + + public final boolean isUpdateInProgress() { + return areAnyBitsSet(UPDATE_IN_PROGRESS); + } + + public final void setUpdateInProgress(final boolean underUpdate) { + if (underUpdate) { + setBits(UPDATE_IN_PROGRESS); + } else { + clearBits(~UPDATE_IN_PROGRESS); + } + } + + + public final boolean isCacheListenerInvocationInProgress() { + return areAnyBitsSet(LISTENER_INVOCATION_IN_PROGRESS); + } + + public final void setCacheListenerInvocationInProgress(final boolean listenerInvoked) { + if (listenerInvoked) { + setBits(LISTENER_INVOCATION_IN_PROGRESS); + } else { + clearBits(~LISTENER_INVOCATION_IN_PROGRESS); + } + } + + @Override + public final boolean isInUseByTransaction() { + return areAnyBitsSet(IN_USE_BY_TX); + } + + @Override + public final void setInUseByTransaction(final boolean v) { + if (v) { + setBits(IN_USE_BY_TX); + } else { + clearBits(~IN_USE_BY_TX); + } + } + + @Override + public final synchronized void incRefCount() { + TXManagerImpl.incRefCount(this); + setInUseByTransaction(true); + } + /** + * {@inheritDoc} + */ + @Override + public final boolean isMarkedForEviction() { + return areAnyBitsSet(MARKED_FOR_EVICTION); + } + + /** + * {@inheritDoc} + */ + @Override + public final void setMarkedForEviction() { + setBits(MARKED_FOR_EVICTION); + } + + /** + * {@inheritDoc} + */ + @Override + public final void clearMarkedForEviction() { + clearBits(~MARKED_FOR_EVICTION); + } + + @Override + public final synchronized void decRefCount(NewLRUClockHand lruList, LocalRegion lr) { + if (TXManagerImpl.decRefCount(this)) { + if (isInUseByTransaction()) { + setInUseByTransaction(false); + if (lruList != null) { + // No more transactions, place in lru list + lruList.appendEntry((LRUClockNode)this); + } + if (lr != null && lr.isEntryExpiryPossible()) { + lr.addExpiryTaskIfAbsent(this); + } + } + } + } + + @Override + public final synchronized void resetRefCount(NewLRUClockHand lruList) { + if (isInUseByTransaction()) { + setInUseByTransaction(false); + if (lruList != null) { + lruList.appendEntry((LRUClockNode)this); + } + } + } + /** + * soubhik: this method is overridden in sqlf flavor of entries. + * Instead of overriding this method; override areSetValue. + */ + protected final void _setValue(Object val) { + setValueField(val); + } + + @Override + public Token getValueAsToken() { + Object v = getValueField(); + if (v == null || v instanceof Token) { + return (Token)v; + } else { + return Token.NOT_A_TOKEN; + } + } + + /** + * Reads the value of this region entry. + * Provides low level access to the value field. + * @return possible OFF_HEAP_OBJECT (caller uses region entry reference) + */ + @Unretained + protected abstract Object getValueField(); + /** + * Set the value of this region entry. + * Provides low level access to the value field. + * @param v the new value to set + */ + protected abstract void setValueField(@Unretained Object v); + + @Retained + public Object getTransformedValue() { + return _getValueRetain(null, false); + } + + public final boolean getValueWasResultOfSearch() { + return areAnyBitsSet(VALUE_RESULT_OF_SEARCH); + } + + public final void setValueResultOfSearch(boolean v) { + if (v) { + setBits(VALUE_RESULT_OF_SEARCH); + } else { + clearBits(~VALUE_RESULT_OF_SEARCH); + } + } + + public boolean hasValidVersion() { + VersionStamp stamp = (VersionStamp)this; + boolean has = stamp.getRegionVersion() != 0 || stamp.getEntryVersion() != 0; + return has; + } + + public boolean hasStats() { + // override this in implementations that have stats + return false; + } + + /** + * @see HashEntry#getMapValue() + */ + public final Object getMapValue() { + return this; + } + + /** + * @see HashEntry#setMapValue(Object) + */ + public final void setMapValue(final Object newValue) { + if (this != newValue) { + Assert.fail("AbstractRegionEntry#setMapValue: unexpected setMapValue " + + "with newValue=" + newValue + ", this=" + this); + } + } + + protected abstract void setEntryHash(int v); + + @Override + public final String toString() { + final StringBuilder sb = new StringBuilder(this.getClass().getSimpleName()) + .append('@').append(Integer.toHexString(System.identityHashCode(this))) + .append(" ("); + return appendFieldsToString(sb).append(')').toString(); + } + + protected StringBuilder appendFieldsToString(final StringBuilder sb) { + sb.append("key=").append(getKey()).append("; rawValue=") + .append(_getValue()); // OFFHEAP _getValue ok: the current toString on OffHeapCachedDeserializable is safe to use without incing refcount. + VersionStamp stamp = getVersionStamp(); + if (stamp != null) { + sb.append("; version=").append(stamp.asVersionTag()+";member="+stamp.getMemberID()); + } + return sb; + } + + /* + * (non-Javadoc) + * This generates version tags for outgoing messages for all subclasses + * supporting concurrency versioning. It also sets the entry's version + * stamp to the tag's values. + * + * @see com.gemstone.gemfire.internal.cache.RegionEntry#generateVersionTag(com.gemstone.gemfire.distributed.DistributedMember, boolean) + */ + public VersionTag generateVersionTag(VersionSource mbr, boolean withDelta, LocalRegion region, EntryEventImpl event) { + VersionStamp stamp = this.getVersionStamp(); + if (stamp != null && region.getServerProxy() == null) { // clients do not generate versions + int v = stamp.getEntryVersion()+1; + if (v > 0xFFFFFF) { + v -= 0x1000000; // roll-over + } + VersionSource previous = stamp.getMemberID(); + + + //For non persistent regions, we allow the member to be null and + //when we send a message and the remote side can determine the member + //from the sender. For persistent regions, we need to send + //the persistent id to the remote side. + // + //TODO - RVV - optimize the way we send the persistent id to save + //space. + if(mbr == null) { + VersionSource regionMember = region.getVersionMember(); + if(regionMember instanceof DiskStoreID) { + mbr = regionMember; + } + } + + VersionTag tag = VersionTag.create(mbr); + tag.setEntryVersion(v); + if (region.getVersionVector() != null) { + // Use region version if already provided, else generate + long nextRegionVersion = event.getNextRegionVersion(); + if (nextRegionVersion != -1) { + // Set on the tag and record it locally + tag.setRegionVersion(nextRegionVersion); + RegionVersionVector rvv = region.getVersionVector(); + rvv.recordVersion(rvv.getOwnerId(),nextRegionVersion); + if (logger.isDebugEnabled()) { + logger.debug("recorded region version {}; region={}", nextRegionVersion, region.getFullPath()); + } + } else { + tag.setRegionVersion(region.getVersionVector().getNextVersion()); + } + } + if (withDelta) { + tag.setPreviousMemberID(previous); + } + VersionTag remoteTag = event.getVersionTag(); + if (remoteTag != null && remoteTag.isGatewayTag()) { + // if this event was received from a gateway we use the remote system's + // timestamp and dsid. + tag.setVersionTimeStamp(remoteTag.getVersionTimeStamp()); + tag.setDistributedSystemId(remoteTag.getDistributedSystemId()); + tag.setAllowedByResolver(remoteTag.isAllowedByResolver()); + } else { + long time = region.cacheTimeMillis(); + int dsid = region.getDistributionManager().getDistributedSystemId(); + // a locally generated change should always have a later timestamp than + // one received from a wan gateway, so fake a timestamp if necessary + if (time <= stamp.getVersionTimeStamp() && dsid != tag.getDistributedSystemId()) { + time = stamp.getVersionTimeStamp() + 1; + } + tag.setVersionTimeStamp(time); + tag.setDistributedSystemId(dsid); + } + stamp.setVersions(tag); + stamp.setMemberID(mbr); + event.setVersionTag(tag); + if (logger.isDebugEnabled()) { + logger.debug("generated tag {}; key={}; oldvalue={} newvalue={} client={} region={}; rvv={}", tag, + event.getKey(), event.getOldValueStringForm(), event.getNewValueStringForm(), + (event.getContext() == null? "none" : event.getContext().getDistributedMember().getName()), + region.getFullPath(), region.getVersionVector()); + } + return tag; + } + return null; + } + + /** set/unset the flag noting that a tombstone has been scheduled for this entry */ + public void setTombstoneScheduled(boolean scheduled) { + if (scheduled) { + setBits(TOMBSTONE_SCHEDULED); + } else { + clearBits(~TOMBSTONE_SCHEDULED); + } + } + + /** + * return the flag noting whether a tombstone has been scheduled for this entry. This should + * be called under synchronization on the region entry if you want an accurate result. + */ + public boolean isTombstoneScheduled() { + return areAnyBitsSet(TOMBSTONE_SCHEDULED); + } + + /* + * (non-Javadoc) + * This performs a concurrency check. + * + * This check compares the version number first, followed by the member ID. + * + * Wraparound of the version number is detected and handled by extending the + * range of versions by one bit. + * + * The normal membership ID comparison method is used.

+ * + * Note that a tag from a remote (WAN) system may be in the event. If this + * is the case this method will either invoke a user plugin that allows/disallows + * the event (and may modify the value) or it determines whether to allow + * or disallow the event based on timestamps and distributedSystemIDs. + * + * @throws ConcurrentCacheModificationException if the event conflicts with + * an event that has already been applied to the entry. + * + * @see com.gemstone.gemfire.internal.cache.RegionEntry#concurrencyCheck(com.gemstone.gemfire.cache.EntryEvent) + */ + public void processVersionTag(EntryEvent cacheEvent) { + processVersionTag(cacheEvent, true); + } + + + protected void processVersionTag(EntryEvent cacheEvent, boolean conflictCheck) { + EntryEventImpl event = (EntryEventImpl)cacheEvent; + VersionTag tag = event.getVersionTag(); + if (tag == null) { + return; + } + + try { + if (tag.isGatewayTag()) { + // this may throw ConcurrentCacheModificationException or modify the event + if (processGatewayTag(cacheEvent)) { + return; + } + assert false : "processGatewayTag failure - returned false"; + } + + if (!tag.isFromOtherMember()) { + if (!event.getOperation().isNetSearch()) { + // except for netsearch, all locally-generated tags can be ignored + return; + } + } + + final InternalDistributedMember originator = (InternalDistributedMember)event.getDistributedMember(); + final VersionSource dmId = event.getRegion().getVersionMember(); + LocalRegion r = event.getLocalRegion(); + boolean eventHasDelta = event.getDeltaBytes() != null && event.getRawNewValue() == null; + + VersionStamp stamp = getVersionStamp(); + // bug #46223, an event received from a peer or a server may be from a different + // distributed system than the last modification made to this entry so we must + // perform a gateway conflict check + if (stamp != null && !tag.isAllowedByResolver()) { + int stampDsId = stamp.getDistributedSystemId(); + int tagDsId = tag.getDistributedSystemId(); + + if (stampDsId != 0 && stampDsId != tagDsId && stampDsId != -1) { + StringBuilder verbose = null; + if (logger.isTraceEnabled(LogMarker.TOMBSTONE)) { + verbose = new StringBuilder(); + verbose.append("processing tag for key " + getKey() + ", stamp=" + stamp.asVersionTag() + ", tag=").append(tag); + } + long stampTime = stamp.getVersionTimeStamp(); + long tagTime = tag.getVersionTimeStamp(); + if (stampTime > 0 && (tagTime > stampTime + || (tagTime == stampTime && tag.getDistributedSystemId() >= stamp.getDistributedSystemId()))) { + if (verbose != null) { + verbose.append(" - allowing event"); + logger.trace(LogMarker.TOMBSTONE, verbose); + } + // Update the stamp with event's version information. + applyVersionTag(r, stamp, tag, originator); + return; + } + + if (stampTime > 0) { + if (verbose != null) { + verbose.append(" - disallowing event"); + logger.trace(LogMarker.TOMBSTONE, verbose); + } + r.getCachePerfStats().incConflatedEventsCount(); + persistConflictingTag(r, tag); + throw new ConcurrentCacheModificationException("conflicting event detected"); + } + } + } + + if (r.getVersionVector() != null && + r.getServerProxy() == null && + (r.getDataPolicy().withPersistence() || + !r.getScope().isLocal())) { // bug #45258 - perf degradation for local regions and RVV + VersionSource who = tag.getMemberID(); + if (who == null) { + who = originator; + } + r.getVersionVector().recordVersion(who, tag); + } + + assert !tag.isFromOtherMember() || tag.getMemberID() != null : "remote tag is missing memberID"; + + + // [bruce] for a long time I had conflict checks turned off in clients when + // receiving a response from a server and applying it to the cache. This lowered + // the CPU cost of versioning but eventually had to be pulled for bug #45453 +// if (r.getServerProxy() != null && conflictCheck) { +// // events coming from servers while a local sync is held on the entry +// // do not require a conflict check. Conflict checks were already +// // performed on the server and here we just consume whatever was sent back. +// // Event.isFromServer() returns true for client-update messages and +// // for putAll/getAll, which do not hold syncs during the server operation. +// conflictCheck = event.isFromServer(); +// } +// else + + // [bruce] for a very long time we had conflict checks turned off for PR buckets. + // Bug 45669 showed a primary dying in the middle of distribution. This caused + // one backup bucket to have a v2. The other bucket was promoted to primary and + // generated a conflicting v2. We need to do the check so that if this second + // v2 loses to the original one in the delta-GII operation that the original v2 + // will be the winner in both buckets. +// if (r.isUsedForPartitionedRegionBucket()) { +// conflictCheck = false; // primary/secondary model +// } + + // The new value in event is not from GII, even it could be tombstone + basicProcessVersionTag(r, tag, false, eventHasDelta, dmId, originator, conflictCheck); + } catch (ConcurrentCacheModificationException ex) { + event.isConcurrencyConflict(true); + throw ex; + } + } + + protected final void basicProcessVersionTag(LocalRegion region, VersionTag tag, boolean isTombstoneFromGII, + boolean deltaCheck, VersionSource dmId, InternalDistributedMember sender, boolean checkForConflict) { + + StringBuilder verbose = null; + + if (tag != null) { + VersionStamp stamp = getVersionStamp(); + + if (logger.isTraceEnabled(LogMarker.TOMBSTONE)) { + VersionTag stampTag = stamp.asVersionTag(); + if (stampTag.hasValidVersion() && checkForConflict) { // only be verbose here if there's a possibility we might reject the operation + verbose = new StringBuilder(); + verbose.append("processing tag for key " + getKey() + ", stamp=" + stamp.asVersionTag() + ", tag=").append(tag) + .append(", checkForConflict=").append(checkForConflict); //.append(", current value=").append(_getValue()); + } + } + + if (stamp == null) { + throw new IllegalStateException("message contained a version tag but this region has no version storage"); + } + + boolean apply = true; + + try { + if (checkForConflict) { + apply = checkForConflict(region, stamp, tag, isTombstoneFromGII, deltaCheck, dmId, sender, verbose); + } + } catch (ConcurrentCacheModificationException e) { + // Even if we don't apply the operation we should always retain the + // highest timestamp in order for WAN conflict checks to work correctly + // because the operation may have been sent to other systems and been + // applied there + if (!tag.isGatewayTag() + && stamp.getDistributedSystemId() == tag.getDistributedSystemId() + && tag.getVersionTimeStamp() > stamp.getVersionTimeStamp()) { + stamp.setVersionTimeStamp(tag.getVersionTimeStamp()); + tag.setTimeStampApplied(true); + if (verbose != null) { + verbose.append("\nThough in conflict the tag timestamp was more recent and was recorded."); + } + } + throw e; + } finally { + if (verbose != null) { + logger.trace(LogMarker.TOMBSTONE, verbose); + } + } + + if (apply) { + applyVersionTag(region, stamp, tag, sender); + } + } + } + + + private void applyVersionTag(LocalRegion region, VersionStamp stamp, VersionTag tag, InternalDistributedMember sender) { + // stamp.setPreviousMemberID(stamp.getMemberID()); + VersionSource mbr = tag.getMemberID(); + if (mbr == null) { + mbr = sender; + } + mbr = region.getVersionVector().getCanonicalId(mbr); + tag.setMemberID(mbr); + stamp.setVersions(tag); + if (tag.hasPreviousMemberID()) { + if (tag.getPreviousMemberID() == null) { + tag.setPreviousMemberID(stamp.getMemberID()); + } else { + tag.setPreviousMemberID(region.getVersionVector().getCanonicalId( + tag.getPreviousMemberID())); + } + } + } + + /** perform conflict checking for a stamp/tag */ + protected boolean checkForConflict(LocalRegion region, + VersionStamp stamp, VersionTag tag, + boolean isTombstoneFromGII, + boolean deltaCheck, VersionSource dmId, + InternalDistributedMember sender, StringBuilder verbose) { + + int stampVersion = stamp.getEntryVersion(); + int tagVersion = tag.getEntryVersion(); + + boolean throwex = false; + boolean apply = false; + + if (stamp.getVersionTimeStamp() != 0) { // new entries have no timestamp + // check for wrap-around on the version number + long difference = tagVersion - stampVersion; + if (0x10000 < difference || difference < -0x10000) { + if (verbose != null) { + verbose.append("\nversion rollover detected: tag="+tagVersion + " stamp=" + stampVersion); + } + if (difference < 0) { + tagVersion += 0x1000000L; + } else { + stampVersion += 0x1000000L; + } + } + } + if (verbose != null) { + verbose.append("\nstamp=v").append(stampVersion) + .append(" tag=v").append(tagVersion); + } + + if (deltaCheck) { + checkForDeltaConflict(region, stampVersion, tagVersion, stamp, tag, dmId, sender, verbose); + } + + if (stampVersion == 0 || stampVersion < tagVersion) { + if (verbose != null) { verbose.append(" - applying change"); } + apply = true; + } else if (stampVersion > tagVersion) { + if (overwritingOldTombstone(region, stamp, tag, verbose) && tag.getVersionTimeStamp() > stamp.getVersionTimeStamp()) { + apply = true; + } else { + // check for an incoming expired tombstone from an initial image chunk. + if (tagVersion > 0 + && isExpiredTombstone(region, tag.getVersionTimeStamp(), isTombstoneFromGII) + && tag.getVersionTimeStamp() > stamp.getVersionTimeStamp()) { + // A special case to apply: when remote entry is expired tombstone, then let local vs remote with newer timestamp to win + if (verbose != null) { verbose.append(" - applying change in Delta GII"); } + apply = true; + } else { + if (verbose != null) { verbose.append(" - disallowing"); } + throwex= true; + } + } + } else { + if (overwritingOldTombstone(region, stamp, tag, verbose)) { + apply = true; + } else { + // compare member IDs + VersionSource stampID = stamp.getMemberID(); + if (stampID == null) { + stampID = dmId; + } + VersionSource tagID = tag.getMemberID(); + if (tagID == null) { + tagID = sender; + } + if (verbose != null) { verbose.append("\ncomparing IDs"); } + int compare = stampID.compareTo(tagID); + if (compare < 0) { + if (verbose != null) { verbose.append(" - applying change"); } + apply = true; + } else if (compare > 0) { + if (verbose != null) { verbose.append(" - disallowing"); } + throwex = true; + } else if (tag.isPosDup()) { + if (verbose != null) { verbose.append(" - disallowing duplicate marked with posdup"); } + throwex = true; + } else /* if (isTombstoneFromGII && isTombstone()) { + if (verbose != null) { verbose.append(" - disallowing duplicate tombstone from GII"); } + return false; // bug #49601 don't schedule tombstones from GII if there's already one here + } else */ { + if (verbose != null) { verbose.append(" - allowing duplicate"); } + } + } + } + + if (!apply && throwex) { + region.getCachePerfStats().incConflatedEventsCount(); + persistConflictingTag(region, tag); + throw new ConcurrentCacheModificationException(); + } + + return apply; + } + + private boolean isExpiredTombstone(LocalRegion region, long timestamp, boolean isTombstone) { + return isTombstone && (timestamp + TombstoneService.REPLICATED_TOMBSTONE_TIMEOUT) <= region.cacheTimeMillis(); + } + + private boolean overwritingOldTombstone(LocalRegion region, VersionStamp stamp, VersionTag tag, StringBuilder verbose) { + // Tombstone GC does not use locking to stop operations when old tombstones + // are being removed. Because of this we might get an operation that was applied + // in another VM that has just reaped a tombstone and is now using a reset + // entry version number. Because of this we check the timestamp on the current + // local entry and see if it is old enough to have expired. If this is the case + // we accept the change and allow the tag to be recorded + long stampTime = stamp.getVersionTimeStamp(); + if (isExpiredTombstone(region, stampTime, this.isTombstone())) { + // no local change since the tombstone would have timed out - accept the change + if (verbose != null) { verbose.append(" - accepting because local timestamp is old"); } + return true; + } else { + return false; + } + } + + protected void persistConflictingTag(LocalRegion region, VersionTag tag) { + // only persist region needs to persist conflict tag + } + + /** + * for an event containing a delta we must check to see if the tag's + * previous member id is the stamp's member id and ensure that the + * version is only incremented by 1. Otherwise the delta is being + * applied to a value that does not match the source of the delta. + * + * @throws InvalidDeltaException + */ + private void checkForDeltaConflict(LocalRegion region, + long stampVersion, long tagVersion, + VersionStamp stamp, VersionTag tag, + VersionSource dmId, InternalDistributedMember sender, + StringBuilder verbose) { + + if (tagVersion != stampVersion+1) { + if (verbose != null) { + verbose.append("\ndelta requires full value due to version mismatch"); + } + region.getCachePerfStats().incDeltaFailedUpdates(); + throw new InvalidDeltaException("delta cannot be applied due to version mismatch"); + + } else { + // make sure the tag was based on the value in this entry by checking the + // tag's previous-changer ID against this stamp's current ID + VersionSource stampID = stamp.getMemberID(); + if (stampID == null) { + stampID = dmId; + } + VersionSource tagID = tag.getPreviousMemberID(); + if (tagID == null) { + tagID = sender; + } + if (!tagID.equals(stampID)) { + if (verbose != null) { + verbose.append("\ndelta requires full value. tag.previous=") + .append(tagID).append(" but stamp.current=").append(stampID); + } + region.getCachePerfStats().incDeltaFailedUpdates(); + throw new InvalidDeltaException("delta cannot be applied due to version ID mismatch"); + } + } + } + + private boolean processGatewayTag(EntryEvent cacheEvent) { + // Gateway tags are installed in the server-side LocalRegion cache + // modification methods. They do not have version numbers or distributed + // member IDs. Instead they only have timestamps and distributed system IDs. + + // If there is a resolver plug-in, invoke it. Otherwise we use the timestamps and + // distributed system IDs to determine whether to allow the event to proceed. + + final boolean isDebugEnabled = logger.isDebugEnabled(); + + if (this.isRemoved() && !this.isTombstone()) { + return true; // no conflict on a new entry + } + EntryEventImpl event = (EntryEventImpl)cacheEvent; + VersionTag tag = event.getVersionTag(); + long stampTime = getVersionStamp().getVersionTimeStamp(); + long tagTime = tag.getVersionTimeStamp(); + int stampDsid = getVersionStamp().getDistributedSystemId(); + int tagDsid = tag.getDistributedSystemId(); + if (isDebugEnabled) { + logger.debug("processing gateway version information for {}. Stamp dsid={} time={} Tag dsid={} time={}", + event.getKey(), stampDsid, stampTime, tagDsid, tagTime); + } + if (tagTime == VersionTag.ILLEGAL_VERSION_TIMESTAMP) { + return true; // no timestamp received from other system - just apply it + } + if (tagDsid == stampDsid || stampDsid == -1) { + return true; + } + GatewayConflictResolver resolver = event.getRegion().getCache().getGatewayConflictResolver(); + if (resolver != null) { + if (isDebugEnabled) { + logger.debug("invoking gateway conflict resolver"); + } + final boolean[] disallow = new boolean[1]; + final Object[] newValue = new Object[] { this }; + GatewayConflictHelper helper = new GatewayConflictHelper() { + @Override + public void disallowEvent() { + disallow[0] = true; + } + + @Override + public void changeEventValue(Object v) { + newValue[0] = v; + } + }; + TimestampedEntryEventImpl timestampedEvent = + (TimestampedEntryEventImpl)event.getTimestampedEvent(tagDsid, stampDsid, tagTime, stampTime); + + // gateway conflict resolvers will usually want to see the old value + if (!timestampedEvent.hasOldValue() && isRemoved()) { + timestampedEvent.setOldValue(getValue(timestampedEvent.getRegion())); // OFFHEAP: since isRemoved I think getValue will never be stored off heap in this case + } + + Throwable thr = null; + try { + resolver.onEvent(timestampedEvent, helper); + } + catch (CancelException cancelled) { + throw cancelled; + } + catch (VirtualMachineError err) { + SystemFailure.initiateFailure(err); + // If this ever returns, rethrow the error. We're poisoned + // now, so don't let this thread continue. + throw err; + } + catch (Throwable t) { + // Whenever you catch Error or Throwable, you must also + // catch VirtualMachineError (see above). However, there is + // _still_ a possibility that you are dealing with a cascading + // error condition, so you also need to check to see if the JVM + // is still usable: + SystemFailure.checkFailure(); + logger.error(LocalizedMessage.create(LocalizedStrings.LocalRegion_EXCEPTION_OCCURRED_IN_CONFLICTRESOLVER), t); + thr = t; + } finally { + timestampedEvent.release(); + } + + if (isDebugEnabled) { + logger.debug("done invoking resolver {}", thr); + } + if (thr == null) { + if (disallow[0]) { + if (isDebugEnabled) { + logger.debug("conflict resolver rejected the event for {}", event.getKey()); + } + throw new ConcurrentCacheModificationException("WAN conflict resolver rejected the operation"); + } + + tag.setAllowedByResolver(true); + + if (newValue[0] != this) { + if (isDebugEnabled) { + logger.debug("conflict resolver changed the value of the event for {}", event.getKey()); + } + // the resolver changed the event value! + event.setNewValue(newValue[0]); + } + // if nothing was done then we allow the event + if (isDebugEnabled) { + logger.debug("change was allowed by conflict resolver: {}", tag); + } + return true; + } + } + if (isDebugEnabled) { + logger.debug("performing normal WAN conflict check"); + } + if (tagTime > stampTime + || (tagTime == stampTime && tagDsid >= stampDsid)) { + if (isDebugEnabled) { + logger.debug("allowing event"); + } + return true; + } + if (isDebugEnabled) { + logger.debug("disallowing event for " + event.getKey()); + } + throw new ConcurrentCacheModificationException("conflicting WAN event detected"); + } + + static boolean isCompressible(RegionEntryContext context,Object value) { + return ((value != null) && (context != null) && (context.getCompressor() != null) && !Token.isInvalidOrRemoved(value)); + } + + /* subclasses supporting versions must override this */ + public VersionStamp getVersionStamp() { + return null; + } + + public boolean isValueNull() { + return (null == getValueAsToken()); + } + + public boolean isInvalid() { + return Token.isInvalid(getValueAsToken()); + } + + public boolean isDestroyed() { + return Token.isDestroyed(getValueAsToken()); + } + + public void setValueToNull() { + _setValue(null); + } + + public boolean isInvalidOrRemoved() { + return Token.isInvalidOrRemoved(getValueAsToken()); + } + + /** + * Maximum size of a string that can be encoded as char. + */ + public static final int MAX_INLINE_STRING_KEY_CHAR_ENCODING = 7; + /** + * Maximum size of a string that can be encoded as byte. + */ + public static final int MAX_INLINE_STRING_KEY_BYTE_ENCODING = 15; + + /** + * This is only retained in off-heap subclasses. However, it's marked as + * Retained here so that callers are aware that the value may be retained. + */ + @Override + @Retained + public Object _getValueRetain(RegionEntryContext context, boolean decompress) { + if (decompress) { + return decompress(context, _getValue()); + } else { + return _getValue(); + } + } + + @Override + public void returnToPool() { + // noop by default + } +} diff --git a/gemfire-core/src/main/java/com/gemstone/gemfire/internal/cache/AbstractRegionMap.java b/gemfire-core/src/main/java/com/gemstone/gemfire/internal/cache/AbstractRegionMap.java new file mode 100644 index 000000000000..7661f82fdaf6 --- /dev/null +++ b/gemfire-core/src/main/java/com/gemstone/gemfire/internal/cache/AbstractRegionMap.java @@ -0,0 +1,4163 @@ +/* + * 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 com.gemstone.gemfire.internal.cache; + + +import java.io.IOException; +import java.lang.reflect.Method; +import java.util.Collection; +import java.util.HashSet; +import java.util.Iterator; +import java.util.List; +import java.util.Map; +import java.util.Set; +import java.util.concurrent.atomic.AtomicInteger; + +import com.gemstone.gemfire.internal.cache.region.entry.RegionEntryFactoryBuilder; +import org.apache.logging.log4j.Logger; + +import com.gemstone.gemfire.GemFireIOException; +import com.gemstone.gemfire.InvalidDeltaException; +import com.gemstone.gemfire.cache.CacheRuntimeException; +import com.gemstone.gemfire.cache.CacheWriter; +import com.gemstone.gemfire.cache.CacheWriterException; +import com.gemstone.gemfire.cache.CustomEvictionAttributes; +import com.gemstone.gemfire.cache.DiskAccessException; +import com.gemstone.gemfire.cache.EntryExistsException; +import com.gemstone.gemfire.cache.EntryNotFoundException; +import com.gemstone.gemfire.cache.Operation; +import com.gemstone.gemfire.cache.RegionDestroyedException; +import com.gemstone.gemfire.cache.TimeoutException; +import com.gemstone.gemfire.cache.TransactionId; +import com.gemstone.gemfire.cache.query.IndexMaintenanceException; +import com.gemstone.gemfire.cache.query.QueryException; +import com.gemstone.gemfire.cache.query.internal.IndexUpdater; +import com.gemstone.gemfire.cache.query.internal.index.IndexManager; +import com.gemstone.gemfire.cache.query.internal.index.IndexProtocol; +import com.gemstone.gemfire.distributed.DistributedMember; +import com.gemstone.gemfire.distributed.internal.membership.InternalDistributedMember; +import com.gemstone.gemfire.internal.Assert; +import com.gemstone.gemfire.internal.ClassPathLoader; +import com.gemstone.gemfire.internal.cache.DiskInitFile.DiskRegionFlag; +import com.gemstone.gemfire.internal.cache.FilterRoutingInfo.FilterInfo; +import com.gemstone.gemfire.internal.cache.delta.Delta; +import com.gemstone.gemfire.internal.cache.ha.HAContainerWrapper; +import com.gemstone.gemfire.internal.cache.ha.HARegionQueue; +import com.gemstone.gemfire.internal.cache.lru.LRUEntry; +import com.gemstone.gemfire.internal.cache.tier.sockets.CacheClientNotifier; +import com.gemstone.gemfire.internal.cache.tier.sockets.ClientProxyMembershipID; +import com.gemstone.gemfire.internal.cache.tier.sockets.HAEventWrapper; +import com.gemstone.gemfire.internal.cache.versions.ConcurrentCacheModificationException; +import com.gemstone.gemfire.internal.cache.versions.RegionVersionVector; +import com.gemstone.gemfire.internal.cache.versions.VersionHolder; +import com.gemstone.gemfire.internal.cache.versions.VersionSource; +import com.gemstone.gemfire.internal.cache.versions.VersionStamp; +import com.gemstone.gemfire.internal.cache.versions.VersionTag; +import com.gemstone.gemfire.internal.cache.wan.GatewaySenderEventImpl; +import com.gemstone.gemfire.internal.concurrent.MapCallbackAdapter; +import com.gemstone.gemfire.internal.concurrent.MapResult; +import com.gemstone.gemfire.internal.i18n.LocalizedStrings; +import com.gemstone.gemfire.internal.logging.LogService; +import com.gemstone.gemfire.internal.logging.log4j.LocalizedMessage; +import com.gemstone.gemfire.internal.logging.log4j.LogMarker; +import com.gemstone.gemfire.internal.offheap.Chunk; +import com.gemstone.gemfire.internal.offheap.OffHeapHelper; +import com.gemstone.gemfire.internal.offheap.OffHeapRegionEntryHelper; +import com.gemstone.gemfire.internal.offheap.ReferenceCountHelper; +import com.gemstone.gemfire.internal.offheap.annotations.Released; +import com.gemstone.gemfire.internal.offheap.annotations.Retained; +import com.gemstone.gemfire.internal.offheap.annotations.Unretained; +import com.gemstone.gemfire.internal.sequencelog.EntryLogger; +import com.gemstone.gemfire.internal.util.concurrent.CustomEntryConcurrentHashMap; +import com.gemstone.gemfire.pdx.PdxInstance; +import com.gemstone.gemfire.pdx.PdxSerializationException; +import com.gemstone.gemfire.pdx.internal.ConvertableToBytes; + +/** + * Abstract implementation of {@link RegionMap}that has all the common + * behavior. + * + * @since 3.5.1 + * + * + */ + +//Asif: In case of sqlFabric System, we are creating a different set of RegionEntry +// which are derived from the concrete GFE RegionEntry classes. +// In future if any new concrete RegionEntry class is defined, the new SqlFabric +// RegionEntry Classes need to be created. There is a junit test in sqlfabric +// which checks for RegionEntry classes of GFE and validates the same with its +// own classes. + +public abstract class AbstractRegionMap implements RegionMap { + + private static final Logger logger = LogService.getLogger(); + + /** The underlying map for this region. */ + protected CustomEntryConcurrentHashMap map; + /** An internal Listener for index maintenance for SQLFabric. */ + private final IndexUpdater indexUpdater; + + /** + * This test hook is used to force the conditions for defect 48182. + * This hook is used by Bug48182JUnitTest. + */ + static Runnable testHookRunnableFor48182 = null; + + private RegionEntryFactory entryFactory; + private Attributes attr; + private transient Object owner; // the region that owns this map + + protected AbstractRegionMap(InternalRegionArguments internalRegionArgs) { + if (internalRegionArgs != null) { + this.indexUpdater = internalRegionArgs.getIndexUpdater(); + } + else { + this.indexUpdater = null; + } + } + + public final IndexUpdater getIndexUpdater() { + return this.indexUpdater; + } + + protected void initialize(Object owner, + Attributes attr, + InternalRegionArguments internalRegionArgs, + boolean isLRU) { + _setAttributes(attr); + setOwner(owner); + _setMap(createConcurrentMap(attr.initialCapacity, attr.loadFactor, + attr.concurrencyLevel, false, + new AbstractRegionEntry.HashRegionEntryCreator())); + + final GemFireCacheImpl cache; + boolean isDisk; + boolean withVersioning = false; + boolean offHeap = false; + if (owner instanceof LocalRegion) { + LocalRegion region = (LocalRegion)owner; + isDisk = region.getDiskRegion() != null; + cache = region.getGemFireCache(); + withVersioning = region.getConcurrencyChecksEnabled(); + offHeap = region.getOffHeap(); + } + else if (owner instanceof PlaceHolderDiskRegion) { + offHeap = ((PlaceHolderDiskRegion) owner).getOffHeap(); + isDisk = true; + withVersioning = ((PlaceHolderDiskRegion)owner).getFlags().contains( + DiskRegionFlag.IS_WITH_VERSIONING); + cache = GemFireCacheImpl.getInstance(); + } + else { + throw new IllegalStateException( + "expected LocalRegion or PlaceHolderDiskRegion"); + } + + if (cache != null && cache.isSqlfSystem()) { + String provider = GemFireCacheImpl.SQLF_ENTRY_FACTORY_PROVIDER; + try { + Class factoryProvider = ClassPathLoader.getLatest().forName(provider); + Method method = factoryProvider.getDeclaredMethod( + "getRegionEntryFactory", new Class[] { Boolean.TYPE, Boolean.TYPE, + Boolean.TYPE, Object.class, InternalRegionArguments.class }); + RegionEntryFactory ref = (RegionEntryFactory)method.invoke(null, + new Object[] { Boolean.valueOf(attr.statisticsEnabled), + Boolean.valueOf(isLRU), Boolean.valueOf(isDisk), owner, + internalRegionArgs }); + + // TODO need to have the SQLF entry factory support version stamp storage + setEntryFactory(ref); + + } + catch (Exception e) { + throw new CacheRuntimeException( + "Exception in obtaining RegionEntry Factory" + " provider class ", + e) { + }; + } + } + else { + setEntryFactory(new RegionEntryFactoryBuilder().getRegionEntryFactoryOrNull(attr.statisticsEnabled,isLRU,isDisk,withVersioning,offHeap)); + } + } + + protected CustomEntryConcurrentHashMap createConcurrentMap( + int initialCapacity, float loadFactor, int concurrencyLevel, + boolean isIdentityMap, + CustomEntryConcurrentHashMap.HashEntryCreator entryCreator) { + if (entryCreator != null) { + return new CustomEntryConcurrentHashMap(initialCapacity, loadFactor, + concurrencyLevel, isIdentityMap, entryCreator); + } + else { + return new CustomEntryConcurrentHashMap(initialCapacity, + loadFactor, concurrencyLevel, isIdentityMap); + } + } + + public void changeOwner(LocalRegion r) { + if (r == _getOwnerObject()) { + return; + } + setOwner(r); + } + + @Override + public final void setEntryFactory(RegionEntryFactory f) { + this.entryFactory = f; + } + + public final RegionEntryFactory getEntryFactory() { + return this.entryFactory; + } + + protected final void _setAttributes(Attributes a) { + this.attr = a; + } + + public final Attributes getAttributes() { + return this.attr; + } + + protected final LocalRegion _getOwner() { + return (LocalRegion)this.owner; + } + + protected boolean _isOwnerALocalRegion() { + return this.owner instanceof LocalRegion; + } + + protected final Object _getOwnerObject() { + return this.owner; + } + + public final void setOwner(Object r) { + this.owner = r; + } + + protected final CustomEntryConcurrentHashMap _getMap() { + return this.map; + } + + protected final void _setMap(CustomEntryConcurrentHashMap m) { + this.map = m; + } + + public int size() + { + return _getMap().size(); + } + + // this is currently used by stats and eviction + @Override + public int sizeInVM() { + return _getMap().size(); + } + + public boolean isEmpty() + { + return _getMap().isEmpty(); + } + + public Set keySet() + { + return _getMap().keySet(); + } + + @SuppressWarnings({ "unchecked", "rawtypes" }) + public Collection regionEntries() { + return (Collection)_getMap().values(); + } + + @SuppressWarnings({ "unchecked", "rawtypes" }) + @Override + public Collection regionEntriesInVM() { + return (Collection)_getMap().values(); + } + + public final boolean containsKey(Object key) { + RegionEntry re = getEntry(key); + if (re == null) { + return false; + } + if (re.isRemoved()) { + return false; + } + return true; + } + + public RegionEntry getEntry(Object key) { + RegionEntry re = (RegionEntry)_getMap().get(key); + if (re != null && re.isMarkedForEviction()) { + // entry has been faulted in from HDFS + return null; + } + return re; + } + + protected RegionEntry getEntry(EntryEventImpl event) { + return getEntry(event.getKey()); + } + + + @Override + public final RegionEntry getEntryInVM(Object key) { + return (RegionEntry)_getMap().get(key); + } + + + public final RegionEntry putEntryIfAbsent(Object key, RegionEntry re) { + RegionEntry value = (RegionEntry)_getMap().putIfAbsent(key, re); + if (value == null && (re instanceof OffHeapRegionEntry) + && _isOwnerALocalRegion() && _getOwner().isThisRegionBeingClosedOrDestroyed()) { + // prevent orphan during concurrent destroy (#48068) + if (_getMap().remove(key, re)) { + ((OffHeapRegionEntry)re).release(); + } + _getOwner().checkReadiness(); // throw RegionDestroyedException + } + return value; + } + + @Override + public final RegionEntry getOperationalEntryInVM(Object key) { + RegionEntry re = (RegionEntry)_getMap().get(key); + if (re != null && re.isMarkedForEviction()) { + // entry has been faulted in from HDFS + return null; + } + return re; + } + + + public final void removeEntry(Object key, RegionEntry re, boolean updateStat) { + if (re.isTombstone() && _getMap().get(key) == re && !re.isMarkedForEviction()){ + logger.fatal(LocalizedMessage.create(LocalizedStrings.AbstractRegionMap_ATTEMPT_TO_REMOVE_TOMBSTONE), new Exception("stack trace")); + return; // can't remove tombstones except from the tombstone sweeper + } + if (_getMap().remove(key, re)) { + re.removePhase2(); + if (updateStat) { + incEntryCount(-1); + } + } + } + + public final void removeEntry(Object key, RegionEntry re, boolean updateStat, + EntryEventImpl event, final LocalRegion owner, + final IndexUpdater indexUpdater) { + boolean success = false; + if (re.isTombstone()&& _getMap().get(key) == re && !re.isMarkedForEviction()) { + logger.fatal(LocalizedMessage.create(LocalizedStrings.AbstractRegionMap_ATTEMPT_TO_REMOVE_TOMBSTONE), new Exception("stack trace")); + return; // can't remove tombstones except from the tombstone sweeper + } + try { + if (indexUpdater != null) { + indexUpdater.onEvent(owner, event, re); + } + + //This is messy, but custom eviction calls removeEntry + //rather than re.destroy I think to avoid firing callbacks, etc. + //However, the value still needs to be set to removePhase1 + //in order to remove the entry from disk. + if(event.isCustomEviction() && !re.isRemoved()) { + try { + re.removePhase1(owner, false); + } catch (RegionClearedException e) { + //that's ok, we were just trying to do evict incoming eviction + } + } + + if (_getMap().remove(key, re)) { + re.removePhase2(); + success = true; + if (updateStat) { + incEntryCount(-1); + } + } + } finally { + if (indexUpdater != null) { + indexUpdater.postEvent(owner, event, re, success); + } + } + } + + protected final void incEntryCount(int delta) { + LocalRegion lr = _getOwner(); + if (lr != null) { + CachePerfStats stats = lr.getCachePerfStats(); + if (stats != null) { + stats.incEntryCount(delta); + } + } + } + + final void incClearCount(LocalRegion lr) { + if (lr != null && !(lr instanceof HARegion)) { + CachePerfStats stats = lr.getCachePerfStats(); + if (stats != null) { + stats.incClearCount(); + } + } + } + + private void _mapClear() { + _getMap().clear(); + } + + public void close() { + /* + for (SuspectEntryList l: this.suspectEntries.values()) { + for (EntryEventImpl e: l) { + e.release(); + } + } + */ + clear(null); + } + + /** + * Clear the region and, if an RVV is given, return a collection of the + * version sources in all remaining tags + */ + public Set clear(RegionVersionVector rvv) + { + Set result = new HashSet(); + + if(!_isOwnerALocalRegion()) { + //Fix for #41333. Just clear the the map + //if we failed during initialization. + _mapClear(); + return null; + } + if (logger.isDebugEnabled()) { + logger.debug("Clearing entries for {} rvv={}", _getOwner(), " rvv=" + rvv); + } + LocalRegion lr = _getOwner(); + RegionVersionVector localRvv = lr.getVersionVector(); + incClearCount(lr); + // lock for size calcs if the region might have tombstones + Object lockObj = lr.getConcurrencyChecksEnabled()? lr.getSizeGuard() : new Object(); + synchronized (lockObj) { + if (rvv == null) { + int delta = 0; + try { + delta = sizeInVM(); // TODO soplog need to determine if stats should + // reflect only size in memory or the complete thing + } catch (GemFireIOException e) { + // ignore rather than throwing an exception during cache close + } + int tombstones = lr.getTombstoneCount(); + _mapClear(); + _getOwner().updateSizeOnClearRegion(delta - tombstones); + _getOwner().incTombstoneCount(-tombstones); + if (delta != 0) { + incEntryCount(-delta); + } + } else { + int delta = 0; + int tombstones = 0; + VersionSource myId = _getOwner().getVersionMember(); + if (localRvv != rvv) { + localRvv.recordGCVersions(rvv); + } + final boolean isTraceEnabled = logger.isTraceEnabled(); + for (RegionEntry re : regionEntries()) { + synchronized(re) { + Token value = re.getValueAsToken(); + // if it's already being removed or the entry is being created we leave it alone + if (value == Token.REMOVED_PHASE1 || value == Token.REMOVED_PHASE2) { + continue; + } + + VersionSource id = re.getVersionStamp().getMemberID(); + if (id == null) { + id = myId; + } + if (rvv.contains(id, re.getVersionStamp().getRegionVersion())) { + if (isTraceEnabled) { + logger.trace("region clear op is removing {} {}", re.getKey(), re.getVersionStamp()); + } + + boolean tombstone = re.isTombstone(); + // note: it.remove() did not reliably remove the entry so we use remove(K,V) here + if (_getMap().remove(re.getKey(), re)) { + if (OffHeapRegionEntryHelper.doesClearNeedToCheckForOffHeap()) { + GatewaySenderEventImpl.release(re._getValue()); // OFFHEAP _getValue ok + } + //If this is an overflow only region, we need to free the entry on + //disk at this point. + try { + re.removePhase1(lr, true); + } catch (RegionClearedException e) { + //do nothing, it's already cleared. + } + re.removePhase2(); + lruEntryDestroy(re); + if (tombstone) { + _getOwner().incTombstoneCount(-1); + tombstones += 1; + } else { + delta += 1; + } + } + } else { // rvv does not contain this entry so it is retained + result.add(id); + } + } + } + _getOwner().updateSizeOnClearRegion(delta); + incEntryCount(-delta); + incEntryCount(-tombstones); + if (logger.isDebugEnabled()) { + logger.debug("Size after clearing = {}", _getMap().size()); + } + if (isTraceEnabled && _getMap().size() < 20) { + _getOwner().dumpBackingMap(); + } + } + } + return result; + } + + public void lruUpdateCallback() + { + // By default do nothing; LRU maps needs to override this method + } + public void lruUpdateCallback(boolean b) + { + // By default do nothing; LRU maps needs to override this method + } + public void lruUpdateCallback(int i) + { + // By default do nothing; LRU maps needs to override this method + } + + public boolean disableLruUpdateCallback() + { + // By default do nothing; LRU maps needs to override this method + return false; + } + + public void enableLruUpdateCallback() + { + // By default do nothing; LRU maps needs to override this method + } + + public void resetThreadLocals() + { + // By default do nothing; LRU maps needs to override this method + } + + /** + * Tell an LRU that a new entry has been created + */ + protected void lruEntryCreate(RegionEntry e) + { + // do nothing by default + } + + /** + * Tell an LRU that an existing entry has been destroyed + */ + protected void lruEntryDestroy(RegionEntry e) + { + // do nothing by default + } + + /** + * Tell an LRU that an existing entry has been modified + */ + protected void lruEntryUpdate(RegionEntry e) + { + // do nothing by default + } + + @Override + public void decTxRefCount(RegionEntry e) + { + LocalRegion lr = null; + if (_isOwnerALocalRegion()) { + lr = _getOwner(); + } + e.decRefCount(null, lr); + } + + public boolean lruLimitExceeded() { + return false; + } + + public void lruCloseStats() { + // do nothing by default + } + + public void lruEntryFaultIn(LRUEntry entry) { + // do nothing by default + } + + /** + * Process an incoming version tag for concurrent operation detection. + * This must be done before modifying the region entry. + * @param re the entry that is to be modified + * @param event the modification to the entry + * @throws InvalidDeltaException if the event contains a delta that cannot be applied + * @throws ConcurrentCacheModificationException if the event is in conflict + * with a previously applied change + */ + private void processVersionTag(RegionEntry re, EntryEventImpl event) { + if (re.getVersionStamp() != null) { + re.getVersionStamp().processVersionTag(event); + + // during initialization we record version tag info to detect ops the + // image provider hasn't seen + VersionTag tag = event.getVersionTag(); + if (tag != null && !event.getRegion().isInitialized()) { + ImageState is = event.getRegion().getImageState(); + if (is != null && !event.getRegion().isUsedForPartitionedRegionBucket()) { + if (logger.isTraceEnabled()) { + logger.trace("recording version tag in image state: {}", tag); + } + is.addVersionTag(event.getKey(), tag); + } + } + } + } + + private void processVersionTagForGII(RegionEntry re, LocalRegion owner, VersionTag entryVersion, boolean isTombstone, InternalDistributedMember sender, boolean checkConflicts) { + + re.getVersionStamp().processVersionTag(_getOwner(), entryVersion, isTombstone, false, owner.getMyId(), sender, checkConflicts); + } + + public void copyRecoveredEntries(RegionMap rm) { + //We need to sort the tombstones before scheduling them, + //so that they will be in the correct order. + OrderedTombstoneMap tombstones = new OrderedTombstoneMap(); + if (rm != null) { + CustomEntryConcurrentHashMap other = ((AbstractRegionMap)rm)._getMap(); + Iterator> it = other + .entrySetWithReusableEntries().iterator(); + while (it.hasNext()) { + Map.Entry me = it.next(); + it.remove(); // This removes the RegionEntry from "rm" but it does not decrement its refcount to an offheap value. + RegionEntry oldRe = (RegionEntry)me.getValue(); + Object key = me.getKey(); + + @Retained @Released Object value = oldRe._getValueRetain((RegionEntryContext) ((AbstractRegionMap) rm)._getOwnerObject(), true); + + try { + if (value == Token.NOT_AVAILABLE) { + // fix for bug 43993 + value = null; + } + if (value == Token.TOMBSTONE && !_getOwner().getConcurrencyChecksEnabled()) { + continue; + } + RegionEntry newRe = getEntryFactory().createEntry((RegionEntryContext) _getOwnerObject(), key, value); + copyRecoveredEntry(oldRe, newRe); + // newRe is now in this._getMap(). + if (newRe.isTombstone()) { + VersionTag tag = newRe.getVersionStamp().asVersionTag(); + tombstones.put(tag, newRe); + } + _getOwner().updateSizeOnCreate(key, _getOwner().calculateRegionEntryValueSize(newRe)); + incEntryCount(1); + lruEntryUpdate(newRe); + } finally { + if (OffHeapHelper.release(value)) { + ((OffHeapRegionEntry)oldRe).release(); + } + } + lruUpdateCallback(); + } + } else { + incEntryCount(size()); + for (Iterator iter = regionEntries().iterator(); iter.hasNext(); ) { + RegionEntry re = iter.next(); + if (re.isTombstone()) { + if (re.getVersionStamp() == null) { // bug #50992 - recovery from versioned to non-versioned + incEntryCount(-1); + iter.remove(); + continue; + } else { + tombstones.put(re.getVersionStamp().asVersionTag(), re); + } + } + _getOwner().updateSizeOnCreate(re.getKey(), _getOwner().calculateRegionEntryValueSize(re)); + } + // Since lru was not being done during recovery call it now. + lruUpdateCallback(); + } + + //Schedule all of the tombstones, now that we have sorted them + Map.Entry entry; + while((entry = tombstones.take()) != null) { + // refresh the tombstone so it doesn't time out too soon + _getOwner().scheduleTombstone(entry.getValue(), entry.getKey()); + } + + } + + protected void copyRecoveredEntry(RegionEntry oldRe, RegionEntry newRe) { + if(newRe.getVersionStamp() != null) { + newRe.getVersionStamp().setMemberID(oldRe.getVersionStamp().getMemberID()); + newRe.getVersionStamp().setVersions(oldRe.getVersionStamp().asVersionTag()); + } + + if (newRe instanceof AbstractOplogDiskRegionEntry) { + ((AbstractOplogDiskRegionEntry)newRe).setDiskId(oldRe); + _getOwner().getDiskRegion().replaceIncompatibleEntry((DiskEntry) oldRe, (DiskEntry) newRe); + } + _getMap().put(newRe.getKey(), newRe); + } + + @Retained // Region entry may contain an off-heap value + public final RegionEntry initRecoveredEntry(Object key, DiskEntry.RecoveredEntry value) { + boolean needsCallback = false; + @Retained RegionEntry newRe = getEntryFactory().createEntry((RegionEntryContext) _getOwnerObject(), key, value); + synchronized (newRe) { + if (value.getVersionTag()!=null && newRe.getVersionStamp()!=null) { + newRe.getVersionStamp().setVersions(value.getVersionTag()); + } + RegionEntry oldRe = putEntryIfAbsent(key, newRe); + while (oldRe != null) { + synchronized (oldRe) { + if (oldRe.isRemoved() && !oldRe.isTombstone()) { + oldRe = putEntryIfAbsent(key, newRe); + if (oldRe != null) { + if (_isOwnerALocalRegion()) { + _getOwner().getCachePerfStats().incRetries(); + } + } + } + /* + * Entry already exists which should be impossible. + * Free the current entry (if off-heap) and + * throw an exception. + */ + else { + if (newRe instanceof OffHeapRegionEntry) { + ((OffHeapRegionEntry) newRe).release(); + } + + throw new IllegalStateException("Could not recover entry for key " + key + ". The entry already exists!"); + } + } // synchronized + } + if (_isOwnerALocalRegion()) { + _getOwner().updateSizeOnCreate(key, _getOwner().calculateRegionEntryValueSize(newRe)); + if (newRe.isTombstone()) { + // refresh the tombstone so it doesn't time out too soon + _getOwner().scheduleTombstone(newRe, newRe.getVersionStamp().asVersionTag()); + } + + incEntryCount(1); // we are creating an entry that was recovered from disk including tombstone + } + lruEntryUpdate(newRe); + needsCallback = true; + } + if (needsCallback) { + lruUpdateCallback(); + } + + EntryLogger.logRecovery(_getOwnerObject(), key, value); + + return newRe; + } + + public final RegionEntry updateRecoveredEntry(Object key, DiskEntry.RecoveredEntry value) { + boolean needsCallback = false; + RegionEntry re = getEntry(key); + if (re == null) { + return null; + } + synchronized (re) { + if (re.isRemoved() && !re.isTombstone()) { + return null; + } + if (value.getVersionTag()!=null && re.getVersionStamp()!=null) { + re.getVersionStamp().setVersions(value.getVersionTag()); + } + try { + if (_isOwnerALocalRegion()) { + if (re.isTombstone()) { + // when a tombstone is to be overwritten, unschedule it first + _getOwner().unscheduleTombstone(re); + } + final int oldSize = _getOwner().calculateRegionEntryValueSize(re); + re.setValue(_getOwner(), value); // OFFHEAP no need to call AbstractRegionMap.prepareValueForCache because setValue is overridden for disk and that code takes apart value (RecoveredEntry) and prepares its nested value for the cache + if (re.isTombstone()) { + _getOwner().scheduleTombstone(re, re.getVersionStamp().asVersionTag()); + } + _getOwner().updateSizeOnPut(key, oldSize, _getOwner().calculateRegionEntryValueSize(re)); + } else { + DiskEntry.Helper.updateRecoveredEntry((PlaceHolderDiskRegion)_getOwnerObject(), + (DiskEntry)re, value, (RegionEntryContext) _getOwnerObject()); + } + } catch (RegionClearedException rce) { + throw new IllegalStateException("RegionClearedException should never happen in this context", rce); + } + lruEntryUpdate(re); + needsCallback = true; + } + if (needsCallback) { + lruUpdateCallback(); + } + + EntryLogger.logRecovery(_getOwnerObject(), key, value); + + return re; + } + + public final boolean initialImagePut(final Object key, + final long lastModified, + Object newValue, + final boolean wasRecovered, + boolean deferLRUCallback, + VersionTag entryVersion, InternalDistributedMember sender, boolean isSynchronizing) + { + boolean result = false; + boolean done = false; + boolean cleared = false; + final LocalRegion owner = _getOwner(); + + if (newValue == Token.TOMBSTONE && !owner.getConcurrencyChecksEnabled()) { + return false; + } + + if (owner instanceof HARegion && newValue instanceof CachedDeserializable) { + Object actualVal = ((CachedDeserializable)newValue) + .getDeserializedValue(null, null); + if (actualVal instanceof HAEventWrapper) { + HAEventWrapper haEventWrapper = (HAEventWrapper)actualVal; + // Key was removed at sender side so not putting it into the HARegion + if (haEventWrapper.getClientUpdateMessage() == null) { + return false; + } + // Getting the instance from singleton CCN..This assumes only one bridge + // server in the VM + HAContainerWrapper haContainer = (HAContainerWrapper)CacheClientNotifier + .getInstance().getHaContainer(); + Map.Entry entry = null; + HAEventWrapper original = null; + synchronized (haContainer) { + entry = (Map.Entry)haContainer.getEntry(haEventWrapper); + if (entry != null) { + original = (HAEventWrapper)entry.getKey(); + original.incAndGetReferenceCount(); + } + else { + haEventWrapper.incAndGetReferenceCount(); + haEventWrapper.setHAContainer(haContainer); + haContainer.put(haEventWrapper, haEventWrapper + .getClientUpdateMessage()); + haEventWrapper.setClientUpdateMessage(null); + haEventWrapper.setIsRefFromHAContainer(true); + } + } + if (entry != null) { + HARegionQueue.addClientCQsAndInterestList(entry, haEventWrapper, + haContainer, owner.getName()); + haEventWrapper.setClientUpdateMessage(null); + newValue = CachedDeserializableFactory.create(original, + ((CachedDeserializable)newValue).getSizeInBytes()); + } + } + } + + try { + RegionEntry newRe = getEntryFactory().createEntry(owner, key, + Token.REMOVED_PHASE1); + EntryEventImpl event = null; + + @Retained @Released Object oldValue = null; + + try { + RegionEntry oldRe = null; + synchronized (newRe) { + try { + oldRe = putEntryIfAbsent(key, newRe); + while (!done && oldRe != null) { + synchronized (oldRe) { + if (oldRe.isRemovedPhase2()) { + oldRe = putEntryIfAbsent(key, newRe); + if (oldRe != null) { + owner.getCachePerfStats().incRetries(); + } + } + else { + boolean acceptedVersionTag = false; + if (entryVersion != null && owner.concurrencyChecksEnabled) { + Assert.assertTrue(entryVersion.getMemberID() != null, "GII entry versions must have identifiers"); + try { + boolean isTombstone = (newValue == Token.TOMBSTONE); + // don't reschedule the tombstone if it hasn't changed + boolean isSameTombstone = oldRe.isTombstone() && isTombstone + && oldRe.getVersionStamp().asVersionTag() + .equals(entryVersion); + if (isSameTombstone) { + return true; + } + processVersionTagForGII(oldRe, owner, entryVersion, isTombstone, sender, !wasRecovered || isSynchronizing); + acceptedVersionTag = true; + } catch (ConcurrentCacheModificationException e) { + return false; + } + } + final boolean oldIsTombstone = oldRe.isTombstone(); + final int oldSize = owner.calculateRegionEntryValueSize(oldRe); + // Neeraj: The below if block is to handle the special + // scenario witnessed in SqlFabric for now. (Though its + // a general scenario). The scenario is that during GII + // it is possible that updates start coming before the + // base value reaches through GII. In that scenario the deltas + // for that particular key is kept on being added to a list + // of deltas. When the base value arrives through this path + // of GII the oldValue will be that list of deltas. When the + // base values arrives the deltas are applied one by one on that list. + // The same scenario is applicable for GemFire also but the below + // code will be executed only in case of sqlfabric now. Probably + // the code can be made more generic for both SQL Fabric and GemFire. + if (indexUpdater != null) { + oldValue = oldRe.getValueInVM(owner); // OFFHEAP: ListOfDeltas + if (oldValue instanceof ListOfDeltas) { + // apply the deltas on this new value. update index + // Make a new event object + // make it an insert operation + LocalRegion rgn = owner; + if (owner instanceof BucketRegion) { + rgn = ((BucketRegion)owner).getPartitionedRegion(); + } + event = EntryEventImpl.create(rgn, Operation.CREATE, key, null, + Boolean.TRUE /* indicate that GII is in progress */, + false, null); + try { + event.setOldValue(newValue); + if (logger.isDebugEnabled()) { + logger.debug("initialImagePut: received base value for list of deltas; event: {}", event); + } + ((ListOfDeltas)oldValue).apply(event); + Object preparedNewValue =oldRe.prepareValueForCache(owner, + event.getNewValueAsOffHeapDeserializedOrRaw(), true); + if(preparedNewValue instanceof Chunk) { + event.setNewValue(preparedNewValue); + } + oldRe.setValue(owner, preparedNewValue, event); + //event.setNewValue(event.getOldValue()); + event.setOldValue(null); + try { + indexUpdater.onEvent(owner, event, oldRe); + lruEntryUpdate(oldRe); + owner.updateSizeOnPut(key, oldSize, owner.calculateRegionEntryValueSize(oldRe)); + EntryLogger.logInitialImagePut(_getOwnerObject(), key, newValue); + result = true; + done = true; + break; + } finally { + // this must be done within the oldRe sync block + indexUpdater.postEvent(owner, event, oldRe, done); + } + } finally { + if (event != null) { + event.release(); + event = null; + } + } + } + } + try { + if (indexUpdater != null) { + event = EntryEventImpl.create(owner, Operation.CREATE, key, + newValue, + Boolean.TRUE /* indicate that GII is in progress */, + false, null); + indexUpdater.onEvent(owner, event, oldRe); + } + result = oldRe.initialImagePut(owner, lastModified, newValue, wasRecovered, acceptedVersionTag); + if (result) { + if (oldIsTombstone) { + owner.unscheduleTombstone(oldRe); + if (newValue != Token.TOMBSTONE){ + lruEntryCreate(oldRe); + } else { + lruEntryUpdate(oldRe); + } + } + if (newValue == Token.TOMBSTONE) { + if (owner.getServerProxy() == null && + owner.getVersionVector().isTombstoneTooOld(entryVersion.getMemberID(), entryVersion.getRegionVersion())) { + // the received tombstone has already been reaped, so don't retain it + removeTombstone(oldRe, entryVersion, false, false); + return false; + } else { + owner.scheduleTombstone(oldRe, entryVersion); + lruEntryDestroy(oldRe); + } + } else { + int newSize = owner.calculateRegionEntryValueSize(oldRe); + if(!oldIsTombstone) { + owner.updateSizeOnPut(key, oldSize, newSize); + } else { + owner.updateSizeOnCreate(key, newSize); + } + EntryLogger.logInitialImagePut(_getOwnerObject(), key, newValue); + } + } + if (owner.getIndexManager() != null) { + owner.getIndexManager().updateIndexes(oldRe, oldRe.isRemoved() ? IndexManager.ADD_ENTRY : IndexManager.UPDATE_ENTRY, + oldRe.isRemoved() ? IndexProtocol.OTHER_OP : IndexProtocol.AFTER_UPDATE_OP); + } + done = true; + } finally { + if (indexUpdater != null) { + indexUpdater.postEvent(owner, event, oldRe, result); + } + if (event != null) { + event.release(); + event = null; + } + } + } + } + } + if (!done) { + boolean versionTagAccepted = false; + if (entryVersion != null && owner.concurrencyChecksEnabled) { + Assert.assertTrue(entryVersion.getMemberID() != null, "GII entry versions must have identifiers"); + try { + boolean isTombstone = (newValue == Token.TOMBSTONE); + processVersionTagForGII(newRe, owner, entryVersion, isTombstone, sender, !wasRecovered || isSynchronizing); + versionTagAccepted = true; + } catch (ConcurrentCacheModificationException e) { + return false; + } + } + result = newRe.initialImageInit(owner, lastModified, newValue, + true, wasRecovered, versionTagAccepted); + try { + if (result) { + if (indexUpdater != null) { + event = EntryEventImpl.create(owner, Operation.CREATE, key, + newValue, + Boolean.TRUE /* indicate that GII is in progress */, + false, null); + indexUpdater.onEvent(owner, event, newRe); + } + if (newValue == Token.TOMBSTONE) { + owner.scheduleTombstone(newRe, entryVersion); + } else { + owner.updateSizeOnCreate(key, owner.calculateRegionEntryValueSize(newRe)); + EntryLogger.logInitialImagePut(_getOwnerObject(), key, newValue); + lruEntryCreate(newRe); + } + incEntryCount(1); + } + //Update local indexes + if (owner.getIndexManager() != null) { + owner.getIndexManager().updateIndexes(newRe, newRe.isRemoved() ? IndexManager.REMOVE_ENTRY : IndexManager.UPDATE_ENTRY, + newRe.isRemoved() ? IndexProtocol.OTHER_OP : IndexProtocol.AFTER_UPDATE_OP); + } + done = true; + } finally { + if (result && indexUpdater != null) { + indexUpdater.postEvent(owner, event, newRe, done); + } + if (event != null) { + event.release(); + event = null; + } + } + } + } + finally { + if (done && result) { + initialImagePutEntry(newRe); + } + if (!done) { + removeEntry(key, newRe, false); + if (owner.getIndexManager() != null) { + owner.getIndexManager().updateIndexes(newRe, IndexManager.REMOVE_ENTRY, IndexProtocol.OTHER_OP); + } + } + } + } // synchronized + } finally { + if (event != null) event.release(); + OffHeapHelper.release(oldValue); + } + } catch(RegionClearedException rce) { + //Asif: do not issue any sort of callbacks + done = false; + cleared= true; + }catch(QueryException qe) { + done = false; + cleared= true; + } + finally { + if (done && !deferLRUCallback) { + lruUpdateCallback(); + } + else if (!cleared) { + resetThreadLocals(); + } + } + return result; + } + + protected void initialImagePutEntry(RegionEntry newRe) { + } + + boolean confirmEvictionDestroy(RegionEntry re) + { + /* We arn't in an LRU context, and should never get here */ + Assert.assertTrue(false, + "Not an LRU region, can not confirm LRU eviction operation"); + return true; + } + + public final boolean destroy(EntryEventImpl event, + boolean inTokenMode, + boolean duringRI, + boolean cacheWrite, + boolean isEviction, + Object expectedOldValue, + boolean removeRecoveredEntry) + throws CacheWriterException, EntryNotFoundException, TimeoutException { + + final LocalRegion owner = _getOwner(); + + if (owner == null) { + Assert.assertTrue(false, "The owner for RegionMap " + this // "fix" for bug 32440 + + " is null for event " + event); + } + + boolean retry = true; + + while (retry) { + retry = false; + + boolean opCompleted = false; + boolean doPart3 = false; + + // We need to acquire the region entry while holding the lock to avoid #45620. + // However, we also want to release the lock before distribution to prevent + // potential deadlocks. The outer try/finally ensures that the lock will be + // released without fail. I'm avoiding indenting just to preserve the ability + // to track diffs since the code is fairly complex. + boolean doUnlock = true; + lockForCacheModification(owner, event); + try { + + + RegionEntry re = getOrCreateRegionEntry(owner, event, Token.REMOVED_PHASE1, null, true, true); + RegionEntry tombstone = null; + boolean haveTombstone = false; + /* + * Execute the test hook runnable inline (not threaded) if it is not null. + */ + if(null != testHookRunnableFor48182) { + testHookRunnableFor48182.run(); + } + + try { + if (logger.isTraceEnabled(LogMarker.LRU_TOMBSTONE_COUNT) && !(owner instanceof HARegion)) { + logger.trace(LogMarker.LRU_TOMBSTONE_COUNT, + "ARM.destroy() inTokenMode={}; duringRI={}; riLocalDestroy={}; withRepl={}; fromServer={}; concurrencyEnabled={}; isOriginRemote={}; isEviction={}; operation={}; re={}", + inTokenMode, duringRI, event.isFromRILocalDestroy(), owner.dataPolicy.withReplication(), event.isFromServer(), + owner.concurrencyChecksEnabled, event.isOriginRemote(), isEviction, event.getOperation(), re); + } + if (event.isFromRILocalDestroy()) { + // for RI local-destroy we don't want to keep tombstones. + // In order to simplify things we just set this recovery + // flag to true to force the entry to be removed + removeRecoveredEntry = true; + } + // the logic in this method is already very involved, and adding tombstone + // permutations to (re != null) greatly complicates it. So, we check + // for a tombstone here and, if found, pretend for a bit that the entry is null + if (re != null && re.isTombstone() && !removeRecoveredEntry) { + tombstone = re; + haveTombstone = true; + re = null; + } + IndexManager oqlIndexManager = owner.getIndexManager() ; + if (re == null) { + // we need to create an entry if in token mode or if we've received + // a destroy from a peer or WAN gateway and we need to retain version + // information for concurrency checks + boolean retainForConcurrency = (!haveTombstone + && (owner.dataPolicy.withReplication() || event.isFromServer()) + && owner.concurrencyChecksEnabled + && (event.isOriginRemote() /* destroy received from other must create tombstone */ + || event.isFromWANAndVersioned() /* wan event must create a tombstone */ + || event.isBridgeEvent())); /* event from client must create a tombstone so client has a version # */ + if (inTokenMode + || retainForConcurrency) { + // removeRecoveredEntry should be false in this case + RegionEntry newRe = getEntryFactory().createEntry(owner, + event.getKey(), + Token.REMOVED_PHASE1); + // Fix for Bug #44431. We do NOT want to update the region and wait + // later for index INIT as region.clear() can cause inconsistency if + // happened in parallel as it also does index INIT. + if (oqlIndexManager != null) { + oqlIndexManager.waitForIndexInit(); + } + try { + synchronized (newRe) { + RegionEntry oldRe = putEntryIfAbsent(event.getKey(), newRe); + while (!opCompleted && oldRe != null) { + synchronized (oldRe) { + if (oldRe.isRemovedPhase2()) { + oldRe = putEntryIfAbsent(event.getKey(), newRe); + if (oldRe != null) { + owner.getCachePerfStats().incRetries(); + } + } else { + event.setRegionEntry(oldRe); + + // Last transaction related eviction check. This should + // prevent + // transaction conflict (caused by eviction) when the entry + // is being added to transaction state. + if (isEviction) { + if (!confirmEvictionDestroy(oldRe) || (owner.getEvictionCriteria() != null && !owner.getEvictionCriteria().doEvict(event))) { + opCompleted = false; + return opCompleted; + } + } + try { + //if concurrency checks are enabled, destroy will + //set the version tag + boolean destroyed = destroyEntry(oldRe, event, inTokenMode, cacheWrite, expectedOldValue, false, removeRecoveredEntry); + if (destroyed) { + if (retainForConcurrency) { + owner.basicDestroyBeforeRemoval(oldRe, event); + } + owner.basicDestroyPart2(oldRe, event, inTokenMode, + false /* conflict with clear */, duringRI, true); + lruEntryDestroy(oldRe); + doPart3 = true; + } + } + catch (RegionClearedException rce) { + // Ignore. The exception will ensure that we do not update + // the LRU List + owner.basicDestroyPart2(oldRe, event, inTokenMode, + true/* conflict with clear */, duringRI, true); + doPart3 = true; + } catch (ConcurrentCacheModificationException ccme) { + VersionTag tag = event.getVersionTag(); + if (tag != null && tag.isTimeStampUpdated()) { + // Notify gateways of new time-stamp. + owner.notifyTimestampsToGateways(event); + } + throw ccme; + } + re = oldRe; + opCompleted = true; + } + } // synchronized oldRe + } // while + if (!opCompleted) { + // The following try has a finally that cleans up the newRe. + // This is only needed if newRe was added to the map which only + // happens if we didn't get completed with oldRe in the above while loop. + try { + re = newRe; + event.setRegionEntry(newRe); + + try { + //if concurrency checks are enabled, destroy will + //set the version tag + if (isEviction) { + opCompleted = false; + return opCompleted; + } + opCompleted = destroyEntry(newRe, event, inTokenMode, cacheWrite, expectedOldValue, true, removeRecoveredEntry); + if (opCompleted) { + // This is a new entry that was created because we are in + // token mode or are accepting a destroy operation by adding + // a tombstone. There is no oldValue, so we don't need to + // call updateSizeOnRemove + // owner.recordEvent(event); + event.setIsRedestroyedEntry(true); // native clients need to know if the entry didn't exist + if (retainForConcurrency) { + owner.basicDestroyBeforeRemoval(oldRe, event); + } + owner.basicDestroyPart2(newRe, event, inTokenMode, + false /* conflict with clear */, duringRI, true); + doPart3 = true; + } + } + catch (RegionClearedException rce) { + // Ignore. The exception will ensure that we do not update + // the LRU List + opCompleted = true; + EntryLogger.logDestroy(event); + owner.basicDestroyPart2(newRe, event, inTokenMode, true /* conflict with clear*/, duringRI, true); + doPart3 = true; + } catch (ConcurrentCacheModificationException ccme) { + VersionTag tag = event.getVersionTag(); + if (tag != null && tag.isTimeStampUpdated()) { + // Notify gateways of new time-stamp. + owner.notifyTimestampsToGateways(event); + } + throw ccme; + } + // Note no need for LRU work since the entry is destroyed + // and will be removed when gii completes + } finally { + if (!opCompleted && !haveTombstone /* to fix bug 51583 do this for all operations */ ) { + removeEntry(event.getKey(), newRe, false); + } + if (!opCompleted && isEviction) { + removeEntry(event.getKey(), newRe, false); + } + } + } // !opCompleted + } // synchronized newRe + } finally { + if (oqlIndexManager != null) { + oqlIndexManager.countDownIndexUpdaters(); + } + } + } // inTokenMode or tombstone creation + else { + if (!isEviction || owner.concurrencyChecksEnabled) { + // The following ensures that there is not a concurrent operation + // on the entry and leaves behind a tombstone if concurrencyChecksEnabled. + // It fixes bug #32467 by propagating the destroy to the server even though + // the entry isn't in the client + RegionEntry newRe = haveTombstone? tombstone : getEntryFactory().createEntry(owner, event.getKey(), + Token.REMOVED_PHASE1); + synchronized(newRe) { + if (haveTombstone && !tombstone.isTombstone()) { + // we have to check this again under synchronization since it may have changed + retry = true; + //retryEntry = tombstone; // leave this in place for debugging + continue; + } + re = (RegionEntry)_getMap().putIfAbsent(event.getKey(), newRe); + if (re != null && re != tombstone) { + // concurrent change - try again + retry = true; + //retryEntry = tombstone; // leave this in place for debugging + continue; + } + else if (!isEviction) { + boolean throwex = false; + EntryNotFoundException ex = null; + try { + if (!cacheWrite) { + throwex = true; + } else { + try { + if (!removeRecoveredEntry) { + throwex = !owner.bridgeWriteBeforeDestroy(event, expectedOldValue); + } + } catch (EntryNotFoundException e) { + throwex = true; + ex = e; + } + } + if (throwex) { + if (!event.isOriginRemote() && !event.getOperation().isLocal() && + (event.isFromBridgeAndVersioned() || // if this is a replayed client event that already has a version + event.isFromWANAndVersioned())) { // or if this is a WAN event that has been applied in another system + // we must distribute these since they will update the version information in peers + if (logger.isDebugEnabled()) { + logger.debug("ARM.destroy is allowing wan/client destroy of {} to continue", event.getKey()); + } + throwex = false; + event.setIsRedestroyedEntry(true); + // Distribution of this op happens on re and re might me null here before + // distributing this destroy op. + if (re == null) { + re = newRe; + } + doPart3 = true; + } + } + if (throwex) { + if (ex == null) { + // Fix for 48182, check cache state and/or region state before sending entry not found. + // this is from the server and any exceptions will propogate to the client + owner.checkEntryNotFound(event.getKey()); + } else { + throw ex; + } + } + } finally { + // either remove the entry or leave a tombstone + try { + if (!event.isOriginRemote() && event.getVersionTag() != null && owner.concurrencyChecksEnabled) { + // this shouldn't fail since we just created the entry. + // it will either generate a tag or apply a server's version tag + processVersionTag(newRe, event); + if (doPart3) { + owner.generateAndSetVersionTag(event, newRe); + } + try { + owner.recordEvent(event); + newRe.makeTombstone(owner, event.getVersionTag()); + } catch (RegionClearedException e) { + // that's okay - when writing a tombstone into a disk, the + // region has been cleared (including this tombstone) + } + opCompleted = true; + // lruEntryCreate(newRe); + } else if (!haveTombstone) { + try { + assert newRe != tombstone; + newRe.setValue(owner, Token.REMOVED_PHASE2); + removeEntry(event.getKey(), newRe, false); + } catch (RegionClearedException e) { + // that's okay - we just need to remove the new entry + } + } else if (event.getVersionTag() != null ) { // haveTombstone - update the tombstone version info + processVersionTag(tombstone, event); + if (doPart3) { + owner.generateAndSetVersionTag(event, newRe); + } + // This is not conflict, we need to persist the tombstone again with new version tag + try { + tombstone.setValue(owner, Token.TOMBSTONE); + } catch (RegionClearedException e) { + // that's okay - when writing a tombstone into a disk, the + // region has been cleared (including this tombstone) + } + owner.recordEvent(event); + owner.rescheduleTombstone(tombstone, event.getVersionTag()); + owner.basicDestroyPart2(tombstone, event, inTokenMode, true /* conflict with clear*/, duringRI, true); + opCompleted = true; + } + } catch (ConcurrentCacheModificationException ccme) { + VersionTag tag = event.getVersionTag(); + if (tag != null && tag.isTimeStampUpdated()) { + // Notify gateways of new time-stamp. + owner.notifyTimestampsToGateways(event); + } + throw ccme; + } + } + } + } // synchronized(newRe) + } + } + } // no current entry + else { // current entry exists + if (oqlIndexManager != null) { + oqlIndexManager.waitForIndexInit(); + } + try { + synchronized (re) { + // if the entry is a tombstone and the event is from a peer or a client + // then we allow the operation to be performed so that we can update the + // version stamp. Otherwise we would retain an old version stamp and may allow + // an operation that is older than the destroy() to be applied to the cache + // Bug 45170: If removeRecoveredEntry, we treat tombstone as regular entry to be deleted + boolean createTombstoneForConflictChecks = (owner.concurrencyChecksEnabled + && (event.isOriginRemote() || event.getContext() != null || removeRecoveredEntry)); + if (!re.isRemoved() || createTombstoneForConflictChecks) { + if (re.isRemovedPhase2()) { + retry = true; + continue; + } + if (!event.isOriginRemote() && event.getOperation().isExpiration()) { + // If this expiration started locally then only do it if the RE is not being used by a tx. + if (re.isInUseByTransaction()) { + opCompleted = false; + return opCompleted; + } + } + event.setRegionEntry(re); + + // See comment above about eviction checks + if (isEviction) { + assert expectedOldValue == null; + if (!confirmEvictionDestroy(re) || (owner.getEvictionCriteria() != null && !owner.getEvictionCriteria().doEvict(event))) { + opCompleted = false; + return opCompleted; + } + } + + boolean removed = false; + try { + opCompleted = destroyEntry(re, event, inTokenMode, cacheWrite, expectedOldValue, false, removeRecoveredEntry); + if (opCompleted) { + // It is very, very important for Partitioned Regions to keep + // the entry in the map until after distribution occurs so that other + // threads performing a create on this entry wait until the destroy + // distribution is finished. + // keeping backup copies consistent. Fix for bug 35906. + // -- mthomas 07/02/2007 <-- how about that date, kinda cool eh? + owner.basicDestroyBeforeRemoval(re, event); + + // do this before basicDestroyPart2 to fix bug 31786 + if (!inTokenMode) { + if ( re.getVersionStamp() == null) { + re.removePhase2(); + removeEntry(event.getKey(), re, true, event, owner, + indexUpdater); + removed = true; + } + } + if (inTokenMode && !duringRI) { + event.inhibitCacheListenerNotification(true); + } + doPart3 = true; + owner.basicDestroyPart2(re, event, inTokenMode, false /* conflict with clear*/, duringRI, true); + // if (!re.isTombstone() || isEviction) { + lruEntryDestroy(re); + // } else { + // lruEntryUpdate(re); + // lruUpdateCallback = true; + // } + } else { + if (!inTokenMode) { + EntryLogger.logDestroy(event); + owner.recordEvent(event); + if (re.getVersionStamp() == null) { + re.removePhase2(); + removeEntry(event.getKey(), re, true, event, owner, + indexUpdater); + lruEntryDestroy(re); + } else { + if (re.isTombstone()) { + // the entry is already a tombstone, but we're destroying it + // again, so we need to reschedule the tombstone's expiration + if (event.isOriginRemote()) { + owner.rescheduleTombstone(re, re.getVersionStamp().asVersionTag()); + } + } + } + lruEntryDestroy(re); + opCompleted = true; + } + } + } + catch (RegionClearedException rce) { + // Ignore. The exception will ensure that we do not update + // the LRU List + opCompleted = true; + owner.recordEvent(event); + if (inTokenMode && !duringRI) { + event.inhibitCacheListenerNotification(true); + } + owner.basicDestroyPart2(re, event, inTokenMode, true /*conflict with clear*/, duringRI, true); + doPart3 = true; + } + finally { + if (re.isRemoved() && !re.isTombstone()) { + if (!removed) { + removeEntry(event.getKey(), re, true, event, owner, + indexUpdater); + } + } + } + } // !isRemoved + else { // already removed + if (owner.isHDFSReadWriteRegion() && re.isRemovedPhase2()) { + // For HDFS region there may be a race with eviction + // so retry the operation. fixes bug 49150 + retry = true; + continue; + } + if (re.isTombstone() && event.getVersionTag() != null) { + // if we're dealing with a tombstone and this is a remote event + // (e.g., from cache client update thread) we need to update + // the tombstone's version information + // TODO use destroyEntry() here + processVersionTag(re, event); + try { + re.makeTombstone(owner, event.getVersionTag()); + } catch (RegionClearedException e) { + // that's okay - when writing a tombstone into a disk, the + // region has been cleared (including this tombstone) + } + } + if (expectedOldValue != null) { + // if re is removed then there is no old value, so return false + return false; + } + + if (!inTokenMode && !isEviction) { + owner.checkEntryNotFound(event.getKey()); + } + } + } // synchronized re + } catch (ConcurrentCacheModificationException ccme) { + VersionTag tag = event.getVersionTag(); + if (tag != null && tag.isTimeStampUpdated()) { + // Notify gateways of new time-stamp. + owner.notifyTimestampsToGateways(event); + } + throw ccme; + } finally { + if (oqlIndexManager != null) { + oqlIndexManager.countDownIndexUpdaters(); + } + } + // No need to call lruUpdateCallback since the only lru action + // we may have taken was lruEntryDestroy. This fixes bug 31759. + + } // current entry exists + if(opCompleted) { + EntryLogger.logDestroy(event); + } + return opCompleted; + } + finally { + releaseCacheModificationLock(owner, event); + doUnlock = false; + + try { + // If concurrency conflict is there and event contains gateway version tag then + // do NOT distribute. + if (event.isConcurrencyConflict() && + (event.getVersionTag() != null && event.getVersionTag().isGatewayTag())) { + doPart3 = false; + } + // distribution and listener notification + if (doPart3) { + owner.basicDestroyPart3(re, event, inTokenMode, duringRI, true, expectedOldValue); + } + } finally { + if (opCompleted) { + if (re != null) { + owner.cancelExpiryTask(re); + } else if (tombstone != null) { + owner.cancelExpiryTask(tombstone); + } + } + } + } + + } finally { // failsafe on the read lock...see comment above + if (doUnlock) { + releaseCacheModificationLock(owner, event); + } + } + } // retry loop + return false; + } + + public final void txApplyDestroy(Object key, TransactionId txId, + TXRmtEvent txEvent, boolean inTokenMode, boolean inRI, Operation op, + EventID eventId, Object aCallbackArgument,List pendingCallbacks,FilterRoutingInfo filterRoutingInfo,ClientProxyMembershipID bridgeContext, + boolean isOriginRemote, TXEntryState txEntryState, VersionTag versionTag, long tailKey) + { + final boolean isDebugEnabled = logger.isDebugEnabled(); + + final LocalRegion owner = _getOwner(); + owner.checkBeforeEntrySync(txEvent); + + final boolean isRegionReady = !inTokenMode; + final boolean hasRemoteOrigin = !((TXId)txId).getMemberId().equals(owner.getMyId()); + boolean cbEventInPending = false; + lockForTXCacheModification(owner, versionTag); + IndexManager oqlIndexManager = owner.getIndexManager() ; + try { + RegionEntry re = getEntry(key); + if (re != null) { + // Fix for Bug #44431. We do NOT want to update the region and wait + // later for index INIT as region.clear() can cause inconsistency if + // happened in parallel as it also does index INIT. + if (oqlIndexManager != null) { + oqlIndexManager.waitForIndexInit(); + } + try { + synchronized (re) { + if (!re.isRemoved() || re.isTombstone()) { + EntryEventImpl sqlfEvent = null; + @Retained @Released Object oldValue = re.getValueInVM(owner); + try { + final int oldSize = owner.calculateRegionEntryValueSize(re); + // Create an entry event only if the calling context is + // a receipt of a TXCommitMessage AND there are callbacks installed + // for this region + boolean invokeCallbacks = shouldCreateCBEvent(owner, false/*isInvalidate*/, isRegionReady || inRI); + EntryEventImpl cbEvent = createCBEvent(owner, op, + key, null, txId, txEvent, eventId, aCallbackArgument, filterRoutingInfo, bridgeContext, txEntryState, versionTag, tailKey); + try { + + if (/* owner.isUsedForPartitionedRegionBucket() && */ + indexUpdater != null) { + sqlfEvent = cbEvent; + } else { + if (owner.isUsedForPartitionedRegionBucket()) { + txHandleWANEvent(owner, cbEvent, txEntryState); + } + cbEvent.setRegionEntry(re); + } + cbEvent.setOldValue(oldValue); + if (isDebugEnabled) { + logger.debug("txApplyDestroy cbEvent={}", cbEvent); + } + + txRemoveOldIndexEntry(Operation.DESTROY, re); + if (txEvent != null) { + txEvent.addDestroy(owner, re, re.getKey(),aCallbackArgument); + } + boolean clearOccured = false; + try { + processAndGenerateTXVersionTag(owner, cbEvent, re, txEntryState); + if (inTokenMode) { + if (oldValue == Token.TOMBSTONE) { + owner.unscheduleTombstone(re); + } + re.setValue(owner, Token.DESTROYED); + } + else { + if (!re.isTombstone()) { + if (sqlfEvent != null) { + re.removePhase1(owner, false); // fix for bug 43063 + re.removePhase2(); + removeEntry(key, re, true, sqlfEvent, owner, indexUpdater); + } else { + if (shouldPerformConcurrencyChecks(owner, cbEvent) && cbEvent.getVersionTag() != null) { + re.makeTombstone(owner, cbEvent.getVersionTag()); + } else { + re.removePhase1(owner, false); // fix for bug 43063 + re.removePhase2(); + removeEntry(key, re, false); + } + } + } else { + owner.rescheduleTombstone(re, re.getVersionStamp().asVersionTag()); + } + } + EntryLogger.logTXDestroy(_getOwnerObject(), key); + owner.updateSizeOnRemove(key, oldSize); + } + catch (RegionClearedException rce) { + clearOccured = true; + } + owner.txApplyDestroyPart2(re, re.getKey(), inTokenMode, + clearOccured /* Clear Conflciting with the operation */); + if (invokeCallbacks) { + switchEventOwnerAndOriginRemote(cbEvent, hasRemoteOrigin); + if(pendingCallbacks==null) { + owner.invokeTXCallbacks(EnumListenerEvent.AFTER_DESTROY, + cbEvent, true/*callDispatchListenerEvent*/); + } else { + pendingCallbacks.add(cbEvent); + cbEventInPending = true; + } + } + if (!clearOccured) { + lruEntryDestroy(re); + } + if (owner.concurrencyChecksEnabled && txEntryState != null && cbEvent!= null) { + txEntryState.setVersionTag(cbEvent.getVersionTag()); + } + } finally { + if (!cbEventInPending) cbEvent.release(); + } + } finally { + OffHeapHelper.release(oldValue); + } + } + } + } finally { + if (oqlIndexManager != null) { + oqlIndexManager.countDownIndexUpdaters(); + } + } + } else if (inTokenMode || owner.concurrencyChecksEnabled) { + // treating tokenMode and re == null as same, since we now want to + // generate versions and Tombstones for destroys + boolean dispatchListenerEvent = inTokenMode; + boolean opCompleted = false; + RegionEntry newRe = getEntryFactory().createEntry(owner, key, + Token.DESTROYED); + if ( oqlIndexManager != null) { + oqlIndexManager.waitForIndexInit(); + } + EntryEventImpl cbEvent = null; + try { + synchronized (newRe) { + RegionEntry oldRe = putEntryIfAbsent(key, newRe); + while (!opCompleted && oldRe != null) { + synchronized (oldRe) { + if (oldRe.isRemovedPhase2()) { + oldRe = putEntryIfAbsent(key, newRe); + if (oldRe != null) { + owner.getCachePerfStats().incRetries(); + } + } + else { + try { + boolean invokeCallbacks = shouldCreateCBEvent(owner, false, isRegionReady || inRI); + cbEvent = createCBEvent(owner, op, + key, null, txId, txEvent, eventId, aCallbackArgument, filterRoutingInfo, bridgeContext, txEntryState, versionTag, tailKey); + try { + cbEvent.setRegionEntry(oldRe); + cbEvent.setOldValue(Token.NOT_AVAILABLE); + if (isDebugEnabled) { + logger.debug("txApplyDestroy token mode cbEvent={}", cbEvent); + } + if (owner.isUsedForPartitionedRegionBucket()) { + txHandleWANEvent(owner, cbEvent, txEntryState); + } + processAndGenerateTXVersionTag(owner, cbEvent, oldRe, txEntryState); + if (invokeCallbacks) { + switchEventOwnerAndOriginRemote(cbEvent, hasRemoteOrigin); + if(pendingCallbacks==null) { + owner.invokeTXCallbacks(EnumListenerEvent.AFTER_DESTROY, + cbEvent, dispatchListenerEvent); + } else { + pendingCallbacks.add(cbEvent); + cbEventInPending = true; + } + } + int oldSize = 0; + boolean wasTombstone = oldRe.isTombstone(); + { + if (!wasTombstone) { + oldSize = owner.calculateRegionEntryValueSize(oldRe); + } + } + oldRe.setValue(owner, Token.DESTROYED); + EntryLogger.logTXDestroy(_getOwnerObject(), key); + if (wasTombstone) { + owner.unscheduleTombstone(oldRe); + } + owner.updateSizeOnRemove(oldRe.getKey(), oldSize); + owner.txApplyDestroyPart2(oldRe, oldRe.getKey(), inTokenMode, + false /* Clear Conflicting with the operation */); + lruEntryDestroy(oldRe); + } finally { + if (!cbEventInPending) cbEvent.release(); + } + } + catch (RegionClearedException rce) { + owner.txApplyDestroyPart2(oldRe, oldRe.getKey(), inTokenMode, + true /* Clear Conflicting with the operation */); + } + if (shouldPerformConcurrencyChecks(owner, cbEvent) && cbEvent.getVersionTag() != null) { + oldRe.makeTombstone(owner, cbEvent.getVersionTag()); + } else if (!inTokenMode) { + // only remove for NORMAL regions if they do not generate versions see 51781 + oldRe.removePhase1(owner, false); // fix for bug 43063 + oldRe.removePhase2(); + removeEntry(key, oldRe, false); + } + opCompleted = true; + } + } + } + if (!opCompleted) { + // already has value set to Token.DESTROYED + opCompleted = true; + boolean invokeCallbacks = shouldCreateCBEvent(owner, false, isRegionReady || inRI); + cbEvent = createCBEvent(owner, op, + key, null, txId, txEvent, eventId, aCallbackArgument, filterRoutingInfo, bridgeContext, txEntryState, versionTag, tailKey); + try { + cbEvent.setRegionEntry(newRe); + cbEvent.setOldValue(Token.NOT_AVAILABLE); + if (isDebugEnabled) { + logger.debug("txApplyDestroy token mode cbEvent={}", cbEvent); + } + if (owner.isUsedForPartitionedRegionBucket()) { + txHandleWANEvent(owner, cbEvent, txEntryState); + } + processAndGenerateTXVersionTag(owner, cbEvent, newRe, txEntryState); + if (invokeCallbacks) { + switchEventOwnerAndOriginRemote(cbEvent, hasRemoteOrigin); + if(pendingCallbacks==null) { + owner.invokeTXCallbacks(EnumListenerEvent.AFTER_DESTROY, + cbEvent, dispatchListenerEvent); + } else { + pendingCallbacks.add(cbEvent); + cbEventInPending = true; + } + } + EntryLogger.logTXDestroy(_getOwnerObject(), key); + owner.updateSizeOnCreate(newRe.getKey(), 0); + if (shouldPerformConcurrencyChecks(owner, cbEvent) && cbEvent.getVersionTag() != null) { + newRe.makeTombstone(owner, cbEvent.getVersionTag()); + } else if (!inTokenMode) { + // only remove for NORMAL regions if they do not generate versions see 51781 + newRe.removePhase1(owner, false); // fix for bug 43063 + newRe.removePhase2(); + removeEntry(key, newRe, false); + } + owner + .txApplyDestroyPart2(newRe, newRe.getKey(), inTokenMode, + false /*clearConflict*/); + // Note no need for LRU work since the entry is destroyed + // and will be removed when gii completes + } finally { + if (!cbEventInPending) cbEvent.release(); + } + } + if (owner.concurrencyChecksEnabled && txEntryState != null && cbEvent != null) { + txEntryState.setVersionTag(cbEvent.getVersionTag()); + } + } + } catch (RegionClearedException e) { + // TODO + } finally { + if (oqlIndexManager != null) { + oqlIndexManager.countDownIndexUpdaters(); + } + } + } else if (re == null) { + // Fix bug#43594 + // In cases where bucket region is re-created, it may so happen that + // the destroy is already applied on the Initial image provider, thus + // causing region entry to be absent. + // Notify clients with client events. + EntryEventImpl cbEvent = createCBEvent(owner, op, + key, null, txId, txEvent, eventId, aCallbackArgument, + filterRoutingInfo, bridgeContext, txEntryState, versionTag, tailKey); + try { + if (owner.isUsedForPartitionedRegionBucket()) { + txHandleWANEvent(owner, cbEvent, txEntryState); + } + switchEventOwnerAndOriginRemote(cbEvent, hasRemoteOrigin); + if (pendingCallbacks == null) { + owner.invokeTXCallbacks(EnumListenerEvent.AFTER_DESTROY,cbEvent,false); + } else { + pendingCallbacks.add(cbEvent); + cbEventInPending = true; + } + } finally { + if (!cbEventInPending) cbEvent.release(); + } + } + } catch( DiskAccessException dae) { + owner.handleDiskAccessException(dae); + throw dae; + } + finally { + releaseTXCacheModificationLock(owner, versionTag); + } + } + + /** + * If true then invalidates that throw EntryNotFoundException + * or that are already invalid will first call afterInvalidate on CacheListeners. + * The old value on the event passed to afterInvalidate will be null. + */ + public static boolean FORCE_INVALIDATE_EVENT = Boolean.getBoolean("gemfire.FORCE_INVALIDATE_EVENT"); + + /** + * If the FORCE_INVALIDATE_EVENT flag is true + * then invoke callbacks on the given event. + */ + void forceInvalidateEvent(EntryEventImpl event) { + if (FORCE_INVALIDATE_EVENT) { + event.invokeCallbacks(_getOwner(), false, false); + } + } + + public final boolean invalidate(EntryEventImpl event, + boolean invokeCallbacks, boolean forceNewEntry, boolean forceCallbacks) + throws EntryNotFoundException + { + final boolean isDebugEnabled = logger.isDebugEnabled(); + + final LocalRegion owner = _getOwner(); + if (owner == null) { + // "fix" for bug 32440 + Assert.assertTrue(false, "The owner for RegionMap " + this + + " is null for event " + event); + + } + boolean didInvalidate = false; + RegionEntry invalidatedRe = null; + boolean clearOccured = false; + + DiskRegion dr = owner.getDiskRegion(); + // Fix for Bug #44431. We do NOT want to update the region and wait + // later for index INIT as region.clear() can cause inconsistency if + // happened in parallel as it also does index INIT. + IndexManager oqlIndexManager = owner.getIndexManager() ; + if (oqlIndexManager != null) { + oqlIndexManager.waitForIndexInit(); + } + lockForCacheModification(owner, event); + try { + if (forceNewEntry || forceCallbacks) { + boolean opCompleted = false; + RegionEntry newRe = getEntryFactory().createEntry(owner, event.getKey(), + Token.REMOVED_PHASE1); + synchronized (newRe) { + try { + RegionEntry oldRe = putEntryIfAbsent(event.getKey(), newRe); + + while (!opCompleted && oldRe != null) { + synchronized (oldRe) { + // if the RE is in phase 2 of removal, it will really be removed + // from the map. Otherwise, we can use it here and the thread + // that is destroying the RE will see the invalidation and not + // proceed to phase 2 of removal. + if (oldRe.isRemovedPhase2()) { + oldRe = putEntryIfAbsent(event.getKey(), newRe); + if (oldRe != null) { + owner.getCachePerfStats().incRetries(); + } + } else { + opCompleted = true; + event.setRegionEntry(oldRe); + if (oldRe.isDestroyed()) { + if (isDebugEnabled) { + logger.debug("mapInvalidate: Found DESTROYED token, not invalidated; key={}", event.getKey()); + } + } else if (oldRe.isInvalid()) { + + // was already invalid, do not invoke listeners or increment stat + if (isDebugEnabled) { + logger.debug("mapInvalidate: Entry already invalid: '{}'", event.getKey()); + } + processVersionTag(oldRe, event); + try { + oldRe.setValue(owner, oldRe.getValueInVM(owner)); // OFFHEAP noop setting an already invalid to invalid; No need to call prepareValueForCache since it is an invalid token. + } catch (RegionClearedException e) { + // that's okay - when writing an invalid into a disk, the + // region has been cleared (including this token) + } + forceInvalidateEvent(event); + } else { + owner.cacheWriteBeforeInvalidate(event, invokeCallbacks, forceNewEntry); + if (owner.concurrencyChecksEnabled && event.noVersionReceivedFromServer()) { + // server did not perform the invalidation, so don't leave an invalid + // entry here + return false; + } + final int oldSize = owner.calculateRegionEntryValueSize(oldRe); + //added for cq which needs old value. rdubey + FilterProfile fp = owner.getFilterProfile(); + if (!oldRe.isRemoved() && + (fp != null && fp.getCqCount() > 0)) { + + @Retained @Released Object oldValue = oldRe.getValueInVM(owner); // OFFHEAP EntryEventImpl oldValue + + // this will not fault in the value. + try { + if (oldValue == Token.NOT_AVAILABLE){ + event.setOldValue(oldRe.getValueOnDiskOrBuffer(owner)); + } else { + event.setOldValue(oldValue); + } + } finally { + OffHeapHelper.release(oldValue); + } + } + boolean isCreate = false; + try { + if (oldRe.isRemoved()) { + processVersionTag(oldRe, event); + event.putNewEntry(owner, oldRe); + EntryLogger.logInvalidate(event); + owner.recordEvent(event); + if (!oldRe.isTombstone()) { + owner.updateSizeOnPut(event.getKey(), oldSize, event.getNewValueBucketSize()); + } else { + owner.updateSizeOnCreate(event.getKey(), event.getNewValueBucketSize()); + isCreate = true; + } + } else { + processVersionTag(oldRe, event); + event.putExistingEntry(owner, oldRe); + EntryLogger.logInvalidate(event); + owner.recordEvent(event); + owner.updateSizeOnPut(event.getKey(), oldSize, event.getNewValueBucketSize()); + } + } + catch (RegionClearedException e) { + // generate versionTag for the event + EntryLogger.logInvalidate(event); + owner.recordEvent(event); + clearOccured = true; + } + owner.basicInvalidatePart2(oldRe, event, + clearOccured /* conflict with clear */, invokeCallbacks); + if (!clearOccured) { + if (isCreate) { + lruEntryCreate(oldRe); + } else { + lruEntryUpdate(oldRe); + } + } + didInvalidate = true; + invalidatedRe = oldRe; + } + } + } // synchronized oldRe + } // while oldRe exists + + if (!opCompleted) { + if (forceNewEntry && event.isFromServer()) { + // don't invoke listeners - we didn't force new entries for + // CCU invalidations before 7.0, and listeners don't care + event.inhibitCacheListenerNotification(true); + } + event.setRegionEntry(newRe); + owner.cacheWriteBeforeInvalidate(event, invokeCallbacks, forceNewEntry); + if (!forceNewEntry && event.noVersionReceivedFromServer()) { + // server did not perform the invalidation, so don't leave an invalid + // entry here + return false; + } + try { + if (!owner.isInitialized() && owner.getDataPolicy().withReplication()) { + final int oldSize = owner.calculateRegionEntryValueSize(newRe); + invalidateEntry(event, newRe, oldSize); + } + else { + invalidateNewEntry(event, owner, newRe); + } + } + catch (RegionClearedException e) { + // TODO: deltaGII: do we even need RegionClearedException? + // generate versionTag for the event + owner.recordEvent(event); + clearOccured = true; + } + owner.basicInvalidatePart2(newRe, event, clearOccured /*conflict with clear*/, invokeCallbacks); + if (!clearOccured) { + lruEntryCreate(newRe); + incEntryCount(1); + } + opCompleted = true; + didInvalidate = true; + invalidatedRe = newRe; + // Don't leave an entry in the cache, if we + // just wanted to force the distribution and events + // for this invalidate + if (!forceNewEntry) { + removeEntry(event.getKey(), newRe, false); + } + } // !opCompleted + } catch (ConcurrentCacheModificationException ccme) { + VersionTag tag = event.getVersionTag(); + if (tag != null && tag.isTimeStampUpdated()) { + // Notify gateways of new time-stamp. + owner.notifyTimestampsToGateways(event); + } + throw ccme; + } finally { + if (!opCompleted) { + removeEntry(event.getKey(), newRe, false); + } + } + } // synchronized newRe + } // forceNewEntry + else { // !forceNewEntry + boolean retry = true; + // RegionEntry retryEntry = null; + // int retries = -1; + + while (retry) { + retry = false; + boolean entryExisted = false; + RegionEntry re = getEntry(event.getKey()); + RegionEntry tombstone = null; + boolean haveTombstone = false; + if (re != null && re.isTombstone()) { + tombstone = re; + haveTombstone = true; + re = null; + } + if (re == null) { + if (!owner.isInitialized()) { + // when GII message arrived or processed later than invalidate + // message, the entry should be created as placeholder + RegionEntry newRe = haveTombstone? tombstone : getEntryFactory().createEntry(owner, event.getKey(), + Token.INVALID); + synchronized (newRe) { + if (haveTombstone && !tombstone.isTombstone()) { + // state of the tombstone has changed so we need to retry + retry = true; + //retryEntry = tombstone; // leave this in place for debugging + continue; + } + re = putEntryIfAbsent(event.getKey(), newRe); + if (re == tombstone) { + re = null; // pretend we don't have an entry + } + } + } else if (owner.getServerProxy() != null) { + Object sync = haveTombstone? tombstone : new Object(); + synchronized(sync) { + if (haveTombstone && !tombstone.isTombstone()) { + // bug 45295: state of the tombstone has changed so we need to retry + retry = true; + //retryEntry = tombstone; // leave this in place for debugging + continue; + } + + // bug #43287 - send event to server even if it's not in the client (LRU may have evicted it) + owner.cacheWriteBeforeInvalidate(event, true, false); + if (owner.concurrencyChecksEnabled) { + if (event.getVersionTag() == null) { + // server did not perform the invalidation, so don't leave an invalid + // entry here + return false; + } else if (tombstone != null) { + processVersionTag(tombstone, event); + try { + if (!tombstone.isTombstone()) { + if (isDebugEnabled) { + logger.debug("tombstone is no longer a tombstone. {}:event={}", tombstone, event); + } + } + tombstone.setValue(owner, Token.TOMBSTONE); + } catch (RegionClearedException e) { + // that's okay - when writing a tombstone into a disk, the + // region has been cleared (including this tombstone) + } catch (ConcurrentCacheModificationException ccme) { + VersionTag tag = event.getVersionTag(); + if (tag != null && tag.isTimeStampUpdated()) { + // Notify gateways of new time-stamp. + owner.notifyTimestampsToGateways(event); + } + throw ccme; + } + // update the tombstone's version to prevent an older CCU/putAll from overwriting it + owner.rescheduleTombstone(tombstone, event.getVersionTag()); + } + } + } + entryExisted = true; + } + } + if (re != null) { + // Gester: Race condition in GII + // when adding the placeholder for invalidate entry during GII, + // if the GII got processed earlier for this entry, then do + // normal invalidate operation + synchronized (re) { + if (!event.isOriginRemote() && event.getOperation().isExpiration()) { + // If this expiration started locally then only do it if the RE is not being used by a tx. + if (re.isInUseByTransaction()) { + return false; + } + } + if (re.isTombstone() || (!re.isRemoved() && !re.isDestroyed())) { + entryExisted = true; + if (re.isInvalid()) { + // was already invalid, do not invoke listeners or increment + // stat + if (isDebugEnabled) { + logger.debug("Invalidate: Entry already invalid: '{}'", event.getKey()); + } + if (event.getVersionTag() != null && owner.getVersionVector() != null) { + owner.getVersionVector().recordVersion((InternalDistributedMember) event.getDistributedMember(), event.getVersionTag()); + } + forceInvalidateEvent(event); + } + else { // previous value not invalid + event.setRegionEntry(re); + owner.cacheWriteBeforeInvalidate(event, invokeCallbacks, forceNewEntry); + if (owner.concurrencyChecksEnabled && event.noVersionReceivedFromServer()) { + // server did not perform the invalidation, so don't leave an invalid + // entry here + if (isDebugEnabled) { + logger.debug("returning early because server did not generate a version stamp for this event:{}", event); + } + return false; + } + // in case of overflow to disk we need the old value for cqs. + if(owner.getFilterProfile().getCqCount() > 0){ + //use to be getValue and can cause dead lock rdubey. + if (re.isValueNull()) { + event.setOldValue(re.getValueOnDiskOrBuffer(owner)); + } else { + + @Retained @Released Object v = re.getValueInVM(owner); + + try { + event.setOldValue(v); // OFFHEAP escapes to EntryEventImpl oldValue + } finally { + OffHeapHelper.release(v); + } + } + } + final boolean oldWasTombstone = re.isTombstone(); + final int oldSize = _getOwner().calculateRegionEntryValueSize(re); + try { + invalidateEntry(event, re, oldSize); + } + catch (RegionClearedException rce) { + // generate versionTag for the event + EntryLogger.logInvalidate(event); + _getOwner().recordEvent(event); + clearOccured = true; + } catch (ConcurrentCacheModificationException ccme) { + VersionTag tag = event.getVersionTag(); + if (tag != null && tag.isTimeStampUpdated()) { + // Notify gateways of new time-stamp. + owner.notifyTimestampsToGateways(event); + } + throw ccme; + } + owner.basicInvalidatePart2(re, event, + clearOccured /* conflict with clear */, invokeCallbacks); + if (!clearOccured) { + if (oldWasTombstone) { + lruEntryCreate(re); + } else { + lruEntryUpdate(re); + } + } + didInvalidate = true; + invalidatedRe = re; + } // previous value not invalid + } + } // synchronized re + } // re != null + else { + // At this point, either it's not in GII mode, or the placeholder + // is in region, do nothing + } + if (!entryExisted) { + forceInvalidateEvent(event); + owner.checkEntryNotFound(event.getKey()); + } + } // while(retry) + } // !forceNewEntry + } catch( DiskAccessException dae) { + invalidatedRe = null; + didInvalidate = false; + this._getOwner().handleDiskAccessException(dae); + throw dae; + } finally { + releaseCacheModificationLock(owner, event); + if (oqlIndexManager != null) { + oqlIndexManager.countDownIndexUpdaters(); + } + if (invalidatedRe != null) { + owner.basicInvalidatePart3(invalidatedRe, event, invokeCallbacks); + } + if (didInvalidate && !clearOccured) { + try { + lruUpdateCallback(); + } catch( DiskAccessException dae) { + this._getOwner().handleDiskAccessException(dae); + throw dae; + } + } + else if (!didInvalidate){ + resetThreadLocals(); + } + } + return didInvalidate; + } + + protected void invalidateNewEntry(EntryEventImpl event, + final LocalRegion owner, RegionEntry newRe) throws RegionClearedException { + processVersionTag(newRe, event); + event.putNewEntry(owner, newRe); + owner.recordEvent(event); + owner.updateSizeOnCreate(event.getKey(), event.getNewValueBucketSize()); + } + + protected void invalidateEntry(EntryEventImpl event, RegionEntry re, + int oldSize) throws RegionClearedException { + processVersionTag(re, event); + event.putExistingEntry(_getOwner(), re); + EntryLogger.logInvalidate(event); + _getOwner().recordEvent(event); + _getOwner().updateSizeOnPut(event.getKey(), oldSize, event.getNewValueBucketSize()); + } + + + /* (non-Javadoc) + * @see com.gemstone.gemfire.internal.cache.RegionMap#updateEntryVersion(com.gemstone.gemfire.internal.cache.EntryEventImpl) + */ + @Override + public void updateEntryVersion(EntryEventImpl event) throws EntryNotFoundException { + + final LocalRegion owner = _getOwner(); + if (owner == null) { + // "fix" for bug 32440 + Assert.assertTrue(false, "The owner for RegionMap " + this + + " is null for event " + event); + + } + + DiskRegion dr = owner.getDiskRegion(); + if (dr != null) { + dr.setClearCountReference(); + } + + lockForCacheModification(owner, event); + + try { + RegionEntry re = getEntry(event.getKey()); + + boolean entryExisted = false; + + if (re != null) { + // process version tag + synchronized (re) { + + try { + if (re.isTombstone() + || (!re.isRemoved() && !re.isDestroyed())) { + entryExisted = true; + } + processVersionTag(re, event); + owner.generateAndSetVersionTag(event, re); + EntryLogger.logUpdateEntryVersion(event); + _getOwner().recordEvent(event); + } catch (ConcurrentCacheModificationException ccme) { + // Do nothing. + } + + } + } + if (!entryExisted) { + owner.checkEntryNotFound(event.getKey()); + } + } catch( DiskAccessException dae) { + this._getOwner().handleDiskAccessException(dae); + throw dae; + } finally { + releaseCacheModificationLock(owner, event); + if (dr != null) { + dr.removeClearCountReference(); + } + } + } + + public final void txApplyInvalidate(Object key, Object newValue, boolean didDestroy, + TransactionId txId, TXRmtEvent txEvent, boolean localOp, + EventID eventId, Object aCallbackArgument,List pendingCallbacks,FilterRoutingInfo filterRoutingInfo,ClientProxyMembershipID bridgeContext, TXEntryState txEntryState, VersionTag versionTag, long tailKey) + { +// boolean didInvalidate = false; + final LocalRegion owner = _getOwner(); + owner.checkBeforeEntrySync(txEvent); + + EntryEventImpl cbEvent = null; + boolean forceNewEntry = !owner.isInitialized() && owner.isAllEvents(); + + final boolean hasRemoteOrigin = !((TXId)txId).getMemberId().equals(owner.getMyId()); + DiskRegion dr = owner.getDiskRegion(); + // Fix for Bug #44431. We do NOT want to update the region and wait + // later for index INIT as region.clear() can cause inconsistency if + // happened in parallel as it also does index INIT. + IndexManager oqlIndexManager = owner.getIndexManager() ; + if (oqlIndexManager != null) { + oqlIndexManager.waitForIndexInit(); + } + lockForTXCacheModification(owner, versionTag); + try { + if (forceNewEntry) { + boolean opCompleted = false; + RegionEntry newRe = getEntryFactory().createEntry(owner, key, + Token.REMOVED_PHASE1); + synchronized (newRe) { + try { + RegionEntry oldRe = putEntryIfAbsent(key, newRe); + while (!opCompleted && oldRe != null) { + synchronized (oldRe) { + if (oldRe.isRemovedPhase2()) { + oldRe = putEntryIfAbsent(key, newRe); + if (oldRe != null) { + owner.getCachePerfStats().incRetries(); + } + } + else { + opCompleted = true; + final boolean oldWasTombstone = oldRe.isTombstone(); + final int oldSize = owner.calculateRegionEntryValueSize(oldRe); + Object oldValue = oldRe.getValueInVM(owner); // OFFHEAP eei + try { + // Create an entry event only if the calling context is + // a receipt of a TXCommitMessage AND there are callbacks + // installed + // for this region + boolean invokeCallbacks = shouldCreateCBEvent(owner, true, owner.isInitialized()); + boolean cbEventInPending = false; + cbEvent = createCBEvent(owner, + localOp ? Operation.LOCAL_INVALIDATE : Operation.INVALIDATE, + key, newValue, txId, txEvent, eventId, aCallbackArgument, filterRoutingInfo, bridgeContext, txEntryState, versionTag, tailKey); + try { + cbEvent.setRegionEntry(oldRe); + cbEvent.setOldValue(oldValue); + if (logger.isDebugEnabled()) { + logger.debug("txApplyInvalidate cbEvent={}", cbEvent); + } + + txRemoveOldIndexEntry(Operation.INVALIDATE, oldRe); + if (didDestroy) { + oldRe.txDidDestroy(owner.cacheTimeMillis()); + } + if (txEvent != null) { + txEvent.addInvalidate(owner, oldRe, oldRe.getKey(), + newValue,aCallbackArgument); + } + oldRe.setValueResultOfSearch(false); + processAndGenerateTXVersionTag(owner, cbEvent, oldRe, txEntryState); + boolean clearOccured = false; + try { + oldRe.setValue(owner, oldRe.prepareValueForCache(owner, newValue, true)); + EntryLogger.logTXInvalidate(_getOwnerObject(), key); + owner.updateSizeOnPut(key, oldSize, 0); + if (oldWasTombstone) { + owner.unscheduleTombstone(oldRe); + } + } + catch (RegionClearedException rce) { + clearOccured = true; + } + owner.txApplyInvalidatePart2(oldRe, oldRe.getKey(), + didDestroy, true, clearOccured); + // didInvalidate = true; + if (invokeCallbacks) { + switchEventOwnerAndOriginRemote(cbEvent, hasRemoteOrigin); + if(pendingCallbacks==null) { + owner.invokeTXCallbacks( + EnumListenerEvent.AFTER_INVALIDATE, cbEvent, + true/*callDispatchListenerEvent*/); + } else { + pendingCallbacks.add(cbEvent); + cbEventInPending = true; + } + } + if (!clearOccured) { + lruEntryUpdate(oldRe); + } + if (shouldPerformConcurrencyChecks(owner, cbEvent) && txEntryState != null) { + txEntryState.setVersionTag(cbEvent.getVersionTag()); + } + } finally { + if (!cbEventInPending) cbEvent.release(); + } + } finally { + OffHeapHelper.release(oldValue); + } + } + } + } + if (!opCompleted) { + boolean invokeCallbacks = shouldCreateCBEvent( owner, true /* isInvalidate */, owner.isInitialized()); + boolean cbEventInPending = false; + cbEvent = createCBEvent(owner, + localOp ? Operation.LOCAL_INVALIDATE : Operation.INVALIDATE, + key, newValue, txId, txEvent, eventId, aCallbackArgument, filterRoutingInfo, bridgeContext, txEntryState, versionTag, tailKey); + try { + cbEvent.setRegionEntry(newRe); + txRemoveOldIndexEntry(Operation.INVALIDATE, newRe); + newRe.setValueResultOfSearch(false); + boolean clearOccured = false; + try { + processAndGenerateTXVersionTag(owner, cbEvent, newRe, txEntryState); + newRe.setValue(owner, newRe.prepareValueForCache(owner, newValue, true)); + EntryLogger.logTXInvalidate(_getOwnerObject(), key); + owner.updateSizeOnCreate(newRe.getKey(), 0);//we are putting in a new invalidated entry + } + catch (RegionClearedException rce) { + clearOccured = true; + } + owner.txApplyInvalidatePart2(newRe, newRe.getKey(), didDestroy, + true, clearOccured); + + if (invokeCallbacks) { + switchEventOwnerAndOriginRemote(cbEvent, hasRemoteOrigin); + if(pendingCallbacks==null) { + owner.invokeTXCallbacks( + EnumListenerEvent.AFTER_INVALIDATE, cbEvent, + true/*callDispatchListenerEvent*/); + } else { + pendingCallbacks.add(cbEvent); + cbEventInPending = true; + } + } + opCompleted = true; + if (!clearOccured) { + lruEntryCreate(newRe); + incEntryCount(1); + } + if (shouldPerformConcurrencyChecks(owner, cbEvent) && txEntryState != null) { + txEntryState.setVersionTag(cbEvent.getVersionTag()); + } + } finally { + if (!cbEventInPending) cbEvent.release(); + } + } + } + finally { + if (!opCompleted) { + removeEntry(key, newRe, false); + } + } + } + } + else { /* !forceNewEntry */ + RegionEntry re = getEntry(key); + if (re != null) { + synchronized (re) { + { + final int oldSize = owner.calculateRegionEntryValueSize(re); + boolean wasTombstone = re.isTombstone(); + Object oldValue = re.getValueInVM(owner); // OFFHEAP eei + // Create an entry event only if the calling context is + // a receipt of a TXCommitMessage AND there are callbacks + // installed + // for this region + boolean invokeCallbacks = shouldCreateCBEvent(owner, true, owner.isInitialized()); + boolean cbEventInPending = false; + cbEvent = createCBEvent(owner, + localOp ? Operation.LOCAL_INVALIDATE : Operation.INVALIDATE, + key, newValue, txId, txEvent, eventId, aCallbackArgument, filterRoutingInfo, bridgeContext, txEntryState, versionTag, tailKey); + try { + cbEvent.setRegionEntry(re); + cbEvent.setOldValue(oldValue); + txRemoveOldIndexEntry(Operation.INVALIDATE, re); + if (didDestroy) { + re.txDidDestroy(owner.cacheTimeMillis()); + } + if (txEvent != null) { + txEvent.addInvalidate(owner, re, re.getKey(), newValue,aCallbackArgument); + } + re.setValueResultOfSearch(false); + processAndGenerateTXVersionTag(owner, cbEvent, re, txEntryState); + boolean clearOccured = false; + try { + re.setValue(owner, re.prepareValueForCache(owner, newValue, true)); + EntryLogger.logTXInvalidate(_getOwnerObject(), key); + if (wasTombstone) { + owner.unscheduleTombstone(re); + } + owner.updateSizeOnPut(key, oldSize, 0); + } + catch (RegionClearedException rce) { + clearOccured = true; + } + owner.txApplyInvalidatePart2(re, re.getKey(), didDestroy, true, + clearOccured); + // didInvalidate = true; + if (invokeCallbacks) { + switchEventOwnerAndOriginRemote(cbEvent, hasRemoteOrigin); + if(pendingCallbacks==null) { + owner.invokeTXCallbacks( + EnumListenerEvent.AFTER_INVALIDATE, cbEvent, + true/*callDispatchListenerEvent*/); + } else { + pendingCallbacks.add(cbEvent); + cbEventInPending = true; + } + } + if (!clearOccured) { + lruEntryUpdate(re); + } + if (shouldPerformConcurrencyChecks(owner, cbEvent) && txEntryState != null) { + txEntryState.setVersionTag(cbEvent.getVersionTag()); + } + } finally { + if (!cbEventInPending) cbEvent.release(); + } + } + } + } else { //re == null + // Fix bug#43594 + // In cases where bucket region is re-created, it may so happen + // that the invalidate is already applied on the Initial image + // provider, thus causing region entry to be absent. + // Notify clients with client events. + boolean cbEventInPending = false; + cbEvent = createCBEvent(owner, + localOp ? Operation.LOCAL_INVALIDATE : Operation.INVALIDATE, + key, newValue, txId, txEvent, eventId, aCallbackArgument, + filterRoutingInfo, bridgeContext, txEntryState, versionTag, tailKey); + try { + switchEventOwnerAndOriginRemote(cbEvent, hasRemoteOrigin); + if (pendingCallbacks == null) { + owner.invokeTXCallbacks(EnumListenerEvent.AFTER_INVALIDATE, + cbEvent, false); + } else { + pendingCallbacks.add(cbEvent); + cbEventInPending = true; + } + } finally { + if (!cbEventInPending) cbEvent.release(); + } + } + } + }catch( DiskAccessException dae) { + owner.handleDiskAccessException(dae); + throw dae; + } + finally { + releaseTXCacheModificationLock(owner, versionTag); + if (oqlIndexManager != null) { + oqlIndexManager.countDownIndexUpdaters(); + } + } + } + + /** + * This code needs to be evaluated. It was added quickly to help PR persistence + * not to consume as much memory. + */ + public void evictValue(Object key) { + final LocalRegion owner = _getOwner(); + RegionEntry re = getEntry(key); + if (re != null) { + synchronized (re) { + if (!re.isValueNull()) { + re.setValueToNull(); + owner.getDiskRegion().incNumEntriesInVM(-1L); + owner.getDiskRegion().incNumOverflowOnDisk(1L); + if(owner instanceof BucketRegion) + { + ((BucketRegion)owner).incNumEntriesInVM(-1L); + ((BucketRegion)owner).incNumOverflowOnDisk(1L); + } + } + } + } + } + + private RegionEntry getOrCreateRegionEntry(Object ownerRegion, + EntryEventImpl event, Object value, + MapCallbackAdapter valueCreator, + boolean onlyExisting, boolean returnTombstone) { + Object key = event.getKey(); + RegionEntry retVal = null; + if (event.isFetchFromHDFS()) { + retVal = getEntry(event); + } else { + retVal = getEntryInVM(key); + } + if (onlyExisting) { + if (!returnTombstone && (retVal != null && retVal.isTombstone())) { + return null; + } + return retVal; + } + if (retVal != null) { + return retVal; + } + if (valueCreator != null) { + value = valueCreator.newValue(key, ownerRegion, value, null); + } + retVal = getEntryFactory().createEntry((RegionEntryContext) ownerRegion, key, value); + RegionEntry oldRe = putEntryIfAbsent(key, retVal); + if (oldRe != null) { + if (retVal instanceof OffHeapRegionEntry) { + ((OffHeapRegionEntry) retVal).release(); + } + return oldRe; + } + return retVal; + } + + protected static final MapCallbackAdapter + listOfDeltasCreator = new MapCallbackAdapter() { + @Override + public Object newValue(Object key, Object context, Object createParams, + final MapResult result) { + return new ListOfDeltas(4); + } + }; + + /** + * Neeraj: The below if block is to handle the special + * scenario witnessed in Sqlfabric for now. (Though its + * a general scenario). The scenario is that the updates start coming + * before the base value reaches through GII. In that scenario the updates + * essentially the deltas are added to a list and kept as oldValue in the + * map and this method returns. When through GII the actual base value arrives + * these updates or deltas are applied on it and the new value thus got is put + * in the map. + * @param event + * @param ifOld + * @return true if delta was enqued + */ + private boolean enqueDelta(EntryEventImpl event, boolean ifOld) { + final IndexUpdater indexManager = getIndexUpdater(); + LocalRegion owner = _getOwner(); + if (indexManager != null && !owner.isInitialized() && event.hasDelta()) { + boolean isOldValueDelta = true; + try { + if (ifOld) { + final Delta delta = event.getDeltaNewValue(); + RegionEntry re = getOrCreateRegionEntry(owner, event, null, + listOfDeltasCreator, false, false); + assert re != null; + synchronized (re) { + @Retained @Released Object oVal = re.getValueOffHeapOrDiskWithoutFaultIn(owner); + if (oVal != null) { + try { + if (oVal instanceof ListOfDeltas) { + if (logger.isDebugEnabled()) { + logger.debug("basicPut: adding delta to list of deltas: {}", delta); + } + ((ListOfDeltas)oVal).merge(delta); + @Retained Object newVal = ((AbstractRegionEntry)re).prepareValueForCache(owner, oVal, true); + re.setValue(owner, newVal); // TODO:KIRK:48068 prevent orphan + } + else { + isOldValueDelta = false; + } + }finally { + OffHeapHelper.release(oVal); + } + } + else { + if (logger.isDebugEnabled()) { + logger.debug("basicPut: new list of deltas with delta: {}", delta); + } + @Retained Object newVal = new ListOfDeltas(delta); + // TODO no need to call AbstractRegionMap.prepareValueForCache here? + newVal = ((AbstractRegionEntry)re).prepareValueForCache(owner, newVal, true); + re.setValue(owner, newVal); // TODO:KIRK:48068 prevent orphan + } + } + } + } catch (RegionClearedException ex) { + // Neeraj: We can just ignore this exception because we are returning after this block + } + if (isOldValueDelta) { + return true; + } + } + return false; + } + + /* + * returns null if the operation fails + */ + public RegionEntry basicPut(EntryEventImpl event, + final long lastModified, + final boolean ifNew, + final boolean ifOld, + Object expectedOldValue, // only non-null if ifOld + boolean requireOldValue, + final boolean overwriteDestroyed) + throws CacheWriterException, + TimeoutException { + final LocalRegion owner = _getOwner(); + boolean clearOccured = false; + if (owner == null) { + // "fix" for bug 32440 + Assert.assertTrue(false, "The owner for RegionMap " + this + + " is null for event " + event); + } + if (logger.isTraceEnabled(LogMarker.LRU_TOMBSTONE_COUNT) && !(owner instanceof HARegion)) { + logger.trace(LogMarker.LRU_TOMBSTONE_COUNT, + "ARM.basicPut called for {} expectedOldValue={} requireOldValue={} ifNew={} ifOld={} initialized={} overwriteDestroyed={}", + event, expectedOldValue, requireOldValue, ifNew, ifOld, owner.isInitialized(), overwriteDestroyed); + } + + RegionEntry result = null; + long lastModifiedTime = 0; + // copy into local var to prevent race condition with setter + final CacheWriter cacheWriter = owner.basicGetWriter(); + final boolean cacheWrite = !event.isOriginRemote() && !event.isNetSearch() && event.isGenerateCallbacks() + && (cacheWriter != null + || owner.hasServerProxy() + || owner.scope.isDistributed()); + /* + * For performance reason, we try to minimize object creation and do as much + * work as we can outside of synchronization, especially getting + * distribution advice. + */ + final Set netWriteRecipients; + if (cacheWrite) { + if (cacheWriter == null && owner.scope.isDistributed()) { + netWriteRecipients = ((DistributedRegion)owner) + .getCacheDistributionAdvisor().adviseNetWrite(); + } + else { + netWriteRecipients = null; + } + } + else { + netWriteRecipients = null; + } + + // mbid: this has been added to maintain consistency between the disk region + // and the region map after clear() has been called. This will set the + // reference of the diskSegmentRegion as a ThreadLocal so that if the diskRegionSegment + // is later changed by another thread, we can do the necessary. + boolean uninitialized = !owner.isInitialized(); + // SqlFabric Changes - BEGIN + if (enqueDelta(event, ifOld)) { + return null; + } + + final IndexUpdater indexManager = getIndexUpdater(); + + boolean sqlfIndexLocked = false; + // SqlFabric Changes - END + + boolean retrieveOldValueForDelta = event.getDeltaBytes() != null + && event.getRawNewValue() == null; + lockForCacheModification(owner, event); + IndexManager oqlIndexManager = null; + try { + // take read lock for SQLF index initializations if required; the index + // GII lock is for any updates that may come in while index is being + // loaded during replay see bug #41377; this will go away once we allow + // for indexes to be loaded completely in parallel (#40899); need to + // take this lock before the RegionEntry lock else a deadlock can happen + // between this thread and index loading thread that will first take the + // corresponding write lock on the IndexUpdater + if (indexManager != null) { + sqlfIndexLocked = indexManager.lockForIndexGII(); + } + // Fix for Bug #44431. We do NOT want to update the region and wait + // later for index INIT as region.clear() can cause inconsistency if + // happened in parallel as it also does index INIT. + oqlIndexManager = owner.getIndexManager() ; + if (oqlIndexManager != null) { + oqlIndexManager.waitForIndexInit(); + } + + // fix for bug #42169, replace must go to server if entry not on client + boolean replaceOnClient = event.getOperation() == Operation.REPLACE + && owner.getServerProxy() != null; + // Rather than having two different blocks for synchronizing oldRe + // and newRe, have only one block and synchronize re + RegionEntry re = null; + boolean eventRecorded = false; + boolean onlyExisting = ifOld && !replaceOnClient; + re = getOrCreateRegionEntry(owner, event, + Token.REMOVED_PHASE1, null, onlyExisting, false); + if (re == null) { + throwExceptionForSqlFire(event); + return null; + } + while (true) { + synchronized (re) { + // if the re goes into removed2 state, it will be removed + // from the map. otherwise we can append an event to it + // and change its state + if (re.isRemovedPhase2()) { + re = getOrCreateRegionEntry(owner, event, + Token.REMOVED_PHASE1, null, onlyExisting, false); + _getOwner().getCachePerfStats().incRetries(); + if (re == null) { + // this will happen when onlyExisting is true + throwExceptionForSqlFire(event); + return null; + } + continue; + } else { + @Released Object oldValueForDelta = null; + if (retrieveOldValueForDelta) { + // defer the lruUpdateCallback to prevent a deadlock (see bug 51121). + final boolean disabled = disableLruUpdateCallback(); + try { + // Old value is faulted in from disk if not found in memory. + oldValueForDelta = re.getValue(owner); // OFFHEAP: if we are synced on oldRe no issue since we can use ARE's ref + } finally { + if (disabled) { + enableLruUpdateCallback(); + } + } + } + + try { + + event.setRegionEntry(re); + // set old value in event + setOldValueInEvent(event, re, cacheWrite, requireOldValue); + if (!continueUpdate(re, event, ifOld, replaceOnClient)) { + return null; + } + // overwrite destroyed? + if (!continueOverwriteDestroyed(re, event, overwriteDestroyed, ifNew)) { + return null; + } + // check expectedOldValue + if (!satisfiesExpectedOldValue(event, re, expectedOldValue, replaceOnClient)) { + return null; + } + // invoke cacheWriter + invokeCacheWriter(re, event, cacheWrite, cacheWriter, + netWriteRecipients, requireOldValue, expectedOldValue, replaceOnClient); + + // notify index of an update + notifyIndex(re, true); + try { + try { + if ((cacheWrite && event.getOperation().isUpdate()) // if there is a cacheWriter, type of event has already been set + || !re.isRemoved() + || replaceOnClient) { + // update + updateEntry(event, requireOldValue, oldValueForDelta, re); + } else { + // create + createEntry(event, owner, re); + } + owner.recordEvent(event); + eventRecorded = true; + } catch (RegionClearedException rce) { + clearOccured = true; + owner.recordEvent(event); + } catch (ConcurrentCacheModificationException ccme) { + VersionTag tag = event.getVersionTag(); + if (tag != null && tag.isTimeStampUpdated()) { + // Notify gateways of new time-stamp. + owner.notifyTimestampsToGateways(event); + } + throw ccme; + } + if (uninitialized) { + event.inhibitCacheListenerNotification(true); + } + updateLru(clearOccured, re, event); + + lastModifiedTime = owner.basicPutPart2(event, re, + !uninitialized, lastModifiedTime, clearOccured); + } finally { + notifyIndex(re, false); + } + result = re; + break; + } finally { + OffHeapHelper.release(oldValueForDelta); + if (re != null && !onlyExisting && !isOpComplete(re, event)) { + owner.cleanUpOnIncompleteOp(event, re, eventRecorded, + false/* updateStats */, replaceOnClient); + } + else if (re != null && owner.isUsedForPartitionedRegionBucket()) { + BucketRegion br = (BucketRegion)owner; + CachePerfStats stats = br.getPartitionedRegion().getCachePerfStats(); + long startTime= stats.startCustomEviction(); + CustomEvictionAttributes csAttr = br.getCustomEvictionAttributes(); + // No need to update indexes if entry was faulted in but operation did not succeed. + if (csAttr != null && (csAttr.isEvictIncoming() || re.isMarkedForEviction())) { + + if (csAttr.getCriteria().doEvict(event)) { + stats.incEvictionsInProgress(); + // set the flag on event saying the entry should be evicted + // and not indexed + EntryEventImpl destroyEvent = EntryEventImpl.create (owner, Operation.DESTROY, event.getKey(), + null/* newValue */, null, false, owner.getMyId()); + try { + + destroyEvent.setOldValueFromRegion(); + destroyEvent.setCustomEviction(true); + destroyEvent.setPossibleDuplicate(event.isPossibleDuplicate()); + if(logger.isDebugEnabled()) { + logger.debug("Evicting the entry " + destroyEvent); + } + if(result != null) { + removeEntry(event.getKey(),re, true, destroyEvent,owner, indexUpdater); + } + else{ + removeEntry(event.getKey(),re, true, destroyEvent,owner, null); + } + //mark the region entry for this event as evicted + event.setEvicted(); + stats.incEvictions(); + if(logger.isDebugEnabled()) { + logger.debug("Evicted the entry " + destroyEvent); + } + //removeEntry(event.getKey(), re); + } finally { + destroyEvent.release(); + stats.decEvictionsInProgress(); + } + } else { + re.clearMarkedForEviction(); + } + } + stats.endCustomEviction(startTime); + } + } // try + } + } // sync re + }// end while + } catch (DiskAccessException dae) { + //Asif:Feel that it is safe to destroy the region here as there appears + // to be no chance of deadlock during region destruction + result = null; + this._getOwner().handleDiskAccessException(dae); + throw dae; + } finally { + releaseCacheModificationLock(owner, event); + if (sqlfIndexLocked) { + indexManager.unlockForIndexGII(); + } + if (oqlIndexManager != null) { + oqlIndexManager.countDownIndexUpdaters(); + } + if (result != null) { + try { + // Note we do distribution after releasing all sync to avoid deadlock + final boolean invokeListeners = event.basicGetNewValue() != Token.TOMBSTONE; + owner.basicPutPart3(event, result, !uninitialized, + lastModifiedTime, invokeListeners, ifNew, ifOld, expectedOldValue, requireOldValue); + } catch (EntryExistsException eee) { + // SQLFabric changes BEGIN + // ignore EntryExistsException in distribution from a non-empty + // region since actual check will be done in this put itself + // and it can happen in distribution if put comes in from + // GII as well as distribution channel + if (indexManager != null) { + if (logger.isTraceEnabled()) { + logger.trace("basicPut: ignoring EntryExistsException in distribution {}", eee); + } + } + else { + // can this happen for non-SQLFabric case? + throw eee; + } + // SQLFabric changes END + } finally { + // bug 32589, post update may throw an exception if exception occurs + // for any recipients + if (!clearOccured) { + try { + lruUpdateCallback(); + } catch( DiskAccessException dae) { + //Asif:Feel that it is safe to destroy the region here as there appears + // to be no chance of deadlock during region destruction + result = null; + this._getOwner().handleDiskAccessException(dae); + throw dae; + } + } + } // finally + } else { + resetThreadLocals(); + } + } // finally + + return result; + } + + /** + * If the value in the VM is still REMOVED_PHASE1 Token, then the operation + * was not completed (due to cacheWriter exception, concurrentMap operation) etc. + */ + private boolean isOpComplete(RegionEntry re, EntryEventImpl event) { + if (re.getValueAsToken() == Token.REMOVED_PHASE1) { + return false; + } + return true; + } + + private boolean satisfiesExpectedOldValue(EntryEventImpl event, + RegionEntry re, Object expectedOldValue, boolean replaceOnClient) { + // replace is propagated to server, so no need to check + // satisfiesOldValue on client + if (expectedOldValue != null && !replaceOnClient) { + ReferenceCountHelper.skipRefCountTracking(); + + @Retained @Released Object v = re._getValueRetain(event.getLocalRegion(), true); + + ReferenceCountHelper.unskipRefCountTracking(); + try { + if (!AbstractRegionEntry.checkExpectedOldValue(expectedOldValue, v, event.getLocalRegion())) { + return false; + } + } finally { + OffHeapHelper.releaseWithNoTracking(v); + } + } + return true; + } + + // Asif: If the new value is an instance of SerializableDelta, then + // the old value requirement is a must & it needs to be faulted in + // if overflown to disk without affecting LRU? This is needed for + // Sql Fabric. + // [sumedh] store both the value in VM and the value in VM or disk; + // the former is used for updating the VM size calculations, while + // the latter is used in other places like passing to + // SqlfIndexManager or setting the old value in the event; this is + // required since using the latter for updating the size + // calculations will be incorrect in case the value was read from + // disk but not brought into the VM like what getValueInVMOrDisk + // method does when value is not found in VM + // PRECONDITION: caller must be synced on re + private void setOldValueInEvent(EntryEventImpl event, RegionEntry re, boolean cacheWrite, boolean requireOldValue) { + boolean needToSetOldValue = getIndexUpdater() != null || cacheWrite || requireOldValue || event.getOperation().guaranteesOldValue(); + if (needToSetOldValue) { + if (event.hasDelta() || event.getOperation().guaranteesOldValue() + || GemFireCacheImpl.sqlfSystem()) { + // In these cases we want to even get the old value from disk if it is not in memory + ReferenceCountHelper.skipRefCountTracking(); + @Released Object oldValueInVMOrDisk = re.getValueOffHeapOrDiskWithoutFaultIn(event.getLocalRegion()); + ReferenceCountHelper.unskipRefCountTracking(); + try { + event.setOldValue(oldValueInVMOrDisk, requireOldValue + || GemFireCacheImpl.sqlfSystem()); + } finally { + OffHeapHelper.releaseWithNoTracking(oldValueInVMOrDisk); + } + } else { + // In these cases only need the old value if it is in memory + ReferenceCountHelper.skipRefCountTracking(); + + @Retained @Released Object oldValueInVM = re._getValueRetain(event.getLocalRegion(), true); // OFFHEAP: re synced so can use its ref. + + ReferenceCountHelper.unskipRefCountTracking(); + try { + event.setOldValue(oldValueInVM, + requireOldValue || GemFireCacheImpl.sqlfSystem()); + } finally { + OffHeapHelper.releaseWithNoTracking(oldValueInVM); + } + } + } else { + // if the old value is in memory then if it is a GatewaySenderEventImpl then + // we want to set the old value. + @Unretained Object ov = re._getValue(); // OFFHEAP _getValue is ok since re is synced and we only use it if its a GatewaySenderEventImpl. + // Since GatewaySenderEventImpl is never stored in an off-heap region nor a compressed region we don't need to worry about ov being compressed. + if (ov instanceof GatewaySenderEventImpl) { + event.setOldValue(ov, true); + } + } + } + + /** + * Asif: If the system is sqlfabric and the event has delta, then re == null + * implies update on non existent row . Throwing ENFE in that case + * As returning a boolean etc has other complications in terms of PR reattempt etc + */ + private void throwExceptionForSqlFire(EntryEventImpl event) { + if (event.hasDelta() && _getOwner().getGemFireCache().isSqlfSystem()) { + throw new EntryNotFoundException( + "SqlFabric::No row found for update"); + } + } + + protected void createEntry(EntryEventImpl event, final LocalRegion owner, + RegionEntry re) throws RegionClearedException { + final boolean wasTombstone = re.isTombstone(); + processVersionTag(re, event); + event.putNewEntry(owner, re); + updateSize(event, 0, false, wasTombstone); + if (!event.getLocalRegion().isInitialized()) { + owner.getImageState().removeDestroyedEntry(event.getKey()); + } + } + + protected void updateEntry(EntryEventImpl event, boolean requireOldValue, + Object oldValueForDelta, RegionEntry re) throws RegionClearedException { + final int oldSize = event.getLocalRegion().calculateRegionEntryValueSize(re); + final boolean wasTombstone = re.isTombstone(); + processVersionTag(re, event); + event.putExistingEntry(event.getLocalRegion(), re, requireOldValue, + oldValueForDelta); + EntryLogger.logPut(event); + updateSize(event, oldSize, true/* isUpdate */, wasTombstone); + } + + private void updateLru(boolean clearOccured, RegionEntry re, EntryEventImpl event) { + if (!clearOccured) { + if (event.getOperation().isCreate()) { + lruEntryCreate(re); + } else { + lruEntryUpdate(re); + } + } + } + + private void updateSize(EntryEventImpl event, int oldSize, boolean isUpdate, boolean wasTombstone) { + if (isUpdate && !wasTombstone) { + _getOwner().updateSizeOnPut(event.getKey(), oldSize, event.getNewValueBucketSize()); + } else { + _getOwner().updateSizeOnCreate(event.getKey(), event.getNewValueBucketSize()); + if (!wasTombstone) { + incEntryCount(1); + } + } + } + + private void notifyIndex(RegionEntry re, boolean isUpdating) { + if (_getOwner().indexMaintenanceSynchronous) { + re.setUpdateInProgress(isUpdating); + } + } + + private void invokeCacheWriter(RegionEntry re, EntryEventImpl event, + boolean cacheWrite, CacheWriter cacheWriter, Set netWriteRecipients, + boolean requireOldValue, Object expectedOldValue, boolean replaceOnClient) { + // invoke listeners only if region is initialized + if (_getOwner().isInitialized() && cacheWrite) { + // event.setOldValue already called in setOldValueInEvent + + // bug #42638 for replaceOnClient, do not make the event create + // or update since replace must propagate to server + if (!replaceOnClient) { + if (re.isDestroyedOrRemoved()) { + event.makeCreate(); + } else { + event.makeUpdate(); + } + } + _getOwner().cacheWriteBeforePut(event, netWriteRecipients, cacheWriter, + requireOldValue, expectedOldValue); + } + if (!_getOwner().isInitialized() && !cacheWrite) { + // block setting of old value in putNewValueNoSync, don't + // need it + event.oldValueNotAvailable(); + } + } + + private boolean continueOverwriteDestroyed(RegionEntry re, + EntryEventImpl event, boolean overwriteDestroyed, boolean ifNew) { + Token oldValueInVM = re.getValueAsToken(); + // if region is under GII, check if token is destroyed + if (!overwriteDestroyed) { + if (!_getOwner().isInitialized() && (oldValueInVM == Token.DESTROYED || oldValueInVM == Token.TOMBSTONE)) { + event.setOldValueDestroyedToken(); + return false; + } + } + if (ifNew && !Token.isRemoved(oldValueInVM)) { + return false; + } + return true; + } + + private boolean continueUpdate(RegionEntry re, EntryEventImpl event, + boolean ifOld, boolean replaceOnClient) { + if (ifOld) { + // only update, so just do tombstone maintainence and exit + if (re.isTombstone() && event.getVersionTag() != null) { + // refresh the tombstone so it doesn't time out too soon + processVersionTag(re, event); + try { + re.setValue(_getOwner(), Token.TOMBSTONE); + } catch (RegionClearedException e) { + // that's okay - when writing a tombstone into a disk, the + // region has been cleared (including this tombstone) + } + _getOwner().rescheduleTombstone(re, re.getVersionStamp().asVersionTag()); + return false; + } + if (re.isRemoved() && !replaceOnClient) { + return false; + } + } + return true; + } + + protected boolean destroyEntry(RegionEntry re, EntryEventImpl event, + boolean inTokenMode, boolean cacheWrite, @Released Object expectedOldValue, + boolean forceDestroy, boolean removeRecoveredEntry) + throws CacheWriterException, TimeoutException, EntryNotFoundException, + RegionClearedException { + processVersionTag(re, event); + final int oldSize = _getOwner().calculateRegionEntryValueSize(re); + boolean retVal = re.destroy(event.getLocalRegion(), event, inTokenMode, + cacheWrite, expectedOldValue, forceDestroy, removeRecoveredEntry); + if (retVal) { + EntryLogger.logDestroy(event); + _getOwner().updateSizeOnRemove(event.getKey(), oldSize); + } + return retVal; + } + + public void txApplyPut(Operation p_putOp, Object key, Object nv, + boolean didDestroy, TransactionId txId, TXRmtEvent txEvent, + EventID eventId, Object aCallbackArgument,List pendingCallbacks,FilterRoutingInfo filterRoutingInfo,ClientProxyMembershipID bridgeContext, TXEntryState txEntryState, VersionTag versionTag, long tailKey) + { + final LocalRegion owner = _getOwner(); + if (owner == null) { + // "fix" for bug 32440 + Assert.assertTrue(false, "The owner for RegionMap " + this + + " is null"); + } + + Operation putOp = p_putOp; + + owner.checkBeforeEntrySync(txEvent); + Object newValue = nv; + + final boolean hasRemoteOrigin = !((TXId)txId).getMemberId().equals(owner.getMyId()); + final boolean isTXHost = txEntryState != null; + final boolean isClientTXOriginator = owner.cache.isClient() && !hasRemoteOrigin; + final boolean isRegionReady = owner.isInitialized(); + EntryEventImpl cbEvent = null; + EntryEventImpl sqlfEvent = null; + boolean invokeCallbacks = shouldCreateCBEvent(owner, false /*isInvalidate*/, isRegionReady); + boolean cbEventInPending = false; + cbEvent = createCBEvent(owner, putOp, key, newValue, txId, + txEvent, eventId, aCallbackArgument,filterRoutingInfo,bridgeContext, txEntryState, versionTag, tailKey); + try { + if (logger.isDebugEnabled()) { + logger.debug("txApplyPut cbEvent={}", cbEvent); + } + + + if (owner.isUsedForPartitionedRegionBucket()) { + newValue = EntryEventImpl.getCachedDeserializable(nv, cbEvent); + txHandleWANEvent(owner, cbEvent, txEntryState); + } + + if (/*owner.isUsedForPartitionedRegionBucket() && */ + (getIndexUpdater() != null || + (newValue instanceof com.gemstone.gemfire.internal.cache.delta.Delta))) { + sqlfEvent = createCBEvent(owner, putOp, key, newValue, txId, + txEvent, eventId, aCallbackArgument,filterRoutingInfo,bridgeContext, txEntryState, versionTag, tailKey); + } + boolean opCompleted = false; + // Fix for Bug #44431. We do NOT want to update the region and wait + // later for index INIT as region.clear() can cause inconsistency if + // happened in parallel as it also does index INIT. + IndexManager oqlIndexManager = owner.getIndexManager() ; + if (oqlIndexManager != null) { + oqlIndexManager.waitForIndexInit(); + } + lockForTXCacheModification(owner, versionTag); + try { + if (hasRemoteOrigin && !isTXHost && !isClientTXOriginator) { + // If we are not a mirror then only apply the update to existing + // entries + // + // If we are a mirror then then only apply the update to + // existing entries when the operation is an update and we + // are initialized. + // Otherwise use the standard create/update logic + if (!owner.isAllEvents() || (!putOp.isCreate() && isRegionReady)) { + // At this point we should only apply the update if the entry exists + RegionEntry re = getEntry(key); // Fix for bug 32347. + if (re != null) { + synchronized (re) { + if (!re.isRemoved()) { + opCompleted = true; + putOp = putOp.getCorrespondingUpdateOp(); + // Net writers are not called for received transaction data + final int oldSize = owner.calculateRegionEntryValueSize(re); + if (cbEvent != null) { + cbEvent.setRegionEntry(re); + cbEvent.setOldValue(re.getValueInVM(owner)); // OFFHEAP eei + } + if (sqlfEvent != null) { + sqlfEvent.setOldValue(re.getValueInVM(owner)); // OFFHEAP eei + } + + boolean clearOccured = false; + // Set RegionEntry updateInProgress + if (owner.indexMaintenanceSynchronous) { + re.setUpdateInProgress(true); + } + try { + txRemoveOldIndexEntry(putOp, re); + if (didDestroy) { + re.txDidDestroy(owner.cacheTimeMillis()); + } + if (txEvent != null) { + txEvent.addPut(putOp, owner, re, re.getKey(), newValue,aCallbackArgument); + } + re.setValueResultOfSearch(putOp.isNetSearch()); + try { + // Rahul: applies the delta and sets the new value in + // region entry (required for sqlfabric delta). + processAndGenerateTXVersionTag(owner, cbEvent, re, txEntryState); + if (newValue instanceof com.gemstone.gemfire.internal.cache.delta.Delta + && sqlfEvent != null) { + //cbEvent.putExistingEntry(owner, re); + sqlfEvent.putExistingEntry(owner, re); + } else { + re.setValue(owner, re.prepareValueForCache(owner, newValue, cbEvent, !putOp.isCreate())); + } + if (putOp.isCreate()) { + owner.updateSizeOnCreate(key, owner.calculateRegionEntryValueSize(re)); + } else if (putOp.isUpdate()) { + // Rahul : fix for 41694. Negative bucket size can also be + // an issue with normal GFE Delta and will have to be fixed + // in a similar manner and may be this fix the the one for + // other delta can be combined. + if (sqlfEvent != null) { + owner.updateSizeOnPut(key, oldSize, sqlfEvent.getNewValueBucketSize()); + } else { + owner.updateSizeOnPut(key, oldSize, owner.calculateRegionEntryValueSize(re)); + } + } + } + catch (RegionClearedException rce) { + clearOccured = true; + } + { + long lastMod = owner.cacheTimeMillis(); + EntryLogger.logTXPut(_getOwnerObject(), key, nv); + re.updateStatsForPut(lastMod); + owner.txApplyPutPart2(re, re.getKey(), newValue, lastMod, + false, didDestroy, clearOccured); + } + } finally { + if (re != null && owner.indexMaintenanceSynchronous) { + re.setUpdateInProgress(false); + } + } + if (invokeCallbacks) { + cbEvent.makeUpdate(); + switchEventOwnerAndOriginRemote(cbEvent, hasRemoteOrigin); + if(pendingCallbacks==null) { + owner.invokeTXCallbacks(EnumListenerEvent.AFTER_UPDATE, + cbEvent, hasRemoteOrigin); + } else { + pendingCallbacks.add(cbEvent); + cbEventInPending = true; + } + } + if (!clearOccured) { + lruEntryUpdate(re); + } + } + } + if (didDestroy && !opCompleted) { + owner + .txApplyInvalidatePart2(re, re.getKey(), true, false, false /* clear*/); + } + } + if (owner.concurrencyChecksEnabled && txEntryState != null && cbEvent != null) { + txEntryState.setVersionTag(cbEvent.getVersionTag()); + } + return; + } + } + RegionEntry newRe = getEntryFactory().createEntry(owner, key, + Token.REMOVED_PHASE1); + synchronized (newRe) { + try { + RegionEntry oldRe = putEntryIfAbsent(key, newRe); + while (!opCompleted && oldRe != null) { + synchronized (oldRe) { + if (oldRe.isRemovedPhase2()) { + oldRe = putEntryIfAbsent(key, newRe); + if (oldRe != null) { + owner.getCachePerfStats().incRetries(); + } + } + else { + opCompleted = true; + if (!oldRe.isRemoved()) { + putOp = putOp.getCorrespondingUpdateOp(); + } + // Net writers are not called for received transaction data + final int oldSize = owner.calculateRegionEntryValueSize(oldRe); + final boolean oldIsRemoved = oldRe.isDestroyedOrRemoved(); + if (cbEvent != null) { + cbEvent.setRegionEntry(oldRe); + cbEvent.setOldValue(oldRe.getValueInVM(owner)); // OFFHEAP eei + } + if (sqlfEvent != null) { + sqlfEvent.setOldValue(oldRe.getValueInVM(owner)); // OFFHEAP eei + } + boolean clearOccured = false; + // Set RegionEntry updateInProgress + if (owner.indexMaintenanceSynchronous) { + oldRe.setUpdateInProgress(true); + } + try { + txRemoveOldIndexEntry(putOp, oldRe); + if (didDestroy) { + oldRe.txDidDestroy(owner.cacheTimeMillis()); + } + if (txEvent != null) { + txEvent.addPut(putOp, owner, oldRe, oldRe.getKey(), newValue,aCallbackArgument); + } + oldRe.setValueResultOfSearch(putOp.isNetSearch()); + try { + processAndGenerateTXVersionTag(owner, cbEvent, oldRe, txEntryState); + boolean wasTombstone = oldRe.isTombstone(); + if (newValue instanceof com.gemstone.gemfire.internal.cache.delta.Delta + && sqlfEvent != null ) { + //cbEvent.putExistingEntry(owner, oldRe); + sqlfEvent.putExistingEntry(owner, oldRe); + } else { + oldRe.setValue(owner, oldRe.prepareValueForCache(owner, newValue, cbEvent, !putOp.isCreate())); + if (wasTombstone) { + owner.unscheduleTombstone(oldRe); + } + } + if (putOp.isCreate()) { + owner.updateSizeOnCreate(key, owner.calculateRegionEntryValueSize(oldRe)); + } else if (putOp.isUpdate()) { + // Rahul : fix for 41694. Negative bucket size can also be + // an issue with normal GFE Delta and will have to be fixed + // in a similar manner and may be this fix the the one for + // other delta can be combined. + if (sqlfEvent != null) { + owner.updateSizeOnPut(key, oldSize, sqlfEvent.getNewValueBucketSize()); + } else { + owner.updateSizeOnPut(key, oldSize, owner.calculateRegionEntryValueSize(oldRe)); + } + } + } + catch (RegionClearedException rce) { + clearOccured = true; + } + { + long lastMod = System.currentTimeMillis(); + EntryLogger.logTXPut(_getOwnerObject(), key, nv); + oldRe.updateStatsForPut(lastMod); + owner.txApplyPutPart2(oldRe, oldRe.getKey(), newValue, + lastMod, false, didDestroy, clearOccured); + } + } finally { + if (oldRe != null && owner.indexMaintenanceSynchronous) { + oldRe.setUpdateInProgress(false); + } + } + if (invokeCallbacks) { + if (!oldIsRemoved) { + cbEvent.makeUpdate(); + } + switchEventOwnerAndOriginRemote(cbEvent, hasRemoteOrigin); + if(pendingCallbacks==null) { + owner.invokeTXCallbacks(cbEvent.op.isCreate() ? EnumListenerEvent.AFTER_CREATE : EnumListenerEvent.AFTER_UPDATE, + cbEvent, true/*callDispatchListenerEvent*/); + } else { + pendingCallbacks.add(cbEvent); + cbEventInPending = true; + } + } + if (!clearOccured) { + lruEntryUpdate(oldRe); + } + } + } + } + if (!opCompleted) { + putOp = putOp.getCorrespondingCreateOp(); + if (cbEvent != null) { + cbEvent.setRegionEntry(newRe); + cbEvent.setOldValue(null); + } + boolean clearOccured = false; + // Set RegionEntry updateInProgress + if (owner.indexMaintenanceSynchronous) { + newRe.setUpdateInProgress(true); + } + try { + txRemoveOldIndexEntry(putOp, newRe); + // creating a new entry + if (didDestroy) { + newRe.txDidDestroy(owner.cacheTimeMillis()); + } + if (txEvent != null) { + txEvent.addPut(putOp, owner, newRe, newRe.getKey(), newValue,aCallbackArgument); + } + newRe.setValueResultOfSearch(putOp.isNetSearch()); + try { + + processAndGenerateTXVersionTag(owner, cbEvent, newRe, txEntryState); + if (sqlfEvent != null ) { + sqlfEvent.putNewEntry(owner,newRe); + } else { + newRe.setValue(owner, newRe.prepareValueForCache(owner, newValue, cbEvent, !putOp.isCreate())); + } + owner.updateSizeOnCreate(newRe.getKey(), owner.calculateRegionEntryValueSize(newRe)); + } + catch (RegionClearedException rce) { + clearOccured = true; + } + { + long lastMod = System.currentTimeMillis(); + EntryLogger.logTXPut(_getOwnerObject(), key, nv); + newRe.updateStatsForPut(lastMod); + owner.txApplyPutPart2(newRe, newRe.getKey(), newValue, lastMod, + true, didDestroy, clearOccured); + } + } finally { + if (newRe != null && owner.indexMaintenanceSynchronous) { + newRe.setUpdateInProgress(false); + } + } + opCompleted = true; + if (invokeCallbacks) { + cbEvent.makeCreate(); + cbEvent.setOldValue(null); + switchEventOwnerAndOriginRemote(cbEvent, hasRemoteOrigin); + if(pendingCallbacks==null) { + owner.invokeTXCallbacks(EnumListenerEvent.AFTER_CREATE, cbEvent, + true/*callDispatchListenerEvent*/); + } else { + pendingCallbacks.add(cbEvent); + cbEventInPending = true; + } + } + if (!clearOccured) { + lruEntryCreate(newRe); + incEntryCount(1); + } + } + } + finally { + if (!opCompleted) { + removeEntry(key, newRe, false); + } + } + } + if (owner.concurrencyChecksEnabled && txEntryState != null && cbEvent != null) { + txEntryState.setVersionTag(cbEvent.getVersionTag()); + } + }catch( DiskAccessException dae) { + owner.handleDiskAccessException(dae); + throw dae; + } + finally { + releaseTXCacheModificationLock(owner, versionTag); + if (oqlIndexManager != null) { + oqlIndexManager.countDownIndexUpdaters(); + } + } + } finally { + if (!cbEventInPending) cbEvent.release(); + if (sqlfEvent != null) sqlfEvent.release(); + } + } + + private void txHandleWANEvent(final LocalRegion owner, EntryEventImpl cbEvent, TXEntryState txEntryState) { + ((BucketRegion)owner).handleWANEvent(cbEvent); + if (txEntryState != null) { + txEntryState.setTailKey(cbEvent.getTailKey()); + } + } + + /** + * called from txApply* methods to process and generate versionTags. + */ + private void processAndGenerateTXVersionTag(final LocalRegion owner, + EntryEventImpl cbEvent, RegionEntry re, TXEntryState txEntryState) { + if (shouldPerformConcurrencyChecks(owner, cbEvent)) { + try { + if (txEntryState != null && txEntryState.getRemoteVersionTag() != null) { + // to generate a version based on a remote VersionTag, we will + // have to put the remote versionTag in the regionEntry + VersionTag remoteTag = txEntryState.getRemoteVersionTag(); + if (re instanceof VersionStamp) { + VersionStamp stamp = (VersionStamp) re; + stamp.setVersions(remoteTag); + } + } + processVersionTag(re, cbEvent); + } catch (ConcurrentCacheModificationException ignore) { + // ignore this execption, however invoke callbacks for this operation + } + + // For distributed transactions, stuff the next region version generated + // in phase-1 commit into the cbEvent so that ARE.generateVersionTag can later + // just apply it and not regenerate it in phase-2 commit + if (cbEvent != null && txEntryState != null && txEntryState.getDistTxEntryStates() != null) { + cbEvent.setNextRegionVersion(txEntryState.getDistTxEntryStates().getRegionVersion()); + } + + //cbEvent.setNextRegionVersion(txEntryState.getNextRegionVersion()); + owner.generateAndSetVersionTag(cbEvent, re); + } + } + + /** + * Checks for concurrency checks enabled on Region and that cbEvent is not null. + */ + private boolean shouldPerformConcurrencyChecks(LocalRegion owner, EntryEventImpl cbEvent) { + return owner.getConcurrencyChecksEnabled() && cbEvent != null; + } + + /** + * Switch the event's region from BucketRegion to owning PR and set originRemote to the given value + */ + static EntryEventImpl switchEventOwnerAndOriginRemote(EntryEventImpl event, boolean originRemote) { + assert event != null; + if (event.getRegion().isUsedForPartitionedRegionBucket()) { + LocalRegion pr = event.getRegion().getPartitionedRegion(); + event.setRegion(pr); + } + event.setOriginRemote(originRemote); + return event; + } + + /** + * Removing the existing indexed value requires the current value in the cache, + * that is the one prior to applying the operation. + * @param op + * @param entry the RegionEntry that contains the value prior to applying the op + */ + private void txRemoveOldIndexEntry(Operation op, RegionEntry entry) { + if ((op.isUpdate() && !entry.isInvalid()) || + op.isInvalidate() || op.isDestroy()) { + IndexManager idxManager = _getOwner().getIndexManager(); + if (idxManager != null) { + try { + idxManager.updateIndexes(entry, + IndexManager.REMOVE_ENTRY, + op.isUpdate() ? + IndexProtocol.BEFORE_UPDATE_OP : + IndexProtocol.OTHER_OP); + } catch (QueryException e) { + throw new IndexMaintenanceException(e); + } + } + } + } + + public void dumpMap() { + logger.debug("dump of concurrent map of size {} for region {}", this._getMap().size(), this._getOwner()); + for (Iterator it = this._getMap().values().iterator(); it.hasNext(); ) { + logger.trace("dumpMap:"+it.next().toString()); + } + } + + static boolean shouldCreateCBEvent( final LocalRegion owner, + final boolean isInvalidate, final boolean isInitialized) + { + LocalRegion lr = owner; + boolean isPartitioned = lr.isUsedForPartitionedRegionBucket(); + + if(isPartitioned){ + /* if(!((BucketRegion)lr).getBucketAdvisor().isPrimary()) { + if(!BucketRegion.FORCE_LOCAL_LISTENERS_INVOCATION) { + return false; + } + }*/ + lr = owner.getPartitionedRegion(); + } + if (isInvalidate) { // ignore shouldNotifyGatewayHub check for invalidates + return (isPartitioned || isInitialized) + && (lr.shouldDispatchListenerEvent() + || lr.shouldNotifyBridgeClients() + || lr.getConcurrencyChecksEnabled()); + } else { + return (isPartitioned || isInitialized) + && (lr.shouldDispatchListenerEvent() + || lr.shouldNotifyBridgeClients() + || lr.getConcurrencyChecksEnabled()); + } + } + + /** create a callback event for applying a transactional change to the local cache */ + public static final EntryEventImpl createCBEvent(final LocalRegion re, + Operation op, Object key, Object newValue, TransactionId txId, + TXRmtEvent txEvent,EventID eventId, Object aCallbackArgument,FilterRoutingInfo filterRoutingInfo,ClientProxyMembershipID bridgeContext, TXEntryState txEntryState, VersionTag versionTag, long tailKey) + { + DistributedMember originator = null ; + //txId should not be null even on localOrigin + Assert.assertTrue(txId != null); + originator = ((TXId)txId).getMemberId(); + + LocalRegion eventRegion = re; + if (eventRegion.isUsedForPartitionedRegionBucket()) { + eventRegion = re.getPartitionedRegion(); + } + + EntryEventImpl retVal = EntryEventImpl.create( + re, op, key, newValue, + aCallbackArgument, + txEntryState == null, originator); + boolean returnedRetVal = false; + try { + + + if(bridgeContext!=null) { + retVal.setContext(bridgeContext); + } + + if (eventRegion.generateEventID()) { + retVal.setEventId(eventId); + } + + if (versionTag != null) { + retVal.setVersionTag(versionTag); + } + + retVal.setTailKey(tailKey); + + FilterInfo localRouting = null; + boolean computeFilterInfo = false; + if (filterRoutingInfo == null) { + computeFilterInfo = true; + } else { + localRouting = filterRoutingInfo.getLocalFilterInfo(); + if (localRouting != null) { + // routing was computed in this VM but may need to perform local interest processing + computeFilterInfo = !filterRoutingInfo.hasLocalInterestBeenComputed(); + } else { + // routing was computed elsewhere and is in the "remote" routing table + localRouting = filterRoutingInfo.getFilterInfo(re.getMyId()); + } + if (localRouting != null) { + if (!computeFilterInfo) { + retVal.setLocalFilterInfo(localRouting); + } + } else { + computeFilterInfo = true; + } + } + if (logger.isTraceEnabled()) { + logger.trace("createCBEvent filterRouting={} computeFilterInfo={} local routing={}", filterRoutingInfo, computeFilterInfo, localRouting); + } + + if (re.isUsedForPartitionedRegionBucket()) { + BucketRegion bucket = (BucketRegion)re; + if(BucketRegion.FORCE_LOCAL_LISTENERS_INVOCATION || bucket.getBucketAdvisor().isPrimary()) { + retVal.setInvokePRCallbacks(true); + } else { + retVal.setInvokePRCallbacks(false); + } + + if (computeFilterInfo) { + if (bucket.getBucketAdvisor().isPrimary()) { + if (logger.isTraceEnabled()) { + logger.trace("createCBEvent computing routing for primary bucket"); + } + FilterProfile fp = ((BucketRegion)re).getPartitionedRegion().getFilterProfile(); + if (fp != null) { + FilterRoutingInfo fri = fp.getFilterRoutingInfoPart2(filterRoutingInfo, retVal); + if (fri != null) { + retVal.setLocalFilterInfo(fri.getLocalFilterInfo()); + } + } + } + } + } else if (computeFilterInfo) { // not a bucket + if (logger.isTraceEnabled()) { + logger.trace("createCBEvent computing routing for non-bucket"); + } + FilterProfile fp = re.getFilterProfile(); + if (fp != null) { + retVal.setLocalFilterInfo(fp.getLocalFilterRouting(retVal)); + } + } + retVal.setTransactionId(txId); + returnedRetVal = true; + return retVal; + } finally { + if (!returnedRetVal) { + retVal.release(); + } + } + } + + public final void writeSyncIfPresent(Object key, Runnable runner) + { + RegionEntry re = getEntry(key); + if (re != null) { + final boolean disabled = disableLruUpdateCallback(); + try { + synchronized (re) { + if (!re.isRemoved()) { + runner.run(); + } + } + } + finally { + if (disabled) { + enableLruUpdateCallback(); + } + try { + lruUpdateCallback(); + }catch(DiskAccessException dae) { + this._getOwner().handleDiskAccessException(dae); + throw dae; + } + } + } + } + + public final void removeIfDestroyed(Object key) + { + LocalRegion owner = _getOwner(); +// boolean makeTombstones = owner.concurrencyChecksEnabled; + DiskRegion dr = owner.getDiskRegion(); + RegionEntry re = getEntry(key); + if (re != null) { + if (re.isDestroyed()) { + synchronized (re) { + if (re.isDestroyed()) { + // [bruce] destroyed entries aren't in the LRU clock, so they can't be retained here +// if (makeTombstones) { +// re.makeTombstone(owner, re.getVersionStamp().asVersionTag()); +// } else { + re.removePhase2(); + removeEntry(key, re, true); + } + } + } + } +// } + } + + + /** get version-generation permission from the region's version vector */ + private void lockForCacheModification(LocalRegion owner, EntryEventImpl event) { + boolean lockedByBulkOp = event.isBulkOpInProgress() && owner.dataPolicy.withReplication(); + if (!event.isOriginRemote() && !lockedByBulkOp) { + RegionVersionVector vector = owner.getVersionVector(); + if (vector != null) { + vector.lockForCacheModification(owner); + } + } + } + + /** release version-generation permission from the region's version vector */ + private void releaseCacheModificationLock(LocalRegion owner, EntryEventImpl event) { + boolean lockedByBulkOp = event.isBulkOpInProgress() && owner.dataPolicy.withReplication(); + if (!event.isOriginRemote() && !lockedByBulkOp) { + RegionVersionVector vector = owner.getVersionVector(); + if (vector != null) { + vector.releaseCacheModificationLock(owner); + } + } + } + + /** get version-generation permission from the region's version vector */ + private void lockForTXCacheModification(LocalRegion owner, VersionTag tag) { + if ( !(tag != null && tag.isFromOtherMember()) ) { + RegionVersionVector vector = owner.getVersionVector(); + if (vector != null) { + vector.lockForCacheModification(owner); + } + } + } + + /** release version-generation permission from the region's version vector */ + private void releaseTXCacheModificationLock(LocalRegion owner, VersionTag tag) { + if ( !(tag != null && tag.isFromOtherMember()) ) { + RegionVersionVector vector = owner.getVersionVector(); + if (vector != null) { + vector.releaseCacheModificationLock(owner); + } + } + } + + public final void unscheduleTombstone(RegionEntry re) { + } + + /** + * for testing race conditions between threads trying to apply ops to the + * same entry + * @param entry the entry to attempt to add to the system + */ + protected final RegionEntry putEntryIfAbsentForTest(RegionEntry entry) { + return (RegionEntry)putEntryIfAbsent(entry.getKey(), entry); + } + + public boolean isTombstoneNotNeeded(RegionEntry re, int destroyedVersion) { + // no need for synchronization - stale values are okay here + RegionEntry actualRe = getEntry(re.getKey()); + // TODO this looks like a problem for regionEntry pooling + if (actualRe != re) { // null actualRe is okay here + return true; // tombstone was evicted at some point + } + VersionStamp vs = re.getVersionStamp(); + if (vs == null) { + // if we have no VersionStamp why were we even added as a tombstone? + // We used to see an NPE here. See bug 52092. + logger.error("Unexpected RegionEntry scheduled as tombstone: re.getClass {} destroyedVersion {}", re.getClass(), destroyedVersion); + return true; + } + int entryVersion = vs.getEntryVersion(); + boolean isSameTombstone = (entryVersion == destroyedVersion && re.isTombstone()); + return !isSameTombstone; + } + + /** removes a tombstone that has expired locally */ + public final boolean removeTombstone(RegionEntry re, VersionHolder version, boolean isEviction, boolean isScheduledTombstone) { + boolean result = false; + int destroyedVersion = version.getEntryVersion(); + + synchronized(this._getOwner().getSizeGuard()) { // do this sync first; see bug 51985 + synchronized (re) { + int entryVersion = re.getVersionStamp().getEntryVersion(); + boolean isTombstone = re.isTombstone(); + boolean isSameTombstone = (entryVersion == destroyedVersion && isTombstone); + if (isSameTombstone || (isTombstone && entryVersion < destroyedVersion)) { + if (logger.isTraceEnabled(LogMarker.TOMBSTONE_COUNT)) { + // logs are at info level for TomstoneService.DEBUG_TOMBSTONE_COUNT so customer doesn't have to use fine level + if (isSameTombstone) { + // logging this can put tremendous pressure on the log writer in tests + // that "wait for silence" + logger.trace(LogMarker.TOMBSTONE_COUNT, + "removing tombstone for {} with v{} rv{}; count is {}", + re.getKey(), destroyedVersion, version.getRegionVersion(), (this._getOwner().getTombstoneCount() - 1)); + } else { + logger.trace(LogMarker.TOMBSTONE_COUNT, "removing entry (v{}) that is older than an expiring tombstone (v{} rv{}) for {}", + entryVersion, destroyedVersion, version.getRegionVersion(), re.getKey()); + } + } + try { + re.setValue(_getOwner(), Token.REMOVED_PHASE2); + if (removeTombstone(re)) { + result = true; + incEntryCount(-1); + // Bug 51118: When the method is called by tombstoneGC thread, current 're' is an + // expired tombstone. Then we detected an destroyed (due to overwritingOldTombstone() + // returns true earlier) tombstone with bigger entry version, it's safe to delete + // current tombstone 're' and adjust the tombstone count. + // lruEntryDestroy(re); // tombstones are invisible to LRU + if (isScheduledTombstone) { + _getOwner().incTombstoneCount(-1); + } + RegionVersionVector vector = _getOwner().getVersionVector(); + if (vector != null) { + vector.recordGCVersion(version.getMemberID(), version.getRegionVersion()); + } + } + } catch (RegionClearedException e) { + // if the region has been cleared we don't need to remove the tombstone + } catch (RegionDestroyedException e) { + //if the region has been destroyed, the tombstone is already + //gone. Catch an exception to avoid an error from the GC thread. + } + } else { + if (logger.isTraceEnabled(LogMarker.TOMBSTONE_COUNT)) { + logger.trace(LogMarker.TOMBSTONE_COUNT, + "tombstone for {} was resurrected with v{}; destroyed version was v{}; count is {}; entryMap size is {}", + re.getKey(), re.getVersionStamp().getEntryVersion(), destroyedVersion, this._getOwner().getTombstoneCount(), size()); + } + } + } + } + return result; + } + + protected boolean removeTombstone(RegionEntry re) { + return _getMap().remove(re.getKey(), re); + } + + // method used for debugging tombstone count issues + public boolean verifyTombstoneCount(AtomicInteger numTombstones) { + int deadEntries = 0; + try { + for (Iterator it=_getMap().values().iterator(); it.hasNext(); ) { + RegionEntry re = (RegionEntry)it.next(); + if (re.isTombstone()) { + deadEntries++; + } + } + if (deadEntries != numTombstones.get()) { + if (logger.isDebugEnabled()) { + logger.debug("tombstone count ({}) does not match actual number of tombstones ({})", + numTombstones, deadEntries, new Exception()); + } + return false; + } else { + if (logger.isDebugEnabled()) { + logger.debug("tombstone count verified"); + } + } + } catch (Exception e) { + // ignore + } + return true; + } +} + diff --git a/gemfire-core/src/main/java/com/gemstone/gemfire/internal/cache/BytesAndBitsForCompactor.java b/gemfire-core/src/main/java/com/gemstone/gemfire/internal/cache/BytesAndBitsForCompactor.java new file mode 100644 index 000000000000..ad6c40cd17dd --- /dev/null +++ b/gemfire-core/src/main/java/com/gemstone/gemfire/internal/cache/BytesAndBitsForCompactor.java @@ -0,0 +1,93 @@ +/* + * 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 com.gemstone.gemfire.internal.cache; + +import com.gemstone.gemfire.internal.offheap.Chunk; +import com.gemstone.gemfire.internal.offheap.annotations.Unretained; + +/** + * Used to fetch a record's raw bytes and user bits. + * The actual data length in byte array may be less than + * the size of the byte array itself. An integer field contains + * the valid length. This class is used exclusively by the Oplog Compactor + * for rolling the entries. The reason for this class is to reuse the + * underlying byte array for rolling multiple entries there by + * reducing the garbage. + * @since 5.5 + */ +public class BytesAndBitsForCompactor { + /** + * If dataChunk is set then ignore the "data" and "validLength" fields. + * The dataChunk field is unretained so it can only be used while the RegionEntry is still synced. + * When done with the dataChunk, null it out if you want to reuse the byte[] later. + */ + private @Unretained Chunk dataChunk; + private byte[] data; + private byte userBits=0; + // length of the data present in the byte array + private int validLength; + private static final byte[] INIT_FOR_WRAPPER = new byte[0]; + // boolean indicating if the object can be reused. + // Typically if the data stores the reference of a value byte [] directly + // from the RegionEntry than this byte array cannot be reused for + //storing another entry's data + private boolean isReusable ; + + public BytesAndBitsForCompactor() { + this.data = INIT_FOR_WRAPPER; + //this.userBits = userBits; + this.validLength = INIT_FOR_WRAPPER.length; + this.isReusable = true; + } + + + public final Chunk getDataChunk() { + return this.dataChunk; + } + public final byte[] getBytes() { + return this.data; + } + public final byte getBits() { + return this.userBits; + } + + public final int getValidLength() { + return this.validLength; + } + + public boolean isReusable() { + return this.isReusable; + } + + /** + * + * @param data byte array storing the data + * @param userBits byte with appropriate bits set + * @param validLength The number of bytes representing the data , starting from 0 as offset + * @param isReusable true if this object is safe for reuse as a data holder + */ + public void setData(byte[] data, byte userBits, int validLength, boolean isReusable) { + this.data = data; + this.userBits = userBits; + this.validLength = validLength; + this.isReusable = isReusable; + } + public void setChunkData(Chunk c, byte userBits) { + this.dataChunk = c; + this.userBits = userBits; + } +} diff --git a/gemfire-core/src/main/java/com/gemstone/gemfire/internal/cache/DiskEntry.java b/gemfire-core/src/main/java/com/gemstone/gemfire/internal/cache/DiskEntry.java new file mode 100644 index 000000000000..07d370b5a85a --- /dev/null +++ b/gemfire-core/src/main/java/com/gemstone/gemfire/internal/cache/DiskEntry.java @@ -0,0 +1,2027 @@ +/* + * 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 com.gemstone.gemfire.internal.cache; + +import java.io.IOException; +import java.nio.ByteBuffer; + +import org.apache.logging.log4j.Logger; + +import com.gemstone.gemfire.cache.CacheClosedException; +import com.gemstone.gemfire.cache.DiskAccessException; +import com.gemstone.gemfire.distributed.internal.DM; +import com.gemstone.gemfire.internal.Assert; +import com.gemstone.gemfire.internal.ByteArrayDataInput; +import com.gemstone.gemfire.internal.HeapDataOutputStream; +import com.gemstone.gemfire.internal.Version; +import com.gemstone.gemfire.internal.cache.DiskEntry.Helper.ValueWrapper; +import com.gemstone.gemfire.internal.cache.DiskStoreImpl.AsyncDiskEntry; +import com.gemstone.gemfire.internal.cache.lru.EnableLRU; +import com.gemstone.gemfire.internal.cache.lru.LRUClockNode; +import com.gemstone.gemfire.internal.cache.lru.LRUEntry; +import com.gemstone.gemfire.internal.cache.persistence.BytesAndBits; +import com.gemstone.gemfire.internal.cache.persistence.DiskRecoveryStore; +import com.gemstone.gemfire.internal.cache.persistence.DiskRegionView; +import com.gemstone.gemfire.internal.cache.versions.VersionStamp; +import com.gemstone.gemfire.internal.cache.versions.VersionTag; +import com.gemstone.gemfire.internal.i18n.LocalizedStrings; +import com.gemstone.gemfire.internal.logging.LogService; +import com.gemstone.gemfire.internal.offheap.Chunk; +import com.gemstone.gemfire.internal.offheap.OffHeapHelper; +import com.gemstone.gemfire.internal.offheap.ReferenceCountHelper; +import com.gemstone.gemfire.internal.offheap.Releasable; +import com.gemstone.gemfire.internal.offheap.UnsafeMemoryChunk; +import com.gemstone.gemfire.internal.offheap.StoredObject; +import com.gemstone.gemfire.internal.offheap.annotations.Released; +import com.gemstone.gemfire.internal.offheap.annotations.Retained; +import com.gemstone.gemfire.internal.offheap.annotations.Unretained; +import com.gemstone.gemfire.internal.util.BlobHelper; + +/** + * Represents an entry in an {@link RegionMap} whose value may be + * stored on disk. This interface provides accessor and mutator + * methods for a disk entry's state. This allows us to abstract all + * of the interesting behavior into a {@linkplain DiskEntry.Helper + * helper class} that we only need to implement once. + * + *

+ * + * Each DiskEntry has a unique id that is + * used by the {@link DiskRegion} to identify the key/value pair. + * Before the disk entry is written to disk, the value of the + * id is {@link DiskRegion#INVALID_ID invalid}. Once the + * object has been written to disk, the id is a positive + * number. If the value is {@linkplain Helper#update updated}, then the + * id is negated to signify that the value on disk is + * dirty. + * + * @see DiskRegion + * + * + * @since 3.2 + */ +public interface DiskEntry extends RegionEntry { + /** + * Sets the value with a {@link RegionEntryContext}. + * @param context the value's context. + * @param value an entry value. + */ + public void setValueWithContext(RegionEntryContext context,Object value); + + /** + * In some cases we need to do something just before we drop the value + * from a DiskEntry that is being moved (i.e. overflowed) to disk. + * @param context + */ + public void handleValueOverflow(RegionEntryContext context); + + /** + * In some cases we need to do something just after we unset the value + * from a DiskEntry that has been moved (i.e. overflowed) to disk. + * @param context + */ + public void afterValueOverflow(RegionEntryContext context); + + /** + * Returns true if the DiskEntry value is equal to {@link Token#DESTROYED}, {@link Token#REMOVED_PHASE1}, or {@link Token#REMOVED_PHASE2}. + */ + public boolean isRemovedFromDisk(); + + /** + * Returns the id of this DiskEntry + */ + public DiskId getDiskId(); + + public void _removePhase1(); + + public int updateAsyncEntrySize(EnableLRU capacityController); + + public DiskEntry getPrev(); + public DiskEntry getNext(); + public void setPrev(DiskEntry v); + public void setNext(DiskEntry v); + + /** + * Used as the entry value if it was invalidated. + */ + public static final byte[] INVALID_BYTES = new byte[0]; + /** + * Used as the entry value if it was locally invalidated. + */ + public static final byte[] LOCAL_INVALID_BYTES = new byte[0]; + /** + * Used as the entry value if it was tombstone. + */ + public static final byte[] TOMBSTONE_BYTES = new byte[0]; + + /////////////////////// Inner Classes ////////////////////// + + /** + * A Helper class for performing functions common to all + * DiskEntrys. + */ + public static class Helper { + private static final Logger logger = LogService.getLogger(); + + /** + * Testing purpose only + * Get the value of an entry that is on disk without faulting + * it in and without looking in the io buffer. + * @since 3.2.1 + */ + static Object getValueOnDisk(DiskEntry entry, DiskRegion dr) { + DiskId id = entry.getDiskId(); + if (id == null) { + return null; + } + dr.acquireReadLock(); + try { + synchronized (id) { + if (id == null + || (dr.isBackup() && id.getKeyId() == DiskRegion.INVALID_ID) + || (!entry.isValueNull() && id.needsToBeWritten() && !EntryBits.isRecoveredFromDisk(id.getUserBits()))/*fix for bug 41942*/) { + return null; + } + + return dr.getNoBuffer(id); + } + } finally { + dr.releaseReadLock(); + } + } + + /** + * Get the serialized value directly from disk. Returned object may be + * a {@link CachedDeserializable}. Goes straight to disk without faulting + * into memory. Only looks at the disk storage, not at heap storage. + * @param entry the entry used to identify the value to fetch + * @param dr the persistent storage from which to fetch the value + * @return either null, byte array, or CacheDeserializable + * @since gemfire57_hotfix + */ + public static Object getSerializedValueOnDisk( + DiskEntry entry, DiskRegion dr) { + DiskId did = entry.getDiskId(); + if (did == null) { + return null; + } + dr.acquireReadLock(); + try { + synchronized (did) { + if (did == null + || (dr.isBackup() && did.getKeyId() == DiskRegion.INVALID_ID)) { + return null; + } else if (!entry.isValueNull() && did.needsToBeWritten() && !EntryBits.isRecoveredFromDisk(did.getUserBits())/*fix for bug 41942*/) { + return null; + } + return dr.getSerializedData(did); + } + } finally { + dr.releaseReadLock(); + } + } + + + /** + * Get the value of an entry that is on disk without + * faulting it in . It checks for the presence in the buffer also. + * This method is used for concurrent map operations, SQLFabric and CQ processing + * + * @throws DiskAccessException + * @since 5.1 + */ + static Object getValueOnDiskOrBuffer(DiskEntry entry, DiskRegion dr, RegionEntryContext context) { + @Released Object v = getOffHeapValueOnDiskOrBuffer(entry, dr, context); + if (v instanceof CachedDeserializable) { + if (v instanceof Chunk) { + @Released Chunk ohv = (Chunk) v; + try { + v = ohv.getDeserializedValue(null, null); + if (v == ohv) { + throw new IllegalStateException("sqlf tried to use getValueOnDiskOrBuffer"); + } + } finally { + ohv.release(); // OFFHEAP the offheap ref is decremented here + } + } else { + v = ((CachedDeserializable)v).getDeserializedValue(null, null); + } + } + return v; + } + + @Retained + static Object getOffHeapValueOnDiskOrBuffer(DiskEntry entry, DiskRegion dr, RegionEntryContext context) { + DiskId did = entry.getDiskId(); + Object syncObj = did; + if (syncObj == null) { + syncObj = entry; + } + if (syncObj == did) { + dr.acquireReadLock(); + } + try { + synchronized (syncObj) { + if (did != null && did.isPendingAsync()) { + @Retained Object v = entry._getValueRetain(context, true); // TODO:KIRK:OK Rusty had Object v = entry.getValueWithContext(context); + if (Token.isRemovedFromDisk(v)) { + v = null; + } + return v; + } + if (did == null + || ( dr.isBackup() && did.getKeyId() == DiskRegion.INVALID_ID) + || (!entry.isValueNull() && did.needsToBeWritten() && !EntryBits.isRecoveredFromDisk(did.getUserBits()))/*fix for bug 41942*/) { + return null; + } + + return dr.getSerializedData(did); + } + } finally { + if (syncObj == did) { + dr.releaseReadLock(); + } + } + } + + /** + * Returns false if the entry is INVALID (or LOCAL_INVALID). Determines this + * without faulting in the value from disk. + * + * @since 3.2.1 + */ + /* TODO prpersist - Do we need this method? It was added by the sqlf merge + static boolean isValid(DiskEntry entry, DiskRegion dr) { + synchronized (entry) { + if (entry.isRecovered()) { + // We have a recovered entry whose value is still on disk. + // So take a peek at it without faulting it in. + //long id = entry.getDiskId().getKeyId(); + //entry.getDiskId().setKeyId(-id); + byte bits = dr.getBits(entry.getDiskId()); + //TODO Asif:Check if resetting is needed + return !EntryBits.isInvalid(bits) && !EntryBits.isLocalInvalid(bits); + } + } + }*/ + + static boolean isOverflowedToDisk(DiskEntry de, DiskRegion dr, DistributedRegion.DiskPosition dp,RegionEntryContext context) { + Object v = null; + DiskId did; + synchronized (de) { + did = de.getDiskId(); + } + Object syncObj = did; + if (syncObj == null) { + syncObj = de; + } + if (syncObj == did) { + dr.acquireReadLock(); + } + try { + synchronized (syncObj) { + if (de.isValueNull()) { + if (did == null) { + synchronized (de) { + did = de.getDiskId(); + } + assert did != null; + return isOverflowedToDisk(de, dr, dp, context); + } else { + dp.setPosition(did.getOplogId(), did.getOffsetInOplog()); + return true; + } + } else { + return false; + } + } + } finally { + if (syncObj == did) { + dr.releaseReadLock(); + } + } + } + + /** + * Get the value of an entry that is on disk without faulting + * it in. + * @since 3.2.1 + */ + static boolean fillInValue(DiskEntry de, InitialImageOperation.Entry entry, + DiskRegion dr, DM mgr, ByteArrayDataInput in, RegionEntryContext context) { + @Retained @Released Object v = null; + DiskId did; + synchronized (de) { + did = de.getDiskId(); + } + Object syncObj = did; + if (syncObj == null) { + syncObj = de; + } + if (syncObj == did) { + dr.acquireReadLock(); + } + try { + synchronized (syncObj) { + entry.setLastModified(mgr, de.getLastModified()); + + ReferenceCountHelper.setReferenceCountOwner(entry); + v = de._getValueRetain(context, true); // OFFHEAP copied to heap entry; todo allow entry to refer to offheap since it will be copied to network. + ReferenceCountHelper.setReferenceCountOwner(null); + if (v == null) { + if (did == null) { + // fix for bug 41449 + synchronized (de) { + did = de.getDiskId(); + } + assert did != null; + // do recursive call to get readLock on did + return fillInValue(de, entry, dr, mgr, in, context); + } + if (logger.isDebugEnabled()) { + logger.debug("DiskEntry.Helper.fillInValue, key={}; getting value from disk, disk id={}", entry.key, did); + } + BytesAndBits bb = null; + try { + bb = dr.getBytesAndBits(did, false); + }catch(DiskAccessException dae){ + return false; + } + if (EntryBits.isInvalid(bb.getBits())) { + entry.setInvalid(); + } + else if (EntryBits.isLocalInvalid(bb.getBits())) { + entry.setLocalInvalid(); + } + else if (EntryBits.isTombstone(bb.getBits())) { + entry.setTombstone(); + } + else { + entry.value = bb.getBytes(); + entry.setSerialized(EntryBits.isSerialized(bb.getBits())); + } + return true; + } + } + } finally { + if (syncObj == did) { + dr.releaseReadLock(); + } + } + final boolean isEagerDeserialize = entry.isEagerDeserialize(); + if (isEagerDeserialize) { + entry.clearEagerDeserialize(); + } + if (Token.isRemovedFromDisk(v)) { + // fix for bug 31757 + return false; + } else if (v instanceof CachedDeserializable) { + try { + if (v instanceof StoredObject && !((StoredObject) v).isSerialized()) { + entry.setSerialized(false); + entry.value = ((StoredObject) v).getDeserializedForReading(); + + //For SQLFire we prefer eager deserialized +// if(v instanceof ByteSource) { +// entry.setEagerDeserialize(); +// } + } else { + // don't serialize here if it is not already serialized + + Object tmp = ((CachedDeserializable)v).getValue(); + //For SQLFire we prefer eager deserialized +// if(v instanceof ByteSource) { +// entry.setEagerDeserialize(); +// } + if (tmp instanceof byte[]) { + byte[] bb = (byte[])tmp; + entry.value = bb; + entry.setSerialized(true); + } + else if (isEagerDeserialize && tmp instanceof byte[][]) { + // optimize for byte[][] since it will need to be eagerly deserialized + // for SQLFabric + entry.value = tmp; + entry.setEagerDeserialize(); + entry.setSerialized(true); + } + else { + try { + HeapDataOutputStream hdos = new HeapDataOutputStream(Version.CURRENT); + BlobHelper.serializeTo(tmp, hdos); + hdos.trim(); + entry.value = hdos; + entry.setSerialized(true); + } catch (IOException e) { + RuntimeException e2 = new IllegalArgumentException(LocalizedStrings.DiskEntry_AN_IOEXCEPTION_WAS_THROWN_WHILE_SERIALIZING.toLocalizedString()); + e2.initCause(e); + throw e2; + } + } + } + } finally { + // If v == entry.value then v is assumed to be an OffHeapByteSource + // and release() will be called on v after the bytes have been read from + // off-heap. + if (v != entry.value) { + OffHeapHelper.releaseWithNoTracking(v); + } + } + } + else if (v instanceof byte[]) { + entry.value = v; + entry.setSerialized(false); + } + else if (isEagerDeserialize && v instanceof byte[][]) { + // optimize for byte[][] since it will need to be eagerly deserialized + // for SQLFabric + entry.value = v; + entry.setEagerDeserialize(); + } + else if (v == Token.INVALID) { + entry.setInvalid(); + } + else if (v == Token.LOCAL_INVALID) { + // fix for bug 31107 + entry.setLocalInvalid(); + } else if (v == Token.TOMBSTONE) { + entry.setTombstone(); + } + else { + Object preparedValue = v; + if (preparedValue != null) { + preparedValue = AbstractRegionEntry.prepareValueForGII(preparedValue); + if (preparedValue == null) { + return false; + } + } + if (CachedDeserializableFactory.preferObject()) { + entry.value = preparedValue; + entry.setEagerDeserialize(); + } + else { + try { + HeapDataOutputStream hdos = new HeapDataOutputStream(Version.CURRENT); + BlobHelper.serializeTo(preparedValue, hdos); + hdos.trim(); + entry.value = hdos; + entry.setSerialized(true); + } catch (IOException e) { + RuntimeException e2 = new IllegalArgumentException(LocalizedStrings.DiskEntry_AN_IOEXCEPTION_WAS_THROWN_WHILE_SERIALIZING.toLocalizedString()); + e2.initCause(e); + throw e2; + } + } + } + return true; + } + + /** + * Used to initialize a new disk entry + */ + static void initialize(DiskEntry entry, DiskRecoveryStore r, Object newValue) { + DiskRegionView drv = null; + if (r instanceof LocalRegion) { + drv = ((LocalRegion)r).getDiskRegion(); + } else if (r instanceof DiskRegionView) { + drv = (DiskRegionView)r; + } + if (drv == null) { + throw new IllegalArgumentException(LocalizedStrings.DiskEntry_DISK_REGION_IS_NULL.toLocalizedString()); + } + + if (newValue == null || Token.isRemovedFromDisk(newValue)) { + // it is not in vm and it is not on disk + DiskId did = entry.getDiskId(); + if (did != null) { + did.setKeyId(DiskRegion.INVALID_ID); + } + } + else if (newValue instanceof RecoveredEntry) { + // Set the id directly, the value will also be set if RECOVER_VALUES + RecoveredEntry re = (RecoveredEntry)newValue; + DiskId did = entry.getDiskId(); + did.setOplogId(re.getOplogId()); + did.setOffsetInOplog(re.getOffsetInOplog()); + did.setKeyId(re.getRecoveredKeyId()); + did.setUserBits(re.getUserBits()); + did.setValueLength(re.getValueLength()); + if (re.getRecoveredKeyId() < 0) { + drv.incNumOverflowOnDisk(1L); + drv.incNumOverflowBytesOnDisk(did.getValueLength()); + incrementBucketStats(r, 0/*InVM*/, 1/*OnDisk*/, did.getValueLength()); + } + else { + entry.setValueWithContext(drv, entry.prepareValueForCache((RegionEntryContext) r, + re.getValue(), false)); + drv.incNumEntriesInVM(1L); + incrementBucketStats(r, 1/*InVM*/, 0/*OnDisk*/, 0); + } + } + else { + DiskId did = entry.getDiskId(); + if (did != null) { + did.setKeyId(DiskRegion.INVALID_ID); + } + drv.incNumEntriesInVM(1L); + incrementBucketStats(r, 1/*InVM*/, 0/*OnDisk*/, 0); + } + } + + private static final ValueWrapper INVALID_VW = new ByteArrayValueWrapper(true, INVALID_BYTES); + private static final ValueWrapper LOCAL_INVALID_VW = new ByteArrayValueWrapper(true, LOCAL_INVALID_BYTES); + private static final ValueWrapper TOMBSTONE_VW = new ByteArrayValueWrapper(true, TOMBSTONE_BYTES); + + public static interface ValueWrapper { + public boolean isSerialized(); + public int getLength(); + public byte getUserBits(); + public void sendTo(ByteBuffer bb, Flushable flushable) throws IOException; + public String getBytesAsString(); + } + public static interface Flushable { + public void flush() throws IOException; + + public void flush(ByteBuffer bb, ByteBuffer chunkbb) throws IOException; + } + public static class ByteArrayValueWrapper implements ValueWrapper { + public final boolean isSerializedObject; + public final byte[] bytes; + + public ByteArrayValueWrapper(boolean isSerializedObject, byte[] bytes) { + this.isSerializedObject = isSerializedObject; + this.bytes = bytes; + } + + @Override + public boolean isSerialized() { + return this.isSerializedObject; + } + + @Override + public int getLength() { + return (this.bytes != null) ? this.bytes.length : 0; + } + + private boolean isInvalidToken() { + return this == INVALID_VW; + } + + private boolean isLocalInvalidToken() { + return this == LOCAL_INVALID_VW; + } + + private boolean isTombstoneToken() { + return this == TOMBSTONE_VW; + } + + @Override + public byte getUserBits() { + byte userBits = 0x0; + if (isSerialized()) { + if (isTombstoneToken()) { + userBits = EntryBits.setTombstone(userBits, true); + } else if (isInvalidToken()) { + userBits = EntryBits.setInvalid(userBits, true); + } else if (isLocalInvalidToken()) { + userBits = EntryBits.setLocalInvalid(userBits, true); + } else { + if (this.bytes == null) { + throw new IllegalStateException("userBits==1 and value is null"); + } else if (this.bytes.length == 0) { + throw new IllegalStateException("userBits==1 and value is zero length"); + } + userBits = EntryBits.setSerialized(userBits, true); + } + } + return userBits; + } + + @Override + public void sendTo(ByteBuffer bb, Flushable flushable) throws IOException { + int offset = 0; + final int maxOffset = getLength(); + while (offset < maxOffset) { + int bytesThisTime = maxOffset - offset; + boolean needsFlush = false; + if (bytesThisTime > bb.remaining()) { + needsFlush = true; + bytesThisTime = bb.remaining(); + } + bb.put(this.bytes, offset, bytesThisTime); + offset += bytesThisTime; + if (needsFlush) { + flushable.flush(); + } + } + } + + @Override + public String getBytesAsString() { + if (this.bytes == null) { + return "null"; + } + StringBuffer sb = new StringBuffer(); + int len = getLength(); + for (int i = 0; i < len; i++) { + sb.append(this.bytes[i]).append(", "); + } + return sb.toString(); + } + } + + /** + * This class is a bit of a hack used by the compactor. + * For the compactor always copies to a byte[] so + * this class is just a simple wrapper. + * It is possible that the length of the byte array is greater + * than the actual length of the wrapped data. + * At the time we create this we are all done with isSerialized + * and userBits so those methods are not supported. + */ + public static class CompactorValueWrapper extends ByteArrayValueWrapper { + private final int length; + + public CompactorValueWrapper(byte[] bytes, int length) { + super(false, bytes); + this.length = length; + } + + @Override + public boolean isSerialized() { + throw new UnsupportedOperationException(); + } + + @Override + public int getLength() { + return this.length; + } + + @Override + public byte getUserBits() { + throw new UnsupportedOperationException(); + } + } + + /** + * Note that the Chunk this ValueWrapper is created with + * is unretained so it must be used before the owner of + * the chunk releases it. + * Since the RegionEntry that has the value we are writing to + * disk has it retained we are ok as long as this ValueWrapper's + * life ends before the RegionEntry sync is released. + * Note that this class is only used with uncompressed chunks. + */ + public static class ChunkValueWrapper implements ValueWrapper { + private final @Unretained Chunk chunk; + public ChunkValueWrapper(Chunk c) { + assert !c.isCompressed(); + this.chunk = c; + } + @Override + public boolean isSerialized() { + return this.chunk.isSerialized(); + } + @Override + public int getLength() { + return this.chunk.getDataSize(); + } + @Override + public byte getUserBits() { + byte userBits = 0x0; + if (isSerialized()) { + userBits = EntryBits.setSerialized(userBits, true); + } + return userBits; + } + @Override + public void sendTo(ByteBuffer bb, Flushable flushable) throws IOException { + final int maxOffset = getLength(); + if (maxOffset == 0) { + return; + } + if (maxOffset > bb.capacity()) { + ByteBuffer chunkbb = this.chunk.createDirectByteBuffer(); + if (chunkbb != null) { + flushable.flush(bb, chunkbb); + return; + } + } + final long bbAddress = Chunk.getDirectByteBufferAddress(bb); + if (bbAddress != 0L) { + int bytesRemaining = maxOffset; + int availableSpace = bb.remaining(); + long addrToWrite = bbAddress + bb.position(); + long addrToRead = this.chunk.getAddressForReading(0, maxOffset); + if (bytesRemaining > availableSpace) { + do { + UnsafeMemoryChunk.copyMemory(addrToRead, addrToWrite, availableSpace); + bb.position(bb.position()+availableSpace); + addrToRead += availableSpace; + bytesRemaining -= availableSpace; + flushable.flush(); + addrToWrite = bbAddress + bb.position(); + availableSpace = bb.remaining(); + } while (bytesRemaining > availableSpace); + } + UnsafeMemoryChunk.copyMemory(addrToRead, addrToWrite, bytesRemaining); + bb.position(bb.position()+bytesRemaining); + } else { + long addr = this.chunk.getAddressForReading(0, maxOffset); + final long endAddr = addr + maxOffset; + while (addr != endAddr) { + bb.put(UnsafeMemoryChunk.readAbsoluteByte(addr)); + addr++; + if (!bb.hasRemaining()) { + flushable.flush(); + } + } + } + } + @Override + public String getBytesAsString() { + return this.chunk.getStringForm(); + } + } + + public static ValueWrapper createValueWrapper(Object value, EntryEventImpl event) { + if (value == Token.INVALID) { + // even though it is not serialized we say it is because + // bytes will never be an empty array when it is serialized + // so that gives us a way to specify the invalid value + // given a byte array and a boolean flag. + return INVALID_VW; + } + else if (value == Token.LOCAL_INVALID) { + // even though it is not serialized we say it is because + // bytes will never be an empty array when it is serialized + // so that gives us a way to specify the local-invalid value + // given a byte array and a boolean flag. + return LOCAL_INVALID_VW; + } + else if (value == Token.TOMBSTONE) { + return TOMBSTONE_VW; + } + else { + boolean isSerializedObject = true; + byte[] bytes; + if (value instanceof CachedDeserializable) { + CachedDeserializable proxy = (CachedDeserializable)value; + if (proxy instanceof Chunk) { + return new ChunkValueWrapper((Chunk) proxy); + } + if (proxy instanceof StoredObject) { + StoredObject ohproxy = (StoredObject) proxy; + isSerializedObject = ohproxy.isSerialized(); + if (isSerializedObject) { + bytes = ohproxy.getSerializedValue(); + } else { + bytes = (byte[]) ohproxy.getDeserializedForReading(); + } + } else { + bytes = proxy.getSerializedValue(); + } + if (event != null && isSerializedObject) { + event.setCachedSerializedNewValue(bytes); + } + } + else if (value instanceof byte[]) { + isSerializedObject = false; + bytes = (byte[])value; + } + else { + Assert.assertTrue(!Token.isRemovedFromDisk(value)); + if (event != null && event.getCachedSerializedNewValue() != null) { + bytes = event.getCachedSerializedNewValue(); + } else { + bytes = EntryEventImpl.serialize(value); + if (bytes.length == 0) { + throw new IllegalStateException("serializing <" + value + "> produced empty byte array"); + } + if (event != null) { + event.setCachedSerializedNewValue(bytes); + } + } + } + return new ByteArrayValueWrapper(isSerializedObject, bytes); + } + } + public static ValueWrapper createValueWrapperFromEntry(DiskEntry entry, LocalRegion region, EntryEventImpl event) { + if (event != null) { + // For off-heap it should be faster to pass a reference to the + // StoredObject instead of using the cached byte[] (unless it is also compressed). + // Since NIO is used if the chunk of memory is large we can write it + // to the file with using the off-heap memory with no extra copying. + // So we give preference to getRawNewValue over getCachedSerializedNewValue + Object rawValue = null; + if (!event.hasDelta()) { + // We don't do this for the delta case because getRawNewValue returns delta + // and we want to write the entire new value to disk. + rawValue = event.getRawNewValue(); + if (rawValue instanceof Chunk) { + return new ChunkValueWrapper((Chunk) rawValue); + } + } + if (event.getCachedSerializedNewValue() != null) { + return new ByteArrayValueWrapper(true, event.getCachedSerializedNewValue()); + } + if (rawValue != null) { + return createValueWrapper(rawValue, event); + } + } + // TODO OFFHEAP: No need to retain since we hold the sync on entry but we need a flavor of _getValue that will decompress + @Retained Object value = entry._getValueRetain(region, true); + try { + return createValueWrapper(value, event); + } finally { + OffHeapHelper.release(value); + } + } + + private static void writeToDisk(DiskEntry entry, LocalRegion region, boolean async) throws RegionClearedException { + writeToDisk(entry, region, async, null); + } + + /** + * Writes the key/value object stored in the given entry to disk + * @throws RegionClearedException + * + * @see DiskRegion#put + */ + private static void writeToDisk(DiskEntry entry, LocalRegion region, boolean async, EntryEventImpl event) throws RegionClearedException { + writeBytesToDisk(entry, region, async, createValueWrapperFromEntry(entry, region, event)); + } + + private static void writeBytesToDisk(DiskEntry entry, LocalRegion region, boolean async, ValueWrapper vw) throws RegionClearedException { + // @todo does the following unmark need to be called when an async + // write is scheduled or is it ok for doAsyncFlush to do it? + entry.getDiskId().unmarkForWriting(); + region.getDiskRegion().put(entry, region, vw, async); + } + + public static void update(DiskEntry entry, LocalRegion region, Object newValue) throws RegionClearedException { + update(entry, region, newValue, null); + } + /** + * Updates the value of the disk entry with a new value. This allows us to + * free up disk space in the non-backup case. + * + * @throws RegionClearedException + */ + public static void update(DiskEntry entry, LocalRegion region, Object newValue, EntryEventImpl event) throws RegionClearedException { + DiskRegion dr = region.getDiskRegion(); + if (newValue == null) { + throw new NullPointerException(LocalizedStrings.DiskEntry_ENTRYS_VALUE_SHOULD_NOT_BE_NULL.toLocalizedString()); + } + + //If we have concurrency checks enabled for a persistent region, we need + //to add an entry to the async queue for every update to maintain the RVV + boolean maintainRVV = region.concurrencyChecksEnabled && dr.isBackup(); + + Token oldValue = null; + int oldValueLength = 0; + boolean scheduleAsync = false; + boolean callRemoveFromDisk = false; + DiskId did = entry.getDiskId(); + VersionTag tag = null; + Object syncObj = did; + if (syncObj == null) { + syncObj = entry; + } + if (syncObj == did) { + dr.acquireReadLock(); + } + try { + synchronized (syncObj) { + oldValue = entry.getValueAsToken(); + if (Token.isRemovedFromDisk(newValue)) { + if (dr.isBackup()) { + dr.testIsRecoveredAndClear(did); // fixes bug 41409 + } + RuntimeException rte = null; + try { + if (!Token.isRemovedFromDisk(oldValue)) { + // removeFromDisk takes care of oldValueLength + if (dr.isSync()) { + removeFromDisk(entry, region, false); + } else { + callRemoveFromDisk = true; // do it outside the sync + } + } + } catch (RuntimeException e) { + rte = e; + throw e; + } + finally { + if (rte != null && (rte instanceof CacheClosedException)) { + // 47616: not to set the value to be removedFromDisk since it failed to persist + } else { + // Asif Ensure that the value is rightly set despite clear so + // that it can be distributed correctly + entry.setValueWithContext(region, newValue); // OFFHEAP newValue was already preparedForCache + } + } + } + else if (newValue instanceof RecoveredEntry) { + // Now that oplog creates are immediately put in cache + // a later oplog modify will get us here + RecoveredEntry re = (RecoveredEntry)newValue; + long oldKeyId = did.getKeyId(); + long oldOplogId = did.getOplogId(); + long newOplogId = re.getOplogId(); + if (newOplogId != oldOplogId) { + did.setOplogId(newOplogId); + re.setOplogId(oldOplogId); // so caller knows oldoplog id + } + did.setOffsetInOplog(re.getOffsetInOplog()); + // id already set + did.setUserBits(re.getUserBits()); + oldValueLength = did.getValueLength(); + did.setValueLength(re.getValueLength()); + // The following undo and then do fixes bug 41849 + // First, undo the stats done for the previous recovered value + if (oldKeyId < 0) { + dr.incNumOverflowOnDisk(-1L); + dr.incNumOverflowBytesOnDisk(-oldValueLength); + incrementBucketStats(region, 0/*InVM*/, -1/*OnDisk*/, -oldValueLength); + } else { + dr.incNumEntriesInVM(-1L); + incrementBucketStats(region, -1/*InVM*/, 0/*OnDisk*/, 0); + } + // Second, do the stats done for the current recovered value + if (re.getRecoveredKeyId() < 0) { + if (!entry.isValueNull()) { + try { + entry.handleValueOverflow(region); + entry.setValueWithContext(region, null); // fixes bug 41119 + }finally { + entry.afterValueOverflow(region); + } + + } + dr.incNumOverflowOnDisk(1L); + dr.incNumOverflowBytesOnDisk(did.getValueLength()); + incrementBucketStats(region, 0/*InVM*/, 1/*OnDisk*/, + did.getValueLength()); + } else { + entry.setValueWithContext(region, entry.prepareValueForCache(region, re.getValue(), false)); + dr.incNumEntriesInVM(1L); + incrementBucketStats(region, 1/*InVM*/, 0/*OnDisk*/, 0); + } + } + else { + //The new value in the entry needs to be set after the disk writing + // has succeeded. If not , for GemFireXD , it is possible that other thread + // may pick this transient value from region entry ( which for + //offheap will eventually be released ) as index key, + //given that this operation is bound to fail in case of + //disk access exception. + + //entry.setValueWithContext(region, newValue); // OFFHEAP newValue already prepared + + if(did != null && did.isPendingAsync()) { + //if the entry was not yet written to disk, we didn't update + //the bytes on disk. + oldValueLength = 0; + } else { + oldValueLength = getValueLength(did); + } + + if (dr.isBackup()) { + dr.testIsRecoveredAndClear(did); // fixes bug 41409 + if (dr.isSync()) { + //In case of compression the value is being set first + // because atleast for now , GemFireXD does not support compression + // if and when it does support, this needs to be taken care of else + // we risk Bug 48965 + if (AbstractRegionEntry.isCompressible(dr, newValue)) { + entry.setValueWithContext(region, newValue); // OFFHEAP newValue already prepared + + // newValue is prepared and compressed. We can't write compressed values to disk. + writeToDisk(entry, region, false, event); + } else { + writeBytesToDisk(entry, region, false, createValueWrapper(newValue, event)); + entry.setValueWithContext(region, newValue); // OFFHEAP newValue already prepared + } + + } else if (did.isPendingAsync() && !maintainRVV) { + entry.setValueWithContext(region, newValue); // OFFHEAP newValue already prepared + + // nothing needs to be done except + // fixing up LRU stats + // @todo fixup LRU stats if needed + // I'm not sure anything needs to be done here. + // If we have overflow and it decided to evict this entry + // how do we handle that case when we are async? + // Seems like the eviction code needs to leave the value + // in memory until the pendingAsync is done. + } else { + //if the entry is not async, we need to schedule it + //for regions with concurrency checks enabled, we add an entry + //to the queue for every entry. + scheduleAsync = true; + did.setPendingAsync(true); + VersionStamp stamp = entry.getVersionStamp(); + if(stamp != null) { + tag = stamp.asVersionTag(); + } + entry.setValueWithContext(region, newValue); + } + } else if (did != null) { + entry.setValueWithContext(region, newValue); // OFFHEAP newValue already prepared + + // Mark the id as needing to be written + // The disk remove that this section used to do caused bug 30961 + // @todo this seems wrong. How does leaving it on disk fix the bug? + did.markForWriting(); + //did.setValueSerializedSize(0); + }else { + entry.setValueWithContext(region, newValue); + } + + if (Token.isRemovedFromDisk(oldValue)) { + // Note we now initialize entries removed and then set their + // value once we find no existing entry. + // So this is the normal path for a brand new entry. + dr.incNumEntriesInVM(1L); + incrementBucketStats(region, 1/*InVM*/, 0/*OnDisk*/, 0); + } + } + if (entry instanceof LRUEntry) { + LRUEntry le = (LRUEntry)entry; + boolean wasEvicted = le.testEvicted(); + le.unsetEvicted(); + if (!Token.isRemovedFromDisk(newValue)) { + if (oldValue == null + // added null check for bug 41759 + || wasEvicted && did != null && did.isPendingAsync()) { + // Note we do not append this entry because that will be + // done by lruEntryUpdate + dr.incNumEntriesInVM(1L); + dr.incNumOverflowOnDisk(-1L); + dr.incNumOverflowBytesOnDisk(-oldValueLength); + incrementBucketStats(region, 1/*InVM*/, -1/*OnDisk*/, -oldValueLength); + } + } + } + } + } finally { + if (syncObj == did) { + dr.releaseReadLock(); + } + } + if (callRemoveFromDisk) { + removeFromDisk(entry, region, false, oldValue == null, false); + } else if (scheduleAsync && did.isPendingAsync()) { + // this needs to be done outside the above sync + scheduleAsyncWrite(new AsyncDiskEntry(region, entry, tag)); + } + } + + private static int getValueLength(DiskId did) { + int result = 0; + if (did != null) { + synchronized (did) { + result = did.getValueLength(); + } + } + return result; + } + + public static void updateRecoveredEntry(PlaceHolderDiskRegion drv, + DiskEntry entry, + RecoveredEntry newValue,RegionEntryContext context) + { + if (newValue == null) { + throw new NullPointerException(LocalizedStrings.DiskEntry_ENTRYS_VALUE_SHOULD_NOT_BE_NULL.toLocalizedString()); + } + DiskId did = entry.getDiskId(); + synchronized (did) { + boolean oldValueWasNull = entry.isValueNull(); + int oldValueLength = did.getValueLength(); + // Now that oplog creates are immediately put in cache + // a later oplog modify will get us here + long oldOplogId = did.getOplogId(); + long newOplogId = newValue.getOplogId(); + if (newOplogId != oldOplogId) { + did.setOplogId(newOplogId); + newValue.setOplogId(oldOplogId); // so caller knows oldoplog id + } + did.setOffsetInOplog(newValue.getOffsetInOplog()); + // id already set + did.setUserBits(newValue.getUserBits()); + did.setValueLength(newValue.getValueLength()); + if (newValue.getRecoveredKeyId() >= 0) { + entry.setValueWithContext(context, entry.prepareValueForCache(drv, newValue.getValue(), + false)); + } else { + if (!oldValueWasNull) { + try { + entry.handleValueOverflow(context); + entry.setValueWithContext(context,null); // fixes bug 41119 + }finally { + entry.afterValueOverflow(context); + } + } + } + if (entry instanceof LRUEntry) { + LRUEntry le = (LRUEntry)entry; + assert !le.testEvicted(); + // we don't allow eviction during recovery + if (oldValueWasNull) { + // Note we do not append this entry because that will be + // done by lruEntryUpdate + drv.incNumEntriesInVM(1L); + drv.incNumOverflowOnDisk(-1L); + drv.incNumOverflowBytesOnDisk(-oldValueLength); + //No need to call incrementBucketStats here because we don't have + //a real bucket region, this is during recovery from disk. + } + } + } + } + + public static Object getValueInVMOrDiskWithoutFaultIn(DiskEntry entry, LocalRegion region) { + Object result = OffHeapHelper.copyAndReleaseIfNeeded(getValueOffHeapOrDiskWithoutFaultIn(entry, region)); + if (result instanceof CachedDeserializable) { + result = ((CachedDeserializable)result).getDeserializedValue(null, null); + } + if (result instanceof StoredObject) { + ((StoredObject) result).release(); + throw new IllegalStateException("sqlf tried to use getValueInVMOrDiskWithoutFaultIn"); + } + return result; + } + + @Retained + public static Object getValueOffHeapOrDiskWithoutFaultIn(DiskEntry entry, LocalRegion region) { + @Retained Object v = entry._getValueRetain(region, true); // TODO:KIRK:OK Object v = entry.getValueWithContext(region); + if (v == null || Token.isRemovedFromDisk(v) + && !region.isIndexCreationThread()) { + synchronized (entry) { + v = entry._getValueRetain(region, true); // TODO:KIRK:OK v = entry.getValueWithContext(region); + if (v == null) { + v = Helper.getOffHeapValueOnDiskOrBuffer(entry, region.getDiskRegion(),region); + } + } + } + if (Token.isRemovedFromDisk(v)) { + // fix for bug 31800 + v = null; +// } else if (v instanceof ByteSource) { +// // If the ByteSource contains a Delta or ListOfDelta then we want to deserialize it +// Object deserVal = ((CachedDeserializable)v).getDeserializedForReading(); +// if (deserVal != v) { +// OffHeapHelper.release(v); +// v = deserVal; +// } + } + return v; + } + + /** + * + * @param entry + * @param region + * @return Value + * @throws DiskAccessException + */ + public static Object faultInValue(DiskEntry entry, LocalRegion region) { + return faultInValue(entry, region, false); + } + @Retained + public static Object faultInValueRetain(DiskEntry entry, LocalRegion region) { + return faultInValue(entry, region, true); + } + /** + * @param retainResult if true then the result may be a retained off-heap reference + */ + @Retained + private static Object faultInValue(DiskEntry entry, LocalRegion region, boolean retainResult) + { + DiskRegion dr = region.getDiskRegion(); + @Retained Object v = entry._getValueRetain(region, true); // TODO:KIRK:OK Object v = entry.getValueWithContext(region); + boolean lruFaultedIn = false; + boolean done = false; + try { + //Asif: If the entry is instance of LRU then DidkRegion cannot be null. + //Since SqlFabric is accessing this method direcly & it passes the owning region, + //if the region happens to be persistent PR type, the owning region passed is PR, + // but it will have DiskRegion as null. SqlFabric takes care of passing owning region + // as BucketRegion in case of Overflow type entry. This is fix for Bug # 41804 + if ( entry instanceof LRUEntry && !dr.isSync() ) { + synchronized (entry) { + DiskId did = entry.getDiskId(); + if (did != null && did.isPendingAsync()) { + done = true; + // See if it is pending async because of a faultOut. + // If so then if we are not a backup then we can unschedule the pending async. + // In either case we need to do the lruFaultIn logic. + boolean evicted = ((LRUEntry)entry).testEvicted(); + if (evicted) { + if (!dr.isBackup()) { + // @todo do we also need a bit that tells us if it is in the async queue? + // Seems like we could end up adding it to the queue multiple times. + did.setPendingAsync(false); + } + // since it was evicted fix the stats here + dr.incNumEntriesInVM(1L); + dr.incNumOverflowOnDisk(-1L); + // no need to dec overflowBytesOnDisk because it was not inced in this case. + incrementBucketStats(region, 1/*InVM*/, -1/*OnDisk*/, 0); + } + lruEntryFaultIn((LRUEntry) entry, region); + lruFaultedIn = true; + } + } + } + if (!done + && (v == null || Token.isRemovedFromDisk(v) && !region.isIndexCreationThread())) { + synchronized (entry) { + v = entry._getValueRetain(region, true); // TODO:KIRK:OK v = entry.getValueWithContext(region); + if (v == null) { + v = readValueFromDisk(entry, region); + if (entry instanceof LRUEntry) { + if (v != null && !Token.isInvalid(v)) { + lruEntryFaultIn((LRUEntry) entry, region); + + lruFaultedIn = true; + } + } + } + } + } + } finally { + if (!retainResult) { + v = OffHeapHelper.copyAndReleaseIfNeeded(v); + // At this point v should be either a heap object + } + } + if (Token.isRemoved(v)) { + // fix for bug 31800 + v = null; + } else { + ((RegionEntry)entry).setRecentlyUsed(); + } + if (lruFaultedIn) { + lruUpdateCallback(region); + } + return v; // OFFHEAP: the value ends up being returned by RegionEntry.getValue + } + + public static void recoverValue(DiskEntry entry, long oplogId, DiskRecoveryStore recoveryStore, ByteArrayDataInput in) { + boolean lruFaultedIn = false; + synchronized (entry) { + if (entry.isValueNull()) { + DiskId did = entry.getDiskId(); + if (did != null) { + Object value = null; + DiskRecoveryStore region = recoveryStore; + DiskRegionView dr = region.getDiskRegionView(); + dr.acquireReadLock(); + try { + synchronized (did) { + // don't read if the oplog has changed. + if (oplogId == did.getOplogId()) { + value = getValueFromDisk(dr, did, in); + if (value != null) { + setValueOnFaultIn(value, did, entry, dr, region); + } + } + } + } finally { + dr.releaseReadLock(); + } + if (entry instanceof LRUEntry) { + if (value != null && !Token.isInvalid(value)) { + lruEntryFaultIn((LRUEntry) entry, recoveryStore); + lruFaultedIn = true; + } + } + } + } + } + if (lruFaultedIn) { + lruUpdateCallback(recoveryStore); + } + } + + /** + * Caller must have "did" synced. + */ + private static Object getValueFromDisk(DiskRegionView dr, DiskId did, ByteArrayDataInput in) { + Object value; + if (dr.isBackup() && did.getKeyId() == DiskRegion.INVALID_ID) { + // must have been destroyed + value = null; + } else { + if (did.isKeyIdNegative()) { + did.setKeyId(- did.getKeyId()); + } + // if a bucket region then create a CachedDeserializable here instead of object + value = dr.getRaw(did); // fix bug 40192 + if (value instanceof BytesAndBits) { + BytesAndBits bb = (BytesAndBits)value; + if (EntryBits.isInvalid(bb.getBits())) { + value = Token.INVALID; + } else if (EntryBits.isLocalInvalid(bb.getBits())) { + value = Token.LOCAL_INVALID; + } else if (EntryBits.isTombstone(bb.getBits())) { + value = Token.TOMBSTONE; + } else if (EntryBits.isSerialized(bb.getBits())) { + value = readSerializedValue(bb.getBytes(), bb.getVersion(), in, false); + } else { + value = readRawValue(bb.getBytes(), bb.getVersion(), in); + } + } + } + return value; + } + + private static void lruUpdateCallback(DiskRecoveryStore recoveryStore) { + /* + * Used conditional check to see if + * if its a LIFO Enabled, + * yes then disable lruUpdateCallback() + * and called updateStats() + * its keep track of actual entries + * present in memory - useful when + * checking capacity constraint + */ + try { + if (recoveryStore.getEvictionAttributes() != null + && recoveryStore.getEvictionAttributes().getAlgorithm().isLIFO()) { + ((VMLRURegionMap) recoveryStore.getRegionMap()).updateStats(); + return; + } + // this must be done after releasing synchronization + recoveryStore.getRegionMap().lruUpdateCallback(); + }catch( DiskAccessException dae) { + recoveryStore.handleDiskAccessException(dae); + throw dae; + } + } + + private static void lruEntryFaultIn(LRUEntry entry, DiskRecoveryStore recoveryStore) { + RegionMap rm = (RegionMap)recoveryStore.getRegionMap(); + try { + rm.lruEntryFaultIn((LRUEntry) entry); + }catch(DiskAccessException dae) { + recoveryStore.handleDiskAccessException(dae); + throw dae; + } + } + + /** + * Returns the value of this map entry, reading it from disk, if necessary. + * Sets the value in the entry. + * This is only called by the faultIn code once it has determined that + * the value is no longer in memory. + * return the result will only be off-heap if the value is a sqlf ByteSource. Otherwise result will be on-heap. + * Caller must have "entry" synced. + */ + @Retained + private static Object readValueFromDisk(DiskEntry entry, DiskRecoveryStore region) { + + DiskRegionView dr = region.getDiskRegionView(); + DiskId did = entry.getDiskId(); + if (did == null) { + return null; + } + dr.acquireReadLock(); + try { + synchronized (did) { + Object value = getValueFromDisk(dr, did, null); + if (value == null) return null; + @Unretained Object preparedValue = setValueOnFaultIn(value, did, entry, dr, region); + // For Sqlfire we want to return the offheap representation. + // So we need to retain it for the caller to release. + /*if (preparedValue instanceof ByteSource) { + // This is the only case in which we return a retained off-heap ref. + ((ByteSource)preparedValue).retain(); + return preparedValue; + } else */{ + return value; + } + } + } finally { + dr.releaseReadLock(); + } + } + + /** + * Caller must have "entry" and "did" synced and "dr" readLocked. + * @return the unretained result must be used by the caller before it releases the sync on "entry". + */ + @Unretained + private static Object setValueOnFaultIn(Object value, DiskId did, DiskEntry entry, DiskRegionView dr, DiskRecoveryStore region) { +// dr.getOwner().getCache().getLogger().info("DEBUG: faulting in entry with key " + entry.getKey()); + int bytesOnDisk = getValueLength(did); + // Retained by the prepareValueForCache call for the region entry. + // NOTE that we return this value unretained because the retain is owned by the region entry not the caller. + @Retained Object preparedValue = entry.prepareValueForCache((RegionEntryContext) region, value, + false); + region.updateSizeOnFaultIn(entry.getKey(), region.calculateValueSize(preparedValue), bytesOnDisk); + //did.setValueSerializedSize(0); + // I think the following assertion is true but need to run + // a regression with it. Reenable this post 6.5 + //Assert.assertTrue(entry._getValue() == null); + entry.setValueWithContext((RegionEntryContext) region, preparedValue); + dr.incNumEntriesInVM(1L); + dr.incNumOverflowOnDisk(-1L); + dr.incNumOverflowBytesOnDisk(-bytesOnDisk); + incrementBucketStats(region, 1/*InVM*/, -1/*OnDisk*/, -bytesOnDisk); + return preparedValue; + } + + static Object readSerializedValue(byte[] valueBytes, Version version, + ByteArrayDataInput in, boolean forceDeserialize) { + if (forceDeserialize) { + // deserialize checking for product version change + return EntryEventImpl.deserialize(valueBytes, version, in); + } + else { + // TODO: upgrades: is there a case where GemFire values are internal + // ones that need to be upgraded transparently; probably messages + // being persisted (gateway events?) + return CachedDeserializableFactory.create(valueBytes); + } + } + + static Object readRawValue(byte[] valueBytes, Version version, + ByteArrayDataInput in) { + /* + final StaticSystemCallbacks sysCb; + if (version != null && (sysCb = GemFireCacheImpl.FactoryStatics + .systemCallbacks) != null) { + // may need to change serialized shape for SQLFire + return sysCb.fromVersion(valueBytes, false, version, in); + } + else */ { + return valueBytes; + } + } + + public static void incrementBucketStats(Object owner, + int entriesInVmDelta, + int overflowOnDiskDelta, + int overflowBytesOnDiskDelta) { + if (owner instanceof BucketRegion) { + ((BucketRegion)owner).incNumEntriesInVM(entriesInVmDelta); + ((BucketRegion)owner).incNumOverflowOnDisk(overflowOnDiskDelta); + ((BucketRegion)owner).incNumOverflowBytesOnDisk(overflowBytesOnDiskDelta); + } else if (owner instanceof DiskRegionView) { + ((DiskRegionView)owner).incNumOverflowBytesOnDisk(overflowBytesOnDiskDelta); + } + } + + /** + * Writes the value of this DiskEntry to disk and + * null s out the reference to the value to free up VM space. + *

+ * Note that if the value had already been written to disk, it is not + * written again. + *

+ * Caller must synchronize on entry and it is assumed the entry is evicted + * + * see #writeToDisk + * @throws RegionClearedException + */ + public static int overflowToDisk(DiskEntry entry, LocalRegion region, EnableLRU ccHelper) throws RegionClearedException { + { + Token entryVal = entry.getValueAsToken(); + if (entryVal == null || Token.isRemovedFromDisk(entryVal)) { + // Note it could be removed token now because + // freeAllEntriesOnDisk is not able to sync on entry + return 0; + } + } + DiskRegion dr = region.getDiskRegion(); + final int oldSize = region.calculateRegionEntryValueSize(entry);; + //Asif:Get diskID . If it is null, it implies it is + // overflow only mode. + //long id = entry.getDiskId().getKeyId(); + DiskId did = entry.getDiskId(); + if (did == null) { + ((LRUEntry)entry).setDelayedDiskId(region); + did = entry.getDiskId(); + } + + // Notify the SQLFire IndexManager if present + /* final IndexUpdater indexUpdater = region.getIndexUpdater(); + if(indexUpdater != null && dr.isSync()) { + indexUpdater.onOverflowToDisk(entry); + }*/ + + int change = 0; + boolean scheduledAsyncHere = false; + dr.acquireReadLock(); + try { + synchronized (did) { + // check for a concurrent freeAllEntriesOnDisk + if (entry.isRemovedFromDisk()) { + return 0; + } + + //TODO:Asif: Check if we need to overflow even when id is = 0 + boolean wasAlreadyPendingAsync = did.isPendingAsync(); + if (did.needsToBeWritten()) { + if (dr.isSync()) { + writeToDisk(entry, region, false); + } else if (!wasAlreadyPendingAsync) { + scheduledAsyncHere = true; + did.setPendingAsync(true); + } else { + // it may have been scheduled to be written (isBackup==true) + // and now we are faulting it out + } + } + + boolean movedValueToDisk = false; // added for bug 41849 + + // If async then if it does not need to be written (because it already was) + // then treat it like the sync case. This fixes bug 41310 + if (scheduledAsyncHere || wasAlreadyPendingAsync) { + // we call _setValue(null) after it is actually written to disk + change = entry.updateAsyncEntrySize(ccHelper); + // do the stats when it is actually written to disk + } else { + region.updateSizeOnEvict(entry.getKey(), oldSize); + //did.setValueSerializedSize(byteSizeOnDisk); + try { + entry.handleValueOverflow(region); + entry.setValueWithContext(region,null); + }finally { + entry.afterValueOverflow(region); + } + movedValueToDisk = true; + change = ((LRUClockNode)entry).updateEntrySize(ccHelper); + } + int valueLength = 0; + if (movedValueToDisk) { + valueLength = getValueLength(did); + } + dr.incNumEntriesInVM(-1L); + dr.incNumOverflowOnDisk(1L); + dr.incNumOverflowBytesOnDisk(valueLength); + incrementBucketStats(region, -1/*InVM*/, 1/*OnDisk*/, valueLength); + } + } finally { + dr.releaseReadLock(); + } + if (scheduledAsyncHere && did.isPendingAsync()) { + // this needs to be done outside the above sync + // the version tag is null here because this method only needs + // to write to disk for overflow only regions, which do not need + // to maintain an RVV on disk. + scheduleAsyncWrite(new AsyncDiskEntry(region, entry, null)); + } + return change; + } + + private static void scheduleAsyncWrite(AsyncDiskEntry ade) { + DiskRegion dr = ade.region.getDiskRegion(); + dr.scheduleAsyncWrite(ade); + } + + + public static void handleFullAsyncQueue(DiskEntry entry, LocalRegion region, VersionTag tag) { + DiskRegion dr = region.getDiskRegion(); + DiskId did = entry.getDiskId(); + synchronized (entry) { + dr.acquireReadLock(); + try { + synchronized (did) { + if (did.isPendingAsync()) { + did.setPendingAsync(false); + final Token entryVal = entry.getValueAsToken(); + final int entryValSize = region.calculateRegionEntryValueSize(entry); + boolean remove = false; + try { + if (Token.isRemovedFromDisk(entryVal)) { + // onDisk was already deced so just do the valueLength here + dr.incNumOverflowBytesOnDisk(-did.getValueLength()); + incrementBucketStats(region, 0/*InVM*/, 0/*OnDisk*/, + -did.getValueLength()); + dr.remove(region, entry, true, false); + if (dr.isBackup()) { + did.setKeyId(DiskRegion.INVALID_ID); // fix for bug 41340 + } + remove = true; + } else if (Token.isInvalid(entryVal) && !dr.isBackup()) { + // no need to write invalid to disk if overflow only + } else if (entryVal != null) { + writeToDisk(entry, region, true); + } else { + //if we have a version tag we need to record the operation + //to update the RVV + if(tag != null) { + DiskEntry.Helper.doAsyncFlush(tag, region); + } + return; + } + assert !dr.isSync(); + // Only setValue to null if this was an evict. + // We could just be a backup that is writing async. + if (!remove + && !Token.isInvalid(entryVal) + && entry instanceof LRUEntry + && ((LRUEntry)entry).testEvicted()) { + // Moved this here to fix bug 40116. + region.updateSizeOnEvict(entry.getKey(), entryValSize); + // note the old size was already accounted for + // onDisk was already inced so just do the valueLength here + dr.incNumOverflowBytesOnDisk(did.getValueLength()); + incrementBucketStats(region, 0/*InVM*/, 0/*OnDisk*/, + did.getValueLength()); + try { + entry.handleValueOverflow(region); + entry.setValueWithContext(region,null); + }finally { + entry.afterValueOverflow(region); + } + } + + //See if we the entry we wrote to disk has the same tag + //as this entry. If not, write the tag as a conflicting operation. + //to update the RVV. + VersionStamp stamp = entry.getVersionStamp(); + if(tag != null && stamp != null + && (stamp.getMemberID() != tag.getMemberID() + || stamp.getRegionVersion() != tag.getRegionVersion())) { + DiskEntry.Helper.doAsyncFlush(tag, region); + } + } catch (RegionClearedException ignore) { + // no need to do the op since it was clobbered by a region clear + } + } else { + //if we have a version tag we need to record the operation + //to update the RVV, even if we don't write the entry + if(tag != null) { + DiskEntry.Helper.doAsyncFlush(tag, region); + } + } + } + } finally { + dr.releaseReadLock(); + } + } // sync entry + } + + public static void doAsyncFlush(VersionTag tag, LocalRegion region) { + if (region.isThisRegionBeingClosedOrDestroyed()) return; + DiskRegion dr = region.getDiskRegion(); + if (!dr.isBackup()) { + return; + } + assert !dr.isSync(); + dr.acquireReadLock(); + try { + dr.getDiskStore().putVersionTagOnly(region, tag, true); + } finally { + dr.releaseReadLock(); + } + } + + /** + * Flush an entry that was previously scheduled to be written to disk. + * @param tag + * @since prPersistSprint1 + */ + public static void doAsyncFlush(DiskEntry entry, LocalRegion region, VersionTag tag) { + if (region.isThisRegionBeingClosedOrDestroyed()) return; + DiskRegion dr = region.getDiskRegion(); + dr.setClearCountReference(); + synchronized (entry) { // fixes 40116 + // If I don't sync the entry and this method ends up doing an eviction + // thus setting value to null + // some other thread is free to fetch the value while the entry is synced + // and think it has removed it or replaced it. This results in updateSizeOn* + // being called twice for the same value (once when it is evicted and once + // when it is removed/updated). + try { + dr.acquireReadLock(); + try { + DiskId did = entry.getDiskId(); + synchronized (did) { + if (did.isPendingAsync()) { + did.setPendingAsync(false); + final Token entryVal = entry.getValueAsToken(); + final int entryValSize = region.calculateRegionEntryValueSize(entry); + boolean remove = false; + try { + if (Token.isRemovedFromDisk(entryVal)) { + if (region.isThisRegionBeingClosedOrDestroyed()) return; + // onDisk was already deced so just do the valueLength here + dr.incNumOverflowBytesOnDisk(-did.getValueLength()); + incrementBucketStats(region, 0/*InVM*/, 0/*OnDisk*/, + -did.getValueLength()); + dr.remove(region, entry, true, false); + if (dr.isBackup()) { + did.setKeyId(DiskRegion.INVALID_ID); // fix for bug 41340 + } + remove = true; + } else if ((Token.isInvalid(entryVal) || entryVal == Token.TOMBSTONE) && !dr.isBackup()) { + // no need to write invalid or tombstones to disk if overflow only + } else if (entryVal != null) { + writeToDisk(entry, region, true); + } else { + // @todo why would we have a null value here? + // I'm seeing it show up in tests: +// java.lang.IllegalArgumentException: Must not serialize null in this context. +// at com.gemstone.gemfire.internal.cache.EntryEventImpl.serialize(EntryEventImpl.java:1024) +// at com.gemstone.gemfire.internal.cache.DiskEntry$Helper.writeToDisk(DiskEntry.java:351) +// at com.gemstone.gemfire.internal.cache.DiskEntry$Helper.doAsyncFlush(DiskEntry.java:683) +// at com.gemstone.gemfire.internal.cache.DiskRegion$FlusherThread.run(DiskRegion.java:1055) + //if we have a version tag we need to record the operation + //to update the RVV + if(tag != null) { + DiskEntry.Helper.doAsyncFlush(tag, region); + } + return; + } + assert !dr.isSync(); + // Only setValue to null if this was an evict. + // We could just be a backup that is writing async. + if (!remove + && !Token.isInvalid(entryVal) + && (entryVal != Token.TOMBSTONE) + && entry instanceof LRUEntry + && ((LRUEntry)entry).testEvicted()) { + // Moved this here to fix bug 40116. + region.updateSizeOnEvict(entry.getKey(), entryValSize); + // note the old size was already accounted for + // onDisk was already inced so just do the valueLength here + dr.incNumOverflowBytesOnDisk(did.getValueLength()); + incrementBucketStats(region, 0/*InVM*/, 0/*OnDisk*/, + did.getValueLength()); + try { + entry.handleValueOverflow(region); + entry.setValueWithContext(region,null); + }finally { + entry.afterValueOverflow(region); + } + } + } catch (RegionClearedException ignore) { + // no need to do the op since it was clobbered by a region clear + } + + //See if we the entry we wrote to disk has the same tag + //as this entry. If not, write the tag as a conflicting operation. + //to update the RVV. + VersionStamp stamp = entry.getVersionStamp(); + if(tag != null && stamp != null + && (stamp.getMemberID() != tag.getMemberID() + || stamp.getRegionVersion() != tag.getRegionVersion())) { + DiskEntry.Helper.doAsyncFlush(tag, region); + } + } else { + //if we have a version tag we need to record the operation + //to update the RVV + if(tag != null) { + DiskEntry.Helper.doAsyncFlush(tag, region); + } + } + } + } finally { + dr.releaseReadLock(); + } + } finally { + dr.removeClearCountReference(); + } + } // sync entry + } + + /** + * Removes the key/value pair in the given entry from disk + * + * @throws RegionClearedException If the operation is aborted due to a clear + * @see DiskRegion#remove + */ + public static void removeFromDisk(DiskEntry entry, LocalRegion region, boolean isClear) throws RegionClearedException { + removeFromDisk(entry, region, true, false, isClear); + } + private static void removeFromDisk(DiskEntry entry, LocalRegion region, + boolean checkValue, boolean valueWasNull, boolean isClear) throws RegionClearedException { + DiskRegion dr = region.getDiskRegion(); + + //If we have concurrency checks enabled for a persistent region, we need + //to add an entry to the async queue for every update to maintain the RVV + boolean maintainRVV = region.concurrencyChecksEnabled && dr.isBackup(); + + DiskId did = entry.getDiskId(); + VersionTag tag = null; + Object syncObj = did; + if (did == null) { + syncObj = entry; + } + boolean scheduledAsyncHere = false; + if (syncObj == did) { + dr.acquireReadLock(); + } + try { + synchronized (syncObj) { + + if (did == null || (dr.isBackup() && did.getKeyId()== DiskRegion.INVALID_ID)) { + // Not on disk yet + dr.incNumEntriesInVM(-1L); + incrementBucketStats(region, -1/*InVM*/, 0/*OnDisk*/, 0); + dr.unscheduleAsyncWrite(did); + return; + } + //Asif: This will convert the -ve OplogKeyId to positive as part of fixing + //Bug # 39989 + did.unmarkForWriting(); + + //System.out.println("DEBUG: removeFromDisk doing remove(" + id + ")"); + int oldValueLength = 0; + if (dr.isSync() || isClear) { + oldValueLength = did.getValueLength(); + dr.remove(region, entry, false, isClear); + if (dr.isBackup()) { + did.setKeyId(DiskRegion.INVALID_ID); // fix for bug 41340 + } + //If this is a clear, we should unschedule the async write for this + //entry + did.setPendingAsync(false); + } else { + if (!did.isPendingAsync() || maintainRVV) { + scheduledAsyncHere = true; + did.setPendingAsync(true); + VersionStamp stamp = entry.getVersionStamp(); + if(stamp != null) { + tag = stamp.asVersionTag(); + } + } + } + if (checkValue) { + valueWasNull = entry.isValueNull(); + entry._removePhase1(); + } + if (valueWasNull) { + dr.incNumOverflowOnDisk(-1L); + dr.incNumOverflowBytesOnDisk(-oldValueLength); + incrementBucketStats(region, 0/*InVM*/, -1/*OnDisk*/, -oldValueLength); + } + else { + dr.incNumEntriesInVM(-1L); + incrementBucketStats(region, -1/*InVM*/, 0/*OnDisk*/, 0); + if (!dr.isSync()) { + // we are going to do an async remove of an entry that is not currently + // overflowed to disk so we don't want to count its value length as being + // on disk when we finally do the async op. So we clear it here. + did.setValueLength(0); + } + } + } + } finally { + if (syncObj == did) { + dr.releaseReadLock(); + } + } + if (scheduledAsyncHere && did.isPendingAsync()) { + // do this outside the sync + scheduleAsyncWrite(new AsyncDiskEntry(region, entry, tag)); + } + } + + /** + * @param entry + * @param region + * @param tag + */ + public static void updateVersionOnly(DiskEntry entry, LocalRegion region, + VersionTag tag) { + DiskRegion dr = region.getDiskRegion(); + if (!dr.isBackup()) { + return; + } + + assert tag != null && tag.getMemberID()!=null; + boolean scheduleAsync = false; + DiskId did = entry.getDiskId(); + Object syncObj = did; + if (syncObj == null) { + syncObj = entry; + } + if (syncObj == did) { + dr.acquireReadLock(); + } + try { + synchronized (syncObj) { + if (dr.isSync()) { + dr.getDiskStore().putVersionTagOnly(region, tag, false); + } else { + scheduleAsync = true; + } + } + } finally { + if (syncObj == did) { + dr.releaseReadLock(); + } + } + if (scheduleAsync) { + // this needs to be done outside the above sync + scheduleAsyncWrite(new AsyncDiskEntry(region, tag)); + } + } + + } + + /** + * A marker object for an entry that has been recovered from disk. + * It is handled specially when it is placed in a region. + */ + public static class RecoveredEntry { + + /** The disk id of the entry being recovered */ + private final long recoveredKeyId; + + /** The value of the recovered entry */ + private final Object value; + + private final long offsetInOplog; + private final byte userBits; + private final int valueLength; + + private long oplogId; + private VersionTag tag; + + /** + * Only for this constructor, the value is not loaded into the region & it is lying + * on the oplogs. Since Oplogs rely on DiskId to furnish user bits so as to correctly + * interpret bytes, the userbit needs to be set correctly here. + */ + public RecoveredEntry(long keyId, long oplogId, long offsetInOplog, + byte userBits, int valueLength) { + this(-keyId, oplogId, offsetInOplog, userBits, valueLength, null); + } + + public RecoveredEntry(long keyId, long oplogId, long offsetInOplog, + byte userBits, int valueLength, Object value) { + this.recoveredKeyId = keyId; + this.value = value; + this.oplogId = oplogId; + this.offsetInOplog = offsetInOplog; + this.userBits = EntryBits.setRecoveredFromDisk(userBits, true); + this.valueLength = valueLength; + } + + /** + * Returns the disk id of the entry being recovered + */ + public long getRecoveredKeyId() { + return this.recoveredKeyId; + } + /** + * Returns the value of the recovered entry. Note that if the + * disk id is < 0 then the value has not been faulted in and + * this method will return null. + */ + public Object getValue() { + return this.value; + } + /** + * + * @return byte indicating the user bits. The correct value is returned only in the specific case of + * entry recovered from oplog ( & not rolled to Htree) & the RECOVER_VALUES flag is false . In other cases + * the exact value is not needed + */ + public byte getUserBits() { + return this.userBits; + } + public int getValueLength() { + return this.valueLength; + } + public long getOffsetInOplog() { + return offsetInOplog; + } + public long getOplogId() { + return this.oplogId; + } + + public void setOplogId(long v) { + this.oplogId = v; + } + public VersionTag getVersionTag() { + return this.tag; + } + public void setVersionTag(VersionTag tag) { + this.tag = tag; + } + } +} diff --git a/gemfire-core/src/main/java/com/gemstone/gemfire/internal/cache/DistributedRegion.java b/gemfire-core/src/main/java/com/gemstone/gemfire/internal/cache/DistributedRegion.java new file mode 100644 index 000000000000..fcfc2f333cf2 --- /dev/null +++ b/gemfire-core/src/main/java/com/gemstone/gemfire/internal/cache/DistributedRegion.java @@ -0,0 +1,4309 @@ +/* + * 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 com.gemstone.gemfire.internal.cache; + +import static com.gemstone.gemfire.internal.offheap.annotations.OffHeapIdentifier.ABSTRACT_REGION_ENTRY_FILL_IN_VALUE; + +import java.io.IOException; +import java.io.InputStream; +import java.util.ArrayList; +import java.util.Collection; +import java.util.Collections; +import java.util.HashMap; +import java.util.HashSet; +import java.util.Iterator; +import java.util.List; +import java.util.Map; +import java.util.Set; +import java.util.concurrent.CopyOnWriteArraySet; +import java.util.concurrent.RejectedExecutionException; +import java.util.concurrent.TimeUnit; +import java.util.concurrent.atomic.AtomicBoolean; +import java.util.concurrent.locks.Condition; +import java.util.concurrent.locks.Lock; + +import org.apache.logging.log4j.Logger; + +import com.gemstone.gemfire.CancelException; +import com.gemstone.gemfire.InternalGemFireError; +import com.gemstone.gemfire.InvalidDeltaException; +import com.gemstone.gemfire.SystemFailure; +import com.gemstone.gemfire.cache.CacheClosedException; +import com.gemstone.gemfire.cache.CacheListener; +import com.gemstone.gemfire.cache.CacheLoader; +import com.gemstone.gemfire.cache.CacheLoaderException; +import com.gemstone.gemfire.cache.CacheWriter; +import com.gemstone.gemfire.cache.CacheWriterException; +import com.gemstone.gemfire.cache.DataPolicy; +import com.gemstone.gemfire.cache.DiskAccessException; +import com.gemstone.gemfire.cache.EntryNotFoundException; +import com.gemstone.gemfire.cache.LossAction; +import com.gemstone.gemfire.cache.MembershipAttributes; +import com.gemstone.gemfire.cache.Operation; +import com.gemstone.gemfire.cache.RegionAccessException; +import com.gemstone.gemfire.cache.RegionAttributes; +import com.gemstone.gemfire.cache.RegionDestroyedException; +import com.gemstone.gemfire.cache.RegionDistributionException; +import com.gemstone.gemfire.cache.RegionMembershipListener; +import com.gemstone.gemfire.cache.ResumptionAction; +import com.gemstone.gemfire.cache.RoleException; +import com.gemstone.gemfire.cache.TimeoutException; +import com.gemstone.gemfire.cache.TransactionId; +import com.gemstone.gemfire.cache.asyncqueue.internal.AsyncEventQueueImpl; +import com.gemstone.gemfire.cache.execute.Function; +import com.gemstone.gemfire.cache.execute.FunctionException; +import com.gemstone.gemfire.cache.execute.ResultCollector; +import com.gemstone.gemfire.cache.execute.ResultSender; +import com.gemstone.gemfire.cache.persistence.PersistentReplicatesOfflineException; +import com.gemstone.gemfire.cache.query.internal.IndexUpdater; +import com.gemstone.gemfire.cache.wan.GatewaySender; +import com.gemstone.gemfire.distributed.DistributedLockService; +import com.gemstone.gemfire.distributed.DistributedMember; +import com.gemstone.gemfire.distributed.LockServiceDestroyedException; +import com.gemstone.gemfire.distributed.Role; +import com.gemstone.gemfire.distributed.internal.DM; +import com.gemstone.gemfire.distributed.internal.DistributionAdvisee; +import com.gemstone.gemfire.distributed.internal.DistributionAdvisor; +import com.gemstone.gemfire.distributed.internal.DistributionAdvisor.Profile; +import com.gemstone.gemfire.distributed.internal.DistributionAdvisor.ProfileVisitor; +import com.gemstone.gemfire.distributed.internal.DistributionConfig; +import com.gemstone.gemfire.distributed.internal.MembershipListener; +import com.gemstone.gemfire.distributed.internal.ReplyProcessor21; +import com.gemstone.gemfire.distributed.internal.locks.DLockRemoteToken; +import com.gemstone.gemfire.distributed.internal.locks.DLockService; +import com.gemstone.gemfire.distributed.internal.membership.InternalDistributedMember; +import com.gemstone.gemfire.internal.Assert; +import com.gemstone.gemfire.internal.cache.CacheDistributionAdvisor.CacheProfile; +import com.gemstone.gemfire.internal.cache.InitialImageOperation.GIIStatus; +import com.gemstone.gemfire.internal.cache.RemoteFetchVersionMessage.FetchVersionResponse; +import com.gemstone.gemfire.internal.cache.control.InternalResourceManager.ResourceType; +import com.gemstone.gemfire.internal.cache.control.MemoryEvent; +import com.gemstone.gemfire.internal.cache.execute.DistributedRegionFunctionExecutor; +import com.gemstone.gemfire.internal.cache.execute.DistributedRegionFunctionResultSender; +import com.gemstone.gemfire.internal.cache.execute.DistributedRegionFunctionResultWaiter; +import com.gemstone.gemfire.internal.cache.execute.FunctionStats; +import com.gemstone.gemfire.internal.cache.execute.LocalResultCollector; +import com.gemstone.gemfire.internal.cache.execute.RegionFunctionContextImpl; +import com.gemstone.gemfire.internal.cache.execute.ServerToClientFunctionResultSender; +import com.gemstone.gemfire.internal.cache.lru.LRUEntry; +import com.gemstone.gemfire.internal.cache.persistence.CreatePersistentRegionProcessor; +import com.gemstone.gemfire.internal.cache.persistence.PersistenceAdvisor; +import com.gemstone.gemfire.internal.cache.persistence.PersistenceAdvisorImpl; +import com.gemstone.gemfire.internal.cache.persistence.PersistentMemberID; +import com.gemstone.gemfire.internal.cache.persistence.PersistentMemberManager; +import com.gemstone.gemfire.internal.cache.persistence.PersistentMemberView; +import com.gemstone.gemfire.internal.cache.tier.sockets.ClientProxyMembershipID; +import com.gemstone.gemfire.internal.cache.tier.sockets.VersionedObjectList; +import com.gemstone.gemfire.internal.cache.versions.ConcurrentCacheModificationException; +import com.gemstone.gemfire.internal.cache.versions.RegionVersionVector; +import com.gemstone.gemfire.internal.cache.versions.VersionSource; +import com.gemstone.gemfire.internal.cache.versions.VersionTag; +import com.gemstone.gemfire.internal.cache.wan.AbstractGatewaySender; +import com.gemstone.gemfire.internal.cache.wan.AbstractGatewaySenderEventProcessor; +import com.gemstone.gemfire.internal.cache.wan.AsyncEventQueueConfigurationException; +import com.gemstone.gemfire.internal.cache.wan.GatewaySenderConfigurationException; +import com.gemstone.gemfire.internal.cache.wan.parallel.ConcurrentParallelGatewaySenderQueue; +import com.gemstone.gemfire.internal.i18n.LocalizedStrings; +import com.gemstone.gemfire.internal.logging.LogService; +import com.gemstone.gemfire.internal.logging.log4j.LocalizedMessage; +import com.gemstone.gemfire.internal.offheap.Chunk; +import com.gemstone.gemfire.internal.offheap.OffHeapHelper; +import com.gemstone.gemfire.internal.offheap.annotations.Released; +import com.gemstone.gemfire.internal.offheap.annotations.Retained; +import com.gemstone.gemfire.internal.sequencelog.RegionLogger; +import com.gemstone.gemfire.internal.util.concurrent.StoppableCountDownLatch; +import com.gemstone.gemfire.i18n.StringId; +/** + * + */ +@SuppressWarnings("deprecation") +public class DistributedRegion extends LocalRegion implements + CacheDistributionAdvisee +{ + private static final Logger logger = LogService.getLogger(); + + /** causes cache profile to be added to afterRemoteRegionCreate notification for testing */ + public static boolean TEST_HOOK_ADD_PROFILE = false; + + /** Used to sync accesses to this.dlockService to allow lazy construction */ + private final Object dlockMonitor = new Object(); + + final CacheDistributionAdvisor distAdvisor; + + /** + * @guarded.By {@link #dlockMonitor} + */ + private DistributedLockService dlockService; + + protected final AdvisorListener advisorListener = new AdvisorListener(); + + /** Set of currently missing required roles */ + protected final HashSet missingRequiredRoles = new HashSet(); + + /** True if this region is currently missing any required roles */ + protected volatile boolean isMissingRequiredRoles = false; + + /** + * True if this region is has any required roles defined and the LossAction is + * either NO_ACCESS or LIMITED_ACCESS. Reliability checks will only happen if + * this is true. + */ + private final boolean requiresReliabilityCheck; + + /** + * Provides a queue for reliable message delivery + * + * @since 5.0 + */ + protected final ReliableMessageQueue rmq; + + /** + * Latch that is opened after initialization waits for required roles up to + * the member-timeout . + */ + protected final StoppableCountDownLatch initializationLatchAfterMemberTimeout; + + private final PersistenceAdvisor persistenceAdvisor; + + private final PersistentMemberID persistentId; + + /** + * This boolean is set to false when this region + * is non-persistent, but there are persistent members in the distributed system + * to which all region modifications should be forwarded + * see bug 45186 + */ + private volatile boolean generateVersionTag = true; + + /** Tests can set this to true and ignore reliability triggered reconnects */ + public static boolean ignoreReconnect = false; + + /** + * Lock to prevent multiple threads on this member from performing + * a clear at the same time. + */ + private final Object clearLock = new Object(); + + private static AtomicBoolean loggedNetworkPartitionWarning = new AtomicBoolean(false); + + /** Creates a new instance of DistributedRegion */ + protected DistributedRegion(String regionName, RegionAttributes attrs, + LocalRegion parentRegion, GemFireCacheImpl cache, + InternalRegionArguments internalRegionArgs) { + super(regionName, attrs, parentRegion, cache, internalRegionArgs); + this.initializationLatchAfterMemberTimeout = new StoppableCountDownLatch( + getCancelCriterion(), 1); + this.distAdvisor = createDistributionAdvisor(internalRegionArgs); + + if (getDistributionManager().getConfig().getEnableNetworkPartitionDetection() + && !isInternalRegion() && !attrs.getScope().isAck() && !doesNotDistribute() && attrs.getDataPolicy().withStorage()) { + logger.warn(LocalizedMessage.create(LocalizedStrings.DistributedRegion_REGION_0_1_SPLITBRAIN_CONFIG_WARNING, + new Object[] { regionName, attrs.getScope() })); + } + if (!getDistributionManager().getConfig().getEnableNetworkPartitionDetection() + && attrs.getDataPolicy().withPersistence() && !loggedNetworkPartitionWarning.getAndSet(true)) { + logger.warn(LocalizedMessage.create( + LocalizedStrings.DistributedRegion_REGION_0_ENABLE_NETWORK_PARTITION_WARNING, + new Object[] { regionName, attrs.getScope() })); + } + + boolean setRequiresReliabilityCheck = attrs.getMembershipAttributes() + .hasRequiredRoles() + && + // note that the following includes NO_ACCESS, LIMITED_ACCESS, + !attrs.getMembershipAttributes().getLossAction().isAllAccess() + && !attrs.getMembershipAttributes().getLossAction().isReconnect(); + + // this optimization is safe for as long as Roles and Required Roles are + // immutable + // if this VM fulfills all required roles, make requiresReliabilityCheck + // false + Set reqRoles = new HashSet(attrs.getMembershipAttributes() + .getRequiredRoles()); + reqRoles.removeAll(getSystem().getDistributedMember().getRoles()); + if (reqRoles.isEmpty()) { + setRequiresReliabilityCheck = false; + } + + this.requiresReliabilityCheck = setRequiresReliabilityCheck; + + { + ReliableMessageQueue tmp = null; + if (this.requiresReliabilityCheck) { + // if + // (attrs.getMembershipAttributes().getLossAction().isAllAccessWithQueuing()) + // { + // tmp = cache.getReliableMessageQueueFactory().create(this); + // } + } + this.rmq = tmp; + } + + if(internalRegionArgs.isUsedForPartitionedRegionBucket()) { + this.persistenceAdvisor = internalRegionArgs.getPersistenceAdvisor(); + } else if (this.allowsPersistence()){ + //TODO prpersist - using this lock service is a hack. Maybe? Or maybe + //it's ok if we have one (rarely used) lock service for many operations? + //What does the resource manager do? + DistributedLockService dl = cache.getPartitionedRegionLockService(); + try { + //TODO prpersist - this is just a quick and dirty storage mechanism so that + //I can test the storage. + DiskRegionStats diskStats; + PersistentMemberView storage; + if(getDataPolicy().withPersistence()) { + storage = getDiskRegion(); + diskStats = getDiskRegion().getStats(); + } else { + storage = new InMemoryPersistentMemberView(); + diskStats = null; + } + PersistentMemberManager memberManager = cache.getPersistentMemberManager(); + this.persistenceAdvisor = new PersistenceAdvisorImpl(distAdvisor, dl, storage, this.getFullPath(), diskStats, memberManager); + } catch (Exception e) { + throw new InternalGemFireError("Couldn't recover persistence"); + } + } else { + this.persistenceAdvisor = null; + } + if(this.persistenceAdvisor != null) { + this.persistentId = persistenceAdvisor.generatePersistentID(); + } else { + this.persistentId = null; + } + + } + + @Override + public void createEventTracker() { + this.eventTracker = new EventTracker(this); + this.eventTracker.start(); + } + + /** + * Intended for used during construction of a DistributedRegion + * + * @return the advisor to be used by the region + */ + protected CacheDistributionAdvisor createDistributionAdvisor(InternalRegionArguments internalRegionArgs) { + return CacheDistributionAdvisor.createCacheDistributionAdvisor(this); // Warning: potential early escape of object before full construction + } + + /** + * Does this region support persistence? + */ + public boolean allowsPersistence() { + return true; + } + + @Override + public boolean requiresOneHopForMissingEntry(EntryEventImpl event) { + // received from another member - don't use one-hop + if (event.isOriginRemote()) { + return false; + } + // local ops aren't distributed + if (event.getOperation().isLocal()) { + return false; + } + // if it already has a valid version tag it can go out with a DistributedCacheOperation + if (event.getVersionTag() != null && event.getVersionTag().getRegionVersion() > 0) { + return false; + } + // if we're not allowed to generate a version tag we need to send it to someone who can + if (!this.generateVersionTag) { + return true; + } + return this.concurrencyChecksEnabled && + (this.srp == null) && + !isTX() && + this.scope.isDistributed() && + !this.dataPolicy.withReplication(); + } + + + /** + * @see LocalRegion#virtualPut(EntryEventImpl, boolean, boolean, Object, + * boolean, long, boolean) + */ + @Override + protected + boolean virtualPut(EntryEventImpl event, + boolean ifNew, + boolean ifOld, + Object expectedOldValue, + boolean requireOldValue, + long lastModified, + boolean overwriteDestroyed) + throws TimeoutException, + CacheWriterException { + final boolean isTraceEnabled = logger.isTraceEnabled(); + + Lock dlock = null; + if (this.scope.isGlobal() && // lock only applies to global scope + !event.isOriginRemote() && // only if operation originating locally + !event.isNetSearch() && // search and load processor handles own locking + !event.isNetLoad() && + // @todo darrel/kirk: what about putAll? + !event.isLocalLoad() && + !event.isSingleHopPutOp()) { // Single Hop Op means dlock is already taken at origin node. + dlock = this.getDistributedLockIfGlobal(event.getKey()); + } + if (isTraceEnabled) { + logger.trace("virtualPut invoked for event {}", event); + } + try { + if (!hasSeenEvent(event)) { + if (this.requiresOneHopForMissingEntry(event)) { + // bug #45704: see if a one-hop must be done for this operation + RegionEntry re = getRegionEntry(event.getKey()); + if (re == null /*|| re.isTombstone()*/ || !this.generateVersionTag) { + if (!event.isBulkOpInProgress() || this.dataPolicy.withStorage()) { + // putAll will send a single one-hop for empty regions. for other missing entries + // we need to get a valid version number before modifying the local cache + boolean didDistribute = RemotePutMessage.distribute(event, lastModified, + false, false, expectedOldValue, requireOldValue, !this.generateVersionTag); + + if (!didDistribute && isTraceEnabled) { + logger.trace("Unable to perform one-hop messaging"); + } + if (!this.generateVersionTag && !didDistribute) { + throw new PersistentReplicatesOfflineException(); + } + if (didDistribute) { + if (isTraceEnabled) { + logger.trace("Event after remotePut operation: {}", event); + } + if (event.getVersionTag() == null) { + // if the event wasn't applied by the one-hop replicate it will not have a version tag + // and so should not be applied to this cache + return false; + } + } + } + } + } + return super.virtualPut(event, + ifNew, + ifOld, + expectedOldValue, + requireOldValue, + lastModified, + overwriteDestroyed); + } + else { + if (event.getDeltaBytes() != null && event.getRawNewValue() == null) { + // This means that this event has delta bytes but no full value. + // Request the full value of this event. + // The value in this vm may not be same as this event's value. + throw new InvalidDeltaException( + "Cache encountered replay of event containing delta bytes for key " + + event.getKey()); + } + // if the listeners have already seen this event, then it has already + // been successfully applied to the cache. Distributed messages and + // return + if (isTraceEnabled) { + logger.trace("DR.virtualPut: this cache has already seen this event {}", event); + } + + // Gester, Fix 39014: when hasSeenEvent, put will still distribute + // event, but putAll did not. We add the logic back here, not to put + // back into DR.distributeUpdate() because we moved this part up into + // LR.basicPutPart3 in purpose. Reviewed by Bruce. + if (event.isBulkOpInProgress() && !event.isOriginRemote()) { + event.getPutAllOperation().addEntry(event, true); + } + + /* doing this so that other VMs will apply this no matter what. If it + * is an "update" they will not apply it if they don't have the key. + * Because this is probably a retry, it will never get applied to this + * local AbstractRegionMap, and so will never be flipped to a 'create' + */ + event.makeCreate(); + if (!getConcurrencyChecksEnabled() || event.hasValidVersionTag()) { + distributeUpdate(event, lastModified, ifNew, ifOld, expectedOldValue, requireOldValue); + event.invokeCallbacks(this,true, true); + } + return true; + } + } + finally { + if (dlock != null) { + dlock.unlock(); + } + } + } + + @Override + protected RegionEntry basicPutEntry(EntryEventImpl event, long lastModified) + throws TimeoutException, CacheWriterException { + + final boolean isTraceEnabled = logger.isTraceEnabled(); + + if (isTraceEnabled) { + logger.trace("basicPutEntry invoked for event {}", event); + } + if (this.requiresOneHopForMissingEntry(event)) { + // bug #45704: see if a one-hop must be done for this operation + RegionEntry re = getRegionEntry(event.getKey()); + if (re == null /*|| re.isTombstone()*/ || !this.generateVersionTag) { + final boolean ifNew = false; + final boolean ifOld = false; + boolean didDistribute = RemotePutMessage.distribute(event, lastModified, + ifNew, ifOld, null, false, !this.generateVersionTag); + if (!this.generateVersionTag && !didDistribute) { + throw new PersistentReplicatesOfflineException(); + } + if (didDistribute && isTraceEnabled) { + logger.trace("Event after remotePut for basicPutEntry: {}", event); + } + } + } + return super.basicPutEntry(event, lastModified); + } + + @Override + public void performPutAllEntry(EntryEventImpl event) { + /* + * force shared data view so that we just do the virtual op, accruing things in the put all operation for later + */ + if(isTX()) { + event.getPutAllOperation().addEntry(event); + } else { + getSharedDataView().putEntry(event, false, false, null, false, 0L, false); + } + } + + @Override + public void performRemoveAllEntry(EntryEventImpl event) { + // force shared data view so that we just do the virtual op, accruing things in the bulk operation for later + if(isTX()) { + event.getRemoveAllOperation().addEntry(event); + } else { + basicDestroy(event, true, null); + //getSharedDataView().destroyExistingEntry(event, true, null); + } + } + + /** + * distribution and listener notification + */ + @Override + public void basicPutPart3(EntryEventImpl event, RegionEntry entry, + boolean isInitialized, long lastModified, boolean invokeCallbacks, + boolean ifNew, boolean ifOld, Object expectedOldValue, + boolean requireOldValue) { + + distributeUpdate(event, lastModified, false, false, null, false); + super.basicPutPart3(event, entry, isInitialized, lastModified, + invokeCallbacks, ifNew, ifOld, expectedOldValue, requireOldValue); + } + + /** distribute an update operation */ + protected void distributeUpdate(EntryEventImpl event, long lastModified, boolean ifNew, boolean ifOld, Object expectedOldValue, boolean requireOldValue) { + // an update from a netSearch is not distributed + if (!event.isOriginRemote() && !event.isNetSearch() && !event.isBulkOpInProgress()) { + boolean distribute = true; + if (event.getInhibitDistribution()) { + // this has already been distributed by a one-hop operation + distribute = false; + } + if (distribute) { + UpdateOperation op = new UpdateOperation(event, lastModified); + if (logger.isTraceEnabled()) { + logger.trace("distributing operation for event : {} : for region : {}", event, this.getName()); + } + op.distribute(); + } + } + } + + protected void setGeneratedVersionTag(boolean generateVersionTag) { + // there is at-least one other persistent member, so turn on concurrencyChecks + enableConcurrencyChecks(); + + this.generateVersionTag = generateVersionTag; + } + + protected boolean getGenerateVersionTag() { + return this.generateVersionTag; + } + + @Override + protected boolean shouldGenerateVersionTag(RegionEntry entry, EntryEventImpl event) { + if (logger.isTraceEnabled()) { + logger.trace("shouldGenerateVersionTag this.generateVersionTag={} ccenabled={} dataPolicy={} event:{}", + this.generateVersionTag, this.concurrencyChecksEnabled, this.dataPolicy, event); + } + if (!this.concurrencyChecksEnabled || this.dataPolicy == DataPolicy.EMPTY || !this.generateVersionTag) { + return false; + } + if (this.srp != null) { // client + return false; + } + if (event.getVersionTag() != null && !event.getVersionTag().isGatewayTag()) { + return false; + } + if (event.getOperation().isLocal()) { // bug #45402 - localDestroy generated a version tag + return false; + } + if (!event.isOriginRemote() && this.dataPolicy.withReplication()) { + return true; + } + if (!this.dataPolicy.withReplication() && !this.dataPolicy.withPersistence()) { + if (!entry.getVersionStamp().hasValidVersion()) { + // do not generate a version stamp in a region that has no replication if it's not based + // on an existing version from a replicate region + return false; + } + return true; + } + if (!event.isOriginRemote() && event.getDistributedMember() != null) { + if (!event.getDistributedMember().equals(this.getMyId())) { + return event.getVersionTag() == null; // one-hop remote message + } + } + return false; + } + /** + * Throws RegionAccessException if required roles are missing and the + * LossAction is NO_ACCESS + * + * @throws RegionAccessException + * if required roles are missing and the LossAction is NO_ACCESS + */ + @Override + protected void checkForNoAccess() + { + if (this.requiresReliabilityCheck && this.isMissingRequiredRoles) { + if (getMembershipAttributes().getLossAction().isNoAccess()) { + synchronized (this.missingRequiredRoles) { + if (!this.isMissingRequiredRoles) + return; + Set roles = Collections.unmodifiableSet(new HashSet( + this.missingRequiredRoles)); + throw new RegionAccessException(LocalizedStrings.DistributedRegion_OPERATION_IS_DISALLOWED_BY_LOSSACTION_0_BECAUSE_THESE_REQUIRED_ROLES_ARE_MISSING_1.toLocalizedString(new Object[] {getMembershipAttributes().getLossAction(), roles}), getFullPath(), roles); + } + } + } + } + + /** + * Throws RegionAccessException is required roles are missing and the + * LossAction is either NO_ACCESS or LIMITED_ACCESS. + * + * @throws RegionAccessException + * if required roles are missing and the LossAction is either + * NO_ACCESS or LIMITED_ACCESS + */ + @Override + protected void checkForLimitedOrNoAccess() + { + if (this.requiresReliabilityCheck && this.isMissingRequiredRoles) { + if (getMembershipAttributes().getLossAction().isNoAccess() + || getMembershipAttributes().getLossAction().isLimitedAccess()) { + synchronized (this.missingRequiredRoles) { + if (!this.isMissingRequiredRoles) + return; + Set roles = Collections.unmodifiableSet(new HashSet( + this.missingRequiredRoles)); + Assert.assertTrue(!roles.isEmpty()); + throw new RegionAccessException(LocalizedStrings.DistributedRegion_OPERATION_IS_DISALLOWED_BY_LOSSACTION_0_BECAUSE_THESE_REQUIRED_ROLES_ARE_MISSING_1 + .toLocalizedString(new Object[] { getMembershipAttributes().getLossAction(), roles}), getFullPath(), roles); + } + } + } + } + + @Override + protected void handleReliableDistribution(ReliableDistributionData data, + Set successfulRecipients) { + handleReliableDistribution(data, successfulRecipients, + Collections.EMPTY_SET, Collections.EMPTY_SET); + } + + protected void handleReliableDistribution(ReliableDistributionData data, + Set successfulRecipients, Set otherRecipients1, Set otherRecipients2) + { + if (this.requiresReliabilityCheck) { + MembershipAttributes ra = getMembershipAttributes(); + Set recipients = successfulRecipients; + // determine the successful roles + Set roles = new HashSet(); + for (Iterator iter = recipients.iterator(); iter.hasNext();) { + InternalDistributedMember mbr = (InternalDistributedMember)iter.next(); + if (mbr != null) { + roles.addAll(mbr.getRoles()); + } + } + for (Iterator iter = otherRecipients1.iterator(); iter.hasNext();) { + InternalDistributedMember mbr = (InternalDistributedMember)iter.next(); + if (mbr != null) { + roles.addAll(mbr.getRoles()); + } + } + for (Iterator iter = otherRecipients2.iterator(); iter.hasNext();) { + InternalDistributedMember mbr = (InternalDistributedMember)iter.next(); + if (mbr != null) { + roles.addAll(mbr.getRoles()); + } + } + // determine the missing roles + Set failedRoles = new HashSet(ra.getRequiredRoles()); + failedRoles.removeAll(roles); + if (failedRoles.isEmpty()) + return; +// if (rp.isAllAccessWithQueuing()) { +// this.rmq.add(data, failedRoles); +// } else { + + throw new RegionDistributionException(LocalizedStrings.DistributedRegion_OPERATION_DISTRIBUTION_MAY_HAVE_FAILED_TO_NOTIFY_THESE_REQUIRED_ROLES_0.toLocalizedString(failedRoles), getFullPath(), failedRoles); +// } + } + } + + /** + * + * Called when we do a distributed operation and don't have anyone to + * distributed it too. Since this is only called when no distribution was done + * (i.e. no recipients) we do not check isMissingRequiredRoles because it + * might not longer be true due to race conditions + * + * @return false if this region has at least one required role and queuing is + * configured. Returns true if sending to no one is ok. + * @throws RoleException + * if a required role is missing and the LossAction is either + * NO_ACCESS or LIMITED_ACCESS. + * @since 5.0 + */ + protected boolean isNoDistributionOk() + { + if (this.requiresReliabilityCheck) { + MembershipAttributes ra = getMembershipAttributes(); + // if (ra.getLossAction().isAllAccessWithQueuing()) { + // return !ra.hasRequiredRoles(); + // } else { + Set failedRoles = ra.getRequiredRoles(); + throw new RegionDistributionException(LocalizedStrings.DistributedRegion_OPERATION_DISTRIBUTION_WAS_NOT_DONE_TO_THESE_REQUIRED_ROLES_0.toLocalizedString(failedRoles), getFullPath(), failedRoles); + // } + } + return true; + } + + /** + * returns true if this Region does not distribute its operations to other + * members. + * @since 6.0 + * @see HARegion#localDestroyNoCallbacks(Object) + */ + public boolean doesNotDistribute() { + return false; + } + + + @Override + public boolean shouldSyncForCrashedMember(InternalDistributedMember id) { + return !doesNotDistribute() && super.shouldSyncForCrashedMember(id); + } + + + /** + * Adjust the specified set of recipients by removing any of them that are + * currently having their data queued. + * + * @param recipients + * the set of recipients that a message is to be distributed too. + * Recipients that are currently having their data queued will be + * removed from this set. + * @return the set, possibly null, of recipients that are currently having + * their data queued. + * @since 5.0 + */ + protected Set adjustForQueuing(Set recipients) + { + Set result = null; + // if (this.requiresReliabilityCheck) { + // MembershipAttributes ra = getMembershipAttributes(); + // if (ra.getLossAction().isAllAccessWithQueuing()) { + // Set currentQueuedRoles = this.rmq.getQueuingRoles(); + // if (currentQueuedRoles != null) { + // // foreach recipient see if any of his roles are queued and if + // // they are remove him from recipients and add him to result + // Iterator it = recipients.iterator(); + // while (it.hasNext()) { + // DistributedMember dm = (DistributedMember)it.next(); + // Set dmRoles = dm.getRoles(); + // if (!dmRoles.isEmpty()) { + // if (intersects(dmRoles, currentQueuedRoles)) { + // it.remove(); // fix for bug 34447 + // if (result == null) { + // result = new HashSet(); + // } + // result.add(dm); + // } + // } + // } + // } + // } + // } + return result; + } + + /** + * Returns true if the two sets intersect + * + * @param a + * a non-null non-empty set + * @param b + * a non-null non-empty set + * @return true if sets a and b intersect; false if not + * @since 5.0 + */ + public static boolean intersects(Set a, Set b) + { + Iterator it; + Set target; + if (a.size() <= b.size()) { + it = a.iterator(); + target = b; + } + else { + it = b.iterator(); + target = a; + } + while (it.hasNext()) { + if (target.contains(it.next())) + return true; + } + return false; + } + + @Override + public boolean requiresReliabilityCheck() + { + return this.requiresReliabilityCheck; + } + + /** + * Returns true if the ExpiryTask is currently allowed to expire. + *

+ * If the region is in NO_ACCESS due to reliability configuration, then no + * expiration actions are allowed. + *

+ * If the region is in LIMITED_ACCESS due to reliability configuration, then + * only non-distributed expiration actions are allowed. + */ + @Override + protected boolean isExpirationAllowed(ExpiryTask expiry) + { + if (this.requiresReliabilityCheck && this.isMissingRequiredRoles) { + if (getMembershipAttributes().getLossAction().isNoAccess()) { + return false; + } + if (getMembershipAttributes().getLossAction().isLimitedAccess() + && expiry.isDistributedAction()) { + return false; + } + } + return true; + } + + /** + * Performs the resumption action when reliability is resumed. + * + * @return true if asynchronous resumption is triggered + */ + protected boolean resumeReliability(InternalDistributedMember id, + Set newlyAcquiredRoles) + { + boolean async = false; + try { + ResumptionAction ra = getMembershipAttributes().getResumptionAction(); + if (ra.isNone()) { + if (logger.isDebugEnabled()) { + logger.debug("Reliability resumption for action of none"); + } + resumeExpiration(); + } + else if (ra.isReinitialize()) { + async = true; + asyncResumeReliability(id, newlyAcquiredRoles); + } + } + catch (Exception e) { + logger.fatal(LocalizedMessage.create(LocalizedStrings.DistributedRegion_UNEXPECTED_EXCEPTION), e); + } + return async; + } + + /** + * Handles asynchronous ResumptionActions such as region reinitialize. + */ + private void asyncResumeReliability(final InternalDistributedMember id, + final Set newlyAcquiredRoles) + throws RejectedExecutionException { + final ResumptionAction ra = getMembershipAttributes().getResumptionAction(); + getDistributionManager().getWaitingThreadPool().execute(new Runnable() { + public void run() + { + try { + if (ra.isReinitialize()) { + if (logger.isDebugEnabled()) { + logger.debug("Reliability resumption for action of reinitialize"); + } + if (!isDestroyed() && !cache.isClosed()) { + RegionEventImpl event = new RegionEventImpl( + DistributedRegion.this, Operation.REGION_REINITIALIZE, null, + false, getMyId(), generateEventID()); + reinitialize(null, event); + } + synchronized (missingRequiredRoles) { + // any number of threads may be waiting on missingRequiredRoles + missingRequiredRoles.notifyAll(); + if (hasListener() && id != null) { + // fire afterRoleGain event + RoleEventImpl relEvent = new RoleEventImpl( + DistributedRegion.this, Operation.REGION_CREATE, null, + true, id, newlyAcquiredRoles); + dispatchListenerEvent(EnumListenerEvent.AFTER_ROLE_GAIN, + relEvent); + } + } + } + } + catch (Exception e) { + logger.fatal(LocalizedMessage.create(LocalizedStrings.DistributedRegion_UNEXPECTED_EXCEPTION), e); + } + } + }); + } + + /** Reschedules expiry tasks when reliability is resumed. */ + private void resumeExpiration() + { + boolean isNoAccess = getMembershipAttributes().getLossAction().isNoAccess(); + boolean isLimitedAccess = getMembershipAttributes().getLossAction() + .isLimitedAccess(); + if (!(isNoAccess || isLimitedAccess)) { + return; // early out: expiration was never affected by reliability + } + + if (getEntryTimeToLive().getTimeout() > 0 + && (isNoAccess || (isLimitedAccess && getEntryTimeToLive().getAction() + .isDistributed()))) { + rescheduleEntryExpiryTasks(); + } + else + if (getEntryIdleTimeout().getTimeout() > 0 + && (isNoAccess || (isLimitedAccess && getEntryIdleTimeout().getAction() + .isDistributed()))) { + rescheduleEntryExpiryTasks(); + } + else + if (getCustomEntryTimeToLive() != null || getCustomEntryIdleTimeout() != null) { + // Force all entries to be rescheduled + rescheduleEntryExpiryTasks(); + } + + if (getRegionTimeToLive().getTimeout() > 0 + && (isNoAccess || (isLimitedAccess && getRegionTimeToLive().getAction() + .isDistributed()))) { + addTTLExpiryTask(); + } + if (getRegionIdleTimeout().getTimeout() > 0 + && (isNoAccess || (isLimitedAccess && getRegionIdleTimeout() + .getAction().isDistributed()))) { + addIdleExpiryTask(); + } + } + + /** + * A boolean used to indicate if its the intialization time i.e the + * distributed Region is created for the first time. The variable is used at + * the time of lost reliablility. + */ + private boolean isInitializingThread = false; + + /** + * Called when reliability is lost. If MembershipAttributes are configured + * with {@link LossAction#RECONNECT}then DistributedSystem reconnect will be + * called asynchronously. + * + * @return true if asynchronous resumption is triggered + */ + protected boolean lostReliability(final InternalDistributedMember id, + final Set newlyMissingRoles) + { + if (DistributedRegion.ignoreReconnect) + return false; + boolean async = false; + try { + if (getMembershipAttributes().getLossAction().isReconnect()) { + async = true; + if (isInitializingThread) { + doLostReliability(true, id, newlyMissingRoles); + } + else { + doLostReliability(false, id, newlyMissingRoles); + } + // we don't do this in the waiting pool because we're going to + // disconnect + // the distributed system, and it will wait for the pool to empty + /* + * moved to a new method called doLostReliablity. Thread t = new + * Thread("Reconnect Distributed System") { public void run() { try { // + * TODO: may need to check isReconnecting and checkReadiness... + * initializationLatchAfterMemberTimeout.await(); // TODO: + * call reconnect here + * getSystem().tryReconnect((GemFireCache)getCache()); // added for + * reconnect. synchronized (missingRequiredRoles) { // any number of + * threads may be waiting on missingRequiredRoles + * missingRequiredRoles.notifyAll(); // need to fire an event if id is + * not null if (hasListener() && id != null) { RoleEventImpl relEvent = + * new RoleEventImpl( DistributedRegion.this, Operation.CACHE_RECONNECT, + * null, true, id, newlyMissingRoles); dispatchListenerEvent( + * EnumListenerEvent.AFTER_ROLE_LOSS, relEvent); } } } catch (Exception + * e) { } } }; + * t.setDaemon(true); t.start(); + */ + } + } + catch (CancelException cce) { + throw cce; + } + catch (Exception e) { + logger.fatal(LocalizedMessage.create(LocalizedStrings.DistributedRegion_UNEXPECTED_EXCEPTION), e); + } + return async; + } + + private void doLostReliability(boolean isInitializing, + final InternalDistributedMember id, final Set newlyMissingRoles) + { + try { + if (!isInitializing) { + // moved code to a new thread. + Thread t = new Thread(LocalizedStrings.DistributedRegion_RECONNECT_DISTRIBUTED_SYSTEM.toLocalizedString()) { + @Override + public void run() + { + try { + // TODO: may need to check isReconnecting and checkReadiness... + if (logger.isDebugEnabled()) { + logger.debug("Reliability loss with policy of reconnect and membership thread doing reconnect"); + } + initializationLatchAfterMemberTimeout.await(); + getSystem().tryReconnect(false, "Role Loss", getCache()); + synchronized (missingRequiredRoles) { + // any number of threads may be waiting on missingRequiredRoles + missingRequiredRoles.notifyAll(); + // need to fire an event if id is not null + if (hasListener() && id != null) { + RoleEventImpl relEvent = new RoleEventImpl( + DistributedRegion.this, Operation.CACHE_RECONNECT, null, + true, id, newlyMissingRoles); + dispatchListenerEvent(EnumListenerEvent.AFTER_ROLE_LOSS, + relEvent); + } + } + } + catch (Exception e) { + logger.fatal(LocalizedMessage.create(LocalizedStrings.DistributedRegion_UNEXPECTED_EXCEPTION), e); + } + } + }; + t.setDaemon(true); + t.start(); + + } + else { + getSystem().tryReconnect(false, "Role Loss", getCache()); // added for + // reconnect. + synchronized (missingRequiredRoles) { + // any number of threads may be waiting on missingRequiredRoles + missingRequiredRoles.notifyAll(); + // need to fire an event if id is not null + if (hasListener() && id != null) { + RoleEventImpl relEvent = new RoleEventImpl(DistributedRegion.this, + Operation.CACHE_RECONNECT, null, true, id, newlyMissingRoles); + dispatchListenerEvent(EnumListenerEvent.AFTER_ROLE_LOSS, relEvent); + } + } + // } catch (CancelException cce){ + + // } + + } + } + catch (CancelException ignor) { + throw ignor; + } + catch (Exception e) { + logger.fatal(LocalizedMessage.create(LocalizedStrings.DistributedRegion_UNEXPECTED_EXCEPTION), e); + } + + } + + protected void lockCheckReadiness() + { + // fix for bug 32610 + cache.getCancelCriterion().checkCancelInProgress(null); + checkReadiness(); + } + + @Override + public final Object validatedDestroy(Object key, EntryEventImpl event) + throws TimeoutException, EntryNotFoundException, CacheWriterException { + Lock dlock = this.getDistributedLockIfGlobal(key); + try { + return super.validatedDestroy(key, event); + } finally { + if (dlock != null) { + dlock.unlock(); + } + } + } + + /** + * @see LocalRegion#localDestroyNoCallbacks(Object) + */ + @Override + public void localDestroyNoCallbacks(Object key) + { + super.localDestroyNoCallbacks(key); + if (getScope().isGlobal()) { + try { + this.getLockService().freeResources(key); + } + catch (LockServiceDestroyedException ignore) { + } + } + } + + /** + * @see LocalRegion#localDestroy(Object, Object) + */ + @Override + public void localDestroy(Object key, Object aCallbackArgument) + throws EntryNotFoundException + { + super.localDestroy(key, aCallbackArgument); + if (getScope().isGlobal()) { + try { + this.getLockService().freeResources(key); + } + catch (LockServiceDestroyedException ignore) { + } + } + } + + /** + * @see LocalRegion#invalidate(Object, Object) + */ + @Override + public void invalidate(Object key, Object aCallbackArgument) + throws TimeoutException, EntryNotFoundException + { + validateKey(key); + validateCallbackArg(aCallbackArgument); + checkReadiness(); + checkForLimitedOrNoAccess(); + Lock dlock = this.getDistributedLockIfGlobal(key); + try { + super.validatedInvalidate(key, aCallbackArgument); + } + finally { + if (dlock != null) + dlock.unlock(); + } + } + + @Override + public Lock getRegionDistributedLock() throws IllegalStateException + { + lockCheckReadiness(); + checkForLimitedOrNoAccess(); + if (!this.scope.isGlobal()) { + throw new IllegalStateException(LocalizedStrings.DistributedRegion_DISTRIBUTION_LOCKS_ARE_ONLY_SUPPORTED_FOR_REGIONS_WITH_GLOBAL_SCOPE_NOT_0.toLocalizedString(this.scope)); + } + return new RegionDistributedLock(); + } + + @Override + public Lock getDistributedLock(Object key) throws IllegalStateException + { + validateKey(key); + lockCheckReadiness(); + checkForLimitedOrNoAccess(); + if (!this.scope.isGlobal()) { + throw new IllegalStateException(LocalizedStrings.DistributedRegion_DISTRIBUTION_LOCKS_ARE_ONLY_SUPPORTED_FOR_REGIONS_WITH_GLOBAL_SCOPE_NOT_0.toLocalizedString(this.scope)); + } + if (isLockingSuspendedByCurrentThread()) { + throw new IllegalStateException(LocalizedStrings.DistributedRegion_THIS_THREAD_HAS_SUSPENDED_ALL_LOCKING_FOR_THIS_REGION.toLocalizedString()); + } + return new DistributedLock(key); + } + + /** + * Called while NOT holding lock on parent's subregions + * + * @throws IllegalStateException + * if region is not compatible with a region in another VM. + * + * @see LocalRegion#initialize(InputStream, InternalDistributedMember, InternalRegionArguments) + */ + @Override + protected void initialize(InputStream snapshotInputStream, + InternalDistributedMember imageTarget, InternalRegionArguments internalRegionArgs) throws TimeoutException, + IOException, ClassNotFoundException + { + Assert.assertTrue(!isInitialized()); + if (logger.isDebugEnabled()) { + logger.debug("DistributedRegion.initialize BEGIN: {}", getFullPath()); + } + + // if we're versioning entries we need a region-level version vector + if (this.scope.isDistributed() && this.concurrencyChecksEnabled) { + createVersionVector(); + } + + if (this.scope.isGlobal()) { + getLockService(); // create lock service eagerly now + } + + final IndexUpdater indexUpdater = getIndexUpdater(); + boolean sqlfGIILockTaken = false; + // this try block is to release the SQLF GII lock in finally + // which should be done after bucket status will be set + // properly in LocalRegion#initialize() + try { + try { + try { + // take the GII lock to avoid missing entries while updating the + // index list for SQLFabric (#41330 and others) + if (indexUpdater != null) { + indexUpdater.lockForGII(); + sqlfGIILockTaken = true; + } + + PersistentMemberID persistentId = null; + boolean recoverFromDisk = isRecoveryNeeded(); + DiskRegion dskRgn = getDiskRegion(); + if (recoverFromDisk) { + if (logger.isDebugEnabled()) { + logger.debug("DistributedRegion.getInitialImageAndRecovery: Starting Recovery"); + } + dskRgn.initializeOwner(this); // do recovery + if (logger.isDebugEnabled()) { + logger.debug("DistributedRegion.getInitialImageAndRecovery: Finished Recovery"); + } + persistentId = dskRgn.getMyPersistentID(); + } + + // Create OQL indexes before starting GII. + createOQLIndexes(internalRegionArgs, recoverFromDisk); + + if (getDataPolicy().withReplication() + || getDataPolicy().withPreloaded()) { + getInitialImageAndRecovery(snapshotInputStream, imageTarget, + internalRegionArgs, recoverFromDisk, persistentId); + } + else { + new CreateRegionProcessor(this).initializeRegion(); + if (snapshotInputStream != null) { + releaseBeforeGetInitialImageLatch(); + loadSnapshotDuringInitialization(snapshotInputStream); + } + } + } + catch (DiskAccessException dae) { + this.handleDiskAccessException(dae, true); + throw dae; + } + + initMembershipRoles(); + isInitializingThread = false; + super.initialize(null, null, null); // makes sure all latches are released if they haven't been already + } finally { + if (this.eventTracker != null) { + this.eventTracker.setInitialized(); + } + } + } finally { + if (sqlfGIILockTaken) { + indexUpdater.unlockForGII(); + } + } + } + + @Override + public void initialized() { + new UpdateAttributesProcessor(this).distribute(false); + } + + /** True if GII was impacted by missing required roles */ + private boolean giiMissingRequiredRoles = false; + + /** + * A reference counter to protected the memoryThresholdReached boolean + */ + private final Set memoryThresholdReachedMembers = + new CopyOnWriteArraySet(); + + private ConcurrentParallelGatewaySenderQueue hdfsQueue; + + /** Sets and returns giiMissingRequiredRoles */ + private boolean checkInitialImageForReliability( + InternalDistributedMember imageTarget, + CacheDistributionAdvisor.InitialImageAdvice advice) + { + // assumption: required roles are interesting to GII only if Reinitialize... +// if (true) + return false; +// if (getMembershipAttributes().hasRequiredRoles() +// && getMembershipAttributes().getResumptionAction().isReinitialize()) { +// // are any required roles missing for GII with Reinitialize? +// Set missingRR = new HashSet(getMembershipAttributes().getRequiredRoles()); +// missingRR.removeAll(getSystem().getDistributedMember().getRoles()); +// for (Iterator iter = advice.replicates.iterator(); iter.hasNext();) { +// DistributedMember member = (DistributedMember)iter.next(); +// missingRR.removeAll(member.getRoles()); +// } +// for (Iterator iter = advice.others.iterator(); iter.hasNext();) { +// DistributedMember member = (DistributedMember)iter.next(); +// missingRR.removeAll(member.getRoles()); +// } +// for (Iterator iter = advice.preloaded.iterator(); iter.hasNext();) { +// DistributedMember member = (DistributedMember)iter.next(); +// missingRR.removeAll(member.getRoles()); +// } +// if (!missingRR.isEmpty()) { +// // entering immediate loss condition, which will cause reinit on resume +// this.giiMissingRequiredRoles = true; +// } +// } +// return this.giiMissingRequiredRoles; + } + + private void getInitialImageAndRecovery(InputStream snapshotInputStream, + InternalDistributedMember imageSrc, InternalRegionArguments internalRegionArgs, + boolean recoverFromDisk, PersistentMemberID persistentId) throws TimeoutException + { + logger.info(LocalizedMessage.create(LocalizedStrings.DistributedRegion_INITIALIZING_REGION_0, this.getName())); + + ImageState imgState = getImageState(); + imgState.init(); + boolean targetRecreated = internalRegionArgs.getRecreateFlag(); + Boolean isCBool = (Boolean)isConversion.get(); + boolean isForConversion = isCBool!=null?isCBool.booleanValue():false; + + if (recoverFromDisk && snapshotInputStream != null && !isForConversion) { + throw new InternalGemFireError(LocalizedStrings.DistributedRegion_IF_LOADING_A_SNAPSHOT_THEN_SHOULD_NOT_BE_RECOVERING_ISRECOVERING_0_SNAPSHOTSTREAM_1.toLocalizedString(new Object[] {Boolean.valueOf(recoverFromDisk), snapshotInputStream})); + } + + ProfileExchangeProcessor targetProvider; + if (dataPolicy.withPersistence()) { + targetProvider = new CreatePersistentRegionProcessor(this, + getPersistenceAdvisor(), recoverFromDisk); + } + else { + // this will go in the advisor profile + targetProvider = new CreateRegionProcessor(this); + } + imgState.setInRecovery(false); + RegionVersionVector recovered_rvv = null; + if (dataPolicy.withPersistence()) { + recovered_rvv = (this.getVersionVector()==null?null:this.getVersionVector().getCloneForTransmission()); + } + // initializeRegion will send out our profile + targetProvider.initializeRegion(); + + if(persistenceAdvisor != null) { + persistenceAdvisor.initialize(); + } + + // Register listener here so that the remote members are known + // since registering calls initializeCriticalMembers (which needs to know about + // remote members + if (!isInternalRegion()) { + if (!this.isDestroyed) { + cache.getResourceManager().addResourceListener(ResourceType.MEMORY, this); + } + } + + releaseBeforeGetInitialImageLatch(); + + // allow GII to invoke test hooks. Do this just after releasing the + // before-gii latch for bug #48962. See ConcurrentLeaveDuringGIIDUnitTest + InitialImageOperation.beforeGetInitialImage(this); + + if (snapshotInputStream != null) { + try { + if (logger.isDebugEnabled()) { + logger.debug("DistributedRegion.getInitialImageAndRecovery: About to load snapshot, isInitialized={}; {}", + isInitialized(), getFullPath()); + } + loadSnapshotDuringInitialization(snapshotInputStream); + } + catch (IOException e) { + throw new RuntimeException(e); // @todo change this exception? + } + catch (ClassNotFoundException e) { + throw new RuntimeException(e); // @todo change this exception? + } + cleanUpDestroyedTokensAndMarkGIIComplete(GIIStatus.NO_GII); + return; + } + + // No snapshot provided, use the imageTarget(s) + + // if we were given a recommended imageTarget, use that first, and + // treat it like it is a replicate (regardless of whether it actually is + // or not) + + InitialImageOperation iiop = new InitialImageOperation(this, this.entries); + // [defunct] Special case GII for PR admin regions (which are always + // replicates and always writers + // bruce: this was commented out after adding the GIIAckRequest logic to + // force + // consistency before the gii operation begins + // if (isUsedForPartitionedRegionAdmin() || + // isUsedForPartitionedRegionBucket()) { + // releaseBeforeGetInitialImageLatch(); + // iiop.getFromAll(this.distAdvisor.adviseGeneric(), false); + // cleanUpDestroyedTokens(); + // return; + // } + + + CacheDistributionAdvisor.InitialImageAdvice advice = null; + boolean done = false; + while(!done && !isDestroyed()) { + advice = targetProvider.getInitialImageAdvice(advice); + checkInitialImageForReliability(imageSrc, advice); + boolean attemptGetFromOne = + imageSrc != null // we were given a specific member + || this.dataPolicy.withPreloaded() + && !advice.preloaded.isEmpty() // this is a preloaded region + || (!advice.replicates.isEmpty()); + // That is: if we have 0 or 1 giiProvider then we can do a getFromOne gii; + // if we have 2 or more giiProviders then we must do a getFromAll gii. + + if (attemptGetFromOne) { + if (recoverFromDisk) { + if (LocalRegion.ISSUE_CALLBACKS_TO_CACHE_OBSERVER){ + CacheObserverHolder.getInstance().afterMarkingGIIStarted(); + } + } + { + // If we have an imageSrc and the target is reinitializing mark the + // getInitialImage so that it will wait until the target region is fully initialized + // before responding to the get image request. Otherwise, the + // source may respond with no data because it is still initializing, + // e.g. loading a snapshot. + + // Plan A: use specified imageSrc, if specified + if (imageSrc != null) { + try { + GIIStatus ret = iiop.getFromOne(Collections.singleton(imageSrc), + targetRecreated, advice, recoverFromDisk, recovered_rvv); + if (GIIStatus.didGII(ret)) { + this.giiMissingRequiredRoles = false; + cleanUpDestroyedTokensAndMarkGIIComplete(ret); + done = true; + return; + } + } finally { + imageSrc = null; + } + } + + // Plan C: use a replicate, if one exists + GIIStatus ret = iiop.getFromOne(advice.replicates, false, advice, recoverFromDisk, recovered_rvv); + if (GIIStatus.didGII(ret)) { + cleanUpDestroyedTokensAndMarkGIIComplete(ret); + done = true; + return; + } + + // Plan D: if this is a PRELOADED region, fetch from another PRELOADED + if (this.dataPolicy.isPreloaded()) { + GIIStatus ret_preload = iiop.getFromOne(advice.preloaded, false, advice, recoverFromDisk, recovered_rvv); + if (GIIStatus.didGII(ret_preload)) { + cleanUpDestroyedTokensAndMarkGIIComplete(ret_preload); + done = true; + return; + } + } // isPreloaded + } + + //If we got to this point, we failed in the GII. Cleanup + //any partial image we received + cleanUpAfterFailedGII(recoverFromDisk); + + } // attemptGetFromOne + else { + if(!isDestroyed()) { + if(recoverFromDisk) { + logger.info(LocalizedMessage.create(LocalizedStrings.DistributedRegion_INITIALIZED_FROM_DISK, + new Object[] {this.getFullPath(), persistentId, getPersistentID()})); + if(persistentId != null) { + RegionLogger.logRecovery(this.getFullPath(), persistentId, + getDistributionManager().getDistributionManagerId()); + } + } else { + RegionLogger.logCreate(this.getFullPath(), + getDistributionManager().getDistributionManagerId()); + + if (getPersistentID() != null) { + RegionLogger.logPersistence(this.getFullPath(), + getDistributionManager().getDistributionManagerId(), + getPersistentID()); + logger.info(LocalizedMessage.create(LocalizedStrings.DistributedRegion_NEW_PERSISTENT_REGION_CREATED, + new Object[] {this.getFullPath(), getPersistentID()})); + } + } + + /* no more union GII + // do union getInitialImage + Set rest = new HashSet(); + rest.addAll(advice.others); + rest.addAll(advice.preloaded); + // push profile w/ recovery flag turned off at same time that we + // do a union getInitialImage + boolean pushProfile = recoverFromDisk; + iiop.getFromAll(rest, pushProfile); + */ + cleanUpDestroyedTokensAndMarkGIIComplete(GIIStatus.NO_GII); + done = true; + return; + } + break; + } + } + + return; + } + + private void synchronizeWith(InternalDistributedMember target, + VersionSource idToRecover) { + InitialImageOperation op = new InitialImageOperation(this, this.entries); + op.synchronizeWith(target, idToRecover, null); + } + + /** + * If this region has concurrency controls enabled this will pull any missing + * changes from other replicates using InitialImageOperation and a filtered + * chunking protocol. + */ + public void synchronizeForLostMember(InternalDistributedMember + lostMember, VersionSource lostVersionID) { + if (this.concurrencyChecksEnabled == false) { + return; + } + CacheDistributionAdvisor advisor = getCacheDistributionAdvisor(); + Set targets = advisor.adviseInitializedReplicates(); + for (InternalDistributedMember target: targets) { + synchronizeWith(target, lostVersionID, lostMember); + } + } + + /** + * synchronize with another member wrt messages from the given "lost" member. + * This can be used when a primary bucket crashes to ensure that interrupted + * message distribution is mended. + */ + private void synchronizeWith(InternalDistributedMember target, + VersionSource versionMember, InternalDistributedMember lostMember) { + InitialImageOperation op = new InitialImageOperation(this, this.entries); + op.synchronizeWith(target, versionMember, lostMember); + } + + /** + * invoked just before an initial image is requested from another member + */ + /** remove any partial entries received in a failed GII */ + protected void cleanUpAfterFailedGII(boolean recoverFromDisk) { + DiskRegion dskRgn = getDiskRegion(); + //if we have a persistent region, instead of deleting everything on disk, + //we will just reset the "recovered from disk" flag. After + //the next GII we will delete these entries if they do not come + //in as part of the GII. + if (recoverFromDisk && dskRgn != null && dskRgn.isBackup()) { + dskRgn.resetRecoveredEntries(this); + return; + } + + if (!this.entries.isEmpty()) { + closeEntries(); + if (getDiskRegion() != null) { + getDiskRegion().clear(this, null); + } + // clear the left-members and version-tags sets in imageState + getImageState().getLeftMembers(); + getImageState().getVersionTags(); + // Clear OQL indexes + if (this.indexManager != null) { + try { + this.indexManager.rerunIndexCreationQuery(); + } catch (Exception ex){ + if (logger.isDebugEnabled()) { + logger.debug("Exception while clearing indexes after GII failure.", ex); + } + } + } + } + } + + private void initMembershipRoles() + { + synchronized (this.advisorListener) { + // hold sync to prevent listener from changing initial members + Set others = this.distAdvisor + .addMembershipListenerAndAdviseGeneric(this.advisorListener); + this.advisorListener.addMembers(others); + // initialize missing required roles with initial member info + if (getMembershipAttributes().hasRequiredRoles()) { + // AdvisorListener will also sync on missingRequiredRoles + synchronized (this.missingRequiredRoles) { + this.missingRequiredRoles.addAll(getMembershipAttributes() + .getRequiredRoles()); + // remove all the roles we are playing since they will never be + // missing + this.missingRequiredRoles.removeAll(getSystem() + .getDistributedMember().getRoles()); + for (Iterator iter = others.iterator(); iter.hasNext();) { + DistributedMember other = (DistributedMember)iter.next(); + this.missingRequiredRoles.removeAll(other.getRoles()); + } + } + } + } + if (getMembershipAttributes().hasRequiredRoles()) { + // wait up to memberTimeout for required roles... +// boolean requiredRolesAreMissing = false; + int memberTimeout = getSystem().getConfig().getMemberTimeout(); + if (logger.isDebugEnabled()) { + logger.debug("Waiting up to {} for required roles.", memberTimeout); + } + try { + if (this.giiMissingRequiredRoles) { + // force reliability loss and possibly resumption + isInitializingThread = true; + synchronized (this.advisorListener) { + synchronized (this.missingRequiredRoles) { + // forcing state of loss because of bad GII + this.isMissingRequiredRoles = true; + getCachePerfStats().incReliableRegionsMissing(1); + if (getMembershipAttributes().getLossAction().isAllAccess()) + getCachePerfStats().incReliableRegionsMissingFullAccess(1); // rahul + else if (getMembershipAttributes().getLossAction() + .isLimitedAccess()) + getCachePerfStats().incReliableRegionsMissingLimitedAccess(1); + else if (getMembershipAttributes().getLossAction().isNoAccess()) + getCachePerfStats().incReliableRegionsMissingNoAccess(1); + // pur code to increment the stats. + if (logger.isDebugEnabled()) { + logger.debug("GetInitialImage had missing required roles."); + } + // TODO: will this work with RECONNECT and REINITIALIZE? + isInitializingThread = true; + lostReliability(null, null); + if (this.missingRequiredRoles.isEmpty()) { + // all required roles are present so force resumption + this.isMissingRequiredRoles = false; + getCachePerfStats().incReliableRegionsMissing(-1); + if (getMembershipAttributes().getLossAction().isAllAccess()) + getCachePerfStats().incReliableRegionsMissingFullAccess(-1); // rahul + else if (getMembershipAttributes().getLossAction() + .isLimitedAccess()) + getCachePerfStats() + .incReliableRegionsMissingLimitedAccess(-1); + else if (getMembershipAttributes().getLossAction().isNoAccess()) + getCachePerfStats().incReliableRegionsMissingNoAccess(-1); + // pur code to increment the stats. + boolean async = resumeReliability(null, null); + if (async) { + advisorListener.destroyed = true; + } + } + } + } + } + else { + if (!getSystem().isLoner()) { + waitForRequiredRoles(memberTimeout); + } + synchronized (this.advisorListener) { + synchronized (this.missingRequiredRoles) { + if (this.missingRequiredRoles.isEmpty()) { + Assert.assertTrue(!this.isMissingRequiredRoles); + if (logger.isDebugEnabled()) { + logger.debug("Initialization completed with all required roles present."); + } + } + else { + // starting in state of loss... + this.isMissingRequiredRoles = true; + getCachePerfStats().incReliableRegionsMissing(1); + if (getMembershipAttributes().getLossAction().isAllAccess()) + getCachePerfStats().incReliableRegionsMissingFullAccess(1); // rahul + else if (getMembershipAttributes().getLossAction() + .isLimitedAccess()) + getCachePerfStats().incReliableRegionsMissingLimitedAccess(1); + else if (getMembershipAttributes().getLossAction().isNoAccess()) + getCachePerfStats().incReliableRegionsMissingNoAccess(1); + + if (logger.isDebugEnabled()) { + logger.debug("Initialization completed with missing required roles: {}", this.missingRequiredRoles); + } + isInitializingThread = true; + lostReliability(null, null); + } + } + } + } + } + catch (RegionDestroyedException ignore) { + // ignore to fix bug 34639 may be thrown by waitForRequiredRoles + } + catch (CancelException ignore) { + // ignore to fix bug 34639 may be thrown by waitForRequiredRoles + if (isInitializingThread) { + throw ignore; + } + } + catch (Exception e) { + logger.fatal(LocalizedMessage.create(LocalizedStrings.DistributedRegion_UNEXPECTED_EXCEPTION), e); + } + + } + // open latch which will allow any threads in lostReliability to proceed + this.initializationLatchAfterMemberTimeout.countDown(); + } + private boolean isRecoveryNeeded() { + return getDataPolicy().withPersistence() + && getDiskRegion().isRecreated(); + } + + // called by InitialImageOperation to clean up destroyed tokens + // release afterGetInitialImageInitializationLatch before unlocking + // cleanUpLock + @edu.umd.cs.findbugs.annotations.SuppressWarnings(value="UL_UNRELEASED_LOCK") + private void cleanUpDestroyedTokensAndMarkGIIComplete(GIIStatus giiStatus) + { + //We need to clean up the disk before we release the after get initial image latch + DiskRegion dskRgn = getDiskRegion(); + if (dskRgn != null && dskRgn.isBackup()) { + dskRgn.finishInitializeOwner(this, giiStatus); + } + ImageState is = getImageState(); + is.lockGII(); + // clear the version tag and left-members sets + is.getVersionTags(); + is.getLeftMembers(); + // remove DESTROYED tokens + RegionVersionVector rvv = is.getClearRegionVersionVector(); + try { + Iterator/**/ keysIt = getImageState().getDestroyedEntries(); + while (keysIt.hasNext()) { + this.entries.removeIfDestroyed(keysIt.next()); + } + if (rvv != null) { + // clear any entries received in the GII that are older than the RVV versions. + // this can happen if entry chunks were received prior to the clear() being + // processed + clearEntries(rvv); + } + //need to do this before we release the afterGetInitialImageLatch + if(persistenceAdvisor != null) { + persistenceAdvisor.setOnline(GIIStatus.didGII(giiStatus), false, getPersistentID()); + } + } + finally { + // release after gii lock first so basicDestroy will see isInitialized() + // be true + // when they get the cleanUp lock. + try { + releaseAfterGetInitialImageLatch(); + } finally { // make sure unlockGII is done for bug 40001 + is.unlockGII(); + } + } + + if (LocalRegion.ISSUE_CALLBACKS_TO_CACHE_OBSERVER){ + CacheObserverHolder.getInstance().afterMarkingGIICompleted(); + } + + //"Initializing region {0}" which is not acompanied by a completed message. Users think thread is stuck in some operation. Hence adding this log + logger.info(LocalizedMessage.create(LocalizedStrings.DistributedRegion_INITIALIZING_REGION_COMPLETED_0, this.getName())); + } + + /** + * @see LocalRegion#basicDestroy(EntryEventImpl, boolean, Object) + */ + @Override + protected + void basicDestroy(EntryEventImpl event, + boolean cacheWrite, + Object expectedOldValue) + throws EntryNotFoundException, CacheWriterException, TimeoutException { + // disallow local destruction for mirrored keysvalues regions + boolean invokeWriter = cacheWrite; + boolean hasSeen = false; + if (hasSeenEvent(event)) { + hasSeen = true; + } + checkIfReplicatedAndLocalDestroy(event); + + try { + if (this.requiresOneHopForMissingEntry(event)) { + // bug #45704: see if a one-hop must be done for this operation + RegionEntry re = getRegionEntry(event.getKey()); + if (re == null /*|| re.isTombstone()*/ || !this.generateVersionTag) { + if (this.srp == null) { + // only assert for non-client regions. + Assert.assertTrue(!this.dataPolicy.withReplication() || !this.generateVersionTag); + } + if (!event.isBulkOpInProgress() || this.dataPolicy.withStorage()) { + // removeAll will send a single one-hop for empty regions. for other missing entries + // we need to get a valid version number before modifying the local cache + // TODO: deltaGII: verify that delegating to a peer when this region is also a client is acceptable + boolean didDistribute = RemoteDestroyMessage.distribute(event, expectedOldValue, !this.generateVersionTag); + + if (!this.generateVersionTag && !didDistribute) { + throw new PersistentReplicatesOfflineException(); + } + + if (didDistribute) { + if (logger.isTraceEnabled()) { + logger.trace("Event after remoteDestroy operation: {}", event); + } + invokeWriter = false; // remote cache invoked the writer + if (event.getVersionTag() == null) { + // if the event wasn't applied by the one-hop replicate it will not have a version tag + // and so should not be applied to this cache + return; + } + } + } + } + } + + super.basicDestroy(event, invokeWriter, expectedOldValue); + + // if this is a destroy coming in from remote source, free up lock resources + // if this is a local origin destroy, this will happen after lock is + // released + if (this.scope.isGlobal() && event.isOriginRemote()) { + try { + getLockService().freeResources(event.getKey()); + } + catch (LockServiceDestroyedException ignore) { + } + } + + return; + } + finally { + if (hasSeen) { + if (event.isBulkOpInProgress() && !event.isOriginRemote()) { + event.getRemoveAllOperation().addEntry(event, true); + } + if (!getConcurrencyChecksEnabled() || event.hasValidVersionTag()) { + distributeDestroy(event, expectedOldValue); + event.invokeCallbacks(this,true, false); + } + } + } + } + + @Override + void basicDestroyPart3(RegionEntry re, EntryEventImpl event, + boolean inTokenMode, boolean duringRI, boolean invokeCallbacks, Object expectedOldValue) { + + distributeDestroy(event, expectedOldValue); + super.basicDestroyPart3(re, event, inTokenMode, duringRI, invokeCallbacks, expectedOldValue); + } + + void distributeDestroy(EntryEventImpl event, Object expectedOldValue) { + if (event.isDistributed() && !event.isOriginRemote() && !event.isBulkOpInProgress()) { + boolean distribute = !event.getInhibitDistribution(); + if (distribute) { + DestroyOperation op = new DestroyOperation(event); + op.distribute(); + } + } + } + + @Override + boolean evictDestroy(LRUEntry entry) { + boolean evictDestroyWasDone = super.evictDestroy(entry); + if (evictDestroyWasDone) { + if (this.scope.isGlobal()) { + try { + getLockService().freeResources(entry.getKey()); + } + catch (LockServiceDestroyedException ignore) { + } + } + } + return evictDestroyWasDone; + } + + + /** + * @see LocalRegion#basicInvalidateRegion(RegionEventImpl) + */ + @Override + void basicInvalidateRegion(RegionEventImpl event) + { + // disallow local invalidation for replicated regions + if (!event.isDistributed() && getScope().isDistributed() + && getDataPolicy().withReplication()) { + throw new IllegalStateException(LocalizedStrings.DistributedRegion_NOT_ALLOWED_TO_DO_A_LOCAL_INVALIDATION_ON_A_REPLICATED_REGION.toLocalizedString()); + } + if (shouldDistributeInvalidateRegion(event)) { + distributeInvalidateRegion(event); + } + super.basicInvalidateRegion(event); + } + + /** + * decide if InvalidateRegionOperation should be sent to peers. broken out so + * that BucketRegion can override + * @param event + * @return true if {@link InvalidateRegionOperation} should be distributed, false otherwise + */ + protected boolean shouldDistributeInvalidateRegion(RegionEventImpl event) { + return event.isDistributed() && !event.isOriginRemote(); + } + + /** + * Distribute the invalidate of a region given its event. + * This implementation sends the invalidate to peers. + * @since 5.7 + */ + protected void distributeInvalidateRegion(RegionEventImpl event) { + new InvalidateRegionOperation(event).distribute(); + } + + /** + * @see LocalRegion#basicDestroyRegion(RegionEventImpl, boolean, boolean, + * boolean) + */ + @Override + void basicDestroyRegion(RegionEventImpl event, boolean cacheWrite, + boolean lock, boolean callbackEvents) throws CacheWriterException, + TimeoutException + { + final String path = getFullPath(); + //Keep track of regions that are being destroyed. This helps avoid a race + //when another member concurrently creates this region. See bug 42051. + boolean isClose = event.getOperation().isClose(); + if(!isClose) { + cache.beginDestroy(path, this); + } + try { + super.basicDestroyRegion(event, cacheWrite, lock, callbackEvents); + // send destroy region operation even if this is a localDestroyRegion (or + // close) + if (!event.isOriginRemote()) { + distributeDestroyRegion(event, true); + } else { + if(!event.isReinitializing()) { + RegionEventImpl localEvent = new RegionEventImpl(this, + Operation.REGION_LOCAL_DESTROY, event.getCallbackArgument(), false, getMyId(), + generateEventID()/* generate EventID */); + distributeDestroyRegion(localEvent, false/*fixes bug 41111*/); + } + } + notifyBridgeClients(event); + } + catch (CancelException e) { + if (logger.isDebugEnabled()) { + logger.debug("basicDestroyRegion short-circuited due to cancellation"); + } + } + finally { + if(!isClose) { + cache.endDestroy(path, this); + } + RegionLogger.logDestroy(path, getMyId(), getPersistentID(), isClose); + } + } + + + @Override + protected void distributeDestroyRegion(RegionEventImpl event, + boolean notifyOfRegionDeparture) { + if(persistenceAdvisor != null) { + persistenceAdvisor.releaseTieLock(); + } + new DestroyRegionOperation(event, notifyOfRegionDeparture).distribute(); + } + + /** + * Return true if invalidation occurred; false if it did not, for example if + * it was already invalidated + * + * @see LocalRegion#basicInvalidate(EntryEventImpl) + */ + @Override + void basicInvalidate(EntryEventImpl event) throws EntryNotFoundException + { + + boolean hasSeen = false; + if (hasSeenEvent(event)) { + hasSeen = true; + } + try { + // disallow local invalidation for replicated regions + if (event.isLocalInvalid() && !event.getOperation().isLocal() && getScope().isDistributed() + && getDataPolicy().withReplication()) { + throw new IllegalStateException(LocalizedStrings.DistributedRegion_NOT_ALLOWED_TO_DO_A_LOCAL_INVALIDATION_ON_A_REPLICATED_REGION.toLocalizedString()); + } + if (this.requiresOneHopForMissingEntry(event)) { + // bug #45704: see if a one-hop must be done for this operation + RegionEntry re = getRegionEntry(event.getKey()); + if (re == null/* || re.isTombstone()*/ || !this.generateVersionTag) { + if (this.srp == null) { + // only assert for non-client regions. + Assert.assertTrue(!this.dataPolicy.withReplication() || !this.generateVersionTag); + } + // TODO: deltaGII: verify that delegating to a peer when this region is also a client is acceptable + boolean didDistribute = RemoteInvalidateMessage.distribute(event, !this.generateVersionTag); + if (!this.generateVersionTag && !didDistribute) { + throw new PersistentReplicatesOfflineException(); + } + if (didDistribute) { + if (logger.isDebugEnabled()) { + logger.debug("Event after remoteInvalidate operation: {}", event); + } + if (event.getVersionTag() == null) { + // if the event wasn't applied by the one-hop replicate it will not have a version tag + // and so should not be applied to this cache + return; + } + } + } + } + + super.basicInvalidate(event); + + return; + } finally { + if (hasSeen) { + if (!getConcurrencyChecksEnabled() || event.hasValidVersionTag()) { + distributeInvalidate(event); + event.invokeCallbacks(this,true, false); + } + } + } + } + + @Override + void basicInvalidatePart3(RegionEntry re, EntryEventImpl event, + boolean invokeCallbacks) { + distributeInvalidate(event); + super.basicInvalidatePart3(re, event, invokeCallbacks); + } + + void distributeInvalidate(EntryEventImpl event) { + if (!this.regionInvalid && event.isDistributed() && !event.isOriginRemote() + && !isTX() /* only distribute if non-tx */) { + if (event.isDistributed() && !event.isOriginRemote()) { + boolean distribute = !event.getInhibitDistribution(); + if (distribute) { + InvalidateOperation op = new InvalidateOperation(event); + op.distribute(); + } + } + } + } + + + @Override + void basicUpdateEntryVersion(EntryEventImpl event) + throws EntryNotFoundException { + + try { + if (!hasSeenEvent(event)) { + super.basicUpdateEntryVersion(event); + } + return; + } finally { + if (!getConcurrencyChecksEnabled() || event.hasValidVersionTag()) { + distributeUpdateEntryVersion(event); + } + } + } + + private void distributeUpdateEntryVersion(EntryEventImpl event) { + if (!this.regionInvalid && event.isDistributed() && !event.isOriginRemote() + && !isTX() /* only distribute if non-tx */) { + if (event.isDistributed() && !event.isOriginRemote()) { + UpdateEntryVersionOperation op = new UpdateEntryVersionOperation(event); + op.distribute(); + } + } + } + + @Override + protected void basicClear(RegionEventImpl ev) + { + Lock dlock = this.getRegionDistributedLockIfGlobal(); + try { + super.basicClear(ev); + } + finally { + if (dlock != null) + dlock.unlock(); + } + } + + @Override + void basicClear(RegionEventImpl regionEvent, boolean cacheWrite) { + if (this.concurrencyChecksEnabled && !this.dataPolicy.withReplication()) { + boolean retry = false; + do { + // non-replicate regions must defer to a replicate for clear/invalidate of region + Set repls = this.distAdvisor.adviseReplicates(); + if (repls.size() > 0) { + InternalDistributedMember mbr = repls.iterator().next(); + RemoteRegionOperation op = RemoteRegionOperation.clear(mbr, this); + try { + op.distribute(); + return; + } catch (CancelException e) { + this.stopper.checkCancelInProgress(e); + retry = true; + } catch (RemoteOperationException e) { + this.stopper.checkCancelInProgress(e); + retry = true; + } + } + } while (retry); + } + // if no version vector or if no replicates are around, use the default mechanism + super.basicClear(regionEvent, cacheWrite); + } + + + @Override + void cmnClearRegion(RegionEventImpl regionEvent, boolean cacheWrite, boolean useRVV) { + boolean enableRVV = useRVV && this.dataPolicy.withReplication() && this.concurrencyChecksEnabled && !getDistributionManager().isLoner(); + + //Fix for 46338 - apparently multiple threads from the same VM are allowed + //to suspend locking, which is what distributedLockForClear() does. We don't + //want that to happen, so we'll synchronize to make sure only one thread on + //this member performs a clear. + synchronized(clearLock) { + if (enableRVV) { + + distributedLockForClear(); + try { + Set participants = getCacheDistributionAdvisor().adviseInvalidateRegion(); + // pause all generation of versions and flush from the other members to this one + try { + obtainWriteLocksForClear(regionEvent, participants); + clearRegionLocally(regionEvent, cacheWrite, null); + if (!regionEvent.isOriginRemote() && regionEvent.isDistributed()) { + DistributedClearOperation.clear(regionEvent, null, participants); + } + } finally { + releaseWriteLocksForClear(regionEvent, participants); + } + } + finally { + distributedUnlockForClear(); + } + } else { + Set participants = getCacheDistributionAdvisor().adviseInvalidateRegion(); + clearRegionLocally(regionEvent, cacheWrite, null); + if (!regionEvent.isOriginRemote() && regionEvent.isDistributed()) { + DistributedClearOperation.clear(regionEvent, null, participants); + } + } + } + + // since clients do not maintain RVVs except for tombstone GC + // we need to ensure that current ops reach the client queues + // before queuing a clear, but there is no infrastructure for doing so + notifyBridgeClients(regionEvent); + } + + /** + * Obtain a distributed lock for the clear operation. + */ + private void distributedLockForClear() { + if (!this.scope.isGlobal()) { // non-global regions must lock when using RVV + try { + getLockService().lock("_clearOperation", -1, -1); + } catch(IllegalStateException e) { + lockCheckReadiness(); + throw e; + } + } + } + + /** + * Release the distributed lock for the clear operation. + */ + private void distributedUnlockForClear() { + if (!this.scope.isGlobal()) { + try { + getLockService().unlock("_clearOperation"); + } catch(IllegalStateException e) { + lockCheckReadiness(); + throw e; + } + } + } + + + /** obtain locks preventing generation of new versions in other members + * @param participants + **/ + private void obtainWriteLocksForClear(RegionEventImpl regionEvent, Set participants) { + lockLocallyForClear(getDistributionManager(), getMyId()); + DistributedClearOperation.lockAndFlushToOthers(regionEvent, participants); + } + + /** pause local operations so that a clear() can be performed and flush comm channels to the given member + */ + public void lockLocallyForClear(DM dm, InternalDistributedMember locker) { + RegionVersionVector rvv = getVersionVector(); + if (rvv != null) { + // block new operations from being applied to the region map + rvv.lockForClear(getFullPath(), dm, locker); + //Check for region destroyed after we have locked, to make sure + //we don't continue a clear if the region has been destroyed. + checkReadiness(); + // wait for current operations to + if (!locker.equals(dm.getDistributionManagerId())) { + Set mbrs = getDistributionAdvisor().adviseCacheOp(); + StateFlushOperation.flushTo(mbrs, this); + } + } + } + + /** releases the locks obtained in obtainWriteLocksForClear + * @param participants */ + private void releaseWriteLocksForClear(RegionEventImpl regionEvent, Set participants) { + getVersionVector().unlockForClear(getMyId()); + DistributedClearOperation.releaseLocks(regionEvent, participants); + } + + /** + * Wait for in progress clears that were initiated by this member. + */ + private void waitForInProgressClear() { + + RegionVersionVector rvv = getVersionVector(); + if (rvv != null) { + synchronized(clearLock) { + //do nothing; + //DAN - I'm a little scared that the compiler might optimize + //away this synchronization if we really do nothing. Hence + //my fine log message below. This might not be necessary. + if (logger.isDebugEnabled()) { + logger.debug("Done waiting for clear"); + } + } + } + + } + + /** + * Distribute Tombstone garbage-collection information to all peers with storage + */ + protected EventID distributeTombstoneGC(Set keysRemoved) { + this.getCachePerfStats().incTombstoneGCCount(); + EventID eventId = new EventID(getSystem()); + DistributedTombstoneOperation gc = DistributedTombstoneOperation.gc(this, eventId); + gc.distribute(); + notifyClientsOfTombstoneGC(getVersionVector().getTombstoneGCVector(), keysRemoved, eventId, null); + return eventId; + } + + // test hook for DistributedAckRegionCCEDUnitTest + public static boolean LOCALCLEAR_TESTHOOK; + + @Override + void basicLocalClear(RegionEventImpl rEvent) { + if (getScope().isDistributed() && getDataPolicy().withReplication() && !LOCALCLEAR_TESTHOOK) { + throw new UnsupportedOperationException(LocalizedStrings.DistributedRegion_LOCALCLEAR_IS_NOT_SUPPORTED_ON_DISTRIBUTED_REPLICATED_REGIONS.toLocalizedString()); + } + super.basicLocalClear(rEvent); + } + + public final DistributionConfig getDistributionConfig() { + return getSystem().getDistributionManager().getConfig(); + } + + /** + * Sends a list of queued messages to members playing a specified role + * + * @param list + * List of QueuedOperation instances to send. Any messages sent will + * be removed from this list + * @param role + * the role that a recipient must be playing + * @return true if at least one message made it to at least one guy playing + * the role + */ + boolean sendQueue(List list, Role role) { + SendQueueOperation op = new SendQueueOperation(getDistributionManager(), + this, list, role); + return op.distribute(); + } + + /* + * @see SearchLoadAndWriteProcessor#initialize(LocalRegion, Object, Object) + */ + public final CacheDistributionAdvisor getDistributionAdvisor() + { + return this.distAdvisor; + } + + public final CacheDistributionAdvisor getCacheDistributionAdvisor() + { + return this.distAdvisor; + } + + public final PersistenceAdvisor getPersistenceAdvisor() { + return this.persistenceAdvisor; + } + + public final PersistentMemberID getPersistentID() { + return this.persistentId; + } + + /** Returns the distribution profile; lazily creates one if needed */ + public Profile getProfile() { + return this.distAdvisor.createProfile(); + } + + public void fillInProfile(Profile p) { + assert p instanceof CacheProfile; + CacheProfile profile = (CacheProfile)p; + profile.dataPolicy = getDataPolicy(); + profile.hasCacheLoader = basicGetLoader() != null; + profile.hasCacheWriter = basicGetWriter() != null; + profile.hasCacheListener = hasListener(); + Assert.assertTrue(this.scope.isDistributed()); + profile.scope = this.scope; + profile.inRecovery = getImageState().getInRecovery(); + profile.isPersistent = getDataPolicy().withPersistence(); + profile.setSubscriptionAttributes(getSubscriptionAttributes()); + // Kishor : Below PDX check is added for rolling upgrade support. We are + // removing Old wan in this checkin. PDX region are always gatewayEnabled + // irrespective whether gatewayHub is configured or not. + // Old version Pdx region always has this attribute true so to avoid region + // attribute comparison across member we are setting it to true. + if (this.isPdxTypesRegion()) { + profile.isGatewayEnabled = true; + } + else { + profile.isGatewayEnabled = false; + } + profile.serialNumber = getSerialNumber(); + profile.regionInitialized = this.isInitialized(); + if (!this.isUsedForPartitionedRegionBucket()) { + profile.memberUnInitialized = getCache().isUnInitializedMember( + profile.getDistributedMember()); + } + else { + profile.memberUnInitialized = false; + } + profile.persistentID = getPersistentID(); + if(getPersistenceAdvisor() != null) { + profile.persistenceInitialized = getPersistenceAdvisor().isOnline(); + } + profile.hasCacheServer = ((this.cache.getCacheServers().size() > 0)?true:false); + profile.requiresOldValueInEvents = this.dataPolicy.withReplication() && + this.filterProfile != null && this.filterProfile.hasCQs(); + profile.gatewaySenderIds = getGatewaySenderIds(); + profile.asyncEventQueueIds = getAsyncEventQueueIds(); + profile.isOffHeap = getOffHeap(); + } + + /** + * Return the DistributedLockService associated with this Region. This method + * will lazily create that service the first time it is invoked on this + * region. + */ + public DistributedLockService getLockService() + { + synchronized (this.dlockMonitor) { +// Assert.assertTrue(this.scope.isGlobal()); since 7.0 this is used for distributing clear() ops + + String svcName = getFullPath(); + + if (this.dlockService == null) { + this.dlockService = DistributedLockService.getServiceNamed(svcName); + if (this.dlockService == null) { + this.dlockService = DLockService.create( + getFullPath(), + getSystem(), + true /*distributed*/, + false /*destroyOnDisconnect*/, // region destroy will destroy dls + false /*automateFreeResources*/); // manual freeResources only + } + // handle is-lock-grantor region attribute... + if (this.isLockGrantor) { + this.dlockService.becomeLockGrantor(); + } + if (logger.isDebugEnabled()) { + logger.debug("LockService for {} is using LockLease={}, LockTimeout=", svcName, getCache().getLockLease(), getCache().getLockTimeout()); + } + } + return this.dlockService; + } + } + + /** + * @see LocalRegion#isCurrentlyLockGrantor() + */ + @Override + protected boolean isCurrentlyLockGrantor() + { + if (!this.scope.isGlobal()) + return false; + return getLockService().isLockGrantor(); + } + + @Override + public boolean isLockGrantor() + { + if (!this.scope.isGlobal()) + return false; + return this.isLockGrantor; + } + + @Override + public void becomeLockGrantor() + { + checkReadiness(); + checkForLimitedOrNoAccess(); + if (!this.scope.isGlobal()) { + throw new IllegalStateException(LocalizedStrings.DistributedRegion_DISTRIBUTION_LOCKS_ARE_ONLY_SUPPORTED_FOR_REGIONS_WITH_GLOBAL_SCOPE_NOT_0.toLocalizedString(this.scope)); + } + + DistributedLockService svc = getLockService(); + try { + super.becomeLockGrantor(); + if (!svc.isLockGrantor()) { + svc.becomeLockGrantor(); + } + } + finally { + if (!svc.isLockGrantor()) { + if (logger.isDebugEnabled()) { + logger.debug("isLockGrantor is false after becomeLockGrantor for {}", getFullPath()); + } + } + } + } + + /** @return the deserialized value */ + @Override + @Retained + protected Object findObjectInSystem(KeyInfo keyInfo, boolean isCreate, + TXStateInterface txState, boolean generateCallbacks, Object localValue, boolean disableCopyOnRead, + boolean preferCD, ClientProxyMembershipID requestingClient, EntryEventImpl clientEvent, boolean returnTombstones, boolean allowReadFromHDFS) + throws CacheLoaderException, TimeoutException + { + checkForLimitedOrNoAccess(); + + RegionEntry re = null; + final Object key = keyInfo.getKey(); + final Object aCallbackArgument = keyInfo.getCallbackArg(); + Operation op; + if (isCreate) { + op = Operation.CREATE; + } + else { + op = Operation.UPDATE; + } + long lastModified = 0L; + boolean fromServer = false; + EntryEventImpl event = null; + @Retained Object result = null; + boolean incrementUseCountForSqlf = false; + try { + { + if (this.srp != null) { + EntryEventImpl holder = EntryEventImpl.createVersionTagHolder(); + try { + Object value = this.srp.get(key, aCallbackArgument, holder); + fromServer = value != null; + if (fromServer) { + event = EntryEventImpl.create(this, op, key, value, + aCallbackArgument, false, + getMyId(), generateCallbacks); + event.setVersionTag(holder.getVersionTag()); + event.setFromServer(fromServer); // fix for bug 39358 + if (clientEvent != null && clientEvent.getVersionTag() == null) { + clientEvent.setVersionTag(holder.getVersionTag()); + } + } + } finally { + holder.release(); + } + } + } + + if (!fromServer) { + //Do not generate Event ID + event = EntryEventImpl.create(this, op, key, null /*newValue*/, + aCallbackArgument, false, + getMyId(), generateCallbacks); + if (requestingClient != null) { + event.setContext(requestingClient); + } + SearchLoadAndWriteProcessor processor = + SearchLoadAndWriteProcessor.getProcessor(); + try { + processor.initialize(this, key, aCallbackArgument); + // processor fills in event + processor.doSearchAndLoad(event, txState, localValue); + if (clientEvent != null && clientEvent.getVersionTag() == null) { + clientEvent.setVersionTag(event.getVersionTag()); + } + lastModified = processor.getLastModified(); + } + finally { + processor.release(); + } + } + if (event.hasNewValue() && !isMemoryThresholdReachedForLoad()) { + try { + // Set eventId. Required for interested clients. + event.setNewEventId(cache.getDistributedSystem()); + + long startPut = CachePerfStats.getStatTime(); + validateKey(key); +// if (event.getOperation().isLoad()) { +// this.performedLoad(event, lastModified, txState); +// } + // this next step also distributes the object to other processes, if necessary + try { + // set the tail key so that the event is passed to GatewaySender queues. + // if the tailKey is not set, the event gets filtered out in ParallelGatewaySenderQueue + if (this instanceof BucketRegion) { + if (((BucketRegion)this).getPartitionedRegion().isParallelWanEnabled()) + ((BucketRegion)this).handleWANEvent(event); + } + re = basicPutEntry(event, lastModified); + incrementUseCountForSqlf = GemFireCacheImpl.sqlfSystem() ; + } catch (ConcurrentCacheModificationException e) { + // the cache was modified while we were searching for this entry and + // the netsearch result was elided. Return the current value from the cache + re = getRegionEntry(key); + if (re != null) { + event.setNewValue(re.getValue(this)); // OFFHEAP: need to incrc, copy to heap to setNewValue, decrc + } + } + if (!isTX()) { + getCachePerfStats().endPut(startPut, event.isOriginRemote()); + } + } + catch (CacheWriterException cwe) { + if (logger.isDebugEnabled()) { + logger.debug("findObjectInSystem: writer exception putting entry {} : {}", event, cwe); + } + } + } + if (isCreate) { + recordMiss(re, key); + } + + if (preferCD) { + if (event.hasDelta()) { + result = event.getNewValue(); + } else { + result = event.getRawNewValueAsHeapObject(); + } + } else { + result = event.getNewValue(); + } + //For SQLFire , we need to increment the use count so that returned + //object has use count 2 + if( incrementUseCountForSqlf && result instanceof Chunk) { + ((Chunk)result).retain(); + } + return result; + } finally { + if (event != null) { + event.release(); + } + } + } + + protected ConcurrentParallelGatewaySenderQueue getHDFSQueue() { + if (this.hdfsQueue == null) { + String asyncQId = this.getPartitionedRegion().getHDFSEventQueueName(); + final AsyncEventQueueImpl asyncQ = (AsyncEventQueueImpl)this.getCache().getAsyncEventQueue(asyncQId); + final AbstractGatewaySender gatewaySender = (AbstractGatewaySender)asyncQ.getSender(); + AbstractGatewaySenderEventProcessor ep = gatewaySender.getEventProcessor(); + if (ep == null) return null; + hdfsQueue = (ConcurrentParallelGatewaySenderQueue)ep.getQueue(); + } + return hdfsQueue; + } + + /** hook for subclasses to note that a cache load was performed + * @see BucketRegion#performedLoad + */ +// void performedLoad(EntryEventImpl event, long lastModifiedTime, TXState txState) +// throws CacheWriterException { +// // no action in DistributedRegion +// } + + /** + * @see LocalRegion#cacheWriteBeforeDestroy(EntryEventImpl, Object) + * @return true if cacheWrite was performed + */ + @Override + boolean cacheWriteBeforeDestroy(EntryEventImpl event, Object expectedOldValue) + throws CacheWriterException, EntryNotFoundException, TimeoutException + { + + boolean result = false; + if (event.isDistributed()) { + CacheWriter localWriter = basicGetWriter(); + Set netWriteRecipients = localWriter == null ? this.distAdvisor + .adviseNetWrite() : null; + + if ((localWriter != null + || (netWriteRecipients != null && !netWriteRecipients.isEmpty())) && + !event.inhibitAllNotifications()) { + final long start = getCachePerfStats().startCacheWriterCall(); + try { + event.setOldValueFromRegion(); + SearchLoadAndWriteProcessor processor = + SearchLoadAndWriteProcessor.getProcessor(); + try { + processor.initialize(this, event.getKey(), null); + processor.doNetWrite(event, netWriteRecipients, localWriter, + SearchLoadAndWriteProcessor.BEFOREDESTROY); + result = true; + } + finally { + processor.release(); + } + } + finally { + getCachePerfStats().endCacheWriterCall(start); + } + } + serverDestroy(event, expectedOldValue); + } + return result; + } + + /** + * @see LocalRegion#cacheWriteBeforeRegionDestroy(RegionEventImpl) + */ + @Override + boolean cacheWriteBeforeRegionDestroy(RegionEventImpl event) + throws CacheWriterException, TimeoutException + { + boolean result = false; + if (event.getOperation().isDistributed()) { + CacheWriter localWriter = basicGetWriter(); + Set netWriteRecipients = localWriter == null ? this.distAdvisor + .adviseNetWrite() : null; + + if (localWriter != null + || (netWriteRecipients != null && !netWriteRecipients.isEmpty())) { + final long start = getCachePerfStats().startCacheWriterCall(); + try { + SearchLoadAndWriteProcessor processor = + SearchLoadAndWriteProcessor.getProcessor(); + try { + processor.initialize(this, "preDestroyRegion", null); + processor.doNetWrite(event, netWriteRecipients, localWriter, + SearchLoadAndWriteProcessor.BEFOREREGIONDESTROY); + result = true; + } + finally { + processor.release(); + } + } + finally { + getCachePerfStats().endCacheWriterCall(start); + } + } + serverRegionDestroy(event); + } + return result; + } + + protected void distributedRegionCleanup(RegionEventImpl event) + { + if (event == null || event.getOperation() != Operation.REGION_REINITIALIZE) { + // only perform this if reinitialize is not due to resumption + // (REGION_REINITIALIZE) + // or if event is null then this was a failed initialize (create) + // wake up any threads in waitForRequiredRoles... they will checkReadiness + synchronized (this.missingRequiredRoles) { + this.missingRequiredRoles.notifyAll(); + } + } + + if(persistenceAdvisor != null) { + this.persistenceAdvisor.close(); // fix for bug 41094 + } + this.distAdvisor.close(); + DLockService dls = null; + + //Fix for bug 46338. Wait for in progress clears before destroying the + //lock service, because destroying the service immediately releases the dlock + waitForInProgressClear(); + + synchronized (this.dlockMonitor) { + if (this.dlockService != null) { + dls = (DLockService)this.dlockService; + } + } + if (dls != null) { + try { + dls.destroyAndRemove(); + } + catch (CancelException e) { + // bug 37118 + if (logger.isDebugEnabled()) { + logger.debug("DLS destroy abridged due to shutdown", e); + } + } + catch (Exception ex) { + logger.warn(LocalizedMessage.create(LocalizedStrings.DistributedRegion_DLS_DESTROY_MAY_HAVE_FAILED_FOR_0, this.getFullPath()), ex); + } + } + if (this.rmq != null) { + this.rmq.close(); + } + + //Fix for #48066 - make sure that region operations are completely + //distributed to peers before destroying the region. + long timeout = 1000L * getCache().getDistributedSystem().getConfig().getAckWaitThreshold(); + Boolean flushOnClose = !Boolean.getBoolean("gemfire.no-flush-on-close"); // test hook + if (!this.cache.forcedDisconnect() && + flushOnClose && this.getDistributionManager().getMembershipManager() != null + && this.getDistributionManager().getMembershipManager().isConnected()) { + getDistributionAdvisor().forceNewMembershipVersion(); + try { + getDistributionAdvisor().waitForCurrentOperations(timeout); + } catch (Exception e) { + // log this but try to close the region so that listeners are invoked + logger.warn(LocalizedMessage.create(LocalizedStrings.GemFireCache_0_ERROR_CLOSING_REGION_1, + new Object[] { this, getFullPath() }), e); + } + } + } + + /** + * In addition to inherited code this method also invokes + * RegionMembershipListeners + */ + @Override + protected void postCreateRegion() + { + super.postCreateRegion(); + // should we sync on this.distAdvisor first to prevent bug 44369? + synchronized (this.advisorListener) { + Set others = this.advisorListener.getInitialMembers(); + CacheListener[] listeners = fetchCacheListenersField(); + if (listeners != null) { + for (int i = 0; i < listeners.length; i++) { + if (listeners[i] instanceof RegionMembershipListener) { + RegionMembershipListener rml = (RegionMembershipListener)listeners[i]; + try { + DistributedMember[] otherDms = new DistributedMember[others + .size()]; + others.toArray(otherDms); + rml.initialMembers(this, otherDms); + } + catch (VirtualMachineError err) { + SystemFailure.initiateFailure(err); + // If this ever returns, rethrow the error. We're poisoned + // now, so don't let this thread continue. + throw err; + } + catch (Throwable t) { + // Whenever you catch Error or Throwable, you must also + // catch VirtualMachineError (see above). However, there is + // _still_ a possibility that you are dealing with a cascading + // error condition, so you also need to check to see if the JVM + // is still usable: + SystemFailure.checkFailure(); + logger.error(LocalizedMessage.create(LocalizedStrings.DistributedRegion_EXCEPTION_OCCURRED_IN_REGIONMEMBERSHIPLISTENER), t); + } + } + } + } + Set allGatewaySenderIds = getAllGatewaySenderIds(); + if (!allGatewaySenderIds.isEmpty()) { + for (GatewaySender sender : cache.getAllGatewaySenders()) { + if (sender.isParallel() + && allGatewaySenderIds.contains(sender.getId())) { + //Fix for Bug#51491. Once decided to support this configuration we have call addShadowPartitionedRegionForUserRR + if (sender.getId().contains( + AsyncEventQueueImpl.ASYNC_EVENT_QUEUE_PREFIX)) { + throw new AsyncEventQueueConfigurationException( + LocalizedStrings.ParallelAsyncEventQueue_0_CAN_NOT_BE_USED_WITH_REPLICATED_REGION_1.toLocalizedString(new Object[] { + AsyncEventQueueImpl + .getAsyncEventQueueIdFromSenderId(sender.getId()), + this.getFullPath() })); + } + throw new GatewaySenderConfigurationException( + LocalizedStrings.ParallelGatewaySender_0_CAN_NOT_BE_USED_WITH_REPLICATED_REGION_1 + .toLocalizedString(new Object[] { sender.getId(), + this.getFullPath() })); + + // if (sender.isRunning()) { + // ConcurrentParallelGatewaySenderQueue parallelQueue = + // (ConcurrentParallelGatewaySenderQueue)((ParallelGatewaySenderImpl)sender) + // .getQueues().toArray(new RegionQueue[1])[0]; + // parallelQueue.addShadowPartitionedRegionForUserRR(this); + // } + } + } + } + } + } + + /** + * Free resources held by this region. This method is invoked after + * isDestroyed has been set to true. + * + * @see LocalRegion#postDestroyRegion(boolean, RegionEventImpl) + */ + @Override + protected void postDestroyRegion(boolean destroyDiskRegion, + RegionEventImpl event) + { + distributedRegionCleanup(event); + + try { + super.postDestroyRegion(destroyDiskRegion, event); + } + catch (CancelException e) { + // I don't think this should ever happens: bulletproofing for bug 39454 + logger.warn("postDestroyRegion: encountered cancellation", e); + } + + if (this.rmq != null && destroyDiskRegion) { + this.rmq.destroy(); + } + } + + @Override + void cleanupFailedInitialization() + { + super.cleanupFailedInitialization(); + try { + RegionEventImpl ev = new RegionEventImpl(this, Operation.REGION_CLOSE, null, false, getMyId(), + generateEventID()); + distributeDestroyRegion(ev, true); + distributedRegionCleanup(null); + } catch(RegionDestroyedException e) { + //someone else must have concurrently destroyed the region (maybe a distributed destroy) + } catch(CancelException e) { + //cache or DS is closed, ignore + } catch(VirtualMachineError e) { + SystemFailure.initiateFailure(e); + throw e; + } catch(Throwable t) { + logger.warn(LocalizedMessage.create(LocalizedStrings.DistributedRegion_ERROR_CLEANING_UP_FAILED_INITIALIZATION, this), t); + } + } + + /** + * @see LocalRegion#handleCacheClose(Operation) + */ + @Override + void handleCacheClose(Operation op) + { + try { + super.handleCacheClose(op); + } + finally { + distributedRegionCleanup(null); + } + } + + /** + * invoke a cache writer before a put is performed elsewhere + * + * @see LocalRegion#cacheWriteBeforePut(EntryEventImpl, Set, CacheWriter, boolean, Object) + */ + @Override + protected void cacheWriteBeforePut(EntryEventImpl event, Set netWriteRecipients, + CacheWriter localWriter, + boolean requireOldValue, + Object expectedOldValue) + throws CacheWriterException, TimeoutException + { + if ((localWriter != null + || (netWriteRecipients != null && !netWriteRecipients.isEmpty())) && + !event.inhibitAllNotifications()) { + final boolean isNewKey = event.getOperation().isCreate(); + final long start = getCachePerfStats().startCacheWriterCall(); + try { + SearchLoadAndWriteProcessor processor = + SearchLoadAndWriteProcessor.getProcessor(); + processor.initialize(this, "preUpdate", null); + try { + if (!isNewKey) { + processor.doNetWrite(event, netWriteRecipients, localWriter, + SearchLoadAndWriteProcessor.BEFOREUPDATE); + } + else { + processor.doNetWrite(event, netWriteRecipients, localWriter, + SearchLoadAndWriteProcessor.BEFORECREATE); + } + } + finally { + processor.release(); + } + } + finally { + getCachePerfStats().endCacheWriterCall(start); + } + } + + serverPut(event, requireOldValue, expectedOldValue); + } + + @Override + protected void cacheListenersChanged(boolean nowHasListener) + { + if (nowHasListener) { + this.advisorListener.initRMLWrappers(); + } + new UpdateAttributesProcessor(this).distribute(); + } + + @Override + protected void cacheWriterChanged(CacheWriter oldWriter) + { + super.cacheWriterChanged(oldWriter); + if (oldWriter == null ^ basicGetWriter() == null) { + new UpdateAttributesProcessor(this).distribute(); + } + } + + @Override + protected void cacheLoaderChanged(CacheLoader oldLoader) + { + super.cacheLoaderChanged(oldLoader); + if (oldLoader == null ^ basicGetLoader() == null) { + new UpdateAttributesProcessor(this).distribute(); + } + } + + public void addGatewaySenderId(String gatewaySenderId) { + super.addGatewaySenderId(gatewaySenderId); + new UpdateAttributesProcessor(this).distribute(); + } + + public void removeGatewaySenderId(String gatewaySenderId) { + super.removeGatewaySenderId(gatewaySenderId); + new UpdateAttributesProcessor(this).distribute(); + } + + public void addAsyncEventQueueId(String asyncEventQueueId) { + super.addAsyncEventQueueId(asyncEventQueueId); + new UpdateAttributesProcessor(this).distribute(); + } + + public void removeAsyncEventQueueId(String asyncEventQueueId) { + super.removeAsyncEventQueueId(asyncEventQueueId); + new UpdateAttributesProcessor(this).distribute(); + } + + public void checkSameSenderIdsAvailableOnAllNodes() { + List senderIds = this.getCacheDistributionAdvisor() + .adviseSameGatewaySenderIds(getGatewaySenderIds()); + if (!senderIds.isEmpty()) { + throw new GatewaySenderConfigurationException( + LocalizedStrings.Region_REGION_0_HAS_1_GATEWAY_SENDER_IDS_ANOTHER_CACHE_HAS_THE_SAME_REGION_WITH_2_GATEWAY_SENDER_IDS_FOR_REGION_ACROSS_ALL_MEMBERS_IN_DS_GATEWAY_SENDER_IDS_SHOULD_BE_SAME + .toLocalizedString(new Object[] { this.getName(), + senderIds.get(0), senderIds.get(1) })); + } + + List asycnQueueIds = this.getCacheDistributionAdvisor() + .adviseSameAsyncEventQueueIds(getAsyncEventQueueIds()); + if (!asycnQueueIds.isEmpty()) { + throw new GatewaySenderConfigurationException( + LocalizedStrings.Region_REGION_0_HAS_1_ASYNC_EVENT_QUEUE_IDS_ANOTHER_CACHE_HAS_THE_SAME_REGION_WITH_2_ASYNC_EVENT_QUEUE_IDS_FOR_REGION_ACROSS_ALL_MEMBERS_IN_DS_ASYNC_EVENT_QUEUE_IDS_SHOULD_BE_SAME + .toLocalizedString(new Object[] { this.getName(), + asycnQueueIds.get(0), asycnQueueIds.get(1) })); + } + } + /** + * Wraps call to dlock service in order to throw RegionDestroyedException if + * dlock service throws IllegalStateException and isDestroyed is true. + */ + private boolean isLockingSuspendedByCurrentThread() + { + try { + return getLockService().isLockingSuspendedByCurrentThread(); + } + catch (IllegalStateException e) { + lockCheckReadiness(); + throw e; + } + } + + /** + * If this region's scope is GLOBAL, get a distributed lock on the given key, + * and return the Lock. The sender is responsible for unlocking. + * + * @return the acquired Lock if the region is GLOBAL, otherwise null. + * + * @throws NullPointerException + * if key is null + */ + private Lock getDistributedLockIfGlobal(Object key) throws TimeoutException + { + if (getScope().isGlobal()) { + if (isLockingSuspendedByCurrentThread()) + return null; + long start = System.currentTimeMillis(); + long timeLeft = getCache().getLockTimeout(); + long lockTimeout = timeLeft; + StringId msg = null; + Object[] msgArgs = null; + while (timeLeft > 0 || lockTimeout == -1) { + this.cache.getCancelCriterion().checkCancelInProgress(null); + boolean interrupted = Thread.interrupted(); + try { + Lock dlock = getDistributedLock(key); + if (!dlock.tryLock(timeLeft, TimeUnit.SECONDS)) { + msg = LocalizedStrings.DistributedRegion_ATTEMPT_TO_ACQUIRE_DISTRIBUTED_LOCK_FOR_0_FAILED_AFTER_WAITING_1_SECONDS; + msgArgs = new Object[] {key, Long.valueOf((System.currentTimeMillis() - start) / 1000L)}; + break; + } + + return dlock; + } + catch (InterruptedException ex) { + interrupted = true; + this.cache.getCancelCriterion().checkCancelInProgress(ex); + // FIXME Why is it OK to keep going? + if (lockTimeout > -1) { + timeLeft = getCache().getLockTimeout() + - ((System.currentTimeMillis() - start) / 1000L); + } + } + finally { + if (interrupted) { + Thread.currentThread().interrupt(); + } + } + } // while + if (msg == null) { + msg = LocalizedStrings.DistributedRegion_TIMED_OUT_AFTER_WAITING_0_SECONDS_FOR_THE_DISTRIBUTED_LOCK_FOR_1; + msgArgs = new Object[] {Integer.valueOf(getCache().getLockTimeout()), key}; + } + throw new TimeoutException(msg.toLocalizedString(msgArgs)); + } + else { + return null; + } + } + + /** + * Checks if the entry is a valid entry + * + * @return true if entry not null or entry is not removed + * + */ + protected boolean checkEntryNotValid(RegionEntry mapEntry) + { + return (mapEntry == null || (mapEntry.isRemoved() && !mapEntry.isTombstone())); + } + + /** + * Get the best iterator for iterating over the contents of this + * region. This method will either an iterator that uses hash + * ordering from the entry map, or, in the case of an overflow + * region, an iterator that iterates over the entries in disk order. + */ + public Iterator getBestIterator(boolean includeValues) { + DiskRegion dr = this.getDiskRegion(); + + if (DiskPage.DISK_PAGE_SIZE > 0 && includeValues && dr != null) { + //Wait for the disk region to recover values first. + dr.waitForAsyncRecovery(); + if(dr.getNumOverflowOnDisk() > 0) { + return new DiskSavyIterator(); + } + } + return this.entries.regionEntries().iterator(); + } + +// /** +// * The maximum number of entries that can be put into the diskMap before +// * some of them are read from disk and returned by this iterator. +// * The larger this number the more memory this iterator is allowed to consume +// * and the better it will do in optimally reading the pending entries. +// */ +// static final long MAX_PENDING_ENTRIES = Long.getLong("gemfire.MAX_PENDING_ENTRIES", 1000000).longValue(); + /** + * Should only be used if this region has entries on disk that are not in memory. + * This currently happens for overflow and for recovery when values are not recovered. + * The first iteration does a normal iteration of the regionEntries. + * But if it finds an entry that is currently only on disk + * it saves it in a list sorted by the location on disk. + * Once the regionEntries iterator has nothing more to iterate + * it starts iterating over, in disk order, the entries on disk. + */ + private class DiskSavyIterator implements Iterator { + private boolean usingIt = true; + private Iterator it = entries.regionEntries().iterator(); + // iterator for nested ArrayLists + private Iterator subIt = null; + //private final ArrayList diskList = new ArrayList(/*@todo presize based on number of entries only on disk*/); + // value will be either RegionEntry or an ArrayList +// private long pendingCount = 0; + private final java.util.TreeMap diskMap = new java.util.TreeMap(); + +// /** +// * used to iterate over the fullest pages at the time we have +// * added MAX_PENDING_ENTRIES to diskMap; +// */ +// private Iterator> sortedDiskIt; + + public DiskSavyIterator() { + } + + public boolean hasNext() { + boolean result; + if (this.subIt != null) { + result = this.subIt.hasNext(); + if (!result) { + this.subIt = null; + } else { + return result; + } + } +// if (this.sortedDiskIt != null) { +// result = this.sortedDiskIt.hasNext(); +// if (!result) { +// this.sortedDiskIt = null; +// } else { +// return result; +// } +// } + result = this.it.hasNext(); + if (this.usingIt && !result) { + this.usingIt = false; +// long start = System.currentTimeMillis(); +// Collections.sort(this.diskList); +// long end = System.currentTimeMillis(); + this.it = this.diskMap.values().iterator(); + result = this.it.hasNext(); + } + return result; + } + + public RegionEntry next() { + for (;;) { + if (this.subIt != null) { + return this.subIt.next(); +// } else if (this.sortedDiskIt != null) { +// Map.Entry me = this.sortedDiskIt.next(); +// // remove the page from the diskMap. +// this.diskMap.remove(me.getKey()); +// Object v = me.getValue(); +// int size = 1; +// if (v instanceof ArrayList) { +// ArrayList al = (ArrayList)v; +// size = al.size(); +// // set up the iterator to start returning the entries on that page +// this.subIt = al.iterator(); +// v = this.subIt.next(); +// } + +// // decrement pendingCount by the number of entries on the page +// this.pendingCount -= size; +// // return the first region entry on this page +// return v; + } + if (this.usingIt) { + RegionEntry re = (RegionEntry)this.it.next(); + DiskPosition dp = new DiskPosition(); + if (re.isOverflowedToDisk(DistributedRegion.this, dp)) { + // add dp to sorted list + DiskPage dPage = new DiskPage(dp); + Object v = this.diskMap.get(dPage); + if (v == null) { + this.diskMap.put(dPage, re); + } else if (v instanceof ArrayList) { + ArrayList al = (ArrayList)v; + al.add(re); + } else { + ArrayList al = new ArrayList(); + al.add(v); + al.add(re); + this.diskMap.put(dPage, al); + } + if (!hasNext()) { + assert false; // must be true + } +// this.pendingCount++; +// if (this.usingIt && this.pendingCount >= MAX_PENDING_ENTRIES) { +// // find the pages that have the most entries +// int largestPage = 1; +// ArrayList> largestPages +// = new ArrayList>(); +// for (Map.Entry me: this.diskMap.entrySet()) { +// int meSize = 1; +// if (me.getValue() instanceof ArrayList) { +// meSize = ((ArrayList)me.getValue()).size(); +// } +// if (meSize > largestPage) { +// largestPage = meSize; +// largestPages.clear(); // throw away smaller pages +// largestPages.add(me); +// } else if (meSize == largestPage) { +// largestPages.add(me); +// } else { +// // ignore this page +// } +// } +// Collections.sort(largestPages, new Comparator +// >() { +// /** +// * Note: this comparator imposes orderings that are inconsistent +// * with equals. +// */ +// public int compare(Map.Entry o1, Map.Entry o2) { +// return o1.getKey().compareTo(o2.getKey()); +// } +// }); +// this.sortedDiskIt = largestPages.iterator(); +// // loop around and fetch first value from sortedDiskIt +// } + } else { + return re; + } + } else { + Object v = this.it.next(); + if (v instanceof ArrayList) { + ArrayList al = (ArrayList)v; + this.subIt = al.iterator(); + return this.subIt.next(); + } else { + return (RegionEntry) v; + } + } + } + } + + public void remove() { + throw new UnsupportedOperationException(); + } + } + + public static class DiskPosition implements Comparable { + private long oplogId; + private long offset; + + DiskPosition() { + } + void setPosition(long oplogId, long offset) { + this.oplogId = oplogId; + this.offset = offset; + } + + @Override + public int hashCode() { + return Long.valueOf(this.oplogId ^ this.offset).hashCode(); + } + + @Override + public boolean equals(Object o) { + if (o instanceof DiskPosition) { + DiskPosition other = (DiskPosition)o; + return this.oplogId == other.oplogId && this.offset == other.offset; + } else { + return false; + } + } + public int compareTo(DiskPosition o) { + int result = Long.signum(this.oplogId - o.oplogId); + if (result == 0) { + result = Long.signum(this.offset - o.offset); + } + return result; + } + + @Override + public String toString() { + StringBuffer sb = new StringBuffer(); + sb.append("<").append(this.oplogId).append(":").append(this.offset).append(">"); + return sb.toString(); + } + } + static class DiskPage extends DiskPosition { + + static final long DISK_PAGE_SIZE = Long.getLong("gemfire.DISK_PAGE_SIZE", 8 * 1024L).longValue(); + + DiskPage(DiskPosition dp) { + this.setPosition(dp.oplogId, dp.offset / DISK_PAGE_SIZE); + } + } + + /** + * Returns the lock lease value to use for DistributedLock and + * RegionDistributedLock. -1 is supported as non-expiring lock. + */ + protected long getLockLeaseForLock() + { + if (getCache().getLockLease() == -1) { + return -1; + } + return getCache().getLockLease() * 1000; + } + + /** + * Returns the lock timeout value to use for DistributedLock and + * RegionDistributedLock. -1 is supported as a lock that never times out. + */ + protected long getLockTimeoutForLock(long time, TimeUnit unit) + { + if (time == -1) { + return -1; + } + return TimeUnit.MILLISECONDS.convert(time, unit); + } + + + + /** ******************* DistributedLock ************************************* */ + + private class DistributedLock implements Lock + { + private final Object key; + + public DistributedLock(Object key) { + this.key = key; + } + + public void lock() + { + try { + boolean locked = basicTryLock(-1, TimeUnit.MILLISECONDS, false); + if (!locked) { + lockCheckReadiness(); + } + Assert.assertTrue(locked, "Failed to acquire DistributedLock"); + } + catch (IllegalStateException ex) { + lockCheckReadiness(); + throw ex; + } + catch (InterruptedException e) { + Thread.currentThread().interrupt(); + lockCheckReadiness(); + Assert.assertTrue(false, "Failed to acquire DistributedLock"); + } + } + + public void lockInterruptibly() throws InterruptedException + { + try { + boolean locked = basicTryLock(-1, TimeUnit.MILLISECONDS, true); + if (!locked) { + lockCheckReadiness(); + } + Assert.assertTrue(locked, "Failed to acquire DistributedLock"); + } + catch (IllegalStateException ex) { + lockCheckReadiness(); + throw ex; + } + } + + public boolean tryLock() + { + try { + ReplyProcessor21.forceSevereAlertProcessing(); + return getLockService().lock(this.key, 0, getLockLeaseForLock()); + } + catch (IllegalStateException ex) { + lockCheckReadiness(); + throw ex; + } + finally { + ReplyProcessor21.unforceSevereAlertProcessing(); + } + } + + public boolean tryLock(long time, TimeUnit unit) + throws InterruptedException { + return basicTryLock(time, unit, true); + } + + + private boolean basicTryLock(long time, TimeUnit unit, boolean interruptible) + throws InterruptedException { +// if (Thread.interrupted()) throw new InterruptedException(); not necessary lockInterruptibly does this + final DM dm = getDistributionManager(); + + long start = System.currentTimeMillis(); + long timeoutMS = getLockTimeoutForLock(time, unit); + long end; + if (timeoutMS < 0) { + timeoutMS = Long.MAX_VALUE; + end = Long.MAX_VALUE; + } + else { + end = start + timeoutMS; + } + + long ackSAThreshold = getSystem().getConfig().getAckSevereAlertThreshold() * 1000; + boolean suspected = false; + boolean severeAlertIssued = false; + DistributedMember lockHolder = null; + + long waitInterval; + long ackWaitThreshold; + + if (ackSAThreshold > 0) { + ackWaitThreshold = getSystem().getConfig().getAckWaitThreshold() * 1000; + waitInterval = ackWaitThreshold; + } + else { + waitInterval = timeoutMS; + ackWaitThreshold = 0; + } + + do { + try { + waitInterval = Math.min(end-System.currentTimeMillis(), waitInterval); + ReplyProcessor21.forceSevereAlertProcessing(); + final boolean gotLock; + if (interruptible) { + gotLock = getLockService().lockInterruptibly(this.key, + waitInterval, getLockLeaseForLock()); + } + else { + gotLock = getLockService().lock(this.key, + waitInterval, getLockLeaseForLock()); + } + if (gotLock) { + return true; + } + if (ackSAThreshold > 0) { + long elapsed = System.currentTimeMillis() - start; + if (elapsed > ackWaitThreshold) { + if (!suspected) { + // start suspect processing on the holder of the lock + suspected = true; + severeAlertIssued = false; // in case this is a new lock holder + waitInterval = ackSAThreshold; + DLockRemoteToken remoteToken = + ((DLockService)getLockService()).queryLock(key); + lockHolder = remoteToken.getLessee(); + if (lockHolder != null) { + dm.getMembershipManager() + .suspectMember(lockHolder, + "Has not released a global region entry lock in over " + + ackWaitThreshold / 1000 + " seconds"); + } + } + else if (elapsed > ackSAThreshold) { + DLockRemoteToken remoteToken = + ((DLockService)getLockService()).queryLock(key); + if (lockHolder != null && remoteToken.getLessee() != null + && lockHolder.equals(remoteToken.getLessee())) { + if (!severeAlertIssued) { + severeAlertIssued = true; + logger.fatal(LocalizedMessage.create(LocalizedStrings.DistributedRegion_0_SECONDS_HAVE_ELAPSED_WAITING_FOR_GLOBAL_REGION_ENTRY_LOCK_HELD_BY_1, + new Object[] {Long.valueOf(ackWaitThreshold+ackSAThreshold), lockHolder})); + } + } + else { + // the lock holder has changed + suspected = false; + waitInterval = ackWaitThreshold; + lockHolder = null; + } + } + } + } // ackSAThreshold processing + } + catch (IllegalStateException ex) { + lockCheckReadiness(); + throw ex; + } + finally { + ReplyProcessor21.unforceSevereAlertProcessing(); + } + } while (System.currentTimeMillis() < end); + + return false; + } + + public void unlock() + { + try { + ReplyProcessor21.forceSevereAlertProcessing(); + getLockService().unlock(this.key); + if (!DistributedRegion.this.entries.containsKey(key)) { + getLockService().freeResources(key); + } + } + catch (IllegalStateException ex) { + lockCheckReadiness(); + throw ex; + } + finally { + ReplyProcessor21.unforceSevereAlertProcessing(); + } + } + public Condition newCondition() { + throw new UnsupportedOperationException(LocalizedStrings.DistributedRegion_NEWCONDITION_UNSUPPORTED.toLocalizedString()); + } + } + + /////////////////// RegionDistributedLock ////////////////// + + private class RegionDistributedLock implements Lock + { + + public RegionDistributedLock() { + } + + public void lock() + { + try { + boolean locked = getLockService().suspendLocking(-1); + Assert.assertTrue(locked, "Failed to acquire RegionDistributedLock"); + } + catch (IllegalStateException ex) { + lockCheckReadiness(); + throw ex; + } + } + + public void lockInterruptibly() throws InterruptedException + { +// if (Thread.interrupted()) throw new InterruptedException(); not necessary suspendLockingInterruptibly does this + try { + boolean locked = getLockService().suspendLockingInterruptibly(-1); + Assert.assertTrue(locked, "Failed to acquire RegionDistributedLock"); + } + catch (IllegalStateException ex) { + lockCheckReadiness(); + throw ex; + } + } + + public boolean tryLock() + { + try { + return getLockService().suspendLocking(0); + } + catch (IllegalStateException ex) { + lockCheckReadiness(); + throw ex; + } + } + + public boolean tryLock(long time, TimeUnit unit) + throws InterruptedException + { +// if (Thread.interrupted()) throw new InterruptedException(); not necessary suspendLockingINterruptibly does this + try { + return getLockService().suspendLockingInterruptibly( + getLockTimeoutForLock(time, unit)); + } + catch (IllegalStateException ex) { + lockCheckReadiness(); + throw ex; + } + } + + public void unlock() + { + try { + getLockService().resumeLocking(); + } + catch (IllegalStateException ex) { + lockCheckReadiness(); + throw ex; + } + } + public Condition newCondition() { + throw new UnsupportedOperationException(LocalizedStrings.DistributedRegion_NEWCONDITION_UNSUPPORTED.toLocalizedString()); + } + } + + // - add in region locking for destroy and invalidate... + + /** + * If this region's scope is GLOBAL, get the region distributed lock. The + * sender is responsible for unlocking. + * + * @return the acquired Lock if the region is GLOBAL and not already suspend, + * otherwise null. + */ + Lock getRegionDistributedLockIfGlobal() throws TimeoutException + { + if (getScope().isGlobal()) { + if (isLockingSuspendedByCurrentThread()) + return null; + Lock dlock = getRegionDistributedLock(); + dlock.lock(); + return dlock; + } + return null; + } + + /* + * void localDestroyRegion(Object aCallbackArgument) { try { Lock dlock = + * this.getRegionDistributedLockIfGlobal(); try { + * super.localDestroyRegion(aCallbackArgument); } finally { if (dlock != null) { + * dlock.unlock(); } } } catch (TimeoutException e) { throw new + * GemFireCacheException("localDestroyRegion timed out", e); } } + * + * void destroyRegion(Object aCallbackArgument) throws CacheWriterException, + * TimeoutException { Lock dlock = this.getRegionDistributedLockIfGlobal(); + * try { super.destroyRegion(aCallbackArgument); } finally { if (dlock != + * null) { dlock.unlock(); } } } + * + * void invalidateRegion(Object aCallbackArgument) throws TimeoutException { + * Lock dlock = this.getRegionDistributedLockIfGlobal(); try { + * super.invalidateRegion(aCallbackArgument); } finally { if (dlock != null) { + * dlock.unlock(); } } } + */ + + + /** + * Distribute the PutAllOp. + * This implementation distributes it to peers. + * @since 5.7 + */ + @Override + public void postPutAllSend(DistributedPutAllOperation putAllOp, VersionedObjectList successfulPuts) { + if (putAllOp.putAllDataSize > 0) { + putAllOp.distribute(); + } else { + if (logger.isDebugEnabled()) { + logger.debug("DR.postPutAll: no data to distribute"); + } + } + } + @Override + public void postRemoveAllSend(DistributedRemoveAllOperation op, VersionedObjectList successfulOps) { + if (op.removeAllDataSize > 0) { + op.distribute(); + } else { + getCache().getLoggerI18n().fine("DR.postRemoveAll: no data to distribute"); + } + } + + @Override + public VersionedObjectList basicPutAll(final Map map, + final DistributedPutAllOperation putAllOp, final Map retryVersions) { + Lock dlock = this.getRegionDistributedLockIfGlobal(); + try { + return super.basicPutAll(map, putAllOp, retryVersions); + } finally { + if (dlock != null) { + dlock.unlock(); + } + } + } + + @Override + public VersionedObjectList basicRemoveAll(final Collection keys, + final DistributedRemoveAllOperation removeAllOp, final ArrayList retryVersions) { + Lock dlock = this.getRegionDistributedLockIfGlobal(); + try { + return super.basicRemoveAll(keys, removeAllOp, retryVersions); + } finally { + if (dlock != null) { + dlock.unlock(); + } + } + } + + + /** Returns true if any required roles are currently missing */ + boolean isMissingRequiredRoles() + { + return this.isMissingRequiredRoles; + } + + /** + * Returns the missing required roles after waiting up to the timeout + * + * @throws IllegalStateException + * if region is not configured with required roles + * @throws InterruptedException TODO-javadocs + */ + public Set waitForRequiredRoles(long timeout) throws InterruptedException + { + if (Thread.interrupted()) throw new InterruptedException(); + checkReadiness(); + if (!getMembershipAttributes().hasRequiredRoles()) { + throw new IllegalStateException(LocalizedStrings.DistributedRegion_REGION_HAS_NOT_BEEN_CONFIGURED_WITH_REQUIRED_ROLES.toLocalizedString()); + } + if (!this.isMissingRequiredRoles) { // should we delete this check? + if (logger.isDebugEnabled()) { + logger.debug("No missing required roles to wait for."); + } + return Collections.EMPTY_SET; // early-out: no missing required roles + } + if (timeout != 0) { // if timeout is zero then fall through past waits + if (timeout == -1) { // infinite timeout + while (this.isMissingRequiredRoles) { + checkReadiness(); + this.cache.getCancelCriterion().checkCancelInProgress(null); // bail if distribution has stopped + synchronized (this.missingRequiredRoles) { + // one more check while synced + if (this.isMissingRequiredRoles) { + if (logger.isDebugEnabled()) { + logger.debug("About to wait for missing required roles."); + } + // TODO an infinite wait here might be a problem... + this.missingRequiredRoles.wait(); // spurious wakeup ok + } + } + } + } + else { // use the timeout + long endTime = System.currentTimeMillis() + timeout; + while (this.isMissingRequiredRoles) { + checkReadiness(); + this.cache.getCancelCriterion().checkCancelInProgress(null); // bail if distribution has stopped + synchronized (this.missingRequiredRoles) { + // one more check while synced + if (this.isMissingRequiredRoles) { + long timeToWait = endTime - System.currentTimeMillis(); + if (timeToWait > 0) { + if (logger.isDebugEnabled()) { + logger.debug("About to wait up to {} milliseconds for missing required roles.", timeToWait); + } + this.missingRequiredRoles.wait(timeToWait); // spurious wakeup ok + } + else { + break; + } + } + } + } + } + } + // check readiness again: thread may have been notified at destroy time + checkReadiness(); + if (this.isMissingRequiredRoles) { + // sync on missingRequiredRoles to prevent mods to required role status... + synchronized (this.missingRequiredRoles) { + return Collections.unmodifiableSet(new HashSet( + this.missingRequiredRoles)); + } + } + else { + return Collections.EMPTY_SET; + } + } + + /** Returns true if the role is currently present this region's membership. */ + public boolean isRoleInRegionMembership(Role role) + { + checkReadiness(); + return basicIsRoleInRegionMembership(role); + } + + protected boolean basicIsRoleInRegionMembership(Role role) + { + if (getSystem().getDistributedMember().getRoles().contains(role)) { + // since we are playing the role + return true; + } + Set members = this.distAdvisor.adviseGeneric(); + for (Iterator iter = members.iterator(); iter.hasNext();) { + DistributedMember member = (DistributedMember)iter.next(); + Set roles = member.getRoles(); + if (roles.contains(role)) { + return true; + } + } + return false; + } + + @Override + public void remoteRegionInitialized(CacheProfile profile) { + synchronized(this.advisorListener) { + if (this.advisorListener.members == null && hasListener()) { + Object callback = TEST_HOOK_ADD_PROFILE? profile : null; + RegionEventImpl event = new RegionEventImpl(this, + Operation.REGION_CREATE, callback, true, profile.peerMemberId); + dispatchListenerEvent(EnumListenerEvent.AFTER_REMOTE_REGION_CREATE, + event); + } + } + } + + @Override + protected void removeSenderFromAdvisor(InternalDistributedMember sender, int serial, boolean regionDestroyed) + { + getDistributionAdvisor().removeIdWithSerial(sender, serial, regionDestroyed); + } + + /** doesn't throw RegionDestroyedException, used by CacheDistributionAdvisor */ + public DistributionAdvisee getParentAdvisee() { + return (DistributionAdvisee) basicGetParentRegion(); + } + + /** + * Used to get membership events from our advisor to implement + * RegionMembershipListener invocations. + * + * @since 5.0 + */ + protected class AdvisorListener implements MembershipListener + { + private Set members = new HashSet(); + + protected boolean destroyed = false; + + protected synchronized void addMembers(Set newMembers) + { + this.members.addAll(newMembers); + } + + protected synchronized Set getInitialMembers() + { + Set initMembers = this.members; + this.members = null; + return initMembers; + } + + public void quorumLost(Set failures, List remaining) { + } + + public void memberSuspect(InternalDistributedMember id, + InternalDistributedMember whoSuspected, String reason) { + } + + /** called when membership listeners are added after region creation */ + protected synchronized void initRMLWrappers() { + Set membersWithThisRegion = DistributedRegion.this.distAdvisor.adviseGeneric(); + initPostCreateRegionMembershipListeners(membersWithThisRegion); + } + + public synchronized void memberJoined(InternalDistributedMember id) + { + if (this.destroyed) { + return; + } + if (this.members != null) { + this.members.add(id); + } + // bug #44684 - do not notify listener of create until remote member is initialized +// if (this.members == null && hasListener()) { +// RegionEventImpl event = new RegionEventImpl(DistributedRegion.this, +// Operation.REGION_CREATE, null, true, id); +// dispatchListenerEvent(EnumListenerEvent.AFTER_REMOTE_REGION_CREATE, +// event); +// } + if (getMembershipAttributes().hasRequiredRoles()) { + // newlyAcquiredRoles is used for intersection and RoleEvent + Set newlyAcquiredRoles = Collections.EMPTY_SET; + synchronized (missingRequiredRoles) { + if (isMissingRequiredRoles) { + Set roles = id.getRoles(); + newlyAcquiredRoles = new HashSet(missingRequiredRoles); + newlyAcquiredRoles.retainAll(roles); // find the intersection + if (!newlyAcquiredRoles.isEmpty()) { + if (DistributedRegion.this.rmq != null) { + Iterator it = newlyAcquiredRoles.iterator(); + final DM dm = getDistributionManager(); + while (it.hasNext()) { + getCache().getCancelCriterion().checkCancelInProgress(null); + final Role role = (Role)it.next(); + try { + // do this in the waiting pool to make it async + // @todo darrel/klund: add a single serial executor for + // queue flush + dm.getWaitingThreadPool().execute(new Runnable() { + public void run() + { + DistributedRegion.this.rmq.roleReady(role); + } + }); + break; + } + catch (RejectedExecutionException ex) { + throw ex; + } + } // while + } + missingRequiredRoles.removeAll(newlyAcquiredRoles); + if (this.members == null && missingRequiredRoles.isEmpty()) { + isMissingRequiredRoles = false; + getCachePerfStats().incReliableRegionsMissing(-1); + if (getMembershipAttributes().getLossAction().isAllAccess()) + getCachePerfStats().incReliableRegionsMissingFullAccess(-1); // rahul + else if (getMembershipAttributes().getLossAction() + .isLimitedAccess()) + getCachePerfStats() + .incReliableRegionsMissingLimitedAccess(-1); + else if (getMembershipAttributes().getLossAction().isNoAccess()) + getCachePerfStats().incReliableRegionsMissingNoAccess(-1); + + boolean async = resumeReliability(id, newlyAcquiredRoles); + if (async) { + this.destroyed = true; + } + } + } + } + if (!this.destroyed) { + // any number of threads may be waiting on missingRequiredRoles + missingRequiredRoles.notifyAll(); + } + } + if (!this.destroyed && this.members == null && hasListener()) { + if (!newlyAcquiredRoles.isEmpty()) { + // fire afterRoleGain event + RoleEventImpl relEvent = new RoleEventImpl(DistributedRegion.this, + Operation.REGION_CREATE, null, true, id, newlyAcquiredRoles); + dispatchListenerEvent(EnumListenerEvent.AFTER_ROLE_GAIN, relEvent); + } + } + } + } + + public synchronized void memberDeparted(InternalDistributedMember id, + boolean crashed) + { + if (this.destroyed) { + return; + } + if (this.members != null) { + this.members.remove(id); + } + if (this.members == null && hasListener()) { + RegionEventImpl event = new RegionEventImpl(DistributedRegion.this, + Operation.REGION_CLOSE, null, true, id); + if (crashed) { + dispatchListenerEvent(EnumListenerEvent.AFTER_REMOTE_REGION_CRASH, + event); + } + else { + // @todo darrel: it would be nice to know if what actual op was done + // could be close, local destroy, or destroy (or load snap?) + if (DestroyRegionOperation.isRegionDepartureNotificationOk()) { + dispatchListenerEvent(EnumListenerEvent.AFTER_REMOTE_REGION_DEPARTURE, event); + } + } + } + if (getMembershipAttributes().hasRequiredRoles()) { + Set newlyMissingRoles = Collections.EMPTY_SET; + synchronized (missingRequiredRoles) { + Set roles = id.getRoles(); + for (Iterator iter = roles.iterator(); iter.hasNext();) { + Role role = (Role)iter.next(); + if (getMembershipAttributes().getRequiredRoles().contains(role) + && !basicIsRoleInRegionMembership(role)) { + if (newlyMissingRoles == Collections.EMPTY_SET) { + newlyMissingRoles = new HashSet(); + } + newlyMissingRoles.add(role); + if (this.members == null && !isMissingRequiredRoles) { + isMissingRequiredRoles = true; + getCachePerfStats().incReliableRegionsMissing(1); + if (getMembershipAttributes().getLossAction().isAllAccess()) + getCachePerfStats().incReliableRegionsMissingFullAccess(1); // rahul + else if (getMembershipAttributes().getLossAction() + .isLimitedAccess()) + getCachePerfStats().incReliableRegionsMissingLimitedAccess(1); + else if (getMembershipAttributes().getLossAction().isNoAccess()) + getCachePerfStats().incReliableRegionsMissingNoAccess(1); + + boolean async = lostReliability(id, newlyMissingRoles); + if (async) { + this.destroyed = true; + } + } + } + } + if (!this.destroyed) { + missingRequiredRoles.addAll(newlyMissingRoles); + // any number of threads may be waiting on missingRequiredRoles... + missingRequiredRoles.notifyAll(); + } + } + if (!this.destroyed && this.members == null && hasListener()) { + if (!newlyMissingRoles.isEmpty()) { + // fire afterRoleLoss event + RoleEventImpl relEvent = new RoleEventImpl(DistributedRegion.this, + Operation.REGION_CLOSE, null, true, id, newlyMissingRoles); + dispatchListenerEvent(EnumListenerEvent.AFTER_ROLE_LOSS, relEvent); + } + } + } + } + } + + /** + * Used to bootstrap txState. + * @param key + * @return distributedRegions, + * member with parimary bucket for partitionedRegions + */ + @Override + public DistributedMember getOwnerForKey(KeyInfo key) { + //Asif: fix for sqlfabric bug 42266 + assert !this.isInternalRegion() || this.isMetaRegionWithTransactions(); + if (!this.getAttributes().getDataPolicy().withStorage() + || (this.concurrencyChecksEnabled && this.getAttributes() + .getDataPolicy() == DataPolicy.NORMAL)) { + // execute on random replicate + return getRandomReplicate(); + } + // if we are non-persistent, forward transactions to + // a persistent member + if (this.concurrencyChecksEnabled && !generateVersionTag) { + return getRandomPersistentReplicate(); + } + return super.getOwnerForKey(key); + } + + /** + * Execute the provided named function in all locations that contain the given + * keys. So function can be executed on just one fabric node, executed in + * parallel on a subset of nodes in parallel across all the nodes. + * + * @param function + * @param args + * @since 5.8 + */ + @Override + public ResultCollector executeFunction( + final DistributedRegionFunctionExecutor execution, + final Function function, final Object args, + final ResultCollector rc, final Set filter, + final ServerToClientFunctionResultSender sender) { + DistributedMember target = getTransactionalNode(); + if (target != null) { + if (target.equals(getMyId())) { + return executeLocally(execution, function, args, 0, rc, filter, sender); + } + return executeOnReplicate(execution, function, args, rc, filter, target); + } else if (this.getAttributes().getDataPolicy().withReplication() + || this.getAttributes().getDataPolicy().withPreloaded()) { + // execute locally + final Set singleMember = Collections + .singleton(getMyId()); + execution.validateExecution(function, singleMember); + execution.setExecutionNodes(singleMember); + return executeLocally(execution, function, args, 0, rc, filter, sender); + } else { + // select a random replicate + target = getRandomReplicate(); + if (target == null) { + throw new FunctionException(LocalizedStrings + .DistributedRegion_NO_REPLICATED_REGION_FOUND_FOR_EXECUTING_FUNCTION_0 + .toLocalizedString(function.getId())); + } + } + final LocalResultCollector localRC = execution + .getLocalResultCollector(function, rc); + return executeOnReplicate(execution, function, args, localRC, filter, target); + } + + private ResultCollector executeOnReplicate( + final DistributedRegionFunctionExecutor execution, + final Function function, final Object args, ResultCollector rc, + final Set filter, final DistributedMember target) { + final Set singleMember = Collections.singleton(target); + execution.validateExecution(function, singleMember); + execution.setExecutionNodes(singleMember); + + HashMap memberArgs = new HashMap(); + memberArgs.put((InternalDistributedMember)target, execution.getArgumentsForMember(target.getId())); + + ResultSender resultSender = new DistributedRegionFunctionResultSender(null, rc, + function, execution.getServerResultSender()); + + DistributedRegionFunctionResultWaiter waiter = new DistributedRegionFunctionResultWaiter( + this.getSystem(), this.getFullPath(), rc, function, filter, + Collections.singleton(target), memberArgs, resultSender); + + rc = waiter.getFunctionResultFrom(Collections.singleton(target), + function, execution); + return rc; + } + + /** + * @return the node which a transaction is already is progress, null otherwise + */ + private DistributedMember getTransactionalNode() { + if (cache.getTxManager().getTXState() != null) { + return cache.getTxManager().getTXState().getTarget(); + } + return null; + } + + /** + * Implementation of {@link ProfileVisitor} that selects a random replicated + * member from the available ones for this region. + */ + static final class GetRandomReplicate implements + ProfileVisitor { + + private boolean onlyPersistent = false; + + InternalDistributedMember member = null; + + private int randIndex = -1; + + public GetRandomReplicate() { + } + + public GetRandomReplicate(boolean onlyPersistent) { + this.onlyPersistent = onlyPersistent; + } + + public boolean visit(DistributionAdvisor advisor, Profile profile, + int profileIndex, int numProfiles, DistributedMember member) { + final CacheProfile cp = (CacheProfile)profile; + if (this.randIndex < 0) { + this.randIndex = PartitionedRegion.rand.nextInt(numProfiles); + } + if (cp.dataPolicy.withReplication() && cp.regionInitialized + && !cp.memberUnInitialized) { + if (onlyPersistent && !cp.dataPolicy.withPersistence()) { + return true; + } + // store the last replicated member in any case since in the worst case + // there may be no replicated node after "randIndex" in which case the + // last visited member will be used + this.member = cp.getDistributedMember(); + if (profileIndex >= this.randIndex) { + return false; + } + } + return true; + } + } + + /** + * @return a random replicate, null if there are none + */ + public InternalDistributedMember getRandomReplicate() { + /* [sumedh] The old code causes creation of a unnecessary HashSet + * and population with all replicates (which may be large), then + * copy into an array and then selection of a random one from that. + * The new approach uses a much more efficient visitor instead. + Set replicates = this.getCacheDistributionAdvisor().adviseReplicates(); + if (replicates.isEmpty()) { + return null; + } + return (InternalDistributedMember)(replicates + .toArray()[new Random().nextInt(replicates.size())]); + */ + final GetRandomReplicate getReplicate = new GetRandomReplicate(); + this.getCacheDistributionAdvisor().accept(getReplicate, null); + return getReplicate.member; + } + + /** + * @return a random persistent replicate, null if there is none + */ + public InternalDistributedMember getRandomPersistentReplicate() { + final GetRandomReplicate getPersistentReplicate = new GetRandomReplicate(true); + this.getCacheDistributionAdvisor().accept(getPersistentReplicate, null); + return getPersistentReplicate.member; + } + + void executeOnRegion(DistributedRegionFunctionStreamingMessage msg, + final Function function, final Object args, int prid, + final Set filter, boolean isReExecute) throws IOException { + final DM dm = getDistributionManager(); + ResultSender resultSender = new DistributedRegionFunctionResultSender(dm, msg, function); + final RegionFunctionContextImpl context = new RegionFunctionContextImpl( + function.getId(), this, args, filter, null, null, resultSender, + isReExecute); + FunctionStats stats = FunctionStats.getFunctionStats(function.getId(), dm.getSystem()); + try { + long start = stats.startTime(); + stats.startFunctionExecution(function.hasResult()); + function.execute(context); + stats.endFunctionExecution(start,function.hasResult()); + } + catch (FunctionException functionException) { + if (logger.isDebugEnabled()) { + logger.debug("FunctionException occured on remote node while executing Function: {}", function.getId(), functionException); + } + stats.endFunctionExecutionWithException(function.hasResult()); + throw functionException; + } + catch (CacheClosedException cacheClosedexception) { + if (logger.isDebugEnabled()) { + logger.debug("CacheClosedException occured on remote node while executing Function: {}", function.getId(), cacheClosedexception); + } + throw cacheClosedexception; + } + catch (Exception exception) { + if (logger.isDebugEnabled()) { + logger.debug("Exception occured on remote node while executing Function: {}", function.getId(), exception); + } + stats.endFunctionExecutionWithException(function.hasResult()); + throw new FunctionException(exception); + } + } + + ResultCollector executeLocally( + final DistributedRegionFunctionExecutor execution, + final Function function, final Object args, int prid, + final ResultCollector rc, final Set filter, + final ServerToClientFunctionResultSender sender) { + final LocalResultCollector localRC = execution + .getLocalResultCollector(function, rc); + final DM dm = getDistributionManager(); + final DistributedRegionFunctionResultSender resultSender = new DistributedRegionFunctionResultSender( + dm, localRC, function, sender); + final RegionFunctionContextImpl context = new RegionFunctionContextImpl( + function.getId(), DistributedRegion.this, args, filter, null, null, + resultSender, execution.isReExecute()); + execution.executeFunctionOnLocalNode(function, context, resultSender, dm, isTX()); + return localRC; + } + + @Override + protected void setMemoryThresholdFlag(MemoryEvent event) { + Set others = getCacheDistributionAdvisor().adviseGeneric(); + + if (event.isLocal() || others.contains(event.getMember())) { + if (event.getState().isCritical() + && !event.getPreviousState().isCritical() + && (event.getType() == ResourceType.HEAP_MEMORY || (event.getType() == ResourceType.OFFHEAP_MEMORY && getOffHeap()))) { + setMemoryThresholdReachedCounterTrue(event.getMember()); + } else if (!event.getState().isCritical() + && event.getPreviousState().isCritical() + && (event.getType() == ResourceType.HEAP_MEMORY || (event.getType() == ResourceType.OFFHEAP_MEMORY && getOffHeap()))) { + removeMemberFromCriticalList(event.getMember()); + } + } + } + + @Override + public void removeMemberFromCriticalList(DistributedMember member) { + if (logger.isDebugEnabled()) { + logger.debug("DR: removing member {} from critical member list", member); + } + synchronized(this.memoryThresholdReachedMembers) { + this.memoryThresholdReachedMembers.remove(member); + if (this.memoryThresholdReachedMembers.size() == 0) { + memoryThresholdReached.set(false); + } + } + } + + @Override + public Set getMemoryThresholdReachedMembers() { + synchronized (this.memoryThresholdReachedMembers) { + return Collections.unmodifiableSet(this.memoryThresholdReachedMembers); + } + } + + @Override + public void initialCriticalMembers(boolean localMemoryIsCritical, + Set critialMembers) { + Set others = getCacheDistributionAdvisor().adviseGeneric(); + for (InternalDistributedMember idm: critialMembers) { + if (others.contains(idm)) { + setMemoryThresholdReachedCounterTrue(idm); + } + } + } + + /** + * @param idm member whose threshold has been exceeded + */ + private void setMemoryThresholdReachedCounterTrue(final DistributedMember idm) { + synchronized(this.memoryThresholdReachedMembers) { + this.memoryThresholdReachedMembers.add(idm); + if (this.memoryThresholdReachedMembers.size() > 0) { + memoryThresholdReached.set(true); + } + } + } + + /** + * Fetch Version for the given key from a remote replicate member. + * @param key + * @throws EntryNotFoundException if the entry is not found on replicate member + * @return VersionTag for the key + */ + protected VersionTag fetchRemoteVersionTag(Object key) { + VersionTag tag = null; + assert this.dataPolicy != DataPolicy.REPLICATE; + TransactionId txId = cache.getCacheTransactionManager().suspend(); + try { + boolean retry = true; + InternalDistributedMember member = getRandomReplicate(); + while (retry) { + try { + if (member == null) { + break; + } + FetchVersionResponse response = RemoteFetchVersionMessage.send(member, this, key); + tag = response.waitForResponse(); + retry = false; + } catch (RemoteOperationException e) { + member = getRandomReplicate(); + if (member != null) { + if (logger.isDebugEnabled()) { + logger.debug("Retrying RemoteFetchVersionMessage on member:{}", member); + } + } + } + } + } finally { + if (txId != null) { + cache.getCacheTransactionManager().resume(txId); + } + } + return tag; + } + + /** + * Test hook for bug 48578. Returns true if it sees a net loader. + * Returns false if it does not have one. + */ + public boolean hasNetLoader() { + return this.hasNetLoader(getCacheDistributionAdvisor()); + } +} diff --git a/gemfire-core/src/main/java/com/gemstone/gemfire/internal/cache/EntryEventImpl.java b/gemfire-core/src/main/java/com/gemstone/gemfire/internal/cache/EntryEventImpl.java new file mode 100644 index 000000000000..41c7b88acaee --- /dev/null +++ b/gemfire-core/src/main/java/com/gemstone/gemfire/internal/cache/EntryEventImpl.java @@ -0,0 +1,3140 @@ +/* + * 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 com.gemstone.gemfire.internal.cache; + +import java.io.ByteArrayInputStream; +import java.io.DataInput; +import java.io.DataInputStream; +import java.io.DataOutput; +import java.io.IOException; + +import org.apache.logging.log4j.Logger; + +import com.gemstone.gemfire.CopyHelper; +import com.gemstone.gemfire.DataSerializer; +import com.gemstone.gemfire.DeltaSerializationException; +import com.gemstone.gemfire.GemFireIOException; +import com.gemstone.gemfire.InvalidDeltaException; +import com.gemstone.gemfire.SerializationException; +import com.gemstone.gemfire.SystemFailure; +import com.gemstone.gemfire.cache.EntryEvent; +import com.gemstone.gemfire.cache.EntryNotFoundException; +import com.gemstone.gemfire.cache.EntryOperation; +import com.gemstone.gemfire.cache.Operation; +import com.gemstone.gemfire.cache.Region; +import com.gemstone.gemfire.cache.SerializedCacheValue; +import com.gemstone.gemfire.cache.TransactionId; +import com.gemstone.gemfire.cache.query.IndexMaintenanceException; +import com.gemstone.gemfire.cache.query.QueryException; +import com.gemstone.gemfire.cache.query.internal.IndexUpdater; +import com.gemstone.gemfire.cache.query.internal.index.IndexManager; +import com.gemstone.gemfire.cache.query.internal.index.IndexProtocol; +import com.gemstone.gemfire.cache.query.internal.index.IndexUtils; +import com.gemstone.gemfire.cache.util.TimestampedEntryEvent; +import com.gemstone.gemfire.distributed.DistributedMember; +import com.gemstone.gemfire.distributed.DistributedSystem; +import com.gemstone.gemfire.distributed.internal.DistributionMessage; +import com.gemstone.gemfire.distributed.internal.membership.InternalDistributedMember; +import com.gemstone.gemfire.internal.Assert; +import com.gemstone.gemfire.internal.ByteArrayDataInput; +import com.gemstone.gemfire.internal.DSFIDFactory; +import com.gemstone.gemfire.internal.DataSerializableFixedID; +import com.gemstone.gemfire.internal.HeapDataOutputStream; +import com.gemstone.gemfire.internal.InternalDataSerializer; +import com.gemstone.gemfire.internal.Sendable; +import com.gemstone.gemfire.internal.Version; +import com.gemstone.gemfire.internal.cache.FilterRoutingInfo.FilterInfo; +import com.gemstone.gemfire.internal.cache.delta.Delta; +import com.gemstone.gemfire.internal.cache.lru.Sizeable; +import com.gemstone.gemfire.internal.cache.partitioned.PartitionMessage; +import com.gemstone.gemfire.internal.cache.partitioned.PutMessage; +import com.gemstone.gemfire.internal.cache.tier.sockets.CacheServerHelper; +import com.gemstone.gemfire.internal.cache.tier.sockets.ClientProxyMembershipID; +import com.gemstone.gemfire.internal.cache.tx.DistTxKeyInfo; +import com.gemstone.gemfire.internal.cache.versions.VersionTag; +import com.gemstone.gemfire.internal.cache.wan.GatewaySenderEventCallbackArgument; +import com.gemstone.gemfire.internal.i18n.LocalizedStrings; +import com.gemstone.gemfire.internal.lang.StringUtils; +import com.gemstone.gemfire.internal.logging.LogService; +import com.gemstone.gemfire.internal.logging.log4j.LocalizedMessage; +import com.gemstone.gemfire.internal.logging.log4j.LogMarker; +import com.gemstone.gemfire.internal.offheap.Chunk; +import com.gemstone.gemfire.internal.offheap.OffHeapHelper; +import com.gemstone.gemfire.internal.offheap.OffHeapRegionEntryHelper; +import com.gemstone.gemfire.internal.offheap.ReferenceCountHelper; +import com.gemstone.gemfire.internal.offheap.Releasable; +import com.gemstone.gemfire.internal.offheap.StoredObject; +import com.gemstone.gemfire.internal.offheap.annotations.Released; +import com.gemstone.gemfire.internal.offheap.annotations.Retained; +import com.gemstone.gemfire.internal.offheap.annotations.Unretained; + +import static com.gemstone.gemfire.internal.offheap.annotations.OffHeapIdentifier.ENTRY_EVENT_NEW_VALUE; +import static com.gemstone.gemfire.internal.offheap.annotations.OffHeapIdentifier.ENTRY_EVENT_OLD_VALUE; + +import com.gemstone.gemfire.internal.util.ArrayUtils; +import com.gemstone.gemfire.internal.util.BlobHelper; +import com.gemstone.gemfire.pdx.internal.PeerTypeRegistration; + +/** + * Implementation of an entry event + */ +// must be public for DataSerializableFixedID +public class EntryEventImpl + implements EntryEvent, InternalCacheEvent, DataSerializableFixedID, EntryOperation + , Releasable +{ + private static final Logger logger = LogService.getLogger(); + + // PACKAGE FIELDS // + public transient LocalRegion region; + private transient RegionEntry re; + + protected KeyInfo keyInfo; + + //private long eventId; + /** the event's id. Scoped by distributedMember. */ + protected EventID eventID; + + private Object newValue = null; + /** + * If we ever serialize the new value then it should be + * stored in this field in case we need the serialized form + * again later. This was added to fix bug 43781. + * Note that we also have the "newValueBytes" field. + * But it is only non-null if setSerializedNewValue was called. + */ + private byte[] cachedSerializedNewValue = null; + @Retained(ENTRY_EVENT_OLD_VALUE) + private Object oldValue = null; + protected Delta delta = null; + + protected short eventFlags = 0x0000; + + protected TXId txId = null; + + protected Operation op; + + /* To store the operation/modification type */ + private transient EnumListenerEvent eventType; + + /** + * This field will be null unless this event is used for a putAll operation. + * + * @since 5.0 + */ + protected transient DistributedPutAllOperation putAllOp; + + /** + * This field will be null unless this event is used for a removeAll operation. + * + * @since 8.1 + */ + protected transient DistributedRemoveAllOperation removeAllOp; + + /** + * The member that originated this event + * + * @since 5.0 + */ + protected DistributedMember distributedMember; + + + /** + * transient storage for the message that caused the event + */ + transient DistributionMessage causedByMessage; + + + //private static long eventID = 0; + + /** + * The originating membershipId of this event. + * + * @since 5.1 + */ + protected ClientProxyMembershipID context = null; + + /** + * A custom context object that can be used for any other contextual + * information. Currently used by SQL Fabric to pass around evaluated rows + * from raw byte arrays and routing object. + */ + private transient Object contextObj = null; + + /** + * this holds the bytes representing the change in value effected by this + * event. It is used when the value implements the Delta interface. + */ + private byte[] deltaBytes = null; + + + /** routing information for cache clients for this event */ + private FilterInfo filterInfo; + + /**new value stored in serialized form*/ + protected byte[] newValueBytes; + /**old value stored in serialized form*/ + private byte[] oldValueBytes; + + /** version tag for concurrency checks */ + protected VersionTag versionTag; + + /** boolean to indicate that this operation should be optimized by not fetching from HDFS*/ + private transient boolean fetchFromHDFS = true; + + private transient boolean isPutDML = false; + + /** boolean to indicate that the RegionEntry for this event was loaded from HDFS*/ + private transient boolean loadedFromHDFS= false; + + private transient boolean isCustomEviction = false; + + /** boolean to indicate that the RegionEntry for this event has been evicted*/ + private transient boolean isEvicted = false; + + private transient boolean isPendingSecondaryExpireDestroy = false; + + public final static Object SUSPECT_TOKEN = new Object(); + + public EntryEventImpl() { + } + + /** + * create a new entry event that will be used for conveying version information + * and anything else of use while processing another event + * @return the empty event object + */ + @Retained + public static EntryEventImpl createVersionTagHolder() { + return createVersionTagHolder(null); + } + + /** + * create a new entry event that will be used for conveying version information + * and anything else of use while processing another event + * @return the empty event object + */ + @Retained + public static EntryEventImpl createVersionTagHolder(VersionTag tag) { + EntryEventImpl result = new EntryEventImpl(); + result.setVersionTag(tag); + result.disallowOffHeapValues(); + return result; + } + + /** + * Reads the contents of this message from the given input. + */ + public void fromData(DataInput in) throws IOException, ClassNotFoundException { + this.eventID = (EventID)DataSerializer.readObject(in); + Object key = DataSerializer.readObject(in); + Object value = DataSerializer.readObject(in); + this.keyInfo = new KeyInfo(key, value, null); + this.op = Operation.fromOrdinal(in.readByte()); + this.eventFlags = in.readShort(); + this.keyInfo.setCallbackArg(DataSerializer.readObject(in)); + this.txId = (TXId)DataSerializer.readObject(in); + + if (in.readBoolean()) { // isDelta + this.delta = (Delta)DataSerializer.readObject(in); + } + else { + // OFFHEAP Currently values are never deserialized to off heap memory. If that changes then this code needs to change. + if (in.readBoolean()) { // newValueSerialized + this.newValueBytes = DataSerializer.readByteArray(in); + this.cachedSerializedNewValue = this.newValueBytes; + this.newValue = CachedDeserializableFactory.create(this.newValueBytes); + } + else { + this.newValue = DataSerializer.readObject(in); + } + } + + // OFFHEAP Currently values are never deserialized to off heap memory. If that changes then this code needs to change. + if (in.readBoolean()) { // oldValueSerialized + this.oldValueBytes = DataSerializer.readByteArray(in); + this.oldValue = CachedDeserializableFactory.create(this.oldValueBytes); + } + else { + this.oldValue = DataSerializer.readObject(in); + } + this.distributedMember = DSFIDFactory.readInternalDistributedMember(in); + this.context = ClientProxyMembershipID.readCanonicalized(in); + this.tailKey = DataSerializer.readLong(in); + } + + @Retained + protected EntryEventImpl(LocalRegion region, Operation op, Object key, + boolean originRemote, DistributedMember distributedMember, + boolean generateCallbacks, boolean fromRILocalDestroy) { + this.region = region; + this.op = op; + this.keyInfo = this.region.getKeyInfo(key); + setOriginRemote(originRemote); + setGenerateCallbacks(generateCallbacks); + this.distributedMember = distributedMember; + setFromRILocalDestroy(fromRILocalDestroy); + } + + /** + * Doesn't specify oldValue as this will be filled in later as part of an + * operation on the region, or lets it default to null. + */ + @Retained + protected EntryEventImpl( + final LocalRegion region, + Operation op, Object key, @Retained(ENTRY_EVENT_NEW_VALUE) Object newVal, + Object callbackArgument, + boolean originRemote, DistributedMember distributedMember, + boolean generateCallbacks, boolean initializeId) { + + this.region = region; + this.op = op; + this.keyInfo = this.region.getKeyInfo(key, newVal, callbackArgument); + + if (newVal instanceof Delta) { + this.delta = (Delta)newVal; + } + else if (!Token.isInvalid(newVal)) { + basicSetNewValue(newVal); + } + + this.txId = this.region.getTXId(); + /** + * this might set txId for events done from a thread that has a tx even + * though the op is non-tx. For example region ops. + */ + if (newVal == Token.LOCAL_INVALID) { + setLocalInvalid(true); + } + setOriginRemote(originRemote); + setGenerateCallbacks(generateCallbacks); + this.distributedMember = distributedMember; + } + + /** + * Called by BridgeEntryEventImpl to use existing EventID + */ + @Retained + protected EntryEventImpl(LocalRegion region, Operation op, Object key, + @Retained(ENTRY_EVENT_NEW_VALUE) Object newValue, Object callbackArgument, boolean originRemote, + DistributedMember distributedMember, boolean generateCallbacks, + EventID eventID) { + this(region, op, key, newValue, + callbackArgument, originRemote, distributedMember, generateCallbacks, + true /* initializeId */); + Assert.assertTrue(eventID != null || !(region instanceof PartitionedRegion)); + this.setEventId(eventID); + } + + /** + * create an entry event from another entry event + */ + @Retained + public EntryEventImpl(@Retained({ENTRY_EVENT_NEW_VALUE, ENTRY_EVENT_OLD_VALUE}) EntryEventImpl other) { + this(other, true); + } + + @Retained + public EntryEventImpl(@Retained({ENTRY_EVENT_NEW_VALUE, ENTRY_EVENT_OLD_VALUE}) EntryEventImpl other, boolean setOldValue) { + region = other.region; + + this.eventID = other.eventID; + basicSetNewValue(other.basicGetNewValue()); + this.newValueBytes = other.newValueBytes; + this.cachedSerializedNewValue = other.cachedSerializedNewValue; + this.re = other.re; + this.delta = other.delta; + if (setOldValue) { + retainAndSetOldValue(other.basicGetOldValue()); + this.oldValueBytes = other.oldValueBytes; + } + this.eventFlags = other.eventFlags; + setEventFlag(EventFlags.FLAG_CALLBACKS_INVOKED, false); + txId = other.txId; + op = other.op; + distributedMember = other.distributedMember; + this.filterInfo = other.filterInfo; + this.keyInfo = other.keyInfo.isDistKeyInfo() ? new DistTxKeyInfo( + (DistTxKeyInfo) other.keyInfo) : new KeyInfo(other.keyInfo); + if (other.getRawCallbackArgument() instanceof GatewaySenderEventCallbackArgument) { + this.keyInfo + .setCallbackArg((new GatewaySenderEventCallbackArgument( + (GatewaySenderEventCallbackArgument) other + .getRawCallbackArgument()))); + } + this.context = other.context; + this.deltaBytes = other.deltaBytes; + this.tailKey = other.tailKey; + this.versionTag = other.versionTag; + //set possible duplicate + this.setPossibleDuplicate(other.isPossibleDuplicate()); + } + + @Retained + public EntryEventImpl(Object key2) { + this.keyInfo = new KeyInfo(key2, null, null); + } + + /** + * This constructor is used to create a bridge event in server-side + * command classes. Events created with this are not intended to be + * used in cache operations. + * @param id the identity of the client's event + */ + @Retained + public EntryEventImpl(EventID id) { + this.eventID = id; + this.offHeapOk = false; + } + + /** + * Creates and returns an EntryEventImpl. Generates and assigns a bucket id to the + * EntryEventImpl if the region parameter is a PartitionedRegion. + */ + @Retained + public static EntryEventImpl create(LocalRegion region, + Operation op, + Object key, @Retained(ENTRY_EVENT_NEW_VALUE) Object newValue, Object callbackArgument, + boolean originRemote, DistributedMember distributedMember) { + return create(region,op,key,newValue,callbackArgument,originRemote,distributedMember,true,true); + } + + /** + * Creates and returns an EntryEventImpl. Generates and assigns a bucket id to the + * EntryEventImpl if the region parameter is a PartitionedRegion. + */ + @Retained + public static EntryEventImpl create(LocalRegion region, + Operation op, + Object key, + @Retained(ENTRY_EVENT_NEW_VALUE) Object newValue, + Object callbackArgument, + boolean originRemote, + DistributedMember distributedMember, + boolean generateCallbacks) { + return create(region, op, key, newValue, callbackArgument, originRemote, + distributedMember, generateCallbacks,true); + } + + /** + * Creates and returns an EntryEventImpl. Generates and assigns a bucket id to the + * EntryEventImpl if the region parameter is a PartitionedRegion. + * + * Called by BridgeEntryEventImpl to use existing EventID + * + * {@link EntryEventImpl#EntryEventImpl(LocalRegion, Operation, Object, Object, Object, boolean, DistributedMember, boolean, EventID)} + */ + @Retained + public static EntryEventImpl create(LocalRegion region, Operation op, Object key, + @Retained(ENTRY_EVENT_NEW_VALUE) Object newValue, Object callbackArgument, boolean originRemote, + DistributedMember distributedMember, boolean generateCallbacks, + EventID eventID) { + EntryEventImpl entryEvent = new EntryEventImpl(region,op,key,newValue,callbackArgument,originRemote,distributedMember,generateCallbacks,eventID); + return entryEvent; + } + + /** + * Creates and returns an EntryEventImpl. Generates and assigns a bucket id to the + * EntryEventImpl if the region parameter is a PartitionedRegion. + * + * {@link EntryEventImpl#EntryEventImpl(LocalRegion, Operation, Object, boolean, DistributedMember, boolean, boolean)} + */ + @Retained + public static EntryEventImpl create(LocalRegion region, Operation op, Object key, + boolean originRemote, DistributedMember distributedMember, + boolean generateCallbacks, boolean fromRILocalDestroy) { + EntryEventImpl entryEvent = new EntryEventImpl(region,op,key,originRemote,distributedMember,generateCallbacks,fromRILocalDestroy); + return entryEvent; + } + + /** + * Creates and returns an EntryEventImpl. Generates and assigns a bucket id to the + * EntryEventImpl if the region parameter is a PartitionedRegion. + * + * This creator does not specify the oldValue as this will be filled in later as part of an + * operation on the region, or lets it default to null. + * + * {@link EntryEventImpl#EntryEventImpl(LocalRegion, Operation, Object, Object, Object, boolean, DistributedMember, boolean, boolean)} + */ + @Retained + public static EntryEventImpl create(final LocalRegion region, + Operation op, Object key, @Retained(ENTRY_EVENT_NEW_VALUE) Object newVal, + Object callbackArgument, + boolean originRemote, DistributedMember distributedMember, + boolean generateCallbacks, boolean initializeId) { + EntryEventImpl entryEvent = new EntryEventImpl(region,op,key,newVal,callbackArgument, + originRemote,distributedMember,generateCallbacks,initializeId); + return entryEvent; + } + + /** + * Creates a PutAllEvent given the distributed operation, the region, and the + * entry data. + * + * @since 5.0 + */ + @Retained + static EntryEventImpl createPutAllEvent( + DistributedPutAllOperation putAllOp, LocalRegion region, + Operation entryOp, Object entryKey, @Retained(ENTRY_EVENT_NEW_VALUE) Object entryNewValue) + { + EntryEventImpl e; + if (putAllOp != null) { + EntryEventImpl event = putAllOp.getBaseEvent(); + if (event.isBridgeEvent()) { + e = EntryEventImpl.create(region, entryOp, entryKey, entryNewValue, + event.getRawCallbackArgument(), false, event.distributedMember, + event.isGenerateCallbacks()); + e.setContext(event.getContext()); + } else { + e = EntryEventImpl.create(region, entryOp, entryKey, entryNewValue, event.getCallbackArgument(), + false, region.getMyId(), event.isGenerateCallbacks()); + } + + } else { + e = EntryEventImpl.create(region, entryOp, entryKey, entryNewValue, null, + false, region.getMyId(), true); + } + + e.putAllOp = putAllOp; + return e; + } + + protected static EntryEventImpl createRemoveAllEvent( + DistributedRemoveAllOperation op, + LocalRegion region, + Object entryKey) { + EntryEventImpl e; + final Operation entryOp = Operation.REMOVEALL_DESTROY; + if (op != null) { + EntryEventImpl event = op.getBaseEvent(); + if (event.isBridgeEvent()) { + e = EntryEventImpl.create(region, entryOp, entryKey, null, + event.getRawCallbackArgument(), false, event.distributedMember, + event.isGenerateCallbacks()); + e.setContext(event.getContext()); + } else { + e = EntryEventImpl.create(region, entryOp, entryKey, null, event.getCallbackArgument(), + false, region.getMyId(), event.isGenerateCallbacks()); + } + + } else { + e = EntryEventImpl.create(region, entryOp, entryKey, null, null, + false, region.getMyId(), true); + } + + e.removeAllOp = op; + return e; + } + public boolean isBulkOpInProgress() { + return getPutAllOperation() != null || getRemoveAllOperation() != null; + } + + /** return the putAll operation for this event, if any */ + public DistributedPutAllOperation getPutAllOperation() { + return this.putAllOp; + } + public DistributedPutAllOperation setPutAllOperation(DistributedPutAllOperation nv) { + DistributedPutAllOperation result = this.putAllOp; + if (nv != null && nv.getBaseEvent() != null) { + setCallbackArgument(nv.getBaseEvent().getCallbackArgument()); + } + this.putAllOp = nv; + return result; + } + public DistributedRemoveAllOperation getRemoveAllOperation() { + return this.removeAllOp; + } + public DistributedRemoveAllOperation setRemoveAllOperation(DistributedRemoveAllOperation nv) { + DistributedRemoveAllOperation result = this.removeAllOp; + if (nv != null && nv.getBaseEvent() != null) { + setCallbackArgument(nv.getBaseEvent().getCallbackArgument()); + } + this.removeAllOp = nv; + return result; + } + + private final boolean testEventFlag(short mask) + { + return EventFlags.isSet(this.eventFlags, mask); + } + + private final void setEventFlag(short mask, boolean on) + { + this.eventFlags = EventFlags.set(this.eventFlags, mask, on); + } + + public DistributedMember getDistributedMember() + { + return this.distributedMember; + } + + /////////////////////// INTERNAL BOOLEAN SETTERS + public void setOriginRemote(boolean b) + { + setEventFlag(EventFlags.FLAG_ORIGIN_REMOTE, b); + } + + public void setLocalInvalid(boolean b) + { + setEventFlag(EventFlags.FLAG_LOCAL_INVALID, b); + } + + void setGenerateCallbacks(boolean b) + { + setEventFlag(EventFlags.FLAG_GENERATE_CALLBACKS, b); + } + + /** set the the flag telling whether callbacks should be invoked for a partitioned region */ + public void setInvokePRCallbacks(boolean b) { + setEventFlag(EventFlags.FLAG_INVOKE_PR_CALLBACKS, b); + } + + /** get the flag telling whether callbacks should be invoked for a partitioned region */ + public boolean getInvokePRCallbacks() { + return testEventFlag(EventFlags.FLAG_INVOKE_PR_CALLBACKS); + } + + public boolean getInhibitDistribution() { + return testEventFlag(EventFlags.FLAG_INHIBIT_DISTRIBUTION); + } + + public void setInhibitDistribution(boolean b) { + setEventFlag(EventFlags.FLAG_INHIBIT_DISTRIBUTION, b); + } + + /** was the entry destroyed or missing and allowed to be destroyed again? */ + public boolean getIsRedestroyedEntry() { + return testEventFlag(EventFlags.FLAG_REDESTROYED_TOMBSTONE); + } + + public void setIsRedestroyedEntry(boolean b) { + setEventFlag(EventFlags.FLAG_REDESTROYED_TOMBSTONE, b); + } + + public void isConcurrencyConflict(boolean b) { + setEventFlag(EventFlags.FLAG_CONCURRENCY_CONFLICT, b); + } + + public boolean isConcurrencyConflict() { + return testEventFlag(EventFlags.FLAG_CONCURRENCY_CONFLICT); + } + + /** set the DistributionMessage that caused this event */ + public void setCausedByMessage(DistributionMessage msg) { + this.causedByMessage = msg; + } + + /** + * get the PartitionMessage that caused this event, or null if + * the event was not caused by a PartitionMessage + */ + public PartitionMessage getPartitionMessage() { + if (this.causedByMessage != null && this.causedByMessage instanceof PartitionMessage) { + return (PartitionMessage)this.causedByMessage; + } + return null; + } + + /** + * get the RemoteOperationMessage that caused this event, or null if + * the event was not caused by a RemoteOperationMessage + */ + public RemoteOperationMessage getRemoteOperationMessage() { + if (this.causedByMessage != null && this.causedByMessage instanceof RemoteOperationMessage) { + return (RemoteOperationMessage)this.causedByMessage; + } + return null; + } + + /////////////// BOOLEAN GETTERS + public boolean isLocalLoad() + { + return this.op.isLocalLoad(); + } + + public boolean isNetSearch() + { + return this.op.isNetSearch(); + } + + public boolean isNetLoad() + { + return this.op.isNetLoad(); + } + + public boolean isDistributed() + { + return this.op.isDistributed(); + } + + public boolean isExpiration() + { + return this.op.isExpiration(); + } + + public boolean isEviction() { + return this.op.isEviction(); + } + + public final boolean isCustomEviction() { + return this.isCustomEviction; + } + + public final void setCustomEviction(boolean customEvict) { + this.isCustomEviction = customEvict; + } + + public final void setEvicted() { + this.isEvicted = true; + } + + public final boolean isEvicted() { + return this.isEvicted; + } + + public final boolean isPendingSecondaryExpireDestroy() { + return this.isPendingSecondaryExpireDestroy; + } + + public final void setPendingSecondaryExpireDestroy (boolean value) { + this.isPendingSecondaryExpireDestroy = value; + } + // Note that isOriginRemote is sometimes set to false even though the event + // was received from a peer. This is done to force distribution of the + // message to peers and to cause concurrency version stamping to be performed. + // This is done by all one-hop operations, like RemoteInvalidateMessage. + public boolean isOriginRemote() + { + return testEventFlag(EventFlags.FLAG_ORIGIN_REMOTE); + } + + /* return whether this event originated from a WAN gateway and carries a WAN version tag */ + public boolean isFromWANAndVersioned() { + return (this.versionTag != null && this.versionTag.isGatewayTag()); + } + + /* return whether this event originated in a client and carries a version tag */ + public boolean isFromBridgeAndVersioned() { + return (this.context != null) && (this.versionTag != null); + } + + public boolean isGenerateCallbacks() + { + return testEventFlag(EventFlags.FLAG_GENERATE_CALLBACKS); + } + + public void setNewEventId(DistributedSystem sys) { + Assert.assertTrue(this.eventID == null, "Double setting event id"); + EventID newID = new EventID(sys); + if (this.eventID != null) { + if (logger.isTraceEnabled(LogMarker.BRIDGE_SERVER)) { + logger.trace(LogMarker.BRIDGE_SERVER, "Replacing event ID with {} in event {}", newID, this); + } + } + this.eventID = newID; + } + + public void reserveNewEventId(DistributedSystem sys, int count) { + Assert.assertTrue(this.eventID == null, "Double setting event id"); + this.eventID = new EventID(sys); + if (count > 1) { + this.eventID.reserveSequenceId(count-1); + } + } + + public void setEventId(EventID id) + { + this.eventID = id; + } + + /** + * Return the event id, if any + * @return null if no event id has been set + */ + public final EventID getEventId() { + return this.eventID; + } + + public boolean isBridgeEvent() { + return hasClientOrigin(); + } + public boolean hasClientOrigin() { + return getContext() != null; + } + + /** + * sets the ID of the client that initiated this event + */ + public void setContext(ClientProxyMembershipID contx) { + Assert.assertTrue(contx != null); + this.context = contx; + } + + /** + * gets the ID of the client that initiated this event. Null if a server-initiated event + */ + public ClientProxyMembershipID getContext() + { + return this.context; + } + + // INTERNAL + boolean isLocalInvalid() + { + return testEventFlag(EventFlags.FLAG_LOCAL_INVALID); + } + + ///////////////////////////////////////////////// + + /** + * Returns the key. + * + * @return the key. + */ + public Object getKey() + { + return keyInfo.getKey(); + } + + /** + * Returns the value in the cache prior to this event. When passed to an event + * handler after an event occurs, this value reflects the value that was in + * the cache in this VM, not necessarily the value that was in the cache VM + * that initiated the operation. + * + * @return the value in the cache prior to this event. + */ + public final Object getOldValue() { + try { + if (isOriginRemote() && this.region.isProxy()) { + return null; + } + @Unretained Object ov = basicGetOldValue(); + if (ov == null) { + return null; + } else if (ov == Token.NOT_AVAILABLE) { + return AbstractRegion.handleNotAvailable(ov); + } + boolean doCopyOnRead = getRegion().isCopyOnRead(); + if (ov != null) { + if (ov instanceof StoredObject) { + // TODO OFFHEAP: returns off-heap PdxInstance + return ((StoredObject) ov).getValueAsDeserializedHeapObject(); + } else + if (ov instanceof CachedDeserializable) { + CachedDeserializable cd = (CachedDeserializable)ov; + if (doCopyOnRead) { + return cd.getDeserializedWritableCopy(this.region, this.re); + } else { + return cd.getDeserializedValue(this.region, this.re); + } + } + else { + if (doCopyOnRead) { + return CopyHelper.copy(ov); + } else { + return ov; + } + } + } + return null; + } catch(IllegalArgumentException i) { + IllegalArgumentException iae = new IllegalArgumentException(LocalizedStrings.DONT_RELEASE.toLocalizedString("Error while deserializing value for key="+getKey())); + iae.initCause(i); + throw iae; + } + } + + /** + * Like getRawNewValue except that if the result is an off-heap reference then copy it to the heap. + * ALERT: If there is a Delta, returns that, not the (applied) new value. + * TODO OFFHEAP: to prevent the heap copy use getRawNewValue instead + */ + public final Object getRawNewValueAsHeapObject() { + if (this.delta != null) { + return this.delta; + } + return OffHeapHelper.getHeapForm(OffHeapHelper.copyIfNeeded(basicGetNewValue())); + } + + /** + * If new value is a Delta return it. + * Else if new value is off-heap return the StoredObject form (unretained OFF_HEAP_REFERENCE). + * Its refcount is not inced by this call and the returned object can only be safely used for the lifetime of the EntryEventImpl instance that returned the value. + * Else return the raw form. + */ + @Unretained(ENTRY_EVENT_NEW_VALUE) + public final Object getRawNewValue() { + if (this.delta != null) return this.delta; + return basicGetNewValue(); + } + + @Unretained(ENTRY_EVENT_NEW_VALUE) + public Object getValue() { + return basicGetNewValue(); + } + + /** + * Returns the delta that represents the new value; null if no delta. + * @return the delta that represents the new value; null if no delta. + */ + public final Delta getDeltaNewValue() { + return this.delta; + } + + /** + * Applies the delta + */ + private Object applyDeltaWithCopyOnRead(boolean doCopyOnRead) { + //try { + if (applyDelta(true)) { + Object applied = basicGetNewValue(); + // if applyDelta returns true then newValue should not be off-heap + assert !(applied instanceof StoredObject); + if (applied == this.oldValue && doCopyOnRead) { + applied = CopyHelper.copy(applied); + } + return applied; + } + //} catch (EntryNotFoundException ex) { + // only (broken) product code has the opportunity to call this before + // this.oldValue is set. If oldValue is not set yet, then + // we most likely haven't synchronized on the region entry yet. + // (If we have, then make sure oldValue is set before + // calling this method). + //throw new AssertionError("too early to call getNewValue"); + //} + return null; + } + + @Released(ENTRY_EVENT_NEW_VALUE) + protected void basicSetNewValue(@Retained(ENTRY_EVENT_NEW_VALUE) Object v) { + if (v == this.newValue) return; + if (this.offHeapOk) { + OffHeapHelper.releaseAndTrackOwner(this.newValue, this); + } + if (v instanceof Chunk) { + ReferenceCountHelper.setReferenceCountOwner(this); + if (!((Chunk) v).retain()) { + ReferenceCountHelper.setReferenceCountOwner(null); + this.newValue = null; + return; + } + ReferenceCountHelper.setReferenceCountOwner(null); + } + this.newValue = v; + this.cachedSerializedNewValue = null; + } + /** + * Returns true if this event has a reference to an off-heap new or old value. + */ + public boolean hasOffHeapValue() { + return (this.newValue instanceof Chunk) || (this.oldValue instanceof Chunk); + } + + @Unretained + protected final Object basicGetNewValue() { + Object result = this.newValue; + if (!this.offHeapOk && result instanceof Chunk) { + //this.region.getCache().getLogger().info("DEBUG new value already freed " + System.identityHashCode(result)); + throw new IllegalStateException("Attempt to access off heap value after the EntryEvent was released."); + } + return result; + } + + private class OldValueOwner { + private EntryEventImpl getEvent() { + return EntryEventImpl.this; + } + @Override + public int hashCode() { + return getEvent().hashCode(); + } + + @Override + public boolean equals(Object obj) { + if (obj instanceof OldValueOwner) { + return getEvent().equals(((OldValueOwner) obj).getEvent()); + } else { + return false; + } + } + @Override + public String toString() { + return "OldValueOwner " + getEvent().toString(); + } + } + + /** + * Note if v might be an off-heap reference that you did not retain for this EntryEventImpl + * then call retainsAndSetOldValue instead of this method. + * @param v the caller should have already retained this off-heap reference. + */ + @Released(ENTRY_EVENT_OLD_VALUE) + private void basicSetOldValue(@Unretained(ENTRY_EVENT_OLD_VALUE) Object v) { + @Released final Object curOldValue = this.oldValue; + if (v == curOldValue) return; + if (this.offHeapOk) { + if (curOldValue instanceof Chunk) { + if (ReferenceCountHelper.trackReferenceCounts()) { + OffHeapHelper.releaseAndTrackOwner(curOldValue, new OldValueOwner()); + } else { + OffHeapHelper.release(curOldValue); + } + } + } + + this.oldValue = v; + } + + @Released(ENTRY_EVENT_OLD_VALUE) + private void retainAndSetOldValue(@Retained(ENTRY_EVENT_OLD_VALUE) Object v) { + if (v == this.oldValue) return; + + if (v instanceof Chunk) { + if (ReferenceCountHelper.trackReferenceCounts()) { + ReferenceCountHelper.setReferenceCountOwner(new OldValueOwner()); + boolean couldNotRetain = (!((Chunk) v).retain()); + ReferenceCountHelper.setReferenceCountOwner(null); + if (couldNotRetain) { + this.oldValue = null; + return; + } + } else { + if (!((Chunk) v).retain()) { + this.oldValue = null; + return; + } + } + } + basicSetOldValue(v); + } + + @Unretained(ENTRY_EVENT_OLD_VALUE) + private Object basicGetOldValue() { + @Unretained(ENTRY_EVENT_OLD_VALUE) + Object result = this.oldValue; + if (!this.offHeapOk && result instanceof Chunk) { + //this.region.getCache().getLogger().info("DEBUG old value already freed " + System.identityHashCode(result)); + throw new IllegalStateException("Attempt to access off heap value after the EntryEvent was released."); + } + return result; + } + + /** + * Like getRawOldValue except that if the result is an off-heap reference then copy it to the heap. + * To avoid the heap copy use getRawOldValue instead. + */ + public final Object getRawOldValueAsHeapObject() { + return OffHeapHelper.getHeapForm(OffHeapHelper.copyIfNeeded(basicGetOldValue())); + } + /* + * If the old value is off-heap return the StoredObject form (unretained OFF_HEAP_REFERENCE). + * Its refcount is not inced by this call and the returned object can only be safely used for the lifetime of the EntryEventImpl instance that returned the value. + * Else return the raw form. + */ + @Unretained + public final Object getRawOldValue() { + return basicGetOldValue(); + } + /** + * Just like getRawOldValue except if the raw old value is off-heap deserialize it. + * Note that in some cases sqlf ignores the request to deserialize. + */ + @Unretained(ENTRY_EVENT_OLD_VALUE) + public final Object getOldValueAsOffHeapDeserializedOrRaw() { + Object result = basicGetOldValue(); + if (result instanceof StoredObject) { + result = ((StoredObject) result).getDeserializedForReading(); + } + return AbstractRegion.handleNotAvailable(result); // fixes 49499 + } + + /** + * Added this function to expose isCopyOnRead function to the + * child classes of EntryEventImpl + * + */ + protected boolean isRegionCopyOnRead() { + return getRegion().isCopyOnRead(); + } + + /** + * Returns the value in the cache after this event. + * + * @return the value in the cache after this event. + */ + public final Object getNewValue() { + + boolean doCopyOnRead = getRegion().isCopyOnRead(); + try { + if (applyDelta(true)) { + @Unretained(ENTRY_EVENT_NEW_VALUE) + Object applied = basicGetNewValue(); + if (applied == this.oldValue && doCopyOnRead) { + applied = CopyHelper.copy(applied); + } + return applied; + } + } catch (EntryNotFoundException ex) { + // only (broken) product code has the opportunity to call this before + // this.oldValue is set. If oldValue is not set yet, then + // we most likely haven't synchronized on the region entry yet. + // (If we have, then make sure oldValue is set before + // calling this method). + throw new AssertionError("too early to call getNewValue"); + } + Object nv = basicGetNewValue(); + if (nv != null) { + if (nv == Token.NOT_AVAILABLE) { + // I'm not sure this can even happen + return AbstractRegion.handleNotAvailable(nv); + } + if (nv instanceof StoredObject) { + // TODO OFFHEAP currently we copy offheap new value to the heap here. Check callers of this method to see if they can be optimized to use offheap values. + // TODO OFFHEAP: returns off-heap PdxInstance + return ((StoredObject) nv).getValueAsDeserializedHeapObject(); + } else + if (nv instanceof CachedDeserializable) { + CachedDeserializable cd = (CachedDeserializable)nv; + Object v = null; + if (doCopyOnRead) { + v = cd.getDeserializedWritableCopy(this.region, this.re); + } else { + v = cd.getDeserializedValue(this.region, this.re); + } + assert !(v instanceof CachedDeserializable) : "for key "+this.getKey()+" found nested CachedDeserializable"; + return v; + } + else { + if (doCopyOnRead) { + return CopyHelper.copy(nv); + } else { + return nv; + } + } + } + return null; + } + + public final String getNewValueStringForm() { + return StringUtils.forceToString(basicGetNewValue()); + } + public final String getOldValueStringForm() { + return StringUtils.forceToString(basicGetOldValue()); + } + + protected boolean applyDelta(boolean throwOnNullOldValue) + throws EntryNotFoundException { + if (this.newValue != null || this.delta == null) { + return false; + } + if (this.oldValue == null) { + if (throwOnNullOldValue) { + // !!!:ezoerner:20080611 It would be nice if the client got this + // exception + throw new EntryNotFoundException( + "Cannot apply a delta without an existing value"); + } + return false; + } + // swizzle BucketRegion in event for Delta. + // !!!:ezoerner:20090602 this is way ugly; this whole class severely + // needs refactoring + LocalRegion originalRegion = this.region; + try { + if (originalRegion instanceof BucketRegion) { + this.region = ((BucketRegion)this.region).getPartitionedRegion(); + } + basicSetNewValue(this.delta.apply(this)); + } finally { + this.region = originalRegion; + } + return true; + } + + /** Set a deserialized value */ + public final void setNewValue(@Retained(ENTRY_EVENT_NEW_VALUE) Object obj) { + if (obj instanceof Delta) { + this.delta = (Delta)obj; + basicSetNewValue(null); + } + else { + basicSetNewValue(obj); + } + } + + public TransactionId getTransactionId() + { + return this.txId; + } + + public void setTransactionId(TransactionId txId) + { + this.txId = (TXId)txId; + } + + /** + * Answer true if this event resulted from a loader. + * + * @return true if isLocalLoad or isNetLoad + */ + public boolean isLoad() + { + return this.op.isLoad(); + } + + public void setRegion(LocalRegion r) + { + this.region = r; + } + + /** + * @see com.gemstone.gemfire.cache.CacheEvent#getRegion() + */ + public final LocalRegion getRegion() { + return region; + } + + public Operation getOperation() + { + return this.op; + } + + public void setOperation(Operation op) + { + this.op = op; + PartitionMessage prm = getPartitionMessage(); + if (prm != null) { + prm.setOperation(this.op); + } + } + + /** + * @see com.gemstone.gemfire.cache.CacheEvent#getCallbackArgument() + */ + public Object getCallbackArgument() + { + Object result = this.keyInfo.getCallbackArg(); + while (result instanceof WrappedCallbackArgument) { + WrappedCallbackArgument wca = (WrappedCallbackArgument)result; + result = wca.getOriginalCallbackArg(); + } + if (result == Token.NOT_AVAILABLE) { + result = AbstractRegion.handleNotAvailable(result); + } + return result; + } + public boolean isCallbackArgumentAvailable() { + return this.getRawCallbackArgument() != Token.NOT_AVAILABLE; + } + + /** + * Returns the value of the EntryEventImpl field. + * This is for internal use only. Customers should always call + * {@link #getCallbackArgument} + * @since 5.5 + */ + public Object getRawCallbackArgument() { + return this.keyInfo.getCallbackArg(); + } + + /** + * Sets the value of raw callback argument field. + */ + public void setRawCallbackArgument(Object newCallbackArgument) { + this.keyInfo.setCallbackArg(newCallbackArgument); + } + + public void setCallbackArgument(Object newCallbackArgument) { + if (this.keyInfo.getCallbackArg() instanceof WrappedCallbackArgument) { + ((WrappedCallbackArgument)this.keyInfo.getCallbackArg()) + .setOriginalCallbackArgument(newCallbackArgument); + } + else { + this.keyInfo.setCallbackArg(newCallbackArgument); + } + } + + /** + * @return null if new value is not serialized; otherwise returns a SerializedCacheValueImpl containing the new value. + */ + public SerializedCacheValue getSerializedNewValue() { + // In the case where there is a delta that has not been applied yet, + // do not apply it here since it would not produce a serialized new + // value (return null instead to indicate the new value is not + // in serialized form). + @Unretained(ENTRY_EVENT_NEW_VALUE) + final Object tmp = basicGetNewValue(); + if (tmp instanceof CachedDeserializable) { + if (tmp instanceof StoredObject) { + if (!((StoredObject) tmp).isSerialized()) { + // TODO OFFHEAP can we handle offheap byte[] better? + return null; + } + } + byte[] bytes = this.newValueBytes; + if (bytes == null) { + bytes = this.cachedSerializedNewValue; + } + return new SerializedCacheValueImpl(this, getRegion(), this.re, + (CachedDeserializable)tmp, bytes); + } else { + // Note we return null even if cachedSerializedNewValue is not null. + // This is because some callers of this method use it to indicate + // that a CacheDeserializable should be created during deserialization. + return null; + } + } + + /** + * Implement this interface if you want to call {@link #exportNewValue}. + * + * + */ + public interface NewValueImporter { + /** + * @return true if the importer prefers the value to be in serialized form. + */ + boolean prefersNewSerialized(); + + /** + * Only return true if the importer can use the value before the event that exported it is released. + * If false is returned then off-heap values will be copied to the heap for the importer. + * @return true if the importer can deal with the value being an unretained OFF_HEAP_REFERENCE. + */ + boolean isUnretainedNewReferenceOk(); + + /** + * Import a new value that is currently in object form. + * @param nv the new value to import; unretained if isUnretainedNewReferenceOk returns true + * @param isSerialized true if the imported new value represents data that needs to be serialized; false if the imported new value is a simple sequence of bytes. + */ + void importNewObject(@Unretained(ENTRY_EVENT_NEW_VALUE) Object nv, boolean isSerialized); + + /** + * Import a new value that is currently in byte array form. + * @param nv the new value to import + * @param isSerialized true if the imported new value represents data that needs to be serialized; false if the imported new value is a simple sequence of bytes. + */ + void importNewBytes(byte[] nv, boolean isSerialized); + } + + /** + * Export the event's new value to the given importer. + */ + public final void exportNewValue(NewValueImporter importer) { + final boolean prefersSerialized = importer.prefersNewSerialized(); + if (prefersSerialized) { + if (getCachedSerializedNewValue() != null) { + importer.importNewBytes(getCachedSerializedNewValue(), true); + return; + } else { + if (this.newValueBytes != null && this.newValue instanceof CachedDeserializable) { + importer.importNewBytes(this.newValueBytes, true); + return; + } + } + } + @Unretained(ENTRY_EVENT_NEW_VALUE) + final Object nv = getRawNewValue(); + if (nv instanceof StoredObject) { + @Unretained(ENTRY_EVENT_NEW_VALUE) + final StoredObject so = (StoredObject) nv; + final boolean isSerialized = so.isSerialized(); + if (nv instanceof Chunk) { + if (importer.isUnretainedNewReferenceOk()) { + importer.importNewObject(nv, isSerialized); + } else { + if (!isSerialized || prefersSerialized) { + byte[] bytes = so.getValueAsHeapByteArray(); + importer.importNewBytes(bytes, isSerialized); + if (isSerialized) { + setCachedSerializedNewValue(bytes); + } + } else { + // TODO OFFHEAP: returns off-heap PdxInstance which is not ok since isUnretainedNewReferenceOk returned false + importer.importNewObject(so.getValueAsDeserializedHeapObject(), true); + } + } + } else { + importer.importNewObject(nv, isSerialized); + } + } else if (nv instanceof byte[]) { + importer.importNewBytes((byte[])nv, false); + } else if (nv instanceof CachedDeserializable) { + CachedDeserializable cd = (CachedDeserializable) nv; + Object cdV = cd.getValue(); + if (cdV instanceof byte[]) { + importer.importNewBytes((byte[]) cdV, true); + setCachedSerializedNewValue((byte[]) cdV); + } else { + importer.importNewObject(cdV, true); + } + } else { + importer.importNewObject(nv, true); + } + } + /** + * Implement this interface if you want to call {@link #exportOldValue}. + * + * + */ + public interface OldValueImporter { + /** + * @return true if the importer prefers the value to be in serialized form. + */ + boolean prefersOldSerialized(); + + /** + * Only return true if the importer can use the value before the event that exported it is released. + * @return true if the importer can deal with the value being an unretained OFF_HEAP_REFERENCE. + */ + boolean isUnretainedOldReferenceOk(); + + /** + * @return return true if you want the old value to possibly be an instanceof CachedDeserializable; false if you want the value contained in a CachedDeserializable. + */ + boolean isCachedDeserializableValueOk(); + + /** + * Import an old value that is currently in object form. + * @param ov the old value to import; unretained if isUnretainedOldReferenceOk returns true + * @param isSerialized true if the imported old value represents data that needs to be serialized; false if the imported old value is a simple sequence of bytes. + */ + void importOldObject(@Unretained(ENTRY_EVENT_OLD_VALUE) Object ov, boolean isSerialized); + + /** + * Import an old value that is currently in byte array form. + * @param ov the old value to import + * @param isSerialized true if the imported old value represents data that needs to be serialized; false if the imported old value is a simple sequence of bytes. + */ + void importOldBytes(byte[] ov, boolean isSerialized); + } + + /** + * Export the event's old value to the given importer. + */ + public final void exportOldValue(OldValueImporter importer) { + final boolean prefersSerialized = importer.prefersOldSerialized(); + if (prefersSerialized) { + if (this.oldValueBytes != null && this.oldValue instanceof CachedDeserializable) { + importer.importOldBytes(this.oldValueBytes, true); + return; + } + } + @Unretained(ENTRY_EVENT_OLD_VALUE) + final Object ov = getRawOldValue(); + if (ov instanceof StoredObject) { + final StoredObject so = (StoredObject) ov; + final boolean isSerialized = so.isSerialized(); + if (ov instanceof Chunk) { + if (importer.isUnretainedOldReferenceOk()) { + importer.importOldObject(ov, isSerialized); + } else { + if (!isSerialized || prefersSerialized) { + importer.importOldBytes(so.getValueAsHeapByteArray(), isSerialized); + } else { + // TODO OFFHEAP: returns off-heap PdxInstance which is not ok since isUnretainedNewReferenceOk returned false + importer.importOldObject(so.getValueAsDeserializedHeapObject(), true); + } + } + } else { + importer.importOldObject(ov, isSerialized); + } + } else if (ov instanceof byte[]) { + importer.importOldBytes((byte[])ov, false); + } else if (!importer.isCachedDeserializableValueOk() && ov instanceof CachedDeserializable) { + CachedDeserializable cd = (CachedDeserializable) ov; + Object cdV = cd.getValue(); + if (cdV instanceof byte[]) { + importer.importOldBytes((byte[]) cdV, true); + } else { + importer.importOldObject(cdV, true); + } + } else { + importer.importOldObject(ov, true); + } + } + + /** + * If applyDelta is true then first attempt to apply a delta (if we have one) and return the value. + * Else if new value is a Delta return it. + * Else if new value is off-heap return the StoredObject form (unretained OFF_HEAP_REFERENCE). + * Its refcount is not inced by this call and the returned object can only be safely used for the lifetime of the EntryEventImpl instance that returned the value. + * Else return the raw form. + */ + @Unretained(ENTRY_EVENT_NEW_VALUE) + public final Object getRawNewValue(boolean applyDelta) { + if (applyDelta) { + boolean doCopyOnRead = getRegion().isCopyOnRead(); + Object newValueWithDelta = applyDeltaWithCopyOnRead(doCopyOnRead); + if (newValueWithDelta != null) { + return newValueWithDelta; + } + // if applyDelta is true and we have already applied the delta then + // just return the applied value instead of the delta object. + @Unretained(ENTRY_EVENT_NEW_VALUE) + Object newValue = basicGetNewValue(); + if (newValue != null) return newValue; + } + return getRawNewValue(); + } + /** + * Just like getRawNewValue(true) except if the raw new value is off-heap deserialize it. + * Note that in some cases sqlf ignores the request to deserialize. + */ + @Unretained(ENTRY_EVENT_NEW_VALUE) + public final Object getNewValueAsOffHeapDeserializedOrRaw() { + Object result = getRawNewValue(true); + if (result instanceof StoredObject) { + result = ((StoredObject) result).getDeserializedForReading(); + } + return AbstractRegion.handleNotAvailable(result); // fixes 49499 + } + + /** + * If the new value is stored off-heap return a retained OFF_HEAP_REFERENCE (caller must release). + * @return a retained OFF_HEAP_REFERENCE if the new value is off-heap; otherwise returns null + */ + @Retained(ENTRY_EVENT_NEW_VALUE) + public StoredObject getOffHeapNewValue() { + final Object tmp = basicGetNewValue(); + if (tmp instanceof StoredObject) { + StoredObject result = (StoredObject) tmp; + if (!result.retain()) { + return null; + } + return result; + } else { + return null; + } + } + + /** + * If the old value is stored off-heap return a retained OFF_HEAP_REFERENCE (caller must release). + * @return a retained OFF_HEAP_REFERENCE if the old value is off-heap; otherwise returns null + */ + @Retained(ENTRY_EVENT_OLD_VALUE) + public StoredObject getOffHeapOldValue() { + final Object tmp = basicGetOldValue(); + if (tmp instanceof StoredObject) { + StoredObject result = (StoredObject) tmp; + if (!result.retain()) { + return null; + } + return result; + } else { + return null; + } + } + + /** + * Result may be unretained because sqlf getDeserializedForReading returns unretained. + */ + public final Object getDeserializedValue() { + if (this.delta == null) { + final Object val = basicGetNewValue(); + if (val instanceof StoredObject) { + // TODO OFFHEAP: returns off-heap PdxInstance + return ((StoredObject) val).getValueAsDeserializedHeapObject(); + } else + if (val instanceof CachedDeserializable) { + return ((CachedDeserializable)val).getDeserializedForReading(); + } + else { + return val; + } + } + else { + return this.delta; + } + } + + public final byte[] getSerializedValue() { + if (this.newValueBytes == null) { + final Object val; + if (this.delta == null) { + val = basicGetNewValue(); + if (val instanceof byte[]) { + return (byte[])val; + } + else if (val instanceof CachedDeserializable) { + return ((CachedDeserializable)val).getSerializedValue(); + } + } + else { + val = this.delta; + } + try { + return CacheServerHelper.serialize(val); + } catch (IOException ioe) { + throw new GemFireIOException("unexpected exception", ioe); + } + } + else { + return this.newValueBytes; + } + } + + /** + * Forces this entry's new value to be in serialized form. + * @since 5.0.2 + */ + public void makeSerializedNewValue() { + makeSerializedNewValue(false); + } + + /** + * @param isSynced true if RegionEntry currently under synchronization + */ + private final void makeSerializedNewValue(boolean isSynced) { + Object obj = basicGetNewValue(); + + // ezoerner:20080611 In the case where there is an unapplied + // delta, do not apply the delta or serialize yet unless entry is + // under synchronization (isSynced is true) + if (isSynced) { + this.setSerializationDeferred(false); + } + else if (obj == null && this.delta != null) { + // defer serialization until setNewValueInRegion + this.setSerializationDeferred(true); + return; + } + basicSetNewValue(getCachedDeserializable(obj, this)); + } + + public static Object getCachedDeserializable(Object obj) { + return getCachedDeserializable(obj, null); + } + + public static Object getCachedDeserializable(Object obj, EntryEventImpl ev) { + if (obj instanceof byte[] + || obj == null + || obj instanceof CachedDeserializable + || obj == Token.NOT_AVAILABLE + || Token.isInvalidOrRemoved(obj) + // don't serialize delta object already serialized + || obj instanceof com.gemstone.gemfire.Delta + || obj instanceof Delta) { // internal delta + return obj; + } + final CachedDeserializable cd; + // avoid unneeded serialization of byte[][] used by SQLFabric that + // will end up being deserialized in any case (serialization is cheap + // for byte[][] anyways) + if (obj instanceof byte[][]) { + int objSize = Sizeable.PER_OBJECT_OVERHEAD + 4; + for (byte[] bytes : (byte[][])obj) { + if (bytes != null) { + objSize += CachedDeserializableFactory.getByteSize(bytes); + } + else { + objSize += Sizeable.PER_OBJECT_OVERHEAD; + } + } + cd = CachedDeserializableFactory.create(obj, objSize); + } + else { + final byte[] b = serialize(obj); + cd = CachedDeserializableFactory.create(b); + if (ev != null) { + ev.newValueBytes = b; + ev.cachedSerializedNewValue = b; + } + } + return cd; + } + public void setCachedSerializedNewValue(byte[] v) { + this.cachedSerializedNewValue = v; + } + public byte[] getCachedSerializedNewValue() { + return this.cachedSerializedNewValue; + } + + public final void setSerializedNewValue(byte[] serializedValue) { + Object newVal = null; + if (serializedValue != null) { + if (CachedDeserializableFactory.preferObject()) { + newVal = deserialize(serializedValue); + } else { + newVal = CachedDeserializableFactory.create(serializedValue); + } + if (newVal instanceof Delta) { + this.delta = (Delta)newVal; + newVal = null; + // We need the newValueBytes field and the newValue field to be in sync. + // In the case of non-null delta set both fields to null. + serializedValue = null; + } + } + this.newValueBytes = serializedValue; + basicSetNewValue(newVal); + this.cachedSerializedNewValue = serializedValue; + } + + public void setSerializedOldValue(byte[] serializedOldValue){ + this.oldValueBytes = serializedOldValue; + final Object ov; + if (CachedDeserializableFactory.preferObject()) { + ov = deserialize(serializedOldValue); + } + else if (serializedOldValue != null) { + ov = CachedDeserializableFactory.create(serializedOldValue); + } + else { + ov = null; + } + retainAndSetOldValue(ov); + } + + /** + * If true (the default) then preserve old values in events. + * If false then mark non-null values as being NOT_AVAILABLE. + */ + private static final boolean EVENT_OLD_VALUE = !Boolean.getBoolean("gemfire.disable-event-old-value"); + + + void putExistingEntry(final LocalRegion owner, RegionEntry entry) throws RegionClearedException { + putExistingEntry(owner, entry, false, null); + } + + /** + * Put a newValue into the given, write synced, existing, region entry. + * Sets oldValue in event if hasn't been set yet. + * @param oldValueForDelta Used by Delta Propagation feature + * + * @throws RegionClearedException + */ + void putExistingEntry(final LocalRegion owner, final RegionEntry reentry, + boolean requireOldValue, Object oldValueForDelta) throws RegionClearedException { + makeUpdate(); + // only set oldValue if it hasn't already been set to something + if (this.oldValue == null) { + if (!reentry.isInvalidOrRemoved()) { + if (requireOldValue || + EVENT_OLD_VALUE + || this.region instanceof HARegion // fix for bug 37909 + || GemFireCacheImpl.sqlfSystem() + ) { + @Retained Object ov; + if (ReferenceCountHelper.trackReferenceCounts()) { + ReferenceCountHelper.setReferenceCountOwner(new OldValueOwner()); + if (GemFireCacheImpl.sqlfSystem()) { + ov = reentry.getValueOffHeapOrDiskWithoutFaultIn(this.region); + } else { + ov = reentry._getValueRetain(owner, true); + } + ReferenceCountHelper.setReferenceCountOwner(null); + } else { + if (GemFireCacheImpl.sqlfSystem()) { + ov = reentry.getValueOffHeapOrDiskWithoutFaultIn(this.region); + } else { + ov = reentry._getValueRetain(owner, true); + } + } + if (ov == null) ov = Token.NOT_AVAILABLE; + // ov has already been retained so call basicSetOldValue instead of retainAndSetOldValue + basicSetOldValue(ov); + } else { + basicSetOldValue(Token.NOT_AVAILABLE); + } + } + } + if (this.oldValue == Token.NOT_AVAILABLE) { + FilterProfile fp = this.region.getFilterProfile(); + if (this.op.guaranteesOldValue() || + (fp != null /* #41532 */&& fp.entryRequiresOldValue(this.getKey()))) { + setOldValueForQueryProcessing(); + } + } + + //setNewValueInRegion(null); + setNewValueInRegion(owner, reentry, oldValueForDelta); + } + + /** + * If we are currently a create op then turn us into an update + * + * @since 5.0 + */ + void makeUpdate() + { + setOperation(this.op.getCorrespondingUpdateOp()); + } + + /** + * If we are currently an update op then turn us into a create + * + * @since 5.0 + */ + void makeCreate() + { + setOperation(this.op.getCorrespondingCreateOp()); + } + + /** + * Put a newValue into the given, write synced, new, region entry. + * @throws RegionClearedException + */ + void putNewEntry(final LocalRegion owner, final RegionEntry reentry) + throws RegionClearedException { + if (!this.op.guaranteesOldValue()) { // preserves oldValue for CM ops in clients + basicSetOldValue(null); + } + makeCreate(); + setNewValueInRegion(owner, reentry, null); + } + + void setRegionEntry(RegionEntry re) { + this.re = re; + } + + RegionEntry getRegionEntry() { + return this.re; + } + + @Retained(ENTRY_EVENT_NEW_VALUE) + private void setNewValueInRegion(final LocalRegion owner, + final RegionEntry reentry, Object oldValueForDelta) throws RegionClearedException { + + boolean wasTombstone = reentry.isTombstone(); + + // put in newValue + + if (applyDelta(this.op.isCreate())) { + if (this.isSerializationDeferred()) { + makeSerializedNewValue(true); + } + } + + // If event contains new value, then it may mean that the delta bytes should + // not be applied. This is possible if the event originated locally. + if (this.deltaBytes != null && this.newValue == null) { + processDeltaBytes(oldValueForDelta); + } + + if (owner!=null) { + owner.generateAndSetVersionTag(this, reentry); + } else { + this.region.generateAndSetVersionTag(this, reentry); + } + + Object v = this.newValue; + if (v == null) { + v = isLocalInvalid() ? Token.LOCAL_INVALID : Token.INVALID; + } + else { + this.region.regionInvalid = false; + } + + reentry.setValueResultOfSearch(this.op.isNetSearch()); + + //dsmith:20090524 + //This is a horrible hack, but we need to get the size of the object + //When we store an entry. This code is only used when we do a put + //in the primary. + if(v instanceof com.gemstone.gemfire.Delta && region.isUsedForPartitionedRegionBucket()) { + int vSize; + Object ov = basicGetOldValue(); + if(ov instanceof CachedDeserializable && !GemFireCacheImpl.DELTAS_RECALCULATE_SIZE) { + vSize = ((CachedDeserializable) ov).getValueSizeInBytes(); + } else { + vSize = CachedDeserializableFactory.calcMemSize(v, region.getObjectSizer(), false); + } + v = CachedDeserializableFactory.create(v, vSize); + basicSetNewValue(v); + } + + Object preparedV = reentry.prepareValueForCache(this.region, v, this, this.hasDelta()); + if (preparedV != v) { + v = preparedV; + if (v instanceof Chunk) { + if (!((Chunk) v).isCompressed()) { // fix bug 52109 + // If we put it off heap and it is not compressed then remember that value. + // Otherwise we want to remember the decompressed value in the event. + basicSetNewValue(v); + } + } + } + boolean isTombstone = (v == Token.TOMBSTONE); + boolean success = false; + boolean calledSetValue = false; + try { + setNewValueBucketSize(owner, v); + + // ezoerner:20081030 + // last possible moment to do index maintenance with old value in + // RegionEntry before new value is set. + // As part of an update, this is a remove operation as prelude to an add that + // will come after the new value is set. + // If this is an "update" from INVALID state, treat this as a create instead + // for the purpose of index maintenance since invalid entries are not + // indexed. + + if ((this.op.isUpdate() && !reentry.isInvalid()) || this.op.isInvalidate()) { + IndexManager idxManager = IndexUtils.getIndexManager(this.region, false); + if (idxManager != null) { + try { + idxManager.updateIndexes(reentry, + IndexManager.REMOVE_ENTRY, + this.op.isUpdate() ? + IndexProtocol.BEFORE_UPDATE_OP : + IndexProtocol.OTHER_OP); + } + catch (QueryException e) { + throw new IndexMaintenanceException(e); + } + } + } + final IndexUpdater indexUpdater = this.region.getIndexUpdater(); + if (indexUpdater != null) { + final LocalRegion indexRegion; + if (owner != null) { + indexRegion = owner; + } + else { + indexRegion = this.region; + } + try { + indexUpdater.onEvent(indexRegion, this, reentry); + calledSetValue = true; + reentry.setValueWithTombstoneCheck(v, this); // already called prepareValueForCache + success = true; + } finally { + indexUpdater.postEvent(indexRegion, this, reentry, success); + } + } + else { + calledSetValue = true; + reentry.setValueWithTombstoneCheck(v, this); // already called prepareValueForCache + success = true; + } + } finally { + if (!success && reentry instanceof OffHeapRegionEntry && v instanceof Chunk) { + OffHeapRegionEntryHelper.releaseEntry((OffHeapRegionEntry)reentry, (Chunk)v); + } + } + if (logger.isTraceEnabled()) { + if (v instanceof CachedDeserializable) { + logger.trace("EntryEventImpl.setNewValueInRegion: put CachedDeserializable({},{})", + this.getKey(), ((CachedDeserializable)v).getStringForm()); + } + else { + logger.trace("EntryEventImpl.setNewValueInRegion: put({},{})", + this.getKey(), StringUtils.forceToString(v)); + } + } + + if (!isTombstone && wasTombstone) { + owner.unscheduleTombstone(reentry); + } + } + + /** + * The size the new value contributes to a pr bucket. + * Note if this event is not on a pr then this value will be 0. + */ + private transient int newValueBucketSize; + public int getNewValueBucketSize() { + return this.newValueBucketSize; + } + private void setNewValueBucketSize(LocalRegion lr, Object v) { + if (lr == null) { + lr = this.region; + } + this.newValueBucketSize = lr.calculateValueSize(v); + } + + private void processDeltaBytes(Object oldValueInVM) { + if (!this.region.hasSeenEvent(this)) { + if (oldValueInVM == null || Token.isInvalidOrRemoved(oldValueInVM)) { + this.region.getCachePerfStats().incDeltaFailedUpdates(); + throw new InvalidDeltaException("Old value not found for key " + + this.keyInfo.getKey()); + } + FilterProfile fp = this.region.getFilterProfile(); + // If compression is enabled then we've already gotten a new copy due to the + // serializaion and deserialization that occurs. + boolean copy = this.region.getCompressor() == null && + (this.region.isCopyOnRead() + || this.region.getCloningEnabled() + || (fp != null && fp.getCqCount() > 0)); + Object value = oldValueInVM; + boolean wasCD = false; + if (value instanceof CachedDeserializable) { + wasCD = true; + if (copy) { + value = ((CachedDeserializable)value).getDeserializedWritableCopy(this.region, re); + } else { + value = ((CachedDeserializable)value).getDeserializedValue( + this.region, re); + } + } else { + if (copy) { + value = CopyHelper.copy(value); + } + } + boolean deltaBytesApplied = false; + try { + long start = CachePerfStats.getStatTime(); + ((com.gemstone.gemfire.Delta)value).fromDelta(new DataInputStream( + new ByteArrayInputStream(getDeltaBytes()))); + this.region.getCachePerfStats().endDeltaUpdate(start); + deltaBytesApplied = true; + } catch (RuntimeException rte) { + throw rte; + } catch (VirtualMachineError e) { + SystemFailure.initiateFailure(e); + throw e; + } catch (Throwable t) { + SystemFailure.checkFailure(); + throw new DeltaSerializationException( + "Exception while deserializing delta bytes.", t); + } finally { + if (!deltaBytesApplied) { + this.region.getCachePerfStats().incDeltaFailedUpdates(); + } + } + if (logger.isDebugEnabled()) { + logger.debug("Delta has been applied for key {}", getKey()); + } + // assert event.getNewValue() == null; + if (wasCD) { + CachedDeserializable old = (CachedDeserializable)oldValueInVM; + int valueSize; + if (GemFireCacheImpl.DELTAS_RECALCULATE_SIZE) { + valueSize = CachedDeserializableFactory.calcMemSize(value, region + .getObjectSizer(), false); + } else { + valueSize = old.getValueSizeInBytes(); + } + value = CachedDeserializableFactory.create(value, valueSize); + } + setNewValue(value); + if (this.causedByMessage != null + && this.causedByMessage instanceof PutMessage) { + ((PutMessage)this.causedByMessage).setDeltaValObj(value); + } + } else { + this.region.getCachePerfStats().incDeltaFailedUpdates(); + throw new InvalidDeltaException( + "Cache encountered replay of event containing delta bytes for key " + + this.keyInfo.getKey()); + } + } + + void setTXEntryOldValue(Object oldVal, boolean mustBeAvailable) { + if (Token.isInvalidOrRemoved(oldVal)) { + oldVal = null; + } + else { + if (mustBeAvailable || oldVal == null || EVENT_OLD_VALUE) { + // set oldValue to oldVal + } + else { + oldVal = Token.NOT_AVAILABLE; + } + } + retainAndSetOldValue(oldVal); + } + + void putValueTXEntry(final TXEntryState tx) { + Object v = basicGetNewValue(); + if (v == null) { + if (deltaBytes != null) { + // since newValue is null, and we have deltaBytes + // there must be a nearSidePendingValue + processDeltaBytes(tx.getNearSidePendingValue()); + v = basicGetNewValue(); + } else if (this.delta != null) { + v = this.delta; + } else { + v = isLocalInvalid() ? Token.LOCAL_INVALID : Token.INVALID; + } + } + + if (this.op != Operation.LOCAL_INVALIDATE + && this.op != Operation.LOCAL_DESTROY) { + // fix for bug 34387 + tx.setPendingValue(OffHeapHelper.copyIfNeeded(v)); // TODO OFFHEAP optimize + } + tx.setCallbackArgument(getCallbackArgument()); + } + + /** @return false if entry doesn't exist */ + public boolean setOldValueFromRegion() + { + try { + RegionEntry re = this.region.getRegionEntry(getKey()); + if (re == null) return false; + ReferenceCountHelper.skipRefCountTracking(); + Object v = re._getValueRetain(this.region, true); + ReferenceCountHelper.unskipRefCountTracking(); + try { + return setOldValue(v); + } finally { + OffHeapHelper.releaseWithNoTracking(v); + } + } + catch (EntryNotFoundException ex) { + return false; + } + } + + /** Return true if old value is the DESTROYED token */ + boolean oldValueIsDestroyedToken() + { + return this.oldValue == Token.DESTROYED || this.oldValue == Token.TOMBSTONE; + } + + void setOldValueDestroyedToken() + { + basicSetOldValue(Token.DESTROYED); + } + + /** + * @return false if value 'v' indicates that entry does not exist + */ + public boolean setOldValue(Object v) { + return setOldValue(v, false); + } + + + /** + * @param force true if the old value should be forcibly set, used + * for HARegions, methods like putIfAbsent, etc., + * where the old value must be available. + * @return false if value 'v' indicates that entry does not exist + */ + public boolean setOldValue(Object v, boolean force) { + if (v == null || Token.isRemoved(v)) { + return false; + } + else { + if (Token.isInvalid(v)) { + v = null; + } + else { + if (force || + (this.region instanceof HARegion) // fix for bug 37909 + ) { + // set oldValue to "v". + } else if (EVENT_OLD_VALUE) { + // TODO Rusty add compression support here + // set oldValue to "v". + } else { + v = Token.NOT_AVAILABLE; + } + } + retainAndSetOldValue(v); + return true; + } + } + + /** + * sets the old value for concurrent map operation results received + * from a server. + */ + public void setConcurrentMapOldValue(Object v) { + if (Token.isRemoved(v)) { + return; + } else { + if (Token.isInvalid(v)) { + v = null; + } + retainAndSetOldValue(v); + } + } + + /** Return true if new value available */ + public boolean hasNewValue() { + Object tmp = this.newValue; + if (tmp == null && hasDelta()) { + // ???:ezoerner:20080611 what if applying the delta would produce + // null or (strangely) NOT_AVAILABLE.. do we need to apply it here to + // find out? + return true; + } + return tmp != null && tmp != Token.NOT_AVAILABLE; + } + + public final boolean hasOldValue() { + return this.oldValue != null && this.oldValue != Token.NOT_AVAILABLE; + } + public final boolean isOldValueAToken() { + return this.oldValue instanceof Token; + } + + /** + * This should only be used in case of internal delta and not for Delta of + * Delta Propagation feature. + * + * @return boolean + */ + public boolean hasDelta() { + return (this.delta != null); + } + + public boolean isOldValueAvailable() { + if (isOriginRemote() && this.region.isProxy()) { + return false; + } else { + return basicGetOldValue() != Token.NOT_AVAILABLE; + } + } + + public void oldValueNotAvailable() { + basicSetOldValue(Token.NOT_AVAILABLE); + } + + public static Object deserialize(byte[] bytes) { + return deserialize(bytes, null, null); + } + + public static Object deserialize(byte[] bytes, Version version, + ByteArrayDataInput in) { + if (bytes == null) + return null; + try { + return BlobHelper.deserializeBlob(bytes, version, in); + } + catch (IOException e) { + throw new SerializationException(LocalizedStrings.EntryEventImpl_AN_IOEXCEPTION_WAS_THROWN_WHILE_DESERIALIZING.toLocalizedString(), e); + } + catch (ClassNotFoundException e) { + // fix for bug 43602 + throw new SerializationException(LocalizedStrings.EntryEventImpl_A_CLASSNOTFOUNDEXCEPTION_WAS_THROWN_WHILE_TRYING_TO_DESERIALIZE_CACHED_VALUE.toLocalizedString(), e); + } + } + + /** + * If a PdxInstance is returned then it will have an unretained reference + * to Chunk's off-heap address. + */ + public static @Unretained Object deserializeChunk(Chunk bytes) { + if (bytes == null) + return null; + try { + return BlobHelper.deserializeOffHeapBlob(bytes); + } + catch (IOException e) { + throw new SerializationException(LocalizedStrings.EntryEventImpl_AN_IOEXCEPTION_WAS_THROWN_WHILE_DESERIALIZING.toLocalizedString(), e); + } + catch (ClassNotFoundException e) { + // fix for bug 43602 + throw new SerializationException(LocalizedStrings.EntryEventImpl_A_CLASSNOTFOUNDEXCEPTION_WAS_THROWN_WHILE_TRYING_TO_DESERIALIZE_CACHED_VALUE.toLocalizedString(), e); + } + } + + /** + * Serialize an object into a byte[] + * + * @throws IllegalArgumentException + * If obj should not be serialized + */ + public static byte[] serialize(Object obj) { + return serialize(obj, null); + } + + /** + * Serialize an object into a byte[] + * + * @throws IllegalArgumentException + * If obj should not be serialized + */ + public static byte[] serialize(Object obj, Version version) + { + if (obj == null || obj == Token.NOT_AVAILABLE + || Token.isInvalidOrRemoved(obj)) + throw new IllegalArgumentException(LocalizedStrings.EntryEventImpl_MUST_NOT_SERIALIZE_0_IN_THIS_CONTEXT.toLocalizedString(obj)); + try { + return BlobHelper.serializeToBlob(obj, version); + } + catch (IOException e) { + throw new SerializationException(LocalizedStrings.EntryEventImpl_AN_IOEXCEPTION_WAS_THROWN_WHILE_SERIALIZING.toLocalizedString(), e); + } + } + + + /** + * Serialize an object into a byte[] . If the byte array + * provided by the wrapper is sufficient to hold the data, it is used + * otherwise a new byte array gets created & its reference is stored in the + * wrapper. The User Bit is also appropriately set as Serialized + * + * @param wrapper + * Object of type BytesAndBitsForCompactor which is used to fetch + * the serialized data. The byte array of the wrapper is used + * if possible else a the new byte array containing the data is + * set in the wrapper. + * @throws IllegalArgumentException + * If obj should not be serialized + */ + public static void fillSerializedValue(BytesAndBitsForCompactor wrapper, + Object obj, byte userBits) { + if (obj == null || obj == Token.NOT_AVAILABLE + || Token.isInvalidOrRemoved(obj)) + throw new IllegalArgumentException( + LocalizedStrings.EntryEvents_MUST_NOT_SERIALIZE_0_IN_THIS_CONTEXT.toLocalizedString(obj)); + try { + HeapDataOutputStream hdos = null; + if (wrapper.getBytes().length < 32) { + hdos = new HeapDataOutputStream(Version.CURRENT); + } + else { + hdos = new HeapDataOutputStream(wrapper.getBytes()); + } + DataSerializer.writeObject(obj, hdos); + // return hdos.toByteArray(); + hdos.sendTo(wrapper, userBits); + } + catch (IOException e) { + RuntimeException e2 = new IllegalArgumentException( + LocalizedStrings.EntryEventImpl_AN_IOEXCEPTION_WAS_THROWN_WHILE_SERIALIZING.toLocalizedString()); + e2.initCause(e); + throw e2; + } + } + + protected String getShortClassName() { + String cname = getClass().getName(); + return cname.substring(getClass().getPackage().getName().length()+1); + } + + @Override + public String toString() { + StringBuilder buf = new StringBuilder(); + buf.append(getShortClassName()); + buf.append("["); + + buf.append("op="); + buf.append(getOperation()); + buf.append(";key="); + buf.append(this.getKey()); + buf.append(";oldValue="); + try { + ArrayUtils.objectStringNonRecursive(basicGetOldValue(), buf); + } catch (IllegalStateException ex) { + buf.append("OFFHEAP_VALUE_FREED"); + } + buf.append(";newValue="); + try { + ArrayUtils.objectStringNonRecursive(basicGetNewValue(), buf); + } catch (IllegalStateException ex) { + buf.append("OFFHEAP_VALUE_FREED"); + } + buf.append(";callbackArg="); + buf.append(this.getRawCallbackArgument()); + buf.append(";originRemote="); + buf.append(isOriginRemote()); + buf.append(";originMember="); + buf.append(getDistributedMember()); +// if (this.partitionMessage != null) { +// buf.append("; partitionMessage="); +// buf.append(this.partitionMessage); +// } + if (this.isPossibleDuplicate()) { + buf.append(";posDup"); + } + if (callbacksInvoked()) { + buf.append(";callbacksInvoked"); + } + if (this.versionTag != null) { + buf.append(";version=").append(this.versionTag); + } + if (getContext() != null) { + buf.append(";context="); + buf.append(getContext()); + } + if (this.eventID != null) { + buf.append(";id="); + buf.append(this.eventID); + } + if (this.deltaBytes != null) { + buf.append(";[" + this.deltaBytes.length + " deltaBytes]"); + } +// else { +// buf.append(";[no deltaBytes]"); +// } + if (this.filterInfo != null) { + buf.append(";routing="); + buf.append(this.filterInfo); + } + if (this.isFromServer()) { + buf.append(";isFromServer"); + } + if (this.isConcurrencyConflict()) { + buf.append(";isInConflict"); + } + if (this.getInhibitDistribution()) { + buf.append(";inhibitDistribution"); + } + buf.append("]"); + return buf.toString(); + } + + public int getDSFID() { + return ENTRY_EVENT; + } + + public void toData(DataOutput out) throws IOException + { + DataSerializer.writeObject(this.eventID, out); + DataSerializer.writeObject(this.getKey(), out); + DataSerializer.writeObject(this.keyInfo.getValue(), out); + out.writeByte(this.op.ordinal); + out.writeShort(this.eventFlags & EventFlags.FLAG_TRANSIENT_MASK); + DataSerializer.writeObject(this.getRawCallbackArgument(), out); + DataSerializer.writeObject(this.txId, out); + + { + boolean isDelta = this.delta != null; + out.writeBoolean(isDelta); + if (isDelta) { + DataSerializer.writeObject(this.delta, out); + } + else { + Object nv = basicGetNewValue(); + boolean newValueSerialized = nv instanceof CachedDeserializable; + if (newValueSerialized) { + if (nv instanceof StoredObject) { + newValueSerialized = ((StoredObject) nv).isSerialized(); + } + } + out.writeBoolean(newValueSerialized); + if (newValueSerialized) { + if (this.newValueBytes != null) { + DataSerializer.writeByteArray(this.newValueBytes, out); + } else if (this.cachedSerializedNewValue != null) { + DataSerializer.writeByteArray(this.cachedSerializedNewValue, out); + } else { + CachedDeserializable cd = (CachedDeserializable)nv; + DataSerializer.writeObjectAsByteArray(cd.getValue(), out); + } + } + else { + DataSerializer.writeObject(nv, out); + } + } + } + + { + Object ov = basicGetOldValue(); + boolean oldValueSerialized = ov instanceof CachedDeserializable; + if (oldValueSerialized) { + if (ov instanceof StoredObject) { + oldValueSerialized = ((StoredObject) ov).isSerialized(); + } + } + out.writeBoolean(oldValueSerialized); + if (oldValueSerialized) { + if (this.oldValueBytes != null) { + DataSerializer.writeByteArray(this.oldValueBytes, out); + } + else { + CachedDeserializable cd = (CachedDeserializable)ov; + DataSerializer.writeObjectAsByteArray(cd.getValue(), out); + } + } + else { + DataSerializer.writeObject(ov, out); + } + } + InternalDataSerializer.invokeToData((InternalDistributedMember)this.distributedMember, out); + DataSerializer.writeObject(getContext(), out); + DataSerializer.writeLong(tailKey, out); + } + + private static abstract class EventFlags + { + private static final short FLAG_ORIGIN_REMOTE = 0x01; + // localInvalid: true if a null new value should be treated as a local + // invalid. + private static final short FLAG_LOCAL_INVALID = 0x02; + private static final short FLAG_GENERATE_CALLBACKS = 0x04; + private static final short FLAG_POSSIBLE_DUPLICATE = 0x08; + private static final short FLAG_INVOKE_PR_CALLBACKS = 0x10; + private static final short FLAG_CONCURRENCY_CONFLICT = 0x20; + private static final short FLAG_INHIBIT_LISTENER_NOTIFICATION = 0x40; + private static final short FLAG_CALLBACKS_INVOKED = 0x80; + private static final short FLAG_ISCREATE = 0x100; + private static final short FLAG_SERIALIZATION_DEFERRED = 0x200; + private static final short FLAG_FROM_SERVER = 0x400; + private static final short FLAG_FROM_RI_LOCAL_DESTROY = 0x800; + private static final short FLAG_INHIBIT_DISTRIBUTION = 0x1000; + private static final short FLAG_REDESTROYED_TOMBSTONE = 0x2000; + private static final short FLAG_INHIBIT_ALL_NOTIFICATIONS= 0x4000; + + /** mask for clearing transient flags when serializing */ + private static final short FLAG_TRANSIENT_MASK = + ~(FLAG_CALLBACKS_INVOKED + | FLAG_ISCREATE + | FLAG_INHIBIT_LISTENER_NOTIFICATION + | FLAG_SERIALIZATION_DEFERRED + | FLAG_FROM_SERVER + | FLAG_FROM_RI_LOCAL_DESTROY + | FLAG_INHIBIT_DISTRIBUTION + | FLAG_REDESTROYED_TOMBSTONE + ); + + protected static final boolean isSet(short flags, short mask) + { + return (flags & mask) != 0; + } + + /** WARNING: Does not set the bit in place, returns new short with bit set */ + protected static final short set(short flags, short mask, boolean on) + { + return (short)(on ? (flags | mask) : (flags & ~mask)); + } + } + + /** + * @return null if old value is not serialized; otherwise returns a SerializedCacheValueImpl containing the old value. + */ + public final SerializedCacheValue getSerializedOldValue() { + @Unretained(ENTRY_EVENT_OLD_VALUE) + final Object tmp = basicGetOldValue(); + if (tmp instanceof CachedDeserializable) { + if (tmp instanceof StoredObject) { + if (!((StoredObject) tmp).isSerialized()) { + // TODO OFFHEAP can we handle offheap byte[] better? + return null; + } + } + return new SerializedCacheValueImpl(this, this.region, this.re, + (CachedDeserializable)tmp, this.oldValueBytes); + } + else { + return null; + } + } + + /** + * Compute an estimate of the size of the new value + * for a PR. Since PR's always store values in a cached deserializable + * we need to compute its size as a blob. + * + * @return the size of serialized bytes for the new value + */ + public int getNewValSizeForPR() + { + int newSize = 0; + applyDelta(false); + Object v = basicGetNewValue(); + if (v != null) { + try { + newSize = CachedDeserializableFactory.calcSerializedSize(v) + + CachedDeserializableFactory.overhead(); + } catch (IllegalArgumentException iae) { + logger.warn(LocalizedMessage.create(LocalizedStrings.EntryEventImpl_DATASTORE_FAILED_TO_CALCULATE_SIZE_OF_NEW_VALUE), iae); + newSize = 0; + } + } + return newSize; + } + + /** + * Compute an estimate of the size of the old value + * + * @return the size of serialized bytes for the old value + */ + public int getOldValSize() + { + int oldSize = 0; + if (hasOldValue()) { + try { + oldSize = CachedDeserializableFactory.calcMemSize(basicGetOldValue()); + } catch (IllegalArgumentException iae) { + logger.warn(LocalizedMessage.create(LocalizedStrings.EntryEventImpl_DATASTORE_FAILED_TO_CALCULATE_SIZE_OF_OLD_VALUE), iae); + oldSize = 0; + } + } + return oldSize; + } + + public EnumListenerEvent getEventType() { + return this.eventType; + } + + /** + * Sets the operation type. + * @param eventType + */ + public void setEventType(EnumListenerEvent eventType) { + this.eventType = eventType; + } + + /** + * set this to true after dispatching the event to a cache listener + */ + public void callbacksInvoked(boolean dispatched) { + setEventFlag(EventFlags.FLAG_CALLBACKS_INVOKED, dispatched); + } + + /** + * has this event been dispatched to a cache listener? + */ + public boolean callbacksInvoked() { + return testEventFlag(EventFlags.FLAG_CALLBACKS_INVOKED); + } + + /** + * set this to true to inhibit application cache listener notification + * during event dispatching + */ + public void inhibitCacheListenerNotification(boolean inhibit) { + setEventFlag(EventFlags.FLAG_INHIBIT_LISTENER_NOTIFICATION, inhibit); + } + + /** + * are events being inhibited from dispatch to application cache listeners + * for this event? + */ + public boolean inhibitCacheListenerNotification() { + return testEventFlag(EventFlags.FLAG_INHIBIT_LISTENER_NOTIFICATION); + } + + + /** + * dispatch listener events for this event + * @param notifyGateways pass the event on to WAN queues + */ + void invokeCallbacks(LocalRegion rgn,boolean skipListeners, boolean notifyGateways) { + if (!callbacksInvoked()) { + callbacksInvoked(true); + if (this.op.isUpdate()) { + rgn.invokePutCallbacks(EnumListenerEvent.AFTER_UPDATE, this, + !skipListeners, notifyGateways); // gateways are notified in part2 processing + } + else if (this.op.isCreate()) { + rgn.invokePutCallbacks(EnumListenerEvent.AFTER_CREATE, this, + !skipListeners, notifyGateways); + } + else if (this.op.isDestroy()) { + rgn.invokeDestroyCallbacks(EnumListenerEvent.AFTER_DESTROY, + this, !skipListeners, notifyGateways); + } + else if (this.op.isInvalidate()) { + rgn.invokeInvalidateCallbacks(EnumListenerEvent.AFTER_INVALIDATE, + this, !skipListeners); + } + } + } + + private void setFromRILocalDestroy(boolean on) { + setEventFlag(EventFlags.FLAG_FROM_RI_LOCAL_DESTROY, on); + } + + public boolean isFromRILocalDestroy(){ + return testEventFlag(EventFlags.FLAG_FROM_RI_LOCAL_DESTROY); + } + + protected Long tailKey = -1L; + + /** + * Used to store next region version generated for a change on this entry + * by phase-1 commit on the primary. + * + * Not to be used in fromData and toData + */ + protected transient long nextRegionVersion = -1L; + + public void setNextRegionVersion(long regionVersion) { + this.nextRegionVersion = regionVersion; + } + + public long getNextRegionVersion() { + return this.nextRegionVersion; + } + + /** + * Return true if this event came from a server by the client doing a get. + * @since 5.7 + */ + public boolean isFromServer() { + return testEventFlag(EventFlags.FLAG_FROM_SERVER); + } + /** + * Sets the fromServer flag to v. This must be set to true if an event + * comes from a server while the affected region entry is not locked. Among + * other things it causes version conflict checks to be performed to protect + * against overwriting a newer version of the entry. + * @since 5.7 + */ + public void setFromServer(boolean v) { + setEventFlag(EventFlags.FLAG_FROM_SERVER, v); + } + + /** + * If true, the region associated with this event had already + * applied the operation it encapsulates when an attempt was + * made to apply the event. + * @return the possibleDuplicate + */ + public boolean isPossibleDuplicate() { + return testEventFlag(EventFlags.FLAG_POSSIBLE_DUPLICATE); + } + + /** + * If the operation encapsulated by this event has already been + * seen by the region to which it pertains, this flag should be + * set to true. + * @param possibleDuplicate the possibleDuplicate to set + */ + public void setPossibleDuplicate(boolean possibleDuplicate) { + setEventFlag(EventFlags.FLAG_POSSIBLE_DUPLICATE, possibleDuplicate); + } + + + /** + * are events being inhibited from dispatch to to gateway/async queues, + * client queues, cache listener and cache write. If set, sending + * notifications for the data that is read from a persistent store (HDFS) and + * is being reinserted in the cache is skipped. + */ + public boolean inhibitAllNotifications() { + return testEventFlag(EventFlags.FLAG_INHIBIT_ALL_NOTIFICATIONS); + + } + + /** + * set this to true to inhibit notifications that are sent to gateway/async queues, + * client queues, cache listener and cache write. This is used to skip sending + * notifications for the data that is read from a persistent store (HDFS) and + * is being reinserted in the cache + */ + public void setInhibitAllNotifications(boolean inhibit) { + setEventFlag(EventFlags.FLAG_INHIBIT_ALL_NOTIFICATIONS, inhibit); + } + + /** + * sets the routing information for cache clients + */ + public void setLocalFilterInfo(FilterInfo info) { + this.filterInfo = info; + } + + /** + * retrieves the routing information for cache clients in this VM + */ + public FilterInfo getLocalFilterInfo() { + return this.filterInfo; + } + + + public LocalRegion getLocalRegion() { + return this.region; + } + + /** + * This method returns the delta bytes used in Delta Propagation feature. + * For internal delta, see getRawNewValue(). + * + * @return delta bytes + */ + public byte[] getDeltaBytes() { + return deltaBytes; + } + + /** + * This method sets the delta bytes used in Delta Propagation feature. For + * internal delta, see setNewValue(). + * + * @param deltaBytes + */ + public void setDeltaBytes(byte[] deltaBytes) { + this.deltaBytes = deltaBytes; + } + + // TODO (ashetkar) Can this.op.isCreate() be used instead? + public boolean isCreate() { + return testEventFlag(EventFlags.FLAG_ISCREATE); + } + + /** + * this is used to distinguish an event that merely has Operation.CREATE + * from one that originated from Region.create() for delta processing + * purposes. + */ + public EntryEventImpl setCreate(boolean isCreate) { + setEventFlag(EventFlags.FLAG_ISCREATE, isCreate); + return this; + } + + public final void setContextObject(Object ctx) { + this.contextObj = ctx; + } + + public final Object getContextObject() { + return this.contextObj; + } + + /** + * @return the keyInfo + */ + public KeyInfo getKeyInfo() { + return keyInfo; + } + + public void setKeyInfo(KeyInfo keyInfo) { + this.keyInfo = keyInfo; + } + + /** + * establish the old value in this event as the current cache value, + * whether in memory or on disk + */ + public void setOldValueForQueryProcessing() { + RegionEntry reentry = this.region.entries.getEntry(this.getKey()); + if (reentry != null) { + @Retained Object v = reentry.getValueOffHeapOrDiskWithoutFaultIn(this.region); + if ( !(v instanceof Token) ) { + // v has already been retained. + basicSetOldValue(v); + // this event now owns the retention of v. + } + } + } + + @Override + public Version[] getSerializationVersions() { + return null; + } + + /** + * @param versionTag the versionTag to set + */ + public void setVersionTag(VersionTag versionTag) { + this.versionTag = versionTag; + } + + /** + * @return the concurrency versioning tag for this event, if any + */ + public VersionTag getVersionTag() { + return this.versionTag; + } + + /** + * @return if there's no valid version tag for this event + */ + public boolean hasValidVersionTag() { + return this.versionTag != null && this.versionTag.hasValidVersion(); + } + + /** + * this method joins together version tag timestamps and the "lastModified" + * timestamps generated and stored in entries. If a change does not already + * carry a lastModified timestamp + * @param suggestedTime + * @return the timestamp to store in the entry + */ + public long getEventTime(long suggestedTime) { + long result = suggestedTime; + if (this.versionTag != null) { + if (suggestedTime != 0) { + this.versionTag.setVersionTimeStamp(suggestedTime); + } else { + result = this.versionTag.getVersionTimeStamp(); + } + } + if (result <= 0) { + LocalRegion region = this.getLocalRegion(); + if (region != null) { + result = region.cacheTimeMillis(); + } else { + result = System.currentTimeMillis(); + } + } + return result; + } + + public static final class SerializedCacheValueImpl + implements SerializedCacheValue, CachedDeserializable, Sendable + { + private final EntryEventImpl event; + @Unretained private final CachedDeserializable cd; + private final Region r; + private final RegionEntry re; + private final byte[] serializedValue; + + SerializedCacheValueImpl(EntryEventImpl event, Region r, RegionEntry re, @Unretained CachedDeserializable cd, byte[] serializedBytes) { + if (cd instanceof Chunk) { + this.event = event; + } else { + this.event = null; + } + this.r = r; + this.re = re; + this.cd = cd; + this.serializedValue = serializedBytes; + } + + public byte[] getSerializedValue() { + if(this.serializedValue != null){ + return this.serializedValue; + } + return getCd().getSerializedValue(); + } + + private CachedDeserializable getCd() { + if (this.event != null && !this.event.offHeapOk) { + throw new IllegalStateException("Attempt to access off heap value after the EntryEvent was released."); + } + return this.cd; + } + + public Object getDeserializedValue() { + return getDeserializedValue(this.r, this.re); + } + public Object getDeserializedForReading() { + // TODO OFFHEAP: returns off-heap PdxInstance + return OffHeapHelper.getHeapForm(getCd().getDeserializedForReading()); + } + public Object getDeserializedWritableCopy(Region rgn, RegionEntry entry) { + // TODO OFFHEAP: returns off-heap PdxInstance + return OffHeapHelper.getHeapForm(getCd().getDeserializedWritableCopy(rgn, entry)); + } + + public Object getDeserializedValue(Region rgn, RegionEntry reentry) { + // TODO OFFHEAP: returns off-heap PdxInstance + return OffHeapHelper.getHeapForm(getCd().getDeserializedValue(rgn, reentry)); + } + public Object getValue() { + if(this.serializedValue != null){ + return this.serializedValue; + } + return getCd().getValue(); + } + public void writeValueAsByteArray(DataOutput out) throws IOException { + if (this.serializedValue != null) { + DataSerializer.writeByteArray(this.serializedValue, out); + } else { + getCd().writeValueAsByteArray(out); + } + } + public void fillSerializedValue(BytesAndBitsForCompactor wrapper, byte userBits) { + if (this.serializedValue != null) { + wrapper.setData(this.serializedValue, userBits, this.serializedValue.length, + false /* Not Reusable as it refers to underlying value */); + } else { + getCd().fillSerializedValue(wrapper, userBits); + } + } + public int getValueSizeInBytes() { + return getCd().getValueSizeInBytes(); + } + public int getSizeInBytes() { + return getCd().getSizeInBytes(); + } + + public String getStringForm() { + return getCd().getStringForm(); + } + + @Override + public void sendTo(DataOutput out) throws IOException { + DataSerializer.writeObject(getCd(), out); + } + } +////////////////////////////////////////////////////////////////////////////////////////// + + public void setTailKey(Long tailKey) { + this.tailKey = tailKey; + } + + public Long getTailKey() { + return this.tailKey; + } + + private Thread invokeCallbacksThread; + + /** + * Mark this event as having its callbacks invoked by the current thread. + * Note this is done just before the actual invocation of the callbacks. + */ + public void setCallbacksInvokedByCurrentThread() { + this.invokeCallbacksThread = Thread.currentThread(); + } + + /** + * Return true if this event was marked as having its callbacks invoked + * by the current thread. + */ + public boolean getCallbacksInvokedByCurrentThread() { + if (this.invokeCallbacksThread == null) return false; + return Thread.currentThread().equals(this.invokeCallbacksThread); + } + + /** + * Returns whether this event is on the PDX type region. + * @return whether this event is on the PDX type region + */ + public boolean isOnPdxTypeRegion() { + return PeerTypeRegistration.REGION_FULL_PATH.equals(this.region.getFullPath()); + } + + /** + * returns true if it is okay to process this event even though it has + * a null version + */ + public boolean noVersionReceivedFromServer() { + return versionTag == null + && region.concurrencyChecksEnabled + && region.getServerProxy() != null + && !op.isLocal() + && !isOriginRemote() + ; + } + + /** returns a copy of this event with the additional fields for WAN conflict resolution */ + public TimestampedEntryEvent getTimestampedEvent( + final int newDSID, final int oldDSID, + final long newTimestamp, final long oldTimestamp) { + return new TimestampedEntryEventImpl(this, newDSID, oldDSID, newTimestamp, oldTimestamp); + } + + private void setSerializationDeferred(boolean serializationDeferred) { + setEventFlag(EventFlags.FLAG_SERIALIZATION_DEFERRED, serializationDeferred); + } + + private boolean isSerializationDeferred() { + return testEventFlag(EventFlags.FLAG_SERIALIZATION_DEFERRED); + } + + public boolean isSingleHop() { + return (this.causedByMessage != null && this.causedByMessage instanceof RemoteOperationMessage); + } + + public boolean isSingleHopPutOp() { + return (this.causedByMessage != null && this.causedByMessage instanceof RemotePutMessage); + } + + /** + * True if it is ok to use old/new values that are stored off heap. + * False if an exception should be thrown if an attempt is made to access old/new offheap values. + */ + private transient boolean offHeapOk = true; + + @Override + @Released({ENTRY_EVENT_NEW_VALUE, ENTRY_EVENT_OLD_VALUE}) + public void release() { + // noop if already freed or values can not be off-heap + if (!this.offHeapOk) return; + // Note that this method does not set the old/new values to null but + // leaves them set to the off-heap value so that future calls to getOld/NewValue + // will fail with an exception. +// LocalRegion lr = getLocalRegion(); +// if (lr != null) { +// if (lr.isCacheClosing()) { +// // to fix races during closing and recreating cache (see bug 47883) don't bother +// // trying to decrement reference counts if we are closing the cache. +// // TODO OFFHEAP: this will cause problems once offheap lives longer than a cache. +// this.offHeapOk = false; +// return; +// } +// } + Object ov = basicGetOldValue(); + Object nv = basicGetNewValue(); + this.offHeapOk = false; + + if (ov instanceof Chunk) { + //this.region.getCache().getLogger().info("DEBUG freeing ref to old value on " + System.identityHashCode(ov)); + if (ReferenceCountHelper.trackReferenceCounts()) { + ReferenceCountHelper.setReferenceCountOwner(new OldValueOwner()); + ((Chunk) ov).release(); + ReferenceCountHelper.setReferenceCountOwner(null); + } else { + ((Chunk) ov).release(); + } + } + OffHeapHelper.releaseAndTrackOwner(nv, this); + } + + /** + * Make sure that this event will never own an off-heap value. + * Once this is called on an event it does not need to have release called. + */ + public void disallowOffHeapValues() { + if (this.newValue instanceof Chunk || this.oldValue instanceof Chunk) { + throw new IllegalStateException("This event does not support off-heap values"); + } + this.offHeapOk = false; + } + + /** + * This copies the off-heap new and/or old value to the heap. + * As a result the current off-heap new/old will be released. + * @throws IllegalStateException if called with an event for sqlf data. + */ + @Released({ENTRY_EVENT_NEW_VALUE, ENTRY_EVENT_OLD_VALUE}) + public void copyOffHeapToHeap() { + Object ov = basicGetOldValue(); + if (ov instanceof Chunk) { + if (ReferenceCountHelper.trackReferenceCounts()) { + ReferenceCountHelper.setReferenceCountOwner(new OldValueOwner()); + this.oldValue = OffHeapHelper.copyAndReleaseIfNeeded(ov); + ReferenceCountHelper.setReferenceCountOwner(null); + } else { + this.oldValue = OffHeapHelper.copyAndReleaseIfNeeded(ov); + } + } + Object nv = basicGetNewValue(); + if (nv instanceof Chunk) { + ReferenceCountHelper.setReferenceCountOwner(this); + this.newValue = OffHeapHelper.copyAndReleaseIfNeeded(nv); + ReferenceCountHelper.setReferenceCountOwner(null); + } + if (this.newValue instanceof Chunk || this.oldValue instanceof Chunk) { + throw new IllegalStateException("event's old/new value still off-heap after calling copyOffHeapToHeap"); + } + this.offHeapOk = false; + } + + public boolean isOldValueOffHeap() { + return this.oldValue instanceof Chunk; + } + public final boolean isFetchFromHDFS() { + return fetchFromHDFS; + } + + public final void setFetchFromHDFS(boolean fetchFromHDFS) { + this.fetchFromHDFS = fetchFromHDFS; + } + + public final boolean isPutDML() { + return this.isPutDML; + } + + public final void setPutDML(boolean val) { + this.isPutDML = val; + } + + public final boolean isLoadedFromHDFS() { + return loadedFromHDFS; + } + + public final void setLoadedFromHDFS(boolean loadedFromHDFS) { + this.loadedFromHDFS = loadedFromHDFS; + } +} diff --git a/gemfire-core/src/main/java/com/gemstone/gemfire/internal/cache/LocalRegion.java b/gemfire-core/src/main/java/com/gemstone/gemfire/internal/cache/LocalRegion.java new file mode 100644 index 000000000000..78d356f179a7 --- /dev/null +++ b/gemfire-core/src/main/java/com/gemstone/gemfire/internal/cache/LocalRegion.java @@ -0,0 +1,12970 @@ +/* + * 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 com.gemstone.gemfire.internal.cache; + +import static com.gemstone.gemfire.internal.offheap.annotations.OffHeapIdentifier.*; + +import java.io.DataInputStream; +import java.io.DataOutputStream; +import java.io.File; +import java.io.IOException; +import java.io.InputStream; +import java.io.OutputStream; +import java.util.AbstractSet; +import java.util.ArrayList; +import java.util.Arrays; +import java.util.Collection; +import java.util.Collections; +import java.util.EnumSet; +import java.util.HashMap; +import java.util.HashSet; +import java.util.Hashtable; +import java.util.Iterator; +import java.util.List; +import java.util.Map; +import java.util.NoSuchElementException; +import java.util.Set; +import java.util.concurrent.ConcurrentHashMap; +import java.util.concurrent.ConcurrentMap; +import java.util.concurrent.ExecutionException; +import java.util.concurrent.Future; +import java.util.concurrent.RejectedExecutionException; +import java.util.concurrent.Semaphore; +import java.util.concurrent.atomic.AtomicBoolean; +import java.util.concurrent.atomic.AtomicInteger; +import java.util.concurrent.locks.Lock; +import java.util.concurrent.locks.ReentrantLock; +import java.util.regex.Pattern; + +import org.apache.logging.log4j.Logger; + +import com.gemstone.gemfire.CancelCriterion; +import com.gemstone.gemfire.CancelException; +import com.gemstone.gemfire.CopyHelper; +import com.gemstone.gemfire.DataSerializable; +import com.gemstone.gemfire.DataSerializer; +import com.gemstone.gemfire.DeltaSerializationException; +import com.gemstone.gemfire.InternalGemFireError; +import com.gemstone.gemfire.InternalGemFireException; +import com.gemstone.gemfire.LogWriter; +import com.gemstone.gemfire.SystemFailure; +import com.gemstone.gemfire.admin.internal.SystemMemberCacheEventProcessor; +import com.gemstone.gemfire.cache.AttributesMutator; +import com.gemstone.gemfire.cache.Cache; +import com.gemstone.gemfire.cache.CacheClosedException; +import com.gemstone.gemfire.cache.CacheEvent; +import com.gemstone.gemfire.cache.CacheException; +import com.gemstone.gemfire.cache.CacheListener; +import com.gemstone.gemfire.cache.CacheLoader; +import com.gemstone.gemfire.cache.CacheLoaderException; +import com.gemstone.gemfire.cache.CacheRuntimeException; +import com.gemstone.gemfire.cache.CacheStatistics; +import com.gemstone.gemfire.cache.CacheWriter; +import com.gemstone.gemfire.cache.CacheWriterException; +import com.gemstone.gemfire.cache.CustomExpiry; +import com.gemstone.gemfire.cache.DataPolicy; +import com.gemstone.gemfire.cache.DiskAccessException; +import com.gemstone.gemfire.cache.DiskStoreFactory; +import com.gemstone.gemfire.cache.DiskWriteAttributes; +import com.gemstone.gemfire.cache.DiskWriteAttributesFactory; +import com.gemstone.gemfire.cache.EntryDestroyedException; +import com.gemstone.gemfire.cache.EntryExistsException; +import com.gemstone.gemfire.cache.EntryNotFoundException; +import com.gemstone.gemfire.cache.EvictionAttributes; +import com.gemstone.gemfire.cache.ExpirationAttributes; +import com.gemstone.gemfire.cache.FailedSynchronizationException; +import com.gemstone.gemfire.cache.InterestRegistrationEvent; +import com.gemstone.gemfire.cache.InterestResultPolicy; +import com.gemstone.gemfire.cache.LoaderHelper; +import com.gemstone.gemfire.cache.LowMemoryException; +import com.gemstone.gemfire.cache.Operation; +import com.gemstone.gemfire.cache.PartitionedRegionStorageException; +import com.gemstone.gemfire.cache.Region; +import com.gemstone.gemfire.cache.RegionAttributes; +import com.gemstone.gemfire.cache.RegionDestroyedException; +import com.gemstone.gemfire.cache.RegionEvent; +import com.gemstone.gemfire.cache.RegionExistsException; +import com.gemstone.gemfire.cache.RegionMembershipListener; +import com.gemstone.gemfire.cache.RegionReinitializedException; +import com.gemstone.gemfire.cache.Scope; +import com.gemstone.gemfire.cache.StatisticsDisabledException; +import com.gemstone.gemfire.cache.TimeoutException; +import com.gemstone.gemfire.cache.TransactionException; +import com.gemstone.gemfire.cache.TransactionId; +import com.gemstone.gemfire.cache.client.PoolManager; +import com.gemstone.gemfire.cache.client.ServerOperationException; +import com.gemstone.gemfire.cache.client.SubscriptionNotEnabledException; +import com.gemstone.gemfire.cache.client.internal.Connection; +import com.gemstone.gemfire.cache.client.internal.Endpoint; +import com.gemstone.gemfire.cache.client.internal.PoolImpl; +import com.gemstone.gemfire.cache.client.internal.ServerRegionProxy; +import com.gemstone.gemfire.cache.control.ResourceManager; +import com.gemstone.gemfire.cache.execute.Function; +import com.gemstone.gemfire.cache.execute.ResultCollector; +import com.gemstone.gemfire.cache.hdfs.internal.HDFSBucketRegionQueue; +import com.gemstone.gemfire.cache.hdfs.internal.HDFSIntegrationUtil; +import com.gemstone.gemfire.cache.hdfs.internal.HoplogListenerForRegion; +import com.gemstone.gemfire.cache.hdfs.internal.hoplog.HDFSRegionDirector; +import com.gemstone.gemfire.cache.hdfs.internal.hoplog.HDFSRegionDirector.HdfsRegionManager; +import com.gemstone.gemfire.cache.partition.PartitionRegionHelper; +import com.gemstone.gemfire.cache.query.FunctionDomainException; +import com.gemstone.gemfire.cache.query.Index; +import com.gemstone.gemfire.cache.query.IndexMaintenanceException; +import com.gemstone.gemfire.cache.query.IndexType; +import com.gemstone.gemfire.cache.query.MultiIndexCreationException; +import com.gemstone.gemfire.cache.query.NameResolutionException; +import com.gemstone.gemfire.cache.query.QueryException; +import com.gemstone.gemfire.cache.query.QueryInvocationTargetException; +import com.gemstone.gemfire.cache.query.QueryService; +import com.gemstone.gemfire.cache.query.SelectResults; +import com.gemstone.gemfire.cache.query.TypeMismatchException; +import com.gemstone.gemfire.cache.query.internal.DefaultQuery; +import com.gemstone.gemfire.cache.query.internal.DefaultQueryService; +import com.gemstone.gemfire.cache.query.internal.ExecutionContext; +import com.gemstone.gemfire.cache.query.internal.IndexUpdater; +import com.gemstone.gemfire.cache.query.internal.cq.CqService; +import com.gemstone.gemfire.cache.query.internal.index.IndexCreationData; +import com.gemstone.gemfire.cache.query.internal.index.IndexManager; +import com.gemstone.gemfire.cache.query.internal.index.IndexProtocol; +import com.gemstone.gemfire.cache.query.internal.index.IndexUtils; +import com.gemstone.gemfire.cache.util.ObjectSizer; +import com.gemstone.gemfire.cache.wan.GatewaySender; +import com.gemstone.gemfire.distributed.DistributedMember; +import com.gemstone.gemfire.distributed.DistributedSystem; +import com.gemstone.gemfire.distributed.internal.DM; +import com.gemstone.gemfire.distributed.internal.DistributionAdvisor; +import com.gemstone.gemfire.distributed.internal.DistributionAdvisor.Profile; +import com.gemstone.gemfire.distributed.internal.DistributionStats; +import com.gemstone.gemfire.distributed.internal.InternalDistributedSystem; +import com.gemstone.gemfire.distributed.internal.ResourceEvent; +import com.gemstone.gemfire.distributed.internal.membership.InternalDistributedMember; +import com.gemstone.gemfire.internal.Assert; +import com.gemstone.gemfire.internal.ClassLoadUtil; +import com.gemstone.gemfire.internal.HeapDataOutputStream; +import com.gemstone.gemfire.internal.InternalStatisticsDisabledException; +import com.gemstone.gemfire.internal.NanoTimer; +import com.gemstone.gemfire.internal.Version; +import com.gemstone.gemfire.internal.cache.CacheDistributionAdvisor.CacheProfile; +import com.gemstone.gemfire.internal.cache.DiskInitFile.DiskRegionFlag; +import com.gemstone.gemfire.internal.cache.FilterRoutingInfo.FilterInfo; +import com.gemstone.gemfire.internal.cache.InitialImageOperation.GIIStatus; +import com.gemstone.gemfire.internal.cache.PutAllPartialResultException.PutAllPartialResult; +import com.gemstone.gemfire.internal.cache.control.InternalResourceManager; +import com.gemstone.gemfire.internal.cache.control.InternalResourceManager.ResourceType; +import com.gemstone.gemfire.internal.cache.control.MemoryEvent; +import com.gemstone.gemfire.internal.cache.control.MemoryThresholds; +import com.gemstone.gemfire.internal.cache.control.ResourceListener; +import com.gemstone.gemfire.internal.cache.execute.DistributedRegionFunctionExecutor; +import com.gemstone.gemfire.internal.cache.execute.DistributedRegionFunctionResultSender; +import com.gemstone.gemfire.internal.cache.execute.LocalResultCollector; +import com.gemstone.gemfire.internal.cache.execute.RegionFunctionContextImpl; +import com.gemstone.gemfire.internal.cache.execute.ServerToClientFunctionResultSender; +import com.gemstone.gemfire.internal.cache.ha.ThreadIdentifier; +import com.gemstone.gemfire.internal.cache.lru.LRUEntry; +import com.gemstone.gemfire.internal.cache.partitioned.RedundancyAlreadyMetException; +import com.gemstone.gemfire.internal.cache.persistence.DiskExceptionHandler; +import com.gemstone.gemfire.internal.cache.persistence.DiskRecoveryStore; +import com.gemstone.gemfire.internal.cache.persistence.DiskRegionView; +import com.gemstone.gemfire.internal.cache.persistence.PersistentMemberID; +import com.gemstone.gemfire.internal.cache.persistence.query.IndexMap; +import com.gemstone.gemfire.internal.cache.persistence.query.mock.IndexMapImpl; +import com.gemstone.gemfire.internal.cache.tier.InterestType; +import com.gemstone.gemfire.internal.cache.tier.sockets.CacheClientNotifier; +import com.gemstone.gemfire.internal.cache.tier.sockets.ClientHealthMonitor; +import com.gemstone.gemfire.internal.cache.tier.sockets.ClientProxyMembershipID; +import com.gemstone.gemfire.internal.cache.tier.sockets.ClientTombstoneMessage; +import com.gemstone.gemfire.internal.cache.tier.sockets.ClientUpdateMessage; +import com.gemstone.gemfire.internal.cache.tier.sockets.HandShake; +import com.gemstone.gemfire.internal.cache.tier.sockets.VersionedObjectList; +import com.gemstone.gemfire.internal.cache.versions.ConcurrentCacheModificationException; +import com.gemstone.gemfire.internal.cache.versions.RegionVersionHolder; +import com.gemstone.gemfire.internal.cache.versions.RegionVersionVector; +import com.gemstone.gemfire.internal.cache.versions.VersionSource; +import com.gemstone.gemfire.internal.cache.versions.VersionStamp; +import com.gemstone.gemfire.internal.cache.versions.VersionTag; +import com.gemstone.gemfire.internal.cache.wan.AbstractGatewaySender; +import com.gemstone.gemfire.internal.cache.wan.GatewaySenderEventCallbackArgument; +import com.gemstone.gemfire.internal.i18n.LocalizedStrings; +import com.gemstone.gemfire.internal.logging.LogService; +import com.gemstone.gemfire.internal.logging.log4j.LocalizedMessage; +import com.gemstone.gemfire.internal.logging.log4j.LogMarker; +import com.gemstone.gemfire.internal.offheap.Chunk; +import com.gemstone.gemfire.internal.offheap.OffHeapHelper; +import com.gemstone.gemfire.internal.offheap.ReferenceCountHelper; +import com.gemstone.gemfire.internal.offheap.StoredObject; +import com.gemstone.gemfire.internal.offheap.annotations.Retained; +import com.gemstone.gemfire.internal.offheap.annotations.Unretained; +import com.gemstone.gemfire.internal.sequencelog.EntryLogger; +import com.gemstone.gemfire.internal.util.concurrent.FutureResult; +import com.gemstone.gemfire.internal.util.concurrent.StoppableCountDownLatch; +import com.gemstone.gemfire.internal.util.concurrent.StoppableReadWriteLock; +import com.gemstone.gemfire.i18n.StringId; + +/** + * Implementation of a local scoped-region. Note that this class has a different + * meaning starting with 3.0. In previous versions, a LocalRegion was the + * representation of a region in the VM. Starting with 3.0, a LocalRegion is a + * non-distributed region. The subclass DistributedRegion adds distribution + * behavior. + * + */ +@SuppressWarnings("deprecation") +public class LocalRegion extends AbstractRegion + implements LoaderHelperFactory, ResourceListener, + DiskExceptionHandler, DiskRecoveryStore +{ + private static final Logger logger = LogService.getLogger(); + + /** + * Internal interface used to simulate failures when performing entry operations + * @since 5.7 + */ + public interface TestCallable { + public void call(LocalRegion r, Operation op, RegionEntry re); + } + + // view types for iterators + public enum IteratorType { + KEYS, VALUES, ENTRIES + } + + // iniitialization level + public static final int AFTER_INITIAL_IMAGE = 0; + + public static final int BEFORE_INITIAL_IMAGE = 1; + + public static final int ANY_INIT = 2; + + /** + * thread local to indicate that this thread should bypass the initialization + * Latch + */ + private static final ThreadLocal initializationThread = new ThreadLocal(); + + /* thread local to indicate its for persist data convert tool */ + protected static final ThreadLocal isConversion = new ThreadLocal(); + + // user attributes // + private Object regionUserAttribute; + + protected Map entryUserAttributes; // @todo darrel: shouldn't this be an + + // identity map whose key is a RegionEntry? + + private final String regionName; + + protected final LocalRegion parentRegion; + + // set to true only if isDestroyed is also true + // and region is about to be recreated due to reinitialization by loading + // of a snapshot, etc. + private volatile boolean reinitialized_old = false; + + protected volatile boolean isDestroyed = false; + + // In case of parallel wan, when a destroy is called on userPR, it waits for + // parallelQueue to drain and then destroys paralleQueue. In this time if + // operation like put happens on userPR then it will keep on building parallel + // queue increasing time of userPR to get destroyed.this volatile boolean will + // block such put operation by throwing RegionDestroyedException + protected volatile boolean isDestroyedForParallelWAN = false; + + // set to true after snapshot is loaded, to help get initial image + // make sure this is the right incarnation of this region + private volatile boolean reinitialized_new = false; + + /** Lock used to prevent multiple concurrent destroy region operations */ + private Semaphore destroyLock; + + //guarded by regionExpiryLock. + private RegionTTLExpiryTask regionTTLExpiryTask = null; + //guarded by regionExpiryLock. + private RegionIdleExpiryTask regionIdleExpiryTask = null; + + private final Object regionExpiryLock = new Object(); + // guarded by regionExpiryLock. Keeps track of how many txs are writing to this region. + private int txRefCount; + + private final ConcurrentHashMap entryExpiryTasks = new ConcurrentHashMap(); + + /** + * Set to true after an invalidate region expiration so we don't get multiple + * expirations + */ + volatile boolean regionInvalid = false; + + public final RegionMap entries; + + /** + * Set to true if this region supports transaction else false. + */ + private final boolean supportsTX; + + /** tracks threadID->seqno information for this region */ + protected EventTracker eventTracker; + + /** tracks region-level version information for members. See + * https://wiki.gemstone.com/display/gfe70/Consistency+in+Replicated+Regions+and+WAN + */ + private RegionVersionVector versionVector; + + private static final Pattern[] QUERY_PATTERNS = new Pattern[] { + Pattern.compile("^\\(*select .*", Pattern.CASE_INSENSITIVE + | Pattern.UNICODE_CASE | Pattern.DOTALL), + Pattern.compile("^import .*", Pattern.CASE_INSENSITIVE + | Pattern.UNICODE_CASE | Pattern.DOTALL) }; + + + public static final String EXPIRY_MS_PROPERTY = "gemfire.EXPIRY_UNITS_MS"; + + /** + * Used by unit tests to set expiry to milliseconds instead of the default + * seconds. Used in ExpiryTask. + * + * @since 5.0 + */ + final boolean EXPIRY_UNITS_MS; + + // Indicates that the entries are in fact initialized. It turns out + // you can't trust the assignment of a volatile (as indicated above) + // to mean that the the thing being assigned is fully formed, only + // those things *before* the assignment are fully formed. mthomas 10/02/2005 + private volatile boolean entriesInitialized; + + /** + * contains Regions themselves // marked volatile to make sure it is fully + * initialized before being // accessed; (actually should be final) + */ + protected volatile ConcurrentMap subregions; + + private final Object subregionsLock = new Object(); + + // Used for synchronizzing access to client Cqs +// private final Object clientCqsSync = new Object(); + + /** + * Prevents access to this region until it is done initializing, except for + * some special initializing operations such as replying to create region + * messages In JDK 1.5 we will use java.util.concurrent.CountDownLatch instead + * of com.gemstone.gemfire.internal.util.CountDownLatch. + */ + protected final StoppableCountDownLatch initializationLatchBeforeGetInitialImage; + + protected final StoppableCountDownLatch initializationLatchAfterGetInitialImage; + + /** + * Used to hold off cache listener events until the afterRegionCreate is + * called + * + * @since 5.0 + */ + private final StoppableCountDownLatch afterRegionCreateEventLatch; + + /** + * Set to true the first time isInitialized returns true. + */ + private volatile boolean initialized = false; // added for bug 30223 + + /** Used for accessing region data on disk */ + private final DiskRegion diskRegion; + + /** + * Used by transactions to suspend entry expiration while a transaction is in + * progress on a region. This field is only initialized if expiration is + * configured and transactions are possible. + */ + private volatile StoppableReadWriteLock txExpirationLock; + + /** + * Used for serializing netSearch and netLoad on a per key basis. + * CM + */ + protected final ConcurrentMap getFutures = new ConcurrentHashMap(); + + /* + * Asif: This boolean needs to be made true if the test needs to receive a + * synchronous callback just after clear on map is done. Its visibility is + * default so that only tests present in com.gemstone.gemfire.internal.cache + * will be able to see it + */ + public static boolean ISSUE_CALLBACKS_TO_CACHE_OBSERVER = false; + + /** + * A flag used to indicate that this Region is being used as an administrative + * Region, holding meta-data for a PartitionedRegion + */ + final private boolean isUsedForPartitionedRegionAdmin; + + final private boolean isUsedForPartitionedRegionBucket; + + final private boolean isUsedForMetaRegion; + + final private boolean isMetaRegionWithTransactions; + + final private boolean isUsedForSerialGatewaySenderQueue; + + final private boolean isUsedForParallelGatewaySenderQueue; + + final private AbstractGatewaySender serialGatewaySender; + + /** + * The factory used to create the LoaderHelper when a loader is invoked + */ + protected final LoaderHelperFactory loaderHelperFactory; + + /** + * Allow for different cacheperfstats locations... primarily for PartitionedRegions + */ + private final CachePerfStats cachePerfStats; + private final boolean hasOwnStats; + + + private final ImageState imageState; + /** + * Register interest count to track if any register interest is in progress for + * this region. This count will be incremented when register interest starts + * and decremented when register interest finishes. + * @guarded.By {@link #imageState} + */ + private int riCnt = 0; /* + * since always written while holding an exclusive write lock + * and only read while holding a read lock + * it does not need to be atomic or + * protected by any other sync. + */ + + + /** + * Map of subregion full paths to serial numbers. These are subregions that + * were destroyed when this region was destroyed. This map remains null until + * this region is destroyed. + */ + private volatile HashMap destroyedSubregionSerialNumbers; + + /** + * This boolean is true when a member who has this region is running low on memory. + * It is used to reject region operations. + */ + public final AtomicBoolean memoryThresholdReached = new AtomicBoolean(false); + + // Lock for updating PR MetaData on client side + public final Lock clientMetaDataLock = new ReentrantLock(); + + + protected HdfsRegionManager hdfsManager; + protected HoplogListenerForRegion hoplogListener; + + /** + * There seem to be cases where a region can be created and yet the + * distributed system is not yet in place... + * + * + */ + protected class Stopper extends CancelCriterion { + + @Override + public String cancelInProgress() { + // --- + // This grossness is necessary because there are instances where the + // region can exist without having a cache (XML creation) + checkFailure(); + Cache c = LocalRegion.this.getCache(); + if (c == null) { + return LocalizedStrings.LocalRegion_THE_CACHE_IS_NOT_AVAILABLE.toLocalizedString(); + } + // --- end of grossness + return c.getCancelCriterion().cancelInProgress(); + } + + /* (non-Javadoc) + * @see com.gemstone.gemfire.CancelCriterion#generateCancelledException(java.lang.Throwable) + */ + @Override + public RuntimeException generateCancelledException(Throwable e) { + // --- + // This grossness is necessary because there are instances where the + // region can exist without having a cache (XML creation) + checkFailure(); + Cache c = LocalRegion.this.getCache(); + if (c == null) { + return new CacheClosedException("No cache", e); + } + // --- end of grossness + return c.getCancelCriterion().generateCancelledException(e); + } + + } + + protected final CancelCriterion stopper = createStopper(); + + protected CancelCriterion createStopper() { + return new Stopper(); + } + + private final TestCallable testCallable; + + /** + * ThreadLocal used to set the current region being initialized. + * + * Currently used by the OpLog layer to initialize the + * {@link KeyWithRegionContext} if required. + */ + private final static ThreadLocal initializingRegion = + new ThreadLocal(); + + /** + * Set to true if the region contains keys implementing + * {@link KeyWithRegionContext} that require setting up of region specific + * context after deserialization or recovery from disk. + */ + private boolean keyRequiresRegionContext; + + /** + * Get the current initializing region as set in the ThreadLocal. + * + * Note that this value is cleared after the initialization of LocalRegion is + * done so is valid only for the duration of region creation and + * initialization. + */ + public static LocalRegion getInitializingRegion() { + return initializingRegion.get(); + } + + /** + * Return true if the keys of this region implement + * {@link KeyWithRegionContext} that require region specific context + * initialization after deserialization or recovery from disk. + * + * Currently used by SQLFabric for the optimized + * CompactCompositeRegionKey that points to the raw row bytes and + * so requires a handle to table schema for interpretation of those bytes. + */ + public final boolean keyRequiresRegionContext() { + return this.keyRequiresRegionContext; + } + + /** + * Set the {@link #keyRequiresRegionContext} flag to given value. + */ + public final void setKeyRequiresRegionContext(boolean v) { + this.keyRequiresRegionContext = v; + } + + public CancelCriterion getCancelCriterion() { + return this.stopper; + } + + ////////////////// Public Methods /////////////////////////////////////////// + + static String calcFullPath(String regionName, LocalRegion parentRegion) { + StringBuilder buf = null; + if (parentRegion == null) { + buf = new StringBuilder(regionName.length() + 1); + } + else { + String parentFull = parentRegion.getFullPath(); + buf = new StringBuilder(parentFull.length() + regionName.length() + 1); + buf.append(parentFull); + } + buf.append(SEPARATOR).append(regionName); + return buf.toString(); + } + + /** + * Creates new region + */ + protected LocalRegion(String regionName, RegionAttributes attrs, + LocalRegion parentRegion, GemFireCacheImpl cache, + InternalRegionArguments internalRegionArgs) throws DiskAccessException { + super(cache, attrs,regionName, internalRegionArgs); + // Initialized here (and defers to parent) to fix GEODE-128 + this.EXPIRY_UNITS_MS = parentRegion != null ? parentRegion.EXPIRY_UNITS_MS : Boolean.getBoolean(EXPIRY_MS_PROPERTY); + + Assert.assertTrue(regionName != null, "regionName must not be null"); + this.sharedDataView = buildDataView(); + this.regionName = regionName; + this.parentRegion = parentRegion; + this.fullPath = calcFullPath(regionName, parentRegion); + + String myName = getFullPath(); + if (internalRegionArgs.getPartitionedRegion() != null) { + myName = internalRegionArgs.getPartitionedRegion().getFullPath(); + } + this.offHeap = attrs.getOffHeap() || Boolean.getBoolean(myName+":OFF_HEAP"); + if (getOffHeap()) { + if (cache.getOffHeapStore() == null) { + throw new IllegalStateException(LocalizedStrings. + LocalRegion_THE_REGION_0_WAS_CONFIGURED_TO_USE_OFF_HEAP_MEMORY_BUT_OFF_HEAP_NOT_CONFIGURED.toLocalizedString(myName)); + } + } + + this.initializationLatchBeforeGetInitialImage = new StoppableCountDownLatch(this.stopper, 1); + this.initializationLatchAfterGetInitialImage = new StoppableCountDownLatch(this.stopper, 1); + this.afterRegionCreateEventLatch = new StoppableCountDownLatch(this.stopper, 1); + + // set the user-attribute object upfront for SQLFabric + if (internalRegionArgs.getUserAttribute() != null) { + setUserAttribute(internalRegionArgs.getUserAttribute()); + } + setKeyRequiresRegionContext(internalRegionArgs.keyRequiresRegionContext()); + initializingRegion.set(this); + + if (internalRegionArgs.getCachePerfStatsHolder() != null) { + this.hasOwnStats = false; + this.cachePerfStats = internalRegionArgs.getCachePerfStatsHolder() + .getCachePerfStats(); + } + else { + if (attrs.getPartitionAttributes() != null || isInternalRegion() + || internalRegionArgs.isUsedForMetaRegion()) { + this.hasOwnStats = false; + this.cachePerfStats = cache.getCachePerfStats(); + } + else { + this.hasOwnStats = true; + this.cachePerfStats = new RegionPerfStats(cache, cache.getCachePerfStats(), regionName); + } + } + + this.hdfsManager = initHDFSManager(); + this.dsi = findDiskStore(attrs, internalRegionArgs); + this.diskRegion = createDiskRegion(internalRegionArgs); + this.entries = createRegionMap(internalRegionArgs); + this.entriesInitialized = true; + this.subregions = new ConcurrentHashMap(); + // we only need a destroy lock if this is a root + if (parentRegion == null) { + initRoot(); + } + if (internalRegionArgs.getLoaderHelperFactory() != null) { + this.loaderHelperFactory = internalRegionArgs.getLoaderHelperFactory(); + } + else { + this.loaderHelperFactory = this; + } + + this.isUsedForPartitionedRegionAdmin = internalRegionArgs + .isUsedForPartitionedRegionAdmin(); + this.isUsedForPartitionedRegionBucket = internalRegionArgs + .isUsedForPartitionedRegionBucket(); + this.isUsedForMetaRegion = internalRegionArgs + .isUsedForMetaRegion(); + this.isMetaRegionWithTransactions = internalRegionArgs.isMetaRegionWithTransactions(); + this.isUsedForSerialGatewaySenderQueue = internalRegionArgs.isUsedForSerialGatewaySenderQueue(); + this.isUsedForParallelGatewaySenderQueue = internalRegionArgs.isUsedForParallelGatewaySenderQueue(); + this.serialGatewaySender = internalRegionArgs.getSerialGatewaySender(); + + if (!isUsedForMetaRegion && !isUsedForPartitionedRegionAdmin + && !isUsedForPartitionedRegionBucket + && !isUsedForSerialGatewaySenderQueue + && !isUsedForParallelGatewaySenderQueue) { + this.filterProfile = new FilterProfile(this); + } + + // initialize client to server proxy + this.srp = (this.getPoolName() != null) + ? new ServerRegionProxy(this) + : null; + this.imageState = + new UnsharedImageState(this.srp != null, + getDataPolicy().withReplication() || getDataPolicy().isPreloaded(), + getAttributes().getDataPolicy().withPersistence(), + this.stopper); + + createEventTracker(); + + // prevent internal regions from participating in a TX, bug 38709 + this.supportsTX = !isSecret() && !isUsedForPartitionedRegionAdmin() + && !isUsedForMetaRegion() || isMetaRegionWithTransactions(); + + this.testCallable = internalRegionArgs.getTestCallable(); + + } + + private HdfsRegionManager initHDFSManager() { + HdfsRegionManager hdfsMgr = null; + if (this.getHDFSStoreName() != null) { + this.hoplogListener = new HoplogListenerForRegion(); + HDFSRegionDirector.getInstance().setCache(cache); + hdfsMgr = HDFSRegionDirector.getInstance().manageRegion(this, + this.getHDFSStoreName(), hoplogListener); + } + return hdfsMgr; + } + + private RegionMap createRegionMap(InternalRegionArguments internalRegionArgs) { + RegionMap result = null; + if ((internalRegionArgs.isReadWriteHDFSRegion()) && this.diskRegion != null) { + this.diskRegion.setEntriesMapIncompatible(true); + } + if (this.diskRegion != null) { + result = this.diskRegion.useExistingRegionMap(this); + } + if (result == null) { + RegionMap.Attributes ma = new RegionMap.Attributes(); + ma.statisticsEnabled = this.statisticsEnabled; + ma.loadFactor = this.loadFactor; + ma.initialCapacity = this.initialCapacity; + ma.concurrencyLevel = this.concurrencyLevel; + result = RegionMapFactory.createVM(this, ma, internalRegionArgs); + } + return result; + } + + protected InternalDataView buildDataView() { + return new LocalRegionDataView(); + } + + /** + * initialize the event tracker. Not all region implementations want or + * need one of these. Regions that require one should reimplement this method + * and create one like so: + *
+   *     this.eventTracker = new EventTracker(this.cache);
+   *     this.eventTracker.start();
+   * 
+ */ + void createEventTracker() { + // if LocalRegion is changed to have an event tracker, then the initialize() + // method should be changed to set it to "initialized" state when the + // region finishes initialization + } + + + /** + * Test method for getting the event tracker. + * + * this method is for testing only. Other region classes may track events using + * different mechanisms than EventTrackers + */ + protected EventTracker getEventTracker() { + return this.eventTracker; + } + + /** returns the regions version-vector */ + public RegionVersionVector getVersionVector() { + return this.versionVector; + } + + /** returns object used to guard the size() operation during tombstone removal */ + public Object getSizeGuard() { + if (!this.concurrencyChecksEnabled) { + return new Object(); + } else { + return this.fullPath; // avoids creating another sync object - could be anything unique to this region + } + } + + /** initializes a new version vector for this region */ + protected void createVersionVector() { + + this.versionVector = RegionVersionVector.create(getVersionMember(), this); + + if (dataPolicy.withPersistence()) { + //copy the versions that we have recovered from disk into + //the version vector. + RegionVersionVector diskVector = this.diskRegion.getRegionVersionVector(); + this.versionVector.recordVersions(diskVector.getCloneForTransmission()); + } else if (!dataPolicy.withStorage()) { + // version vectors are currently only necessary in empty regions for + // tracking canonical member IDs + this.versionVector.turnOffRecordingForEmptyRegion(); + } + if (this.srp != null) { + this.versionVector.setIsClientVector(); + } + this.cache.getDistributionManager().addMembershipListener(this.versionVector); + } + + @Override + protected void updateEntryExpiryPossible() + { + super.updateEntryExpiryPossible(); + if (!isEntryExpiryPossible()) { + // since expiration is no longer possible cleanup the tasks + cancelAllEntryExpiryTasks(); + } + } + + public IndexUpdater getIndexUpdater() { + return this.entries.getIndexUpdater(); + } + + boolean isCacheClosing() + { + return this.cache.isClosed(); + } + + public RegionEntry getRegionEntry(Object key) { + return this.entries.getEntry(key); + } + + /** + * Test hook - returns the version stamp for an entry in the form of a + * version tag + * @param key + * @return the entry version information + */ + public VersionTag getVersionTag(Object key) { + Region.Entry entry = getEntry(key, true); + VersionTag tag = null; + if (entry != null && entry instanceof EntrySnapshot) { + tag = ((EntrySnapshot)entry).getVersionTag(); + } else if (entry != null && entry instanceof NonTXEntry) { + tag = ((NonTXEntry)entry).getRegionEntry().getVersionStamp().asVersionTag(); + } + return tag; + } + + /** removes any destroyed entries from the region and clear the destroyedKeys + * assert: Caller must be holding writeLock on is + */ + private void destroyEntriesAndClearDestroyedKeysSet() { + ImageState is = getImageState(); + Iterator iter = is.getDestroyedEntries(); + while (iter.hasNext()) { + Object key = iter.next(); + // destroy the entry which has value Token.DESTROYED + // If it is Token.DESTROYED then only destroy it. + this.entries.removeIfDestroyed(key); // fixes bug 41957 + } + } + + /** + * @since 5.7 + */ + protected final ServerRegionProxy srp; + + private final InternalDataView sharedDataView; + + public final ServerRegionProxy getServerProxy() { + return this.srp; + } + + public final boolean hasServerProxy() { + return this.srp != null; + } + + /** Returns true if the ExpiryTask is currently allowed to expire. */ + protected boolean isExpirationAllowed(ExpiryTask expiry) + { + return true; + } + + void performExpiryTimeout(ExpiryTask p_task) throws CacheException + { + if (p_task != null) { + p_task.basicPerformTimeout(false); + } + } + + private void initRoot() + { + this.destroyLock = new Semaphore(1); + } + + public void handleMarker() { + + RegionEventImpl event = new RegionEventImpl(this, + Operation.MARKER, null, false, getMyId(), + false /* generate EventID */); + + dispatchListenerEvent(EnumListenerEvent.AFTER_REGION_LIVE, event); + } + + public AttributesMutator getAttributesMutator() + { + checkReadiness(); + return this; + } + + public Region createSubregion(String subregionName, + RegionAttributes regionAttributes) throws RegionExistsException, + TimeoutException + { + try { + return createSubregion(subregionName, regionAttributes, + new InternalRegionArguments().setDestroyLockFlag(true) + .setRecreateFlag(false)); + } + catch (IOException e) { + // only happens when loading a snapshot, not here + InternalGemFireError assErr = new InternalGemFireError(LocalizedStrings.LocalRegion_UNEXPECTED_EXCEPTION.toLocalizedString()); + assErr.initCause(e); + throw assErr; + + } + catch (ClassNotFoundException e) { + // only happens when loading a snapshot, not here + InternalGemFireError assErr = new InternalGemFireError(LocalizedStrings.LocalRegion_UNEXPECTED_EXCEPTION.toLocalizedString()); + assErr.initCause(e); + throw assErr; + + } + } + + /** + * Returns the member id of my distributed system + * + * @since 5.0 + */ + @Override + protected InternalDistributedMember getMyId() + { + return this.cache.getMyId(); + } + + public VersionSource getVersionMember() + { + if(dataPolicy.withPersistence()) { + return getDiskStore().getDiskStoreID(); + } else { + return this.cache.getMyId(); + } + } + + public Region createSubregion(String subregionName, + RegionAttributes attrs, + InternalRegionArguments internalRegionArgs) throws RegionExistsException, + TimeoutException, IOException, ClassNotFoundException + { + checkReadiness(); + LocalRegion newRegion = null; + RegionAttributes regionAttributes = attrs; + attrs = cache.invokeRegionBefore(this, subregionName, attrs, internalRegionArgs); + final InputStream snapshotInputStream = internalRegionArgs + .getSnapshotInputStream(); + final boolean getDestroyLock = internalRegionArgs.getDestroyLockFlag(); + final InternalDistributedMember imageTarget = internalRegionArgs + .getImageTarget(); + try { + if (getDestroyLock) + acquireDestroyLock(); + LocalRegion existing = null; + try { + if (isDestroyed()) { + if (this.reinitialized_old) { + throw new RegionReinitializedException(toString(), getFullPath()); + } + throw new RegionDestroyedException(toString(), getFullPath()); + } + validateRegionName(subregionName); + + validateSubregionAttributes(regionAttributes); + String regionPath = calcFullPath(subregionName, this); + + // lock down the subregionsLock + // to prevent other threads from adding a region to it in toRegion + // but don't wait on initialization while synchronized (distributed + // deadlock) + synchronized (this.subregionsLock) { + + existing = (LocalRegion)this.subregions.get(subregionName); + + if (existing == null) { + // create the async queue for HDFS if required. + HDFSIntegrationUtil.createAndAddAsyncQueue(regionPath, + regionAttributes, this.cache); + regionAttributes = cache.setEvictionAttributesForLargeRegion( + regionAttributes); + if (regionAttributes.getScope().isDistributed() + && internalRegionArgs.isUsedForPartitionedRegionBucket()) { + final PartitionedRegion pr = internalRegionArgs + .getPartitionedRegion(); + internalRegionArgs.setIndexUpdater(pr.getIndexUpdater()); + internalRegionArgs.setUserAttribute(pr.getUserAttribute()); + internalRegionArgs.setKeyRequiresRegionContext(pr + .keyRequiresRegionContext()); + if (pr.isShadowPR()) { + if (!pr.isShadowPRForHDFS()) { + newRegion = new BucketRegionQueue(subregionName, regionAttributes, + this, this.cache, internalRegionArgs); + } + else { + newRegion = new HDFSBucketRegionQueue(subregionName, regionAttributes, + this, this.cache, internalRegionArgs); + } + + } else { + newRegion = new BucketRegion(subregionName, regionAttributes, + this, this.cache, internalRegionArgs); + } + } + else if (regionAttributes.getPartitionAttributes() != null) { + newRegion = new PartitionedRegion(subregionName, + regionAttributes, this, this.cache, internalRegionArgs); + } + else { + boolean local = regionAttributes.getScope().isLocal(); + newRegion = local ? new LocalRegion(subregionName, + regionAttributes, this, this.cache, internalRegionArgs) + : new DistributedRegion(subregionName, regionAttributes, + this, this.cache, internalRegionArgs); + } + Object o = this.subregions.putIfAbsent(subregionName, newRegion); + + Assert.assertTrue(o == null); + + Assert.assertTrue(!newRegion.isInitialized()); + + // + if (logger.isDebugEnabled()) { + logger.debug("Subregion created: {}", newRegion.getFullPath()); + } + if (snapshotInputStream != null || imageTarget != null + || internalRegionArgs.getRecreateFlag()) { + this.cache.regionReinitialized(newRegion); // fix for bug 33534 + } + + } // endif: existing == null + } // end synchronization + } + finally { + if (getDestroyLock) + releaseDestroyLock(); + } + + //Fix for bug 42127 - moved to outside of the destroy lock. + if (existing != null) { + // now outside of synchronization we must wait for appropriate + // initialization on existing region before returning a reference to + // it + existing.waitOnInitialization(); + // fix for bug 32570 + throw new RegionExistsException(existing); + } + + + boolean success = false; + try { + newRegion.checkReadiness(); + this.cache.setRegionByPath(newRegion.getFullPath(), newRegion); + if (regionAttributes instanceof UserSpecifiedRegionAttributes){ + internalRegionArgs.setIndexes(( + (UserSpecifiedRegionAttributes)regionAttributes).getIndexes()); + } + newRegion.initialize(snapshotInputStream, imageTarget, internalRegionArgs); // releases initialization Latches + //register the region with resource manager to get memory events + if(!newRegion.isInternalRegion()){ + if (!newRegion.isDestroyed) { + cache.getResourceManager().addResourceListener(ResourceType.MEMORY, newRegion); + + if (!newRegion.getOffHeap()) { + newRegion.initialCriticalMembers(cache.getResourceManager().getHeapMonitor().getState().isCritical(), cache + .getResourceAdvisor().adviseCritialMembers()); + } else { + newRegion.initialCriticalMembers(cache.getResourceManager().getHeapMonitor().getState().isCritical() + || cache.getResourceManager().getOffHeapMonitor().getState().isCritical(), cache.getResourceAdvisor() + .adviseCritialMembers()); + } + + // synchronization would be done on ManagementAdapter.regionOpLock + // instead of destroyLock in LocalRegion? ManagementAdapter is one + // of the Resource Event listeners + + InternalDistributedSystem system = this.cache + .getDistributedSystem(); + system.handleResourceEvent(ResourceEvent.REGION_CREATE, newRegion); + } + } + success = true; + } catch (CancelException | RegionDestroyedException | RedundancyAlreadyMetException e) { + // don't print a call stack + throw e; + } catch (final RuntimeException validationException) { + logger.warn(LocalizedMessage.create(LocalizedStrings.LocalRegion_INITIALIZATION_FAILED_FOR_REGION_0, + getFullPath()), validationException); + throw validationException; + } + finally { + if (!success) { + this.cache.setRegionByPath(newRegion.getFullPath(), null); + initializationFailed(newRegion); + cache.getResourceManager(false).removeResourceListener(newRegion); + } + } + + newRegion.postCreateRegion(); + } + finally { + // make sure region initialization latch is open regardless + // before returning; + // if the latch is not open at this point, then an exception must + // have occurred + if (newRegion != null && !newRegion.isInitialized()) { + if (logger.isDebugEnabled()) { + logger.debug("Region initialize latch is closed, Error must have occurred"); + } + } + } + + cache.invokeRegionAfter(newRegion); + return newRegion; + } + + public final void create(Object key, Object value, Object aCallbackArgument) + throws TimeoutException, EntryExistsException, CacheWriterException { + long startPut = CachePerfStats.getStatTime(); + EntryEventImpl event = newCreateEntryEvent(key, value, aCallbackArgument); + validatedCreate(event, startPut); + // TODO OFFHEAP: validatedCreate calls freeOffHeapResources + } + + public final void validatedCreate(EntryEventImpl event, long startPut) + throws TimeoutException, EntryExistsException, CacheWriterException { + + try { + if (event.getEventId() == null && generateEventID()) { + event.setNewEventId(cache.getDistributedSystem()); + } + assert event.isFetchFromHDFS() : "validatedPut() should have been called"; + // Fix for 42448 - Only make create with null a local invalidate for + // normal regions. Otherwise, it will become a distributed invalidate. + if (getDataPolicy() == DataPolicy.NORMAL) { + event.setLocalInvalid(true); + } + discoverJTA(); + if (!basicPut(event, true, // ifNew + false, // ifOld + null, // expectedOldValue + true // requireOldValue TODO txMerge why is oldValue required for + // create? I think so that the EntryExistsException will have it. + )) { + throw new EntryExistsException(event.getKey().toString(), + event.getOldValue()); + } else { + if (!getDataView().isDeferredStats()) { + getCachePerfStats().endPut(startPut, false); + } + } + } finally { + + event.release(); + + } + } + + // split into a separate newCreateEntryEvent since SQLFabric may need to + // manipulate event before doing the put (e.g. posDup flag) + public final EntryEventImpl newCreateEntryEvent(Object key, Object value, + Object aCallbackArgument) { + + validateArguments(key, value, aCallbackArgument); + checkReadiness(); + checkForLimitedOrNoAccess(); + + return EntryEventImpl.create(this, Operation.CREATE, key, + value, aCallbackArgument, false, getMyId()) + /* to distinguish genuine create */.setCreate(true); + } + + /** + * The default Region implementation will generate EvenTID in the EntryEvent + * object. This method is overridden in special Region objects like HARegion + * or SingleWriteSingleReadRegionQueue.SingleReadWriteMetaRegion to return + * false as the event propagation from those regions do not need EventID + * objects + * + *

author Asif + * @return boolean indicating whether to generate eventID or not + */ + @Override + public boolean generateEventID() + { + return !(isUsedForPartitionedRegionAdmin() + || isUsedForPartitionedRegionBucket() ); + } + + public final Object destroy(Object key, Object aCallbackArgument) + throws TimeoutException, EntryNotFoundException, CacheWriterException { + EntryEventImpl event = newDestroyEntryEvent(key, aCallbackArgument); + return validatedDestroy(key, event); + // TODO OFFHEAP: validatedDestroy calls freeOffHeapResources + } + + /** + * Destroys entry without performing validations. Call this after validating + * key, callback arg, and runtime state. + */ + public Object validatedDestroy(Object key, EntryEventImpl event) + throws TimeoutException, EntryNotFoundException, CacheWriterException + { + try { + if (event.getEventId() == null && generateEventID()) { + event.setNewEventId(cache.getDistributedSystem()); + } + basicDestroy(event, true, // cacheWrite + null); // expectedOldValue + if (event.isOldValueOffHeap()) { + return null; + } else { + return handleNotAvailable(event.getOldValue()); + } + } finally { + event.release(); + } + } + + // split into a separate newDestroyEntryEvent since SQLFabric may need to + // manipulate event before doing the put (e.g. posDup flag) + public final EntryEventImpl newDestroyEntryEvent(Object key, + Object aCallbackArgument) { + validateKey(key); + validateCallbackArg(aCallbackArgument); + checkReadiness(); + checkForLimitedOrNoAccess(); + + return EntryEventImpl.create(this, Operation.DESTROY, key, + null/* newValue */, aCallbackArgument, false, getMyId()); + } + + public void destroyRegion(Object aCallbackArgument) + throws CacheWriterException, TimeoutException + { + getDataView().checkSupportsRegionDestroy(); + checkForLimitedOrNoAccess(); + + RegionEventImpl event = new RegionEventImpl(this, Operation.REGION_DESTROY, + aCallbackArgument, false, getMyId(), generateEventID()); + basicDestroyRegion(event, true); + } + + public InternalDataView getDataView() { + final TXStateInterface tx = getTXState(); + if (tx == null) { + return this.sharedDataView; + } + return tx; + } + + /** + * Fetch the de-serialized value from non-transactional state. + * @param keyInfo to which the value is associated + * @param updateStats true if the entry stats should be updated. + * @param disableCopyOnRead if true then disable copy on read + * @param preferCD true if the preferred result form is CachedDeserializable + * @param clientEvent client's event, if any (for version tag retrieval) + * @param returnTombstones whether destroyed entries should be returned + * @param retainResult if true then the result may be a retained off-heap reference + * @return the value for the given key + */ + public final Object getDeserializedValue(RegionEntry re, final KeyInfo keyInfo, final boolean updateStats, boolean disableCopyOnRead, + boolean preferCD, EntryEventImpl clientEvent, boolean returnTombstones, boolean allowReadFromHDFS, boolean retainResult) { + if (this.diskRegion != null) { + this.diskRegion.setClearCountReference(); + } + try { + if (re == null) { + if (allowReadFromHDFS) { + re = this.entries.getEntry(keyInfo.getKey()); + } else { + re = this.entries.getOperationalEntryInVM(keyInfo.getKey()); + } + } + //skip updating the stats if the value is null + // TODO - We need to clean up the callers of the this class so that we can + // update the statistics here, where it would make more sense. + if (re == null) { + return null; + } + final Object value; + if (clientEvent != null && re.getVersionStamp() != null) { + // defer the lruUpdateCallback to prevent a deadlock (see bug 51121). + final boolean disabled = this.entries.disableLruUpdateCallback(); + try { + synchronized(re) { // bug #51059 value & version must be obtained atomically + clientEvent.setVersionTag(re.getVersionStamp().asVersionTag()); + value = getDeserialized(re, updateStats, disableCopyOnRead, preferCD, retainResult); + } + } finally { + if (disabled) { + this.entries.enableLruUpdateCallback(); + } + try { + this.entries.lruUpdateCallback(); + }catch( DiskAccessException dae) { + this.handleDiskAccessException(dae); + throw dae; + } + } + } else { + value = getDeserialized(re, updateStats, disableCopyOnRead, preferCD, retainResult); + } + if (logger.isTraceEnabled() && !(this instanceof HARegion)) { + logger.trace("getDeserializedValue for {} returning version: {} returnTombstones: {} value: {}", + keyInfo.getKey(), (re.getVersionStamp()==null? "null" : re.getVersionStamp().asVersionTag()), returnTombstones, value); + } + return value; + } + finally { + if (this.diskRegion != null) { + this.diskRegion.removeClearCountReference(); + } + } + } + + /** + * + * @param re + * @param updateStats + * @param disableCopyOnRead if true then do not make a copy on read + * @param preferCD true if the preferred result form is CachedDeserializable + * @param retainResult if true then the result may be a retained off-heap reference + * @return the value found, which can be + *

    + *
  • null if the value was removed from the region entry + *
  • Token.INVALID if the value of the region entry is invalid + *
  • Token.LOCAL_INVALID if the value of the region entry is local invalid + *
+ */ + @Retained + protected final Object getDeserialized(RegionEntry re, boolean updateStats, boolean disableCopyOnRead, boolean preferCD, boolean retainResult) { + assert !retainResult || preferCD; + try { + @Retained Object v = null; + try { + if (retainResult) { + v = re.getValueRetain(this); + } else { + v = re.getValue(this); + } + } catch(DiskAccessException dae) { + this.handleDiskAccessException(dae); + throw dae; + } + + //skip updating the stats if the value is null + if (v == null) { + return null; + } + if (v instanceof CachedDeserializable) { + if (!preferCD) { + if (isCopyOnRead()) { + if (disableCopyOnRead) { + v = ((CachedDeserializable)v).getDeserializedForReading(); + } else { + v = ((CachedDeserializable)v).getDeserializedWritableCopy(this, re); + } + } else { + v = ((CachedDeserializable)v).getDeserializedValue(this, re); + } + } + } + else if (!disableCopyOnRead) { + v = conditionalCopy(v); + } + + if (updateStats) { + updateStatsForGet(re, v != null && !Token.isInvalid(v)); + } + return v; + } catch(IllegalArgumentException i) { + IllegalArgumentException iae = new IllegalArgumentException(LocalizedStrings.DONT_RELEASE.toLocalizedString("Error while deserializing value for key="+re.getKey())); + iae.initCause(i); + throw iae; + } + } + + @Override + public Object get(Object key, Object aCallbackArgument, + boolean generateCallbacks, EntryEventImpl clientEvent) throws TimeoutException, CacheLoaderException + { + Object result = get(key, aCallbackArgument, generateCallbacks, false, false, null, clientEvent, false, true/*allowReadFromHDFS*/); + if (Token.isInvalid(result)) { + result = null; + } + return result; + } + + /* + * @see BucketRegion#getSerialized(KeyInfo, boolean, boolean) + */ + public Object get(Object key, Object aCallbackArgument, + boolean generateCallbacks, boolean disableCopyOnRead, boolean preferCD, + ClientProxyMembershipID requestingClient, EntryEventImpl clientEvent, boolean returnTombstones, boolean allowReadFromHDFS) throws TimeoutException, CacheLoaderException { + return get(key, aCallbackArgument, + generateCallbacks, disableCopyOnRead, preferCD,requestingClient, clientEvent, returnTombstones, false, allowReadFromHDFS, false); + } + + /** + * The result of this operation may be an off-heap reference that the caller must release + */ + @Retained + public Object getRetained(Object key, Object aCallbackArgument, + boolean generateCallbacks, boolean disableCopyOnRead, + ClientProxyMembershipID requestingClient, EntryEventImpl clientEvent, boolean returnTombstones) throws TimeoutException, CacheLoaderException { + return getRetained(key, aCallbackArgument, + generateCallbacks, disableCopyOnRead, requestingClient, clientEvent, returnTombstones, false); + } + + /** + * The result of this operation may be an off-heap reference that the caller must release. + * @param opScopeIsLocal if true then just check local storage for a value; if false then try to find the value if it is not local + */ + @Retained + public Object getRetained(Object key, Object aCallbackArgument, + boolean generateCallbacks, boolean disableCopyOnRead, + ClientProxyMembershipID requestingClient, EntryEventImpl clientEvent, boolean returnTombstones, boolean opScopeIsLocal) throws TimeoutException, CacheLoaderException { + return get(key, aCallbackArgument, generateCallbacks, disableCopyOnRead, true, requestingClient, clientEvent, returnTombstones, opScopeIsLocal, true, false); + } + /** + * @param opScopeIsLocal if true then just check local storage for a value; if false then try to find the value if it is not local + * @param retainResult if true then the result may be a retained off-heap reference. + */ + public Object get(Object key, Object aCallbackArgument, + boolean generateCallbacks, boolean disableCopyOnRead, boolean preferCD, + ClientProxyMembershipID requestingClient, EntryEventImpl clientEvent, boolean returnTombstones, + boolean opScopeIsLocal, boolean allowReadFromHDFS, boolean retainResult) throws TimeoutException, CacheLoaderException + { + assert !retainResult || preferCD; + validateKey(key); + validateCallbackArg(aCallbackArgument); + checkReadiness(); + checkForNoAccess(); + discoverJTA(); + CachePerfStats stats = getCachePerfStats(); + long start = stats.startGet(); + boolean isMiss = true; + try { + KeyInfo keyInfo = getKeyInfo(key, aCallbackArgument); + Object value = getDataView().getDeserializedValue(keyInfo, this, true, disableCopyOnRead, preferCD, clientEvent, returnTombstones, allowReadFromHDFS, retainResult); + final boolean isCreate = value == null; + isMiss = value == null || Token.isInvalid(value) + || (!returnTombstones && value == Token.TOMBSTONE); + // Note: if the value was Token.DESTROYED then getDeserialized + // returns null so we don't need the following in the above expression: + // || (isRegInterestInProgress() && Token.isDestroyed(value)) + // because (value == null) will be true in this case. + if (isMiss) { + // to fix bug 51509 raise the precedence of opScopeIsLocal + // if scope is local and there is no loader, then + // don't go further to try and get value + if (!opScopeIsLocal + && ((getScope().isDistributed() && !isHDFSRegion()) + || hasServerProxy() + || basicGetLoader() != null)) { + // serialize search/load threads if not in txn + // TODO OFFHEAP OPTIMIZE: findObject can be enhanced to use the retainResult flag + value = getDataView().findObject(keyInfo, + this, isCreate, generateCallbacks, value, disableCopyOnRead, + preferCD, requestingClient, clientEvent, returnTombstones, false/*allowReadFromHDFS*/); + if (!returnTombstones && value == Token.TOMBSTONE) { + value = null; + } + } + else { // local scope with no loader, still might need to update stats + if (isCreate) { + recordMiss(null, key); + } + value = null; + } + } + return value; + } + finally { + stats.endGet(start, isMiss); + } + } + + /** + * Update region and potentially entry stats for the miss case + * @param re optional region entry, fetched if null + * @param key the key used to fetch the region entry + */ + final public void recordMiss(final RegionEntry re, Object key) { + final RegionEntry e; + if (re == null && !isTX() && !isHDFSRegion()) { + e = basicGetEntry(key); + } else { + e = re; + } + updateStatsForGet(e, false); + } + + /** + * @return true if this region has been configured for HDFS persistence + */ + public boolean isHDFSRegion() { + return false; + } + + /** + * @return true if this region is configured to read and write data from HDFS + */ + public boolean isHDFSReadWriteRegion() { + return false; + } + + /** + * @return true if this region is configured to only write to HDFS + */ + protected boolean isHDFSWriteOnly() { + return false; + } + + /** + * FOR TESTING ONLY + */ + public HoplogListenerForRegion getHoplogListener() { + return hoplogListener; + } + + /** + * FOR TESTING ONLY + */ + public HdfsRegionManager getHdfsRegionManager() { + return hdfsManager; + } + + /** + * optimized to only allow one thread to do a search/load, other threads wait + * on a future + * + * @param keyInfo + * @param p_isCreate + * true if call found no entry; false if updating an existing + * entry + * @param generateCallbacks + * @param p_localValue + * the value retrieved from the region for this object. + * @param disableCopyOnRead if true then do not make a copy + * @param preferCD true if the preferred result form is CachedDeserializable + * @param clientEvent the client event, if any + * @param returnTombstones whether to return tombstones + */ + @Retained + Object nonTxnFindObject(KeyInfo keyInfo, boolean p_isCreate, + boolean generateCallbacks, Object p_localValue, boolean disableCopyOnRead, boolean preferCD, + ClientProxyMembershipID requestingClient, EntryEventImpl clientEvent, boolean returnTombstones, boolean allowReadFromHDFS) + throws TimeoutException, CacheLoaderException + { + final Object key = keyInfo.getKey(); + + Object localValue = p_localValue; + boolean isCreate = p_isCreate; + Object[] valueAndVersion = null; + @Retained Object result = null; + FutureResult thisFuture = new FutureResult(this.stopper); + Future otherFuture = (Future)this.getFutures.putIfAbsent(keyInfo.getKey(), thisFuture); + // only one thread can get their future into the map for this key at a time + if (otherFuture != null) { + try { + valueAndVersion = (Object[])otherFuture.get(); + if (valueAndVersion != null) { + result = valueAndVersion[0]; + if (clientEvent != null) { + clientEvent.setVersionTag((VersionTag)valueAndVersion[1]); + } + if (!preferCD && result instanceof CachedDeserializable) { + CachedDeserializable cd = (CachedDeserializable)result; + // fix for bug 43023 + if (!disableCopyOnRead && isCopyOnRead()) { + result = cd.getDeserializedWritableCopy(null, null); + } else { + result = cd.getDeserializedForReading(); + } + + } else if (!disableCopyOnRead) { + result = conditionalCopy(result); + } + //For sqlf since the deserialized value is nothing but chunk + // before returning the found value increase its use count + if(GemFireCacheImpl.sqlfSystem() && result instanceof Chunk) { + if(!((Chunk)result).retain()) { + return null; + } + } + // what was a miss is now a hit + RegionEntry re = null; + if (isCreate) { + re = basicGetEntry(keyInfo.getKey()); + updateStatsForGet(re, true); + } + return result; + } + // if value == null, try our own search/load + } + catch (InterruptedException e) { + Thread.currentThread().interrupt(); + // TODO check a CancelCriterion here? + return null; + } + catch (ExecutionException e) { + // unexpected since there is no background thread + InternalGemFireError err = new InternalGemFireError(LocalizedStrings.LocalRegion_UNEXPECTED_EXCEPTION.toLocalizedString()); + err.initCause(err); + throw err; + } + } + // didn't find a future, do one more probe for the entry to catch a race + // condition where the future was just removed by another thread + try { + boolean partitioned = this.getDataPolicy().withPartitioning(); + if (!partitioned) { + localValue = getDeserializedValue(null, keyInfo, isCreate, disableCopyOnRead, preferCD, clientEvent, false, false/*allowReadFromHDFS*/, false); + + // stats have now been updated + if (localValue != null && !Token.isInvalid(localValue)) { + result = localValue; + return result; + } + isCreate = localValue == null; + result = findObjectInSystem(keyInfo, isCreate, null, generateCallbacks, + localValue, disableCopyOnRead, preferCD, requestingClient, clientEvent, returnTombstones, false/*allowReadFromHDFS*/); + + } else { + + // This code was moved from PartitionedRegion.nonTxnFindObject(). That method has been removed. + // For PRs we don't want to deserialize the value and we can't use findObjectInSystem because + // it can invoke code that is transactional. + result = getSharedDataView().findObject(keyInfo, this, true/*isCreate*/, generateCallbacks, + localValue, disableCopyOnRead, preferCD, null, null, false, allowReadFromHDFS); + // TODO why are we not passing the client event or returnTombstones in the above invokation? + } + + if (result == null && localValue != null) { + if (localValue != Token.TOMBSTONE || returnTombstones) { + result = localValue; + } + } + // findObjectInSystem does not call conditionalCopy + } + finally { + if (result != null) { + VersionTag tag = (clientEvent==null)? null : clientEvent.getVersionTag(); + thisFuture.set(new Object[]{result, tag}); + } else { + thisFuture.set(null); + } + this.getFutures.remove(keyInfo.getKey()); + } + if (!disableCopyOnRead) { + result = conditionalCopy(result); + } + return result; + } + + /** + * Returns true if get should give a copy; false if a reference. + * + * @since 4.0 + */ + protected boolean isCopyOnRead() + { + return this.compressor == null + && this.cache.isCopyOnRead() + && ! this.isUsedForPartitionedRegionAdmin + && ! this.isUsedForMetaRegion + && ! getOffHeap() + && ! isSecret(); + } + + /** + * Makes a copy, if copy-on-get is enabled, of the specified object. + * + * @since 4.0 + */ + protected Object conditionalCopy(Object o) + { + if (isCopyOnRead() && !Token.isInvalid(o)) { + return CopyHelper.copy(o); + } + else { + return o; + } + } + + private final String fullPath; + + public String getFullPath() + { + return this.fullPath; + } + + // public String getFullPath() { + // // work way up to root region, prepending + // // the region names to a buffer + // StringBuffer buf = new StringBuffer(SEPARATOR); + // Assert.assertTrue(this.regionName != null); + // buf.append(this.regionName); + // LocalRegion r = this; + // while ((r = r.parentRegion) != null) { + // buf.insert(0, r.regionName); + // buf.insert(0, SEPARATOR_CHAR); + // } + // return buf.toString(); + // } + + public Region getParentRegion() + { + //checkReadiness(); + return this.parentRegion; + } + + public Region getSubregion(String path) + { + checkReadiness(); + return getSubregion(path, false); + } + + public void invalidateRegion(Object aCallbackArgument) + throws TimeoutException + { + getDataView().checkSupportsRegionInvalidate(); + validateCallbackArg(aCallbackArgument); + checkReadiness(); + checkForLimitedOrNoAccess(); + RegionEventImpl event = new RegionEventImpl(this, Operation.REGION_INVALIDATE, + aCallbackArgument, false, getMyId(), generateEventID()); + + basicInvalidateRegion(event); + } + + public Object put(Object key, Object value, Object aCallbackArgument) + throws TimeoutException, CacheWriterException { + long startPut = CachePerfStats.getStatTime(); + EntryEventImpl event = newUpdateEntryEvent(key, value, aCallbackArgument); + //Since Sqlfire directly calls validatedPut, the freeing is done in + // validatedPut + return validatedPut(event, startPut); + // TODO OFFHEAP: validatedPut calls freeOffHeapResources + + } + + public final Object validatedPut(EntryEventImpl event, long startPut) + throws TimeoutException, CacheWriterException { + + try { + if (event.getEventId() == null && generateEventID()) { + event.setNewEventId(cache.getDistributedSystem()); + } + Object oldValue = null; + // Sqlf changes begin + // see #40294. + + // Rahul: this has to be an update. + // so executing it as an update. + boolean forceUpdateForDelta = event.hasDelta(); + // Sqlf Changes end. + if (basicPut(event, false, // ifNew + forceUpdateForDelta, // ifOld + null, // expectedOldValue + false // requireOldValue + )) { + if (!event.isOldValueOffHeap()) { + // don't copy it to heap just to return from put. + // TODO: come up with a better way to do this. + oldValue = event.getOldValue(); + } + if (!getDataView().isDeferredStats()) { + getCachePerfStats().endPut(startPut, false); + } + } + return handleNotAvailable(oldValue); + } finally { + event.release(); + } + } + + // split into a separate newUpdateEntryEvent since SQLFabric may need to + // manipulate event before doing the put (e.g. posDup flag) + public final EntryEventImpl newUpdateEntryEvent(Object key, Object value, + Object aCallbackArgument) { + + validateArguments(key, value, aCallbackArgument); + if (value == null) { + throw new NullPointerException(LocalizedStrings + .LocalRegion_VALUE_MUST_NOT_BE_NULL.toLocalizedString()); + } + checkReadiness(); + checkForLimitedOrNoAccess(); + discoverJTA(); + + // This used to call the constructor which took the old value. It + // was modified to call the other EntryEventImpl constructor so that + // an id will be generated by default. Null was passed in anyway. + // generate EventID + final EntryEventImpl event = EntryEventImpl.create( + this, Operation.UPDATE, key, + value, aCallbackArgument, false, getMyId()); + boolean eventReturned = false; + try { + extractDeltaIntoEvent(value, event); + eventReturned = true; + return event; + } finally { + if (!eventReturned) event.release(); + } + } + /** + * Creates an EntryEventImpl that is optimized to not fetch data from HDFS. + * This is meant to be used by PUT dml from GemFireXD. + */ + public final EntryEventImpl newPutEntryEvent(Object key, Object value, + Object aCallbackArgument) { + EntryEventImpl ev = newUpdateEntryEvent(key, value, aCallbackArgument); + ev.setFetchFromHDFS(false); + ev.setPutDML(true); + return ev; + } + private void extractDeltaIntoEvent(Object value, EntryEventImpl event) { + // 1. Check for DS-level delta property. + // 2. Default value for operation type is UPDATE, so no need to check that here. + // 3. Check if it has server region proxy. + // We do not have a handle to event in PutOpImpl to check if we have + // delta bytes calculated already. So no need to calculate it here. + // 4. Check if value is instanceof com.gemstone.gemfire.Delta + // 5. Check if Region in PR with redundantCopies > 0. Set extractDelta. + // 6. Check if Region has peers. Set extractDelta. + // 7. Check if it has any delta proxies attached to it. Set extractDelta. + // 8. If extractDelta is set, check if it has delta. + // 9. If delta is found, extract it and set it into the event. + // 10. If any exception is caught while invoking the delta callbacks, throw it back. + // 11. Wrap any checked exception in InternalGemFireException before throwing it. + try { + boolean extractDelta = false; + // How costly is this if check? + if (this.getSystem().getConfig().getDeltaPropagation() + && value instanceof com.gemstone.gemfire.Delta) { + if (!this.hasServerProxy()) { + if ((this instanceof PartitionedRegion)) { + if (((PartitionedRegion)this).getRedundantCopies() > 0) { + extractDelta = true; + } else { + InternalDistributedMember ids = (InternalDistributedMember)PartitionRegionHelper + .getPrimaryMemberForKey(this, event.getKey()); + if (ids != null) { + if (this.getSystem().getMemberId().equals(ids.getId())) { + extractDelta = hasAdjunctRecipientsNeedingDelta(event); + } else { + extractDelta = true; + } + } else { + extractDelta = true; + } + } + } else if ((this instanceof DistributedRegion) + && !((DistributedRegion)this).scope.isDistributedNoAck() + && ((DistributedRegion)this).getCacheDistributionAdvisor() + .adviseCacheOp().size() > 0) { + extractDelta = true; + } + if (!extractDelta && ClientHealthMonitor.getInstance() != null) { + extractDelta = ClientHealthMonitor.getInstance().hasDeltaClients(); + } + } else if (HandShake.isDeltaEnabledOnServer()) { + // This is a client region + extractDelta = true; + } + if (extractDelta && ((com.gemstone.gemfire.Delta)value).hasDelta()) { + HeapDataOutputStream hdos = new HeapDataOutputStream(Version.CURRENT); + long start = DistributionStats.getStatTime(); + try { + ((com.gemstone.gemfire.Delta)value).toDelta(hdos); + } catch (RuntimeException re) { + throw re; + } catch (Exception e) { + throw new DeltaSerializationException( + LocalizedStrings.DistributionManager_CAUGHT_EXCEPTION_WHILE_SENDING_DELTA + .toLocalizedString(), e); + } + event.setDeltaBytes(hdos.toByteArray()); + this.getCachePerfStats().endDeltaPrepared(start); + } + } + } catch (RuntimeException re) { + throw re; + } catch (Exception e) { + throw new InternalGemFireException(e); + } + } + + @SuppressWarnings("unchecked") + private boolean hasAdjunctRecipientsNeedingDelta(EntryEventImpl event) { + PartitionedRegion pr = ((PartitionedRegion)this); + BucketRegion br = null; + FilterRoutingInfo filterRouting = null; + Set twoMessages = Collections.EMPTY_SET; + Set adjunctRecipients = Collections.EMPTY_SET; + Set cacheservers = null; + + int bId = event.getKeyInfo().getBucketId(); + try { + br = pr.dataStore.getInitializedBucketForId(event.getKey(), bId); + } catch (ForceReattemptException fre) { + return true; + } + Set recipients = br.getCacheDistributionAdvisor().adviseUpdate(event); + twoMessages = br.getBucketAdvisor().adviseRequiresTwoMessages(); + CacheDistributionAdvisor cda = pr.getCacheDistributionAdvisor(); + filterRouting = cda.adviseFilterRouting(event, recipients); + adjunctRecipients = br.getAdjunctReceivers(event, recipients, twoMessages, filterRouting); + cacheservers = cda.adviseCacheServers(); + return !Collections.disjoint(adjunctRecipients, cacheservers); + } + + public Region.Entry getEntry(Object key) + { + validateKey(key); + checkReadiness(); + checkForNoAccess(); + discoverJTA(); + return getDataView().getEntry(getKeyInfo(key), this, false); + } + + /** internally we often need to get an entry whether it is a tombstone or not */ + public Region.Entry getEntry(Object key, boolean allowTombstones) { + return getDataView().getEntry(getKeyInfo(key), this, allowTombstones); + } + + /** + * Just like getEntry but also updates the stats that get would have depending + * on a flag. See bug 42410. Also skips discovering JTA + * + * @param key + * @return the entry if it exists; otherwise null. + */ + public Entry accessEntry(Object key, boolean updateStats) { + validateKey(key); + checkReadiness(); + checkForNoAccess(); + if(updateStats) { + return getDataView().accessEntry(getKeyInfo(key), this); + } else { + return getDataView().getEntry(getKeyInfo(key), this, false); + } + } + + protected boolean includeHDFSResults() { + return isUsedForPartitionedRegionBucket() + && isHDFSReadWriteRegion() + && getPartitionedRegion().includeHDFSResults(); + } + + + /** a fast estimate of total number of entries locally in the region */ + public long getEstimatedLocalSize() { + RegionMap rm; + if (!this.isDestroyed) { + long size; + if (isHDFSReadWriteRegion() && this.initialized) { + // this size is not used by HDFS region iterators + // fixes bug 49239 + return 0; + } + // if region has not been initialized yet, then get the estimate from + // disk region's recovery map if available + if (!this.initialized && this.diskRegion != null + && (rm = this.diskRegion.getRecoveredEntryMap()) != null + && (size = rm.size()) > 0) { + return size; + } + if ((rm = getRegionMap()) != null) { + return rm.size(); + } + } + return 0; + } + /** + * @param keyInfo + * @param access + * true if caller wants last accessed time updated + * @param allowTombstones whether an entry with a TOMBSTONE value can be returned + * @return TODO + */ + protected Region.Entry nonTXGetEntry(KeyInfo keyInfo, boolean access, boolean allowTombstones) { + final Object key = keyInfo.getKey(); + RegionEntry re = this.entries.getEntry(key); + boolean miss = (re == null || re.isDestroyedOrRemoved()); + if (access) { + updateStatsForGet(re, !miss); + } + if (re == null) { + return null; + } + if (re.isTombstone()) { + if (!allowTombstones) { + return null; + } // else return an entry (client GII / putAll results) + } else if (miss) { + return null; + } + + Region.Entry ren = new NonTXEntry(re); + //long start=0, end=0; + //start = System.currentTimeMillis(); + //end = System.currentTimeMillis(); + //System.out.println("getEntry: " + (end-start)); + return ren; + } + + /** + * @return boolean + */ + protected boolean isClosed() + { + return this.cache.isClosed(); + } + + /** + * Returns true if this region is or has been closed or destroyed. + * Note that unlike {@link #isDestroyed()} this method will not + * return true if the cache is closing but has not yet started closing + * this region. + */ + public boolean isThisRegionBeingClosedOrDestroyed() { + return this.isDestroyed; + } + + /** returns true if this region has been destroyed */ + public boolean isDestroyed() + { + if (isClosed()) { + return true; // for bug 42328 + } + boolean isTraceEnabled = logger.isTraceEnabled(); + // boolean result = false; + if (this.isDestroyed) { + if (isTraceEnabled) { + logger.trace("isDestroyed: true, this.isDestroyed: {}", getFullPath()); + } + return true; + } + // if (!isInitialized()) { // don't return true if still initializing + // if (finestEnabled) { + // log.finest("isDestroyed: false, not initialized: " + getFullPath()); + // } + // return false; + // } + // @todo we could check parents here if we want this to be more accurate, + // and the isDestroyed field could be made volatile as well. + // if (this.parentRegion != null) return this.parentRegion.isDestroyed(); + if (isTraceEnabled) { + logger.trace("isDestroyed: false : {}", getFullPath()); + } + return false; + } + + /** a variant of subregions() that does not perform a readiness check */ + protected Set basicSubregions(boolean recursive) { + return new SubregionsSet(recursive); + } + + public Set subregions(boolean recursive) { + checkReadiness(); + return new SubregionsSet(recursive); + } + + public Set entries(boolean recursive) { + checkReadiness(); + checkForNoAccess(); + return basicEntries(recursive); + } + + /** Returns set of entries without performing validation checks. */ + public Set basicEntries(boolean recursive) { + return new EntriesSet(this, recursive, IteratorType.ENTRIES, false); + } + + /** + * Flavor of keys that will not do repeatable read + * @since 5.5 + */ + public Set testHookKeys() + { + checkReadiness(); + checkForNoAccess(); + return new EntriesSet(this, false, IteratorType.KEYS, + false /* dontRememberReads */, false /* skipTxCheckInIteration */, + false /* allowTombstones */); + } + + public Set keys() + { + checkReadiness(); + checkForNoAccess(); + return new EntriesSet(this, false, IteratorType.KEYS, false); + } + + /** + * return a set of the keys in this region + * @param allowTombstones whether destroyed entries should be included + * @return the keys + */ + public Set keySet(boolean allowTombstones) { + checkReadiness(); + checkForNoAccess(); + return new EntriesSet(this, false, IteratorType.KEYS, allowTombstones); + } + + public Collection values() + { + checkReadiness(); + checkForNoAccess(); + return new EntriesSet(this, false, IteratorType.VALUES, false); + } + + public Object getUserAttribute() + { + return this.regionUserAttribute; + } + + public void setUserAttribute(Object value) + { + checkReadiness(); + this.regionUserAttribute = value; + } + + public boolean containsKey(Object key) + { + checkReadiness(); + checkForNoAccess(); + return getDataView().containsKey(getKeyInfo(key), this); + } + + public boolean containsTombstone(Object key) + { + checkReadiness(); + checkForNoAccess(); + if (!this.concurrencyChecksEnabled) { + return false; + } else { + try { + Entry entry = getDataView().getEntry(getKeyInfo(key), this, true); + if (entry == null) { + return false; + } else { + return (entry.getValue() == Token.TOMBSTONE); + } + } catch (EntryDestroyedException e) { + return true; + } + } + } + + protected boolean nonTXContainsKey(KeyInfo keyInfo) { + boolean contains = getRegionMap().containsKey(keyInfo.getKey()); + if (contains && this.imageState.isClient()) { + // fix for bug #40871 - concurrent RI causes containsKey for destroyed entry + // to return true + RegionEntry re = this.entries.getEntry(keyInfo.getKey()); + // TODO:KIRK:OK if (re == null || Token.isRemoved(re.getValueInVM(this))) { + if (re == null || re.isDestroyedOrRemoved()) { + contains = false; + } + } + return contains; + } + + public boolean containsValueForKey(Object key) + { + discoverJTA(); + return getDataView().containsValueForKey(getKeyInfo(key), this); + } + + /** + * @param keyInfo + * @return TODO + */ + protected boolean nonTXContainsValueForKey(KeyInfo keyInfo) { + checkReadiness(); + checkForNoAccess(); + if (this.diskRegion != null) { + this.diskRegion.setClearCountReference(); + } + try { + RegionEntry entry = this.entries.getEntry(keyInfo.getKey()); + boolean result = entry != null; + if (result) { + ReferenceCountHelper.skipRefCountTracking(); + Object val = entry.getTransformedValue(); // no need to decompress since we only want to know if we have an existing value + if (val instanceof StoredObject) { + OffHeapHelper.release(val); + ReferenceCountHelper.unskipRefCountTracking(); + return true; + } + ReferenceCountHelper.unskipRefCountTracking(); + // No need to to check CachedDeserializable because of Bruce's fix in r30960 for bug 42162. See bug 42732. + // this works because INVALID and LOCAL_INVALID will never be faulted out of mem + // If val is NOT_AVAILABLE that means we have a valid value on disk. + result = !Token.isInvalidOrRemoved(val); + } + return result; + } + finally { + if (this.diskRegion != null) { + this.diskRegion.removeClearCountReference(); + } + } + } + + public RegionAttributes getAttributes() + { + // to fix bug 35134 allow attribute access on closed regions + //checkReadiness(); + return this; + } + + public String getName() + { + return this.regionName; + } + + /** + * Convenience method to get region name for logging/exception messages. + * if this region is an instanceof bucket region, it returns the + * bucket region name + * @return name of the region or the owning partitioned region + */ + public String getDisplayName() { + if (this.isUsedForPartitionedRegionBucket()) { + return this.getPartitionedRegion().getName(); + } + return this.regionName; + } + + /** + * Returns the number of entries in this region. Note that because of the + * concurrency properties of the {@link RegionMap}, the number of entries is + * only an approximate. That is, other threads may change the number of + * entries in this region while this method is being invoked. + * + * @see RegionMap#size + * + * author David Whitlock + */ + public final int entryCount() { + return getDataView().entryCount(this); + } + + public int entryCount(Set buckets) { + return entryCount(buckets, false); + } + + protected int entryCount( Set buckets, boolean estimate) { + assert buckets == null: "unexpected buckets " + buckets + " for region " + + toString(); + + return getDataView().entryCount(this); + } + + public int entryCountEstimate(final TXStateInterface tx, Set buckets, boolean entryCountEstimate) { + return entryCount(buckets, entryCountEstimate); + } + + /** + * @return size after considering imageState + */ + protected int getRegionSize() { + synchronized(getSizeGuard()) { + int result = getRegionMap().size(); + // if this is a client with no tombstones then we subtract the number + // of entries being affected by register-interest refresh + if (this.imageState.isClient() && !this.concurrencyChecksEnabled) { + return result - this.imageState.getDestroyedEntriesCount(); + } + if (includeHDFSResults()) { + return result; + } + return result - this.tombstoneCount.get(); + } + } + + /** + * Returns the DiskRegion that this region uses to access data + * on disk. + * + * @return null if disk regions are not being used + * + * @since 3.2 + */ + public DiskRegion getDiskRegion() + { + return this.diskRegion; + } + public DiskRegionView getDiskRegionView() { + return getDiskRegion(); + } + + /** + * Lets the customer do an explicit evict of a value to disk and removes the value + * from memory. + */ + public void evictValue(Object key) { + if (getDiskRegion() != null) { + this.entries.evictValue(key); + } + } + + /** + * + * Initially called by EvictorThread.run + * + * @since 3.5.1 + */ + public void checkLRU() + { + if (this.entriesInitialized) { + try { + this.entries.lruUpdateCallback(); + }catch( DiskAccessException dae) { + this.handleDiskAccessException(dae); + throw dae; + } + } + } + + protected boolean isOverflowEnabled() { + EvictionAttributes ea = getAttributes().getEvictionAttributes(); + return ea != null && ea.getAction().isOverflowToDisk(); + } + + public void writeToDisk() + { + if (this.diskRegion == null) { + DataPolicy dp = getDataPolicy(); + if (dp.isEmpty()) { + throw new IllegalStateException(LocalizedStrings.LocalRegion_CANNOT_WRITE_A_REGION_WITH_DATAPOLICY_0_TO_DISK.toLocalizedString(dp)); + } + else if (!dp.withPersistence() && !isOverflowEnabled()) { + throw new IllegalStateException(LocalizedStrings.LocalRegion_CANNOT_WRITE_A_REGION_THAT_IS_NOT_CONFIGURED_TO_ACCESS_DISKS.toLocalizedString()); + } + } + else { + this.diskRegion.asynchForceFlush(); + } + } + + /** + * Used by tests to force everything out to disk. + */ + public void forceFlush() + { + if (this.diskRegion != null) { + this.diskRegion.flushForTesting(); + } + } + + /** + * This implementation only checks readiness and scope + */ + public Lock getRegionDistributedLock() throws IllegalStateException + { + checkReadiness(); + checkForLimitedOrNoAccess(); + Scope theScope = getAttributes().getScope(); + Assert.assertTrue(theScope == Scope.LOCAL); + throw new IllegalStateException(LocalizedStrings.LocalRegion_ONLY_SUPPORTED_FOR_GLOBAL_SCOPE_NOT_LOCAL.toLocalizedString()); + } + + /** + * This implementation only checks readiness and scope + */ + public Lock getDistributedLock(Object key) throws IllegalStateException + { + checkReadiness(); + checkForLimitedOrNoAccess(); + Scope theScope = getAttributes().getScope(); + Assert.assertTrue(theScope == Scope.LOCAL); + throw new IllegalStateException(LocalizedStrings.LocalRegion_ONLY_SUPPORTED_FOR_GLOBAL_SCOPE_NOT_LOCAL.toLocalizedString()); + } + + public void invalidate(Object key, Object aCallbackArgument) + throws TimeoutException, EntryNotFoundException + { + checkReadiness(); + checkForLimitedOrNoAccess(); + validatedInvalidate(key, aCallbackArgument); + } + + /** + * Destroys entry without performing validations. Call this after validating + * key, callback arg, and runtime state. + */ + protected void validatedInvalidate(Object key, Object aCallbackArgument) + throws TimeoutException, EntryNotFoundException + { + EntryEventImpl event = EntryEventImpl.create( + this, Operation.INVALIDATE, + key, null, aCallbackArgument, false, getMyId()); + try { + if (generateEventID()) { + event.setNewEventId(cache.getDistributedSystem()); + } + basicInvalidate(event); + } finally { + event.release(); + } + } + + public void localDestroy(Object key, Object aCallbackArgument) + throws EntryNotFoundException + { + validateKey(key); + checkReadiness(); + checkForNoAccess(); + EntryEventImpl event = EntryEventImpl.create( + this, + Operation.LOCAL_DESTROY, key, null, aCallbackArgument, false, getMyId()); + if (generateEventID()) { + event.setNewEventId(cache.getDistributedSystem()); + } + try { + basicDestroy(event, + false, + null); // expectedOldValue + } + catch (CacheWriterException e) { + // cache writer not called + throw new Error(LocalizedStrings.LocalRegion_CACHE_WRITER_SHOULD_NOT_HAVE_BEEN_CALLED_FOR_LOCALDESTROY.toLocalizedString(), e); + } + catch (TimeoutException e) { + // no distributed lock + throw new Error(LocalizedStrings.LocalRegion_NO_DISTRIBUTED_LOCK_SHOULD_HAVE_BEEN_ATTEMPTED_FOR_LOCALDESTROY.toLocalizedString(), e); + } finally { + event.release(); + } + } + + public void localDestroyRegion(Object aCallbackArgument) + { + getDataView().checkSupportsRegionDestroy(); + RegionEventImpl event = new RegionEventImpl(this, + Operation.REGION_LOCAL_DESTROY, aCallbackArgument, false, getMyId(), + generateEventID()/* generate EventID */); + try { + basicDestroyRegion(event, false); + } + catch (CacheWriterException e) { + // not possible with local operation, CacheWriter not called + throw new Error(LocalizedStrings.LocalRegion_CACHEWRITEREXCEPTION_SHOULD_NOT_BE_THROWN_IN_LOCALDESTROYREGION.toLocalizedString(), e); + } + catch (TimeoutException e) { + // not possible with local operation, no distributed locks possible + throw new Error(LocalizedStrings.LocalRegion_TIMEOUTEXCEPTION_SHOULD_NOT_BE_THROWN_IN_LOCALDESTROYREGION.toLocalizedString(), e); + } + } + + public void close() + { + + RegionEventImpl event = new RegionEventImpl(this, Operation.REGION_CLOSE, + null, false, getMyId(), generateEventID()/* generate EventID */); + try { + // NOTE: the 422dynamicRegions branch added the callbackEvents argument + // to basicDestroyRegion and inhibited events on region.close. This + // clashed with the new SystemMemberCacheListener functionality in + // 5.0, causing unit tests to fail + basicDestroyRegion(event, false, true, true); + } + catch (CacheWriterException e) { + // not possible with local operation, CacheWriter not called + throw new Error(LocalizedStrings.LocalRegion_CACHEWRITEREXCEPTION_SHOULD_NOT_BE_THROWN_IN_LOCALDESTROYREGION.toLocalizedString(), e); + } + catch (TimeoutException e) { + // not possible with local operation, no distributed locks possible + throw new Error(LocalizedStrings.LocalRegion_TIMEOUTEXCEPTION_SHOULD_NOT_BE_THROWN_IN_LOCALDESTROYREGION.toLocalizedString(), e); + } + } + + public void localInvalidate(Object key, Object callbackArgument) + throws EntryNotFoundException + { + validateKey(key); + checkReadiness(); + checkForNoAccess(); + + EntryEventImpl event = EntryEventImpl.create( + this, + Operation.LOCAL_INVALIDATE, key, null/* newValue */, callbackArgument, + false, getMyId()); + try { + if (generateEventID()) { + event.setNewEventId(cache.getDistributedSystem()); + } + event.setLocalInvalid(true); + basicInvalidate(event); + } finally { + event.release(); + } + } + + public void localInvalidateRegion(Object aCallbackArgument) + { + getDataView().checkSupportsRegionInvalidate(); + checkReadiness(); + checkForNoAccess(); + RegionEventImpl event = new RegionEventImpl(this, + Operation.REGION_LOCAL_INVALIDATE, aCallbackArgument, false, getMyId()); + basicInvalidateRegion(event); + } + + /** + * Look up the LocalRegion with the specified full path. + * + * @param system + * the distributed system whose cache contains the root of interest + * @return the LocalRegion or null if not found + */ + public static LocalRegion getRegionFromPath(DistributedSystem system, + String path) + { + Cache c = GemFireCacheImpl.getInstance(); + if(c==null) { + return null; + } else { + return (LocalRegion)c.getRegion(path); + } + } + + // public void dumpEntryMapStats(PrintStream out) { + // ((ConcurrentHashMap)this.entries).dumpStats(out); + // } + + ////////////////// Protected Methods //////////////////////////////////////// + + /** + * Do any extra initialization required. Region is already visible in parent's + * subregion map. This method releases the initialization Latches, so + * subclasses should call this super method last after performing additional + * initialization. + * + * @param imageTarget + * ignored, used by subclass for get initial image + * @param internalRegionArgs + * @see DistributedRegion#initialize(InputStream, InternalDistributedMember, InternalRegionArguments) + */ + protected void initialize(InputStream snapshotInputStream, + InternalDistributedMember imageTarget, InternalRegionArguments internalRegionArgs) throws TimeoutException, + IOException, ClassNotFoundException + { + if (!isInternalRegion()) { + // Subclasses may have already called this method, but this is + // acceptable because addResourceListener won't add it twice + if (!this.isDestroyed) { + cache.getResourceManager().addResourceListener(ResourceType.MEMORY, this); + } + } + + // if we're versioning entries we need a region-level version vector + if (this.concurrencyChecksEnabled && this.versionVector == null) { + createVersionVector(); + } + // if not local, then recovery happens in InitialImageOperation + if (this.scope.isLocal()) { + createOQLIndexes(internalRegionArgs); + if (this.diskRegion != null) { + try { + this.diskRegion.initializeOwner(this); + this.diskRegion.finishInitializeOwner(this, GIIStatus.NO_GII); + { // This block was added so that early recovery could figure out that + // this data needs to be recovered from disk. Local regions used to + // not bother assigning a memberId but that is what the early + // recovery + // code uses to figure out that a region needs to be recovered. + PersistentMemberID oldId = this.diskRegion.getMyInitializingID(); + if (oldId == null) { + oldId = this.diskRegion.getMyPersistentID(); + } + if (oldId == null) { + PersistentMemberID newId = this.diskRegion.generatePersistentID(); + this.diskRegion.setInitializing(newId); + this.diskRegion.setInitialized(); + } + } + } catch (DiskAccessException dae) { + releaseAfterRegionCreateEventLatch(); + this.handleDiskAccessException(dae, true); + throw dae; + } + } + } + + // make sure latches are released if they haven't been by now already + releaseBeforeGetInitialImageLatch(); + if (snapshotInputStream != null && this.scope.isLocal()) { + try { + loadSnapshotDuringInitialization(snapshotInputStream); + }catch(DiskAccessException dae) { + releaseAfterRegionCreateEventLatch(); + this.handleDiskAccessException(dae); + throw dae; + } + } + releaseAfterGetInitialImageLatch(); + if (logger.isDebugEnabled()) { + logger.debug("Calling addExpiryTasks for {}", this); + } + // these calls can throw RegionDestroyedException if this region is + // destroyed + // at this point + try { + addIdleExpiryTask(); + addTTLExpiryTask(); + if (isEntryExpiryPossible()) { + rescheduleEntryExpiryTasks(); // called after gii to fix bug 35214 + } + initialized(); + } + catch (RegionDestroyedException e) { + // whether it is this region or a parent region that is destroyed, + // then so must we be + Assert.assertTrue(isDestroyed()); + // just proceed, a destroyed region will be returned to caller + } + } + + protected void createOQLIndexes(InternalRegionArguments internalRegionArgs) { + createOQLIndexes(internalRegionArgs, false); + } + + protected void createOQLIndexes(InternalRegionArguments internalRegionArgs, boolean recoverFromDisk) { + + if (internalRegionArgs == null || internalRegionArgs.getIndexes() == null || internalRegionArgs.getIndexes().size() == 0){ + return; + } + if (logger.isDebugEnabled()) { + logger.debug("LocalRegion.createOQLIndexes on region {}", this.getFullPath()); + } + long start = getCachePerfStats().startIndexInitialization(); + List oqlIndexes = internalRegionArgs.getIndexes(); + + if (this.indexManager == null) { + this.indexManager = IndexUtils.getIndexManager(this, true); + } + Set indexes = new HashSet(); + Set prIndexes = new HashSet(); + int initLevel = 0; + DiskRegion dr = this.getDiskRegion(); + boolean isOverflowToDisk = false; + if(dr != null) { + isOverflowToDisk = dr.isOverflowEnabled(); + if(recoverFromDisk && !isOverflowToDisk) { + // Refer bug #44119 + // For disk regions, index creation should wait for async value creation to complete before it starts its iteration + // In case of disk overflow regions the waitForAsyncRecovery is done in populateOQLIndexes method via getBestIterator() + dr.waitForAsyncRecovery(); + } + } + try { + // Release the initialization latch for index creation. + initLevel = LocalRegion.setThreadInitLevelRequirement(ANY_INIT); + for (Object o : oqlIndexes) { + IndexCreationData icd = (IndexCreationData)o; + try { + if (icd.getPartitionedIndex() != null) { + ExecutionContext externalContext = new ExecutionContext(null, this.cache); + if (internalRegionArgs.getPartitionedRegion() != null) { + externalContext.setBucketRegion(internalRegionArgs.getPartitionedRegion(), (BucketRegion)this); + } + if (logger.isDebugEnabled()) { + logger.debug("IndexManager Index creation process for {}", icd.getIndexName()); + } + + //load entries during initialization only for non overflow regions + indexes.add(this.indexManager.createIndex(icd.getIndexName(), icd.getIndexType(), + icd.getIndexExpression(), icd.getIndexFromClause(), + icd.getIndexImportString(), externalContext, icd.getPartitionedIndex(), !isOverflowToDisk)); + prIndexes.add(icd.getPartitionedIndex()); + } else { + if (logger.isDebugEnabled()) { + logger.debug("QueryService Index creation process for {}" + icd.getIndexName()); + } + DefaultQueryService qs = (DefaultQueryService) this.getGemFireCache().getLocalQueryService(); + String fromClause = (icd.getIndexType() == IndexType.FUNCTIONAL || icd.getIndexType() == IndexType.HASH)? icd.getIndexFromClause() : this.getFullPath(); + //load entries during initialization only for non overflow regions + indexes.add(qs.createIndex(icd.getIndexName(), icd.getIndexType(), icd.getIndexExpression(), fromClause, icd.getIndexImportString(), !isOverflowToDisk)); + } + + } catch (Exception ex) { + logger.error("Failed to create index {} on region {} with exception: {}", icd.getIndexName(), this.getFullPath(), ex); + + // Check if the region index creation is from cache.xml, in that case throw exception. + // Other case is when bucket regions are created dynamically, in that case ignore the exception. + if (internalRegionArgs.getDeclarativeIndexCreation()) { + InternalGemFireError err = new InternalGemFireError(LocalizedStrings.GemFireCache_INDEX_CREATION_EXCEPTION_1.toLocalizedString(new Object[] {icd.getIndexName(), this.getFullPath()}) ); + err.initCause(ex); + throw err; + } + } + } + } finally { + // Reset the initialization lock. + LocalRegion.setThreadInitLevelRequirement(initLevel); + } + // Load data into OQL indexes in case of disk recovery and disk overflow + if(isOverflowToDisk){ + if(recoverFromDisk) { + populateOQLIndexes(indexes); + } else { + // Empty indexes are created for overflow regions but not populated at this stage + // since this is not recovery. + // Setting the populate flag to true so that the indexes can apply updates. + this.indexManager.setPopulateFlagForIndexes(indexes); + } + //due to bug #52096, the pr index populate flags were not being set + //we should revisit and clean up the index creation code paths + this.indexManager.setPopulateFlagForIndexes(prIndexes); + } + getCachePerfStats().endIndexInitialization(start); + } + + /** + * Populate the indexes with region entries + */ + protected void populateOQLIndexes(Set indexes) { + logger.info(LocalizedMessage.create(LocalizedStrings.GemFireCache_INDEX_LOADING)); + try { + this.indexManager.populateIndexes(indexes); + } catch (MultiIndexCreationException ex) { + logger.info("Failed to update index on region {}: {}", this.getFullPath(), ex.getMessage()); + } + } + + /** + * The region is now fully initialized, as far as LocalRegion is concerned + */ + protected void initialized() { + // does nothing in LocalRegion at this time + } + + protected void releaseLatches() + { + releaseBeforeGetInitialImageLatch(); + releaseAfterGetInitialImageLatch(); + releaseAfterRegionCreateEventLatch(); + } + + protected void releaseBeforeGetInitialImageLatch() + { + if (logger.isDebugEnabled()) { + logger.debug("Releasing Initialization Latch (before initial image) for {}", getFullPath()); + } + releaseLatch(this.initializationLatchBeforeGetInitialImage); + } + + protected final void releaseAfterGetInitialImageLatch() { + if (logger.isDebugEnabled()) { + logger.debug("Releasing Initialization Latch (after initial image) for {}", getFullPath()); + } + releaseLatch(this.initializationLatchAfterGetInitialImage); + } + + /** + * Called after we have delivered our REGION_CREATE event. + * + * @since 5.0 + */ + private void releaseAfterRegionCreateEventLatch() + { + releaseLatch(this.afterRegionCreateEventLatch); + } + + /** + * Used to cause cache listener events to wait until the after region create + * event is delivered. + * + * @since 5.0 + */ + private void waitForRegionCreateEvent() + { + StoppableCountDownLatch l = this.afterRegionCreateEventLatch; + if (l != null && l.getCount() == 0) { + return; + } + waitOnInitialization(l); + } + + private static void releaseLatch(StoppableCountDownLatch latch) + { + if (latch == null) + return; + latch.countDown(); + } + + /** + * Removes entries and recursively destroys subregions. + * + * @param eventSet + * collects the events for all destroyed regions if null, then we're + * closing so don't send events to callbacks or destroy the disk + * region + */ + private void recursiveDestroyRegion(Set eventSet, RegionEventImpl p_event, + boolean cacheWrite) throws CacheWriterException, TimeoutException + { + RegionEventImpl event = p_event; + final boolean isClose = event.getOperation().isClose(); + // do the cacheWriter beforeRegionDestroy first to fix bug 47736 + if (eventSet != null && cacheWrite) { + try { + cacheWriteBeforeRegionDestroy(event); + } + catch (CancelException e) { + // I don't think this should ever happens: bulletproofing for bug 39454 + if (!cache.forcedDisconnect()) { + logger.warn(LocalizedMessage.create(LocalizedStrings.LocalRegion_RECURSIVEDESTROYREGION_PROBLEM_IN_CACHEWRITEBEFOREREGIONDESTROY), e); + } + } + } + + if (this.eventTracker != null) { + this.eventTracker.stop(); + } + if (logger.isTraceEnabled(LogMarker.RVV) && getVersionVector() != null) { + logger.trace(LogMarker.RVV, "version vector for {} is {}", getName(), getVersionVector().fullToString()); + } + cancelTTLExpiryTask(); + cancelIdleExpiryTask(); + cancelAllEntryExpiryTasks(); + if (!isInternalRegion()) { + getCachePerfStats().incRegions(-1); + } + cache.getResourceManager(false).removeResourceListener(this); + if (getMembershipAttributes().hasRequiredRoles()) { + if (!isInternalRegion()) { + getCachePerfStats().incReliableRegions(-1); + } + } + + // Note we need to do this even if we don't have a listener + // because of the SystemMemberCacheEventProcessor. Once we have + // a way to check for existence of SystemMemberCacheEventProcessor listeners + // then the add only needs to be done if hasListener || hasAdminListener + if (eventSet != null) { // && hasListener()) + eventSet.add(event); + } + + try { + // call recursiveDestroyRegion on each subregion and remove it + // from this subregion map + Collection values = this.subregions.values(); + for (Iterator itr = values.iterator(); itr.hasNext();) { + Object element = itr.next(); // element is a LocalRegion + LocalRegion rgn; + try { + LocalRegion.setThreadInitLevelRequirement(LocalRegion.BEFORE_INITIAL_IMAGE); + try { + rgn = toRegion(element); // converts to a LocalRegion + } finally { + LocalRegion.setThreadInitLevelRequirement(LocalRegion.AFTER_INITIAL_IMAGE); + } + } + catch (CancelException e) { + rgn = (LocalRegion)element; // ignore, keep going through the motions though + } + catch (RegionDestroyedException rde) { + // SharedRegionData was destroyed + continue; + } + + // if the region is destroyed, then it is a race condition with + // failed initialization removing it from the parent subregion map + if (rgn.isDestroyed) { + continue; + } + /** ** BEGIN operating on subregion of this region (rgn) *** */ + if (eventSet != null) { + event = (RegionEventImpl)event.clone(); + event.region = rgn; + } + + try { + rgn.recursiveDestroyRegion(eventSet, event, cacheWrite); + if (!rgn.isInternalRegion()) { + InternalDistributedSystem system = rgn.cache.getDistributedSystem(); + system.handleResourceEvent(ResourceEvent.REGION_REMOVE, rgn); + } + } + catch (CancelException e) { + // I don't think this should ever happen: bulletproofing for bug 39454 + if (!cache.forcedDisconnect()) { + logger.warn(LocalizedMessage.create(LocalizedStrings.LocalRegion_RECURSIVEDESTROYREGION_RECURSION_FAILED_DUE_TO_CACHE_CLOSURE_REGION_0, + rgn.getFullPath()), e); + } + } + itr.remove(); // remove from this subregion map; + /** ** END operating on subregion of this region *** */ + } // for + + try { + if (this.indexManager != null) { + try { + if (this instanceof BucketRegion) { + this.indexManager.removeBucketIndexes(getPartitionedRegion()); + } + this.indexManager.destroy(); + } + catch (QueryException e) { + throw new IndexMaintenanceException(e); + } + } + } + catch (CancelException e) { + // I don't think this should ever happens: bulletproofing for bug 39454 + if (!cache.forcedDisconnect()) { + logger.warn(LocalizedMessage.create(LocalizedStrings.LocalRegion_BASICDESTROYREGION_INDEX_REMOVAL_FAILED_DUE_TO_CACHE_CLOSURE_REGION_0, + getFullPath()), e); + } + } + } + finally { + // mark this region as destroyed. + if (event.isReinitializing()) { + this.reinitialized_old = true; + } + this.cache.setRegionByPath(getFullPath(), null); + + if (this.eventTracker != null) { + this.eventTracker.stop(); + } + + if (this.diskRegion != null) { + this.diskRegion.prepareForClose(this); + } + + this.isDestroyed = true; + // after isDestroyed is set to true call removeResourceListener to fix bug 49555 + this.cache.getResourceManager(false).removeResourceListener(this); + closeEntries(); + if (logger.isDebugEnabled()) { + logger.debug("recursiveDestroyRegion: Region Destroyed: {}", getFullPath()); + } + + // if eventSet is null then we need to close the listener as well + // otherwise, the listener will be closed after the destroy event + try { + postDestroyRegion(!isClose, event); + } + catch (CancelException e) { + logger.warn(LocalizedMessage.create(LocalizedStrings.LocalRegion_RECURSIVEDESTROYREGION_POSTDESTROYREGION_FAILED_DUE_TO_CACHE_CLOSURE_REGION_0, + getFullPath()), e); + } + + // Destroy cqs created aganist this Region in a server cache. + // fix for bug #47061 + if (getServerProxy() == null) { + closeCqs(); + } + + detachPool(); + + if (eventSet != null) { + closeCallbacksExceptListener(); + } + else { + closeAllCallbacks(); + } + if (this.concurrencyChecksEnabled && this.dataPolicy.withReplication() && !this.cache.isClosed()) { + this.cache.getTombstoneService().unscheduleTombstones(this); + } + if (this.hasOwnStats) { + this.cachePerfStats.close(); + } + } + } + + public void closeEntries() { + this.entries.close(); + } + public Set clearEntries(RegionVersionVector rvv) { + return this.entries.clear(rvv); + } + + @Override + public void checkReadiness() + { + checkRegionDestroyed(true); + } + + /** + * This method should be called when the caller cannot locate an entry and that condition + * is unexpected. This will first double check the cache and region state before throwing + * an EntryNotFoundException. EntryNotFoundException should be a last resort exception. + * + * @param entryKey the missing entry's key. + */ + public void checkEntryNotFound(Object entryKey) { + checkReadiness(); + // Localized string for partitioned region is generic enough for general use + throw new EntryNotFoundException(LocalizedStrings.PartitionedRegion_ENTRY_NOT_FOUND_FOR_KEY_0.toLocalizedString(entryKey)); + } + + /** + + * Search for the value in a server (if one exists), + * then try a loader. + * + * If we find a value, we put it in the cache. + * @param preferCD return the CacheDeserializable, if that's what the value is. + * @param requestingClient the client making the request, if any + * @param clientEvent the client's event, if any. If not null, we set the version tag + * @param returnTombstones TODO + * @return the deserialized value + * @see DistributedRegion#findObjectInSystem(KeyInfo, boolean, TXStateInterface, boolean, Object, boolean, boolean, ClientProxyMembershipID, EntryEventImpl, boolean, boolean ) + */ + protected Object findObjectInSystem(KeyInfo keyInfo, boolean isCreate, + TXStateInterface tx, boolean generateCallbacks, Object localValue, boolean disableCopyOnRead, boolean preferCD, ClientProxyMembershipID requestingClient, + EntryEventImpl clientEvent, boolean returnTombstones, boolean allowReadFromHDFS) + throws CacheLoaderException, TimeoutException + { + final Object key = keyInfo.getKey(); + final Object aCallbackArgument = keyInfo.getCallbackArg(); + Object value = null; + boolean fromServer = false; + EntryEventImpl holder = null; + + /* + * First lets try the server + */ + { + ServerRegionProxy mySRP = getServerProxy(); + if (mySRP != null) { + holder = EntryEventImpl.createVersionTagHolder(); + try { + value = mySRP.get(key, aCallbackArgument, holder); + fromServer = value != null; + } finally { + holder.release(); + } + } + } + + /* + * If we didn't get anything from the server, try the loader + */ + if (!fromServer || value == Token.TOMBSTONE) { + // copy into local var to prevent race condition + CacheLoader loader = basicGetLoader(); + if (loader != null) { + final LoaderHelper loaderHelper + = loaderHelperFactory.createLoaderHelper(key, aCallbackArgument, + false /* netSearchAllowed */, + true /* netloadAllowed */, + null /* searcher */); + CachePerfStats stats = getCachePerfStats(); + long statStart = stats.startLoad(); + try { + value = loader.load(loaderHelper); + fromServer = false; + } + finally { + stats.endLoad(statStart); + } + } + } + + // don't allow tombstones into a client cache if it doesn't + // have concurrency checks enabled + if (fromServer && + value == Token.TOMBSTONE && !this.concurrencyChecksEnabled) { + value = null; + } + + /* + * If we got a value back, let's put it in the cache. + */ + RegionEntry re = null; + if (value != null && !isMemoryThresholdReachedForLoad()) { + + long startPut = CachePerfStats.getStatTime(); + validateKey(key); + Operation op; + if (isCreate) { + op = Operation.LOCAL_LOAD_CREATE; + } + else { + op = Operation.LOCAL_LOAD_UPDATE; + } + + EntryEventImpl event + = EntryEventImpl.create(this, op, key, value, aCallbackArgument, + false, getMyId(), generateCallbacks); + try { + + // bug #47716 - do not put an invalid entry into the cache if there's + // already one there with the same version + if (fromServer) { + if (alreadyInvalid(key, event)) { + return null; + } + event.setFromServer(fromServer); + event.setVersionTag(holder.getVersionTag()); + if (clientEvent != null) { + clientEvent.setVersionTag(holder.getVersionTag()); + } + } + + //set the event id so that we can progagate + //the value to the server + if (!fromServer) { + event.setNewEventId(cache.getDistributedSystem()); + } + try { + try { + re = basicPutEntry(event, 0L); + if (!fromServer && clientEvent != null) { + clientEvent.setVersionTag(event.getVersionTag()); + clientEvent.isConcurrencyConflict(event.isConcurrencyConflict()); + } + if (fromServer && (event.getRawNewValue() == Token.TOMBSTONE)) { + return null; // tombstones are destroyed entries + } + } catch (ConcurrentCacheModificationException e) { + // this means the value attempted to overwrite a newer modification and was rejected + if (logger.isDebugEnabled()) { + logger.debug("caught concurrent modification attempt when applying {}", event); + } + notifyBridgeClients(event); + } + if (!getDataView().isDeferredStats()) { + getCachePerfStats().endPut(startPut, event.isOriginRemote()); + } + } + catch (CacheWriterException cwe) { + if (logger.isDebugEnabled()) { + logger.debug("findObjectInSystem: writer exception putting entry {}", event, cwe); + } + } + } finally { + event.release(); + } + } + if (isCreate) { + recordMiss(re, key); + } + return value; + } + + protected boolean isMemoryThresholdReachedForLoad() { + return this.memoryThresholdReached.get(); + } + + /** + * Returns true if the cache already has this key as an invalid entry + * with a version >= the one in the given event. This is used in + * cache-miss processing to avoid overwriting the entry when it is + * not necessary, so that we avoid invoking cache listeners. + * + * @param key + * @param event + * @return whether the entry is already invalid + */ + protected boolean alreadyInvalid(Object key, EntryEventImpl event) { + @Unretained(ENTRY_EVENT_NEW_VALUE) + Object newValue = event.getRawNewValue(); + if (newValue == null || Token.isInvalid(newValue)) { + RegionEntry entry = this.entries.getEntry(key); + if (entry != null) { + synchronized(entry) { + if (entry.isInvalid()) { + VersionStamp stamp = entry.getVersionStamp(); + if (stamp == null || event.getVersionTag() == null) { + return true; + } + if (stamp.getEntryVersion() >= event.getVersionTag().getEntryVersion()) { + return true; + } + } + } + } + } + return false; + } + + /** + * @return true if cacheWrite was performed + * @see DistributedRegion#cacheWriteBeforeDestroy(EntryEventImpl, Object) + */ + boolean cacheWriteBeforeDestroy(EntryEventImpl event, Object expectedOldValue) + throws CacheWriterException, EntryNotFoundException, TimeoutException + { + boolean result = false; + // copy into local var to prevent race condition + CacheWriter writer = basicGetWriter(); + if (writer != null && event.getOperation() != Operation.REMOVE && + !event.inhibitAllNotifications()) { + final long start = getCachePerfStats().startCacheWriterCall(); + try { + writer.beforeDestroy(event); + } + finally { + getCachePerfStats().endCacheWriterCall(start); + } + result = true; + } + serverDestroy(event, expectedOldValue); + return result; + } + + /** @return true if this was a client region; false if not */ + protected boolean bridgeWriteBeforeDestroy(EntryEventImpl event, Object expectedOldValue) + throws CacheWriterException, EntryNotFoundException, TimeoutException + { + if (hasServerProxy()) { + serverDestroy(event, expectedOldValue); + return true; + } else { + return false; + } + } + + /** + * @since 5.7 + */ + protected void serverRegionDestroy(RegionEventImpl regionEvent) { + if (regionEvent.getOperation().isDistributed()) { + ServerRegionProxy mySRP = getServerProxy(); + if (mySRP != null) { + EventID eventId = regionEvent.getEventId(); + Object callbackArg = regionEvent.getRawCallbackArgument(); + mySRP.destroyRegion(eventId, callbackArg); + } + } + } + + /** + * @since 5.7 + */ + protected void serverRegionClear(RegionEventImpl regionEvent) { + if (regionEvent.getOperation().isDistributed()) { + ServerRegionProxy mySRP = getServerProxy(); + if (mySRP != null) { + EventID eventId = regionEvent.getEventId(); + Object callbackArg = regionEvent.getRawCallbackArgument(); + mySRP.clear(eventId, callbackArg); + } + } + } + /** + * @since 5.7 + */ + protected void serverRegionInvalidate(RegionEventImpl regionEvent) { + if (regionEvent.getOperation().isDistributed()) { + ServerRegionProxy mySRP = getServerProxy(); + if (mySRP != null) { + // @todo grid: add a client to server Op message for this + } + } + } + + /** + * @since 5.7 + */ + protected void serverInvalidate(EntryEventImpl event, boolean invokeCallbacks, + boolean forceNewEntry) { + if (event.getOperation().isDistributed()) { + ServerRegionProxy mySRP = getServerProxy(); + if (mySRP != null) { + mySRP.invalidate(event); + } + } + } + + /** + * @since 5.7 + */ + protected void serverPut(EntryEventImpl event, + boolean requireOldValue, Object expectedOldValue) { + if (event.getOperation().isDistributed() && !event.isFromServer()) { + ServerRegionProxy mySRP = getServerProxy(); + if (mySRP != null) { + if (event.isBulkOpInProgress()) { + // this is a put all, ignore this! + return; + } + Operation op = event.getOperation(); + // @todo grid: is the newEntry flag needed? + Object key = event.getKey(); + Object value = event.getRawNewValue(); + // serverPut is called by cacheWriteBeforePut so the new value will not yet be off-heap + // TODO OFFHEAP: verify that the above assertion is true + Object callbackArg = event.getRawCallbackArgument(); + boolean isCreate = event.isCreate(); + Object result = mySRP.put(key, value, event.getDeltaBytes(), event, + op, requireOldValue, expectedOldValue, + callbackArg, isCreate); + // bug #42296, serverproxy returns null when cache is closing + getCancelCriterion().checkCancelInProgress(null); + // if concurrent map operations failed we don't want the region map + // to apply the operation and need to throw an exception + if (op.guaranteesOldValue()) { + if (op != Operation.REPLACE || requireOldValue) { + event.setConcurrentMapOldValue(result); + } + if (op == Operation.PUT_IF_ABSENT) { + if (result != null) { + throw new EntryNotFoundException("entry existed for putIfAbsent"); // customers don't see this exception + } + } else if (op == Operation.REPLACE) { + if (requireOldValue && result == null) { + throw new EntryNotFoundException("entry not found for replace"); + } else if (!requireOldValue) { + if ( !((Boolean)result).booleanValue() ) { + throw new EntryNotFoundException("entry found with wrong value"); // customers don't see this exception + } + } + } + } + } + } + } + + /** + * Destroy an entry on the server given its event. + * @since 5.7 + */ + protected void serverDestroy(EntryEventImpl event, Object expectedOldValue) { + if (event.getOperation().isDistributed()) { + ServerRegionProxy mySRP = getServerProxy(); + if (mySRP != null) { + // send to server + Object key = event.getKey(); + Object callbackArg = event.getRawCallbackArgument(); + Object result = mySRP.destroy(key, expectedOldValue, event.getOperation(), event, callbackArg); + if (result instanceof EntryNotFoundException) { + throw (EntryNotFoundException)result; + } + } + } + } + + /** + * @return true if cacheWrite was performed + * @see DistributedRegion#cacheWriteBeforeRegionDestroy(RegionEventImpl) + */ + boolean cacheWriteBeforeRegionDestroy(RegionEventImpl event) + throws CacheWriterException, TimeoutException + { + boolean result = false; + // copy into local var to prevent race condition + CacheWriter writer = basicGetWriter(); + if (writer != null) { + final long start = getCachePerfStats().startCacheWriterCall(); + try { + writer.beforeRegionDestroy(event); + } + finally { + getCachePerfStats().endCacheWriterCall(start); + } + result = true; + } + serverRegionDestroy(event); + return result; + } + + protected boolean cacheWriteBeforeRegionClear(RegionEventImpl event) + throws CacheWriterException, TimeoutException + { + boolean result = false; + // copy into local var to prevent race condition + CacheWriter writer = basicGetWriter(); + if (writer != null) { + final long start = getCachePerfStats().startCacheWriterCall(); + try { + writer.beforeRegionClear(event); + } + finally { + getCachePerfStats().endCacheWriterCall(start); + } + result = true; + } + serverRegionClear(event); + return result; + } + + /** + * @since 5.7 + */ + void cacheWriteBeforeInvalidate(EntryEventImpl event, boolean invokeCallbacks, boolean forceNewEntry) { + if (!event.getOperation().isLocal() && !event.isOriginRemote()) { + serverInvalidate(event, invokeCallbacks, forceNewEntry); + } + } + + /** + * @see DistributedRegion#cacheWriteBeforePut(EntryEventImpl, Set, CacheWriter, boolean, Object) + * @param event + * @param netWriteRecipients + * @param localWriter + * @param requireOldValue + * @param expectedOldValue + * @throws CacheWriterException + * @throws TimeoutException + */ + void cacheWriteBeforePut(EntryEventImpl event, Set netWriteRecipients, + CacheWriter localWriter, + boolean requireOldValue, + Object expectedOldValue) + throws CacheWriterException, TimeoutException + { + Assert.assertTrue(netWriteRecipients == null); + Operation op = event.getOperation(); + if (!(op == Operation.PUT_IF_ABSENT + || op == Operation.REPLACE) && (localWriter != null) && + !((EntryEventImpl)event).inhibitAllNotifications()) { + final long start = getCachePerfStats().startCacheWriterCall(); + final boolean newEntry = event.getOperation().isCreate(); + try { + if (!newEntry) { + localWriter.beforeUpdate(event); + } + else { + localWriter.beforeCreate(event); + } + } + finally { + getCachePerfStats().endCacheWriterCall(start); + } + } + serverPut(event, requireOldValue, expectedOldValue); + } + + protected void validateArguments(Object key, Object value, + Object aCallbackArgument) + { + validateKey(key); + validateValue(value); + validateCallbackArg(aCallbackArgument); + + } + + protected void validateKey(Object key) + { + if (key == null) { + throw new NullPointerException(LocalizedStrings.LocalRegion_KEY_CANNOT_BE_NULL.toLocalizedString()); + } + + // check validity of key against keyConstraint + if (this.keyConstraint != null) { + if (!this.keyConstraint.isInstance(key)) + throw new ClassCastException(LocalizedStrings.LocalRegion_KEY_0_DOES_NOT_SATISFY_KEYCONSTRAINT_1.toLocalizedString(new Object[] {key.getClass().getName(), this.keyConstraint.getName()})); + } + + // We don't need to check that the key is Serializable. Instead, + // we let the lower-level (data) serialization mechanism take care + // of this for us. See bug 32394. + } + + /** + * Starting in 3.5, we don't check to see if the callback argument is + * Serializable. We instead rely on the actual serialization + * (which happens in-thread with the put) to tell us if there are any + * problems. + */ + protected void validateCallbackArg(Object aCallbackArgument) + { + + } + + /** + * @since 5.0.2 + */ + private final boolean DO_EXPENSIVE_VALIDATIONS = Boolean.getBoolean("gemfire.DO_EXPENSIVE_VALIDATIONS"); + + /** + * the number of tombstone entries in the RegionMap + */ + protected AtomicInteger tombstoneCount = new AtomicInteger(); + + /** a boolean for issuing a client/server configuration mismatch message */ + private boolean concurrencyMessageIssued; + + /** + * Starting in 3.5, we don't check to see if the value is + * Serializable. We instead rely on the actual serialization + * (which happens in-thread with the put) to tell us if there are any + * problems. + */ + protected void validateValue(Object p_value) + { + Object value = p_value; + // check validity of value against valueConstraint + if (this.valueConstraint != null) { + if (value != null) { + if (value instanceof CachedDeserializable) { + if (DO_EXPENSIVE_VALIDATIONS) { + value = ((CachedDeserializable)value).getDeserializedValue(null, null); + } else { + return; + } + } + if (!this.valueConstraint.isInstance(value)) + throw new ClassCastException(LocalizedStrings.LocalRegion_VALUE_0_DOES_NOT_SATISFY_VALUECONSTRAINT_1.toLocalizedString(new Object[] {value.getClass().getName(), this.valueConstraint.getName()})); + } + } + } + + public CachePerfStats getCachePerfStats() { + // return this.cache.getCachePerfStats(); + return this.cachePerfStats; + } + public CachePerfStats getRegionPerfStats() { + return this.cachePerfStats; + } + + /** regions track the number of tombstones their map holds for size calculations */ + public void incTombstoneCount(int delta) { + this.tombstoneCount.addAndGet(delta); + this.cachePerfStats.incTombstoneCount(delta); + + //Fix for 45204 - don't include the tombstones in + //any of our entry count stats. + this.cachePerfStats.incEntryCount(-delta); + if(getDiskRegion() != null) { + getDiskRegion().incNumEntriesInVM(-delta); + } + DiskEntry.Helper.incrementBucketStats(this, -delta/*InVM*/, 0/*OnDisk*/, 0); + } + + public int getTombstoneCount() { + return this.tombstoneCount.get(); + } + + public void scheduleTombstone(RegionEntry entry, VersionTag destroyedVersion) { + if (destroyedVersion == null) { + throw new NullPointerException("destroyed version tag cannot be null"); + } +// Object sync = TombstoneService.DEBUG_TOMBSTONE_COUNT? TombstoneService.debugSync : new Object(); +// lastUnscheduled.set(null); +// synchronized(sync) { + incTombstoneCount(1); +// if (entry instanceof AbstractRegionEntry) { +// AbstractRegionEntry are = (AbstractRegionEntry)entry; +// if (are.isTombstoneScheduled()) { +// log.severe(LocalizedStrings.DEBUG, "Scheduling a tombstone for an entry that is already a tombstone: " + entry, new Exception("stack trace")); +// throw new IllegalStateException("Attempt to schedule a tombstone for a destroyed entry that is already scheduled for expiration"); +// } +// are.setTombstoneScheduled(true); +// } + if (logger.isTraceEnabled(LogMarker.TOMBSTONE_COUNT)) { + logger.trace(LogMarker.TOMBSTONE_COUNT, "scheduling tombstone for {} version={} count is {} entryMap size is {}", + entry.getKey(), entry.getVersionStamp().asVersionTag(), this.tombstoneCount.get(), this.entries.size()/*, new Exception("stack trace")*/); + // this can be useful for debugging tombstone count problems if there aren't a lot of concurrent threads +// if (TombstoneService.DEBUG_TOMBSTONE_COUNT && this.entries instanceof AbstractRegionMap) { +// ((AbstractRegionMap)this.entries).verifyTombstoneCount(tombstoneCount); +// } + } + getGemFireCache().getTombstoneService().scheduleTombstone(this, entry, + destroyedVersion); +// } + } + +// ThreadLocal lastUnscheduled = new ThreadLocal(); +// ThreadLocal lastUnscheduledPlace = new ThreadLocal(); + + public void rescheduleTombstone(RegionEntry entry, VersionTag version) { + Object sync = TombstoneService.DEBUG_TOMBSTONE_COUNT? TombstoneService.debugSync : new Object(); + synchronized(sync) { + unscheduleTombstone(entry, false); // count is off by one, so don't allow validation to take place + scheduleTombstone(entry, version); + } + + } + + public void unscheduleTombstone(RegionEntry entry) { + unscheduleTombstone(entry, true); + } + + private void unscheduleTombstone(RegionEntry entry, boolean validate) { + incTombstoneCount(-1); + if (logger.isTraceEnabled(LogMarker.TOMBSTONE)) { + logger.trace(LogMarker.TOMBSTONE, "unscheduling tombstone for {} count is {} entryMap size is {}", + entry.getKey(), this.tombstoneCount.get(), this.entries.size()/*, new Exception("stack trace")*/); + } + getRegionMap().unscheduleTombstone(entry); + if (logger.isTraceEnabled(LogMarker.TOMBSTONE_COUNT) && validate) { + if (this.entries instanceof AbstractRegionMap) { + ((AbstractRegionMap) this.entries).verifyTombstoneCount(this.tombstoneCount); + } + } + // we don't have to remove the entry from the sweeper since the version has + // changed. It would be costly to iterate over the tombstone list for + // every tombstone exhumed while holding the entry's lock + //this.cache.getTombstoneService().unscheduleTombstone(entry); + } + + /** remove any tombstones from the given member that are <= the given version + * @param eventID event identifier for the GC operation + * @param clientRouting routing info (if null a routing is computed) + */ + public void expireTombstones(Map regionGCVersions, EventID eventID, FilterInfo clientRouting) { + Set keys = null; + if (!this.concurrencyChecksEnabled) { + return; + } + if (!this.versionVector.containsTombstoneGCVersions(regionGCVersions)) { + keys = this.cache.getTombstoneService().gcTombstones(this, regionGCVersions); + if (keys == null) { + // deltaGII prevented tombstone GC + return; + } + } + if (eventID != null) { // bug #50683 - old members might not send an eventID + notifyClientsOfTombstoneGC(regionGCVersions, keys, eventID, clientRouting); + } + } + + public void expireTombstoneKeys(Set tombstoneKeys) { + if (this.concurrencyChecksEnabled) { + this.cache.getTombstoneService().gcTombstoneKeys(this, tombstoneKeys); + } + } + + + /** pass tombstone garbage-collection info to clients + * @param eventID the ID of the event (see bug #50683) + * @param routing routing info (routing is computed if this is null) + */ + protected void notifyClientsOfTombstoneGC(Map regionGCVersions, SetkeysRemoved, EventID eventID, FilterInfo routing) { + if (CacheClientNotifier.getInstance() != null) { + // Only route the event to clients interested in the partitioned region. + // We do this by constructing a region-level event and then use it to + // have the filter profile ferret out all of the clients that have interest + // in this region + FilterProfile fp = getFilterProfile(); + if (fp != null || routing != null) { // null check - fix for bug #45614 + RegionEventImpl regionEvent = new RegionEventImpl(this, Operation.REGION_DESTROY, null, true, getMyId()); + regionEvent.setEventID(eventID); + FilterInfo clientRouting = routing; + if (clientRouting == null) { + clientRouting = fp.getLocalFilterRouting(regionEvent); + } + regionEvent.setLocalFilterInfo(clientRouting); + ClientUpdateMessage clientMessage = ClientTombstoneMessage.gc(this, regionGCVersions, + eventID); + CacheClientNotifier.notifyClients(regionEvent, clientMessage); + } + } + } + + + /** local regions do not perform versioning */ + protected boolean shouldGenerateVersionTag(RegionEntry entry, EntryEventImpl event) { + if (this.getDataPolicy().withPersistence()) { + return true; + } else { + return this.concurrencyChecksEnabled && (entry.getVersionStamp().hasValidVersion() || this.dataPolicy.withReplication()); + } + } + + protected void enableConcurrencyChecks() { + this.concurrencyChecksEnabled = true; + if (this.dataPolicy.withStorage()) { + RegionEntryFactory versionedEntryFactory = this.entries.getEntryFactory().makeVersioned(); + Assert.assertTrue(this.entries.size() == 0, "RegionMap should be empty but was of size:"+this.entries.size()); + this.entries.setEntryFactory(versionedEntryFactory); + createVersionVector(); + } + } + + /** + * validate attributes of subregion being created, sent to parent + * + * @throws IllegalArgumentException + * if attrs is null + * @throws IllegalStateException + * if attributes are invalid + */ + protected void validateSubregionAttributes(RegionAttributes attrs) + { + if (attrs == null) { + throw new IllegalArgumentException(LocalizedStrings.LocalRegion_REGION_ATTRIBUTES_MUST_NOT_BE_NULL.toLocalizedString()); + } + if (this.scope == Scope.LOCAL && attrs.getScope() != Scope.LOCAL) { + throw new IllegalStateException(LocalizedStrings.LocalRegion_A_REGION_WITH_SCOPELOCAL_CAN_ONLY_HAVE_SUBREGIONS_WITH_SCOPELOCAL.toLocalizedString()); + } + } + + /** + * Returns the value of the entry with the given key as it is stored in the + * VM. This means that if the value is invalid, the invalid token will be + * returned. If the value is a {@link CachedDeserializable}received from + * another VM, that object will be returned. If the value does not reside in + * the VM because it has been overflowed to disk, null will be + * returned. This method is intended for testing.testing purposes only. + * + * @throws EntryNotFoundException + * No entry with key exists + * + * @see RegionMap#getEntry + * + * @since 3.2 + */ + public Object getValueInVM(Object key) throws EntryNotFoundException + { + return basicGetValueInVM(key, true/*rememberRead*/); + } + + public Object getValueInVM(EntryEventImpl event) + throws EntryNotFoundException { + return basicGetValueInVM(event.getKey(), true/*rememberRead*/); + } + + /** + * @param rememberRead true if read should be remembered in a transaction + * @since 5.5 + */ + private Object basicGetValueInVM(Object key, boolean rememberRead) + throws EntryNotFoundException + { + return getDataView().getValueInVM(getKeyInfo(key), this, rememberRead); + } + + /** + * @param keyInfo + * @return TODO + */ + @Retained + protected Object nonTXbasicGetValueInVM(KeyInfo keyInfo) { + RegionEntry re = this.entries.getEntry(keyInfo.getKey()); + if (re == null) { + checkEntryNotFound(keyInfo.getKey()); + } + Object v = re.getValueInVM(this); // OFFHEAP returned to callers + if (Token.isRemoved(v)) { + checkEntryNotFound(keyInfo.getKey()); + } + if (v == Token.NOT_AVAILABLE) { + return null; + } + return v; + } + + /** + * This is a test hook method used to find out what keys the current tx + * has read or written. + * @return an unmodifiable set of keys that have been read or written + * by the transaction on this thread. + * @throws IllegalStateException if not tx in progress + * @since 5.5 + */ + public Set testHookTXKeys() { + if (!isTX()) throw new IllegalStateException(LocalizedStrings.LocalRegion_TX_NOT_IN_PROGRESS.toLocalizedString()); + TXStateProxyImpl tx = (TXStateProxyImpl) getTXState(); + if (!tx.isRealDealLocal()) { + return Collections.EMPTY_SET; + } + TXRegionState txr = txReadRegion(); + if (txr == null) { + return Collections.EMPTY_SET; + } else { + return txr.getEntryKeys(); + } + } + + /** + * Returns the value of the entry with the given key as it is stored on disk. + * While the value may be read from disk, it is not stored into the + * entry in the VM. This method is intended for testing purposes only. + * DO NOT use in product code else it will break SQLFabric that has cases + * where routing object is not part of only the key. + * + * @throws EntryNotFoundException + * No entry with key exists + * @throws IllegalStateException + * If this region does not write to disk + * + * @see RegionEntry#getValueOnDisk + * + * @since 3.2 + */ + public Object getValueOnDisk(Object key) throws EntryNotFoundException + { + // Ok for this to ignore tx state + RegionEntry re = this.entries.getEntry(key); + if (re == null) { + throw new EntryNotFoundException(key.toString()); + } + return re.getValueOnDisk(this); + } + + /** + * Gets the value from VM, if present, otherwise from disk without fault in. + * + * @param key + * @return Object + * @throws EntryNotFoundException + */ + public Object getValueInVMOrDiskWithoutFaultIn(Object key) throws EntryNotFoundException { + RegionEntry re = this.entries.getEntry(key); + if (re == null) { + throw new EntryNotFoundException(key.toString()); + } + return re.getValueInVMOrDiskWithoutFaultIn(this); + } + + /** + * Get the serialized bytes from disk. This method only looks for the value on + * the disk, ignoring heap data. This method is intended for testing purposes + * only. DO NOT use in product code else it will break SQLFabric that has + * cases where routing object is not part of only the key. + * + * @param key the object whose hashCode is used to find the value + * @return either a byte array, a CacheDeserializable with the serialized value, + * or null if the entry exists but no value data exists. + * @throws IllegalStateException when the region is not persistent + * @throws EntryNotFoundException if there is no entry for the given key + * @since gemfire5.7_hotfix + */ + public Object getSerializedValueOnDisk(Object key) throws EntryNotFoundException + { + // Ok for this to ignore tx state + RegionEntry re = this.entries.getEntry(key); + if (re == null) { + throw new EntryNotFoundException(key.toString()); + } + Object result = re.getSerializedValueOnDisk(this); + if (Token.isInvalid(result)) { + result = null; + } else if (Token.isRemoved(result)) { + throw new EntryNotFoundException(key.toString()); + } + return result; + } + + /** + * Returns the value of the entry with the given key as it is stored present + * in the buffer or disk. While the value may be read from disk or buffer, + * it is not + * stored into the entry in the VM. This is different from getValueonDisk in that + * it checks for a value both in asynch buffers ( subject to asynch mode + * enabled) as well as Disk + * + * @throws EntryNotFoundException + * No entry with key exists + * @throws IllegalStateException + * If this region does not write to disk + * + * @see RegionEntry#getValueOnDisk + * + * @since 5.1 + */ + public Object getValueOnDiskOrBuffer(Object key) + throws EntryNotFoundException { + // Ok for this to ignore tx state + RegionEntry re = this.entries.getEntry(key); + if (re == null) { + throw new EntryNotFoundException(key.toString()); + } + return re.getValueOnDiskOrBuffer(this); + } + + /** + * Does a get that attempts to not fault values in from disk or make the entry + * the most recent in the LRU. + * + * Originally implemented in WAN gateway code and moved here in the sqlfire + * "cheetah" branch. + * @param adamant fault in and affect LRU as a last resort + * @param allowTombstone also return Token.TOMBSTONE if the entry is deleted + * @param serializedFormOkay if the serialized form can be returned + */ + public Object getNoLRU(Object k, boolean adamant, boolean allowTombstone, boolean serializedFormOkay) { + Object o = null; + try { + o = getValueInVM(k); // OFFHEAP deserialize + if (o == null) { + // must be on disk + // fault it in w/o putting it back in the region + o = getValueOnDiskOrBuffer(k); + if (o == null) { + // try memory one more time in case it was already faulted back in + o = getValueInVM(k); // OFFHEAP deserialize + if (o == null) { + if (adamant) { + o = get(k); + } + } else { + if (!serializedFormOkay && (o instanceof CachedDeserializable)) { + o = ((CachedDeserializable)o).getDeserializedValue(this, + getRegionEntry(k)); + } + } + } + } else { + if (!serializedFormOkay && (o instanceof CachedDeserializable)) { + o = ((CachedDeserializable)o).getDeserializedValue(this, + getRegionEntry(k)); + } + } + } catch (EntryNotFoundException ok) { + // just return null; + } + if (o == Token.TOMBSTONE && !allowTombstone) { + o = null; + } + return o; + } + + /** + * Bump this number any time an incompatible change is made to the snapshot + * format. + */ + private static final byte SNAPSHOT_VERSION = 1; + + private static final byte SNAPSHOT_VALUE_OBJ = 23; + + private static final byte SNAPSHOT_VALUE_INVALID = 24; + + private static final byte SNAPSHOT_VALUE_LOCAL_INVALID = 25; + + public void saveSnapshot(OutputStream outputStream) throws IOException + { + if (isProxy()) { + throw new UnsupportedOperationException(LocalizedStrings.LocalRegion_REGIONS_WITH_DATAPOLICY_0_DO_NOT_SUPPORT_SAVESNAPSHOT.toLocalizedString(getDataPolicy())); + } + checkForNoAccess(); + DataOutputStream out = new DataOutputStream(outputStream); + try { + out.writeByte(SNAPSHOT_VERSION); + for (Iterator itr = entries(false).iterator(); itr.hasNext();) { + Region.Entry entry = (Region.Entry)itr.next(); + try { + Object key = entry.getKey(); + Object value = entry.getValue(); + if (value == Token.TOMBSTONE) { + continue; + } + DataSerializer.writeObject(key, out); + if (value == null) { // fix for bug 33311 + LocalRegion.NonTXEntry lre = (LocalRegion.NonTXEntry)entry; + RegionEntry re = lre.getRegionEntry(); + value = re.getValue(this); // OFFHEAP: incrc, copy info heap cd for serialization, decrc + if (value == Token.INVALID) { + out.writeByte(SNAPSHOT_VALUE_INVALID); + } + else if (value == Token.LOCAL_INVALID) { + out.writeByte(SNAPSHOT_VALUE_LOCAL_INVALID); + } + else { + out.writeByte(SNAPSHOT_VALUE_OBJ); + DataSerializer.writeObject(value, out); + } + } + else { + out.writeByte(SNAPSHOT_VALUE_OBJ); + DataSerializer.writeObject(value, out); + } + } + catch (EntryDestroyedException e) { + // continue to next entry + } + } + // write NULL terminator + DataSerializer.writeObject(null, out); + } + finally { + out.close(); + } + } + + public void loadSnapshot4ConvertTo65(InputStream inputStream) throws CacheWriterException, TimeoutException, ClassNotFoundException, IOException { + isConversion.set(Boolean.valueOf(true)); + try { + loadSnapshot(inputStream); + } finally { + isConversion.remove(); + } + } + + public void loadSnapshot(InputStream inputStream) + throws CacheWriterException, TimeoutException, ClassNotFoundException, + IOException + { + if (isProxy()) { + throw new UnsupportedOperationException(LocalizedStrings.LocalRegion_REGIONS_WITH_DATAPOLICY_0_DO_NOT_SUPPORT_LOADSNAPSHOT.toLocalizedString(getDataPolicy())); + } + if (inputStream == null) { + throw new NullPointerException(LocalizedStrings.LocalRegion_INPUTSTREAM_MUST_NOT_BE_NULL.toLocalizedString()); + } + checkReadiness(); + checkForLimitedOrNoAccess(); + RegionEventImpl event = new RegionEventImpl(this, + Operation.REGION_LOAD_SNAPSHOT, null, false, getMyId(), + generateEventID()/* generate EventID */); + reinitialize(inputStream, event); + } + + public void registerInterest(Object key) + { + registerInterest(key, false); + } + + public void registerInterest(Object key, boolean isDurable) { + registerInterest(key, isDurable, true); + } + + public void registerInterest(Object key, boolean isDurable, + boolean receiveValues) + { + registerInterest(key, InterestResultPolicy.DEFAULT, isDurable, receiveValues); + } + + public void startRegisterInterest() { + getImageState().writeLockRI(); + try { + cache.registerInterestStarted(); + this.riCnt++; + } finally { + getImageState().writeUnlockRI(); + } + } + + public void finishRegisterInterest() { + if (Boolean.getBoolean("gemfire.testing.slow-interest-recovery")) { + if(logger.isDebugEnabled()) { + logger.debug("slowing interest recovery..."); + } + try { Thread.sleep(20000); } catch (InterruptedException e) { Thread.currentThread().interrupt(); return; } + if(logger.isDebugEnabled()) { + logger.debug("done slowing interest recovery"); + } + } + boolean gotLock = false; + try { + getImageState().writeLockRI(); + gotLock = true; + this.riCnt--; + Assert.assertTrue(this.riCnt >= 0 , "register interest count can not be < 0 "); + if (this.riCnt == 0) { + // remove any destroyed entries from the region and clear the hashset + destroyEntriesAndClearDestroyedKeysSet(); + } + } finally { + cache.registerInterestCompleted(); + if (gotLock) { + getImageState().writeUnlockRI(); + } + } + } + + // TODO this is distressingly similar to code in the client.internal package + private void processSingleInterest(Object key, int interestType, + InterestResultPolicy pol, boolean isDurable, + boolean receiveUpdatesAsInvalidates) + { + final ServerRegionProxy proxy = getServerProxy(); + if (proxy == null) { + throw new UnsupportedOperationException(LocalizedStrings.LocalRegion_INTEREST_REGISTRATION_REQUIRES_A_POOL.toLocalizedString()); + } + if (isDurable && !proxy.getPool().isDurableClient()) { + throw new IllegalStateException(LocalizedStrings.LocalRegion_DURABLE_FLAG_ONLY_APPLICABLE_FOR_DURABLE_CLIENTS.toLocalizedString()); + } + if (!proxy.getPool().getSubscriptionEnabled()) { + String msg = "Interest registration requires a pool whose queue is enabled."; + throw new SubscriptionNotEnabledException(msg); + } + + if (getAttributes().getDataPolicy().withReplication() // fix for bug 36185 + && !getAttributes().getScope().isLocal()) { // fix for bug 37692 + throw new UnsupportedOperationException(LocalizedStrings.LocalRegion_INTEREST_REGISTRATION_NOT_SUPPORTED_ON_REPLICATED_REGIONS.toLocalizedString()); + } + + if (key == null) + throw new IllegalArgumentException(LocalizedStrings.LocalRegion_INTEREST_KEY_MUST_NOT_BE_NULL.toLocalizedString()); + // Sequence of events, on a single entry: + // 1. Client puts value (a). + // 2. Server updates with value (b). Client never gets the update, + // because it isn't interested in that key. + // 3. Client registers interest. + // At this point, there is an entry in the local cache, but it is + // inconsistent with the server. + // + // Because of this, we must _always_ destroy and refetch affected values + // during registerInterest. + startRegisterInterest(); + try { + List serverKeys; + + this.clearKeysOfInterest(key, interestType, pol); + // Checking for the Dunit test(testRegisterInterst_Destroy_Concurrent) flag + if (PoolImpl.BEFORE_REGISTER_CALLBACK_FLAG) { + ClientServerObserver bo = ClientServerObserverHolder.getInstance(); + bo.beforeInterestRegistration(); + }// Test Code Ends + final byte regionDataPolicy = getAttributes().getDataPolicy().ordinal; + switch (interestType) { + case InterestType.FILTER_CLASS: + serverKeys = proxy.registerInterest(key, interestType, pol, + isDurable, receiveUpdatesAsInvalidates, regionDataPolicy); + break; + case InterestType.KEY: + + if (key instanceof String && key.equals("ALL_KEYS")) { + + serverKeys = proxy.registerInterest(".*", + InterestType.REGULAR_EXPRESSION, + pol, + isDurable, + receiveUpdatesAsInvalidates, + regionDataPolicy); + } + else { + if (key instanceof List) { + serverKeys = proxy.registerInterestList((List)key, pol, + isDurable, receiveUpdatesAsInvalidates, regionDataPolicy); + } else { + serverKeys = proxy.registerInterest(key, InterestType.KEY, pol, + isDurable, receiveUpdatesAsInvalidates, regionDataPolicy); + } + } + break; + case InterestType.OQL_QUERY: + serverKeys = proxy.registerInterest(key, InterestType.OQL_QUERY, pol, + isDurable, receiveUpdatesAsInvalidates, regionDataPolicy); + break; + case InterestType.REGULAR_EXPRESSION: { + String regex = (String)key; + // compile regex throws java.util.regex.PatternSyntaxException if invalid + // we do this before sending to the server because it's more efficient + // and the client is not receiving exception messages properly + Pattern.compile(regex); + serverKeys = proxy.registerInterest(regex, + InterestType.REGULAR_EXPRESSION, + pol, + isDurable, + receiveUpdatesAsInvalidates, + regionDataPolicy); + break; + } + default: + throw new InternalGemFireError(LocalizedStrings.LocalRegion_UNKNOWN_INTEREST_TYPE.toLocalizedString()); + } + boolean finishedRefresh = false; + try { + refreshEntriesFromServerKeys(null, serverKeys, pol); + + finishedRefresh = true; + } + finally { + if (!finishedRefresh) { + // unregister before throwing the exception caused by the refresh + switch (interestType) { + case InterestType.FILTER_CLASS: + proxy.unregisterInterest(key, interestType, false, false); + break; + case InterestType.KEY: + if (key instanceof String && key.equals("ALL_KEYS")) { + proxy.unregisterInterest(".*", InterestType.REGULAR_EXPRESSION, false, false); + } + else if (key instanceof List) { + proxy.unregisterInterestList((List)key, false, false); + } else { + proxy.unregisterInterest(key, InterestType.KEY, false, false); + } + break; + case InterestType.OQL_QUERY: + proxy.unregisterInterest(key, InterestType.OQL_QUERY, false, false); + break; + case InterestType.REGULAR_EXPRESSION: { + proxy.unregisterInterest(key, InterestType.REGULAR_EXPRESSION, false, false); + break; + } + default: + throw new InternalGemFireError(LocalizedStrings.LocalRegion_UNKNOWN_INTEREST_TYPE.toLocalizedString()); + } + } + } + } + finally { + finishRegisterInterest(); + } + } + + public void registerInterest(Object key, InterestResultPolicy policy) + { + registerInterest(key, policy, false); + } + public void registerInterest(Object key, InterestResultPolicy policy, + boolean isDurable) { + registerInterest(key, policy, isDurable, true); + } + public void registerInterest(Object key, InterestResultPolicy policy, + boolean isDurable, boolean receiveValues) + { + processSingleInterest(key, InterestType.KEY, policy, isDurable, !receiveValues); + } + + public void registerInterestRegex(String regex) + { + registerInterestRegex(regex, false); + } + + public void registerInterestRegex(String regex, boolean isDurable) { + registerInterestRegex(regex, InterestResultPolicy.DEFAULT, isDurable, true); + } + public void registerInterestRegex(String regex, boolean isDurable, + boolean receiveValues) + { + registerInterestRegex(regex, InterestResultPolicy.DEFAULT, isDurable, receiveValues); + } + public void registerInterestRegex(String regex, InterestResultPolicy policy) + { + registerInterestRegex(regex, policy, false); + } + + public void registerInterestRegex(String regex, InterestResultPolicy policy, + boolean isDurable) { + registerInterestRegex(regex, policy, isDurable, true); + } + public void registerInterestRegex(String regex, InterestResultPolicy policy, + boolean isDurable, boolean receiveValues) + { + processSingleInterest(regex, InterestType.REGULAR_EXPRESSION, policy, + isDurable, !receiveValues); + } + public void registerInterestFilter(String className) + { + registerInterestFilter(className, false); + } + public void registerInterestFilter(String className, boolean isDurable) { + registerInterestFilter(className, isDurable, true); + } + public void registerInterestFilter(String className, boolean isDurable, + boolean receiveValues) + { + processSingleInterest(className, InterestType.FILTER_CLASS, + InterestResultPolicy.DEFAULT, isDurable, !receiveValues); + } + public void registerInterestOQL(String query) + { + registerInterestOQL(query, false); + } + public void registerInterestOQL(String query, boolean isDurable) { + registerInterestOQL(query, isDurable, true); + } + public void registerInterestOQL(String query, boolean isDurable, + boolean receiveValues) + { + processSingleInterest(query, InterestType.OQL_QUERY, + InterestResultPolicy.DEFAULT, isDurable, !receiveValues); + } + + public void unregisterInterest(Object key) + { + ServerRegionProxy proxy = getServerProxy(); + if (proxy != null) { + // Keep support for "ALL_KEYS" in 4.2.x + if (key instanceof String && key.equals("ALL_KEYS")) { + proxy.unregisterInterest(".*", InterestType.REGULAR_EXPRESSION, false, false); + } + else if (key instanceof List) { + proxy.unregisterInterestList((List)key, false, false); + } + else { + proxy.unregisterInterest(key, InterestType.KEY, false, false); + } + } + else { + throw new UnsupportedOperationException(LocalizedStrings.LocalRegion_INTEREST_UNREGISTRATION_REQUIRES_A_POOL.toLocalizedString()); + } + } + + public void unregisterInterestRegex(String regex) + { + ServerRegionProxy proxy = getServerProxy(); + if (proxy != null) { + proxy.unregisterInterest(regex, InterestType.REGULAR_EXPRESSION, false, false); + } + else { + throw new UnsupportedOperationException(LocalizedStrings.LocalRegion_INTEREST_UNREGISTRATION_REQUIRES_A_POOL.toLocalizedString()); + } + } + + public void unregisterInterestFilter(String className) { + ServerRegionProxy proxy = getServerProxy(); + if (proxy != null) { + proxy.unregisterInterest(className, InterestType.FILTER_CLASS, false, false); + } + else { + throw new UnsupportedOperationException(LocalizedStrings.LocalRegion_INTEREST_UNREGISTRATION_REQUIRES_A_POOL.toLocalizedString()); + } + } + + public void unregisterInterestOQL(String query) + { + ServerRegionProxy proxy = getServerProxy(); + if (proxy != null) { + proxy.unregisterInterest(query, InterestType.OQL_QUERY, false, false); + } + else { + throw new UnsupportedOperationException(LocalizedStrings.LocalRegion_INTEREST_UNREGISTRATION_REQUIRES_A_POOL.toLocalizedString()); + } + } + + public List getInterestList() + { + ServerRegionProxy proxy = getServerProxy(); + if (proxy != null) { + return proxy.getInterestList(InterestType.KEY); + } + else { + throw new UnsupportedOperationException(LocalizedStrings.LocalRegion_INTEREST_UNREGISTRATION_REQUIRES_A_POOL.toLocalizedString()); + } + } + + /** finds the keys in this region using the given interestType and argument. Currently only + * InterestType.REGULAR_EXPRESSION and InterestType.KEY are supported + * + * @param interestType an InterestType value + * @param interestArg the associated argument (regex string, key or key list, etc) + * @param allowTombstones whether to return destroyed entries + * @return a set of the keys matching the given criterion + */ + public Set getKeysWithInterest(int interestType, Object interestArg, boolean allowTombstones) + { + Set ret = null; + if (interestType == InterestType.REGULAR_EXPRESSION) { + if (interestArg == null || ".*".equals(interestArg)) { + ret = new HashSet(keySet(allowTombstones)); + } + else { + ret = new HashSet(); + // Handle the regex pattern + if (!(interestArg instanceof String)) { + throw new IllegalArgumentException(LocalizedStrings.AbstractRegion_REGULAR_EXPRESSION_ARGUMENT_WAS_NOT_A_STRING.toLocalizedString()); + } + Pattern keyPattern = Pattern.compile((String)interestArg); + for (Iterator it = this.keySet(allowTombstones).iterator(); it.hasNext();) { + Object entryKey = it.next(); + if(!(entryKey instanceof String)) { + //key is not a String, cannot apply regex to this entry + continue; + } + if(!keyPattern.matcher((String) entryKey).matches()) { + //key does not match the regex, this entry should not be returned. + continue; + } + ret.add(entryKey); + } + } + } + else if (interestType == InterestType.KEY) { + if (interestArg instanceof List) { + ret = new HashSet(); // TODO optimize initial size + List keyList = (List)interestArg; + for (Iterator it = keyList.iterator(); it.hasNext();) { + Object entryKey = it.next(); + if (this.containsKey(entryKey) || (allowTombstones && this.containsTombstone(entryKey))) { + ret.add(entryKey); + } + } + } + else { + ret = new HashSet(); + if (this.containsKey(interestArg) || (allowTombstones && this.containsTombstone(interestArg))) { + ret.add(interestArg); + } + } + } + else if (interestType == InterestType.FILTER_CLASS) { + throw new UnsupportedOperationException(LocalizedStrings.AbstractRegion_INTERESTTYPEFILTER_CLASS_NOT_YET_SUPPORTED.toLocalizedString()); + } + else if (interestType == InterestType.OQL_QUERY) { + throw new UnsupportedOperationException(LocalizedStrings.AbstractRegion_INTERESTTYPEOQL_QUERY_NOT_YET_SUPPORTED.toLocalizedString()); + } + else { + throw new IllegalArgumentException(LocalizedStrings.AbstractRegion_UNSUPPORTED_INTEREST_TYPE_0.toLocalizedString(Integer.valueOf(interestType))); + } + return ret; + } + + public List getInterestListRegex() + { + ServerRegionProxy proxy = getServerProxy(); + if (proxy != null) { + return proxy.getInterestList(InterestType.REGULAR_EXPRESSION); + } + else { + throw new UnsupportedOperationException( LocalizedStrings.LocalRegion_INTEREST_LIST_RETRIEVAL_REQUIRES_A_POOL.toLocalizedString()); + } + } + + public List getInterestListFilters() + { + ServerRegionProxy proxy = getServerProxy(); + if (proxy != null) { + return proxy.getInterestList(InterestType.FILTER_CLASS); + } + else { + throw new UnsupportedOperationException( LocalizedStrings.LocalRegion_INTEREST_LIST_RETRIEVAL_REQUIRES_A_POOL.toLocalizedString()); + } + } + + public List getInterestListOQL() + { + ServerRegionProxy proxy = getServerProxy(); + if (proxy != null) { + return proxy.getInterestList(InterestType.OQL_QUERY); + } + else { + throw new UnsupportedOperationException( LocalizedStrings.LocalRegion_INTEREST_LIST_RETRIEVAL_REQUIRES_A_POOL.toLocalizedString()); + } + } + + public Set keySetOnServer() { + ServerRegionProxy proxy = getServerProxy(); + if (proxy != null) { + return proxy.keySet(); + } else { + throw new UnsupportedOperationException(LocalizedStrings.LocalRegion_SERVER_KEYSET_REQUIRES_A_POOL.toLocalizedString()); + } + } + + public boolean containsKeyOnServer(Object key) { + checkReadiness(); + checkForNoAccess(); + ServerRegionProxy proxy = getServerProxy(); + if (proxy != null) { + return proxy.containsKey(key); + } else { + throw new UnsupportedOperationException(LocalizedStrings.LocalRegion_SERVER_KEYSET_REQUIRES_A_POOL.toLocalizedString()); + } + } + + /** + * WARNING: this method is overridden in subclasses. + * + * @param key + * @see DistributedRegion#localDestroyNoCallbacks(Object) + */ + protected void localDestroyNoCallbacks(Object key) + { + if(logger.isDebugEnabled()) { + logger.debug("localDestroyNoCallbacks key={}", key); + } + checkReadiness(); + validateKey(key); + EntryEventImpl event = EntryEventImpl.create(this, Operation.LOCAL_DESTROY, + key, false, getMyId(), false /* generateCallbacks */, true); + try { + basicDestroy(event, + false, + null); // expectedOldValue + } + catch (CacheWriterException e) { + // cache writer not called + throw new Error(LocalizedStrings.LocalRegion_CACHE_WRITER_SHOULD_NOT_HAVE_BEEN_CALLED_FOR_LOCALDESTROY.toLocalizedString(), e); + } + catch (TimeoutException e) { + // no distributed lock + throw new Error(LocalizedStrings.LocalRegion_NO_DISTRIBUTED_LOCK_SHOULD_HAVE_BEEN_ATTEMPTED_FOR_LOCALDESTROY.toLocalizedString(), e); + } + catch (EntryNotFoundException e) { + // not a problem + } finally { + event.release(); + } + } + + /** + * Do localDestroy on a list of keys, if they exist + * + * @param keys + * the list of arrays of keys to invalidate + * @see #registerInterest(Object) + */ + private void clearViaList(List keys) + { + for (Iterator it = this.entries(false).iterator(); it.hasNext();) { + Region.Entry entry = (Region.Entry)it.next(); + try { + Object entryKey = entry.getKey(); + boolean match = false; + for (Iterator it2 = keys.iterator(); it2.hasNext();) { + Object k = it2.next(); + if (entryKey.equals(k)) { + match = true; + break; + } + } // for + if (!match) { + continue; + } + localDestroyNoCallbacks(entryKey); + } + catch (EntryDestroyedException ignore) { + // ignore to fix bug 35534 + } + } + } + + /** + * do a localDestroy on all matching keys + * + * @param key + * the regular expression to match on + * @see #registerInterestRegex(String) + */ + private void clearViaRegEx(String key) + { + // @todo: if (key.equals(".*)) then cmnClearRegionNoCallbacks + Pattern keyPattern = Pattern.compile(key); + for (Iterator it = this.entries(false).iterator(); it.hasNext();) { + Region.Entry entry = (Region.Entry)it.next(); + try { + Object entryKey = entry.getKey(); + if (!(entryKey instanceof String)) + continue; + if (!keyPattern.matcher((String)entryKey).matches()) { + //key does not match the regex, this entry should not be returned. + continue; + } + localDestroyNoCallbacks(entryKey); + } + catch (EntryDestroyedException ignore) { + // ignore to fix bug 35534 + } + } + } + + /** + * do a localDestroy on all matching keys + * + * @param key + * the regular expression to match on + * @see #registerInterestFilter(String) + */ + private void clearViaFilterClass(String key) + { + Class filterClass; + InterestFilter filter; + try { + filterClass = ClassLoadUtil.classFromName(key); + filter = (InterestFilter)filterClass.newInstance(); + } + catch (ClassNotFoundException cnfe) { + throw new RuntimeException(LocalizedStrings.LocalRegion_CLASS_0_NOT_FOUND_IN_CLASSPATH.toLocalizedString(key), cnfe); + } + catch (Exception e) { + throw new RuntimeException(LocalizedStrings.LocalRegion_CLASS_0_COULD_NOT_BE_INSTANTIATED.toLocalizedString(key), e); + } + + for (Iterator it = this.entries(false).iterator(); it.hasNext();) { + Region.Entry entry = (Region.Entry)it.next(); + try { + Object entryKey = entry.getKey(); + if (!(entryKey instanceof String)) + continue; + InterestEvent e = new InterestEvent(entryKey, entry.getValue(), true); + if (!filter.notifyOnRegister(e)) { + //the filter does not want to know about this entry, so skip it. + continue; + } + localDestroyNoCallbacks(entryKey); + } + catch (EntryDestroyedException ignore) { + // ignore to fix bug 35534 + } + } + } + + /** + * Do a localDestroy of all matching keys + * + * @param query + * @see #registerInterestOQL(String) + */ + private void clearViaQuery(String query) + { + throw new InternalGemFireError(LocalizedStrings.LocalRegion_NOT_YET_SUPPORTED.toLocalizedString()); + } + + /** + * Refresh local entries based on server's list of keys + * @param serverKeys + */ + public void refreshEntriesFromServerKeys(Connection con, List serverKeys, + InterestResultPolicy pol) + { + ServerRegionProxy proxy = getServerProxy(); + if (logger.isDebugEnabled()) { + logKeys(serverKeys, pol); + } + + if (pol == InterestResultPolicy.NONE) { + return; // done + } + + if(logger.isDebugEnabled()) { + logger.debug("refreshEntries region={}", getFullPath()); + } + for (Iterator it = serverKeys.iterator(); it.hasNext();) { + ArrayList keysList = (ArrayList)it.next(); + // The chunk can contain null data if there are no entries on the server + // corresponding to the requested keys + if (keysList == null) { + continue; + } + // int numberOfResults = keysList.size(); + if(EntryLogger.isEnabled()) { + if(con != null) { + Endpoint endpoint = con.getEndpoint(); + if(endpoint != null) { + EntryLogger.setSource(endpoint.getMemberId(), "RIGII"); + } + } + } + try { + ArrayList list = new ArrayList(keysList); + if (pol != InterestResultPolicy.KEYS_VALUES) { + for (Iterator it2 = keysList.iterator(); it2.hasNext();) { + Object currentKey = it2.next(); + // Dont apply riResponse if the entry was destroyed when + // ri is in progress + if (currentKey == null || getImageState().hasDestroyedEntry(currentKey)){ + list.remove(currentKey); + } + } + } + if (pol == InterestResultPolicy.KEYS) { + // Attempt to create an invalid in without overwriting + if (!isProxy()) { + for (Iterator it2 = list.iterator(); it2.hasNext();) { + Object currentKey = it2.next(); + entries.initialImagePut(currentKey, 0, Token.LOCAL_INVALID, false, + false, null, null, false); + + } + } + // Size statistics don't take key into account, so we don't + // need to modify the region's size. + } + else if(!list.isEmpty()) { + Assert.assertTrue(pol == InterestResultPolicy.KEYS_VALUES); +// for (Iterator it2 = list.iterator(); it2.hasNext();) { +// Object currentKey = ((Entry)it2.next()).getKey(); +// localDestroyNoCallbacks(currentKey); +// } + VersionedObjectList values = (VersionedObjectList)list.get(0); // proxy.getAllOnPrimaryForRegisterInterest(con, list); + if(logger.isDebugEnabled()) { + logger.debug("processing interest response: {}", values.size()); + } + VersionedObjectList.Iterator listIt = values.iterator(); + while (listIt.hasNext()) { + VersionedObjectList.Entry entry = listIt.next(); + Object currentKey = entry.getKey(); + if (currentKey == null || getImageState().hasDestroyedEntry(currentKey)) { + continue; + } + Object val = entry.getObject(); + boolean isBytes = entry.isBytes(); + boolean isKeyOnServer = !entry.isKeyNotOnServer(); + boolean isTombstone = this.concurrencyChecksEnabled + && entry.isKeyNotOnServer() + && (entry.getVersionTag() != null); + final VersionTag tag = entry.getVersionTag(); + if (val instanceof Throwable) { + logger.warn(LocalizedMessage.create(LocalizedStrings.LocalRegion_CAUGHT_THE_FOLLOWING_EXCEPTION_FOR_KEY_0_WHILE_PERFORMING_A_REMOTE_GETALL, + currentKey), (Throwable)val); + localDestroyNoCallbacks(currentKey); + continue; + } else { + if(logger.isDebugEnabled()) { + logger.debug("refreshEntries key={} value={} version={}", currentKey, entry, tag); + } + if (tag == null) { // no version checks + localDestroyNoCallbacks(currentKey); + } + } + + if(val instanceof byte[] && !isBytes) { + val = CachedDeserializableFactory.create((byte[]) val); + } + + if (isTombstone) { + assert val == null : "server returned a value for a destroyed entry"; + val = Token.TOMBSTONE; + } + + if (val != null || isTombstone) { + // Sneakily drop in the value into our local cache, + // but don't overwrite + if (!isProxy()) { + entries.initialImagePut(currentKey, 0, val, false, false, tag, null, false); + } + } + else { + RegionEntry re = entries.getEntry(currentKey); + if (!isProxy() && isKeyOnServer) { + entries.initialImagePut(currentKey, 0, Token.LOCAL_INVALID, + false,false, tag, null, false); + } + else { + if (re != null) { + synchronized (re) { + if (re.isDestroyedOrRemovedButNotTombstone()) { + entries.removeEntry(currentKey, re, false); + } + } + } + } + // In this case, if we didn't overwrite, we don't have a local + // value, so no size change needs to be recorded. + } + } + } + } + catch (DiskAccessException dae) { + this.handleDiskAccessException(dae); + throw dae; + } finally { + EntryLogger.clearSource(); + } + } // for + } + + private void logKeys(List serverKeys, InterestResultPolicy pol) + { + int totalKeys = 0; + StringBuffer buffer = new StringBuffer(); + for (Iterator it = serverKeys.iterator(); it.hasNext();) { + ArrayList keysList = (ArrayList)it.next(); + // The chunk can contain null data if there are no entries on the server + // corresponding to the requested keys + // TODO is this still possible? + if (keysList == null) + continue; + int numThisChunk = keysList.size(); + totalKeys += numThisChunk; + for (Iterator it2 = keysList.iterator(); it2.hasNext();) { + Object key = it2.next(); + if (key != null) { + if (key instanceof VersionedObjectList) { + Set keys = ((VersionedObjectList)key).keySet(); + for (Object k : keys) { + buffer.append(" " + k).append("\n"); + } + } else { + buffer.append(" " + key).append("\n"); + } + } + } + } // for + if(logger.isDebugEnabled()) { + logger.debug("{} refreshEntriesFromServerKeys count={} policy={}\n{}", this, totalKeys, pol, buffer); + } + } + /** + * Remove values in local cache before registering interest + * + * @param key + * the interest key + * @param interestType + * the interest type from {@link InterestType} + * @param pol + * the policy from {@link InterestResultPolicy} + */ + public void clearKeysOfInterest(Object key, int interestType, + InterestResultPolicy pol) + { + switch (interestType) { + case InterestType.FILTER_CLASS: + clearViaFilterClass((String)key); + break; + case InterestType.KEY: + if (key instanceof String && key.equals("ALL_KEYS")) + clearViaRegEx(".*"); + else if (key instanceof List) + clearViaList((List)key); + else + localDestroyNoCallbacks(key); + break; + case InterestType.OQL_QUERY: + clearViaQuery((String)key); + break; + case InterestType.REGULAR_EXPRESSION: + clearViaRegEx((String)key); + break; + default: + throw new InternalGemFireError(LocalizedStrings.LocalRegion_UNKNOWN_INTEREST_TYPE.toLocalizedString()); + } + } + + //////////////////// Package Methods //////////////////////////////////////// + + /** + * Destroys and recreates this region. If this is triggered by loadSnapshot + * inputStream will be supplied. If this is triggered by LossAction of + * reinitialize then inputStream will be null, and the region will go through + * regular GetInitalImage if it is a mirrored replicate. + *

+ * Acquires and releases the DestroyLock. + * + * @since 5.0 + */ + void reinitialize(InputStream inputStream, RegionEventImpl event) + throws TimeoutException, IOException, ClassNotFoundException + { + acquireDestroyLock(); + try { + reinitialize_destroy(event); + recreate(inputStream, null); + } + finally { + releaseDestroyLock(); + } + } + + /** must be holding destroy lock */ + void reinitializeFromImageTarget(InternalDistributedMember imageTarget) + throws TimeoutException, IOException, ClassNotFoundException + { + Assert.assertTrue(imageTarget != null); + recreate(null, imageTarget); + } + + /** + * Returns true if this region was reinitialized, e.g. a snapshot was loaded, + * and this is the recreated region + */ + boolean reinitialized_new() + { + return this.reinitialized_new; + } + + /** must be holding destroy lock */ + void reinitialize_destroy(RegionEventImpl event) throws CacheWriterException, + TimeoutException + { + final boolean cacheWrite = !event.originRemote; + // register this region as reinitializing + this.cache.regionReinitializing(getFullPath()); + basicDestroyRegion(event, cacheWrite, false/* lock */, true); + } + + /** must be holding destroy lock */ + private void recreate(InputStream inputStream, + InternalDistributedMember imageTarget) throws TimeoutException, + IOException, ClassNotFoundException + { + String thePath = getFullPath(); + Region newRegion = null; + // recreate new region with snapshot data + + try { + LocalRegion parent = this.parentRegion; + boolean getDestroyLock = false; + // If specified diskDir in DEFAULT diskstore, we should not use null + // as diskstore name any more + if (this.dsi!=null && this.dsi.getName().equals(DiskStoreFactory.DEFAULT_DISK_STORE_NAME) + && this.diskStoreName == null && !useDefaultDiskStore()) { + this.diskStoreName = this.dsi.getName(); + } + RegionAttributes attrs = this; + InternalRegionArguments iargs = new InternalRegionArguments() + .setDestroyLockFlag(getDestroyLock) + .setSnapshotInputStream(inputStream) + .setImageTarget(imageTarget) + .setRecreateFlag(true); + if (this instanceof BucketRegion) { + BucketRegion me = (BucketRegion) this; + iargs.setPartitionedRegionBucketRedundancy(me.getRedundancyLevel()); + } + + if (parent == null) { + newRegion = this.cache.createVMRegion(this.regionName, attrs, iargs); + } + else { + newRegion = parent.createSubregion(this.regionName, attrs, iargs); + } + + // note that createVMRegion and createSubregion now call + // regionReinitialized + } + catch (RegionExistsException e) { + // shouldn't happen since we're holding the destroy lock + InternalGemFireError error = new InternalGemFireError(LocalizedStrings.LocalRegion_GOT_REGIONEXISTSEXCEPTION_IN_REINITIALIZE_WHEN_HOLDING_DESTROY_LOCK.toLocalizedString()); + error.initCause(e); + throw error; + } + finally { + if (newRegion == null) { // failed to create region + this.cache.unregisterReinitializingRegion(thePath); + } + } + } + + void loadSnapshotDuringInitialization(InputStream inputStream) + throws IOException, ClassNotFoundException + { + DataInputStream in = new DataInputStream(inputStream); + try { + RegionMap map = getRegionMap(); + byte snapshotVersion = in.readByte(); + if (snapshotVersion != SNAPSHOT_VERSION) { + throw new IllegalArgumentException(LocalizedStrings.LocalRegion_UNSUPPORTED_SNAPSHOT_VERSION_0_ONLY_VERSION_1_IS_SUPPORTED.toLocalizedString(new Object[] {Byte.valueOf(snapshotVersion), Byte.valueOf(SNAPSHOT_VERSION)})); + } + for (;;) { + Object key = DataSerializer.readObject(in); + if (key == null) + break; + byte b = in.readByte(); + Object value; + + if (b == SNAPSHOT_VALUE_OBJ) { + value = DataSerializer.readObject(in); + } + else if (b == SNAPSHOT_VALUE_INVALID) { + // Even though it was a distributed invalidate when the + // snapshot was created I think it is correct to turn it + // into a local invalidate when we load the snapshot since + // we don't do a distributed invalidate operation when loading. + value = Token.LOCAL_INVALID; + } + else if (b == SNAPSHOT_VALUE_LOCAL_INVALID) { + value = Token.LOCAL_INVALID; + } + else { + throw new IllegalArgumentException(LocalizedStrings.LocalRegion_UNEXPECTED_SNAPSHOT_CODE_0_THIS_SNAPSHOT_WAS_PROBABLY_WRITTEN_BY_AN_EARLIER_INCOMPATIBLE_RELEASE.toLocalizedString(new Byte(b))); + } + + //If versioning is enabled, we will give the entry a "fake" + //version. + VersionTag tag = null; + if(this.concurrencyChecksEnabled) { + tag = VersionTag.create(getVersionMember()); + } + map.initialImagePut(key, cacheTimeMillis(), value, false, + false, tag, null, false); + } + } + finally { + in.close(); + } + this.reinitialized_new = true; + } + + /** Package helper method */ + @Retained + Object getEntryValue(RegionEntry entry) + { + if (entry == null) { + return null; + } + + try { + return entry.getValue(this); + }catch(DiskAccessException dae) { + this.handleDiskAccessException(dae); + throw dae; + } + + } + + /** + * Blocks until initialization is complete. + * + * @param destroyedRegionOk + * true if it is okay to return a region that isDestroyed + * @see DestroyRegionOperation + */ + Region getSubregion(String path, boolean destroyedRegionOk) + { + if (destroyedRegionOk) { + checkCacheClosed(); + } + else if (isDestroyed()) { + // Assume if the owner of the subregion is destroyed, so are all of its + // subregions + return null; + } + if (path == null) { + throw new IllegalArgumentException(LocalizedStrings.LocalRegion_PATH_SHOULD_NOT_BE_NULL.toLocalizedString()); + } + if (path.length() == 0) { + waitOnInitialization(); // some internal methods rely on this + return this; + } + + if (path.charAt(0) == SEPARATOR_CHAR) + throw new IllegalArgumentException(LocalizedStrings.LocalRegion_PATH_SHOULD_NOT_START_WITH_A_SLASH.toLocalizedString()); + + int sep_idx; // the index of the next separator + // initialize the current region as this one + LocalRegion r = this; + // initialize the rest of the name to be regionName + String n = path; + String next; // the next part of the path + boolean last; // last: are we on the last part of the path? + do { + // if the rest of the name is empty, then we're done, return + // current region + if (n.length() == 0) { + break; // return r + } + sep_idx = n.indexOf(SEPARATOR_CHAR); + last = sep_idx < 0; // this is the last part if no separator + // try to get next region + next = last ? n : n.substring(0, sep_idx); + r = r.basicGetSubregion(next); + if (r == null) { + // not found + return null; + } + if (r.isDestroyed() && !destroyedRegionOk) { + return null; + } + if (!last) // if found but still more to do, get next rest of path + n = n.substring(sep_idx + 1); + } while (!last); + + r.waitOnInitialization(); + + // if region has just been destroyed return null unless specified not to + if (r.isDestroyed()) { + if (!destroyedRegionOk) { + return null; + } + return r; + } + + return r; + } + + /** + * Called by a thread that is doing region initialization. Causes the + * initialization Latch to be bypassed by this thread. + * + * @return oldLevel + */ + public static int setThreadInitLevelRequirement(int level) + { + int oldLevel = threadInitLevelRequirement(); + if (level == AFTER_INITIAL_IMAGE) { // if setting to default, just reset + initializationThread.set(null); + } + else { + initializationThread.set(Integer.valueOf(level)); + } + return oldLevel; + } + + /** + * Return the access level this thread has for regions with respect to how + * initialized they need to be before this thread can have a reference to it. + * AFTER_INITIAL_IMAGE: Must be fully initialized (the default) + * BEFORE_INITIAL_IMAGE: Must have had first latch opened ANY_INIT: Thread + * uses region as soon as possible + */ + public static int threadInitLevelRequirement() + { + Integer initLevel = (Integer)initializationThread.get(); + if (initLevel == null) { + return AFTER_INITIAL_IMAGE; + } + return initLevel.intValue(); + } + + public boolean checkForInitialization() { + if (this.initialized) { + return true; + } + switch (threadInitLevelRequirement()) { + case AFTER_INITIAL_IMAGE: + return checkForInitialization(this.initializationLatchAfterGetInitialImage); + case BEFORE_INITIAL_IMAGE: + return checkForInitialization(this.initializationLatchBeforeGetInitialImage); + case ANY_INIT: + return true; + default: + throw new InternalGemFireError(LocalizedStrings.LocalRegion_UNEXPECTED_THREADINITLEVELREQUIREMENT.toLocalizedString()); + } + } + + private boolean checkForInitialization( + StoppableCountDownLatch latch) { + return latch.getCount() == 0; + } + + /** wait on the initialization Latch based on thread requirements */ + public void waitOnInitialization() + { + if (this.initialized) { + return; + } + switch (threadInitLevelRequirement()) { + case AFTER_INITIAL_IMAGE: + waitOnInitialization(this.initializationLatchAfterGetInitialImage); + break; + case BEFORE_INITIAL_IMAGE: + waitOnInitialization(this.initializationLatchBeforeGetInitialImage); + break; + case ANY_INIT: + return; + default: + throw new InternalGemFireError(LocalizedStrings.LocalRegion_UNEXPECTED_THREADINITLEVELREQUIREMENT.toLocalizedString()); + } + } + + protected void waitOnInitialization(StoppableCountDownLatch latch) + { + if (latch == null) + return; // latch resource has been freed + + while (true) { + cache.getCancelCriterion().checkCancelInProgress(null); + boolean interrupted = Thread.interrupted(); + try { + latch.await(); + break; + } + catch (InterruptedException e) { + interrupted = true; + cache.getCancelCriterion().checkCancelInProgress(e); + // continue waiting + } + finally { + if (interrupted) // set interrupted flag if was interrupted + Thread.currentThread().interrupt(); + } + } // while + } + + /** + * Wait until data is ready in this region + */ + public void waitForData() { + if (this.initialized) { + return; + } + waitOnInitialization(this.initializationLatchAfterGetInitialImage); + } + + /** return null if not found */ + @Override + public RegionEntry basicGetEntry(Object key) + { + // ok to ignore tx state; all callers are non-transactional + RegionEntry re = this.entries.getEntry(key); + if (re != null && re.isRemoved()) { + re = null; + } + return re; + } + + /** + * Return true if invalidation occurred; false if it did not, for example if + * it was already invalidated + * + * @see DistributedRegion#basicInvalidate(EntryEventImpl) + */ + void basicInvalidate(EntryEventImpl event) throws EntryNotFoundException + { + basicInvalidate(event, isInitialized()/* for bug 35214 */); + } + + /** + * Used by disk regions when recovering data from backup. Currently this "put" + * is done at a very low level to keep it from generating events or pushing + * updates to others. + */ + public DiskEntry initializeRecoveredEntry(Object key, DiskEntry.RecoveredEntry value) + { + Assert.assertTrue(this.diskRegion != null); + // region operation so it is ok to ignore tx state + RegionEntry re = this.entries.initRecoveredEntry(key, value); + if (re == null) { + throw new InternalGemFireError(LocalizedStrings.LocalRegion_ENTRY_ALREADY_EXISTED_0.toLocalizedString(key)); + } + return (DiskEntry)re; + } + /** + * Used by disk regions when recovering data from backup and + * initializedRecoveredEntry has already been called for the given key. + * Currently this "put" + * is done at a very low level to keep it from generating events or pushing + * updates to others. + */ + public DiskEntry updateRecoveredEntry(Object key, DiskEntry.RecoveredEntry value) + { + Assert.assertTrue(this.diskRegion != null); + // region operation so it is ok to ignore tx state + RegionEntry re = this.entries.updateRecoveredEntry(key, value); + return (DiskEntry)re; + } + + public void copyRecoveredEntries(RegionMap rm) { + this.entries.copyRecoveredEntries(rm); + } + + public void recordRecoveredGCVersion(VersionSource member, long gcVersion) { + //TODO - RVV - I'm not sure about this recordGCVersion method. It seems + //like it's not doing the right thing if the current member is the member + //we just recovered. + //We need to update the RVV in memory + this.versionVector.recordGCVersion(member, gcVersion); + + //We also need to update the RVV that represents what we have persisted on disk + DiskRegion dr = this.getDiskRegion(); + if(dr != null) { + dr.recordRecoveredGCVersion(member, gcVersion); + } + } + + public void recordRecoveredVersonHolder(VersionSource member, + RegionVersionHolder versionHolder, boolean latestOplog) { + if(this.concurrencyChecksEnabled) { + //We need to update the RVV in memory + this.versionVector.initRecoveredVersion(member, versionHolder, latestOplog); + DiskRegion dr = this.getDiskRegion(); + //We also need to update the RVV that represents what we have persisted on disk + if(dr != null) { + dr.recordRecoveredVersonHolder(member, versionHolder, latestOplog); + } + } + } + + @Override + public void recordRecoveredVersionTag(VersionTag tag) { + if(this.concurrencyChecksEnabled) { + this.versionVector.recordVersion(tag.getMemberID(), tag.getRegionVersion()); + DiskRegion dr = this.getDiskRegion(); + //We also need to update the RVV that represents what we have persisted on disk + if(dr != null) { + dr.recordRecoveredVersionTag(tag); + } + } + } + + + + @Override + public void setRVVTrusted(boolean rvvTrusted) { + if(this.concurrencyChecksEnabled) { + DiskRegion dr = this.getDiskRegion(); + //Update whether or not the RVV we have recovered is trusted (accurately + //represents what we have on disk). + if(dr != null) { + dr.setRVVTrusted(rvvTrusted); + } + } + } + + /** + * Get the best iterator for the region entries. + * + * TODO there has been some work on this on the sqlfire branch that should + * be picked up here. + */ + public Iterator getBestIterator(boolean includeValues) { + if(this instanceof DistributedRegion) { + return ((DistributedRegion)this).getBestIterator(includeValues); + } + + return this.entries.regionEntries().iterator(); + } + + /** + * Fix up our RVV by iterating over the entries in the region + * and making sure they are applied to the RVV. + * + * If we failed to do a GII, we may have applied the RVV from a remote member. + * That RVV may not have seen some of the events in our local RVV. Those + * entries were supposed to be replaced with the results of the GII. However, + * if we failed the GII, those entries may still be in the cache, but are + * no longer reflected in the local RVV. This method iterates over those + * keys and makes sure their versions are applied to the local RVV. + * + * TODO - this method should probably rebuild the RVV from scratch, instead + * of starting with the existing RVV. By starting with the existing RVV, we + * may claim to have entries that we actually don't have. Unfortunately, we + * can't really rebuild the RVV from scratch because we will end up with + * huge exception lists. + * + * However, if we are in the state of recovering from disk with an untrusted + * RVV, we must be newer than any other surviving members. So they shouldn't + * have any entries in their cache that match entries that we failed to receive + * through the GII but are reflected in our current RVV. So it should be + * safe to start with the current RVV. + * + */ + void repairRVV() { + RegionVersionVector rvv = this.getVersionVector(); + + if(rvv == null) { + //No need to do anything. + return; + } + + Iterator it = getBestIterator(false); + int count = 0; + VersionSource myId = this.getVersionMember(); + //Iterate over the all of the entries + while (it.hasNext()) { + RegionEntry mapEntry = it.next(); + VersionStamp stamp = mapEntry.getVersionStamp(); + VersionSource id = stamp.getMemberID(); + if (id == null) { + id = myId; + } + //Make sure the version is applied to the regions RVV + rvv.recordVersion(id, stamp.getRegionVersion()); + + } + } + + /** + * Return true if invalidation occurred; false if it did not, for example if + * it was already invalidated + */ + private void basicInvalidate(final EntryEventImpl event, + boolean invokeCallbacks) throws EntryNotFoundException + { + basicInvalidate(event, invokeCallbacks, false); + } + + /** + * Asif:Made this function protected as this is over ridden in HARegion to + * abort expiry of Events which have key as Long , if it is not able to + * destroy from availableIDs + * + * @param forceNewEntry + * true if we are a mirror and still in the initialization phase. + * Called from InvalidateOperation.InvalidateMessage + + */ + void basicInvalidate(final EntryEventImpl event, boolean invokeCallbacks, + final boolean forceNewEntry) throws EntryNotFoundException + { + if (!event.isOriginRemote() && !event.isDistributed() + && getScope().isDistributed() && getDataPolicy().withReplication() + && invokeCallbacks /* + * catches case where being called by (distributed) + * invalidateRegion + */) { + throw new IllegalStateException(LocalizedStrings.LocalRegion_CANNOT_DO_A_LOCAL_INVALIDATE_ON_A_REPLICATED_REGION.toLocalizedString()); + } + + if (hasSeenEvent(event)) { + if(logger.isTraceEnabled(LogMarker.DM)) { + logger.trace(LogMarker.DM, "LR.basicInvalidate: this cache has already seen this event {}", event); + } + if (this.concurrencyChecksEnabled && event.getVersionTag() != null && !event.getVersionTag().isRecorded()) { + getVersionVector().recordVersion((InternalDistributedMember) event.getDistributedMember(), event.getVersionTag()); + } + return; + } + + discoverJTA(); + getDataView().invalidateExistingEntry(event, invokeCallbacks, forceNewEntry); + } + + void basicInvalidatePart2(RegionEntry re, EntryEventImpl event, + boolean conflictwithClear, boolean invokeCallbacks) + { + updateStatsForInvalidate(); + + if (invokeCallbacks) { + try { + re.dispatchListenerEvents(event); + } + catch (InterruptedException ie) { + Thread.currentThread().interrupt(); + stopper.checkCancelInProgress(null); + return; + } + } + else { + event.callbacksInvoked(true); + } + } + + /** + * Update stats + */ + private void updateStatsForInvalidate() { + getCachePerfStats().incInvalidates(); + } + + void basicInvalidatePart3(RegionEntry re, EntryEventImpl event, + boolean invokeCallbacks) { + // No op. overriden by sub classes. + // Dispatching listener events moved to basic*Part2. + } + + /** + * invoke callbacks for an invalidation + */ + public void invokeInvalidateCallbacks(final EnumListenerEvent eventType, + final EntryEventImpl event, final boolean callDispatchListenerEvent) { + // Notify bridge clients (if this is a BridgeServer) + event.setEventType(eventType); + notifyBridgeClients(event); + if (this.hdfsStoreName != null) { + notifyGatewaySender(eventType, event); + } + if(callDispatchListenerEvent){ + dispatchListenerEvent(eventType, event); + } + } + + /** + * @param key + * the key of the entry to invalidate + * @param newValue + * the new value of the entry + * @param didDestroy + * true if tx destroyed this entry at some point + * @param rmtOrigin + * true if transaction being applied had a remote origin + * @param event + * filled in if operation performed + * @param filterRoutingInfo + * @param bridgeContext + * @param txEntryState for passing up versionTag - only on near side + * @param versionTag tag generated by txCoordinator - only on far side + * @param tailKey tail (shadow) key generated by txCoordinator for WAN - only on farside + */ + final void txApplyInvalidate(Object key, Object newValue, boolean didDestroy, + TransactionId rmtOrigin, TXRmtEvent event, boolean localOp, + EventID eventId, Object aCallbackArgument,List pendingCallbacks, FilterRoutingInfo filterRoutingInfo, + ClientProxyMembershipID bridgeContext, TXEntryState txEntryState, VersionTag versionTag, long tailKey) + { + this.entries.txApplyInvalidate(key, newValue, didDestroy, rmtOrigin, + event, localOp, eventId, aCallbackArgument,pendingCallbacks,filterRoutingInfo,bridgeContext, txEntryState, versionTag, tailKey); + } + + /** + * Called by lower levels, while still holding the write sync lock, and the + * low level has completed its part of the basic destroy + */ + final void txApplyInvalidatePart2(RegionEntry re, Object key, + boolean didDestroy, boolean didInvalidate, boolean clearConflict) + { + if (this.testCallable != null) { + this.testCallable.call(this, Operation.INVALIDATE, re); + } + if (didInvalidate) { + updateStatsForInvalidate(); + // Bug 40842: clearing index of the old value + // performed in AbstractRegionMap + } + if (didDestroy) { + if (this.entryUserAttributes != null) { + this.entryUserAttributes.remove(key); + } + } + } + + /** + * Allows null as new value to accomodate create with a null value. Assumes + * all key, value, and callback validations have been performed. + * + * @param event + * the event object for this operation, with the exception that the + * oldValue parameter is not yet filled in. The oldValue will be + * filled in by this operation. + * + * @param ifNew + * true if this operation must not overwrite an existing key + * @param ifOld + * true if this operation must not create a new key + * @param expectedOldValue + * only succeed if old value is equal to this value. If null, + * then doesn't matter what old value is. If INVALID token, + * must be INVALID. + * @param requireOldValue + * true if the oldValue should be set in event even if ifNew + * and entry exists + * @return false if ifNew is true and there is an existing key or + * if ifOld is true and expectedOldValue does not match the current + * value in the cache. Otherwise return true. + */ + protected final boolean basicPut(EntryEventImpl event, + boolean ifNew, + boolean ifOld, + Object expectedOldValue, + boolean requireOldValue) + throws TimeoutException, CacheWriterException { + return getDataView().putEntry(event, ifNew, ifOld, expectedOldValue, requireOldValue, 0L, false); + } + + /** + * @param putOp + * describes the operation that did the put + * @param key + * the key of the entry to put + * @param newValue + * the new value of the entry + * @param didDestroy + * true if tx destroyed this entry at some point + * @param rmtOrigin + * true if transaction being applied had a remote origin + * @param event + * filled in if operation performed + * @param aCallbackArgument + * argument passed in by user + * @param filterRoutingInfo + * @param bridgeContext + * @param txEntryState for passing up versionTag - only on near side + * @param versionTag tag generated by txCoordinator - only on far side + * @param tailKey tail (shadow) key generated by txCoordinator for WAN - only on farside + */ + final void txApplyPut(Operation putOp, Object key, Object newValue, + boolean didDestroy, TransactionId rmtOrigin, TXRmtEvent event, + EventID eventId, Object aCallbackArgument,List pendingCallbacks, FilterRoutingInfo filterRoutingInfo, + ClientProxyMembershipID bridgeContext, TXEntryState txEntryState, VersionTag versionTag, long tailKey) + { + long startPut = CachePerfStats.getStatTime(); + this.entries.txApplyPut(putOp, key, newValue, didDestroy, rmtOrigin, + event, eventId, aCallbackArgument,pendingCallbacks,filterRoutingInfo,bridgeContext, txEntryState, versionTag, tailKey); + updateStatsForPut(startPut); + //Fix for 47507 - make sure we throw an exception if we skip the TX put because + //the region is cleared (due to a destroy). + this.checkReadiness(); + } + + /** + * update stats + */ + private void updateStatsForPut(long startPut) { + getCachePerfStats().endPut(startPut, false); + } + + final void txApplyPutPart2(RegionEntry re, Object key, Object newValue, + long lastModified, boolean isCreate, boolean didDestroy, boolean clearConflict ) + { + if (this.testCallable != null) { + Operation op = isCreate ? Operation.CREATE : Operation.UPDATE; + this.testCallable.call(this, op, re); + } + if (isCreate) { + updateStatsForCreate(); + } + if (!isProxy() && !clearConflict) { + if (this.indexManager != null) { + try { + this.indexManager.updateIndexes(re, + isCreate ? IndexManager.ADD_ENTRY : + IndexManager.UPDATE_ENTRY, + isCreate ? IndexProtocol.OTHER_OP : + IndexProtocol.AFTER_UPDATE_OP); + } + catch (QueryException e) { + throw new IndexMaintenanceException(e); + } + } + } + if (didDestroy) { + if (this.entryUserAttributes != null) { + this.entryUserAttributes.remove(key); + } + } + if (this.statisticsEnabled && !clearConflict) { + addExpiryTaskIfAbsent(re); + } + setLastModifiedTime(lastModified); + } + + public boolean basicBridgeCreate(final Object key, final byte[] value, + boolean isObject, Object p_callbackArg, final ClientProxyMembershipID client, + boolean fromClient, EntryEventImpl clientEvent, boolean throwEntryExists) throws TimeoutException, + EntryExistsException, CacheWriterException + { + EventID eventId = clientEvent.getEventId(); + Object callbackArg = p_callbackArg; + long startPut = CachePerfStats.getStatTime(); + if (fromClient) { + // If this region is also wan-enabled, then wrap that callback arg in a + // GatewayEventCallbackArgument to store the event id. + if(isGatewaySenderEnabled()) { + callbackArg = new GatewaySenderEventCallbackArgument(callbackArg); + } + } + //Asif: Modified the call to this constructor by passing the new value obtained from remote site + //instead of null . + //The need for this arose, because creation of EntryEvent, makes call to PartitionResolver, + //to get Hash. If the partitioning column is different from primary key, + //the resolver for Sqlfabric is not able to obtain the hash object used for creation of KeyInfo + + final EntryEventImpl event = EntryEventImpl.create(this, Operation.CREATE, key, + value, callbackArg, false /* origin remote */, client.getDistributedMember(), + true /* generateCallbacks */, + eventId); + try { + event.setContext(client); + + // if this is a replayed operation or WAN event we may already have a version tag + event.setVersionTag(clientEvent.getVersionTag()); + //carry over the possibleDuplicate flag from clientEvent + event.setPossibleDuplicate(clientEvent.isPossibleDuplicate()); + + //Fix for 42448 - Only make create with null a local invalidate for + //normal regions. Otherwise, it will become a distributed invalidate. + if(getDataPolicy() == DataPolicy.NORMAL) { + event.setLocalInvalid(true); + } + + // Set the new value to the input byte[] if it isn't null + /// For SqlFabric, if the new value happens to be an serialized object, then + //it needs to be converted into VMCachedDeserializable , or serializable delta + // as the case may be + if (value != null) { + // If the byte[] represents an object, then store it serialized + // in a CachedDeserializable; otherwise store it directly as a byte[] + if (isObject) { + // The value represents an object + event.setSerializedNewValue(value); + } + else { + // The value does not represent an object + event.setNewValue(value); + } + } + + boolean ifNew = true; // cannot overwrite an existing key + boolean ifOld = false; // can create a new key + long lastModified = 0L; // use now + boolean overwriteDestroyed = false; // not okay to overwrite the DESTROYED + // token + boolean success = basicUpdate(event, ifNew, ifOld, lastModified, + overwriteDestroyed); + clientEvent.isConcurrencyConflict(event.isConcurrencyConflict()); + if (success) { + clientEvent.setVersionTag(event.getVersionTag()); + getCachePerfStats().endPut(startPut, event.isOriginRemote()); + } + else { + this.stopper.checkCancelInProgress(null); + if (throwEntryExists) { + throw new EntryExistsException(""+key, event.getOldValue()); + } + } + return success; + } finally { + event.release(); + } + } + + public boolean basicBridgePut(Object key, Object value, byte[] deltaBytes, + boolean isObject, Object p_callbackArg, ClientProxyMembershipID memberId, + boolean fromClient, EntryEventImpl clientEvent, boolean isSqlFabricSystem) + throws TimeoutException, CacheWriterException { + EventID eventID = clientEvent.getEventId(); + Object callbackArg = p_callbackArg; + long startPut = CachePerfStats.getStatTime(); + if (fromClient) { + // If this region is also wan-enabled, then wrap that callback arg in a + // GatewayEventCallbackArgument to store the event id. + if(isGatewaySenderEnabled()) { + callbackArg = new GatewaySenderEventCallbackArgument(callbackArg); + } + } + + final EntryEventImpl event = EntryEventImpl.create(this, Operation.UPDATE, key, + null /* new value */, callbackArg, + false /* origin remote */, memberId.getDistributedMember(), + true /* generateCallbacks */, + eventID); + try { + event.setContext(memberId); + event.setDeltaBytes(deltaBytes); + + // if this is a replayed operation we may already have a version tag + event.setVersionTag(clientEvent.getVersionTag()); + //carry over the possibleDuplicate flag from clientEvent + event.setPossibleDuplicate(clientEvent.isPossibleDuplicate()); + + // Set the new value to the input byte[] + // If the byte[] represents an object, then store it + // serialized in a CachedDeserializable; otherwise store it directly + // as a byte[]. + if (isObject && value instanceof byte[]) { + //Asif: If the system is SqlFabric, then the value byte[] corresponds to + //Delta , so we need to deserialize it & appropriately set the EntryEventImpl's.delta + //field to this value + if (isSqlFabricSystem) { + event.setNewValue(EntryEventImpl.deserialize((byte[])value)); + } else { + event.setSerializedNewValue((byte[])value); + } + } + else { + event.setNewValue(value); + } + + boolean ifNew = false; // can overwrite an existing key + + //Asif: If the system is SqlFabric, then update will always have value of type + //SerializableDelta (i.e Delta) which requires that the old value should be present + boolean ifOld = isSqlFabricSystem ; //false; // can create a new key + long lastModified = 0L; // use now + boolean overwriteDestroyed = false; // not okay to overwrite the DESTROYED token + boolean success = false; + try { + success = basicUpdate(event, ifNew, ifOld, lastModified, + overwriteDestroyed); + } catch (ConcurrentCacheModificationException ex) { // thrown by WAN conflicts + event.isConcurrencyConflict(true); + } + clientEvent.isConcurrencyConflict(event.isConcurrencyConflict()); + if (success) { + clientEvent.setVersionTag(event.getVersionTag()); + getCachePerfStats().endPut(startPut, event.isOriginRemote()); + } + else { + this.stopper.checkCancelInProgress(null); + } + return success; + } finally { + event.release(); + } + } + + /** + * issue a config message if the server and client have different + * concurrency checking expectations + * @param tag + */ + private void concurrencyConfigurationCheck(VersionTag tag) { + if (!this.concurrencyMessageIssued && ((tag != null) != this.concurrencyChecksEnabled)) { + this.concurrencyMessageIssued = true; + logger.info(LocalizedMessage.create(LocalizedStrings.LocalRegion_SERVER_HAS_CONCURRENCY_CHECKS_ENABLED_0_BUT_CLIENT_HAS_1_FOR_REGION_2, + new Object[]{ !this.concurrencyChecksEnabled, this.concurrencyChecksEnabled, this})); + } + } + + /** + * Perform an update in a bridge client. See CacheClientUpdater.handleUpdate() + * The op is from the bridge server and should not be distributed back to it. + * + * @throws CacheWriterException TODO-javadocs + */ + public void basicBridgeClientUpdate(DistributedMember serverId, Object key, + Object value, byte[] deltaBytes, boolean isObject, + Object callbackArgument, boolean isCreate, boolean processedMarker, + EntryEventImpl event, EventID eventID) throws TimeoutException, + CacheWriterException { + if (isCacheContentProxy()) { + return; + } + concurrencyConfigurationCheck(event.getVersionTag()); + long startPut = CachePerfStats.getStatTime(); + // Generate EventID as it is possible that client is a cache server + // in hierarchical cache + if (generateEventID() && !this.cache.getCacheServers().isEmpty()) { + event.setNewEventId(cache.getDistributedSystem()); + } else { + event.setEventId(eventID); + } + event.setDeltaBytes(deltaBytes); + + // Set the new value to the input byte[] if it isn't null + if (value != null) { + // If the byte[] represents an object, then store it + // serialized in a CachedDeserializable; otherwise store it directly + // as a byte[]. + if (isObject && value instanceof byte[]) { + // The value represents an object + event.setSerializedNewValue((byte[])value); + } + else { + // The value does not represent an object + event.setNewValue(value); + } + } + + // If the marker has been processed, process this put event normally; + // otherwise, this event occurred in the past and has been stored for a + // durable client. In this case, just invoke the put callbacks. + if (processedMarker) { + boolean ifNew = false; // can overwrite an existing key + boolean ifOld = false; // can create a new key + long lastModified = 0L; // use now + boolean overwriteDestroyed = true; //okay to overwrite the DESTROYED token + if (basicUpdate(event, ifNew, ifOld, lastModified, overwriteDestroyed)) { + getCachePerfStats().endPut(startPut, event.isOriginRemote()); + } + } + else { + if (isInitialized()) { + invokePutCallbacks(isCreate ? EnumListenerEvent.AFTER_CREATE + : EnumListenerEvent.AFTER_UPDATE, event, true, true); + } + } + } + + /** + * Perform an invalidate in a bridge client. + * The op is from the bridge server and should not be distributed back to it. + * + * @throws EntryNotFoundException TODO-javadocs + */ + public void basicBridgeClientInvalidate(DistributedMember serverId, Object key, + Object callbackArgument, boolean processedMarker, EventID eventID, + VersionTag versionTag) + throws EntryNotFoundException { + if (!isCacheContentProxy()) { + concurrencyConfigurationCheck(versionTag); + + // Create an event and put the entry + EntryEventImpl event = + EntryEventImpl.create(this, + Operation.INVALIDATE, + key, null /* newValue */, + callbackArgument /* callbackArg*/, + true /*originRemote*/, + serverId + ); + try { + + event.setVersionTag(versionTag); + event.setFromServer(true); + if (generateEventID() && !this.cache.getCacheServers().isEmpty()) { + event.setNewEventId(cache.getDistributedSystem()); + } else { + event.setEventId(eventID); + } + + // If the marker has been processed, process this invalidate event + // normally; otherwise, this event occurred in the past and has been + // stored for a durable client. In this case, just invoke the invalidate + // callbacks. + if (processedMarker) { + // [bruce] changed to force new entry creation for consistency + final boolean forceNewEntry = this.concurrencyChecksEnabled; + basicInvalidate(event, true, forceNewEntry); + if (event.isConcurrencyConflict()) { // bug #45520 - we must throw this for the CacheClientUpdater + throw new ConcurrentCacheModificationException(); + } + } else { + if (isInitialized()) { + invokeInvalidateCallbacks(EnumListenerEvent.AFTER_INVALIDATE, event, + true); + } + } + } finally { + event.release(); + } + } + } + + /** + * Perform a destroy in a bridge client. + * The op is from the bridge server and should not be distributed back to it. + * + * @throws EntryNotFoundException TODO-javadocs + */ + public void basicBridgeClientDestroy(DistributedMember serverId, Object key, + Object callbackArgument, boolean processedMarker, EventID eventID, + VersionTag versionTag) + throws EntryNotFoundException { + if (!isCacheContentProxy()) { + concurrencyConfigurationCheck(versionTag); + + // Create an event and destroy the entry + EntryEventImpl event = + EntryEventImpl.create(this, + Operation.DESTROY, + key, null /* newValue */, + callbackArgument /* callbackArg*/, + true /*originRemote*/, + serverId + ); + try { + event.setFromServer(true); + event.setVersionTag(versionTag); + + if (generateEventID() && !this.cache.getCacheServers().isEmpty()) { + event.setNewEventId(cache.getDistributedSystem()); + } else { + event.setEventId(eventID); + } + // If the marker has been processed, process this destroy event normally; + // otherwise, this event occurred in the past and has been stored for a + // durable client. In this case, just invoke the destroy callbacks. + if(logger.isDebugEnabled()) { + logger.debug("basicBridgeClientDestroy(processedMarker={})", processedMarker); + } + if (processedMarker) { + basicDestroy(event, + false, // cacheWrite + null); // expectedOldValue + if (event.isConcurrencyConflict()) { // bug #45520 - we must throw an exception for CacheClientUpdater + throw new ConcurrentCacheModificationException(); + } + } else { + if (isInitialized()) { + invokeDestroyCallbacks(EnumListenerEvent.AFTER_DESTROY, event, true, true); + } + } + } finally { + event.release(); + } + } + } + + /** + * Clear the region from a server request. + * @param callbackArgument The callback argument. This is currently null + * since {@link java.util.Map#clear} supports no parameters. + * @param processedMarker Whether the marker has been processed (for durable + * clients) + */ + public void basicBridgeClientClear(Object callbackArgument, boolean processedMarker) { + checkReadiness(); + checkForNoAccess(); + RegionEventImpl event = new RegionEventImpl(this, + Operation.REGION_LOCAL_CLEAR, callbackArgument, true, getMyId(), + generateEventID()/* generate EventID */); + // If the marker has been processed, process this clear event normally; + // otherwise, this event occurred in the past and has been stored for a + // durable client. In this case, just invoke the clear callbacks. + if (processedMarker) { + basicLocalClear(event); + } else { + if (isInitialized()) { + dispatchListenerEvent(EnumListenerEvent.AFTER_REGION_CLEAR, event); + } + } + } + + + + public void basicBridgeDestroy(Object key, Object p_callbackArg, + ClientProxyMembershipID memberId, boolean fromClient, EntryEventImpl clientEvent) + throws TimeoutException, EntryNotFoundException, CacheWriterException + { + Object callbackArg = p_callbackArg; + if (fromClient) { + // If this region is also wan-enabled, then wrap that callback arg in a + // GatewayEventCallbackArgument to store the event id. + if(isGatewaySenderEnabled()) { + callbackArg = new GatewaySenderEventCallbackArgument(callbackArg); + } + } + + // Create an event and put the entry + final EntryEventImpl event = EntryEventImpl.create(this, Operation.DESTROY, key, + null /* new value */, callbackArg, + false /* origin remote */, memberId.getDistributedMember(), + true /* generateCallbacks */, + clientEvent.getEventId()); + try { + event.setContext(memberId); + // if this is a replayed or WAN operation we may already have a version tag + event.setVersionTag(clientEvent.getVersionTag()); + try { + basicDestroy(event, + true, // cacheWrite + null); // expectedOldValue + } catch (ConcurrentCacheModificationException ex) { // thrown by WAN conflicts + event.isConcurrencyConflict(true); + } finally { + clientEvent.setVersionTag(event.getVersionTag()); + clientEvent.isConcurrencyConflict(event.isConcurrencyConflict()); + clientEvent.setIsRedestroyedEntry(event.getIsRedestroyedEntry()); + } + } finally { + event.release(); + } + } + + + public void basicBridgeInvalidate(Object key, Object p_callbackArg, + ClientProxyMembershipID memberId, boolean fromClient, EntryEventImpl clientEvent) + throws TimeoutException, EntryNotFoundException, CacheWriterException + { + Object callbackArg = p_callbackArg; + if (fromClient) { + // If this region is also wan-enabled, then wrap that callback arg in a + // GatewayEventCallbackArgument to store the event id. + if(isGatewaySenderEnabled()) { + callbackArg = new GatewaySenderEventCallbackArgument(callbackArg); + } + } + + // Create an event and put the entry + final EntryEventImpl event = EntryEventImpl.create(this, Operation.INVALIDATE, key, + null /* new value */, callbackArg, + false /* origin remote */, memberId.getDistributedMember(), + true /* generateCallbacks */, + clientEvent.getEventId()); + try { + event.setContext(memberId); + + // if this is a replayed operation we may already have a version tag + event.setVersionTag(clientEvent.getVersionTag()); + + try { + basicInvalidate(event); + } finally { + clientEvent.setVersionTag(event.getVersionTag()); + clientEvent.isConcurrencyConflict(event.isConcurrencyConflict()); + } + } finally { + event.release(); + } + } + + public void basicBridgeUpdateVersionStamp(Object key, Object p_callbackArg, + ClientProxyMembershipID memberId, boolean fromClient, EntryEventImpl clientEvent) { + + // Create an event and update version stamp of the entry + EntryEventImpl event = EntryEventImpl.create(this, Operation.UPDATE_VERSION_STAMP, key, + null /* new value */, null /*callbackArg*/, + false /* origin remote */, memberId.getDistributedMember(), + false /* generateCallbacks */, + clientEvent.getEventId()); + event.setContext(memberId); + + // if this is a replayed operation we may already have a version tag + event.setVersionTag(clientEvent.getVersionTag()); + + try { + basicUpdateEntryVersion(event); + } finally { + clientEvent.setVersionTag(event.getVersionTag()); + clientEvent.isConcurrencyConflict(event.isConcurrencyConflict()); + event.release(); + } + } + + void basicUpdateEntryVersion(EntryEventImpl event) throws EntryNotFoundException { + if (hasSeenEvent(event)) { + if(logger.isTraceEnabled(LogMarker.DM)) { + logger.trace(LogMarker.DM, "LR.basicDestroy: this cache has already seen this event {}", event); + } + if (this.concurrencyChecksEnabled && event.getVersionTag() != null && !event.getVersionTag().isRecorded()) { + getVersionVector().recordVersion((InternalDistributedMember) event.getDistributedMember(), event.getVersionTag()); + } + return; + } + + getDataView().updateEntryVersion(event); + } + + /** + * Allows null as new value to accomodate create with a null value. + * + * @param event + * the event object for this operation, with the exception that the + * oldValue parameter is not yet filled in. The oldValue will be + * filled in by this operation. + * + * @param ifNew + * true if this operation must not overwrite an existing key + * @param ifOld + * true if this operation must not create a new entry + * @param lastModified + * the lastModified time to set with the value; if 0L, then the + * lastModified time will be set to now. + * @param overwriteDestroyed + * true if okay to overwrite the DESTROYED token: when this is true + * has the following effect: even when ifNew is true will write over + * DESTROYED token when overwriteDestroyed is false and ifNew or + * ifOld is true then if the put doesn't occur because there is a + * DESTROYED token present then the entry flag blockedDestroyed is + * set. + * @return false if ifNew is true and there is an existing key, or ifOld is + * true and there is no existing entry; otherwise return true. + */ + final boolean basicUpdate(final EntryEventImpl event, + final boolean ifNew, + final boolean ifOld, + final long lastModified, + final boolean overwriteDestroyed) + throws TimeoutException, + CacheWriterException { + // check validity of key against keyConstraint + if (this.keyConstraint != null) { + if (!this.keyConstraint.isInstance(event.getKey())) + throw new ClassCastException(LocalizedStrings.LocalRegion_KEY_0_DOES_NOT_SATISFY_KEYCONSTRAINT_1.toLocalizedString(new Object[] {event.getKey().getClass().getName(), this.keyConstraint.getName()})); + } + + validateValue(event.basicGetNewValue()); + + return getDataView().putEntry(event, ifNew, ifOld, null, false, lastModified, overwriteDestroyed); + } + + /** + * Subclasses should reimplement if needed + * + * @see DistributedRegion#virtualPut(EntryEventImpl, boolean, boolean, + * Object, boolean, long, boolean) + */ + boolean virtualPut(final EntryEventImpl event, + final boolean ifNew, + final boolean ifOld, + Object expectedOldValue, + boolean requireOldValue, + final long lastModified, + final boolean overwriteDestroyed) + throws TimeoutException, + CacheWriterException { + if (!MemoryThresholds.isLowMemoryExceptionDisabled()) { + checkIfAboveThreshold(event); + } + Operation originalOp = event.getOperation(); + RegionEntry oldEntry = null; + + try { + oldEntry = this.entries.basicPut(event, + lastModified, + ifNew, + ifOld, + expectedOldValue, + requireOldValue, + overwriteDestroyed); + } catch (ConcurrentCacheModificationException e) { + // this can happen in a client cache when another thread + // managed to slip in its version info to the region entry before this + // thread got around to doing so + if(logger.isDebugEnabled()) { + logger.debug("caught concurrent modification attempt when applying {}", event); + } + notifyBridgeClients(event); + return false; + } + + // for EMPTY clients, see if a concurrent map operation had an entry on the server + ServerRegionProxy mySRP = getServerProxy(); + + if (mySRP != null && this.dataPolicy == DataPolicy.EMPTY) { + if (originalOp == Operation.PUT_IF_ABSENT) { + return !event.hasOldValue(); + } + if (originalOp == Operation.REPLACE && !requireOldValue) { + // LocalRegion.serverPut throws an EntryNotFoundException if the operation failed + return true; + } + } + + return oldEntry != null; + } + + /** + * check to see if a LowMemoryException should be thrown for this event + * @param evi + * @throws LowMemoryException + */ + public void checkIfAboveThreshold(final EntryEventImpl evi) throws LowMemoryException { + if (evi == null) { + checkIfAboveThreshold("UNKNOWN"); + return; + } + // Threshold check is performed elsewhere for putAll when there is a server proxy + boolean alreadyCheckedThreshold = hasServerProxy() && evi.getOperation().isPutAll(); + if (! alreadyCheckedThreshold && !evi.isOriginRemote()) { + checkIfAboveThreshold(evi.getKey()); + } + } + + /** + * Checks to see if the event should be rejected because of sick state either due to + * exceeding local critical threshold or a remote member exceeding critical threshold + * @param key the key for the operation + * @throws LowMemoryException if the target member for this operation is sick + */ + private void checkIfAboveThreshold(final Object key) throws LowMemoryException{ + if (memoryThresholdReached.get()) { + Set htrm = getMemoryThresholdReachedMembers(); + + // #45603: trigger a background eviction since we're above the the critical + // threshold + InternalResourceManager.getInternalResourceManager(cache).getHeapMonitor().updateStateAndSendEvent(); + + Object[] prms = new Object[] {getFullPath(), key, htrm}; + throw new LowMemoryException(LocalizedStrings.ResourceManager_LOW_MEMORY_IN_0_FOR_PUT_1_MEMBER_2.toLocalizedString(prms), + htrm); + } + } + + /** + * Perform a put without invoking callbacks or checking for transactions + */ + /*public Object putNoCallbacks(Object key, Object value) { + EntryEventImpl event = new EntryEventImpl( + this, Operation.UPDATE, key, + value, + nullcallbackobj, false, + getMyId(), + true, true); + event.setNewEventId(getCache().getDistributedSystem()); + boolean didPut = this.entries.basicPut(event, System.currentTimeMillis(), + false, false, true, false) != null; + if (didPut) { + return event.getOldValue(); + } + else { + return null; + } + }*/ + + /** + * Allows null as new value to accomodate create with a null value. + * + * @param event + * the event object for this operation, with the exception that the + * oldValue parameter is not yet filled in. The oldValue will be + * filled in by this operation. + * @param lastModified + * the lastModified time to set with the value; if 0L then the + * lastModified time will be set to now. + * @return null if put not done; otherwise the put entry + */ + protected RegionEntry basicPutEntry(final EntryEventImpl event, + final long lastModified) + throws TimeoutException, CacheWriterException { + discoverJTA(); + TXStateInterface tx = getTXState(); + // Note we are doing a load or netsearch result so it seems like + // we should set ifNew to true. The entry should not yet exist. + // However since the non-tx code sets ifNew to false this code will also. + final boolean ifNew = false; + + if (isTX()) { + tx.txPutEntry(event, ifNew, false, false, null); + return null; + } + else { + if (GemFireCacheImpl.internalBeforeNonTXBasicPut != null) { + GemFireCacheImpl.internalBeforeNonTXBasicPut.run(); + } + + RegionEntry oldEntry = this.entries.basicPut(event, + lastModified, + ifNew, + false, // ifOld + null, // expectedOldValue + false, // requireOldValue + false); // overwriteDestroyed + return oldEntry; + } + } + + protected long basicPutPart2(EntryEventImpl event, RegionEntry entry, + boolean isInitialized, long lastModified, + boolean clearConflict) + { + final boolean isNewKey = event.getOperation().isCreate(); + final boolean invokeCallbacks = !entry.isTombstone(); // put() is creating a tombstone + + if (isNewKey) { + updateStatsForCreate(); + } + final boolean lruRecentUse = event.isNetSearch() || event.isLoad(); // fix for bug 31102 + // the event may have a version timestamp that we need to use, so get the + // event time to store in the entry + long lastModifiedTime = event.getEventTime(lastModified); + updateStatsForPut(entry, lastModifiedTime, lruRecentUse); + if (!isProxy()) { + //if (this.isUsedForPartitionedRegionBucket) { + // if (this.sqlfIndexManager != null) { + // this.sqlfIndexManager.onEvent(this, event, entry); + // } + //} + + if (!clearConflict && this.indexManager != null) { + try { + if (!entry.isInvalid()) { + this.indexManager.updateIndexes(entry, + isNewKey ? IndexManager.ADD_ENTRY : + IndexManager.UPDATE_ENTRY, + isNewKey ? IndexProtocol.OTHER_OP : + IndexProtocol.AFTER_UPDATE_OP); + } + } + catch (QueryException e) { + throw new IndexMaintenanceException(e); + } + } + } + + if (invokeCallbacks) { + boolean doCallback = false; + if (isInitialized) { + // fix for #46662: skip wan notification during import + // newwan moves notification to here from invokePutCallbacks + if (event.isGenerateCallbacks()) { + doCallback = true; + } + } + else if (this.isUsedForPartitionedRegionBucket) { + // invokePutCallbacks in BucketRegion will be more discriminating + doCallback = true; + } + if (doCallback) { + notifyGatewaySender(event.getOperation().isUpdate()? EnumListenerEvent.AFTER_UPDATE + : EnumListenerEvent.AFTER_CREATE, event); + // Notify listeners + if (!event.isBulkOpInProgress()) { + try { + entry.dispatchListenerEvents(event); + } + catch (InterruptedException ie) { + Thread.currentThread().interrupt(); + stopper.checkCancelInProgress(null); + } + } + } + } + return lastModifiedTime; + } + + /** + * To lower latency, PRs generate the local filter rounting in + * DistributedCacheOperation after message distribution and before waiting for + * responses. + * + * Warning: Even if you comment out bucket condition in following method, + * getLocalRountingInfo() does NOT process CQs for bucket regions internally. + * Check + * {@link FilterProfile#getFilterRoutingInfoPart2(FilterRoutingInfo, CacheEvent)} + * . + * + * @param event + */ + protected void generateLocalFilterRouting(InternalCacheEvent event) { + boolean isEntryEvent = event.getOperation().isEntry(); + EntryEventImpl entryEvent = isEntryEvent? (EntryEventImpl)event : null; + + FilterProfile fp = this.getFilterProfile(); + FilterInfo routing = event.getLocalFilterInfo(); + boolean lockForCQ = false; + Object re = null; + if (fp != null && routing == null) { + if (isEntryEvent && entryEvent.getRegionEntry() != null) { + // bug #45520 we should either have the lock on the region entry + // or the event was elided and CQ processing won't be done on it + re = entryEvent.getRegionEntry(); + if (!entryEvent.isConcurrencyConflict()) { + Assert.assertTrue(re != null); + lockForCQ = true; + } + } + if (isEntryEvent) { + if(logger.isDebugEnabled()) { + logger.debug("getting local client routing."); + } + } + if (lockForCQ) { + synchronized(re) { + routing = fp.getLocalFilterRouting(event); + } + } else { + routing = fp.getLocalFilterRouting(event); + } + event.setLocalFilterInfo(routing); + } + // bug #45520 - do not send CQ events to clients out of order + if (routing != null && event.getOperation().isEntry() + && ((EntryEventImpl)event).isConcurrencyConflict()) { + if(logger.isDebugEnabled()) { + logger.debug("clearing CQ routing for event that's in conflict"); + } + routing.clearCQRouting(); + } + } + + /** + * This notifies all WAN sites about updated timestamp on local site. + * + * @param event + */ + protected void notifyTimestampsToGateways(EntryEventImpl event) { + + // Create updateTimeStampEvent from event. + EntryEventImpl updateTimeStampEvent = EntryEventImpl.createVersionTagHolder(event.getVersionTag()); + try { + updateTimeStampEvent.setOperation(Operation.UPDATE_VERSION_STAMP); + updateTimeStampEvent.setKeyInfo(event.getKeyInfo()); + updateTimeStampEvent.setGenerateCallbacks(false); + updateTimeStampEvent.distributedMember = event.getDistributedMember(); + updateTimeStampEvent.setNewEventId(getSystem()); + + + if (event.getRegion() instanceof BucketRegion) { + BucketRegion br = (BucketRegion)event.getRegion(); + PartitionedRegion pr = br.getPartitionedRegion(); + updateTimeStampEvent.setRegion(pr); + + // increment the tailKey for the event + if (pr.isParallelWanEnabled()) { + br.handleWANEvent(updateTimeStampEvent); + } + + if (pr.isInitialized()) { + pr.notifyGatewaySender(EnumListenerEvent.TIMESTAMP_UPDATE, updateTimeStampEvent); + } + } else { + updateTimeStampEvent.setRegion(event.getRegion()); + notifyGatewaySender(EnumListenerEvent.TIMESTAMP_UPDATE, updateTimeStampEvent); + } + } finally { + updateTimeStampEvent.release(); + } + } + + + /** + * Update CachePerfStats + */ + private void updateStatsForCreate() { + getCachePerfStats().incCreates(); + } + + public void basicPutPart3(EntryEventImpl event, RegionEntry entry, + boolean isInitialized, long lastModified, boolean invokeCallbacks, + boolean ifNew, boolean ifOld, Object expectedOldValue, + boolean requireOldValue) + { + // We used to dispatch listener events here which is moved to part2 to be in RE lock #45520. + if (invokeCallbacks) { + if (event.isBulkOpInProgress()) { + event.getPutAllOperation().addEntry(event); + } + } + } + + public void invokePutCallbacks(final EnumListenerEvent eventType, + final EntryEventImpl event, final boolean callDispatchListenerEvent, boolean notifyGateways) { + + // disallow callbacks on import + if (!event.isGenerateCallbacks()) { + return; + } + + // Notify bridge clients (if this is a BridgeServer) + Operation op = event.getOperation(); + // The spec for ConcurrentMap support requires that operations be mapped + // to non-CM counterparts + if (op == Operation.PUT_IF_ABSENT) { + event.setOperation(Operation.CREATE); + } else if (op == Operation.REPLACE) { + event.setOperation(Operation.UPDATE); + } + event.setEventType(eventType); + notifyBridgeClients(event); + if (notifyGateways) { + notifyGatewaySender(eventType, event); + } + if(callDispatchListenerEvent){ + dispatchListenerEvent(eventType, event); + } + } + + /** + * @see DistributedRegion#postUpdate(EntryEventImpl, long) + * @param event + * @param lastModifiedTime + */ + protected void postUpdate(EntryEventImpl event, long lastModifiedTime) + { + } + + /** + * retrieve a deep copy of the Region's event state. This is used + * for getInitialImage. The result is installed in the receiver of + * the image. + */ + public Map getEventState() { + if (this.eventTracker != null) { + return this.eventTracker.getState(); + } + else { + return null; + } + } + + /** + * Record the event state encapsulated in the given Map.

+ * This is intended for state transfer during GII. + * @param provider the member that provided this state + * @param state a Map obtained from getEventState() + */ + protected void recordEventState(InternalDistributedMember provider, Map state) { + if (this.eventTracker != null) { + this.eventTracker.recordState(provider, state); + } + } + + /** + * generate version tag if it does not exist and set it into the event. + * @param event + * @param entry + */ + public void generateAndSetVersionTag(InternalCacheEvent event, RegionEntry entry) { + if (entry != null && event.getOperation().isEntry()) { + EntryEventImpl entryEvent = (EntryEventImpl)event; + if (!entryEvent.isOriginRemote() && shouldGenerateVersionTag(entry, entryEvent)) { + boolean eventHasDelta = (getSystem().getConfig().getDeltaPropagation() + && !this.scope.isDistributedNoAck() + && entryEvent.getDeltaBytes() != null); + VersionTag v = entry.generateVersionTag(null, eventHasDelta, this, entryEvent); + if(logger.isDebugEnabled()) { + logger.debug("generated version tag {} for {}", v, entryEvent.getKey()); + } + } + } + } + + /** + * record the event's sequenceId in Region's event state to prevent replay. + * @param event + */ + public void recordEvent(InternalCacheEvent event) { + if (this.eventTracker != null) { + this.eventTracker.recordEvent(event); + } + } + + /** + * has the Region's event state seen this event? + * @param event + * @return true if the Region's event state has seen the event + */ + public boolean hasSeenEvent(EntryEventImpl event) { + boolean isDup = false; + if (this.eventTracker != null) { + // bug 41289 - wait for event tracker to be initialized before checkin + // so that an operation inteded for a previous version of a bucket + // is not prematurely applied to a new version of the bucket + if (this.isUsedForPartitionedRegionBucket()) { + try { + this.eventTracker.waitOnInitialization(); + } catch (InterruptedException ie) { + this.stopper.checkCancelInProgress(ie); + Thread.currentThread().interrupt(); + } + } + isDup = this.eventTracker.hasSeenEvent(event); + // don't clobber existing posDup flag e.g. set from SQLFabric client + if (isDup) { + event.setPossibleDuplicate(true); + if (this.concurrencyChecksEnabled && event.getVersionTag() == null) { + event.setVersionTag(findVersionTagForClientEvent(event.getEventId())); + } + } else { + // bug #48205 - a retried PR operation may already have a version assigned to it + // in another VM + if (event.isPossibleDuplicate() + && event.getRegion().concurrencyChecksEnabled + && (event.getVersionTag() == null) + && (event.getEventId() != null)) { + boolean isBulkOp = event.getOperation().isPutAll() || event.getOperation().isRemoveAll(); + VersionTag tag = FindVersionTagOperation.findVersionTag(event.getRegion(), event.getEventId(), isBulkOp); + event.setVersionTag(tag); + } + } + } + return isDup; + } + + /** + * tries to find the version tag for a replayed client event + * @param eventId + * @return the version tag, if known. Null if not + */ + public VersionTag findVersionTagForClientEvent(EventID eventId) { + if (this.eventTracker != null) { + return this.eventTracker.findVersionTag(eventId); + } + return null; + } + + public VersionTag findVersionTagForGatewayEvent(EventID eventId) { + if (this.eventTracker != null) { + return this.eventTracker.findVersionTagForGateway(eventId); + } + return null; + } + + /** + * tries to find the version tag for a replayed client event + * @param eventId + * @return the version tag, if known. Null if not + */ + public VersionTag findVersionTagForClientBulkOp(EventID eventId) { + if (eventId == null) { + return null; + } + if (this.eventTracker != null) { + return this.eventTracker.findVersionTagForBulkOp(eventId); + } + return null; + } + + /** + * has the Region's event state seen this event? Most checks should use + * the method that takes an Event, not an ID, but with transactions we + * do not have an event at the time the check needs to be made. Consequently, + * this method may cause events to be recorded that would otherwise be + * ignored. + * @param eventID the identifier of the event + * @return true if the Region's event state has seen the event + */ + public boolean hasSeenEvent(EventID eventID) { + if (eventID == null) { + return false; + } + boolean isDup = false; + if (this.eventTracker != null) { + // bug 41289 - wait for event tracker to be initialized before checkin + // so that an operation intended for a previous version of a bucket + // is not prematurely applied to a new version of the bucket + if (this.isUsedForPartitionedRegionBucket()) { + try { + this.eventTracker.waitOnInitialization(); + } catch (InterruptedException ie) { + this.stopper.checkCancelInProgress(ie); + Thread.currentThread().interrupt(); + } + } + isDup = this.eventTracker.hasSeenEvent(eventID, null); + } + return isDup; + } + + /** + * A routine to provide synchronization running based on + * of the requesting client for the region's event state + * @param r - a Runnable to wrap the processing of the bulk op + * @param eventID - the base event ID of the bulk op + * + * @since 5.7 + */ + public void syncBulkOp(Runnable r, EventID eventID) { + if (this.eventTracker != null && !isTX()) { + this.eventTracker.syncBulkOp(r, eventID); + } + else { + r.run(); + } + } + + public void recordBulkOpStart(ThreadIdentifier membershipID) { + if (this.eventTracker != null && !isTX()) { + this.eventTracker.recordBulkOpStart(membershipID); + } + } + + final protected void notifyBridgeClients(CacheEvent event) + { + int numBS = getCache().getCacheServers().size(); + + // #Bugfix 37518: In case of localOperations no need to notify clients. + if (event.getOperation().isLocal() || numBS == 0) { + return; + } + // Return if the inhibit all notifications flag is set + if (event instanceof EntryEventImpl) { + if (((EntryEventImpl)event).inhibitAllNotifications()) { + if(logger.isDebugEnabled()) { + logger.debug("Notification inhibited for key {}", event); + } + return; + } + } + + if (shouldNotifyBridgeClients()) { + if (numBS > 0) { + if(logger.isDebugEnabled()) { + logger.debug("{}: notifying {} bridge servers of event: {}", this.getName(), numBS, event); + } + } + + Operation op = event.getOperation(); + if (event.getOperation().isEntry()) { + EntryEventImpl e = (EntryEventImpl)event; + if (e.getEventType() == null) { + if (op.isCreate()) { + e.setEventType(EnumListenerEvent.AFTER_CREATE); + } else if (op.isUpdate()) { + e.setEventType(EnumListenerEvent.AFTER_UPDATE); + } else if (op.isDestroy()) { + e.setEventType(EnumListenerEvent.AFTER_DESTROY); + } else if (op.isInvalidate()) { + e.setEventType(EnumListenerEvent.AFTER_INVALIDATE); + } else { + throw new IllegalStateException("event is missing client notification eventType: " + e); + } + } + } + + InternalCacheEvent ice = (InternalCacheEvent)event; + if (!this.isUsedForPartitionedRegionBucket()) { + generateLocalFilterRouting(ice); + } + + CacheClientNotifier.notifyClients((InternalCacheEvent)event); + } + } + + /** + * Returns true if this region notifies multiple serial gateways. + */ + public boolean notifiesMultipleSerialGateways() { + if (isPdxTypesRegion()) { + return false; + } + int serialGatewayCount = 0; + Set allGatewaySenderIds = getAllGatewaySenderIds(); + if (!allGatewaySenderIds.isEmpty()) { + List allRemoteDSIds = getRemoteDsIds(allGatewaySenderIds); + if (allRemoteDSIds != null) { + for (GatewaySender sender : getCache().getAllGatewaySenders()) { + if (allGatewaySenderIds.contains(sender.getId())) { + if (!sender.isParallel()) { + serialGatewayCount++; + if (serialGatewayCount > 1) { + return true; + } + } + } + } + } + } + return false; + } + + protected void notifyGatewaySender(EnumListenerEvent operation, + EntryEventImpl event) { + + if (event.isConcurrencyConflict()) { // usually concurrent cache modification problem + return; + } + + // Return if the inhibit all notifications flag is set + if (event.inhibitAllNotifications()){ + if(logger.isDebugEnabled()) { + logger.debug("Notification inhibited for key {}", event); + } + return; + } + + if (!event.getOperation().isLocal()) { + Set allGatewaySenderIds = null; + checkSameSenderIdsAvailableOnAllNodes(); + if (event.getOperation() == Operation.UPDATE_VERSION_STAMP) { + allGatewaySenderIds = getGatewaySenderIds(); + } else { + allGatewaySenderIds = getAllGatewaySenderIds(); + } + + List allRemoteDSIds = getRemoteDsIds(allGatewaySenderIds); + + if (allRemoteDSIds != null) { + for (GatewaySender sender : getCache().getAllGatewaySenders()) { + if (!isPdxTypesRegion()) { + if (allGatewaySenderIds.contains(sender.getId())) { + //TODO: This is a BUG. Why return and not continue? + if((!this.getDataPolicy().withStorage()) && sender.isParallel()){ + return; + } + if(logger.isDebugEnabled()) { + logger.debug("Notifying the GatewaySender : {}", sender.getId()); + } + ((AbstractGatewaySender)sender).distribute(operation, event, + allRemoteDSIds); + } + } + } + } + +// if (shouldNotifyGatewaySender()) { +// // Get All WAN site DSID's to be sent to each WAN site so that they +// // don't redistribute it to same WAN sites again again (infinite loop). +// if (!this.getName().equals(PeerTypeRegistration.REGION_NAME)) { //This is for all region except pdx Region +// for (GatewaySender sender : getCache().getAllGatewaySenders()) { +// if (allGatewaySenderIds.contains(sender.getId())) { //Make sure we are distributing to only those senders whose id is avaialble on this region +// if(this.partitionAttributes == null && sender.isParallel()){ //ParalleGatewaySender with DR is not allowed +// throw new IllegalStateException( +// LocalizedStrings.AttributesFactory_PARALLELGATEWAYSENDER_0_IS_INCOMPATIBLE_WITH_DISTRIBUTED_REPLICATION +// .toLocalizedString(sender.getId())); +// } +// if (allRemoteDSIds == null) { +// allRemoteDSIds = new ArrayList(); +// } +// allRemoteDSIds.add(sender.getRemoteDSId()); +// } +// else { //this else is for PDX region +// if (allRemoteDSIds == null) { +// allRemoteDSIds = new ArrayList(); +// } +// allRemoteDSIds.add(sender.getRemoteDSId()); +// } +// } +// } +// if (allRemoteDSIds == null) { +// allRemoteDSIds = Collections.emptyList(); +// } +// +// // Now distribute the event to each WAN site. +// if (!this.getName().equals(PeerTypeRegistration.REGION_NAME)) { +// for (GatewaySender sender : getCache().getAllGatewaySenders()) { +// if (allGatewaySenderIds.contains(sender.getId())) { +// if((!this.getDataPolicy().withStorage()) && sender.isParallel()){ +// return; +// } +// ((AbstractGatewaySender)sender).distribute(operation, event, +// allRemoteDSIds); +// } +// } +// } +// } + } + } + + public void checkSameSenderIdsAvailableOnAllNodes() { + } + /** + * @param cacheWrite + * if true, then we're just cleaning up the local cache and calling + * listeners, + * @see DistributedRegion#basicDestroyRegion(RegionEventImpl, boolean, + * boolean, boolean) + */ + void basicDestroyRegion(RegionEventImpl event, boolean cacheWrite) + throws CacheWriterException, TimeoutException + { + basicDestroyRegion(event, cacheWrite, true, true); + } + + void basicDestroyRegion(RegionEventImpl event, boolean cacheWrite, + boolean lock, boolean callbackEvents) throws CacheWriterException, + TimeoutException + { + preDestroyChecks(); + HashSet eventSet = null; + final TXStateProxy tx = this.cache.getTXMgr().internalSuspend(); + try { + boolean acquiredLock = false; + if (lock) { + try { + acquireDestroyLock(); + acquiredLock = true; + } + catch (CancelException e) { + // ignore + if(logger.isDebugEnabled()) { + logger.debug("basicDestroyRegion: acquireDestroyLock failed due to cache closure, region = {}", getFullPath()); + } + } + } + try { // maintain destroy lock and TXStateInterface + // I moved checkRegionDestroyed up out of the following + // try block because it does not seem correct to deliver + // a destroy event to the clients of the region was already + // destroyed on the server. + checkRegionDestroyed(false); + boolean cancelledByCacheWriterException = false; // see bug 47736 + try { // ensure that destroy events are dispatched + + if (this instanceof PartitionedRegion + && !((PartitionedRegion)this).getParallelGatewaySenderIds() + .isEmpty()) { + ((PartitionedRegion)this).destroyParallelGatewaySenderRegion(event.getOperation(), + cacheWrite, lock, callbackEvents); + } + + if (this.parentRegion != null) { + // "Bubble up" the cache statistics to parent if this regions are more + // recent + this.parentRegion.updateStats(); + } + + + try { + eventSet = callbackEvents ? new HashSet() : null; + this.destroyedSubregionSerialNumbers = collectSubregionSerialNumbers(); + recursiveDestroyRegion(eventSet, event, cacheWrite); + } + catch (CancelException e) { + // This should be properly caught and ignored; if we see this there is + // a serious problem. + if (!cache.forcedDisconnect()) { + logger.warn(LocalizedMessage.create(LocalizedStrings.LocalRegion_RECURSIVEDESTROYREGION_RECURSION_FAILED_DUE_TO_CACHE_CLOSURE_REGION_0, + getFullPath()), e); + } + } catch (CacheWriterException cwe) { + cancelledByCacheWriterException = true; + throw cwe; + } + + // at this point all subregions are destroyed and this region + // has been marked as destroyed and postDestroyRegion has been + // called for each region. The only detail left is + // unhooking this region from the parent subregion map, and + // sending listener events + Assert.assertTrue(this.isDestroyed); + + /** + * Added for M&M : At this point we can safely call ResourceEvent + * to remove the region artifacts From Management Layer + **/ + if (!isInternalRegion()) { + InternalDistributedSystem system = this.cache + .getDistributedSystem(); + system.handleResourceEvent(ResourceEvent.REGION_REMOVE, this); + } + + try { + LocalRegion parent = this.parentRegion; + if (parent == null) { + this.cache.removeRoot(this); + } + else { + parent.subregions.remove(this.regionName, this); + } + } + catch (CancelException e) { + // I don't think this should ever happens: bulletproofing for bug 39454 + if (!cache.forcedDisconnect()) { + logger.warn(LocalizedMessage.create(LocalizedStrings.LocalRegion_BASICDESTROYREGION_PARENT_REMOVAL_FAILED_DUE_TO_CACHE_CLOSURE_REGION_0, + getFullPath()), e); + } + } + } // ensure that destroy events are dispatched + finally { + if (!cancelledByCacheWriterException) { + // We only need to notify bridgeClients of the top level region destroy + // which it will take and do a localRegionDestroy. + // So we pass it event and NOT eventSet + event.setEventType(EnumListenerEvent.AFTER_REGION_DESTROY); + notifyBridgeClients(event); + } + // call sendPendingRegionDestroyEvents even if cancelledByCacheWriterException + // since some of the destroys happened. + if (eventSet != null && callbackEvents) { + try { + sendPendingRegionDestroyEvents(eventSet); + } + catch (CancelException e) { + // ignore, we're mute. + } + } + } + } // maintain destroy lock and TXStateInterface + finally { + if (acquiredLock) { + try { + releaseDestroyLock(); + } + catch (CancelException e) { + // ignore + } + } + } + } finally { + this.cache.getTXMgr().resume(tx); + } + } + + protected void preDestroyChecks() { + + } + + protected void distributeDestroyRegion(RegionEventImpl event, boolean notifyOfRegionDeparture) { + } + + public static final float DEFAULT_HEAPLRU_EVICTION_HEAP_PERCENTAGE = 80.0f; + /** + * Called after this region has been completely created + * + * @since 5.0 + * + * @see DistributedRegion#postDestroyRegion(boolean, RegionEventImpl) + */ + protected void postCreateRegion() + { + if (getEvictionAttributes().getAlgorithm().isLRUHeap()) { + final LogWriter logWriter = cache.getLogger(); + float evictionPercentage = DEFAULT_HEAPLRU_EVICTION_HEAP_PERCENTAGE; + // This is new to 6.5. If a heap lru region is created + // we make sure that the eviction percentage is enabled. + InternalResourceManager rm = this.cache.getResourceManager(); + if (!getOffHeap()) { + if (!rm.getHeapMonitor().hasEvictionThreshold()) { + float criticalPercentage = rm.getCriticalHeapPercentage(); + if (criticalPercentage > 0.0f) { + if (criticalPercentage >= 10.f) { + evictionPercentage = criticalPercentage - 5.0f; + } else { + evictionPercentage = criticalPercentage; + } + } + rm.setEvictionHeapPercentage(evictionPercentage); + if (logWriter.fineEnabled()) { + logWriter.fine("Enabled heap eviction at " + evictionPercentage + " percent for LRU region"); + } + } + } else { + if (!rm.getOffHeapMonitor().hasEvictionThreshold()) { + float criticalPercentage = rm.getCriticalOffHeapPercentage(); + if (criticalPercentage > 0.0f) { + if (criticalPercentage >= 10.f) { + evictionPercentage = criticalPercentage - 5.0f; + } else { + evictionPercentage = criticalPercentage; + } + } + rm.setEvictionOffHeapPercentage(evictionPercentage); + if (logWriter.fineEnabled()) { + logWriter.fine("Enabled off-heap eviction at " + evictionPercentage + " percent for LRU region"); + } + } + } + } + + if (!isInternalRegion()) { + getCachePerfStats().incRegions(1); + if (getMembershipAttributes().hasRequiredRoles()) { + getCachePerfStats().incReliableRegions(1); + } + } + + if (hasListener()) { + RegionEventImpl event = new RegionEventImpl(this, + Operation.REGION_CREATE, null, false, getMyId()); + dispatchListenerEvent(EnumListenerEvent.AFTER_REGION_CREATE, event); + } + releaseAfterRegionCreateEventLatch(); + SystemMemberCacheEventProcessor.send(getCache(), this, + Operation.REGION_CREATE); + initializingRegion.set(null); + } + + /** + * notify region membership listeners of the initial membership + * @param listeners an array of listeners to notify + */ + public void notifyOfInitialMembers(CacheListener[] listeners, Set others) { + if (listeners != null) { + for (int i = 0; i < listeners.length; i++) { + if (listeners[i] instanceof RegionMembershipListener) { + RegionMembershipListener rml = (RegionMembershipListener)listeners[i]; + try { + DistributedMember[] otherDms = new DistributedMember[others + .size()]; + others.toArray(otherDms); + rml.initialMembers(this, otherDms); + } + catch (VirtualMachineError err) { + SystemFailure.initiateFailure(err); + // If this ever returns, rethrow the error. We're poisoned + // now, so don't let this thread continue. + throw err; + } + catch (Throwable t) { + // Whenever you catch Error or Throwable, you must also + // catch VirtualMachineError (see above). However, there is + // _still_ a possibility that you are dealing with a cascading + // error condition, so you also need to check to see if the JVM + // is still usable: + SystemFailure.checkFailure(); + logger.error(LocalizedMessage.create(LocalizedStrings.DistributedRegion_EXCEPTION_OCCURRED_IN_REGIONMEMBERSHIPLISTENER), t); + } + } + } + } + } + + /** + * This method is invoked after isDestroyed has been set to true + */ + protected void postDestroyRegion(boolean destroyDiskRegion, + RegionEventImpl event) + { + if (this.diskRegion != null) { + if (destroyDiskRegion) { + this.diskRegion.endDestroy(this); + } + else { + this.diskRegion.close(this); + } + } + if (this.versionVector != null) { + try { + this.cache.getDistributionManager().removeMembershipListener(this.versionVector); + } catch (CancelException e) { + // ignore: cache close will remove the membership listener + } + } + } + + /** + * @param cacheWrite + * true if cacheWrite should be performed or false if cacheWrite + * should not be performed + * @see DistributedRegion#basicDestroy(EntryEventImpl, boolean, Object) + */ + void basicDestroy(final EntryEventImpl event, + final boolean cacheWrite, + Object expectedOldValue) + throws EntryNotFoundException, CacheWriterException, TimeoutException { + + if (!event.isOriginRemote()) { + checkIfReplicatedAndLocalDestroy(event); + } + + if (hasSeenEvent(event)) { + assert getJTAEnlistedTX() == null; + if(logger.isTraceEnabled(LogMarker.DM)) { + logger.trace(LogMarker.DM, "LR.basicDestroy: this cache has already seen this event {}", event); + } + if (this.concurrencyChecksEnabled && event.getVersionTag() != null && !event.getVersionTag().isRecorded()) { + getVersionVector().recordVersion((InternalDistributedMember) event.getDistributedMember(), event.getVersionTag()); + } + // Bug 49449: When client retried and returned with hasSeenEvent for both LR and DR, the server should still + // notifyGatewayHubs even the event could be duplicated in gateway queues1 + notifyGatewaySender(EnumListenerEvent.AFTER_DESTROY, event); + return; + } + + discoverJTA(); + getDataView().destroyExistingEntry(event, cacheWrite, expectedOldValue); + } + + /** + * Do the expensive work of discovering an existing JTA transaction + * Only needs to be called at Region.Entry entry points e.g. Region.put, Region.invalidate, etc. + * @since tx + */ + final public void discoverJTA() { + if (!isSecret() && !isUsedForPartitionedRegionAdmin() + && !isUsedForMetaRegion()) { // prevent internal regions from participating in a TX + getJTAEnlistedTX(); + } + } + + /** + * @return true if a transaction is in process + * @since tx + */ + public final boolean isTX() { + return getTXState() != null; + } + + /** + * @param expectedOldValue if this is non-null, only destroy if key exists + * and old value is equal to expectedOldValue + * @return true if a the destroy was done; false if it was not needed + */ + final boolean mapDestroy(final EntryEventImpl event, + final boolean cacheWrite, + final boolean isEviction, + Object expectedOldValue) + throws CacheWriterException, EntryNotFoundException, TimeoutException { + final boolean inGII = lockGII(); + try { // make sure unlockGII is called for bug 40001 + return mapDestroy(event, cacheWrite, isEviction, expectedOldValue, inGII, false); + } finally { + if (inGII) { + unlockGII(); + } + } + } + + final boolean mapDestroy(final EntryEventImpl event, + final boolean cacheWrite, + final boolean isEviction, + Object expectedOldValue, + boolean needTokensForGII, + boolean removeRecoveredEntry) { + //When register interest is in progress , + // We should not remove the key from the + // region and instead replace the value + // in the map with a DESTROYED token + final boolean inRI = !needTokensForGII + && !event.isFromRILocalDestroy() + && lockRIReadLock(); + // at this point riCnt is guaranteed to be correct and we know for sure + // whether a RI is in progress and that riCnt will not change during this + // destroy operation + try { + final boolean needRIDestroyToken = inRI && (this.riCnt > 0); + final boolean inTokenMode = needTokensForGII || needRIDestroyToken; + // the following will call basicDestroyPart2 at the correct moment + boolean result = this.entries.destroy(event, + inTokenMode, + needRIDestroyToken, + cacheWrite, + isEviction, + expectedOldValue, + removeRecoveredEntry); + // AbstractRegionMap.destroy now calls cancelExpiryTask + return result; + } catch (ConcurrentCacheModificationException e) { + // this can happen in a client/server cache when another thread + // managed to slip in its version info to the region entry before this + // thread got around to doing so + if(logger.isDebugEnabled()) { + logger.debug("caught concurrent modification attempt when applying {}", event); + } + // Notify clients only if its NOT a gateway event. + if (event.getVersionTag() != null && !event.getVersionTag().isGatewayTag()) { + notifyBridgeClients(event); + } + return true; // event was elided + } catch(DiskAccessException dae) { + handleDiskAccessException(dae); + throw dae; + } + finally { + if (inRI) { + unlockRIReadLock(); + } + } + } + + /** + * Return true if dae was caused by a RegionDestroyedException. + * This was added for bug 39603. + */ + static boolean causedByRDE(DiskAccessException dae) { + boolean result = false; + if (dae != null) { + Throwable cause = dae.getCause(); + while (cause != null) { + if (cause instanceof RegionDestroyedException) { + result = true; + break; + } + cause = cause.getCause(); + } + } + return result; + } + + final public void handleDiskAccessException(DiskAccessException dae) { + handleDiskAccessException(dae, false); + } + //Asif:To Fix bug 39079, we are locally destroying the region, the + //destruction takes place here & not at DiskRegion or AbstractOplogDiskRegionEntry level + //is to eliminate any possibility of deadlocks ,as it is an entry operation thread + //which is implictly closing the region & stopping the Servers + /** + * @param dae DiskAccessException encountered by the thread + * @param duringInitialization indicates that this exception occurred during + * region initialization. Instead of closing the cache here, we rely on the + * region initialization to clean things up. + * @see DistributedRegion#initialize(InputStream, InternalDistributedMember, InternalRegionArguments) + * @see LocalRegion#initialize(InputStream, InternalDistributedMember, InternalRegionArguments) + * @see InitialImageOperation#processChunk + */ + final public void handleDiskAccessException(DiskAccessException dae, boolean duringInitialization) { + // these will rethrow the originating exception + if (duringInitialization || causedByRDE(dae)) { + return; + } + + // log the error + StringId sid = LocalizedStrings.LocalRegion_A_DISKACCESSEXCEPTION_HAS_OCCURED_WHILE_WRITING_TO_THE_DISK_FOR_REGION_0_THE_CACHE_WILL_BE_CLOSED; + logger.error(LocalizedMessage.create(sid, this.fullPath), dae); + + // forward the error to the disk store + getDiskStore().handleDiskAccessException(dae); + } + + void expireDestroy(final EntryEventImpl event, + final boolean cacheWrite) { + basicDestroy(event, cacheWrite, null); + } + + void expireInvalidate(final EntryEventImpl event) { + basicInvalidate(event); + } + + /** + * Creates an event for EVICT_DESTROY operations. + * It is intended that this method be overridden to allow for special + * handling of Partitioned Regions. + * @param key - the key that this event is related to + * @return an event for EVICT_DESTROY + */ + protected EntryEventImpl generateEvictDestroyEvent(final Object key) { + EntryEventImpl event = EntryEventImpl.create( + this, Operation.EVICT_DESTROY, key, null/* newValue */, + null, false, getMyId()); + // Fix for bug#36963 + if (generateEventID()) { + event.setNewEventId(cache.getDistributedSystem()); + } + event.setFetchFromHDFS(false); + return event; + } + protected EntryEventImpl generateCustomEvictDestroyEvent(final Object key) { + EntryEventImpl event = EntryEventImpl.create( + this, Operation.CUSTOM_EVICT_DESTROY, key, null/* newValue */, + null, false, getMyId()); + + // Fix for bug#36963 + if (generateEventID()) { + event.setNewEventId(cache.getDistributedSystem()); + } + event.setFetchFromHDFS(false); + return event; + } + + /** + * @return true if the evict destroy was done; false if it was not needed + */ + boolean evictDestroy(LRUEntry entry) + { + + checkReadiness(); + final EntryEventImpl event = + generateEvictDestroyEvent(entry.getKey()); + try { + return mapDestroy(event, + false, // cacheWrite + true, // isEviction + null); // expectedOldValue + } + catch (CacheWriterException error) { + throw new Error(LocalizedStrings.LocalRegion_CACHE_WRITER_SHOULD_NOT_HAVE_BEEN_CALLED_FOR_EVICTDESTROY.toLocalizedString(), error); + } + catch (TimeoutException anotherError) { + throw new Error(LocalizedStrings.LocalRegion_NO_DISTRIBUTED_LOCK_SHOULD_HAVE_BEEN_ATTEMPTED_FOR_EVICTDESTROY.toLocalizedString(), anotherError); + } + catch (EntryNotFoundException yetAnotherError) { + throw new Error(LocalizedStrings.LocalRegion_ENTRYNOTFOUNDEXCEPTION_SHOULD_BE_MASKED_FOR_EVICTDESTROY.toLocalizedString(), yetAnotherError); + } finally { + event.release(); + } + } + + /** + * Called by lower levels {@link AbstractRegionMap} while holding the entry + * synchronization and while the entry remains in the map. Once + * the entry is removed from the map, then other operations synchronize on a + * new entry, allow for ordering problems between + * {@link #create(Object, Object, Object)} and + * {@link #destroy(Object, Object)} operations. + * + * @param entry the Region entry being destroyed + * @param event + * the event describing the destroy operation + * @since 5.1 + */ + protected void basicDestroyBeforeRemoval(RegionEntry entry, EntryEventImpl event) + { + } + + /** + * Called by lower levels, while still holding the write sync lock, and the + * low level has completed its part of the basic destroy + */ + void basicDestroyPart2(RegionEntry re, EntryEventImpl event, + boolean inTokenMode, boolean conflictWithClear, boolean duringRI, boolean invokeCallbacks) + { + if (!(this instanceof HARegion)) { + if (logger.isTraceEnabled()) { + logger.trace("basicDestroyPart2(inTokenMode={},conflictWithClear={},duringRI={}) event={}", + inTokenMode, conflictWithClear, duringRI, event); + } + } + VersionTag v = event.getVersionTag(); + + /** + * destroys that are not part of the cleaning out of keys prior to a register-interest + * are marked with Tombstones instead of Destroyed tokens so that they are not + * reaped after the RI completes. RI does not create Tombstones because it + * would flood the TombstoneService with unnecessary work. + */ + if (inTokenMode && !(this.concurrencyChecksEnabled || event.isFromRILocalDestroy())) { + if (re.isDestroyed()) { + getImageState().addDestroyedEntry(event.getKey()); + if (!(this instanceof HARegion)) { + if (logger.isTraceEnabled()) { + logger.trace("basicDestroy: {}--> Token.DESTROYED", event.getKey()); + } + } + } + } + else { + if (this.concurrencyChecksEnabled && !(this instanceof HARegion)) { + if (logger.isDebugEnabled()) { + logger.debug("basicDestroyPart2: {}, version={}", event.getKey(), v); + } + } + } + /* this is too late to do index maintenance with a CompactRangeIndex + because we need to have the old value still intact. At this point + the old value has already be replaced with a destroyed token. + if (!isProxy() && !conflictWithClear) { + if (this.indexManager != null) { + try { + this.indexManager.updateIndexes(re, IndexManager.REMOVE_ENTRY); + } + catch (QueryException e) { + throw new IndexMaintenanceException(e); + } + } + }*/ + + notifyGatewaySender(EnumListenerEvent.AFTER_DESTROY, event); + + // invoke callbacks if initialized and told to do so, or if this + // is a bucket in a partitioned region + if (invokeCallbacks && !event.isBulkOpInProgress()) { + if ((isInitialized() && (!inTokenMode || duringRI)) + || this.isUsedForPartitionedRegionBucket) { + try { + re.dispatchListenerEvents(event); + } + catch (InterruptedException ie) { + Thread.currentThread().interrupt(); + stopper.checkCancelInProgress(null); + return; + } + } else { + event.callbacksInvoked(true); + } + } + } + + /** + * distribution and callback notification are done in part2 inside + * entry lock for maintaining the order of events. + */ + void basicDestroyPart3(RegionEntry re, EntryEventImpl event, + boolean inTokenMode, boolean duringRI, boolean invokeCallbacks, + Object expectedOldValue) { + if (invokeCallbacks) { + if (event.isBulkOpInProgress()) { + event.getRemoveAllOperation().addEntry(event); + } + } + if (!inTokenMode || duringRI) { + updateStatsForDestroy(); + } + + if (this.entryUserAttributes != null) { + this.entryUserAttributes.remove(event.getKey()); + } + } + + /** + * Update stats + */ + private void updateStatsForDestroy() { + getCachePerfStats().incDestroys(); + } + + //Asif : This method will clear the tranxnl entries + final void txClearRegion() + { + TXStateInterface tx = getJTAEnlistedTX(); + if (tx != null) { + tx.rmRegion(this); + } + } + + public void invokeDestroyCallbacks(final EnumListenerEvent eventType, + final EntryEventImpl event , final boolean callDispatchListenerEvent, boolean notifyGateways) + { + // The spec for ConcurrentMap support requires that operations be mapped + // to non-CM counterparts + if (event.getOperation() == Operation.REMOVE) { + event.setOperation(Operation.DESTROY); + } + event.setEventType(eventType); + notifyBridgeClients(event); + if (notifyGateways) { + notifyGatewaySender(eventType, event); + } + if(callDispatchListenerEvent){ + dispatchListenerEvent(eventType, event); + } + } + + + public void invokeTXCallbacks(final EnumListenerEvent eventType, + final EntryEventImpl event , final boolean callDispatchListenerEvent) + { + // The spec for ConcurrentMap support requires that operations be mapped + // to non-CM counterparts + + Operation op = event.getOperation(); + + if (logger.isDebugEnabled()) { + logger.debug("invokeTXCallbacks for event {}", event); + } + + if (op == Operation.REMOVE) { + event.setOperation(Operation.DESTROY); + } else if (op == Operation.PUT_IF_ABSENT) { + event.setOperation(Operation.CREATE); + } else if (op == Operation.REPLACE) { + event.setOperation(Operation.UPDATE); + } + event.setEventType(eventType); + notifyBridgeClients(event); + notifyGatewaySender(eventType, event); + if (callDispatchListenerEvent){ + if (event.getInvokePRCallbacks() || (!(event.getRegion() instanceof PartitionedRegion) && !(event.getRegion().isUsedForPartitionedRegionBucket()))) { + dispatchListenerEvent(eventType, event); + } + } + } + + + /** + * @param key + * the key of the entry to destroy + * @param rmtOrigin + * true if transaction being applied had a remote origin + * @param event + * filled in if operation performed + * @param needTokensForGII + * true if caller has determined we are in destroy token mode and + * will keep us in that mode while this call is executing. + * @param filterRoutingInfo + * @param bridgeContext + * @param isOriginRemote whether the event originated in a peer or in this vm + * @param txEntryState for passing up versionTag - only on near side + * @param versionTag tag generated by txCoordinator - only on far side + * @param tailKey tail (shadow) key generated by txCoordinator for WAN - only on farside + */ + final void txApplyDestroy(Object key, TransactionId rmtOrigin, + TXRmtEvent event, boolean needTokensForGII, Operation op, + EventID eventId, Object aCallbackArgument,List pendingCallbacks, + FilterRoutingInfo filterRoutingInfo, ClientProxyMembershipID bridgeContext, + boolean isOriginRemote, TXEntryState txEntryState, VersionTag versionTag, long tailKey) + { + final boolean inRI = !needTokensForGII && lockRIReadLock(); + final boolean needRIDestroyToken = inRI && (this.riCnt > 0); + final boolean inTokenMode = needTokensForGII || needRIDestroyToken; + + try { + this.entries.txApplyDestroy(key, rmtOrigin, event, inTokenMode, needRIDestroyToken, + op, eventId, aCallbackArgument,pendingCallbacks,filterRoutingInfo,bridgeContext, isOriginRemote, txEntryState, versionTag, tailKey); + } finally { + if (inRI) { + unlockRIReadLock(); + } + } + } + + /** + * Called by lower levels, while still holding the write sync lock, and the + * low level has completed its part of the basic destroy + */ + void txApplyDestroyPart2(RegionEntry re, Object key, boolean inTokenMode, boolean clearConflict) + { + if (this.testCallable != null) { + this.testCallable.call(this, Operation.DESTROY, re); + } + if (inTokenMode) { + getImageState().addDestroyedEntry(key); + } + else { + updateStatsForDestroy(); + } + if (this.entryUserAttributes != null) { + this.entryUserAttributes.remove(key); + } + } + + /** + * @see DistributedRegion#basicInvalidateRegion(RegionEventImpl) + * @param event + */ + void basicInvalidateRegion(RegionEventImpl event) + { + final TXStateProxy tx = this.cache.getTXMgr().internalSuspend(); + try { + this.regionInvalid = true; + getImageState().setRegionInvalidated(true); + invalidateAllEntries(event); + Set allSubregions = subregions(true); + for (Iterator itr = allSubregions.iterator(); itr.hasNext();) { + LocalRegion rgn = (LocalRegion)itr.next(); + rgn.regionInvalid = true; + try { + rgn.getImageState().setRegionInvalidated(true); + rgn.invalidateAllEntries(event); + + if (!rgn.isInitialized()) + continue; // don't invoke callbacks if not initialized yet + + if (rgn.hasListener()) { + RegionEventImpl event2 = (RegionEventImpl)event.clone(); + event2.region = rgn; + rgn.dispatchListenerEvent( + EnumListenerEvent.AFTER_REGION_INVALIDATE, event2); + } + } + catch (RegionDestroyedException ignore) { + // ignore subregions that have been destroyed to fix bug 33276 + } + } + + if (!isInitialized()) + return; + + event.setEventType(EnumListenerEvent.AFTER_REGION_INVALIDATE); + notifyBridgeClients(event); + + boolean hasListener = hasListener(); + if (logger.isDebugEnabled()) { + logger.debug("basicInvalidateRegion: hasListener = {}", hasListener); + } + if (hasListener) { + dispatchListenerEvent(EnumListenerEvent.AFTER_REGION_INVALIDATE, event); + } + } + finally { + this.cache.getTXMgr().resume(tx); + } + } + + /** + * Determines whether the receiver is unexpired with regard to the given + * timeToLive and idleTime attributes, which may different from this entry's + * actual attributes. Used for validation of objects during netSearch(), which + * must validate remote entries against local timeout attributes. + */ + boolean isExpiredWithRegardTo(Object key, int ttl, int idleTime) + { + + if (!getAttributes().getStatisticsEnabled()) + return false; + + long expTime; + try { + expTime = (new NetSearchExpirationCalculator(this, key, ttl, idleTime)) + .getExpirationTime(); + } + catch (EntryNotFoundException ex) { + return true; + } + if (expTime == 0) + return false; + return expTime <= cacheTimeMillis(); + } + + void dispatchListenerEvent(EnumListenerEvent op, InternalCacheEvent event) + { + // Return if the inhibit all notifications flag is set + boolean isEntryEvent = event instanceof EntryEventImpl; + if (isEntryEvent) { + if (((EntryEventImpl)event).inhibitAllNotifications()){ + if (logger.isDebugEnabled()) { + logger.debug("Notification inhibited for key {}", event); + } + return; + } + } + + if (shouldDispatchListenerEvent()) { + //Assert.assertTrue(event.getRegion() == this); + if (logger.isTraceEnabled()) { + logger.trace("dispatchListenerEvent event={}", event); + } + final long start = getCachePerfStats().startCacheListenerCall(); + + boolean origOriginRemote = false; + boolean isOriginRemoteSet = false; + + try { + if ((isEntryEvent)) { + if (((EntryEventImpl)event).isSingleHop()) { + origOriginRemote = event.isOriginRemote(); + ((EntryEventImpl)event).setOriginRemote(true); + isOriginRemoteSet = true; + } + RegionEntry re = ((EntryEventImpl) event).getRegionEntry(); + if (re != null) { + ((EntryEventImpl) event).getRegionEntry() + .setCacheListenerInvocationInProgress(true); + } + } + + if (!GemFireCacheImpl.ASYNC_EVENT_LISTENERS) { + dispatchEvent(this, event, op); + } + else { + final EventDispatcher ed = new EventDispatcher(event, op); + try { + this.cache.getEventThreadPool().execute(ed); + } + catch (RejectedExecutionException rex) { + ed.release(); + logger.warn(LocalizedMessage.create(LocalizedStrings.LocalRegion_0_EVENT_NOT_DISPATCHED_DUE_TO_REJECTED_EXECUTION), rex); + } + } + } + finally { + getCachePerfStats().endCacheListenerCall(start); + if (isOriginRemoteSet) { + ((EntryEventImpl)event).setOriginRemote(origOriginRemote); + } + if (isEntryEvent) { + RegionEntry re = ((EntryEventImpl) event).getRegionEntry(); + if (re != null) { + re.setCacheListenerInvocationInProgress(false); + } + } + } + } + } + + /** @return true if initialization is complete */ + public boolean isInitialized() + { + if (this.initialized) { + return true; + } + else { + long count; + StoppableCountDownLatch latch = this.initializationLatchAfterGetInitialImage; + if (latch == null) { + return true; + } + count = latch.getCount(); + if (count == 0) { + this.initialized = true; + return true; + } + else { + return false; + } + } + } + + /** + * @return true if event state has been transfered to this region + * from another cache + */ + public boolean isEventTrackerInitialized() { + if (this.eventTracker != null) { + return this.eventTracker.isInitialized(); + } + return false; + } + + /** + * @return true if this region has an event tracker + */ + public boolean hasEventTracker() { + return (this.eventTracker != null); + } + + public void acquireDestroyLock() + { + LocalRegion root = getRoot(); + boolean acquired = false; + do { + this.cache.getCancelCriterion().checkCancelInProgress(null); + boolean interrupted = Thread.interrupted(); + try { + root.destroyLock.acquire(); + acquired = true; + } + catch (InterruptedException ie) { + interrupted = true; + this.cache.getCancelCriterion().checkCancelInProgress(ie); + } + finally { + if (interrupted) { + Thread.currentThread().interrupt(); + } + } + } while (!acquired); + if (logger.isDebugEnabled()) { + logger.debug("Acquired Destroy Lock: {}", root); + } + } + + public void releaseDestroyLock() + { + LocalRegion root = getRoot(); + if (logger.isDebugEnabled()) { + logger.debug("Releasing Destroy Lock: {}", root.getName()); + } + root.destroyLock.release(); + } + + /** + * Cleans up any resources that may have been allocated for this region during + * its initialization. + */ + void cleanupFailedInitialization() + { + // mark as destroyed + // TODO OFFHEAP MERGE: to fix 49905 asif commented out isDestroyed being set. + // But in xd it was set after closeEntries was called. + // Here it is set before and it fixed 49555. + this.isDestroyed = true; + // after isDestroyed is set to true call removeResourceListener to fix bug 49555 + this.cache.getResourceManager(false).removeResourceListener(this); + closeEntries(); //fixes bug 41333 + this.destroyedSubregionSerialNumbers = collectSubregionSerialNumbers(); + try { + if (this.eventTracker != null) { + this.eventTracker.stop(); + } + if (this.diskRegion != null) { + // This was needed to fix bug 30937 + try { + diskRegion.cleanupFailedInitialization(this); + } + catch (IllegalStateException ex) { + // just ignore this exception since whoever called us is going + // to report the exception that caused initialization to fail. + } + } + } + finally { + // make sure any waiters on initializing Latch are released + this.releaseLatches(); + } + } + + //////////////////// Private Methods //////////////////////////////////////// + + LocalRegion getRoot() + { + LocalRegion r = this; + while (r.parentRegion != null) { + r = r.parentRegion; + } + return r; + } + + private void initializationFailed(LocalRegion subregion) + { + synchronized (this.subregionsLock) { // bugfix for bug#34883 (tushar) + this.subregions.remove(subregion.getName()); + } + subregion.cleanupFailedInitialization(); + } + + /** + * PRECONDITIONS: Synchronized on updateMonitor for this key in order to + * guarantee write-through to map entry, and key must be in map + * + * @param p_lastModified + * time, may be 0 in which case uses now instead + * + * @return the actual lastModifiedTime used. + */ + long updateStatsForPut(RegionEntry entry, long p_lastModified, + boolean lruRecentUse) + { + long lastModified = p_lastModified; + if (lruRecentUse) { + entry.setRecentlyUsed(); // fix for bug 31102 + } + if (lastModified == 0L) { + lastModified = cacheTimeMillis(); + } + entry.updateStatsForPut(lastModified); + IndexManager.setIndexBufferTime(lastModified, cacheTimeMillis()); + if (this.statisticsEnabled && !isProxy()) { + // do not reschedule if there is already a task in the queue. + // this prevents bloat in the TimerTask since cancelled tasks + // do not actually get removed from the TimerQueue. + // When the already existing task gets fired it checks to see + // if it is premature and if so reschedules a task at that time. + addExpiryTaskIfAbsent(entry); + } + // propagate to region + setLastModifiedTime(lastModified); + return lastModified; + } + + /** + * Returns a region in the subregion map first, then looks in the + * reinitializing region registry. + * + * @return the region or null if not found, may be destroyed + */ + private LocalRegion basicGetSubregion(String name) + { + LocalRegion r = toRegion(this.subregions.get(name)); + // don't wait for reinitialization if the init_level for this thread is + // ANY_INIT: We don't want CreateRegion messages to wait on a future + // because it would cause a deadlock. If the region is ready for a + // CreateRegion message, it would have been in the subregions map. + if (r == null && threadInitLevelRequirement() != ANY_INIT) { + // try future + // Region p = this.parentRegion; + String thePath = getFullPath() + SEPARATOR + name; + if (logger.isDebugEnabled()) { + logger.debug("Trying reinitializing region, fullPath={}", thePath); + } + r = this.cache.getReinitializingRegion(thePath); + if (logger.isDebugEnabled()) { + logger.debug("Reinitialized region is {}", r); + } + } + return r; + } + + /** + * Make a LocalRegion from an element in the subregion map Sent to parent + * region. + * + * @return This method may return null or a destroyed region if the region was + * just destroyed + */ + private LocalRegion toRegion(Object element) + { + LocalRegion rgn = (LocalRegion)element; + if (rgn != null) { + // do not return until done initializing (unless this is an initializing + // thread) + rgn.waitOnInitialization(); + } + return rgn; + } + + /** + * Update the API statistics appropriately for returning this value from get. + * + * @param re + * the entry whose value was accessed + */ + public void updateStatsForGet(final RegionEntry re, final boolean hit) { + if (!this.statisticsEnabled) { + return; + } + + final long now = cacheTimeMillis(); + if (re != null) { + re.updateStatsForGet(hit, now); + if (isEntryIdleExpiryPossible()) { + addExpiryTaskIfAbsent(re); + } + } + + // update region stats + setLastAccessedTime(now, hit); + } + + private void sendPendingRegionDestroyEvents(HashSet set) + { + Iterator iterator = set.iterator(); + while (iterator.hasNext()) { + RegionEventImpl event = (RegionEventImpl)iterator.next(); + event.region.dispatchListenerEvent( + EnumListenerEvent.AFTER_REGION_DESTROY, event); + if (!cache.forcedDisconnect()) { + SystemMemberCacheEventProcessor.send(getCache(), event.getRegion(), event + .getOperation()); + } + } + } + + /** The listener is not closed until after the afterRegionDestroy event */ + protected void closeCallbacksExceptListener() + { + closeCacheCallback(getCacheLoader()); + closeCacheCallback(getCacheWriter()); + closeCacheCallback(getEvictionController()); + } + + /** This is only done when the cache is closed. */ + private void closeAllCallbacks() + { + closeCallbacksExceptListener(); + CacheListener[] listeners = fetchCacheListenersField(); + if (listeners != null) { + for (int i = 0; i < listeners.length; i++) { + closeCacheCallback(listeners[i]); + } + } + } + + /** + * Release the client connection pool if we have one + * @since 5.7 + */ + private void detachPool() { + ServerRegionProxy mySRP = getServerProxy(); + if (mySRP != null) { + GemFireCacheImpl gc = getCache(); + String poolname =this.getPoolName(); + PoolImpl dpool= (PoolImpl)PoolManager.find(this.getPoolName()); + if(poolname!=null && dpool!=null){ + mySRP.detach(gc.keepDurableSubscriptionsAlive() || dpool.getKeepAlive()); + }else{ + mySRP.detach(gc.keepDurableSubscriptionsAlive()); + } + } + } + + /** + * Closes the cqs created based on this region (Cache Client/writer/loader). + */ + private void closeCqs() { + CqService cqService = getCache().getCqService(); + if (cqService != null) { + try { + cqService.closeCqs(getFullPath()); + } + catch (VirtualMachineError err) { + SystemFailure.initiateFailure(err); + // If this ever returns, rethrow the error. We're poisoned + // now, so don't let this thread continue. + throw err; + } + catch (Throwable t) { + // Whenever you catch Error or Throwable, you must also + // catch VirtualMachineError (see above). However, there is + // _still_ a possibility that you are dealing with a cascading + // error condition, so you also need to check to see if the JVM + // is still usable: + SystemFailure.checkFailure(); + logger.warn(LocalizedMessage.create(LocalizedStrings.LocalRegion_EXCEPTION_OCCURRED_WHILE_CLOSING_CQS_ON_REGION_DESTORY), t); + } + } + } + + /** + * Called when the cache is closed. Behaves just like a Region.close except + * the operation is CACHE_CLOSE + */ + void handleCacheClose(Operation op) + { + RegionEventImpl ev = new RegionEventImpl(this, op, null, false, getMyId(), + generateEventID()); + if (!this.isDestroyed) { // bruce: don't destroy if already destroyed + try { + basicDestroyRegion(ev, false, true, true); + } + catch (CancelException ignore) { + // If the region was destroyed we see this because the cache is closing. + // Since we are trying to close the cache don't get upset if + // a region was destroyed out from under us + if (logger.isDebugEnabled()) { + logger.debug("handleCacheClose: Encountered cache closure while closing region {}", getFullPath()); + } + } + catch (RegionDestroyedException ignore) { + // Since we are trying to close the cache don't get upset if + // a region was destroyed out from under us + } + catch (CacheWriterException e) { + // not possible with local operation, CacheWriter not called + throw new Error(LocalizedStrings.LocalRegion_CACHEWRITEREXCEPTION_SHOULD_NOT_BE_THROWN_HERE.toLocalizedString(), e); + } + catch (TimeoutException e) { + // not possible with local operation, no distributed locks possible + InternalDistributedSystem ids = (this.getCache().getDistributedSystem()); + if (!ids.isDisconnecting()) { + throw new InternalGemFireError(LocalizedStrings.LocalRegion_TIMEOUTEXCEPTION_SHOULD_NOT_BE_THROWN_HERE.toLocalizedString(), e); + } + } + } + } + void cleanUpOnIncompleteOp(EntryEventImpl event, RegionEntry re, + boolean eventRecorded, boolean updateStats, boolean isReplace) { + //TODO:Asif: This is incorrect implementation for replicated region in case of + //sql fabric, as sqlf index would already be updated, if eventRecorded + //flag is true.So if entry is being removed , + //then the sqlfindex also needs to be corrected + IndexUpdater iu = this.getIndexUpdater(); // sqlf system + if(!eventRecorded || iu ==null || isReplace) { + //Ok to remove entry whether sqlfabric or gfe as index has not been modified yet by the operation + this.entries.removeEntry(event.getKey(), re, updateStats) ; + }else { + // a sqlf system, with event recorded as true. we need to update index. + //Use the current event to indicate destroy.should be ok + Operation oldOp = event.getOperation(); + event.setOperation(Operation.DESTROY); + this.entries.removeEntry(event.getKey(), re, updateStats, event, this, iu); + event.setOperation(oldOp); + } + + } + + static void validateRegionName(String name) + { + if (name == null) { + throw new IllegalArgumentException(LocalizedStrings.LocalRegion_NAME_CANNOT_BE_NULL.toLocalizedString()); + } + if (name.length() == 0) { + throw new IllegalArgumentException(LocalizedStrings.LocalRegion_NAME_CANNOT_BE_EMPTY.toLocalizedString()); + } + if (name.indexOf(SEPARATOR) >= 0) { + throw new IllegalArgumentException(LocalizedStrings.LocalRegion_NAME_CANNOT_CONTAIN_THE_SEPARATOR_0.toLocalizedString(SEPARATOR)); + } + } + + private void checkCacheClosed() + { + if (this.cache.isClosed()) { + throw cache.getCacheClosedException(null, null); + } + } + + private void checkRegionDestroyed(boolean checkCancel) + { + if (checkCancel) { + this.cache.getCancelCriterion().checkCancelInProgress(null); + } + if (this.isDestroyed) { + RegionDestroyedException ex; + if (this.reinitialized_old) { + ex = new RegionReinitializedException(toString(), getFullPath()); + } else if (this.cache.isCacheAtShutdownAll()) { + throw new CacheClosedException("Cache is being closed by ShutdownAll"); + } + else { + ex = new RegionDestroyedException(toString(), getFullPath()); + } + // Race condition could cause the cache to be destroyed after the + // cache close check above, so we need to re-check before throwing. + if (checkCancel) { + this.cache.getCancelCriterion().checkCancelInProgress(null); + } + throw ex; + } + + if (this.isDestroyedForParallelWAN) { + throw new RegionDestroyedException( + LocalizedStrings.LocalRegion_REGION_IS_BEING_DESTROYED_WAITING_FOR_PARALLEL_QUEUE_TO_DRAIN + .toLocalizedString(), getFullPath()); + } + } + + /** + * For each region entry in this region call the callback + * @since prPersistSprint2 + */ + public void foreachRegionEntry(RegionEntryCallback callback) { + Iterator it = this.entries.regionEntriesInVM().iterator(); + while (it.hasNext()) { + callback.handleRegionEntry((RegionEntry)it.next()); + } + } + + /** + * Used by {@link #foreachRegionEntry}. + * @since prPersistSprint2 + */ + public interface RegionEntryCallback { + public void handleRegionEntry(RegionEntry re); + } + + protected void checkIfReplicatedAndLocalDestroy(EntryEventImpl event) { + // Actiual: disallow local invalidation for replicated regions + if (getScope().isDistributed() && getDataPolicy().withReplication() + && (!event.isDistributed()) && !isUsedForSerialGatewaySenderQueue()) { + throw new IllegalStateException(LocalizedStrings.LocalRegion_NOT_ALLOWED_TO_DO_A_LOCAL_DESTROY_ON_A_REPLICATED_REGION.toLocalizedString()); + } + } + + /** + * Return the number of subregions, including this region. Used for recursive + * size calculation in SubregionsSet.size + */ + protected int allSubregionsSize() + { + int sz = 1; /* 1 for this region */ + for (Iterator itr = this.subregions.values().iterator(); itr.hasNext();) { + LocalRegion r = (LocalRegion)itr.next(); + if (r != null && r.isInitialized() && !r.isDestroyed()) { + sz += r.allSubregionsSize(); + } + } + return sz; + } + + /** + * Return the number of entries including in subregions. Used for recursive + * size calculation in EntriesSet.size. This does not include tombstone + * entries stored in the region. + */ + protected int allEntriesSize() + { + int sz = entryCount(); + for (Iterator itr = this.subregions.values().iterator(); itr.hasNext();) { + LocalRegion r = toRegion(itr.next()); + if (r != null && !r.isDestroyed()) { + sz += r.allEntriesSize(); + } + } + return sz; + } + + /** + * @param rgnEvent + * the RegionEvent for region invalidation + */ + protected void invalidateAllEntries(RegionEvent rgnEvent) + { + Operation op = Operation.LOCAL_INVALIDATE; + if (rgnEvent.getOperation().isDistributed()) { + op = Operation.INVALIDATE; + } + + + // if this is a local invalidation, then set local invalid flag on event + // so LOCAL_INVALID tokens is used (even though each individual entry + // invalidation is not distributed). + + + // region operation so it is ok to ignore tx state + for (Iterator itr = keySet().iterator(); itr.hasNext();) { + try { + //EventID will not be generated by this constructor + EntryEventImpl event = EntryEventImpl.create( + this, op, itr.next() /*key*/, + null/* newValue */, null/* callbackArg */, rgnEvent.isOriginRemote(), + rgnEvent.getDistributedMember()); + try { + event.setLocalInvalid(!rgnEvent.getOperation().isDistributed()); + basicInvalidate(event, false); + } finally { + event.release(); + } + } + catch (EntryNotFoundException e) { + // ignore + } + } + } + + boolean hasListener() + { + CacheListener[] listeners = fetchCacheListenersField(); + return listeners != null && listeners.length > 0; + } + + private final DiskStoreImpl dsi; + public DiskStoreImpl getDiskStore() { + return this.dsi; + } + + /** + * Return true if all disk attributes are defaults. + * DWA.isSynchronous can be true or false. + */ + private boolean useDefaultDiskStore() { + assert(getDiskStoreName()== null); + if (!Arrays.equals(getDiskDirs(), DiskStoreFactory.DEFAULT_DISK_DIRS)) { + return false; + } + if (!Arrays.equals(getDiskDirSizes(), DiskStoreFactory.DEFAULT_DISK_DIR_SIZES)) { + return false; + } + DiskWriteAttributesFactory dwf = new DiskWriteAttributesFactory(); + dwf.setSynchronous(false); + if (dwf.create().equals(getDiskWriteAttributes())) { + return true; + } + dwf.setSynchronous(true); + if (dwf.create().equals(getDiskWriteAttributes())) { + return true; + } + return false; + } + + /** + * Returns true if this region's config indicates that it will use a disk store. + * Added for bug 42055. + */ + protected boolean usesDiskStore(RegionAttributes ra) { + return !isProxy() + && (getAttributes().getDataPolicy().withPersistence() + || isOverflowEnabled()); + } + + protected DiskStoreImpl findDiskStore(RegionAttributes ra, InternalRegionArguments internalRegionArgs) { + //validate that persistent type registry is persistent + if(getAttributes().getDataPolicy().withPersistence()) { + getCache().getPdxRegistry().creatingPersistentRegion(); + } + + if (usesDiskStore(ra)) { + if (getDiskStoreName() != null) { + DiskStoreImpl diskStore = (DiskStoreImpl)getGemFireCache().findDiskStore(getDiskStoreName()); + if (diskStore == null) { + throw new IllegalStateException(LocalizedStrings.CacheCreation_DISKSTORE_NOTFOUND_0.toLocalizedString(getDiskStoreName())); + } + return diskStore; + } + else if (useDefaultDiskStore()){ + return getGemFireCache().getOrCreateDefaultDiskStore(); + } else /* backwards compat mode */{ + DiskStoreFactory dsf = getGemFireCache().createDiskStoreFactory(); + dsf.setDiskDirsAndSizes(getDiskDirs(), getDiskDirSizes()); + DiskWriteAttributes dwa = getDiskWriteAttributes(); + dsf.setAutoCompact(dwa.isRollOplogs()); + dsf.setMaxOplogSize(dwa.getMaxOplogSize()); + dsf.setTimeInterval(dwa.getTimeInterval()); + if (dwa.getBytesThreshold() > 0) { + dsf.setQueueSize(1); + } else { + dsf.setQueueSize(0); + } + DiskStoreFactoryImpl dsfi = (DiskStoreFactoryImpl)dsf; + return dsfi.createOwnedByRegion(getFullPath().replace('/', '_'), + this instanceof PartitionedRegion, internalRegionArgs); + } + } + + return null; + } + /** + * Creates a new DiskRegion for this region. We assume that the + * attributes and the name of the region have been set. + * + * @return null is a disk region is not desired + * + * @since 3.2 + */ + protected DiskRegion createDiskRegion(InternalRegionArguments internalRegionArgs) + throws DiskAccessException { + if (internalRegionArgs.getDiskRegion() != null) { + DiskRegion dr = internalRegionArgs.getDiskRegion(); + dr.createDataStorage(); + return dr; + } + // A Proxy inherently has no storage. + if (dsi != null) { + DiskRegionStats stats; + if (this instanceof BucketRegion) { + stats = internalRegionArgs.getPartitionedRegion().getDiskRegionStats(); + } else { + stats = new DiskRegionStats(getCache().getDistributedSystem(), getFullPath()); + } + + EnumSet diskFlags = EnumSet.noneOf(DiskRegionFlag.class); + // Add flag if this region has versioning enabled + if(this.getAttributes().getConcurrencyChecksEnabled()) { + diskFlags.add(DiskRegionFlag.IS_WITH_VERSIONING); + } + return DiskRegion.create(dsi, getFullPath(), false, + getDataPolicy().withPersistence(), + isOverflowEnabled(), isDiskSynchronous(), + stats, getCancelCriterion(), this, getAttributes(), + diskFlags, "NO_PARTITITON", -1, + getCompressor(), getOffHeap()); + } else { + return null; + } + } + + /** + * Returns the object sizer on this region or null if it has no sizer. + * @since 6.1.2.9 + */ + public ObjectSizer getObjectSizer() { + ObjectSizer result = null; + EvictionAttributes ea = getEvictionAttributes(); + if (ea != null) { + result = ea.getObjectSizer(); + } + return result; + } + + /** ************************ Expiration methods ******************************* */ + + /** + * Add the Region TTL expiry task to the scheduler + */ + void addTTLExpiryTask() + { + synchronized (this.regionExpiryLock) { + RegionTTLExpiryTask task = this.regionTTLExpiryTask; + if (task != null) { + task.cancel(); + } + if (this.regionTimeToLive > 0) { + this.regionTTLExpiryTask = (RegionTTLExpiryTask) + this.cache.getExpirationScheduler().addExpiryTask( + new RegionTTLExpiryTask(this)); + if (this.regionTTLExpiryTask != null) { + if (logger.isDebugEnabled()) { + logger.debug("Initialized Region TTL Expiry Task {}", this.regionTTLExpiryTask); + } + } + } else { + this.regionTTLExpiryTask = null; + } + } + } + + void addTTLExpiryTask(RegionTTLExpiryTask callingTask) + { + synchronized (this.regionExpiryLock) { + if (this.regionTTLExpiryTask != null && this.regionTTLExpiryTask != callingTask) { + return; + } + if (this.regionTimeToLive <= 0) { + this.regionTTLExpiryTask = null; + return; + } + RegionTTLExpiryTask task = new RegionTTLExpiryTask(this); + if (logger.isDebugEnabled()) { + logger.debug("Scheduling Region TTL Expiry Task {} which replaces {}", task, this.regionTTLExpiryTask); + } + this.regionTTLExpiryTask = (RegionTTLExpiryTask) + this.cache.getExpirationScheduler().addExpiryTask(task); + } + } + + /** + * Add the Region Idle expiry task to the scheduler + */ + final void addIdleExpiryTask() + { + synchronized (this.regionExpiryLock) { + RegionIdleExpiryTask task = this.regionIdleExpiryTask; + if (task != null) { + task.cancel(); + } + if (this.regionIdleTimeout > 0) { + this.regionIdleExpiryTask = (RegionIdleExpiryTask) + this.cache.getExpirationScheduler().addExpiryTask( + new RegionIdleExpiryTask(this)); + if (this.regionIdleExpiryTask != null) { + if (logger.isDebugEnabled()) { + logger.debug("Initialized Region Idle Expiry Task {}", this.regionIdleExpiryTask); + } + } + } else { + this.regionIdleExpiryTask = null; + } + } + } + + void addIdleExpiryTask(RegionIdleExpiryTask callingTask) + { + synchronized (this.regionExpiryLock) { + if (this.regionIdleExpiryTask != null && this.regionIdleExpiryTask != callingTask) { + return; + } + if (this.regionIdleTimeout <= 0) { + this.regionIdleExpiryTask = null; + return; + } + RegionIdleExpiryTask task = new RegionIdleExpiryTask(this); + if (logger.isDebugEnabled()) { + logger.debug("Scheduling Region Idle Expiry Task {} which replaces ", task, this.regionIdleExpiryTask); + } + this.regionIdleExpiryTask = (RegionIdleExpiryTask) + this.cache.getExpirationScheduler().addExpiryTask(task); + } + } + + /** + * Added to fix bug 31204 + */ + protected boolean isEntryIdleExpiryPossible() + { + return this.entryIdleTimeout > 0 || this.customEntryIdleTimeout != null; + } + + private void cancelTTLExpiryTask() + { + RegionTTLExpiryTask task; + synchronized (this.regionExpiryLock) { + task = this.regionTTLExpiryTask; + if (task != null) { + this.regionTTLExpiryTask = null; + } + } + if (task != null) { + task.cancel(); + } + } + + private void cancelIdleExpiryTask() + { + RegionIdleExpiryTask task; + synchronized (this.regionExpiryLock) { + task = this.regionIdleExpiryTask; + if (task != null) { + this.regionIdleExpiryTask = null; + } + } + if (task != null) { + task.cancel(); + } + } + + @Override + protected void regionTimeToLiveChanged(ExpirationAttributes oldTimeToLive) + { + addTTLExpiryTask(); + } + + @Override + protected void regionIdleTimeoutChanged(ExpirationAttributes oldIdleTimeout) + { + addIdleExpiryTask(); + } + + @Override + protected void timeToLiveChanged(ExpirationAttributes oldTimeToLive) + { + int oldTimeout = oldTimeToLive.getTimeout(); + if (customEntryTimeToLive != null) { + rescheduleEntryExpiryTasks(); + } + else + if (entryTimeToLive > 0 + && (oldTimeout == 0 || entryTimeToLive < oldTimeout)) { + rescheduleEntryExpiryTasks(); + } + else { + // It's safe to let them get rescheduled lazily, as the old expiration + // time will cause the tasks to fire sooner than the new ones. + } + } + + @Override + protected void idleTimeoutChanged(ExpirationAttributes oldIdleTimeout) + { + int oldTimeout = oldIdleTimeout.getTimeout(); + if (customEntryIdleTimeout != null) { + rescheduleEntryExpiryTasks(); + } + else + if (entryIdleTimeout > 0 + && (oldTimeout == 0 || entryIdleTimeout < oldTimeout)) { + rescheduleEntryExpiryTasks(); + } + else { + // It's safe to let them get rescheduled lazily, as the old expiration + // time will cause the tasks to fire sooner than the new ones. + } + } + + protected void rescheduleEntryExpiryTasks() + { + if (isProxy()) { + return; + } + if (!isInitialized()) { + return; // don't schedule expiration until region is initialized (bug + } + // OK to ignore transaction since Expiry only done non-tran + Iterator it = this.entries.regionEntries().iterator(); + if (it.hasNext()) { + try { + if (isEntryExpiryPossible()) { + ExpiryTask.setNow(); + } + while (it.hasNext()) { + addExpiryTask(it.next()); + } + } finally { + ExpiryTask.clearNow(); + } + } + } + + void addExpiryTaskIfAbsent(RegionEntry re) + { + addExpiryTask(re, true); + } + + void addExpiryTask(RegionEntry re) + { + addExpiryTask(re, false); + } + + /** + * Used to create a cheap Region.Entry that can be passed to the CustomExpiry callback + * + */ + private static class ExpiryRegionEntry implements Region.Entry { + private final LocalRegion region; + private final RegionEntry re; + + public ExpiryRegionEntry(LocalRegion lr, RegionEntry re) { + this.region = lr; + this.re = re; + } + + @Override + public int hashCode() { + final int prime = 31; + int result = 1; + result = prime * result + ((re == null) ? 0 : re.hashCode()); + result = prime * result + ((region == null) ? 0 : region.hashCode()); + return result; + } + + @Override + public boolean equals(Object obj) { + if (this == obj) + return true; + if (obj == null) + return false; + if (getClass() != obj.getClass()) + return false; + ExpiryRegionEntry other = (ExpiryRegionEntry) obj; + if (re == null) { + if (other.re != null) + return false; + } else if (!re.equals(other.re)) + return false; + if (region == null) { + if (other.region != null) + return false; + } else if (!region.equals(other.region)) + return false; + return true; + } + + @Override + public String toString() { + return "region=" + region.getFullPath() + ", key=" + getKey() + " value=" + getValue(); + } + + @Override + public Region getRegion() { + return this.region; + } + + /** + * Returns the entry's RegionEntry if it "checks" out. The check is to + * see if the region entry still exists. + * @throws EntryNotFoundException if the RegionEntry has been removed. + */ + private RegionEntry getCheckedRegionEntry() throws EntryNotFoundException { + RegionEntry result = this.re; + if (re.isDestroyedOrRemoved()) { + throw new EntryNotFoundException("Entry for key " + re.getKey() + " no longer exists"); + } + return result; + } + + @Override + public Object getValue() { + Object value = this.region.getDeserialized(getCheckedRegionEntry(), false, false, false, false); + if (value == null) { + throw new EntryDestroyedException(getKey().toString()); + } + else if(Token.isInvalid(value)) { + return null; + } + return value; + } + + @Override + public boolean isLocal() { + return true; // we only create expiry tasks for local entries + } + + @Override + public CacheStatistics getStatistics() { + LocalRegion lr = this.region; + if (!lr.statisticsEnabled) { + throw new StatisticsDisabledException(LocalizedStrings.LocalRegion_STATISTICS_DISABLED_FOR_REGION_0.toLocalizedString(lr.getFullPath())); + } + return new CacheStatisticsImpl(getCheckedRegionEntry(), lr); + } + + @Override + public Object getUserAttribute() { + Map userAttr = this.region.entryUserAttributes; + if (userAttr == null) { + return null; + } + return userAttr.get(getKey()); + } + + @Override + public Object setUserAttribute(Object userAttribute) { + LocalRegion lr = this.region; + if (lr.entryUserAttributes == null) { + lr.entryUserAttributes = new Hashtable(); + } + return lr.entryUserAttributes.put(getKey(), userAttribute); + } + + @Override + public boolean isDestroyed() { + if (this.re.isDestroyedOrRemoved()) return true; + return false; + } + + @Override + public Object setValue(Object value) { + return this.region.put(getKey(), value); + } + + @Override + public Object getKey() { + return this.re.getKey(); + } + } + /** + * If custom expiration returns non-null expiration attributes + * then create a CustomEntryExpiryTask for this region and the given entry and return it. + * Otherwise if the region is configured for expiration + * then create an EntryExpiryTask for this region and the given entry and return it. + * Null is returned if the expiration attributes indicate that expiration is disabled. + */ + private EntryExpiryTask createExpiryTask(RegionEntry re) { + if (re == null || re.isDestroyedOrRemoved()) { + return null; + } + if (this.customEntryIdleTimeout != null || this.customEntryTimeToLive != null) { + ExpiryRegionEntry ere = new ExpiryRegionEntry(this, re); + ExpirationAttributes ttlAtts = null; + ExpirationAttributes idleAtts = null; + final RegionAttributes ra = this.getAttributes(); + { + final CustomExpiry customTTL = ra.getCustomEntryTimeToLive(); + if (customTTL != null) { + try { + ttlAtts = customTTL.getExpiry(ere); + if (ttlAtts != null) { + this.checkEntryTimeoutAction("timeToLive", ttlAtts.getAction()); + } + } + catch (RegionDestroyedException rde) { + // Ignore - #42273 + } + catch (EntryNotFoundException enfe){ + //Ignore - #51933 + } + catch (EntryDestroyedException edf){ + //Ignore - #51933 + } + catch (Exception e) { + logger.fatal(LocalizedMessage.create(LocalizedStrings.EntryExpiryTask_ERROR_CALCULATING_EXPIRATION_0, + e.getMessage()), e); + } + } + if (ttlAtts == null) { + ttlAtts = ra.getEntryTimeToLive(); + } + } + { + CustomExpiry customIdle = ra.getCustomEntryIdleTimeout(); + if (customIdle != null) { + try { + idleAtts = customIdle.getExpiry(ere); + if (idleAtts != null) { + this.checkEntryTimeoutAction("idleTimeout", idleAtts.getAction()); + } + } + catch (RegionDestroyedException rde) { + // Ignore - #42273 + } + catch (EntryNotFoundException enfe){ + //Ignore - #51933 + } + catch (EntryDestroyedException edf){ + //Ignore - #51933 + } + catch (Exception e) { + logger.fatal(LocalizedMessage.create(LocalizedStrings.EntryExpiryTask_ERROR_CALCULATING_EXPIRATION_0, + e.getMessage()), e); + } + } + if (idleAtts == null) { + idleAtts = ra.getEntryIdleTimeout(); + } + } + final boolean ttlDisabled = ttlAtts == null || ttlAtts.getTimeout() == 0; + final boolean idleDisabled = idleAtts == null || idleAtts.getTimeout() == 0; + if (ttlDisabled && idleDisabled) { + return null; + } else if ((ttlDisabled || ttlAtts.equals(ra.getEntryTimeToLive())) + && (idleDisabled || idleAtts.equals(ra.getEntryIdleTimeout()))) { + // no need for custom since we can just use the region's expiration attributes. + return new EntryExpiryTask(this, re); + } else { + return new CustomEntryExpiryTask(this, re, ttlAtts, idleAtts); + } + } else if (isEntryExpiryPossible()) { + return new EntryExpiryTask(this, re); + } else { + return null; + } + } + + /** + * Used by unit tests to get access to the EntryExpiryTask + * of the given key. Returns null if the entry exists but + * does not have an expiry task. + * @throws EntryNotFoundException if no entry exists key. + */ + public EntryExpiryTask getEntryExpiryTask(Object key) { + RegionEntry re = this.getRegionEntry(key); + if (re == null) { + throw new EntryNotFoundException("Entry for key " + key + " does not exist."); + } + return this.entryExpiryTasks.get(re); + } + /** + * Used by unit tests to get access to the RegionIdleExpiryTask + * of this region. Returns null if no task exists. + */ + public RegionIdleExpiryTask getRegionIdleExpiryTask() { + return this.regionIdleExpiryTask; + } + /** + * Used by unit tests to get access to the RegionTTLExpiryTask + * of this region. Returns null if no task exists. + */ + public RegionTTLExpiryTask getRegionTTLExpiryTask() { + return this.regionTTLExpiryTask; + } + + private void addExpiryTask(RegionEntry re, boolean ifAbsent) + { + if (isProxy()) { + return; + } + if (!isInitialized()) { + return; // don't schedule expiration until region is initialized (bug + // 35214) + } + if (isEntryExpiryPossible()) { + EntryExpiryTask newTask = null; + EntryExpiryTask oldTask = null; + if (ifAbsent) { + oldTask = (EntryExpiryTask)this.entryExpiryTasks.get(re); + if (oldTask != null) { + boolean keepOldTask = true; + if (this.customEntryIdleTimeout != null || this.customEntryTimeToLive != null) { + newTask = createExpiryTask(re); + if (newTask == null) { + cancelExpiryTask(re); // cancel any old task + return; + } + // to fix bug 44418 see if the new tasks expiration would be earlier than + // the scheduled task. + long ntTime = newTask.getExpirationTime(); + try{ + if (ntTime != 0 && ntTime < oldTask.getExpirationTime()) { + // it is so get rid of the old task and schedule the new one. + keepOldTask = false; + } + }catch(EntryNotFoundException ex){ + keepOldTask=false; + } + } + if (keepOldTask) { + // if an oldTask is present leave it be + if (logger.isTraceEnabled()) { + logger.trace("Expiry Task not added because one already present. Key={}" + re.getKey()); + } + return; + } + } + } + if (newTask == null) { + newTask = createExpiryTask(re); + if (newTask == null) { + cancelExpiryTask(re); // cancel any old task + return; + } + } + oldTask = this.entryExpiryTasks.put(re, newTask); + ExpirationScheduler es = this.cache.getExpirationScheduler(); + if (oldTask != null) { + if (oldTask.cancel()) { + es.incCancels(); + } + } + if (!es.addEntryExpiryTask(newTask)) { + this.entryExpiryTasks.remove(re); + } + // @todo darrel: merge question: should we catch EntryNotFoundException + // if addExpiryTask throws it? + // } catch (EntryNotFoundException e) { + // // ignore - there are unsynchronized paths that allow an entry to + // // be destroyed out from under us. + // return; + // } + } + else { + cancelExpiryTask(re); + if (logger.isTraceEnabled()) { + logger.trace("addExpiryTask(key) ignored"); + } + } + } + + void cancelExpiryTask(RegionEntry re) + { + EntryExpiryTask oldTask = this.entryExpiryTasks.remove(re); + if (oldTask != null) { + if (oldTask.cancel()) { + this.cache.getExpirationScheduler().incCancels(); + } + } + } + + public void cancelAllEntryExpiryTasks() + { + // This method gets called during LocalRegion construction + // in which case the final entryExpiryTasks field can still be null + if (this.entryExpiryTasks == null) return; + if (this.entryExpiryTasks.isEmpty()) return; + boolean doPurge = false; + Iterator tasksIter = this.entryExpiryTasks.values().iterator(); + while (tasksIter.hasNext()) { + EntryExpiryTask task = tasksIter.next(); + task.cancel(); // no need to call incCancels since we will call forcePurge + doPurge = true; + } + if (doPurge) { + // do a force to not leave any refs to this region + this.cache.getExpirationScheduler().forcePurge(); + } + } + + /** + * Used internally by EntryExpiryTask. Ok for it to ignore transaction. + * + * @return 0 if statistics not available + */ + long getLastAccessedTime(Object key) throws EntryNotFoundException + { + RegionEntry entry = this.entries.getEntry(key); + if (entry == null) + throw new EntryNotFoundException(key.toString()); + try { + return entry.getLastAccessed(); + } + catch (InternalStatisticsDisabledException e) { + return 0; + } + } + + /** + * Used internally by EntryExpiryTask. Ok for it to ignore transaction. + */ + long getLastModifiedTime(Object key) throws EntryNotFoundException + { + RegionEntry entry = this.entries.getEntry(key); + if (entry == null) + throw new EntryNotFoundException(key.toString()); + return entry.getLastModified(); + } + + /** + * get the ImageState for this region + */ + protected final ImageState getImageState() + { + return this.imageState; + } + + /** + * Callers of this method should always follow the call with: if (lockGII()) { + * try { } finally { unlockGII(); } } + * + * @return true if lock obtained and unlock needs to be called + */ + boolean lockGII() { + ImageState is = getImageState(); + if (is.isReplicate() && !isInitialized()) { + is.lockGII(); + // recheck initialized while holding lock + if (isInitialized()) { + // we didn't need to lock after all so clear and return false + is.unlockGII(); + } else { + return true; + } + } + return false; + } + + void unlockGII() { + ImageState is = getImageState(); + assert is.isReplicate(); + is.unlockGII(); + } + + /** + * Callers of this method should always follow the call with: if (lockRIReadLock()) { + * try { } finally { unlockRIReadLock(); } } + * + * @return true if lock obtained and unlock needs to be called + */ + private boolean lockRIReadLock() { + if (getImageState().isClient()) { + getImageState().readLockRI(); + return true; + } else { + return false; + } + } + + private void unlockRIReadLock() { + assert getImageState().isClient(); + getImageState().readUnlockRI(); + } + + /** doesn't throw RegionDestroyedException, used by CacheDistributionAdvisor */ + public LocalRegion basicGetParentRegion() + { + return this.parentRegion; + } + + Object basicGetEntryUserAttribute(Object entryKey) + { + Map userAttr = this.entryUserAttributes; + if (userAttr == null) { + return null; + } + return userAttr.get(entryKey); + } + + /////////////////////// Transaction Helper Methods //////////////////// + + public final TXStateProxy getTXState() { + if (this.supportsTX) { + return TXManagerImpl.getCurrentTXState(); + } + else { + return null; + } + } + + final TXId getTXId() { + final TXStateInterface tx = getTXState(); + if (tx == null) { + return null; + } + return (TXId)tx.getTransactionId(); + } + + protected final TXRegionState txReadRegion() + { + final TXStateInterface tx = getTXState(); + if (tx != null) { + return tx.txReadRegion(this); + } + else { + return null; + } + } + + public TXEntryState createReadEntry(TXRegionState txr, KeyInfo keyInfo, boolean createIfAbsent) { + TXEntryState result = null; + final RegionEntry re = this.basicGetTXEntry(keyInfo); + if (re != null) { + boolean needsLRUCleanup = false; + try { + synchronized (re) { + if (!re.isRemoved()) { + if (re instanceof DiskEntry && re instanceof LRUEntry) { + LRUEntry le = (LRUEntry)re; + if (le.testEvicted()) { + // Handle the case where we fault in a disk entry + txLRUStart(); + needsLRUCleanup = true; + + // Fault in the value from disk + re.getValue(this); + } + } + + Object value = re.getValueInVM(this); + /* + * The tx will need the raw value for identity comparison. + * Please see TXEntryState#checkForConflict(LocalRegion,Object) + */ + Object id = re.getTransformedValue(); + + result = txr.createReadEntry(this, keyInfo.getKey(), re, id, value); + } + } + } catch (DiskAccessException dae) { + handleDiskAccessException(dae); + needsLRUCleanup = false; + throw dae; + } finally { + if (needsLRUCleanup) { + // do this after releasing sync + txLRUEnd(); + } + } + } + if (result == null && createIfAbsent) { + result = txr.createReadEntry(this, keyInfo.getKey(), null, null, null); + } + return result; + } + + protected static final TXEntryState NOOP_INVALIDATE = new TXEntryState(); + + protected TXStateInterface getJTAEnlistedTX() + { + if (ignoreJTA) { + // fixes bug 45541 + return null; + } + TXStateInterface tx = getTXState(); + if (tx != null) { + return tx; + } + else { + javax.transaction.Transaction jtaTx; + try { + if (!ignoreJTA && this.cache.getJTATransactionManager() != null) { + + jtaTx = this.cache.getJTATransactionManager().getTransaction(); + if (jtaTx == null + || jtaTx.getStatus() == javax.transaction.Status.STATUS_NO_TRANSACTION) { + return null; + } + tx = this.cache.getTXMgr().beginJTA(); + jtaTx.registerSynchronization(tx); + return tx; + } + else { + return null; + } + } + catch (javax.transaction.SystemException se) { + // this can be thrown when the system is shutting down (see bug #39728) + stopper.checkCancelInProgress(se); + jtaEnlistmentFailureCleanup(tx, se); + return null; + } + catch (javax.transaction.RollbackException re) { + jtaEnlistmentFailureCleanup(tx, re); + return null; + } + catch (IllegalStateException ie) { + jtaEnlistmentFailureCleanup(tx, ie); + return null; + } + } + } + + private final void jtaEnlistmentFailureCleanup(TXStateInterface tx, Exception reason) { + if (cache == null) { + return; + } + cache.getTXMgr().setTXState(null); + if (tx != null) { + tx.rollback(); + } + String jtaTransName = null; + try { + jtaTransName = cache.getJTATransactionManager().getTransaction() + .toString(); + } + catch (VirtualMachineError err) { + SystemFailure.initiateFailure(err); + // If this ever returns, rethrow the error. We're poisoned + // now, so don't let this thread continue. + throw err; + } + catch (Throwable ignore) { + // Whenever you catch Error or Throwable, you must also + // catch VirtualMachineError (see above). However, there is + // _still_ a possibility that you are dealing with a cascading + // error condition, so you also need to check to see if the JVM + // is still usable: + SystemFailure.checkFailure(); + } + + throw new FailedSynchronizationException(LocalizedStrings.LocalRegion_FAILED_ENLISTEMENT_WITH_TRANSACTION_0.toLocalizedString(jtaTransName), reason); + } + + final void txLRUStart() + { + this.entries.disableLruUpdateCallback(); + } + + final void txLRUEnd() + { + this.entries.enableLruUpdateCallback(); + try { + this.entries.lruUpdateCallback(); + }catch(DiskAccessException dae) { + handleDiskAccessException(dae); + throw dae; + } + } + + final void txDecRefCount(RegionEntry re) + { + this.entries.decTxRefCount(re); + } + + /** ******* DEBUG Methods */ + /** Does not throw RegionDestroyedException even if destroyed */ + List debugGetSubregionNames() + { + List names = new ArrayList(); + for (Iterator itr = this.subregions.keySet().iterator(); itr.hasNext();) + names.add(itr.next()); + return names; + } + + /***************************************************************************** + * INNER CLASSES + ****************************************************************************/ + + protected final static void dispatchEvent(LocalRegion region, + InternalCacheEvent event, EnumListenerEvent op) + { + + CacheListener[] listeners = region.fetchCacheListenersField(); + if (event.getOperation().isCreate()) { + if (logger.isDebugEnabled()) { + logger.debug("invoking listeners: " + Arrays.toString(listeners)); + } + } + if (listeners == null || listeners.length == 0) { + return; + } + if (op != EnumListenerEvent.AFTER_REGION_CREATE) { + try { + region.waitForRegionCreateEvent(); + } + catch (CancelException e) { + // ignore and keep going + if (logger.isTraceEnabled()) { + logger.trace("Dispatching events after cache closure for region {}", region.getFullPath()); + } + } + } + //Assert.assertTrue(event.getRegion() == region); + if (!event.isGenerateCallbacks()) { + return; + } +// this check moved earlier for bug 36983 +// CacheListener[] listeners = region.fetchCacheListenersField(); +// if (listeners == null || listeners.length == 0) +// return; + for (int i = 0; i < listeners.length; i++) { + CacheListener listener = listeners[i]; + if (listener != null) { + try { + op.dispatchEvent(event, listener); + } + catch (CancelException ignore) { + // ignore for bug 37105 + } + catch (VirtualMachineError err) { + SystemFailure.initiateFailure(err); + // If this ever returns, rethrow the error. We're poisoned + // now, so don't let this thread continue. + throw err; + } + catch (Throwable t) { + // Whenever you catch Error or Throwable, you must also + // catch VirtualMachineError (see above). However, there is + // _still_ a possibility that you are dealing with a cascading + // error condition, so you also need to check to see if the JVM + // is still usable: + SystemFailure.checkFailure(); + logger.error(LocalizedMessage.create(LocalizedStrings.LocalRegion_EXCEPTION_OCCURRED_IN_CACHELISTENER), t); + } + } + } + } + + /** ********************* Class EventDispatcher ***************************** */ + + class EventDispatcher implements Runnable + { + InternalCacheEvent event; + + EnumListenerEvent op; + + EventDispatcher(InternalCacheEvent event, EnumListenerEvent op) { + + if (LocalRegion.this.offHeap && event instanceof EntryEventImpl) { + // Make a copy that has its own off-heap refcount so fix bug 48837 + event = new EntryEventImpl( (EntryEventImpl)event); + } + this.event = event; + this.op = op; + } + + public void run() + { + try { + dispatchEvent(LocalRegion.this, this.event, this.op); + }finally { + this.release(); + } + } + + public void release() { + if (LocalRegion.this.offHeap && this.event instanceof EntryEventImpl) { + ((EntryEventImpl)this.event).release(); + } + } + } + + + + /** ******************* Class SubregionsSet ********************************* */ + + /** Set view of subregions */ + private class SubregionsSet extends AbstractSet + { + final boolean recursive; + + SubregionsSet(boolean recursive) { + this.recursive = recursive; + } + + @Override + public Iterator iterator() + { + + // iterates breadth-first (if recursive) + return new Iterator() { + Iterator currItr = LocalRegion.this.subregions.values().iterator(); + + List itrQ; // FIFO queue of iterators + + Object nextElem = null; + + public void remove() + { + throw new UnsupportedOperationException(LocalizedStrings.LocalRegion_THIS_ITERATOR_DOES_NOT_SUPPORT_MODIFICATION.toLocalizedString()); + } + + public boolean hasNext() + { + if (nextElem != null) { + return true; + } + else { + Object el = next(true); + if (el != null) { + nextElem = el; + return true; + } + else { + return false; + } + } + } + + private boolean _hasNext() + { + return this.currItr != null && this.currItr.hasNext(); + } + + public Object next() { + return next(false); + } + + /** + * @param nullOK if true, return null instead of throwing NoSuchElementException + * @return the next element + */ + + private Object next(boolean nullOK) + { + if (nextElem != null) { + Object next = nextElem; + nextElem = null; + return next; + } + + LocalRegion rgn; + do { + rgn = null; + if (!_hasNext()) { + if (itrQ == null || itrQ.isEmpty()) { + if (nullOK) { + return null; + } + else { + throw new NoSuchElementException(); + } + } + else { + this.currItr = (Iterator)itrQ.remove(0); + continue; + } + } + rgn = (LocalRegion)currItr.next(); + } while (rgn == null || !rgn.isInitialized() || rgn.isDestroyed()); + + if (recursive) { + Iterator nextIterator = rgn.subregions.values().iterator(); + if (nextIterator.hasNext()) { + if (itrQ == null) { + itrQ = new ArrayList(); + } + itrQ.add(nextIterator); + } + } + if (!_hasNext()) { + if (itrQ == null || itrQ.isEmpty()) { + this.currItr = null; + } + else { + this.currItr = (Iterator)itrQ.remove(0); + } + } + return rgn; + } + }; + } + + @Override + public int size() + { + if (this.recursive) { + return allSubregionsSize() - 1 /* don't count this region */; + } + else { + return LocalRegion.this.subregions.size(); + } + } + + @Override + public Object[] toArray() + { + List temp = new ArrayList(this.size()); + for (Iterator iter = this.iterator(); iter.hasNext();) { + temp.add(iter.next()); + } + return temp.toArray(); + } + + @Override + public Object[] toArray(Object[] array) + { + List temp = new ArrayList(this.size()); + for (Iterator iter = this.iterator(); iter.hasNext();) { + temp.add(iter.next()); + } + return temp.toArray(array); + } + } + + /** ******************* Class EntriesSet ************************************ */ + + public class NonTXEntry implements Region.Entry + { + + private final Object key; + + private boolean entryIsDestroyed = false; + + public boolean isLocal() { + return true; + } + + /** + * Create an Entry given a key. The returned Entry may or may not be + * destroyed + */ + public NonTXEntry(RegionEntry regionEntry) { + if (regionEntry == null) { + throw new IllegalArgumentException(LocalizedStrings.LocalRegion_REGIONENTRY_SHOULD_NOT_BE_NULL.toLocalizedString()); + } + // for a soplog region, since the entry may not be in memory, + // we will have to fetch it from soplog, if the entry is in + // memory this is a quick lookup, so rather than RegionEntry + // we keep reference to key + this.key = regionEntry.getKey(); + } + + /** Internal method for getting the underlying RegionEntry */ + public RegionEntry getRegionEntry() { + RegionEntry re = LocalRegion.this.getRegionMap().getEntry(key); + if (re == null) { + throw new EntryDestroyedException(this.key.toString()); + } + return re; + } + + private RegionEntry basicGetEntry() { + RegionEntry re = LocalRegion.this.basicGetEntry(key); + if (re == null) { + throw new EntryDestroyedException(this.key.toString()); + } + return re; + } + + public boolean isDestroyed() + { + if (this.entryIsDestroyed) { + return true; + } + if (LocalRegion.this.isDestroyed) { + this.entryIsDestroyed = true; + } else if (LocalRegion.this.basicGetEntry(key) == null) { + this.entryIsDestroyed = true; + } + return this.entryIsDestroyed; + } + + public Object getKey() + { + return this.basicGetEntry().getKey(); + } + + public Object getValue() + { + return getValue(false); + } + + public Object getValue(boolean ignoreCopyOnRead) + { + Object value = getDeserialized(this.basicGetEntry(), false, ignoreCopyOnRead, false, false); + if (value == null) { + throw new EntryDestroyedException(getKey().toString()); + } + else if(Token.isInvalid(value)) { + return null; + } + + return value; + } + + /** + * To get the value from region in serialized form + * @return {@link VMCachedDeserializable} + */ + public Object getRawValue() + { + Object value = this.basicGetEntry().getValue((LocalRegion) getRegion()); + if (value == null) { + throw new EntryDestroyedException(this.getRegionEntry().getKey().toString()); + } + else if(Token.isInvalid(value)) { + return null; + } + + return value; + } + + public Region getRegion() + { + this.basicGetEntry(); + return LocalRegion.this; + } + + public CacheStatistics getStatistics() + { + // prefer entry destroyed exception over statistics disabled exception + this.basicGetEntry(); + if (!LocalRegion.this.statisticsEnabled) { + throw new StatisticsDisabledException(LocalizedStrings.LocalRegion_STATISTICS_DISABLED_FOR_REGION_0.toLocalizedString(getFullPath())); + } + return new CacheStatisticsImpl(this.basicGetEntry(), LocalRegion.this); + } + + public Object getUserAttribute() + { + this.basicGetEntry(); + Map userAttr = LocalRegion.this.entryUserAttributes; + if (userAttr == null) { + return null; + } + return userAttr.get(this.basicGetEntry().getKey()); + } + + public Object setUserAttribute(Object value) + { + if (LocalRegion.this.entryUserAttributes == null) { + LocalRegion.this.entryUserAttributes = new Hashtable(); + } + return LocalRegion.this.entryUserAttributes.put( + this.basicGetEntry().getKey(), value); + } + + @Override + public boolean equals(Object obj) + { + if (!(obj instanceof LocalRegion.NonTXEntry)) { + return false; + } + LocalRegion.NonTXEntry lre = (LocalRegion.NonTXEntry)obj; + return this.basicGetEntry().equals(lre.getRegionEntry()) + && this.getRegion() == lre.getRegion(); + } + + @Override + public int hashCode() + { + return this.basicGetEntry().hashCode() ^ this.getRegion().hashCode(); + } + + @Override + public String toString() { + return new StringBuilder("NonTXEntry@").append( + Integer.toHexString(System.identityHashCode(this))).append(' ') + .append(this.getRegionEntry()).toString(); + } + + ////////////////// Private Methods + // ///////////////////////////////////////// + + /** + * @since 5.0 + */ + public Object setValue(Object arg0) + { + return put(this.getKey(), arg0); + } + } + + /** + * Checks to make sure current thread does not have a transaction. If it does + * then throws UnsupportedOperationException + */ + public void checkForTransaction(String opName) + { + if (isTX()) { + throw new UnsupportedOperationException(LocalizedStrings.LocalRegion_0_OPERATIONS_ARE_NOT_ALLOWED_BECAUSE_THIS_THREAD_HAS_AN_ACTIVE_TRANSACTION + .toLocalizedString(opName)); + } + } + + /** + * For internal use only. + */ + public RegionMap getRegionMap() + { + // OK to ignore tx state + return this.entries; + } + + /** + * Methods for java.util.Map compliance + * + * @since 5.0 + */ + + /** + * (description copied from entryCount() Returns the number of entries in this + * region. Note that because of the concurrency properties of the + * {@link RegionMap}, the number of entries is only an approximate. That is, + * other threads may change the number of entries in this region while this + * method is being invoked. + * + * @see LocalRegion#entryCount() + */ + public int size() + { + checkReadiness(); + checkForNoAccess(); + discoverJTA(); + boolean isClient = this.imageState.isClient(); + if (isClient) { + lockRIReadLock(); // bug #40871 - test sees wrong size for region during RI + } + try { + return entryCount(); + } finally { + if (isClient) { + unlockRIReadLock(); + } + } + } + + /** + * returns an estimate of the number of entries in this region. This method + * should be prefered over size() for hdfs regions where an accurate size is + * not needed. This method is not supported on a client + * + * @return the estimated size of this region + */ + public int sizeEstimate() { + boolean isClient = this.imageState.isClient(); + if (isClient) { + throw new UnsupportedOperationException( + "Method not supported on a client"); + } + return entryCount(null, true); + } + + /** + * This method returns true if Region is Empty. + */ + public boolean isEmpty() + { + //checkForNoAccess(); // size does this check + return this.size() > 0 ? false : true; + } + + /** + * Returns true if the value is present in the Map + */ + public boolean containsValue(final Object value) + { + if (value == null) { + throw new NullPointerException(LocalizedStrings.LocalRegion_VALUE_FOR_CONTAINSVALUEVALUE_CANNOT_BE_NULL.toLocalizedString()); + } + checkReadiness(); + checkForNoAccess(); + boolean result = false; + Iterator iterator = new EntriesSet(this, false, IteratorType.VALUES, false).iterator(); + Object val = null; + while (iterator.hasNext()) { + val = iterator.next(); + if (val != null) { + if (value.equals(val)) { + result = true; + break; + } + } + } + return result; + } + + /** + * Returns a set of the entries present in the Map. This set is Not + * Modifiable. If changes are made to this set, they will be not reflected in + * the map + */ + public Set entrySet() + { + //entries(false) takes care of open transactions + return entries(false); + } + + + + /** + * Returns a set of the keys present in the Map. This set is Not Modifiable. + * If changes are made to this set, they will be not reflected in the map + */ + + public Set keySet() + { + //keys() takes care of open transactions + return keys(); + } + + /** + * removes the object from the Map and returns the object removed. The object + * is returned only if present in the localMap. If the value is present in + * another Node, null is returned + */ + public Object remove(Object obj) + { + // no validations needed here since destroy does it for us + Object returnObject = null; + try { + returnObject = destroy(obj); + } + catch (EntryNotFoundException e) { + // No need to log this exception; caller can test for null; + } + return returnObject; + } + + public void basicBridgeDestroyRegion( Object p_callbackArg, final ClientProxyMembershipID client, + boolean fromClient, EventID eventId) throws TimeoutException, + EntryExistsException, CacheWriterException + { + Object callbackArg = p_callbackArg; + //long startPut = CachePerfStats.getStatTime(); + if (fromClient) { + // If this region is also wan-enabled, then wrap that callback arg in a + // GatewayEventCallbackArgument to store the event id. + if(isGatewaySenderEnabled()) { + callbackArg = new GatewaySenderEventCallbackArgument(callbackArg); + } + } + + RegionEventImpl event = new ClientRegionEventImpl(this, Operation.REGION_DESTROY, + callbackArg,false, client.getDistributedMember(), client/* context */, eventId); + + basicDestroyRegion(event, true); + + } + + + + + public void basicBridgeClear( Object p_callbackArg, + final ClientProxyMembershipID client, + boolean fromClient, EventID eventId) throws TimeoutException, + EntryExistsException, CacheWriterException + { + Object callbackArg = p_callbackArg; + //long startPut = CachePerfStats.getStatTime(); + if (fromClient) { + // If this region is also wan-enabled, then wrap that callback arg in a + // GatewayEventCallbackArgument to store the event id. + if(isGatewaySenderEnabled()) { + callbackArg = new GatewaySenderEventCallbackArgument(callbackArg); + } + } + + RegionEventImpl event = new ClientRegionEventImpl(this, Operation.REGION_CLEAR, + callbackArg,false, client.getDistributedMember(), client/* context */, eventId); + + basicClear(event, true); + } + + + + @Override + void basicClear(RegionEventImpl regionEvent) + { + getDataView().checkSupportsRegionClear(); + basicClear(regionEvent, true/* cacheWrite */); + } + + void basicClear(RegionEventImpl regionEvent, boolean cacheWrite) { + cmnClearRegion(regionEvent, cacheWrite, true); + } + + + void cmnClearRegion(RegionEventImpl regionEvent, boolean cacheWrite, boolean useRVV) { + RegionVersionVector rvv = null; + if (useRVV && this.dataPolicy.withReplication() && this.concurrencyChecksEnabled) { + rvv = this.versionVector.getCloneForTransmission(); + } + clearRegionLocally(regionEvent, cacheWrite, rvv); + } + + /** + * Common code used by both clear and localClear. Asif : On the lines of + * destroyRegion, this method will be invoked for clearing the local cache.The + * cmnClearRegion will be overridden in the derived class DistributedRegion + * too. For clear operation , no CacheWriter will be invoked . It will only + * have afterClear callback. Also like destroyRegion & invalidateRegion , the + * clear operation will not take distributedLock. The clear operation will + * also clear the local tranxnl entries . The clear operation will have + * immediate committed state. + */ + void clearRegionLocally(RegionEventImpl regionEvent, boolean cacheWrite, RegionVersionVector vector) + { + final boolean isRvvDebugEnabled = logger.isTraceEnabled(LogMarker.RVV); + + RegionVersionVector rvv = vector; + if (this.srp != null) { + // clients and local regions do not maintain a full RVV. can't use it with clear() + rvv = null; + } + if (rvv != null && this.dataPolicy.withStorage()) { + if (isRvvDebugEnabled) { + logger.trace(LogMarker.RVV, "waiting for my version vector to dominate\nmine={}\nother=", this.versionVector.fullToString(), rvv); + } + boolean result = this.versionVector.waitToDominate(rvv, this); + if (!result) { + if (isRvvDebugEnabled) { + logger.trace(LogMarker.RVV, "incrementing clearTimeouts for {} rvv={}", this.getName(), this.versionVector.fullToString()); + } + getCachePerfStats().incClearTimeouts(); + } + } + + //If the initial image operation is still in progress + // then we need will have to do the clear operation at the + // end of the GII.For this we try to acquire the lock of GII + // the boolean returned is true that means lock was obtained which + // also means that GII is still in progress. + boolean isGIIInProg = lockGII(); + if (isGIIInProg) { + //Set a flag which will indicate that the Clear was invoked. + // Also we should try & abort the GII + try { + getImageState().setClearRegionFlag(true /* Clear region */, rvv); + } + finally { + unlockGII(); + } + } + + if (cacheWrite && !isGIIInProg) { + this.cacheWriteBeforeRegionClear(regionEvent); + } + + RegionVersionVector myVector = getVersionVector(); + if (myVector != null) { + if (isRvvDebugEnabled) { + logger.trace(LogMarker.RVV, "processing version information for {}", regionEvent); + } + if (!regionEvent.isOriginRemote() && !regionEvent.getOperation().isLocal()) { + // generate a new version for the operation + VersionTag tag = VersionTag.create(getVersionMember()); + tag.setVersionTimeStamp(cacheTimeMillis()); + tag.setRegionVersion(myVector.getNextVersionWhileLocked()); + if (isRvvDebugEnabled) { + logger.trace(LogMarker.RVV, "generated version tag for clear: {}", tag); + } + regionEvent.setVersionTag(tag); + } else { + VersionTag tag = regionEvent.getVersionTag(); + if (tag != null) { + if (isRvvDebugEnabled) { + logger.trace(LogMarker.RVV, "recording version tag for clear: {}", tag); + } + myVector.recordVersion(tag.getMemberID(), tag); // clear() events always have the ID in the tag + } + } + } + + // Asif:Clear the expirational task for all the entries. It is possible that + //after clearing it some new entries may get added befoe issuing clear + //on the map , but that should be OK, as the expirational thread will + //silently move ahead if the entry to be expired no longer existed + this.cancelAllEntryExpiryTasks(); + if (this.entryUserAttributes != null) { + this.entryUserAttributes.clear(); + } + + // if all current content has been removed then the version vector + // does not need to retain any exceptions and the GC versions can + // be set to the current vector versions + if (rvv == null && myVector != null) { + myVector.removeOldVersions(); + } + + /* + * Asif : First we need to clear the Tranxl state for the current region for + * the thread. The operation will not take global lock similar to + * regionInvalidateor regionDestroy behaviour. + */ + + // mbid : clear the disk region if present + if (diskRegion != null) { + // persist current rvv and rvvgc which contained version for clear() itself + if (this.getDataPolicy().withPersistence()) { + // null means not to change dr.rvvTrust + if (isRvvDebugEnabled) { + logger.trace(LogMarker.RVV, "Clear: Saved current rvv: {}", diskRegion.getRegionVersionVector()); + } + diskRegion.writeRVV(this, null); + diskRegion.writeRVVGC(this); + } + + // clear the entries in disk + diskRegion.clear(this, rvv); + } + // this will be done in diskRegion.clear if it is not null else it has to be + // done here + else { + // Now remove the tranxnl entries for this region + this.txClearRegion(); + // Now clear the map of committed entries + Set remainingIDs = clearEntries(rvv); + if (!this.dataPolicy.withPersistence()) { // persistent regions do not reap IDs + if (myVector != null) { + myVector.removeOldMembers(remainingIDs); + } + } + } + + clearHDFSData(); + + if (!isProxy()) { + // Now we need to recreate all the indexes. + //If the indexManager is null we don't have to worry + //for any other thread creating index at that instant + // because the region has already been cleared + //of entries. + //TODO Asif:Have made indexManager variable is made volatile. Is it + // necessary? + if (this.indexManager != null) { + try { + this.indexManager.rerunIndexCreationQuery(); + } + catch (QueryException qe) { + // Asif : Create an anonymous inner class of CacheRuntimeException so + // that a RuntimeException is thrown + throw new CacheRuntimeException(LocalizedStrings.LocalRegion_EXCEPTION_OCCURED_WHILE_RE_CREATING_INDEX_DATA_ON_CLEARED_REGION.toLocalizedString(), qe) { + private static final long serialVersionUID = 0L; + }; + } + } + } + + if (ISSUE_CALLBACKS_TO_CACHE_OBSERVER) { + CacheObserverHolder.getInstance().afterRegionClear(regionEvent); + } + + if (isGIIInProg) { + return; + } + regionEvent.setEventType(EnumListenerEvent.AFTER_REGION_CLEAR); + // notifyBridgeClients(EnumListenerEvent.AFTER_REGION_CLEAR, regionEvent); + //Issue a callback to afterClear if the region is initialized + boolean hasListener = hasListener(); + if (hasListener) { + dispatchListenerEvent(EnumListenerEvent.AFTER_REGION_CLEAR, regionEvent); + } + } + + /**Clear HDFS data, if present */ + protected void clearHDFSData() { + //do nothing, clear is implemented for subclasses like BucketRegion. + } + + @Override + void basicLocalClear(RegionEventImpl rEvent) + { + getDataView().checkSupportsRegionClear(); + cmnClearRegion(rEvent, false/* cacheWrite */, false/*useRVV*/); + } + + public void handleInterestEvent(InterestRegistrationEvent event) { + throw new UnsupportedOperationException(LocalizedStrings. + LocalRegion_REGION_INTEREST_REGISTRATION_IS_ONLY_SUPPORTED_FOR_PARTITIONEDREGIONS + .toLocalizedString()); + } + + @Override + Map basicGetAll(Collection keys, Object callback) { + final boolean isDebugEnabled = logger.isDebugEnabled(); + final boolean isTraceEnabled = logger.isTraceEnabled(); + + if (isDebugEnabled) { + logger.debug("Processing getAll request for: {}", keys); + } + discoverJTA(); + Map allResults = new HashMap(); + if (hasServerProxy()) { + // Some of our implementation expects a list of keys so make sure it is a list + List keysList; + if (keys instanceof List) { + keysList = (List) keys; + } else { + keysList = new ArrayList(keys); + } + + // Gather any local values + // We only need to do this if this region has local storage + if(getTXState() == null && hasStorage()) { + if (keysList == keys) { + // Create a copy of the collection of keys + // to keep the original collection intact + keysList = new ArrayList(keys); + } + for (Iterator i = keysList.iterator(); i.hasNext();) { + Object key = i.next(); + Object value; + Region.Entry entry = accessEntry(key, true); + if (entry != null && (value = entry.getValue()) != null) { + allResults.put(key, value); + i.remove(); + } + } + if (isDebugEnabled) { + logger.debug("Added local results for getAll request: {}", allResults); + } + } + + // Send the rest of the keys to the server (if necessary) + if (!keysList.isEmpty()) { + VersionedObjectList remoteResults = getServerProxy().getAll(keysList, callback); + if (isDebugEnabled) { + logger.debug("remote getAll results are {}", remoteResults); + } + + // Add remote results to local cache and all results if successful + for (VersionedObjectList.Iterator it = remoteResults.iterator(); it.hasNext();) { + VersionedObjectList.Entry entry = it.next(); + Object key = entry.getKey(); + boolean notOnServer = entry.isKeyNotOnServer(); + // in 8.0 we added transfer of tombstones with RI/getAll results for bug #40791 + boolean createTombstone = false; + if (notOnServer) { + createTombstone = (entry.getVersionTag() != null && this.concurrencyChecksEnabled); + allResults.put(key, null); + if (isDebugEnabled) { + logger.debug("Added remote result for missing key: {}", key); + } + if (!createTombstone) { + continue; + } + } + + Object value; + if (createTombstone) { + // the value is null in this case, so use TOKEN_TOMBSTONE + value = Token.TOMBSTONE; + } else { + value = entry.getObject(); + } + + if (value instanceof Throwable){ + continue; + } + // The following basicPutEntry needs to be done + // even if we do not have storage so that the + // correct events will be delivered to any callbacks we have. + long startPut = CachePerfStats.getStatTime(); + validateKey(key); + EntryEventImpl event = EntryEventImpl.create( + this, Operation.LOCAL_LOAD_CREATE, key, value, + callback, false, getMyId(), true); + try { + event.setFromServer(true); + event.setVersionTag(entry.getVersionTag()); + + if (!alreadyInvalid(key, event)) { // bug #47716 - don't update if it's already here & invalid + TXStateProxy tx = this.cache.getTXMgr().internalSuspend(); + try { + basicPutEntry(event, 0L); + } catch (ConcurrentCacheModificationException e) { + if (isDebugEnabled) { + logger.debug("getAll result for {} not stored in cache due to concurrent modification", key); + } + } finally { + this.cache.getTXMgr().resume(tx); + } + getCachePerfStats().endPut(startPut, event.isOriginRemote()); + } + + if (!createTombstone) { + allResults.put(key, value); + if (isTraceEnabled) { + logger.trace("Added remote result for getAll request: {}, {}", key, value); + } + } + } finally { + event.release(); + } + } + } + } else { + // This implementation for a P2P VM is a stop-gap to provide the + // functionality. It needs to be rewritten more efficiently. + for (Iterator i = keys.iterator(); i.hasNext();) { + Object key = i.next(); + try { + allResults.put(key, get(key, callback)); + } catch (Exception e) { + logger.warn(LocalizedMessage.create(LocalizedStrings.LocalRegion_THE_FOLLOWING_EXCEPTION_OCCURRED_ATTEMPTING_TO_GET_KEY_0, key), e); + } + } + } + return allResults; + } + + /** + * Return false if it will never store entry ekys and values locally; otherwise return true. + */ + protected boolean hasStorage() { + return this.getDataPolicy().withStorage(); + } + + private void verifyPutAllMap(Map map) { + Map.Entry mapEntry = null; + Collection theEntries = map.entrySet(); + Iterator iterator = theEntries.iterator(); + while (iterator.hasNext()) { + mapEntry = (Map.Entry)iterator.next(); + Object key = mapEntry.getKey(); + if (mapEntry.getValue() == null || key == null) { + throw new NullPointerException("Any key or value in putAll should not be null"); + } + if (!MemoryThresholds.isLowMemoryExceptionDisabled()) { + checkIfAboveThreshold(key); + } + // Threshold check should not be performed again + } + } + private void verifyRemoveAllKeys(Collection keys) { + for (Object key: keys) { + if (key == null) { + throw new NullPointerException("Any key in removeAll must not be null"); + } + } + } + + + /** + * Called on a bridge server when it has a received a putAll command from a client. + * @param map a map of key->value for the entries we are putting + * @param retryVersions a map of key->version tag. If any of the entries + * are the result of a retried client event, we need to make sure we send + * the original version tag along with the event. + * @param callbackArg callback argument from client + */ + public VersionedObjectList basicBridgePutAll(Map map, Map retryVersions, ClientProxyMembershipID memberId, + EventID eventId, boolean skipCallbacks, Object callbackArg) throws TimeoutException, CacheWriterException + { + long startPut = CachePerfStats.getStatTime(); + if(isGatewaySenderEnabled()) { + callbackArg = new GatewaySenderEventCallbackArgument(callbackArg); + } + + final EntryEventImpl event = EntryEventImpl.create(this, Operation.PUTALL_CREATE, null, + null /* new value */, callbackArg, + false /* origin remote */, memberId.getDistributedMember(), + !skipCallbacks /* generateCallbacks */, + eventId); + try { + event.setContext(memberId); + DistributedPutAllOperation putAllOp = new DistributedPutAllOperation(event, + map.size(), true); + try { + VersionedObjectList result = basicPutAll(map, putAllOp, retryVersions); + getCachePerfStats().endPutAll(startPut); + return result; + } finally { + putAllOp.freeOffHeapResources(); + } + } finally { + event.release(); + } + } + + /** + * Called on a bridge server when it has a received a removeAll command from a client. + * @param keys a collection of the keys we are putting + * @param retryVersions a collection of version tags. If the client is retrying a key + * then that keys slot will be non-null in this collection. Note that keys and retryVersions are parallel lists. + * @param callbackArg callback argument from client + */ + public VersionedObjectList basicBridgeRemoveAll(ArrayList keys, ArrayList retryVersions, ClientProxyMembershipID memberId, + EventID eventId, Object callbackArg) throws TimeoutException, CacheWriterException + { + long startOp = CachePerfStats.getStatTime(); + if(isGatewaySenderEnabled()) { + callbackArg = new GatewaySenderEventCallbackArgument(callbackArg); + } + + final EntryEventImpl event = EntryEventImpl.create(this, Operation.REMOVEALL_DESTROY, null, + null /* new value */, callbackArg, + false /* origin remote */, memberId.getDistributedMember(), + true /* generateCallbacks */, + eventId); + try { + event.setContext(memberId); + DistributedRemoveAllOperation removeAllOp = new DistributedRemoveAllOperation(event, keys.size(), true); + try { + VersionedObjectList result = basicRemoveAll(keys, removeAllOp, retryVersions); + getCachePerfStats().endRemoveAll(startOp); + return result; + } finally { + removeAllOp.freeOffHeapResources(); + } + } finally { + event.release(); + } + } + + public VersionedObjectList basicImportPutAll(Map map, boolean skipCallbacks) { + long startPut = CachePerfStats.getStatTime(); + + // generateCallbacks == false + EntryEventImpl event = EntryEventImpl.create(this, Operation.PUTALL_CREATE, + null, null, null, true, getMyId(), !skipCallbacks); + try { + DistributedPutAllOperation putAllOp = new DistributedPutAllOperation(event, map.size(), false); + try { + VersionedObjectList result = basicPutAll(map, putAllOp, null); + getCachePerfStats().endPutAll(startPut); + return result; + } finally { + putAllOp.freeOffHeapResources(); + } + } finally { + event.release(); + } + } + + @Override + public final void putAll(Map map, Object callbackArg) { + long startPut = CachePerfStats.getStatTime(); + final DistributedPutAllOperation putAllOp = newPutAllOperation(map, callbackArg); + if (putAllOp != null) { + try { + basicPutAll(map, putAllOp, null); + } finally { + putAllOp.getBaseEvent().release(); + putAllOp.freeOffHeapResources(); + } + } + + getCachePerfStats().endPutAll(startPut); + } + + @Override + public final void putAll(Map map) { + putAll(map, null); + } + + @Override + public final void removeAll(Collection keys) { + removeAll(keys, null); + } + + @Override + public final void removeAll(Collection keys, Object callbackArg) { + final long startOp = CachePerfStats.getStatTime(); + final DistributedRemoveAllOperation op = newRemoveAllOperation(keys, callbackArg); + if (op != null) { + try { + basicRemoveAll(keys, op, null); + } finally { + op.getBaseEvent().release(); + op.freeOffHeapResources(); + } + } + getCachePerfStats().endRemoveAll(startOp); + } + + /** + * Returns true if a one-hop (RemoteOperationMessage) should be used when applying the change + * to the system. + */ + public boolean requiresOneHopForMissingEntry(EntryEventImpl event) { + return false; + } + + public VersionedObjectList basicPutAll(final Map map, + final DistributedPutAllOperation putAllOp, final Map retryVersions) { + final boolean isDebugEnabled = logger.isDebugEnabled(); + final EntryEventImpl event = putAllOp.getBaseEvent(); + EventID eventId = event.getEventId(); + if (eventId == null && generateEventID()) { + // Gester: We need to "reserve" the eventIds for the entries in map here + event.reserveNewEventId(cache.getDistributedSystem(), map.size()); + eventId = event.getEventId(); + } + + RuntimeException e = null; + verifyPutAllMap(map); + VersionedObjectList proxyResult = null; + boolean partialResult = false; + if (hasServerProxy()) { + // send message to bridge server + if (isTX()) { + TXStateProxyImpl tx = (TXStateProxyImpl) cache.getTxManager().getTXState(); + tx.getRealDeal(null, this); + } + try { + proxyResult = getServerProxy().putAll(map, eventId, !event.isGenerateCallbacks(), event.getCallbackArgument()); + if (isDebugEnabled) { + logger.debug("PutAll received response from server: {}", proxyResult); + } + } catch (PutAllPartialResultException e1) { + // adjust the map to only add succeeded entries, then apply the adjustedMap + proxyResult = e1.getSucceededKeysAndVersions(); + partialResult = true; + if (isDebugEnabled) { + logger.debug("putAll in client encountered a PutAllPartialResultException:{}\n. Adjusted keys are: ", + e1.getMessage(), proxyResult.getKeys()); + } + Throwable txException = e1.getFailure(); + while (txException != null) { + if (txException instanceof TransactionException) { + e = (TransactionException) txException; + break; + } + txException = txException.getCause(); + } + if (e == null) { + e = new ServerOperationException(LocalizedStrings.Region_PutAll_Applied_PartialKeys_At_Server_0.toLocalizedString(getFullPath()), e1.getFailure()); + } + } + } + + final VersionedObjectList succeeded = new VersionedObjectList(map.size(), true, this.concurrencyChecksEnabled); + // if this is a transactional putAll, we will not have version information as it is only generated at commit + // so treat transactional putAll as if the server is not versioned + final boolean serverIsVersioned = proxyResult != null && proxyResult.regionIsVersioned() + && !isTX() && this.dataPolicy != DataPolicy.EMPTY; + if (!serverIsVersioned && !partialResult) { + // we don't need server information if it isn't versioned or if the region is empty + proxyResult = null; + } + lockRVVForBulkOp(); + try { + + final DistributedPutAllOperation dpao = putAllOp; + int size = (proxyResult == null)? map.size() : proxyResult.size(); + + if (isDebugEnabled) { + logger.debug( "size of put result is {} maps is {} proxyResult is {}", size, map, proxyResult); + } + + final PutAllPartialResult partialKeys = new PutAllPartialResult(size); + final Iterator iterator; + final boolean isVersionedResults; + if (proxyResult != null) { + iterator = proxyResult.iterator(); + isVersionedResults = true; + } else { + iterator = map.entrySet().iterator(); + isVersionedResults = false; + } + Runnable r = new Runnable() { + public void run() { + int offset = 0; + EntryEventImpl tagHolder = EntryEventImpl.createVersionTagHolder(); + while (iterator.hasNext()) { + stopper.checkCancelInProgress(null); + Map.Entry mapEntry = (Map.Entry)iterator.next(); + Object key = mapEntry.getKey(); + VersionTag versionTag = null; + tagHolder.setVersionTag(null); + final Object value; + boolean overwritten = false; + if (isVersionedResults) { + versionTag = ((VersionedObjectList.Entry)mapEntry).getVersionTag(); + value = map.get(key); + if (isDebugEnabled) { + logger.debug("putAll key {} -> {} version={}", key, value, versionTag); + } + if (versionTag == null && serverIsVersioned && concurrencyChecksEnabled && dataPolicy.withStorage()) { + // server was unable to determine the version for this operation. + // I'm not sure this can still happen as described below on a pr. + // But it can happen on the server if NORMAL or PRELOADED. See bug 51644. + // This can happen in a PR with redundancy if there is a bucket + // failure or migration during the operation. We destroy the + // entry since we don't know what its state should be (but the server should) + if (isDebugEnabled) { + logger.debug("server returned no version information for {}", key); + } + localDestroyNoCallbacks(key); + // to be consistent we need to fetch the current entry + get(key, event.getCallbackArgument(), false, null); + overwritten = true; + } + } else { + value = mapEntry.getValue(); + if (isDebugEnabled) { + logger.debug("putAll {} -> {}", key, value); + } + } + try { + if (serverIsVersioned) { + if (isDebugEnabled) { + logger.debug("associating version tag with {} version={}", key, versionTag); + } + //If we have received a version tag from a server, add it to the event + tagHolder.setVersionTag(versionTag); + tagHolder.setFromServer(true); + } else if (retryVersions != null && retryVersions.containsKey(key)) { + //If this is a retried event, and we have a version tag for the retry, + //add it to the event. + tagHolder.setVersionTag(retryVersions.get(key)); + } + + if (!overwritten) { + try { + basicEntryPutAll(key, value, dpao, offset, tagHolder); + } finally { + tagHolder.release(); + } + } + // now we must check again since the cache may have closed during + // distribution (causing this process to not receive and queue the + // event for clients + stopper.checkCancelInProgress(null); + succeeded.addKeyAndVersion(key, tagHolder.getVersionTag()); + } + catch (Exception ex) { + // TODO ask Gester if this debug logging can be removed + if (isDebugEnabled) { + logger.debug("PutAll operation encountered exception for key {}", key, ex); + } + partialKeys.saveFailedKey(key, ex); + } + offset++; + } + } + }; + this.syncBulkOp(r, eventId); + if (partialKeys.hasFailure()) { + // Bug 51725: Now succeeded contains an order key list, may be missing the version tags. + // Save reference of succeeded into partialKeys. The succeeded may be modified by + // postPutAll() to fill in the version tags. + partialKeys.setSucceededKeysAndVersions(succeeded); + logger.info(LocalizedMessage.create(LocalizedStrings.Region_PutAll_Applied_PartialKeys_0_1, + new Object[] {getFullPath(), partialKeys})); + if (isDebugEnabled) { + logger.debug(partialKeys.detailString()); + } + if (e == null) { + // if received exception from server first, ignore local exception + if (dpao.isBridgeOperation()) { + if (partialKeys.getFailure() instanceof CancelException) { + e = (CancelException)partialKeys.getFailure(); + } else if (partialKeys.getFailure() instanceof LowMemoryException) { + throw partialKeys.getFailure(); // fix for #43589 + } else { + e = new PutAllPartialResultException(partialKeys); + if (isDebugEnabled) { + logger.debug("basicPutAll:"+partialKeys.detailString()); + } + } + } else { + throw partialKeys.getFailure(); + } + } + } + } + catch (LowMemoryException lme) { + throw lme; + } + catch (RuntimeException ex) { + e = ex; + } + catch (Exception ex) { + e = new RuntimeException(ex); + } finally { + unlockRVVForBulkOp(); + putAllOp.getBaseEvent().release(); + putAllOp.freeOffHeapResources(); + } + getDataView().postPutAll(putAllOp, succeeded, this); + if (e != null) { + throw e; + } + return succeeded; + } + + public VersionedObjectList basicRemoveAll(final Collection keys, + final DistributedRemoveAllOperation removeAllOp, final ArrayList retryVersions) { + final boolean isDebugEnabled = logger.isDebugEnabled(); + final boolean isTraceEnabled = logger.isTraceEnabled(); + final EntryEventImpl event = removeAllOp.getBaseEvent(); + EventID eventId = event.getEventId(); + if (eventId == null && generateEventID()) { + // Gester: We need to "reserve" the eventIds for the entries in map here + event.reserveNewEventId(cache.getDistributedSystem(), keys.size()); + eventId = event.getEventId(); + } + + RuntimeException e = null; + verifyRemoveAllKeys(keys); + VersionedObjectList proxyResult = null; + boolean partialResult = false; + if (hasServerProxy()) { + // send message to bridge server + if (isTX()) { + TXStateProxyImpl tx = (TXStateProxyImpl) cache.getTxManager().getTXState(); + tx.getRealDeal(null, this); + } + try { + proxyResult = getServerProxy().removeAll(keys, eventId, event.getCallbackArgument()); + if (isDebugEnabled) { + logger.debug("removeAll received response from server: {}", proxyResult); + } + } catch (PutAllPartialResultException e1) { + // adjust the map to only add succeeded entries, then apply the adjustedMap + proxyResult = e1.getSucceededKeysAndVersions(); + partialResult = true; + if (isDebugEnabled) { + logger.debug("removeAll in client encountered a BulkOpPartialResultException: {}\n. Adjusted keys are: {}", e1.getMessage(), proxyResult.getKeys()); + } + Throwable txException = e1.getFailure(); + while (txException != null) { + if (txException instanceof TransactionException) { + e = (TransactionException) txException; + break; + } + txException = txException.getCause(); + } + if (e == null) { + e = new ServerOperationException(LocalizedStrings.Region_RemoveAll_Applied_PartialKeys_At_Server_0.toLocalizedString(getFullPath()), e1.getFailure()); + } + } + } + + final VersionedObjectList succeeded = new VersionedObjectList(keys.size(), true, this.concurrencyChecksEnabled); + // If this is a transactional removeAll, we will not have version information as it is only generated at commit + // so treat transactional removeAll as if the server is not versioned. + // If we have no storage then act as if the server is not versioned. + final boolean serverIsVersioned = proxyResult != null && proxyResult.regionIsVersioned() + && !isTX() && getDataPolicy().withStorage(); + if (!serverIsVersioned && !partialResult) { + // since the server is not versioned and we do not have a partial result + // get rid of the proxyResult info returned by the server. + proxyResult = null; + } + lockRVVForBulkOp(); + try { + + final DistributedRemoveAllOperation op = removeAllOp; + int size = (proxyResult == null)? keys.size() : proxyResult.size(); + + if (isInternalRegion()) { + if (isTraceEnabled) { + logger.trace( + "size of removeAll result is {} keys are {} proxyResult is {}", size, keys, proxyResult); + } else { + if (isTraceEnabled) { + logger.trace( + "size of removeAll result is {} keys are {} proxyResult is {}", size, keys, proxyResult); + } + } + } else { + if (isTraceEnabled) { + logger.trace( + "size of removeAll result is {} keys are {} proxyResult is {}", size, keys, proxyResult); + } + } + + final PutAllPartialResult partialKeys = new PutAllPartialResult(size); + final Iterator iterator; + final boolean isVersionedResults; + if (proxyResult != null) { + iterator = proxyResult.iterator(); + isVersionedResults = true; + } else { + iterator = keys.iterator(); + isVersionedResults = false; + } + Runnable r = new Runnable() { + public void run() { + int offset = 0; + EntryEventImpl tagHolder = EntryEventImpl.createVersionTagHolder(); + while (iterator.hasNext()) { + stopper.checkCancelInProgress(null); + Object key; + VersionTag versionTag = null; + tagHolder.setVersionTag(null); + if (isVersionedResults) { + Map.Entry mapEntry = (Map.Entry)iterator.next(); + key = mapEntry.getKey(); + versionTag = ((VersionedObjectList.Entry)mapEntry).getVersionTag(); + if (isDebugEnabled) { + logger.debug("removeAll key {} version={}",key, versionTag); + } + if (versionTag == null) { + if (isDebugEnabled) { + logger.debug("removeAll found invalid version tag, which means the entry is not found at server for key={}.", key); + } + succeeded.addKeyAndVersion(key, null); + continue; + } + // No need for special handling here in removeAll. + // We can just remove this key from the client with versionTag set to null. + } else { + key = iterator.next(); + if (isInternalRegion()) { + if (isTraceEnabled) { + logger.trace("removeAll {}", key); + } + } else { + if (isTraceEnabled) { + logger.trace("removeAll {}", key); + } + } + + } + try { + if (serverIsVersioned) { + if (isDebugEnabled) { + logger.debug("associating version tag with {} version={}", key, versionTag); + } + //If we have received a version tag from a server, add it to the event + tagHolder.setVersionTag(versionTag); + tagHolder.setFromServer(true); + } else if (retryVersions != null) { + VersionTag vt = retryVersions.get(offset); + if (vt != null) { + //If this is a retried event, and we have a version tag for the retry, + //add it to the event. + tagHolder.setVersionTag(vt); + } + } + + basicEntryRemoveAll(key, op, offset, tagHolder); + // now we must check again since the cache may have closed during + // distribution causing this process to not receive and queue the + // event for clients + stopper.checkCancelInProgress(null); + succeeded.addKeyAndVersion(key, tagHolder.getVersionTag()); + } + catch (Exception ex) { + partialKeys.saveFailedKey(key, ex); + } + offset++; + } + } + }; + syncBulkOp(r, eventId); + if (partialKeys.hasFailure()) { + // Bug 51725: Now succeeded contains an order key list, may be missing the version tags. + // Save reference of succeeded into partialKeys. The succeeded may be modified by + // postRemoveAll() to fill in the version tags. + partialKeys.setSucceededKeysAndVersions(succeeded); + logger.info(LocalizedMessage.create(LocalizedStrings.Region_RemoveAll_Applied_PartialKeys_0_1, + new Object[] {getFullPath(), partialKeys})); + if (isDebugEnabled) { + logger.debug(partialKeys.detailString()); + } + if (e == null) { + // if received exception from server first, ignore local exception + if (op.isBridgeOperation()) { + if (partialKeys.getFailure() instanceof CancelException) { + e = (CancelException)partialKeys.getFailure(); + } else if (partialKeys.getFailure() instanceof LowMemoryException) { + throw partialKeys.getFailure(); // fix for #43589 + } else { + e = new PutAllPartialResultException(partialKeys); + if (isDebugEnabled) { + logger.debug("basicRemoveAll:"+partialKeys.detailString()); + } + } + } else { + throw partialKeys.getFailure(); + } + } + } + } + catch (LowMemoryException lme) { + throw lme; + } + catch (RuntimeException ex) { + e = ex; + } + catch (Exception ex) { + e = new RuntimeException(ex); + } finally { + unlockRVVForBulkOp(); + removeAllOp.getBaseEvent().release(); + removeAllOp.freeOffHeapResources(); + } + getDataView().postRemoveAll(removeAllOp, succeeded, this); + if (e != null) { + throw e; + } + return succeeded; + } + + /** + * bug #46924 - putAll can be partially applied when a clear() occurs, leaving + * the cache in an inconsistent state. Set the RVV to "cache op in progress" + * so clear() will block until the putAll completes. This won't work for + * non-replicate regions though since they uses one-hop during basicPutPart2 + * to get a valid version tag. + */ + private void lockRVVForBulkOp() { + if (this.versionVector != null && this.dataPolicy.withReplication()) { + this.versionVector.lockForCacheModification(this); + } + } + + private void unlockRVVForBulkOp() { + if (this.versionVector != null && this.dataPolicy.withReplication()) { + this.versionVector.releaseCacheModificationLock(this); + } + } + + + // split into a separate newPutAllOperation since SQLFabric may need to + // manipulate event before doing the put (e.g. posDup flag) + public final DistributedPutAllOperation newPutAllOperation(Map map, Object callbackArg) { + if (map == null) { + throw new NullPointerException(LocalizedStrings + .AbstractRegion_MAP_CANNOT_BE_NULL.toLocalizedString()); + } + if (map.isEmpty()) { + return null; + } + checkReadiness(); + checkForLimitedOrNoAccess(); + discoverJTA(); + + // Create a dummy event for the PutAll operation. Always create a + // PutAll operation, even if there is no distribution, so that individual + // events can be tracked and handed off to callbacks in postPutAll + final EntryEventImpl event = EntryEventImpl.create(this, + Operation.PUTALL_CREATE, null, null, callbackArg, true, getMyId()); + + event.disallowOffHeapValues(); + DistributedPutAllOperation dpao = new DistributedPutAllOperation(event, map.size(), false); + return dpao; + } + public final DistributedPutAllOperation newPutAllForPUTDmlOperation(Map map, Object callbackArg) { + DistributedPutAllOperation dpao = newPutAllOperation(map, callbackArg); + dpao.getEvent().setFetchFromHDFS(false); + dpao.getEvent().setPutDML(true); + return dpao; + } + + + public final DistributedRemoveAllOperation newRemoveAllOperation(Collection keys, Object callbackArg) { + if (keys == null) { + throw new NullPointerException("The keys Collection passed to removeAll was null."); + } + if (keys.isEmpty()) { + return null; + } + checkReadiness(); + checkForLimitedOrNoAccess(); + discoverJTA(); + + // Create a dummy event for the removeAll operation. Always create a + // removeAll operation, even if there is no distribution, so that individual + // events can be tracked and handed off to callbacks in postRemoveAll + final EntryEventImpl event = EntryEventImpl.create(this, Operation.REMOVEALL_DESTROY, null, + null/* newValue */, callbackArg, false, getMyId()); + event.disallowOffHeapValues(); + return new DistributedRemoveAllOperation(event, keys.size(), false); + } + + + /** + * This performs the putAll operation for a specific key and value + * @param key the cache key + * @param value the cache value + * @param putallOp the DistributedPutAllOperation associated with the event + * @param tagHolder holder for version tag + * @throws TimeoutException if the operation times out + * @throws CacheWriterException if a cache writer objects to the update + */ + protected final void basicEntryPutAll(Object key, + Object value, + DistributedPutAllOperation putallOp, + int offset, + EntryEventImpl tagHolder) + throws TimeoutException, CacheWriterException { + assert putallOp != null; +// long startPut = CachePerfStats.getStatTime(); + checkReadiness(); + if (value == null) { + throw new NullPointerException(LocalizedStrings.LocalRegion_VALUE_CANNOT_BE_NULL.toLocalizedString()); + } + validateArguments(key, value, null); + // event is marked as a PUTALL_CREATE but if the entry exists it + // will be changed to a PUTALL_UPDATE later on. + EntryEventImpl event = EntryEventImpl.createPutAllEvent( + putallOp, this, Operation.PUTALL_CREATE, key, value); + + try { + event.setFetchFromHDFS(putallOp.getEvent().isFetchFromHDFS()); + event.setPutDML(putallOp.getEvent().isPutDML()); + + if (tagHolder != null) { + event.setVersionTag(tagHolder.getVersionTag()); + event.setFromServer(tagHolder.isFromServer()); + } + if (generateEventID()) { + event.setEventId(new EventID(putallOp.getBaseEvent().getEventId(), offset)); + } + discoverJTA(); // TODO: This could be called once for the entire putAll instead of calling it for every key + + /* + * If this is tx, do putEntry, unless it is a local region? + */ + performPutAllEntry(event); + if (tagHolder != null) { + tagHolder.setVersionTag(event.getVersionTag()); + tagHolder.isConcurrencyConflict(event.isConcurrencyConflict()); + } + } finally { + event.release(); + } + } + + + protected final void basicEntryRemoveAll(Object key, + DistributedRemoveAllOperation op, + int offset, + EntryEventImpl tagHolder) + throws TimeoutException, CacheWriterException { + assert op != null; + checkReadiness(); + validateKey(key); + EntryEventImpl event = EntryEventImpl.createRemoveAllEvent(op, this, key); + try { + if (tagHolder != null) { + event.setVersionTag(tagHolder.getVersionTag()); + event.setFromServer(tagHolder.isFromServer()); + } + if (generateEventID()) { + event.setEventId(new EventID(op.getBaseEvent().getEventId(), offset)); + } + discoverJTA(); // TODO: This could be called once for the entire removeAll instead of calling it for every key + + /* + * If this is tx, do removeEntry, unless it is a local region? + */ + try { + performRemoveAllEntry(event); + } catch (EntryNotFoundException ignore) { + if (event.getVersionTag() == null) { + if (logger.isDebugEnabled()) { + logger.debug("RemoveAll encoutered EntryNotFoundException: event={}", event); + } + } + } + if (tagHolder != null) { + tagHolder.setVersionTag(event.getVersionTag()); + tagHolder.isConcurrencyConflict(event.isConcurrencyConflict()); + } + } finally { + event.release(); + } + } + public void performPutAllEntry(EntryEventImpl event) { + getDataView().putEntry(event, false, false, null, false, 0L, false); + } + public void performRemoveAllEntry(EntryEventImpl event) { + basicDestroy(event, true, null); + //getDataView().destroyExistingEntry(event, true, null); + } + + + public void postPutAllFireEvents(DistributedPutAllOperation putallOp, VersionedObjectList successfulPuts) + { + if (!this.dataPolicy.withStorage() && this.concurrencyChecksEnabled + && putallOp.getBaseEvent().isBridgeEvent()) { + // if there is no local storage we need to transfer version information + // to the successfulPuts list for transmission back to the client + successfulPuts.clear(); + putallOp.fillVersionedObjectList(successfulPuts); + } + Set successfulKeys = new HashSet(successfulPuts.size()); + for (Object key: successfulPuts.getKeys()) { + successfulKeys.add(key); + } + for (Iterator it=putallOp.eventIterator(); it.hasNext(); ) { + EntryEventImpl event = (EntryEventImpl)it.next(); + if (successfulKeys.contains(event.getKey())) { + EnumListenerEvent op = event.getOperation().isCreate() ? EnumListenerEvent.AFTER_CREATE + : EnumListenerEvent.AFTER_UPDATE; + invokePutCallbacks(op, event, !event.callbacksInvoked() && !event.isPossibleDuplicate(), + false /* We must notify gateways inside RegionEntry lock, NOT here, to preserve the order of events sent by gateways for same key*/); + } + } + } + + public void postRemoveAllFireEvents(DistributedRemoveAllOperation op, VersionedObjectList successfulOps) { + if (!this.dataPolicy.withStorage() && this.concurrencyChecksEnabled + && op.getBaseEvent().isBridgeEvent()) { + // if there is no local storage we need to transfer version information + // to the successfulOps list for transmission back to the client + successfulOps.clear(); + op.fillVersionedObjectList(successfulOps); + } + Set successfulKeys = new HashSet(successfulOps.size()); + for (Object key: successfulOps.getKeys()) { + successfulKeys.add(key); + } + for (Iterator it=op.eventIterator(); it.hasNext(); ) { + EntryEventImpl event = (EntryEventImpl)it.next(); + if (successfulKeys.contains(event.getKey())) { + invokeDestroyCallbacks(EnumListenerEvent.AFTER_DESTROY, event, !event.callbacksInvoked() && !event.isPossibleDuplicate(), + false /* We must notify gateways inside RegionEntry lock, NOT here, to preserve the order of events sent by gateways for same key*/); + } + } + } + + public void postPutAllSend(DistributedPutAllOperation putallOp, VersionedObjectList successfulPuts) + { + /* No-op for local region of course */ + } + public void postRemoveAllSend(DistributedRemoveAllOperation op, VersionedObjectList successfulOps) + { + /* No-op for local region of course */ + } + + + + /** + * DistributedRegion overrides isCurrentlyLockGrantor + * + * @see DistributedRegion#isCurrentlyLockGrantor() + */ + @Override + protected boolean isCurrentlyLockGrantor() + { + return false; + } + + /** + * Handle a local region destroy or a region close that was done on this + * region in a remote vm. Currently the only thing needed is to have the + * advisor + * + * @param sender the id of the member that did the remote operation + * @param topSerial the remote serialNumber for the top region (maybe root) + * @param subregionSerialNumbers map of remote subregions to serialNumbers + * @param regionDestroyed true if the region was destroyed on the remote host (as opposed to closed) + * @since 5.0 + */ + final void handleRemoteLocalRegionDestroyOrClose( + InternalDistributedMember sender, + int topSerial, + Map subregionSerialNumbers, boolean regionDestroyed) { + + final int oldLevel = setThreadInitLevelRequirement(LocalRegion.ANY_INIT); + // go + // through + // initialization + // latches + try { + basicHandleRemoteLocalRegionDestroyOrClose( + sender, topSerial, subregionSerialNumbers, false, regionDestroyed); + } + finally { + setThreadInitLevelRequirement(oldLevel); + } + } + + /** + * Does the core work for handleRemoteLocalRegionDestroyOrClose. + * + * @param sender the id of the member that did the remote operation + * @param topSerial the remote serialNumber for the top region (maybe root) + * @param subregionSerialNumbers remote map of subregions to serialNumbers + * @param regionDestroyed + * @since 5.0 + */ + private final void basicHandleRemoteLocalRegionDestroyOrClose( + InternalDistributedMember sender, + int topSerial, + Map subregionSerialNumbers, + boolean subregion, boolean regionDestroyed) { + + // use topSerial unless this region is in subregionSerialNumbers map + int serialForThisRegion = topSerial; + + if (subregion) { + // OPTIMIZE: we don't know if this rgn is a subregion or the top region + Integer serialNumber = (Integer) subregionSerialNumbers.get(getFullPath()); + if (serialNumber == null) { + // sender didn't have this subregion + return; + } + else { + // non-null means this is a subregion under the destroyed region + serialForThisRegion = serialNumber.intValue(); + } + } + + // remove sender's serialForThisRegion from the advisor + removeSenderFromAdvisor(sender, serialForThisRegion, regionDestroyed); + + // process subregions... + for (Iterator itr = this.subregions.values().iterator(); itr.hasNext();) { + LocalRegion r = toRegion(itr.next()); + if (r != null && !r.isDestroyed()) { + // recursively call basicHandleRemoteLocalRegionDestroyOrClose for subregions + r.basicHandleRemoteLocalRegionDestroyOrClose( + sender, topSerial, subregionSerialNumbers, true, regionDestroyed); + } + } + } + + /** + * Remove the specified sender from this regions advisor. + * @param regionDestroyed + * + * @since 5.0 + */ + protected void removeSenderFromAdvisor(InternalDistributedMember sender, int serial, boolean regionDestroyed) + { + // nothing needs to be done here since LocalRegion does not have an advisor. + } + + /** + * @return Returns the isUsedForPartitionedRegionAdmin. + */ + final public boolean isUsedForPartitionedRegionAdmin() + { + return this.isUsedForPartitionedRegionAdmin; + } + + /** + * This method determines whether this region should synchronize with peer replicated regions + * when the given member has crashed. + * @param id the crashed member + * @return true if synchronization should be attempted + */ + public boolean shouldSyncForCrashedMember(InternalDistributedMember id) { + return this.concurrencyChecksEnabled + && this.dataPolicy.withReplication() + && !this.isUsedForPartitionedRegionAdmin + && !this.isUsedForMetaRegion + && !this.isUsedForSerialGatewaySenderQueue; + } + + /** + * forces the diskRegion to switch the oplog + * @since 5.1 + */ + public void forceRolling() throws DiskAccessException { + if(this.diskRegion!=null){ + diskRegion.forceRolling(); + } + } + + /** + * @deprecated as of prPersistSprint1 use forceCompaction instead + */ + @Deprecated + public boolean notifyToRoll() { + return forceCompaction(); + } + + /** + * filterProfile holds CQ and registerInterest information for clients + * having this region + */ + FilterProfile filterProfile; + + /** + * + * @return int array containing the IDs of the oplogs which will potentially + * get rolled else null if no oplogs were available at the time of signal or region + * is not having disk persistence. Pls note that the actual number of oplogs + * rolled may be more than what is indicated + * @since prPersistSprint1 + */ + @Override + public boolean forceCompaction() + { + DiskRegion dr = getDiskRegion(); + if (dr != null) { + if (dr.isCompactionPossible()) { + return dr.forceCompaction(); + } else { + throw new IllegalStateException("To call notifyToCompact you must configure the region with "); + } + } + else { + return false; + } + } + + @Override + public File[] getDiskDirs() { + if (getDiskStore() != null) { + return getDiskStore().getDiskDirs(); + } else { + return this.diskDirs; + } + } + + public int[] getDiskDirSizes() { + if (getDiskStore() != null) { + return getDiskStore().getDiskDirSizes(); + } else { + return this.diskSizes; + } + } + + + /** + * @return Returns the isUsedForPartitionedRegionBucket. + */ + public boolean isUsedForPartitionedRegionBucket() + { + return this.isUsedForPartitionedRegionBucket; + } + + public boolean isUsedForSerialGatewaySenderQueue() { + return this.isUsedForSerialGatewaySenderQueue; + } + + public boolean isUsedForParallelGatewaySenderQueue() { + return this.isUsedForParallelGatewaySenderQueue; + } + + public AbstractGatewaySender getSerialGatewaySender(){ + return this.serialGatewaySender; + } + + public boolean isParallelWanEnabled() { + Set regionGatewaySenderIds = this.getAllGatewaySenderIds(); + if (regionGatewaySenderIds.isEmpty()) { + return false; + } + Set cacheGatewaySenders = getCache().getAllGatewaySenders(); + for (GatewaySender sender : cacheGatewaySenders) { + if (regionGatewaySenderIds.contains(sender.getId()) + && sender.isParallel()) { + return true; + } + } + return false; + } + + /** + * A convenience method to get the PartitionedRegion for a Bucket + * @return If this is an instance of {@link BucketRegion}, returns the + * {@link PartitionedRegion} otherwise throws an IllegalArgumentException + */ + public PartitionedRegion getPartitionedRegion() { + if (!this.isUsedForPartitionedRegionBucket) { + throw new IllegalArgumentException(); + } + return ((BucketRegion)this).getPartitionedRegion(); + } + /** + * @return Returns the isUsedForMetaRegion. + */ + final public boolean isUsedForMetaRegion() + { + return this.isUsedForMetaRegion; + } + + final public boolean isMetaRegionWithTransactions() + { + return this.isMetaRegionWithTransactions; + } + + /** + * @return true if this is not a user visible region + */ + final public boolean isInternalRegion(){ + return isSecret() || isUsedForMetaRegion() || isUsedForPartitionedRegionAdmin() + || isUsedForPartitionedRegionBucket(); + } + + public LoaderHelper createLoaderHelper(Object key, Object callbackArgument, + boolean netSearchAllowed, boolean netLoadAllowed, + SearchLoadAndWriteProcessor searcher) + { + return new LoaderHelperImpl(this, key, callbackArgument, netSearchAllowed, + netLoadAllowed, searcher); + } + + /** visitor over the CacheProfiles to check if the region has a CacheLoader */ + private static final DistributionAdvisor.ProfileVisitor netLoaderVisitor + = new DistributionAdvisor.ProfileVisitor() { + public boolean visit(DistributionAdvisor advisor, Profile profile, + int profileIndex, int numProfiles, Void aggregate) { + assert profile instanceof CacheProfile; + final CacheProfile prof = (CacheProfile)profile; + + // if region in cache is not yet initialized, exclude + if (prof.regionInitialized // fix for bug 41102 + && !prof.memberUnInitialized) { + // cut the visit short if we find a CacheLoader + return !prof.hasCacheLoader; + } + // continue the visit + return true; + } + }; + + /** visitor over the CacheProfiles to check if the region has a CacheWriter */ + private static final DistributionAdvisor.ProfileVisitor netWriterVisitor + = new DistributionAdvisor.ProfileVisitor() { + public boolean visit(DistributionAdvisor advisor, Profile profile, + int profileIndex, int numProfiles, Void aggregate) { + assert profile instanceof CacheProfile; + final CacheProfile prof = (CacheProfile)profile; + + // if region in cache is in recovery, or member not initialized exclude + if (!prof.inRecovery && !prof.memberUnInitialized) { + // cut the visit short if we find a CacheWriter + return !prof.hasCacheWriter; + } + // continue the visit + return true; + } + }; + + /** + * Return true if some other member of the distributed system, not including + * self, has a CacheLoader defined on the region. + */ + public final boolean hasNetLoader(CacheDistributionAdvisor distAdvisor) { + return !distAdvisor.accept(netLoaderVisitor, null); + } + + /** + * Return true if some other member of the distributed system, not including + * self, has a CacheWriter defined on the region. + */ + public final boolean hasNetWriter(CacheDistributionAdvisor distAdvisor) { + return !distAdvisor.accept(netWriterVisitor, null); + } + + /** + * Used to indicate that this region is used for internal purposes + */ + protected boolean isSecret() + { + return false; + } + + /** + * whether concurrency checks should be disabled for this region + */ + public boolean supportsConcurrencyChecks() { + return !isSecret() || this.dataPolicy.withPersistence(); + } + + /** + * Used to prevent notification of bridge clients, typically used for internal + * "meta" regions and if the cache doesn't have any bridge servers + * + * @return true only if it's cache has bridge servers and this is nt a meta region + */ + protected boolean shouldNotifyBridgeClients() + { + return (this.cache.getCacheServers().size() > 0) + && !this.isUsedForPartitionedRegionAdmin + && !this.isUsedForPartitionedRegionBucket + && !this.isUsedForMetaRegion; + } + + protected boolean shouldNotifyGatewaySender() { + return (this.cache.getAllGatewaySenders().size() > 0); + } + + /** + * Check if the region has has a Listener or not + * + * @return true only if this region has a Listener + */ + protected boolean shouldDispatchListenerEvent() + { + return hasListener(); + } + + /** + * Internal method to return cache as GemFireCache to avoid unnecessary + * typecasting. + * + * @return this region's GemFireCache instance + */ + @Override + public GemFireCacheImpl getGemFireCache() { + return this.cache; + } + + /** + * Called by ccn when a client goes away + * @since 5.7 + */ + void cleanupForClient(CacheClientNotifier ccn, + ClientProxyMembershipID client) { + if (this.cache.isClosed()) return; + if (this.isDestroyed) return; + + this.filterProfile.cleanupForClient(ccn, client); + + Iterator it = (new SubregionsSet(false)).iterator(); + while (it.hasNext()) { + LocalRegion lr = (LocalRegion)it.next(); + lr.cleanupForClient(ccn, client); + } + } + + /** + * Returns the CQ/interest profile for this region + */ + public FilterProfile getFilterProfile() { + return this.filterProfile; + } + + /** + * Destroys the CQ/interest profile for this region. Use this if your + * region does not support client interest (e.g., WAN gateway queue) + */ + public void destroyFilterProfile() { + this.filterProfile = null; + } + + /** + * Returns a map of subregions that were destroyed when this region was + * destroyed. Map contains subregion full paths to SerialNumbers. Return is + * defined as HashMap because DestroyRegionOperation will provide the map to + * DataSerializer.writeHashMap which requires HashMap. Returns + * {@link #destroyedSubregionSerialNumbers}. + * + * @return HashMap of subregions to SerialNumbers + * @throws IllegalStateException if this region has not been destroyed + */ + protected HashMap getDestroyedSubregionSerialNumbers() { + if (!this.isDestroyed) { + throw new IllegalStateException( + LocalizedStrings.LocalRegion_REGION_0_MUST_BE_DESTROYED_BEFORE_CALLING_GETDESTROYEDSUBREGIONSERIALNUMBERS + .toLocalizedString(getFullPath())); + } + return this.destroyedSubregionSerialNumbers; + } + + /** + * Returns a map of subregion full paths to SerialNumbers. Caller must have + * acquired the destroyLock if a stable view is desired. Key is String, value + * is Integer. + * + * @return HashMap of subregions to SerialNumbers + */ + private HashMap collectSubregionSerialNumbers() { + HashMap map = new HashMap(); + addSubregionSerialNumbers(map); + return map; + } + + /** + * Iterates over all subregions to put the full path and serial number into + * the provided map. + * + * @param map the map to put the full path and serial number into for each + * subregion + */ + private void addSubregionSerialNumbers(Map map) { + // iterate over all subregions to gather serialNumbers and recurse + for (Iterator iter = this.subregions.entrySet().iterator(); iter.hasNext();) { + Map.Entry entry = (Map.Entry)iter.next(); + LocalRegion subregion = (LocalRegion) entry.getValue(); + map.put(subregion.getFullPath(), + Integer.valueOf(subregion.getSerialNumber())); + + // recursively call down into each subregion tree + subregion.addSubregionSerialNumbers(map); + } + } + + + public SelectResults query(String p_predicate) throws FunctionDomainException, + TypeMismatchException, NameResolutionException, + QueryInvocationTargetException { + String predicate = p_predicate; + if (predicate == null) { + throw new IllegalArgumentException( + "The input query predicate is null. A null predicate is not allowed."); + } + predicate = predicate.trim(); + SelectResults results = null; + if (hasServerProxy()) { + String queryString = null; + + // Trim whitespace + predicate = predicate.trim(); + + // Compare the query patterns to the 'predicate'. If one matches, + // send it as is to the server + boolean matches = false; + for (int i=0; i htrm = getMemoryThresholdReachedMembers(); + throw new LowMemoryException(LocalizedStrings.ResourceManager_LOW_MEMORY_FOR_0_FUNCEXEC_MEMBERS_1.toLocalizedString( + new Object[] {function.getId(), htrm}), htrm); + } + final LocalResultCollector localRC = execution + .getLocalResultCollector(function, rc); + final DM dm = getDistributionManager(); + execution.setExecutionNodes(Collections.singleton(getMyId())); + + final DistributedRegionFunctionResultSender resultSender = new DistributedRegionFunctionResultSender( + dm, localRC, function, sender); + final RegionFunctionContextImpl context = new RegionFunctionContextImpl( + function.getId(), LocalRegion.this, args, filter, null, null, + resultSender, execution.isReExecute()); + execution.executeFunctionOnLocalNode(function, context, resultSender, dm, isTX()); + return localRC; + } + + /** + * @return the set of members which are known to be critical + */ + public Set getMemoryThresholdReachedMembers() { + return Collections. singleton(this.cache.getMyId()); + } + + /* (non-Javadoc) + * @see com.gemstone.gemfire.cache.control.ResourceListener#onEvent(java.lang.Object) + */ + public final void onEvent(MemoryEvent event) { + if (logger.isDebugEnabled()) { + logger.debug("Region:{} received a Memory event.{}", this, event); + } + setMemoryThresholdFlag(event); + } + + protected void setMemoryThresholdFlag(MemoryEvent event) { + assert getScope().isLocal(); + if (event.isLocal()) { + if (event.getState().isCritical() + && !event.getPreviousState().isCritical() + && (event.getType() == ResourceType.HEAP_MEMORY || (event.getType() == ResourceType.OFFHEAP_MEMORY && getOffHeap()))) { + // start rejecting operations + memoryThresholdReached.set(true); + } else if (!event.getState().isCritical() + && event.getPreviousState().isCritical() + && (event.getType() == ResourceType.HEAP_MEMORY || (event.getType() == ResourceType.OFFHEAP_MEMORY && getOffHeap()))) { + memoryThresholdReached.set(false); + } + } + } + void updateSizeOnClearRegion(int sizeBeforeClear) { + // Only needed by BucketRegion + } + + /** + * Calculate and return the size of a value for updating the bucket size. + * Zero is always returned for non-bucket regions. + */ + public int calculateValueSize(Object val) { + // Only needed by BucketRegion + return 0; + } + public int calculateRegionEntryValueSize(RegionEntry re) { + // Only needed by BucketRegion + return 0; + } + void updateSizeOnPut(Object key, int oldSize, int newSize) { + // Only needed by BucketRegion + } + + void updateSizeOnCreate(Object key, int newSize) { + // Only needed by BucketRegion + } + + void updateSizeOnRemove(Object key, int oldSize) { + // Only needed by BucketRegion + } + + int updateSizeOnEvict(Object key, int oldSize) { + // Only needed by BucketRegion + return 0; + } + public void updateSizeOnFaultIn(Object key, int newSize, int bytesOnDisk) { + // Only needed by BucketRegion + } + + public void initializeStats(long numEntriesInVM, long numOverflowOnDisk, + long numOverflowBytesOnDisk) { + getDiskRegion().getStats().incNumEntriesInVM(numEntriesInVM); + getDiskRegion().getStats().incNumOverflowOnDisk(numOverflowOnDisk); + } + + /** + * This method is meant to be overriden by DistributedRegion + * and PartitionedRegions to cleanup CRITICAL state + */ + public void removeMemberFromCriticalList(DistributedMember member) { + Assert.assertTrue(false); //should not be called for LocalRegion + } + + /** + * Initialize the set of remote members whose memory state is critical. This is + * called when registering using {@link InternalResourceManager#addResourceListener(ResourceType, ResourceListener)}. + * It should only be called once and very early in this region's lifetime. + * + * @param localMemoryIsCritical true if the local memory is in a critical state + * @param critialMembers set of members whose memory is in a critical state + * @see ResourceManager#setCriticalHeapPercentage(float) and ResourceManager#setCriticalOffHeapPercentage(float) + * @since 6.0 + */ + public void initialCriticalMembers(boolean localMemoryIsCritical, + Set critialMembers) { + assert getScope().isLocal(); + if (localMemoryIsCritical) { + memoryThresholdReached.set(true); + } + } + + public void destroyRecoveredEntry(Object key) { + EntryEventImpl event = EntryEventImpl.create( + this, + Operation.LOCAL_DESTROY, key, null, null, false, getMyId(), false); + try { + event.inhibitCacheListenerNotification(true); + mapDestroy(event, true, false, null, false, true); + } finally { + event.release(); + } + } + public boolean lruLimitExceeded() { + return this.entries.lruLimitExceeded(); + } + + public DiskEntry getDiskEntry(Object key) { + // should return tombstone as an valid entry + RegionEntry re = this.entries.getEntry(key); + if (re != null && re.isRemoved() && !re.isTombstone()) { + re = null; + } + return (DiskEntry)re; + } + + /** + * Fetch the Region which stores the given key + * The resulting Region will be used for a read operation e.g. Region.get + * @param entryKey key to evaluate to determine the returned region + * @return region that stores the key + */ + public LocalRegion getDataRegionForRead(KeyInfo entryKey) { + return this; + } + + /** + * Fetch the Region which stores the given key. + * The resulting Region will be used for a write operation e.g. Region.put + * @param entryKey key to evaluate to determine the returned region + * @return region that stores the key + */ + public LocalRegion getDataRegionForWrite(KeyInfo entryKey) { + return this; + } + + /** + * + * @return a set of keys, intended for use by the various Region set operations + * such as {@link EntriesSet} + */ + Set getRegionKeysForIteration() { + return getRegionMap().keySet(); + } + + public final InternalDataView getSharedDataView() { + return this.sharedDataView; + } + + /** + * Used to bootstrap txState. + * @param key + * @return localMember for local and distributedRegions, + * member with parimary bucket for partitionedRegions + */ + public DistributedMember getOwnerForKey(KeyInfo key) { + return getMyId(); + } + + /** + * @param key + * @return the wrapped {@link KeyInfo} + */ + public KeyInfo getKeyInfo(Object key) { + return new KeyInfo(key, null, null); + } + + public KeyInfo getKeyInfo(Object key, Object callbackArg) { + return getKeyInfo(key, null, callbackArg); + } + + public KeyInfo getKeyInfo(Object key, Object value, Object callbackArg) { + return new KeyInfo(key, null, callbackArg); + } + + /** + * @see #basicGetEntry(Object) + */ + protected RegionEntry basicGetTXEntry(KeyInfo keyInfo) { + return basicGetEntry(keyInfo.getKey()); + } + + void senderCreated() + { + distributeUpdatedProfileOnSenderCreation(); + } + + /** + * @since SqlFabric + * + */ + void distributeUpdatedProfileOnHubCreation() + { + // No op + } + + void distributeUpdatedProfileOnSenderCreation() + { + // No op + } + + static class RegionPerfStats extends CachePerfStats{ + CachePerfStats cachePerfStats; + + public RegionPerfStats(GemFireCacheImpl cache, CachePerfStats superStats, String regionName) { + super(cache.getDistributedSystem(), regionName); + this.cachePerfStats = superStats; + } + + @Override + public void incReliableQueuedOps(int inc) { + stats.incInt(reliableQueuedOpsId, inc); + this.cachePerfStats.incReliableQueuedOps(inc); + } + + @Override + public void incReliableQueueSize(int inc) { + stats.incInt(reliableQueueSizeId, inc); + this.cachePerfStats.incReliableQueueSize(inc); + } + @Override + public void incReliableQueueMax(int inc) { + stats.incInt(reliableQueueMaxId, inc); + this.cachePerfStats.incReliableQueueMax(inc); + } + @Override + public void incReliableRegions(int inc) { + stats.incInt(reliableRegionsId, inc); + this.cachePerfStats.incReliableRegions(inc); + } + @Override + public void incReliableRegionsMissing(int inc) { + stats.incInt(reliableRegionsMissingId, inc); + this.cachePerfStats.incReliableRegionsMissing(inc); + } + @Override + public void incReliableRegionsQueuing(int inc) { + stats.incInt(reliableRegionsQueuingId, inc); + this.cachePerfStats.incReliableRegionsQueuing(inc); + } + + @Override + public void incReliableRegionsMissingFullAccess(int inc) { + stats.incInt(reliableRegionsMissingFullAccessId, inc); + this.cachePerfStats.incReliableRegionsMissingFullAccess(inc); + } + + @Override + public void incReliableRegionsMissingLimitedAccess(int inc) { + stats.incInt(reliableRegionsMissingLimitedAccessId, inc); + this.cachePerfStats.incReliableRegionsMissingLimitedAccess(inc); + } + + @Override + public void incReliableRegionsMissingNoAccess(int inc) { + stats.incInt(reliableRegionsMissingNoAccessId, inc); + this.cachePerfStats.incReliableRegionsMissingNoAccess(inc); + } + + @Override + public void incQueuedEvents(int inc) { + this.stats.incLong(eventsQueuedId, inc); + this.cachePerfStats.incQueuedEvents(inc); + } + + /** + * @return the timestamp that marks the start of the operation + */ + @Override + public long startLoad() { + stats.incInt(loadsInProgressId, 1); + return this.cachePerfStats.startLoad(); + //return NanoTimer.getTime(); // don't use getStatTime so always enabled + } + /** + * @param start the timestamp taken when the operation started + */ + @Override + public void endLoad(long start) { + // note that load times are used in health checks and + // should not be disabled by enableClockStats==false + long ts = NanoTimer.getTime(); // don't use getStatTime so always enabled + stats.incLong(loadTimeId, ts-start); + stats.incInt(loadsInProgressId, -1); + stats.incInt(loadsCompletedId, 1); + this.cachePerfStats.endLoad(start); //need to think about timings + } + + /** + * @return the timestamp that marks the start of the operation + */ + @Override + public long startNetload() { + stats.incInt(netloadsInProgressId, 1); + this.cachePerfStats.startNetload(); + return getStatTime(); + } + /** + * @param start the timestamp taken when the operation started + */ + @Override + public void endNetload(long start) { + if (enableClockStats) { + stats.incLong(netloadTimeId, getStatTime()-start); + } + stats.incInt(netloadsInProgressId, -1); + stats.incInt(netloadsCompletedId, 1); + this.cachePerfStats.endNetload(start); + } + + /** + * @return the timestamp that marks the start of the operation + */ + @Override + public long startNetsearch() { + stats.incInt(netsearchesInProgressId, 1); + return this.cachePerfStats.startNetsearch(); + //return NanoTimer.getTime(); // don't use getStatTime so always enabled + } + /** + * @param start the timestamp taken when the operation started + */ + @Override + public void endNetsearch(long start) { + // note that netsearch is used in health checks and timings should + // not be disabled by enableClockStats==false + long ts = NanoTimer.getTime(); // don't use getStatTime so always enabled + stats.incLong(netsearchTimeId, ts-start); + stats.incInt(netsearchesInProgressId, -1); + stats.incInt(netsearchesCompletedId, 1); + this.cachePerfStats.endNetsearch(start); + } + + /** + * @return the timestamp that marks the start of the operation + */ + @Override + public long startCacheWriterCall() { + stats.incInt(cacheWriterCallsInProgressId, 1); + this.cachePerfStats.startCacheWriterCall(); + return getStatTime(); + } + /** + * @param start the timestamp taken when the operation started + */ + @Override + public void endCacheWriterCall(long start) { + if (enableClockStats) { + stats.incLong(cacheWriterCallTimeId, getStatTime()-start); + } + stats.incInt(cacheWriterCallsInProgressId, -1); + stats.incInt(cacheWriterCallsCompletedId, 1); + this.cachePerfStats.endCacheWriterCall(start); + } + + /** + * @return the timestamp that marks the start of the operation + * @since 3.5 + */ + @Override + public long startCacheListenerCall() { + stats.incInt(cacheListenerCallsInProgressId, 1); + this.cachePerfStats.startCacheListenerCall(); + return getStatTime(); + } + /** + * @param start the timestamp taken when the operation started + * @since 3.5 + */ + @Override + public void endCacheListenerCall(long start) { + if (enableClockStats) { + stats.incLong(cacheListenerCallTimeId, getStatTime()-start); + } + stats.incInt(cacheListenerCallsInProgressId, -1); + stats.incInt(cacheListenerCallsCompletedId, 1); + this.cachePerfStats.endCacheListenerCall(start); + } + + /** + * @return the timestamp that marks the start of the operation + */ + @Override + public long startGetInitialImage() { + stats.incInt(getInitialImagesInProgressId, 1); + this.cachePerfStats.startGetInitialImage(); + return getStatTime(); + } + /** + * @param start the timestamp taken when the operation started + */ + @Override + public void endGetInitialImage(long start) { + if (enableClockStats) { + stats.incLong(getInitialImageTimeId, getStatTime()-start); + } + stats.incInt(getInitialImagesInProgressId, -1); + stats.incInt(getInitialImagesCompletedId, 1); + this.cachePerfStats.endGetInitialImage(start); + } + + /** + * @param start the timestamp taken when the operation started + */ + @Override + public void endNoGIIDone(long start) { + if (enableClockStats) { + stats.incLong(getInitialImageTimeId, getStatTime()-start); + } + stats.incInt(getInitialImagesInProgressId, -1); + this.cachePerfStats.endNoGIIDone(start); + } + + @Override + public void incGetInitialImageKeysReceived() { + stats.incInt(getInitialImageKeysReceivedId, 1); + this.cachePerfStats.incGetInitialImageKeysReceived(); + } + + @Override + public long startIndexUpdate() { + stats.incInt(indexUpdateInProgressId, 1); + this.cachePerfStats.startIndexUpdate(); + return getStatTime(); + } + @Override + public void endIndexUpdate(long start) { + long ts = getStatTime(); + stats.incLong(indexUpdateTimeId, ts-start); + stats.incInt(indexUpdateInProgressId, -1); + stats.incInt(indexUpdateCompletedId, 1); + this.cachePerfStats.endIndexUpdate(start); + } + + @Override + public void incRegions(int inc) { + stats.incInt(regionsId, inc); + this.cachePerfStats.incRegions(inc); + + } + @Override + public void incPartitionedRegions(int inc) { + stats.incInt(partitionedRegionsId, inc); + this.cachePerfStats.incPartitionedRegions(inc); + } + @Override + public void incDestroys() { + stats.incInt(destroysId, 1); + this.cachePerfStats.incDestroys(); + } + @Override + public void incCreates() { + stats.incInt(createsId, 1); + this.cachePerfStats.incCreates(); + } + @Override + public void incInvalidates() { + stats.incInt(invalidatesId, 1); + this.cachePerfStats.incInvalidates(); + } + @Override + public void incTombstoneCount(int delta) { + stats.incInt(tombstoneCountId, delta); + this.cachePerfStats.incTombstoneCount(delta); + } + @Override + public void incTombstoneGCCount() { + this.stats.incInt(tombstoneGCCountId, 1); + this.cachePerfStats.incTombstoneGCCount(); + } + @Override + public void incClearTimeouts() { + this.stats.incInt(clearTimeoutsId, 1); + this.cachePerfStats.incClearTimeouts(); + } + @Override + public void incConflatedEventsCount() { + this.stats.incLong(conflatedEventsId, 1); + this.cachePerfStats.incConflatedEventsCount(); + } + + /** + * @param start the timestamp taken when the operation started + */ + @Override + public void endGet(long start, boolean miss) { + if (enableClockStats) { + stats.incLong(getTimeId, getStatTime()-start); + } + stats.incInt(getsId, 1); + if (miss) { + stats.incInt(missesId, 1); + } + this.cachePerfStats.endGet(start, miss); + } + /** + * @param start the timestamp taken when the operation started + * @param isUpdate true if the put was an update (origin remote) + */ + @Override + public long endPut(long start, boolean isUpdate) { + long total = 0; + if (isUpdate) { + stats.incInt(updatesId, 1); + if (enableClockStats) { + total = getStatTime()-start; + stats.incLong(updateTimeId, total); + } + } else { + stats.incInt(putsId, 1); + if (enableClockStats) { + total = getStatTime()-start; + stats.incLong(putTimeId, total); + } + } + this.cachePerfStats.endPut(start, isUpdate); + return total; + } + + @Override + public void endPutAll(long start) { + stats.incInt(putallsId, 1); + if (enableClockStats) + stats.incLong(putallTimeId, getStatTime()-start); + this.cachePerfStats.endPutAll(start); + } + + @Override + public void endQueryExecution(long executionTime) { + stats.incInt(queryExecutionsId, 1); + if (enableClockStats) { + stats.incLong(queryExecutionTimeId, executionTime); + } + this.cachePerfStats.endQueryExecution(executionTime); + } + + @Override + public void endQueryResultsHashCollisionProbe(long start) { + if (enableClockStats) { + stats.incLong(queryResultsHashCollisionProbeTimeId, getStatTime() - start); + } + this.cachePerfStats.endQueryResultsHashCollisionProbe(start); + } + + @Override + public void incQueryResultsHashCollisions() { + stats.incInt(queryResultsHashCollisionsId, 1); + this.cachePerfStats.incQueryResultsHashCollisions(); + } + + @Override + public void incTxConflictCheckTime(long delta) { + stats.incLong(txConflictCheckTimeId, delta); + this.cachePerfStats.incTxConflictCheckTime(delta); + } + + @Override + public void txSuccess(long opTime, long txLifeTime, int txChanges) { + stats.incInt(txCommitsId, 1); + stats.incInt(txCommitChangesId, txChanges); + stats.incLong(txCommitTimeId, opTime); + stats.incLong(txSuccessLifeTimeId, txLifeTime); + this.cachePerfStats.txSuccess(opTime, txLifeTime, txChanges); + } + @Override + public void txFailure(long opTime, long txLifeTime, int txChanges) { + stats.incInt(txFailuresId, 1); + stats.incInt(txFailureChangesId, txChanges); + stats.incLong(txFailureTimeId, opTime); + stats.incLong(txFailedLifeTimeId, txLifeTime); + this.cachePerfStats.txFailure(opTime, txLifeTime, txChanges); + } + @Override + public void txRollback(long opTime, long txLifeTime, int txChanges) { + stats.incInt(txRollbacksId, 1); + stats.incInt(txRollbackChangesId, txChanges); + stats.incLong(txRollbackTimeId, opTime); + stats.incLong(txRollbackLifeTimeId, txLifeTime); + this.cachePerfStats.txRollback(opTime, txLifeTime, txChanges); + } + + @Override + public void incEventQueueSize(int items) { + this.stats.incInt(eventQueueSizeId, items); + this.cachePerfStats.incEventQueueSize(items); + } + + @Override + public void incEventQueueThrottleCount(int items) { + this.stats.incInt(eventQueueThrottleCountId, items); + this.cachePerfStats.incEventQueueThrottleCount(items); + } + + @Override + protected void incEventQueueThrottleTime(long nanos) { + this.stats.incLong(eventQueueThrottleTimeId, nanos); + this.cachePerfStats.incEventQueueThrottleTime(nanos); + } + + @Override + protected void incEventThreads(int items) { + this.stats.incInt(eventThreadsId, items); + this.cachePerfStats.incEventThreads(items); + } + + @Override + public void incEntryCount(int delta) { + this.stats.incLong(entryCountId, delta); + this.cachePerfStats.incEntryCount(delta); + } + + @Override + public void incRetries() { + this.stats.incInt(retriesId, 1); + this.cachePerfStats.incRetries(); + } + + @Override + public void incDiskTasksWaiting() { + this.stats.incInt(diskTasksWaitingId, 1); + this.cachePerfStats.incDiskTasksWaiting(); + } + @Override + public void decDiskTasksWaiting() { + this.stats.incInt(diskTasksWaitingId, -1); + this.cachePerfStats.decDiskTasksWaiting(); + } + @Override + public void decDiskTasksWaiting(int count) { + this.stats.incInt(diskTasksWaitingId, -count); + this.cachePerfStats.decDiskTasksWaiting(count); + } + + @Override + public void incEvictorJobsStarted() { + this.stats.incInt(evictorJobsStartedId, 1); + this.cachePerfStats.incEvictorJobsStarted(); + } + @Override + public void incEvictorJobsCompleted() { + this.stats.incInt(evictorJobsCompletedId, 1); + this.cachePerfStats.incEvictorJobsCompleted(); + } + @Override + public void incEvictorQueueSize(int delta) { + this.stats.incInt(evictorQueueSizeId, delta); + this.cachePerfStats.incEvictorQueueSize(delta); + } + @Override + public void incEvictWorkTime(long delta) { + this.stats.incLong(evictWorkTimeId, delta); + this.cachePerfStats.incEvictWorkTime(delta); + } + + @Override + public void incClearCount() { + this.stats.incInt(clearsId, 1); + this.cachePerfStats.incClearCount(); + } + + @Override + public void incPRQueryRetries() { + this.stats.incLong(partitionedRegionQueryRetriesId, 1); + this.cachePerfStats.incPRQueryRetries(); + } + + @Override + public void incNonSingleHopsCount() { + this.stats.incLong(nonSingleHopsCountId, 1); + this.cachePerfStats.incNonSingleHopsCount(); + } + + @Override + public void incMetaDataRefreshCount() { + this.stats.incLong(metaDataRefreshCountId, 1); + this.cachePerfStats.incMetaDataRefreshCount(); + } + + @Override + public void endImport(long entryCount, long start) { + stats.incLong(importedEntriesCountId, entryCount); + if (enableClockStats) { + stats.incLong(importTimeId, getStatTime() - start); + } + cachePerfStats.endImport(entryCount, start); + } + + @Override + public void endExport(long entryCount, long start) { + stats.incLong(exportedEntriesCountId, entryCount); + if (enableClockStats) { + stats.incLong(exportTimeId, getStatTime() - start); + } + cachePerfStats.endExport(entryCount, start); + } + + public long startCompression() { + stats.incLong(compressionCompressionsId, 1); + cachePerfStats.stats.incLong(compressionCompressionsId, 1); + return getStatTime(); + } + + public void endCompression(long startTime, long startSize, long endSize) { + if(enableClockStats) { + long time = getStatTime() - startTime; + stats.incLong(compressionCompressTimeId, time); + cachePerfStats.stats.incLong(compressionCompressTimeId, time); + } + + stats.incLong(compressionPreCompressedBytesId, startSize); + stats.incLong(compressionPostCompressedBytesId, endSize); + + cachePerfStats.stats.incLong(compressionPreCompressedBytesId, startSize); + cachePerfStats.stats.incLong(compressionPostCompressedBytesId, endSize); + } + + public long startDecompression() { + stats.incLong(compressionDecompressionsId, 1); + cachePerfStats.stats.incLong(compressionDecompressionsId, 1); + return getStatTime(); + } + + public void endDecompression(long startTime) { + if(enableClockStats) { + long time = getStatTime() - startTime; + stats.incLong(compressionDecompressTimeId, time); + cachePerfStats.stats.incLong(compressionDecompressTimeId, time); + } + } + } + + /** test hook - dump the backing map for this region */ + public void dumpBackingMap() { + Object sync = TombstoneService.DEBUG_TOMBSTONE_COUNT? TombstoneService.debugSync : new Object(); + synchronized(this.entries) { + synchronized(sync) { + if (this.entries instanceof AbstractRegionMap) { + ((AbstractRegionMap)(this.entries)).verifyTombstoneCount(this.tombstoneCount); + } + logger.debug("Dumping region of size {} tombstones: {}: {}", size(), getTombstoneCount(), this.toString()); + if (this.entries instanceof AbstractRegionMap) { + ((AbstractRegionMap)this.entries).dumpMap(); + } + } + } + } + + /** test hook - verify tombstone count matches what is in the entry map */ + public void verifyTombstoneCount() { + synchronized(this.entries) { + if (this.entries instanceof AbstractRegionMap) { +// if (!((AbstractRegionMap)(this.entries)).verifyTombstoneCount(this.tombstoneCount)) { +// throw new RuntimeException("tombstone count is wrong in " + this); +// } + } + } + } + + ////////////////// ConcurrentMap methods ////////////////// + + private void checkIfConcurrentMapOpsAllowed() { + // This check allows NORMAL with local scope to fix bug 44856 + if (this.srp == null && + ((this.dataPolicy == DataPolicy.NORMAL && this.scope.isDistributed()) || this.dataPolicy == DataPolicy.EMPTY)) { + // the functional spec says these data policies do not support concurrent map + // operations + throw new UnsupportedOperationException(); + } + } + /** + * If the specified key is not already associated + * with a value, associate it with the given value. + * This is equivalent to + *
+   *   if (!region.containsKey(key)) 
+   *      return region.put(key, value);
+   *   else
+   *      return region.get(key);
+   * 
+ * Except that the action is performed atomically. + * + * Note that if this method returns null then there is no way to determine + * definitely whether this operation succeeded and modified the region, or + * if the entry is in an invalidated state and no modification occurred. + * + * If this method does not modify the region then no listeners or other + * callbacks are executed. If a modification does occur, then the behavior + * with respect to callbacks is the same as {@link Region#create(Object, Object)}. + * + * @param key key with which the specified value is to be associated. + * @param value the value for the new entry, which may be null meaning + * the new entry starts as if it had been locally invalidated. + * @param callbackArgument + * @return previous value associated with specified key, or null + * if there was no mapping for key. A null return can + * also indicate that the entry in the region was previously in + * an invalidated state. + * + * @throws ClassCastException if key does not satisfy the keyConstraint + * @throws IllegalArgumentException if the key or value + * is not serializable and this is a distributed region + * @throws TimeoutException if timed out getting distributed lock for Scope.GLOBAL + * @throws NullPointerException if key is null + * @throws PartitionedRegionStorageException if the operation could not be completed. + */ + public Object putIfAbsent(Object key, Object value, Object callbackArgument) { + long startPut = CachePerfStats.getStatTime(); + + checkIfConcurrentMapOpsAllowed(); + validateArguments(key, value, callbackArgument); + // TODO ConcurrentMap.putIfAbsent() treats null as an invalidation operation + // BUT we need to return the old value, which Invalidate isn't currently doing +// if (value == null) { +// throw new NullPointerException(LocalizedStrings.LocalRegion_VALUE_MUST_NOT_BE_NULL.toLocalizedString()); +// } + checkReadiness(); + checkForLimitedOrNoAccess(); + discoverJTA(); + + // This used to call the constructor which took the old value. It + // was modified to call the other EntryEventImpl constructor so that + // an id will be generated by default. Null was passed in anyway. + // generate EventID + EntryEventImpl event = EntryEventImpl.create( + this, Operation.PUT_IF_ABSENT, key, + value, callbackArgument, false, getMyId()); + final Object oldValue = null; + final boolean ifNew = true; + final boolean ifOld = false; + final boolean requireOldValue = true; + try { + if (generateEventID()) { + event.setNewEventId(cache.getDistributedSystem()); + } + if (!basicPut(event, + ifNew, + ifOld, + oldValue, + requireOldValue + )) { + return event.getOldValue(); + } else { + if (!getDataView().isDeferredStats()) { + getCachePerfStats().endPut(startPut, false); + } + return null; + } + } catch (EntryNotFoundException e) { + return event.getOldValue(); + } finally { + event.release(); + } + } + + /* (non-Javadoc) + * @see java.util.concurrent.ConcurrentMap#putIfAbsent(java.lang.Object, java.lang.Object) + */ + public Object putIfAbsent(Object key, Object value) { + return putIfAbsent(key, value, null); + } + + /* (non-Javadoc) + * @see java.util.concurrent.ConcurrentMap#remove(java.lang.Object, java.lang.Object) + */ + public boolean remove(Object key, Object value) { + return remove(key, value, null); + } + + // @todo expand on this javadoc + /** + * Same as {@link #remove(Object, Object)} except a callback argument + * is supplied to be passed on to CacheListeners and/or + * CacheWriters. + */ + public boolean remove(Object key, Object pvalue, Object callbackArg) { + Object value = pvalue; + checkIfConcurrentMapOpsAllowed(); + validateKey(key); + validateCallbackArg(callbackArg); + checkReadiness(); + checkForLimitedOrNoAccess(); + if (value == null) { + value = Token.INVALID; + } + EntryEventImpl event = EntryEventImpl.create(this, + Operation.REMOVE, + key, + null, // newValue + callbackArg, + false, + getMyId()); + + try { + if (generateEventID() && event.getEventId() == null) { + event.setNewEventId(this.cache.getDistributedSystem()); + } + discoverJTA(); + getDataView().destroyExistingEntry(event, true, value); + } + catch (EntryNotFoundException enfe) { + return false; + } + catch (RegionDestroyedException rde) { + if (!rde.getRegionFullPath().equals(getFullPath())) { + // Handle when a bucket is destroyed + RegionDestroyedException rde2 = + new RegionDestroyedException(toString(), getFullPath()); + rde2.initCause(rde); + throw rde2; + } else { + throw rde; + } + } finally { + event.release(); + } + return true; + } + + public boolean replace(Object key, Object oldValue, Object newValue) { + return replace(key, oldValue, newValue, null); + } + + /** + * Same as {@link #replace(Object, Object, Object)} except a callback argument + * is supplied to be passed on to CacheListeners and/or + * CacheWriters. + */ + public boolean replace(Object key, + Object pexpectedOldValue, + Object newValue, + Object callbackArg) { + + checkIfConcurrentMapOpsAllowed(); + if (newValue == null) { + throw new NullPointerException(); + } + Object expectedOldValue = pexpectedOldValue; + long startPut = CachePerfStats.getStatTime(); + validateArguments(key, newValue, callbackArg); + checkReadiness(); + checkForLimitedOrNoAccess(); + EntryEventImpl event = EntryEventImpl.create(this, + Operation.REPLACE, + key, + newValue, + callbackArg, + false, // originRemote + getMyId()); + + try { + if (generateEventID()) { + event.setNewEventId(cache.getDistributedSystem()); + } + + discoverJTA(); + + // In general, expectedOldValue null is used when there is no particular + // old value expected (it can be anything). Here, however, if null + // is passed as expectedOldValue, then it specifically means that the + // oldValue must actually be null (i.e. INVALID). So here we + // change an expectedOldValue of null to the invalid token + if (expectedOldValue == null) { + expectedOldValue = Token.INVALID; + } + + if (!basicPut(event, + false, // ifNew + true, // ifOld + expectedOldValue, + false // requireOldValue + )) { + return false; + } + else { + if (!getDataView().isDeferredStats()) { + getCachePerfStats().endPut(startPut, false); + } + return true; + } + } catch (EntryNotFoundException e) { // put failed on server + return false; + } finally { + event.release(); + } + } + + public Object replace(Object key, Object value) { + return replaceWithCallbackArgument(key, value, null); + } + + /** + * Same as {@link #replace(Object, Object)} except a callback argument + * is supplied to be passed on to CacheListeners and/or + * CacheWriters. + */ + public Object replaceWithCallbackArgument(Object key, + Object value, + Object callbackArg) { + long startPut = CachePerfStats.getStatTime(); + + checkIfConcurrentMapOpsAllowed(); + + if (value == null) { + throw new NullPointerException(); + } + + validateArguments(key, value, callbackArg); + checkReadiness(); + checkForLimitedOrNoAccess(); + EntryEventImpl event = EntryEventImpl.create(this, + Operation.REPLACE, + key, + value, + callbackArg, + false, // originRemote + getMyId()); + try { + if (generateEventID()) { + event.setNewEventId(cache.getDistributedSystem()); + } + + discoverJTA(); + + if (!basicPut(event, false, // ifNew + true, // ifOld + null, // expectedOldValue + true // requireOldValue + )) { + return null; + } else { + if (!getDataView().isDeferredStats()) { + getCachePerfStats().endPut(startPut, false); + } + return event.getOldValue(); // may be null if was invalid + } + } catch (EntryNotFoundException enf) {// put failed on server + return null; + } finally { + event.release(); + } + } + + public Object basicBridgePutIfAbsent(final Object key, Object value, + boolean isObject, Object p_callbackArg, final ClientProxyMembershipID client, + boolean fromClient, EntryEventImpl clientEvent) throws TimeoutException, + EntryExistsException, CacheWriterException + { + EventID eventId = clientEvent.getEventId(); + Object callbackArg = p_callbackArg; + long startPut = CachePerfStats.getStatTime(); + if (fromClient) { + // If this region is also wan-enabled, then wrap that callback arg in a + // GatewayEventCallbackArgument to store the event id. + if(isGatewaySenderEnabled()) { + callbackArg = new GatewaySenderEventCallbackArgument(callbackArg); + } + } + final EntryEventImpl event = EntryEventImpl.create(this, Operation.PUT_IF_ABSENT, key, + null /* new value */, callbackArg, + false /* origin remote */, client.getDistributedMember(), + true /* generateCallbacks */, + eventId); + try { + event.setContext(client); + + // if this is a replayed operation we may already have a version tag + event.setVersionTag(clientEvent.getVersionTag()); + + // Set the new value to the input byte[] if it isn't null + ///* + if (value != null) { + // If the byte[] represents an object, then store it serialized + // in a CachedDeserializable; otherwise store it directly as a byte[] + if (isObject) { + // The value represents an object + event.setSerializedNewValue((byte[])value); + } + else { + // The value does not represent an object + event.setNewValue(value); + } + } + + validateArguments(key, event.basicGetNewValue(), p_callbackArg); + + boolean ifNew = true; // cannot overwrite an existing key + boolean ifOld = false; // can create a new key + boolean requireOldValue = true; // need the old value if the create fails + boolean basicPut = basicPut(event, ifNew, ifOld, null, requireOldValue); + getCachePerfStats().endPut(startPut, false); + this.stopper.checkCancelInProgress(null); + // to fix bug 42968 call getRawOldValue instead of getOldValue + Object oldValue = event.getRawOldValueAsHeapObject(); + if (oldValue == Token.NOT_AVAILABLE) { + oldValue = AbstractRegion.handleNotAvailable(oldValue); + } + if (basicPut) { + clientEvent.setVersionTag(event.getVersionTag()); + clientEvent.isConcurrencyConflict(event.isConcurrencyConflict()); + } else if (oldValue == null) { + // fix for 42189, putIfAbsent on server can return null if the + // operation was not performed (oldValue in cache was null). + // We return the INVALID token instead of null to distinguish + // this case from successful operation + return Token.INVALID; + } + return oldValue; + } finally { + event.release(); + } + } + + @Override + public Version[] getSerializationVersions() { + return null; + } + + + public boolean basicBridgeReplace(final Object key, Object expectedOldValue, + Object value, boolean isObject, Object p_callbackArg, + final ClientProxyMembershipID client, + boolean fromClient, EntryEventImpl clientEvent) throws TimeoutException, + EntryExistsException, CacheWriterException + { + EventID eventId = clientEvent.getEventId(); + Object callbackArg = p_callbackArg; + long startPut = CachePerfStats.getStatTime(); + if (fromClient) { + // If this region is also wan-enabled, then wrap that callback arg in a + // GatewayEventCallbackArgument to store the event id. + if(isGatewaySenderEnabled()) { + callbackArg = new GatewaySenderEventCallbackArgument(callbackArg); + } + } + final EntryEventImpl event = EntryEventImpl.create(this, Operation.REPLACE, key, + null /* new value */, callbackArg, + false /* origin remote */, client.getDistributedMember(), + true /* generateCallbacks */, + eventId); + try { + event.setContext(client); + + // Set the new value to the input byte[] if it isn't null + ///* + if (value != null) { + // If the byte[] represents an object, then store it serialized + // in a CachedDeserializable; otherwise store it directly as a byte[] + if (isObject) { + // The value represents an object + event.setSerializedNewValue((byte[])value); + } + else { + // The value does not represent an object + event.setNewValue(value); + } + } + + validateArguments(key, event.basicGetNewValue(), p_callbackArg); + + boolean ifNew = false; // can overwrite an existing key + boolean ifOld = true; // cannot create a new key + boolean requireOldValue = false; + boolean success = basicPut(event, ifNew, ifOld, expectedOldValue, requireOldValue); + clientEvent.isConcurrencyConflict(event.isConcurrencyConflict()); + if (success) { + clientEvent.setVersionTag(event.getVersionTag()); + } + getCachePerfStats().endPut(startPut, false); + this.stopper.checkCancelInProgress(null); + return success; + } finally { + event.release(); + } + } + + public Object basicBridgeReplace(final Object key, + Object value, boolean isObject, Object p_callbackArg, + final ClientProxyMembershipID client, + boolean fromClient, EntryEventImpl clientEvent) throws TimeoutException, + EntryExistsException, CacheWriterException + { + EventID eventId = clientEvent.getEventId(); + Object callbackArg = p_callbackArg; + long startPut = CachePerfStats.getStatTime(); + if (fromClient) { + // If this region is also wan-enabled, then wrap that callback arg in a + // GatewayEventCallbackArgument to store the event id. + if(isGatewaySenderEnabled()) { + callbackArg = new GatewaySenderEventCallbackArgument(callbackArg); + } + } + final EntryEventImpl event = EntryEventImpl.create(this, Operation.REPLACE, key, + null /* new value */, callbackArg, + false /* origin remote */, client.getDistributedMember(), + true /* generateCallbacks */, + eventId); + try { + event.setContext(client); + + // Set the new value to the input byte[] if it isn't null + ///* + if (value != null) { + // If the byte[] represents an object, then store it serialized + // in a CachedDeserializable; otherwise store it directly as a byte[] + if (isObject) { + // The value represents an object + event.setSerializedNewValue((byte[])value); + } + else { + // The value does not represent an object + event.setNewValue(value); + } + } + + validateArguments(key, event.basicGetNewValue(), p_callbackArg); + + boolean ifNew = false; // can overwrite an existing key + boolean ifOld = true; // cannot create a new key + boolean requireOldValue = true; + boolean succeeded = basicPut(event, ifNew, ifOld, null, requireOldValue); + getCachePerfStats().endPut(startPut, false); + this.stopper.checkCancelInProgress(null); + clientEvent.isConcurrencyConflict(event.isConcurrencyConflict()); + if (succeeded) { + clientEvent.setVersionTag(event.getVersionTag()); + // to fix bug 42968 call getRawOldValue instead of getOldValue + Object oldValue = event.getRawOldValueAsHeapObject(); + if (oldValue == Token.NOT_AVAILABLE) { + oldValue = AbstractRegion.handleNotAvailable(oldValue); + } + if (oldValue == null) { // EntryEventImpl.setOldValue translates INVALID to null + oldValue = Token.INVALID; + } + return oldValue; + } else { + return null; + } + } finally { + event.release(); + } + } + + public void basicBridgeRemove(Object key, Object expectedOldValue, + Object p_callbackArg, + ClientProxyMembershipID memberId, boolean fromClient, EntryEventImpl clientEvent) + throws TimeoutException, EntryNotFoundException, CacheWriterException + { + Object callbackArg = p_callbackArg; + if (fromClient) { + // If this region is also wan-enabled, then wrap that callback arg in a + // GatewayEventCallbackArgument to store the event id. + if(isGatewaySenderEnabled()) { + callbackArg = new GatewaySenderEventCallbackArgument(callbackArg); + } + } + + // Create an event and put the entry + final EntryEventImpl event = EntryEventImpl.create(this, Operation.REMOVE, key, + null /* new value */, callbackArg, + false /* origin remote */, memberId.getDistributedMember(), + true /* generateCallbacks */, + clientEvent.getEventId()); + try { + event.setContext(memberId); + // we rely on exceptions to tell us that the operation didn't take + // place. AbstractRegionMap performs the checks and throws the exception + try { + basicDestroy(event, + true, // cacheWrite + expectedOldValue); + } finally { + clientEvent.setVersionTag(event.getVersionTag()); + clientEvent.setIsRedestroyedEntry(event.getIsRedestroyedEntry()); + } + } finally { + event.release(); + } + } + + /* (non-Javadoc) + * @see com.gemstone.gemfire.internal.cache.DiskRecoveryStore#getVersionForMember(com.gemstone.gemfire.internal.cache.versions.VersionSource) + */ + @Override + public long getVersionForMember(VersionSource member) { + throw new IllegalStateException("Operation only implemented for disk region"); + } + + /** + * Return an IndexMap that is persisted to the disk store used + * by this region. + * + * This IndexMap should be used as the backing map for any + * regions that are using the Soplog persistence. + * + * Calling this method may create a branch new index map on disk, + * or it may recover an index map that was previously persisted, depending + * on whether the index previously existed. + * + * @param indexName the name of the index + * @param indexedExpression the index expression + * @param fromClause the from clause. + * + * @return The index map. + * + * @throws IllegalStateException if this region is not using + * soplog persistence + * + * @throws IllegalStateException if this index was previously + * persisted with a different expression or from clause. + * + */ + public IndexMap getIndexMap(String indexName, String indexedExpression, + String fromClause) { + return new IndexMapImpl(); + } + + /** + * Return an IndexMap that is persisted to the disk store used + * by this region. This method returns map that might not support + * range queries. + * + * This IndexMap should be used as the backing map for any + * regions that are using the Soplog persistence. + * + * Calling this method may create a branch new index map on disk, + * or it may recover an index map that was previously persisted, depending + * on whether the index previously existed. + * + * @param indexName the name of the index + * @param indexedExpression the index expression + * @param fromClause the from clause. + * + * @return The index map. + * + * @throws IllegalStateException if this region is not using + * soplog persistence + * + * @throws IllegalStateException if this index was previously + * persisted with a different expression or from clause. + * + */ + public IndexMap getUnsortedIndexMap(String indexName, String indexedExpression, + String fromClause) { + return new IndexMapImpl(); + } + ////////////////// End of ConcurrentMap methods ////////////////// + + public void setInUseByTransaction(boolean v) { + synchronized (this.regionExpiryLock) { + if (v) { + this.txRefCount++; + } else { + this.txRefCount--; + assert this.txRefCount >= 0; + if (this.txRefCount == 0) { + if (this.regionTTLExpiryTask == null && this.regionTimeToLive > 0) { + this.addTTLExpiryTask(); + } + if (this.regionIdleExpiryTask == null && this.regionIdleTimeout > 0) { + this.addIdleExpiryTask(); + } + } + } + } + } + + /** + * Return true if the region expiry task should be rescheduled + */ + public boolean expireRegion(RegionExpiryTask regionExpiryTask, boolean distributed, boolean destroy) { + synchronized (this.regionExpiryLock) { + if (regionExpiryTask instanceof RegionTTLExpiryTask) { + if (regionExpiryTask != this.regionTTLExpiryTask) { + // We must be an old task so defer to the currently scheduled one + return false; + } else { + this.regionTTLExpiryTask = null; + } + } else { + if (regionExpiryTask != this.regionIdleExpiryTask) { + // We must be an old task so defer to the currently scheduled one + return false; + } else { + this.regionIdleExpiryTask = null; + } + } + if (this.txRefCount > 0) { + return false; + } + } + { // release the sync before doing the operation to prevent deadlock caused by r48875 + Operation op = destroy ? (distributed ? Operation.REGION_EXPIRE_DESTROY : Operation.REGION_EXPIRE_LOCAL_DESTROY) + : (distributed ? Operation.REGION_EXPIRE_INVALIDATE : Operation.REGION_EXPIRE_LOCAL_INVALIDATE); + RegionEventImpl event = new RegionEventImpl(this, op, null, false, getMyId(), generateEventID()); + if (destroy) { + basicDestroyRegion(event, distributed); + } else { + basicInvalidateRegion(event); + } + return true; + } + } + private boolean isTest = false; + protected static boolean simulateClearForTests = false; + + private AtomicInteger countNotFoundInLocal = null; + public void setIsTest() { + isTest = true; + countNotFoundInLocal = new AtomicInteger(); + } + public boolean isTest() { + return isTest; + } + public void incCountNotFoundInLocal() { + countNotFoundInLocal.incrementAndGet(); + } + + public Integer getCountNotFoundInLocal() { + return countNotFoundInLocal.get(); + } + /// End of Variables and methods for test Hook for HDFS /////// + public void forceHDFSCompaction(boolean isMajor, Integer maxWaitTime) { + throw new UnsupportedOperationException( + LocalizedStrings.HOPLOG_DOES_NOT_USE_HDFSSTORE + .toLocalizedString(getName())); + } + + public void flushHDFSQueue(int maxWaitTime) { + throw new UnsupportedOperationException( + LocalizedStrings.HOPLOG_DOES_NOT_USE_HDFSSTORE + .toLocalizedString(getName())); + } + + public long lastMajorHDFSCompaction() { + throw new UnsupportedOperationException(); + } + + public static void simulateClearForTests(boolean flag) { + simulateClearForTests = flag; + + } + +} diff --git a/gemfire-core/src/main/java/com/gemstone/gemfire/internal/cache/PartitionedRegion.java b/gemfire-core/src/main/java/com/gemstone/gemfire/internal/cache/PartitionedRegion.java new file mode 100755 index 000000000000..89e2533f7f38 --- /dev/null +++ b/gemfire-core/src/main/java/com/gemstone/gemfire/internal/cache/PartitionedRegion.java @@ -0,0 +1,11393 @@ +/* + * 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 com.gemstone.gemfire.internal.cache; + +import java.io.IOException; +import java.io.InputStream; +import java.io.OutputStream; +import java.io.Serializable; +import java.util.ArrayList; +import java.util.Collection; +import java.util.Collections; +import java.util.Comparator; +import java.util.HashMap; +import java.util.HashSet; +import java.util.Hashtable; +import java.util.Iterator; +import java.util.LinkedList; +import java.util.List; +import java.util.Map; +import java.util.NoSuchElementException; +import java.util.Random; +import java.util.Set; +import java.util.concurrent.Callable; +import java.util.concurrent.ConcurrentHashMap; +import java.util.concurrent.ConcurrentMap; +import java.util.concurrent.CopyOnWriteArrayList; +import java.util.concurrent.ExecutionException; +import java.util.concurrent.Executors; +import java.util.concurrent.Future; +import java.util.concurrent.FutureTask; +import java.util.concurrent.ScheduledExecutorService; +import java.util.concurrent.ThreadFactory; +import java.util.concurrent.TimeUnit; +import java.util.concurrent.atomic.AtomicBoolean; +import java.util.concurrent.atomic.AtomicInteger; +import java.util.concurrent.locks.Lock; + +import org.apache.logging.log4j.Logger; + +import com.gemstone.gemfire.CancelException; +import com.gemstone.gemfire.InternalGemFireException; +import com.gemstone.gemfire.StatisticsFactory; +import com.gemstone.gemfire.SystemFailure; +import com.gemstone.gemfire.cache.AttributesFactory; +import com.gemstone.gemfire.cache.AttributesMutator; +import com.gemstone.gemfire.cache.Cache; +import com.gemstone.gemfire.cache.CacheClosedException; +import com.gemstone.gemfire.cache.CacheException; +import com.gemstone.gemfire.cache.CacheListener; +import com.gemstone.gemfire.cache.CacheLoader; +import com.gemstone.gemfire.cache.CacheLoaderException; +import com.gemstone.gemfire.cache.CacheStatistics; +import com.gemstone.gemfire.cache.CacheWriter; +import com.gemstone.gemfire.cache.CacheWriterException; +import com.gemstone.gemfire.cache.CustomExpiry; +import com.gemstone.gemfire.cache.DataPolicy; +import com.gemstone.gemfire.cache.DiskAccessException; +import com.gemstone.gemfire.cache.EntryExistsException; +import com.gemstone.gemfire.cache.EntryNotFoundException; +import com.gemstone.gemfire.cache.ExpirationAttributes; +import com.gemstone.gemfire.cache.InterestPolicy; +import com.gemstone.gemfire.cache.InterestRegistrationEvent; +import com.gemstone.gemfire.cache.LoaderHelper; +import com.gemstone.gemfire.cache.LowMemoryException; +import com.gemstone.gemfire.cache.Operation; +import com.gemstone.gemfire.cache.PartitionAttributes; +import com.gemstone.gemfire.cache.PartitionResolver; +import com.gemstone.gemfire.cache.PartitionedRegionDistributionException; +import com.gemstone.gemfire.cache.PartitionedRegionStorageException; +import com.gemstone.gemfire.cache.Region; +import com.gemstone.gemfire.cache.RegionAttributes; +import com.gemstone.gemfire.cache.RegionDestroyedException; +import com.gemstone.gemfire.cache.RegionEvent; +import com.gemstone.gemfire.cache.RegionExistsException; +import com.gemstone.gemfire.cache.RegionMembershipListener; +import com.gemstone.gemfire.cache.TimeoutException; +import com.gemstone.gemfire.cache.TransactionDataNotColocatedException; +import com.gemstone.gemfire.cache.TransactionDataRebalancedException; +import com.gemstone.gemfire.cache.TransactionException; +import com.gemstone.gemfire.cache.asyncqueue.internal.AsyncEventQueueImpl; +import com.gemstone.gemfire.cache.asyncqueue.internal.AsyncEventQueueStats; +import com.gemstone.gemfire.cache.execute.EmtpyRegionFunctionException; +import com.gemstone.gemfire.cache.execute.Function; +import com.gemstone.gemfire.cache.execute.FunctionContext; +import com.gemstone.gemfire.cache.execute.FunctionException; +import com.gemstone.gemfire.cache.execute.FunctionService; +import com.gemstone.gemfire.cache.execute.ResultCollector; +import com.gemstone.gemfire.cache.hdfs.internal.HDFSStoreFactoryImpl; +import com.gemstone.gemfire.cache.hdfs.internal.hoplog.CompactionStatus; +import com.gemstone.gemfire.cache.hdfs.internal.hoplog.HDFSFlushQueueFunction; +import com.gemstone.gemfire.cache.hdfs.internal.hoplog.HDFSForceCompactionArgs; +import com.gemstone.gemfire.cache.hdfs.internal.hoplog.HDFSForceCompactionFunction; +import com.gemstone.gemfire.cache.hdfs.internal.hoplog.HDFSForceCompactionResultCollector; +import com.gemstone.gemfire.cache.hdfs.internal.hoplog.HDFSLastCompactionTimeFunction; +import com.gemstone.gemfire.cache.hdfs.internal.hoplog.HDFSRegionDirector; +import com.gemstone.gemfire.cache.hdfs.internal.hoplog.HoplogOrganizer; +import com.gemstone.gemfire.cache.partition.PartitionListener; +import com.gemstone.gemfire.cache.partition.PartitionNotAvailableException; +import com.gemstone.gemfire.cache.query.FunctionDomainException; +import com.gemstone.gemfire.cache.query.Index; +import com.gemstone.gemfire.cache.query.IndexCreationException; +import com.gemstone.gemfire.cache.query.IndexExistsException; +import com.gemstone.gemfire.cache.query.IndexInvalidException; +import com.gemstone.gemfire.cache.query.IndexNameConflictException; +import com.gemstone.gemfire.cache.query.IndexType; +import com.gemstone.gemfire.cache.query.MultiIndexCreationException; +import com.gemstone.gemfire.cache.query.NameResolutionException; +import com.gemstone.gemfire.cache.query.QueryException; +import com.gemstone.gemfire.cache.query.QueryInvocationTargetException; +import com.gemstone.gemfire.cache.query.SelectResults; +import com.gemstone.gemfire.cache.query.TypeMismatchException; +import com.gemstone.gemfire.cache.query.internal.CompiledSelect; +import com.gemstone.gemfire.cache.query.internal.DefaultQuery; +import com.gemstone.gemfire.cache.query.internal.ExecutionContext; +import com.gemstone.gemfire.cache.query.internal.QCompiler; +import com.gemstone.gemfire.cache.query.internal.QueryExecutor; +import com.gemstone.gemfire.cache.query.internal.ResultsBag; +import com.gemstone.gemfire.cache.query.internal.ResultsCollectionWrapper; +import com.gemstone.gemfire.cache.query.internal.ResultsSet; +import com.gemstone.gemfire.cache.query.internal.index.AbstractIndex; +import com.gemstone.gemfire.cache.query.internal.index.IndexCreationData; +import com.gemstone.gemfire.cache.query.internal.index.IndexManager; +import com.gemstone.gemfire.cache.query.internal.index.IndexUtils; +import com.gemstone.gemfire.cache.query.internal.index.PartitionedIndex; +import com.gemstone.gemfire.cache.query.internal.types.ObjectTypeImpl; +import com.gemstone.gemfire.cache.query.types.ObjectType; +import com.gemstone.gemfire.cache.wan.GatewaySender; +import com.gemstone.gemfire.distributed.DistributedLockService; +import com.gemstone.gemfire.distributed.DistributedMember; +import com.gemstone.gemfire.distributed.LockServiceDestroyedException; +import com.gemstone.gemfire.distributed.internal.DM; +import com.gemstone.gemfire.distributed.internal.DistributionAdvisee; +import com.gemstone.gemfire.distributed.internal.DistributionAdvisor; +import com.gemstone.gemfire.distributed.internal.DistributionAdvisor.Profile; +import com.gemstone.gemfire.distributed.internal.DistributionManager; +import com.gemstone.gemfire.distributed.internal.InternalDistributedSystem; +import com.gemstone.gemfire.distributed.internal.InternalDistributedSystem.DisconnectListener; +import com.gemstone.gemfire.distributed.internal.MembershipListener; +import com.gemstone.gemfire.distributed.internal.ProfileListener; +import com.gemstone.gemfire.distributed.internal.ReplyException; +import com.gemstone.gemfire.distributed.internal.ReplyProcessor21; +import com.gemstone.gemfire.distributed.internal.locks.DLockRemoteToken; +import com.gemstone.gemfire.distributed.internal.locks.DLockService; +import com.gemstone.gemfire.distributed.internal.membership.InternalDistributedMember; +import com.gemstone.gemfire.distributed.internal.membership.MemberAttributes; +import com.gemstone.gemfire.internal.Assert; +import com.gemstone.gemfire.internal.NanoTimer; +import com.gemstone.gemfire.internal.SetUtils; +import com.gemstone.gemfire.internal.Version; +import com.gemstone.gemfire.internal.cache.BucketAdvisor.ServerBucketProfile; +import com.gemstone.gemfire.internal.cache.CacheDistributionAdvisor.CacheProfile; +import com.gemstone.gemfire.internal.cache.DestroyPartitionedRegionMessage.DestroyPartitionedRegionResponse; +import com.gemstone.gemfire.internal.cache.PutAllPartialResultException.PutAllPartialResult; +import com.gemstone.gemfire.internal.cache.control.HeapMemoryMonitor; +import com.gemstone.gemfire.internal.cache.control.InternalResourceManager; +import com.gemstone.gemfire.internal.cache.control.InternalResourceManager.ResourceType; +import com.gemstone.gemfire.internal.cache.control.MemoryEvent; +import com.gemstone.gemfire.internal.cache.control.MemoryThresholds; +import com.gemstone.gemfire.internal.cache.execute.AbstractExecution; +import com.gemstone.gemfire.internal.cache.execute.FunctionExecutionNodePruner; +import com.gemstone.gemfire.internal.cache.execute.FunctionRemoteContext; +import com.gemstone.gemfire.internal.cache.execute.InternalFunctionInvocationTargetException; +import com.gemstone.gemfire.internal.cache.execute.LocalResultCollector; +import com.gemstone.gemfire.internal.cache.execute.PartitionedRegionFunctionExecutor; +import com.gemstone.gemfire.internal.cache.execute.PartitionedRegionFunctionResultSender; +import com.gemstone.gemfire.internal.cache.execute.PartitionedRegionFunctionResultWaiter; +import com.gemstone.gemfire.internal.cache.execute.RegionFunctionContextImpl; +import com.gemstone.gemfire.internal.cache.execute.ServerToClientFunctionResultSender; +import com.gemstone.gemfire.internal.cache.ha.ThreadIdentifier; +import com.gemstone.gemfire.internal.cache.lru.HeapEvictor; +import com.gemstone.gemfire.internal.cache.lru.LRUStatistics; +import com.gemstone.gemfire.internal.cache.partitioned.ContainsKeyValueMessage; +import com.gemstone.gemfire.internal.cache.partitioned.ContainsKeyValueMessage.ContainsKeyValueResponse; +import com.gemstone.gemfire.internal.cache.partitioned.DestroyMessage; +import com.gemstone.gemfire.internal.cache.partitioned.DestroyMessage.DestroyResponse; +import com.gemstone.gemfire.internal.cache.partitioned.DestroyRegionOnDataStoreMessage; +import com.gemstone.gemfire.internal.cache.partitioned.DumpAllPRConfigMessage; +import com.gemstone.gemfire.internal.cache.partitioned.DumpB2NRegion; +import com.gemstone.gemfire.internal.cache.partitioned.DumpB2NRegion.DumpB2NResponse; +import com.gemstone.gemfire.internal.cache.partitioned.DumpBucketsMessage; +import com.gemstone.gemfire.internal.cache.partitioned.FetchBulkEntriesMessage; +import com.gemstone.gemfire.internal.cache.partitioned.FetchBulkEntriesMessage.FetchBulkEntriesResponse; +import com.gemstone.gemfire.internal.cache.partitioned.FetchEntriesMessage; +import com.gemstone.gemfire.internal.cache.partitioned.FetchEntriesMessage.FetchEntriesResponse; +import com.gemstone.gemfire.internal.cache.partitioned.FetchEntryMessage; +import com.gemstone.gemfire.internal.cache.partitioned.FetchEntryMessage.FetchEntryResponse; +import com.gemstone.gemfire.internal.cache.partitioned.FetchKeysMessage; +import com.gemstone.gemfire.internal.cache.partitioned.FetchKeysMessage.FetchKeysResponse; +import com.gemstone.gemfire.internal.cache.partitioned.GetMessage; +import com.gemstone.gemfire.internal.cache.partitioned.GetMessage.GetResponse; +import com.gemstone.gemfire.internal.cache.partitioned.IdentityRequestMessage; +import com.gemstone.gemfire.internal.cache.partitioned.IdentityRequestMessage.IdentityResponse; +import com.gemstone.gemfire.internal.cache.partitioned.IdentityUpdateMessage; +import com.gemstone.gemfire.internal.cache.partitioned.IdentityUpdateMessage.IdentityUpdateResponse; +import com.gemstone.gemfire.internal.cache.partitioned.IndexCreationMsg; +import com.gemstone.gemfire.internal.cache.partitioned.InterestEventMessage; +import com.gemstone.gemfire.internal.cache.partitioned.InterestEventMessage.InterestEventResponse; +import com.gemstone.gemfire.internal.cache.partitioned.InvalidateMessage; +import com.gemstone.gemfire.internal.cache.partitioned.InvalidateMessage.InvalidateResponse; +import com.gemstone.gemfire.internal.cache.partitioned.PREntriesIterator; +import com.gemstone.gemfire.internal.cache.partitioned.PRLocallyDestroyedException; +import com.gemstone.gemfire.internal.cache.partitioned.PRSanityCheckMessage; +import com.gemstone.gemfire.internal.cache.partitioned.PRUpdateEntryVersionMessage; +import com.gemstone.gemfire.internal.cache.partitioned.PRUpdateEntryVersionMessage.UpdateEntryVersionResponse; +import com.gemstone.gemfire.internal.cache.partitioned.PartitionMessage.PartitionResponse; +import com.gemstone.gemfire.internal.cache.partitioned.PartitionedRegionObserver; +import com.gemstone.gemfire.internal.cache.partitioned.PartitionedRegionObserverHolder; +import com.gemstone.gemfire.internal.cache.partitioned.PutAllPRMessage; +import com.gemstone.gemfire.internal.cache.partitioned.PutMessage; +import com.gemstone.gemfire.internal.cache.partitioned.PutMessage.PutResult; +import com.gemstone.gemfire.internal.cache.partitioned.RegionAdvisor; +import com.gemstone.gemfire.internal.cache.partitioned.RegionAdvisor.BucketVisitor; +import com.gemstone.gemfire.internal.cache.partitioned.RegionAdvisor.PartitionProfile; +import com.gemstone.gemfire.internal.cache.partitioned.RemoveAllPRMessage; +import com.gemstone.gemfire.internal.cache.partitioned.RemoveIndexesMessage; +import com.gemstone.gemfire.internal.cache.partitioned.SizeMessage; +import com.gemstone.gemfire.internal.cache.partitioned.SizeMessage.SizeResponse; +import com.gemstone.gemfire.internal.cache.persistence.PRPersistentConfig; +import com.gemstone.gemfire.internal.cache.tier.InterestType; +import com.gemstone.gemfire.internal.cache.tier.sockets.BaseCommand; +import com.gemstone.gemfire.internal.cache.tier.sockets.ClientProxyMembershipID; +import com.gemstone.gemfire.internal.cache.tier.sockets.ServerConnection; +import com.gemstone.gemfire.internal.cache.tier.sockets.VersionedObjectList; +import com.gemstone.gemfire.internal.cache.tier.sockets.command.Get70; +import com.gemstone.gemfire.internal.cache.versions.ConcurrentCacheModificationException; +import com.gemstone.gemfire.internal.cache.versions.RegionVersionVector; +import com.gemstone.gemfire.internal.cache.versions.VersionStamp; +import com.gemstone.gemfire.internal.cache.versions.VersionTag; +import com.gemstone.gemfire.internal.cache.wan.AbstractGatewaySender; +import com.gemstone.gemfire.internal.cache.wan.AbstractGatewaySenderEventProcessor; +import com.gemstone.gemfire.internal.cache.wan.GatewaySenderConfigurationException; +import com.gemstone.gemfire.internal.cache.wan.GatewaySenderException; +import com.gemstone.gemfire.internal.cache.wan.parallel.ConcurrentParallelGatewaySenderQueue; +import com.gemstone.gemfire.internal.cache.wan.parallel.ParallelGatewaySenderQueue; +import com.gemstone.gemfire.internal.i18n.LocalizedStrings; +import com.gemstone.gemfire.internal.logging.LogService; +import com.gemstone.gemfire.internal.logging.LoggingThreadGroup; +import com.gemstone.gemfire.internal.logging.log4j.LocalizedMessage; +import com.gemstone.gemfire.internal.logging.log4j.LogMarker; +import com.gemstone.gemfire.internal.offheap.Chunk; +import com.gemstone.gemfire.internal.offheap.annotations.Unretained; +import com.gemstone.gemfire.internal.sequencelog.RegionLogger; +import com.gemstone.gemfire.internal.util.TransformUtils; +import com.gemstone.gemfire.internal.util.concurrent.FutureResult; +import com.gemstone.gemfire.internal.util.concurrent.StoppableCountDownLatch; +import com.gemstone.gemfire.i18n.StringId; + +/** + * A Region whose total storage is split into chunks of data (partitions) which + * are copied up to a configurable level (for high availability) and placed on + * multiple VMs for improved performance and increased storage capacity. + * + */ +public class PartitionedRegion extends LocalRegion implements + CacheDistributionAdvisee, QueryExecutor { + + public static final Random rand = new Random(Long.getLong( + "gemfire.PartitionedRegionRandomSeed", NanoTimer.getTime()).longValue()); + + private static final AtomicInteger SERIAL_NUMBER_GENERATOR = new AtomicInteger(); + + private final DiskRegionStats diskRegionStats; + /** + * Changes scope of replication to secondary bucket to SCOPE.DISTRIBUTED_NO_ACK + */ + public static final boolean DISABLE_SECONDARY_BUCKET_ACK = Boolean.getBoolean( + "gemfire.disablePartitionedRegionBucketAck"); + + /** + * A debug flag used for testing calculation of starting bucket id + */ + public static boolean BEFORE_CALCULATE_STARTING_BUCKET_FLAG = false; + + /** + * Thread specific random number + */ + private static ThreadLocal threadRandom = new ThreadLocal() { + @Override + protected Object initialValue() { + int i = rand.nextInt(); + if (i < 0) { + i = -1 * i; + } + return Integer.valueOf(i); + } + }; + + /** + * Global Region for storing PR config ( PRName->PRConfig). This region would + * be used to resolve PR name conflict.* + */ + private volatile Region prRoot; + + /** + * + * PartitionedRegionDataStore class takes care of data storage for the PR. + * This will contain the bucket Regions to store data entries for PR* + */ + protected PartitionedRegionDataStore dataStore; + + /** + * The advisor that hold information about this partitioned region + */ + private final RegionAdvisor distAdvisor; + + /** Logging mechanism for debugging */ + private static final Logger logger = LogService.getLogger(); + + /** cleanup flags * */ + private boolean cleanPRRegistration = false; + + /** Time to wait for for acquiring distributed lock ownership */ + final static long VM_OWNERSHIP_WAIT_TIME = PRSystemPropertyGetter + .parseLong( + System + .getProperty(PartitionedRegionHelper.VM_OWNERSHIP_WAIT_TIME_PROPERTY), + PartitionedRegionHelper.VM_OWNERSHIP_WAIT_TIME_DEFAULT); + + /** + * default redundancy level is 0. + */ + final int redundantCopies; + + /** + * The miminum amount of redundancy needed for a write operation + */ + final int minimumWriteRedundancy; + + /** + * The miminum amount of redundancy needed for a read operation + */ + final int minimumReadRedundancy; + + /** + * Ratio of currently allocated memory to maxMemory that triggers rebalance + * activity. + */ + final static float rebalanceThreshold = 0.75f; + + /** The maximum memory allocated for this node in Mb */ + final int localMaxMemory; + + /** The maximum milliseconds for retrying operations */ + final private int retryTimeout; + + /** + * The statistics for this PR + */ + public final PartitionedRegionStats prStats; + + // private Random random = new Random(System.currentTimeMillis()); + + /** Number of initial buckets */ + private final int totalNumberOfBuckets; + + /** + * To check if local cache is enabled. + */ + private static final boolean localCacheEnabled = false; + + // private static final boolean throwIfNoNodesLeft = true; + + public static final int DEFAULT_RETRY_ITERATIONS = 3; + + /** + * Flag to indicate if a cache loader is present + */ + private volatile boolean haveCacheLoader; + + /** + * Region identifier used for DLocks (Bucket and Region) + */ + private final String regionIdentifier; + + /** + * Maps each PR to a prId. This prId will uniquely identify the PR. + */ + static final PRIdMap prIdToPR = new PRIdMap(); + + /** + * Flag to indicate whether region is closed + * + */ + public volatile boolean isClosed = false; + + /** + * a flag indicating that the PR is destroyed in this VM + */ + public volatile boolean isLocallyDestroyed = false; + + /** + * the thread locally destroying this pr. not volatile, + * so always check isLocallyDestroyed before checking locallyDestroyingThread + * + * Concurrency: {@link #isLocallyDestroyed} is volatile + */ + public Thread locallyDestroyingThread; + + // TODO someone please add a javadoc for this + private volatile boolean hasPartitionedIndex = false; + + /** + * regionMembershipListener notification requires this to be plugged into + * a PR's RegionAdvisor + */ + private final AdvisorListener advisorListener = new AdvisorListener(); + + /* + * Map containing or Index>. + * IndexTask represents an index thats completely created or + * one thats in create phase. This is done in order to avoid + * synchronization on the indexes. + */ + private final ConcurrentMap indexes = new ConcurrentHashMap(); + + private volatile boolean recoveredFromDisk; + + public static final int RUNNING_MODE = -1; + public static final int PRIMARY_BUCKETS_LOCKED = 1; + public static final int DISK_STORE_FLUSHED = 2; + public static final int OFFLINE_EQUAL_PERSISTED = 3; + + private volatile int shutDownAllStatus = RUNNING_MODE; + + private final long birthTime = System.currentTimeMillis(); + + public void setShutDownAllStatus(int newStatus) { + this.shutDownAllStatus = newStatus; + } + + private final PartitionedRegion colocatedWithRegion; + + private List sortedBuckets; + + private ScheduledExecutorService bucketSorter; + + private ConcurrentMap partitionsMap = new ConcurrentHashMap(); + + public ConcurrentMap getPartitionsMap() { + return this.partitionsMap; + } + /** + * for wan shadowPR + */ + private boolean enableConflation; + + private final Object indexLock = new Object(); + + /** + * Byte 0 = no NWHOP Byte 1 = NWHOP to servers in same server-grp Byte 2 = + * NWHOP tp servers in other server-grp + */ + private final ThreadLocal isNetworkHop = new ThreadLocal() { + @Override + protected Byte initialValue() { + return Byte.valueOf((byte)0); + } + }; + + public void setIsNetworkHop(Byte value) { + this.isNetworkHop.set(value); + } + + public Byte isNetworkHop() { + return this.isNetworkHop.get(); + } + + private final ThreadLocal metadataVersion = new ThreadLocal() { + @Override + protected Byte initialValue() { + return 0; + } + }; + + public void setMetadataVersion(Byte value) { + this.metadataVersion.set(value); + } + + public Byte getMetadataVersion() { + return this.metadataVersion.get(); + } + + + /** + * Returns the LRUStatistics for this PR. + * This is needed to find the single instance of LRUStatistics + * created early for a PR when it is recovered from disk. + * This fixes bug 41938 + */ + public LRUStatistics getPRLRUStatsDuringInitialization() { + LRUStatistics result = null; + if (getDiskStore() != null) { + result = getDiskStore().getPRLRUStats(this); + } + return result; + } + + + ////////////////// ConcurrentMap methods ////////////////// + + @Override + public boolean remove(Object key, Object value, Object callbackArg) { + final long startTime = PartitionedRegionStats.startTime(); + try { + return super.remove(key, value, callbackArg); + } + finally { + this.prStats.endDestroy(startTime); + } + } + + + + ////////////////// End of ConcurrentMap methods ////////////////// + + + public PartitionListener[] getPartitionListeners() { + return this.partitionListeners; + } + + /** + * Return canonical representation for a bucket (for logging) + * + * @param bucketId + * the bucket + * @return a String representing this PR and the bucket + */ + public String bucketStringForLogs(int bucketId) { + return getPRId() + BUCKET_ID_SEPARATOR + bucketId; + } + + /** Separator between PRId and bucketId for creating bucketString */ + public static final String BUCKET_ID_SEPARATOR = ":"; + + /** + * Clear the prIdMap, typically used when disconnecting from the distributed + * system or clearing the cache + */ + public static void clearPRIdMap() { + synchronized (prIdToPR) { + prIdToPR.clear(); + } + } + + private static DisconnectListener dsPRIdCleanUpListener = new DisconnectListener() { + @Override + public String toString() { + return LocalizedStrings.PartitionedRegion_SHUTDOWN_LISTENER_FOR_PARTITIONEDREGION.toLocalizedString(); + } + + public void onDisconnect(InternalDistributedSystem sys) { + clearPRIdMap(); + } + }; + + + public static class PRIdMap extends HashMap { + private static final long serialVersionUID = 3667357372967498179L; + public final static String DESTROYED = "Partitioned Region Destroyed"; + + final static String LOCALLY_DESTROYED = "Partitioned Region Is Locally Destroyed"; + + final static String FAILED_REGISTRATION = "Partitioned Region's Registration Failed"; + + public final static String NO_PATH_FOUND = "NoPathFound"; + + private volatile boolean cleared = true; + + @Override + public Object get(Object key) { + throw new UnsupportedOperationException(LocalizedStrings.PartitionedRegion_PRIDMAPGET_NOT_SUPPORTED_USE_GETREGION_INSTEAD.toLocalizedString()); + } + + public Object getRegion(Object key) throws PRLocallyDestroyedException { + if (cleared) { + Cache c = GemFireCacheImpl.getInstance(); + if (c == null) { + throw new CacheClosedException(); + } + else { + c.getCancelCriterion().checkCancelInProgress(null); + } + } + Assert.assertTrue(key instanceof Integer); + + Object o = super.get(key); + if (o == DESTROYED) { + throw new RegionDestroyedException(LocalizedStrings.PartitionedRegion_REGION_FOR_PRID_0_IS_DESTROYED.toLocalizedString(key), NO_PATH_FOUND); + } + if (o == LOCALLY_DESTROYED) { + throw new PRLocallyDestroyedException(LocalizedStrings.PartitionedRegion_REGION_WITH_PRID_0_IS_LOCALLY_DESTROYED_ON_THIS_NODE.toLocalizedString(key)); + } + if (o == FAILED_REGISTRATION) { + throw new PRLocallyDestroyedException(LocalizedStrings.PartitionedRegion_REGION_WITH_PRID_0_FAILED_INITIALIZATION_ON_THIS_NODE.toLocalizedString(key)); + } + return o; + } + + @Override + public Object remove(final Object key) { + return put(key, DESTROYED, true); + } + + @Override + public Object put(final Object key, final Object value) { + return put(key, value, true); + } + + public Object put(final Object key, final Object value, + boolean sendIdentityRequestMessage) { + if (cleared) { + cleared = false; + } + + if (key == null) { + throw new NullPointerException(LocalizedStrings.PartitionedRegion_NULL_KEY_NOT_ALLOWED_FOR_PRIDTOPR_MAP.toLocalizedString()); + } + if (value == null) { + throw new NullPointerException(LocalizedStrings.PartitionedRegion_NULL_VALUE_NOT_ALLOWED_FOR_PRIDTOPR_MAP.toLocalizedString()); + } + Assert.assertTrue(key instanceof Integer); + if (sendIdentityRequestMessage) + IdentityRequestMessage.setLatestId(((Integer)key).intValue()); + if ((super.get(key) == DESTROYED) && (value instanceof PartitionedRegion)) { + PartitionedRegionException pre = new PartitionedRegionException(LocalizedStrings.PartitionedRegion_CAN_NOT_REUSE_OLD_PARTITIONED_REGION_ID_0.toLocalizedString(key)); + throw pre; + } + return super.put(key, value); + } + + @Override + public void clear() { + this.cleared = true; + super.clear(); + } + + public synchronized String dump() { + StringBuffer b = new StringBuffer("prIdToPR Map@"); + b.append(System.identityHashCode(prIdToPR)).append(":\n"); + Map.Entry me; + for (Iterator i = prIdToPR.entrySet().iterator(); i.hasNext();) { + me = (Map.Entry)i.next(); + b.append(me.getKey()).append("=>").append(me.getValue()); + if (i.hasNext()) { + b.append("\n"); + } + } + return b.toString(); + } + } + + private int partitionedRegionId = -3; + + // final private Scope userScope; + + /** Node description */ + final private Node node; + + /** Helper Object for redundancy Management of PartitionedRegion */ + private final PRHARedundancyProvider redundancyProvider; + + /** + * flag saying whether this VM needs cache operation notifications from other + * members + */ + private boolean requiresNotification; + + /** + * Latch that signals when the Bucket meta-data is ready to receive updates + */ + private final StoppableCountDownLatch initializationLatchAfterBucketIntialization; + + /** + * Constructor for a PartitionedRegion. This has an accessor (Region API) + * functionality and contains a datastore for actual storage. An accessor can + * act as a local cache by having a local storage enabled. A PartitionedRegion + * can be created by a factory method of RegionFactory.java and also by + * invoking Cache.createRegion(). (Cache.xml etc to be added) + * + */ + + static public final String RETRY_TIMEOUT_PROPERTY = + "gemfire.partitionedRegionRetryTimeout"; + + private final PartitionRegionConfigValidator validator ; + + final List fixedPAttrs; + + private byte fixedPASet; + + public List colocatedByList= new CopyOnWriteArrayList(); + + private final PartitionListener[] partitionListeners; + + private boolean isShadowPR = false; + private boolean isShadowPRForHDFS = false; + + private AbstractGatewaySender parallelGatewaySender = null; + + private final ThreadLocal queryHDFS = new ThreadLocal() { + @Override + protected Boolean initialValue() { + return false; + } + }; + + public PartitionedRegion(String regionname, RegionAttributes ra, + LocalRegion parentRegion, GemFireCacheImpl cache, + InternalRegionArguments internalRegionArgs) { + super(regionname, ra, parentRegion, cache, internalRegionArgs); + + this.node = initializeNode(); + this.prStats = new PartitionedRegionStats(cache.getDistributedSystem(), getFullPath()); + this.regionIdentifier = getFullPath().replace('/', '#'); + + if (logger.isDebugEnabled()) { + logger.debug("Constructing Partitioned Region {}", regionname); + } + + // By adding this disconnect listener we ensure that the pridmap is cleaned + // up upon + // distributed system disconnect even this (or other) PRs are destroyed + // (which prevents pridmap cleanup). + cache.getDistributedSystem().addDisconnectListener(dsPRIdCleanUpListener); + + // add an async queue for the region if the store name is not null. + if (this.getHDFSStoreName() != null) { + String eventQueueName = getHDFSEventQueueName(); + super.addAsyncEventQueueId(eventQueueName); + } + + // this.userScope = ra.getScope(); + this.partitionAttributes = ra.getPartitionAttributes(); + this.localMaxMemory = this.partitionAttributes.getLocalMaxMemory(); + this.retryTimeout = Integer.getInteger(RETRY_TIMEOUT_PROPERTY, + PartitionedRegionHelper.DEFAULT_TOTAL_WAIT_RETRY_ITERATION).intValue(); + this.totalNumberOfBuckets = this.partitionAttributes.getTotalNumBuckets(); + this.prStats.incTotalNumBuckets(this.totalNumberOfBuckets); + this.distAdvisor = RegionAdvisor.createRegionAdvisor(this); // Warning: potential early escape of instance + this.redundancyProvider = new PRHARedundancyProvider(this); // Warning: + // potential + // early escape + // instance + + // localCacheEnabled = ra.getPartitionAttributes().isLocalCacheEnabled(); + // This is to make sure that local-cache get and put works properly. + // getScope is overridden to return the correct scope. + // this.scope = Scope.LOCAL; + this.redundantCopies = ra.getPartitionAttributes().getRedundantCopies(); + this.prStats.setConfiguredRedundantCopies(ra.getPartitionAttributes().getRedundantCopies()); + this.prStats.setLocalMaxMemory(ra.getPartitionAttributes().getLocalMaxMemory() * 1024L * 1024); + + // No redundancy required for writes + this.minimumWriteRedundancy = Integer.getInteger( + "gemfire.mimimumPartitionedRegionWriteRedundancy", 0).intValue(); + // No redundancy required for reads + this.minimumReadRedundancy = Integer.getInteger( + "gemfire.mimimumPartitionedRegionReadRedundancy", 0).intValue(); + + this.haveCacheLoader = ra.getCacheLoader() != null; + + this.initializationLatchAfterBucketIntialization = new StoppableCountDownLatch( + this.getCancelCriterion(), 1); + + this.validator = new PartitionRegionConfigValidator(this); + this.partitionListeners = this.partitionAttributes.getPartitionListeners(); + + this.colocatedWithRegion = ColocationHelper.getColocatedRegion(this); + if (colocatedWithRegion != null) { + //In colocation chain, child region inherita the fixed partitin attributes from parent region. + this.fixedPAttrs = colocatedWithRegion.getFixedPartitionAttributesImpl(); + this.fixedPASet = colocatedWithRegion.fixedPASet; + synchronized (colocatedWithRegion.colocatedByList) { + colocatedWithRegion.colocatedByList.add(this); + } + } + else { + this.fixedPAttrs = this.partitionAttributes.getFixedPartitionAttributes(); + this.fixedPASet = 0; + } + if (logger.isDebugEnabled()) { + logger.debug("Partitioned Region {} constructed {}", regionname, (this.haveCacheLoader ? "with a cache loader" : "")); + } + if (this.getEvictionAttributes() != null + && this.getEvictionAttributes().getAlgorithm().isLRUHeap()) { + this.sortedBuckets = new ArrayList(); + final ThreadGroup grp = LoggingThreadGroup.createThreadGroup("BucketSorterThread", logger); + ThreadFactory tf = new ThreadFactory() { + public Thread newThread(Runnable r) { + Thread t = new Thread(grp, r, "BucketSorterThread"); + t.setDaemon(true); + return t; + } + }; + this.bucketSorter = Executors.newScheduledThreadPool(1, tf); + } + // If eviction is on, Create an instance of PartitionedRegionLRUStatistics + if ((this.getEvictionAttributes() != null + && !this.getEvictionAttributes().getAlgorithm().isNone() + && this.getEvictionAttributes().getAction().isOverflowToDisk()) + || this.getDataPolicy().withPersistence()) { + StatisticsFactory sf = this.getCache().getDistributedSystem(); + this.diskRegionStats = new DiskRegionStats(sf, getFullPath()); + } else { + this.diskRegionStats = null; + } + if (internalRegionArgs.isUsedForParallelGatewaySenderQueue()) { + this.isShadowPR = true; + this.parallelGatewaySender = internalRegionArgs.getParallelGatewaySender(); + if (internalRegionArgs.isUsedForHDFSParallelGatewaySenderQueue()) + this.isShadowPRForHDFS = true; + } + + + /* + * Start persistent profile logging if we are a persistent region. + */ + if(dataPolicy.withPersistence()) { + startPersistenceProfileLogging(); + } + } + + /** + * Monitors when other members that participate in this persistent region are removed and creates + * a log entry marking the event. + */ + private void startPersistenceProfileLogging() { + this.distAdvisor.addProfileChangeListener(new ProfileListener() { + @Override + public void profileCreated(Profile profile) { + } + + @Override + public void profileUpdated(Profile profile) { + } + + @Override + public void profileRemoved(Profile profile, boolean destroyed) { + /* + * Don't bother logging membership activity if our region isn't ready. + */ + if(isInitialized()) { + CacheProfile cacheProfile = ((profile instanceof CacheProfile) ? (CacheProfile) profile : null); + Set onlineMembers = new HashSet(); + + TransformUtils.transform(PartitionedRegion.this.distAdvisor.advisePersistentMembers().values(),onlineMembers,TransformUtils.persistentMemberIdToLogEntryTransformer); + + logger.info(LocalizedMessage.create(LocalizedStrings.PersistenceAdvisorImpl_PERSISTENT_VIEW, + new Object[] {PartitionedRegion.this.getName(),TransformUtils.persistentMemberIdToLogEntryTransformer.transform(cacheProfile.persistentID),onlineMembers})); + } + } + }); + } + + @Override + public final boolean isHDFSRegion() { + return this.getHDFSStoreName() != null; + } + + @Override + public final boolean isHDFSReadWriteRegion() { + return isHDFSRegion() && !getHDFSWriteOnly(); + } + + @Override + protected final boolean isHDFSWriteOnly() { + return isHDFSRegion() && getHDFSWriteOnly(); + } + + public final void setQueryHDFS(boolean includeHDFS) { + queryHDFS.set(includeHDFS); + } + + @Override + public final boolean includeHDFSResults() { + return queryHDFS.get(); + } + + public final boolean isShadowPR() { + return isShadowPR; + } + + public final boolean isShadowPRForHDFS() { + return isShadowPRForHDFS; + } + + public AbstractGatewaySender getParallelGatewaySender() { + return parallelGatewaySender; + } + + public Set getParallelGatewaySenderIds() { + Set regionGatewaySenderIds = this.getAllGatewaySenderIds(); + if (regionGatewaySenderIds.isEmpty()) { + return Collections.EMPTY_SET; + } + Set cacheGatewaySenders = getCache().getAllGatewaySenders(); + Set parallelGatewaySenderIds = new HashSet(); + for (GatewaySender sender : cacheGatewaySenders) { + if (regionGatewaySenderIds.contains(sender.getId()) + && sender.isParallel()) { + parallelGatewaySenderIds.add(sender.getId()); + } + } + return parallelGatewaySenderIds; + } + + List getColocatedByList() { + return this.colocatedByList; + } + + public boolean isColocatedBy() { + return !this.colocatedByList.isEmpty(); + } + + private void createAndValidatePersistentConfig() { + DiskStoreImpl dsi = this.getDiskStore(); + if (this.dataPolicy.withPersistence() && !this.concurrencyChecksEnabled + && supportsConcurrencyChecks()) { + logger.info(LocalizedMessage.create(LocalizedStrings.PartitionedRegion_ENABLING_CONCURRENCY_CHECKS_FOR_PERSISTENT_PR, this.getFullPath())); + this.concurrencyChecksEnabled = true; + } + if (dsi != null && this.getDataPolicy().withPersistence()) { + String colocatedWith = colocatedWithRegion == null + ? "" : colocatedWithRegion.getFullPath(); + PRPersistentConfig config = dsi.getPersistentPRConfig(this.getFullPath()); + if(config != null) { + if (config.getTotalNumBuckets() != this.getTotalNumberOfBuckets()) { + Object[] prms = new Object[] { this.getFullPath(), this.getTotalNumberOfBuckets(), + config.getTotalNumBuckets() }; + IllegalStateException ise = new IllegalStateException( + LocalizedStrings.PartitionedRegion_FOR_REGION_0_TotalBucketNum_1_SHOULD_NOT_BE_CHANGED_Previous_Configured_2.toString(prms)); + throw ise; + } + //Make sure we don't change to be colocated with a different region + //We also can't change from colocated to not colocated without writing + //a record to disk, so we won't allow that right now either. + if (!colocatedWith.equals(config.getColocatedWith())) { + Object[] prms = new Object[] { this.getFullPath(), colocatedWith, + config.getColocatedWith() }; + DiskAccessException dae = new DiskAccessException(LocalizedStrings.LocalRegion_A_DISKACCESSEXCEPTION_HAS_OCCURED_WHILE_WRITING_TO_THE_DISK_FOR_REGION_0_THE_REGION_WILL_BE_CLOSED.toLocalizedString(this.getFullPath()), null, dsi); + dsi.handleDiskAccessException(dae); + IllegalStateException ise = new IllegalStateException( + LocalizedStrings.PartitionedRegion_FOR_REGION_0_ColocatedWith_1_SHOULD_NOT_BE_CHANGED_Previous_Configured_2.toString(prms)); + throw ise; + } + } else { + + config= new PRPersistentConfig(this.getTotalNumberOfBuckets(), + colocatedWith); + dsi.addPersistentPR(this.getFullPath(), config); + //Fix for support issue 7870 - the parent region needs to be able + //to discover that there is a persistent colocated child region. So + //if this is a child region, persist its config to the parent disk store + //as well. + if(colocatedWithRegion != null + && colocatedWithRegion.getDiskStore() != null + && colocatedWithRegion.getDiskStore() != dsi) { + colocatedWithRegion.getDiskStore().addPersistentPR(this.getFullPath(), config); + } + } + + } + } + + /** + * Initializes the PartitionedRegion meta data, adding this Node and starting + * the service on this node (if not already started). + * Made this synchronized for bug 41982 + * @return true if initialize was done; false if not because it was destroyed + */ + private synchronized boolean initPRInternals(InternalRegionArguments internalRegionArgs) { + + if (this.isLocallyDestroyed) { + // don't initialize if we are already destroyed for bug 41982 + return false; + } + /* Initialize the PartitionRegion */ + if (cache.isCacheAtShutdownAll()) { + throw new CacheClosedException("Cache is shutting down"); + } + validator.validateColocation(); + + //Do this after the validation, to avoid creating a persistent config + //for an invalid PR. + createAndValidatePersistentConfig(); + initializePartitionedRegion(); + + /* set the total number of buckets */ + // setTotalNumOfBuckets(); + // If localMaxMemory is set to 0, do not initialize Data Store. + final boolean storesData = this.localMaxMemory > 0; + if (storesData) { + initializeDataStore(this.getAttributes()); + } + + // register this PartitionedRegion, Create a PartitionRegionConfig and bind + // it into the allPartitionedRegion system wide Region. + // IMPORTANT: do this before advising peers that we have this region + registerPartitionedRegion(storesData); + + getRegionAdvisor().initializeRegionAdvisor(); // must be BEFORE initializeRegion call + getRegionAdvisor().addMembershipListener(this.advisorListener); // fix for bug 38719 + + // 3rd part of eviction attributes validation, after eviction attributes + // have potentially been published (by the first VM) but before buckets are created + validator.validateEvictionAttributesAgainstLocalMaxMemory(); + validator.validateFixedPartitionAttributes(); + + // Register with the other Nodes that have this region defined, this + // allows for an Advisor profile exchange, also notifies the Admin + // callbacks that this Region is created. + try { + new CreateRegionProcessor(this).initializeRegion(); + } catch (IllegalStateException e) { + // If this is a PARTITION_PROXY then retry region creation + // after toggling the concurrencyChecksEnabled flag. This is + // required because for persistent regions, we enforce concurrencyChecks + if (!this.isDataStore() && supportsConcurrencyChecks()) { + this.concurrencyChecksEnabled = !this.concurrencyChecksEnabled; + new CreateRegionProcessor(this).initializeRegion(); + } else { + throw e; + } + } + + if (!this.isDestroyed && !this.isLocallyDestroyed) { + // Register at this point so that other members are known + this.cache.getResourceManager().addResourceListener(ResourceType.MEMORY, this); + } + + // Create OQL indexes before starting GII. + createOQLIndexes(internalRegionArgs); + + // if any other services are dependent on notifications from this region, + // then we need to make sure that in-process ops are distributed before + // releasing the GII latches + if (this.isAllEvents()) { + StateFlushOperation sfo = new StateFlushOperation(getDistributionManager()); + try { + sfo.flush(this.distAdvisor.adviseAllPRNodes(), + getDistributionManager().getId(), + DistributionManager.HIGH_PRIORITY_EXECUTOR, false); + } catch (InterruptedException ie) { + Thread.currentThread().interrupt(); + getCancelCriterion().checkCancelInProgress(ie); + } + } + + releaseBeforeGetInitialImageLatch(); // moved to this spot for bug 36671 + + // requires prid assignment mthomas 4/3/2007 + getRegionAdvisor().processProfilesQueuedDuringInitialization(); + + releaseAfterBucketMetadataSetupLatch(); + + try { + if(storesData) { + if(this.redundancyProvider.recoverPersistentBuckets()) { + //Mark members as recovered from disk recursively, starting + //with the leader region. + PartitionedRegion leaderRegion = ColocationHelper.getLeaderRegion(this); + markRecoveredRecursively(leaderRegion); + } + } + } + catch (RegionDestroyedException rde) { + // Do nothing. + if (logger.isDebugEnabled()) { + logger.debug("initPRInternals: failed due to exception", rde); + } + } + + releaseAfterGetInitialImageLatch(); + + try { + if(storesData) { + this.redundancyProvider.scheduleCreateMissingBuckets(); + + if (this.redundantCopies > 0) { + this.redundancyProvider.startRedundancyRecovery(); + } + } + } + catch (RegionDestroyedException rde) { + // Do nothing. + if (logger.isDebugEnabled()) { + logger.debug("initPRInternals: failed due to exception", rde); + } + } + + return true; + } + + private void markRecoveredRecursively(PartitionedRegion region) { + region.setRecoveredFromDisk(); + for(PartitionedRegion colocatedRegion : ColocationHelper.getColocatedChildRegions(region)) { + markRecoveredRecursively(colocatedRegion); + } + } + + @Override + protected void postCreateRegion() { + super.postCreateRegion(); + CacheListener[] listeners = fetchCacheListenersField(); + if (listeners != null && listeners.length > 0) { + Set others = getRegionAdvisor().adviseGeneric(); + for (int i = 0; i < listeners.length; i++) { + if (listeners[i] instanceof RegionMembershipListener) { + RegionMembershipListener rml = (RegionMembershipListener)listeners[i]; + try { + DistributedMember[] otherDms = new DistributedMember[others + .size()]; + others.toArray(otherDms); + rml.initialMembers(this, otherDms); + } + catch (VirtualMachineError err) { + SystemFailure.initiateFailure(err); + // If this ever returns, rethrow the error. We're poisoned + // now, so don't let this thread continue. + throw err; + } + catch (Throwable t) { + // Whenever you catch Error or Throwable, you must also + // catch VirtualMachineError (see above). However, there is + // _still_ a possibility that you are dealing with a cascading + // error condition, so you also need to check to see if the JVM + // is still usable: + SystemFailure.checkFailure(); + logger.error(LocalizedMessage.create(LocalizedStrings.DistributedRegion_EXCEPTION_OCCURRED_IN_REGIONMEMBERSHIPLISTENER), t); + } + } + } + } + + PartitionListener[] partitionListeners = this.getPartitionListeners(); + if (partitionListeners != null && partitionListeners.length != 0) { + for (int i = 0; i < partitionListeners.length; i++) { + PartitionListener listener = partitionListeners[i]; + if (listener != null) { + listener.afterRegionCreate(this); + } + } + } + + Set allGatewaySenderIds = getAllGatewaySenderIds(); + if (!allGatewaySenderIds.isEmpty()) { + for (GatewaySender sender : cache.getAllGatewaySenders()) { + if (sender.isParallel() + && allGatewaySenderIds.contains(sender.getId())) { + /** + * get the ParallelGatewaySender to create the colocated partitioned + * region for this region. + */ + if (sender.isRunning() ) { + AbstractGatewaySender senderImpl = (AbstractGatewaySender)sender; + ((ConcurrentParallelGatewaySenderQueue)senderImpl.getQueues().toArray(new RegionQueue[1])[0]) + .addShadowPartitionedRegionForUserPR(this); + } + } + } + } + } + + /* + * Initializes the PartitionedRegion. OVERRIDES + */ + @Override + protected void initialize(InputStream snapshotInputStream, + InternalDistributedMember imageTarget, + InternalRegionArguments internalRegionArgs) throws TimeoutException, + ClassNotFoundException { + if (logger.isDebugEnabled()) { + logger.debug("PartitionedRegion#initialize {}", getName()); + } + RegionLogger.logCreate(getName(), getDistributionManager().getDistributionManagerId()); + + this.requiresNotification = this.cache.requiresNotificationFromPR(this); + initPRInternals(internalRegionArgs); + + if (logger.isDebugEnabled()) { + logger.debug("PartitionRegion#initialize: finished with {}", this); + } + this.cache.addPartitionedRegion(this); + + } + + /** + * Initializes the Node for this Map. + */ + private Node initializeNode() { + return new Node(getDistributionManager().getId(), + SERIAL_NUMBER_GENERATOR.getAndIncrement()); + } + + /** + * receive notification that a bridge server or wan gateway has been created + * that requires notification of cache events from this region + */ + public void cacheRequiresNotification() { + if (!this.requiresNotification + && !(this.isClosed || this.isLocallyDestroyed)) { + // tell others of the change in status + this.requiresNotification = true; + new UpdateAttributesProcessor(this).distribute(false); + } + } + + @Override + void distributeUpdatedProfileOnHubCreation() + { + if (!(this.isClosed || this.isLocallyDestroyed)) { + // tell others of the change in status + this.requiresNotification = true; + new UpdateAttributesProcessor(this).distribute(false); + } + } + + @Override + void distributeUpdatedProfileOnSenderCreation() + { + if (!(this.isClosed || this.isLocallyDestroyed)) { + // tell others of the change in status + this.requiresNotification = true; + new UpdateAttributesProcessor(this).distribute(false); + } + } + + public void addGatewaySenderId(String gatewaySenderId) { + super.addGatewaySenderId(gatewaySenderId); + new UpdateAttributesProcessor(this).distribute(); + ((PartitionedRegion)this).distributeUpdatedProfileOnSenderCreation(); + GatewaySender sender = getCache().getGatewaySender(gatewaySenderId); + if (sender!= null && sender.isParallel() && sender.isRunning()) { + AbstractGatewaySender senderImpl = (AbstractGatewaySender)sender; + ((ConcurrentParallelGatewaySenderQueue)senderImpl.getQueues().toArray( + new RegionQueue[1])[0]).addShadowPartitionedRegionForUserPR(this); + } + } + + public void removeGatewaySenderId(String gatewaySenderId){ + super.removeGatewaySenderId(gatewaySenderId); + new UpdateAttributesProcessor(this).distribute(); + } + + public void addAsyncEventQueueId(String asyncEventQueueId) { + super.addAsyncEventQueueId(asyncEventQueueId); + new UpdateAttributesProcessor(this).distribute(); + ((PartitionedRegion)this).distributeUpdatedProfileOnSenderCreation(); + GatewaySender sender = getCache().getGatewaySender(AsyncEventQueueImpl.getSenderIdFromAsyncEventQueueId(asyncEventQueueId)); + if (sender!= null && sender.isParallel() && sender.isRunning()) { + AbstractGatewaySender senderImpl = (AbstractGatewaySender)sender; + ((ConcurrentParallelGatewaySenderQueue)senderImpl.getQueues().toArray( + new RegionQueue[1])[0]).addShadowPartitionedRegionForUserPR(this); + } + } + + public void removeAsyncEventQueueId(String asyncEventQueueId) { + super.removeAsyncEventQueueId(asyncEventQueueId); + new UpdateAttributesProcessor(this).distribute(); + } + + public void checkSameSenderIdsAvailableOnAllNodes() { + List senderIds = this.getCacheDistributionAdvisor() + .adviseSameGatewaySenderIds(getGatewaySenderIds()); + if (!senderIds.isEmpty()) { + throw new GatewaySenderConfigurationException( + LocalizedStrings.Region_REGION_0_HAS_1_GATEWAY_SENDER_IDS_ANOTHER_CACHE_HAS_THE_SAME_REGION_WITH_2_GATEWAY_SENDER_IDS_FOR_REGION_ACROSS_ALL_MEMBERS_IN_DS_GATEWAY_SENDER_IDS_SHOULD_BE_SAME + .toLocalizedString(new Object[] { this.getName(), + senderIds.get(0), senderIds.get(1) })); + } + + List asycnQueueIds = this.getCacheDistributionAdvisor() + .adviseSameAsyncEventQueueIds(getAsyncEventQueueIds()); + if (!asycnQueueIds.isEmpty()) { + throw new GatewaySenderConfigurationException( + LocalizedStrings.Region_REGION_0_HAS_1_ASYNC_EVENT_QUEUE_IDS_ANOTHER_CACHE_HAS_THE_SAME_REGION_WITH_2_ASYNC_EVENT_QUEUE_IDS_FOR_REGION_ACROSS_ALL_MEMBERS_IN_DS_ASYNC_EVENT_QUEUE_IDS_SHOULD_BE_SAME + .toLocalizedString(new Object[] { this.getName(), + asycnQueueIds.get(0), asycnQueueIds.get(1) })); + } + } + + /** + * Initializes the PartitionedRegion - create the Global regions for storing + * the PartitiotnedRegion configs. + */ + private void initializePartitionedRegion() { + this.prRoot = PartitionedRegionHelper.getPRRoot(getCache()); + } + + @Override + public void remoteRegionInitialized(CacheProfile profile) { + if (isInitialized() && hasListener()) { + Object callback = DistributedRegion.TEST_HOOK_ADD_PROFILE? profile : null; + RegionEventImpl event = new RegionEventImpl(PartitionedRegion.this, + Operation.REGION_CREATE, callback, true, profile.peerMemberId); + dispatchListenerEvent(EnumListenerEvent.AFTER_REMOTE_REGION_CREATE, + event); + } + } + + /** + * This method initializes the partitionedRegionDataStore for this PR. + * + * @param ra + * Region attributes + */ + private void initializeDataStore(RegionAttributes ra) { + + this.dataStore = PartitionedRegionDataStore.createDataStore(cache, this, ra + .getPartitionAttributes()); + } + + protected DistributedLockService getPartitionedRegionLockService() { + return getGemFireCache().getPartitionedRegionLockService(); + } + + /** + * Register this PartitionedRegion by: 1) Create a PartitionRegionConfig and + * 2) Bind it into the allPartitionedRegion system wide Region. + * + * @param storesData + * which indicates whether the instance in this cache stores + * data, effecting the Nodes PRType + * + * @see Node#setPRType(int) + */ + private void registerPartitionedRegion(boolean storesData) { + // Register this ParitionedRegion. First check if the ParitionedRegion + // entry already exists globally. + PartitionRegionConfig prConfig = null; + PartitionAttributes prAttribs = getAttributes().getPartitionAttributes(); + if (storesData) { + if (this.fixedPAttrs != null) { + this.node.setPRType(Node.FIXED_PR_DATASTORE); + } else { + this.node.setPRType(Node.ACCESSOR_DATASTORE); + } + this.node.setPersistence(getAttributes().getDataPolicy() == DataPolicy.PERSISTENT_PARTITION); + byte loaderByte = (byte)(getAttributes().getCacheLoader() != null ? 0x01 : 0x00); + byte writerByte = (byte)(getAttributes().getCacheWriter() != null ? 0x02 : 0x00); + this.node.setLoaderWriterByte((byte)(loaderByte + writerByte)); + } + else { + if (this.fixedPAttrs != null) { + this.node.setPRType(Node.FIXED_PR_ACCESSOR); + } else { + this.node.setPRType(Node.ACCESSOR); + } + } + final RegionLock rl = getRegionLock(); + try { + // if (!rl.lock()) { + if (logger.isDebugEnabled()) { + logger.debug("registerPartitionedRegion: obtaining lock"); + } + rl.lock(); + checkReadiness(); + + prConfig = this.prRoot.get(getRegionIdentifier()); + + if (prConfig == null) { + validateParalleGatewaySenderIds(); + this.partitionedRegionId = generatePRId(getSystem()); + prConfig = new PartitionRegionConfig(this.partitionedRegionId, + this.getFullPath(), prAttribs, this.getScope(), + getAttributes().getEvictionAttributes(), + getAttributes().getRegionIdleTimeout(), + getAttributes().getRegionTimeToLive(), + getAttributes().getEntryIdleTimeout(), + getAttributes().getEntryTimeToLive(), + this.getAllGatewaySenderIds()); + logger.info(LocalizedMessage.create(LocalizedStrings.PartitionedRegion_PARTITIONED_REGION_0_IS_BORN_WITH_PRID_1_IDENT_2, + new Object[] { getFullPath(), Integer.valueOf(this.partitionedRegionId), getRegionIdentifier()})); + + PRSanityCheckMessage.schedule(this); + } + else { + validator.validatePartitionAttrsFromPRConfig(prConfig); + if (storesData) { + validator.validatePersistentMatchBetweenDataStores(prConfig); + validator.validateCacheLoaderWriterBetweenDataStores(prConfig); + validator.validateFixedPABetweenDataStores(prConfig); + } + + this.partitionedRegionId = prConfig.getPRId(); + logger.info(LocalizedMessage.create(LocalizedStrings.PartitionedRegion_PARTITIONED_REGION_0_IS_CREATED_WITH_PRID_1, + new Object[] { getFullPath(), Integer.valueOf(this.partitionedRegionId)})); + } + + synchronized (prIdToPR) { + prIdToPR.put(Integer.valueOf(this.partitionedRegionId), this); // last + } + prConfig.addNode(this.node); + if (this.getFixedPartitionAttributesImpl() != null) { + calculateStartingBucketIDs(prConfig); + } + updatePRConfig(prConfig, false); + /* + * try { if (this.redundantCopies > 0) { if (storesData) { + * this.dataStore.grabBackupBuckets(false); } } } catch + * (RegionDestroyedException rde) { if (!this.isClosed) throw rde; } + */ + this.cleanPRRegistration = true; + } + catch (LockServiceDestroyedException lsde) { + if (logger.isDebugEnabled()) { + logger.debug("registerPartitionedRegion: unable to obtain lock for {}", this); + } + cleanupFailedInitialization(); + throw new PartitionedRegionException( + LocalizedStrings.PartitionedRegion_CAN_NOT_CREATE_PARTITIONEDREGION_FAILED_TO_ACQUIRE_REGIONLOCK + .toLocalizedString(), lsde); + } + catch (IllegalStateException ill) { + cleanupFailedInitialization(); + throw ill; + } + catch (VirtualMachineError err) { + SystemFailure.initiateFailure(err); + // If this ever returns, rethrow the error. We're poisoned + // now, so don't let this thread continue. + throw err; + } + catch (Throwable t) { + // Whenever you catch Error or Throwable, you must also + // catch VirtualMachineError (see above). However, there is + // _still_ a possibility that you are dealing with a cascading + // error condition, so you also need to check to see if the JVM + // is still usable: + SystemFailure.checkFailure(); + String registerErrMsg = + LocalizedStrings.PartitionedRegion_AN_EXCEPTION_WAS_CAUGHT_WHILE_REGISTERING_PARTITIONEDREGION_0_DUMPPRID_1 + .toLocalizedString(new Object[] {getFullPath(), prIdToPR.dump()}); + try { + synchronized (prIdToPR) { + if (prIdToPR.containsKey(Integer.valueOf(this.partitionedRegionId))) { + prIdToPR.put(Integer.valueOf(this.partitionedRegionId), + PRIdMap.FAILED_REGISTRATION, false); + logger.info(LocalizedMessage.create(LocalizedStrings.PartitionedRegion_FAILED_REGISTRATION_PRID_0_NAMED_1, + new Object[] {Integer.valueOf(this.partitionedRegionId), this.getName()})); + } + } + } + catch (VirtualMachineError err) { + SystemFailure.initiateFailure(err); + // If this ever returns, rethrow the error. We're poisoned + // now, so don't let this thread continue. + throw err; + } + catch (Throwable ignore) { + // Whenever you catch Error or Throwable, you must also + // catch VirtualMachineError (see above). However, there is + // _still_ a possibility that you are dealing with a cascading + // error condition, so you also need to check to see if the JVM + // is still usable: + SystemFailure.checkFailure(); + if (logger.isDebugEnabled()) { + logger.debug("Partitioned Region creation, could not clean up after caught exception", ignore); + } + } + throw new PartitionedRegionException(registerErrMsg, t); + } + finally { + try { + rl.unlock(); + if (logger.isDebugEnabled()) { + logger.debug("registerPartitionedRegion: released lock"); + } + } + catch (Exception es) { + if (logger.isDebugEnabled()) { + logger.warn(es.getMessage(), es); + } + } + } + } + + public void validateParalleGatewaySenderIds() throws PRLocallyDestroyedException{ + for (String senderId : this.getParallelGatewaySenderIds()) { + for (PartitionRegionConfig config : this.prRoot.values()) { + if (config.getGatewaySenderIds().contains(senderId)) { + Map colocationMap = ColocationHelper + .getAllColocationRegions(this); + if (!colocationMap.isEmpty()) { + if (colocationMap.containsKey(config.getFullPath())) { + continue; + } + else { + int prID = config.getPRId(); + PartitionedRegion colocatedPR = PartitionedRegion + .getPRFromId(prID); + PartitionedRegion leader = ColocationHelper + .getLeaderRegion(colocatedPR); + if (colocationMap.containsValue(leader)) { + continue; + } + else { + throw new IllegalStateException( + LocalizedStrings.PartitionRegion_NON_COLOCATED_REGIONS_1_2_CANNOT_HAVE_SAME_PARALLEL_GATEWAY_SENDER_ID_2.toString(new Object[] { + this.getFullPath(), + config.getFullPath(), + senderId.contains(AsyncEventQueueImpl.ASYNC_EVENT_QUEUE_PREFIX) ? "async event queue": "gateway sender", + senderId })); + } + } + } + else { + throw new IllegalStateException( + LocalizedStrings.PartitionRegion_NON_COLOCATED_REGIONS_1_2_CANNOT_HAVE_SAME_PARALLEL_GATEWAY_SENDER_ID_2.toString(new Object[] { + this.getFullPath(), + config.getFullPath(), + senderId.contains(AsyncEventQueueImpl.ASYNC_EVENT_QUEUE_PREFIX) ? "async event queue": "gateway sender", + senderId })); + } + + } + } + } + } + + /** + * @return whether this region requires event notification for all cache + * content changes from other nodes + */ + public boolean getRequiresNotification() { + return this.requiresNotification; + } + + /** + * Get the Partitioned Region identifier used for DLocks (Bucket and Region) + */ + final public String getRegionIdentifier() { + return this.regionIdentifier; + } + + void setRecoveredFromDisk() { + this.recoveredFromDisk = true; + new UpdateAttributesProcessor(this).distribute(false); + } + + public final void updatePRConfig(PartitionRegionConfig prConfig, + boolean putOnlyIfUpdated) { + final Set nodes = prConfig.getNodes(); + final PartitionedRegion colocatedRegion = ColocationHelper + .getColocatedRegion(this); + RegionLock colocatedLock = null; + boolean colocatedLockAcquired = false; + try { + boolean colocationComplete = false; + if (colocatedRegion != null && !prConfig.isColocationComplete() && + // if the current node is marked uninitialized (SQLF DDL replay in + // progress) then colocation will definitely not be marked complete so + // avoid taking the expensive region lock + !getCache().isUnInitializedMember(getDistributionManager().getId())) { + colocatedLock = colocatedRegion.getRegionLock(); + colocatedLock.lock(); + colocatedLockAcquired = true; + final PartitionRegionConfig parentConf = this.prRoot + .get(colocatedRegion.getRegionIdentifier()); + if (parentConf.isColocationComplete() + && parentConf.hasSameDataStoreMembers(prConfig)) { + colocationComplete = true; + // check if all the nodes have been initialized (SQLF bug #42089) + for (Node node : nodes) { + if (getCache().isUnInitializedMember(node.getMemberId())) { + colocationComplete = false; + break; + } + } + if (colocationComplete) { + prConfig.setColocationComplete(); + } + } + } + + if(isDataStore() && !prConfig.isFirstDataStoreCreated()) { + prConfig.setDatastoreCreated(getEvictionAttributes()); + } + // N.B.: this put could fail with a CacheClosedException: + if (!putOnlyIfUpdated || colocationComplete) { + this.prRoot.put(getRegionIdentifier(), prConfig); + } + } finally { + if (colocatedLockAcquired) { + colocatedLock.unlock(); + } + } + } + + /** + * + * @param keyInfo + * @param access + * true if caller wants last accessed time updated + * @param allowTombstones - whether a tombstone can be returned + * @return TODO + */ + @Override + protected Region.Entry nonTXGetEntry(KeyInfo keyInfo, boolean access, boolean allowTombstones) { + final long startTime = PartitionedRegionStats.startTime(); + final Object key = keyInfo.getKey(); + try { + int bucketId = keyInfo.getBucketId(); + if (bucketId == KeyInfo.UNKNOWN_BUCKET) { + bucketId = PartitionedRegionHelper.getHashKey(this, + Operation.GET_ENTRY, key, null, null); + keyInfo.setBucketId(bucketId); + } + InternalDistributedMember targetNode = getOrCreateNodeForBucketRead(bucketId); + return getEntryInBucket(targetNode, bucketId, key, access, allowTombstones); + } + finally { + this.prStats.endGetEntry(startTime); + } + } + + protected EntrySnapshot getEntryInBucket( + final DistributedMember targetNode, final int bucketId, + final Object key, boolean access, final boolean allowTombstones) { + final int retryAttempts = calcRetry(); + if (logger.isTraceEnabled()) { + logger.trace("getEntryInBucket: " + "Key key={} ({}) from: {} bucketId={}", + key, key.hashCode(), targetNode, bucketStringForLogs(bucketId)); + } + Integer bucketIdInt = Integer.valueOf(bucketId); + EntrySnapshot ret = null; + int count = 0; + RetryTimeKeeper retryTime = null; + InternalDistributedMember retryNode = (InternalDistributedMember)targetNode; + while (count <= retryAttempts) { + // Every continuation should check for DM cancellation + if (retryNode == null) { + checkReadiness(); + if (retryTime == null) { + retryTime = new RetryTimeKeeper(this.retryTimeout); + } + if (retryTime.overMaximum()) { + break; + } + retryNode = getOrCreateNodeForBucketRead(bucketId); + + // No storage found for bucket, early out preventing hot loop, bug 36819 + if (retryNode == null) { + checkShutdown(); + return null; + } + continue; + } + try { + final boolean loc = (this.localMaxMemory > 0) && retryNode.equals(getMyId()); + if (loc) { + ret = this.dataStore.getEntryLocally(bucketId, key, access, allowTombstones, true); + } else { + ret = getEntryRemotely(retryNode, bucketIdInt, key, access, allowTombstones); + // TODO:Suranjan&Yogesh : there should be better way than this one + String name = Thread.currentThread().getName(); + if (name.startsWith("ServerConnection") + && !getMyId().equals(targetNode)) { + setNetworkHop(bucketIdInt, (InternalDistributedMember)targetNode); + } + } + + return ret; + } + catch (PRLocallyDestroyedException pde) { + if (logger.isDebugEnabled()) { + logger.debug("getEntryInBucket: Encountered PRLocallyDestroyedException "); + } + checkReadiness(); + } + catch (EntryNotFoundException enfe) { + return null; + } + catch (ForceReattemptException prce) { + prce.checkKey(key); + if (logger.isDebugEnabled()) { + logger.debug("getEntryInBucket: retrying, attempts so far: {}", count, prce); + } + checkReadiness(); + InternalDistributedMember lastNode = retryNode; + retryNode = getOrCreateNodeForBucketRead(bucketIdInt.intValue()); + if (lastNode.equals(retryNode)) { + if (retryTime == null) { + retryTime = new RetryTimeKeeper(this.retryTimeout); + } + if (retryTime.overMaximum()) { + break; + } + retryTime.waitToRetryNode(); + } + } + catch (PrimaryBucketException notPrimary) { + if (logger.isDebugEnabled()) { + logger.debug("Bucket {} on Node {} not primary", notPrimary.getLocalizedMessage(), retryNode); + } + getRegionAdvisor().notPrimary(bucketIdInt.intValue(), retryNode); + retryNode = getOrCreateNodeForBucketRead(bucketIdInt.intValue()); + } + + // It's possible this is a GemFire thread e.g. ServerConnection + // which got to this point because of a distributed system shutdown or + // region closure which uses interrupt to break any sleep() or wait() + // calls + // e.g. waitForPrimary + checkShutdown(); + + count++; + if (count == 1) { + this.prStats.incContainsKeyValueOpsRetried(); + } + this.prStats.incContainsKeyValueRetries(); + + } + + PartitionedRegionDistributionException e = null; // Fix for bug 36014 + if (logger.isDebugEnabled()) { + e = new PartitionedRegionDistributionException(LocalizedStrings.PartitionRegion_NO_VM_AVAILABLE_FOR_GETENTRY_IN_0_ATTEMPTS.toLocalizedString(Integer.valueOf(count))); + } + logger.warn(LocalizedMessage.create(LocalizedStrings.PartitionRegion_NO_VM_AVAILABLE_FOR_GETENTRY_IN_0_ATTEMPTS, Integer.valueOf(count)), e); + return null; + } + + /** + * Check for region closure, region destruction, cache closure as well as + * distributed system disconnect. As of 6/21/2007, there were at least four + * volatile variables reads and one synchonrization performed upon completion + * of this method. + */ + private void checkShutdown() { + checkReadiness(); + this.cache.getCancelCriterion().checkCancelInProgress(null); + } + + /** + * Checks if a key is contained remotely. + * + * @param targetNode + * the node where bucket region for the key exists. + * @param bucketId + * the bucket id for the key. + * @param key + * the key, whose value needs to be checks + * @param access + * true if caller wants last access time updated + * @param allowTombstones whether tombstones should be returned + * @throws EntryNotFoundException + * if the entry doesn't exist + * @throws ForceReattemptException + * if the peer is no longer available + * @throws PrimaryBucketException + * @return true if the passed key is contained remotely. + */ + public EntrySnapshot getEntryRemotely( + InternalDistributedMember targetNode, + Integer bucketId, Object key, boolean access, boolean allowTombstones) + throws EntryNotFoundException, PrimaryBucketException, + ForceReattemptException { + FetchEntryResponse r = FetchEntryMessage + .send(targetNode, this, key, access); + this.prStats.incPartitionMessagesSent(); + EntrySnapshot entry = r.waitForResponse(); + if (entry != null && entry.getRawValue() == Token.TOMBSTONE){ + if (!allowTombstones) { + return null; + } + } + return entry; + } + + // ///////////////////////////////////////////////////////////////// + // Following methods would throw, operation Not Supported Exception + // ///////////////////////////////////////////////////////////////// + + /** + * @since 5.0 + * @throws UnsupportedOperationException + * OVERRIDES + */ + @Override + public void becomeLockGrantor() { + throw new UnsupportedOperationException(); + } + + /** + * @since 5.0 + * @throws UnsupportedOperationException + * OVERRIDES + */ + @Override + final public Region createSubregion(String subregionName, + RegionAttributes regionAttributes) throws RegionExistsException, + TimeoutException { + throw new UnsupportedOperationException(); + } + + /** + * @since 5.0 + * @throws UnsupportedOperationException + * OVERRIDES + */ + @Override + public Lock getDistributedLock(Object key) throws IllegalStateException { + throw new UnsupportedOperationException(); + } + + /** + * @since 5.0 + * @throws UnsupportedOperationException + * OVERRIDES + */ + @Override + public CacheStatistics getStatistics() { + throw new UnsupportedOperationException(); + } + + /** + * @since 5.0 + * @throws UnsupportedOperationException + * OVERRIDES + */ + public Region getSubregion() { + throw new UnsupportedOperationException(); + } + + /** + * @since 5.0 + * @throws UnsupportedOperationException + * OVERRIDES + */ + @Override + public Lock getRegionDistributedLock() throws IllegalStateException { + + throw new UnsupportedOperationException(); + } + + /** + * @since 5.0 + * @throws UnsupportedOperationException + * OVERRIDES + */ + @Override + public void loadSnapshot(InputStream inputStream) throws IOException, + ClassNotFoundException, CacheWriterException, TimeoutException { + throw new UnsupportedOperationException(); + } + + /** + * Should it destroy entry from local accessor????? + * OVERRIDES + */ + @Override + public void localDestroy(Object key, Object aCallbackArgument) + throws EntryNotFoundException { + + throw new UnsupportedOperationException(); + } + + /** + * @since 5.0 + * @throws UnsupportedOperationException + * OVERRIDES + */ + @Override + public void localInvalidate(Object key, Object aCallbackArgument) + throws EntryNotFoundException { + + throw new UnsupportedOperationException(); + } + + /** + * @since 5.0 + * @throws UnsupportedOperationException + * OVERRIDES + */ + @Override + public void localInvalidateRegion(Object aCallbackArgument) { + getDataView().checkSupportsRegionInvalidate(); + throw new UnsupportedOperationException(); + } + + /** + * Executes a query on this PartitionedRegion. The restrictions have already + * been checked. The query is a SELECT expression, and the only region it + * refers to is this region. + * + * @see DefaultQuery#execute() + * + * @since 5.1 + */ + public Object executeQuery(DefaultQuery query, Object[] parameters, + Set buckets) throws FunctionDomainException, TypeMismatchException, + NameResolutionException, QueryInvocationTargetException { + for (;;) { + try { + return doExecuteQuery(query, parameters, buckets); + } catch (ForceReattemptException fre) { + // fall through and loop + } + } + } + /** + * If ForceReattemptException is thrown then the caller must loop and call us again. + * @throws ForceReattemptException if one of the buckets moved out from under us + */ + private Object doExecuteQuery(DefaultQuery query, Object[] parameters, + Set buckets) + throws FunctionDomainException, TypeMismatchException, + NameResolutionException, QueryInvocationTargetException, + ForceReattemptException + { + if (logger.isDebugEnabled()) { + logger.debug("Executing query :{}", query); + } + + HashSet allBuckets = new HashSet(); + + if (buckets==null) { // remote buckets + final Iterator remoteIter = getRegionAdvisor().getBucketSet().iterator(); + try { + while (remoteIter.hasNext()) { + allBuckets.add((Integer)remoteIter.next()); + } + } + catch (NoSuchElementException stop) { + } + } + else { // local buckets + Iterator localIter = null; + if (this.dataStore != null) { + localIter = buckets.iterator(); + } + else { + localIter = Collections.EMPTY_SET.iterator(); + } + try { + while (localIter.hasNext()) { + allBuckets.add((Integer)localIter.next()); + } + } + catch (NoSuchElementException stop) { + } + } + + if (allBuckets.size() == 0) { + if (logger.isDebugEnabled()) { + logger.debug("No bucket storage allocated. PR has no data yet."); + } + ResultsSet resSet = new ResultsSet(); + resSet.setElementType(new ObjectTypeImpl( + this.getValueConstraint() == null ? Object.class : this + .getValueConstraint())); + return resSet; + } + + CompiledSelect selectExpr = query.getSimpleSelect(); + if (selectExpr == null) { + throw new IllegalArgumentException( + LocalizedStrings. + PartitionedRegion_QUERY_MUST_BE_A_SELECT_EXPRESSION_ONLY + .toLocalizedString()); + } + + // this can return a BAG even if it's a DISTINCT select expression, + // since the expectation is that the duplicates will be removed at the end + SelectResults results = selectExpr + .getEmptyResultSet(parameters, getCache(), query); + + PartitionedRegionQueryEvaluator prqe = new PartitionedRegionQueryEvaluator(this.getSystem(), this, query, + parameters, results, allBuckets); + for (;;) { + this.getCancelCriterion().checkCancelInProgress(null); + boolean interrupted = Thread.interrupted(); + try { + results = prqe.queryBuckets(null); + break; + } + catch (InterruptedException e) { + interrupted = true; + } + catch (FunctionDomainException e) { + throw e; + } + catch (TypeMismatchException e) { + throw e; + } + catch (NameResolutionException e) { + throw e; + } + catch (QueryInvocationTargetException e) { + throw e; + } + catch (QueryException qe) { + throw new QueryInvocationTargetException(LocalizedStrings.PartitionedRegion_UNEXPECTED_QUERY_EXCEPTION_OCCURED_DURING_QUERY_EXECUTION_0.toLocalizedString(qe.getMessage()), qe); + } + finally { + if (interrupted) { + Thread.currentThread().interrupt(); + } + } + } // for + + // Drop Duplicates if this is a DISTINCT query + boolean allowsDuplicates = results.getCollectionType().allowsDuplicates(); + //Asif: No need to apply the limit to the SelectResults. + // We know that even if we do not apply the limit, + //the results will satisfy the limit + // as it has been evaluated in the iteration of List to + // populate the SelectsResuts + //So if the results is instance of ResultsBag or is a StructSet or + // a ResultsSet, if the limit exists, the data set size will + // be exactly matching the limit + if (selectExpr.isDistinct()) { + // don't just convert to a ResultsSet (or StructSet), since + // the bags can convert themselves to a Set more efficiently + ObjectType elementType = results.getCollectionType().getElementType(); + if (selectExpr.getOrderByAttrs() != null) { + // Set limit also, its not applied while building the final result set as order by is involved. + // results = new ResultsCollectionWrapper(elementType, results.asSet(), query.getLimit(parameters)); + } else if (allowsDuplicates) { + results = new ResultsCollectionWrapper(elementType, results.asSet()); + } + if (selectExpr.isCount() && (results.isEmpty() || selectExpr.isDistinct())) { + SelectResults resultCount = new ResultsBag(getCachePerfStats());//Constructor with elementType not visible. + resultCount.setElementType(new ObjectTypeImpl(Integer.class)); + ((ResultsBag)resultCount).addAndGetOccurence(results.size()); + return resultCount; + } + } + return results; + } + + /** + * @since 5.0 + * @throws UnsupportedOperationException + * OVERRIDES + */ + @Override + public void saveSnapshot(OutputStream outputStream) throws IOException { + throw new UnsupportedOperationException(); + } + + /** + * @since 5.0 + * @throws UnsupportedOperationException + * OVERRIDES + */ + @Override + public void writeToDisk() { + throw new UnsupportedOperationException(); + } + + /** + * @since 5.0 + * @throws UnsupportedOperationException + * OVERRIDES + */ + @Override + public void clear() { + throw new UnsupportedOperationException(); + } + + @Override + void basicClear(RegionEventImpl regionEvent, boolean cacheWrite) { + throw new UnsupportedOperationException(); + } + + @Override + void basicLocalClear(RegionEventImpl event) { + throw new UnsupportedOperationException(); + } + + // ///////////////////////////////////////////////////////////////////// + // ////////////// Operation Supported for this release + // ////////////////////////////// + // ///////////////////////////////////////////////////////////////////// + + @Override + boolean virtualPut(EntryEventImpl event, + boolean ifNew, + boolean ifOld, + Object expectedOldValue, + boolean requireOldValue, + long lastModified, + boolean overwriteDestroyed) + throws TimeoutException, CacheWriterException { + final long startTime = PartitionedRegionStats.startTime(); + boolean result = false; + final DistributedPutAllOperation putAllOp_save = event.setPutAllOperation(null); + + if (event.getEventId() == null) { + event.setNewEventId(this.cache.getDistributedSystem()); + } + boolean bucketStorageAssigned = true; + try { + final Integer bucketId = event.getKeyInfo().getBucketId(); + assert bucketId != KeyInfo.UNKNOWN_BUCKET; + // check in bucket2Node region + InternalDistributedMember targetNode = getNodeForBucketWrite(bucketId + .intValue(), null); + // force all values to be serialized early to make size computation cheap + // and to optimize distribution. + if (logger.isDebugEnabled()) { + logger.debug("PR.virtualPut putting event={}", event); + } + + if (targetNode == null) { + try { + bucketStorageAssigned=false; + // if this is a Delta update, then throw exception since the key doesn't + // exist if there is no bucket for it yet + // For HDFS region, we will recover key, so allow bucket creation + if (!this.dataPolicy.withHDFS() && event.hasDelta()) { + throw new EntryNotFoundException(LocalizedStrings. + PartitionedRegion_CANNOT_APPLY_A_DELTA_WITHOUT_EXISTING_ENTRY + .toLocalizedString()); + } + targetNode = createBucket(bucketId.intValue(), event.getNewValSizeForPR(), + null); + } + catch (PartitionedRegionStorageException e) { + // try not to throw a PRSE if the cache is closing or this region was + // destroyed during createBucket() (bug 36574) + this.checkReadiness(); + if (this.cache.isClosed()) { + throw new RegionDestroyedException(toString(), getFullPath()); + } + throw e; + } + } + + if (event.isBridgeEvent() && bucketStorageAssigned) { + setNetworkHop(bucketId, targetNode); + } + if (putAllOp_save == null) { + result = putInBucket(targetNode, + bucketId, + event, + ifNew, + ifOld, + expectedOldValue, + requireOldValue, + (ifNew ? 0L : lastModified)); + if (logger.isDebugEnabled()) { + logger.debug("PR.virtualPut event={} ifNew={} ifOld={} result={}", event, ifNew, ifOld, result); + } + } else { + checkIfAboveThreshold(event); // fix for 40502 + // putAll: save the bucket id into DPAO, then wait for postPutAll to send msg + // at this time, DPAO's PutAllEntryData should be empty, we should add entry here with bucket id + // the message will be packed in postPutAll, include the one to local bucket, because the buckets + // could be changed at that time + putAllOp_save.addEntry(event, bucketId); + if (logger.isDebugEnabled()) { + logger.debug("PR.virtualPut PutAll added event={} into bucket {}", event, bucketId); + } + result = true; + } + } + catch (RegionDestroyedException rde) { + if (!rde.getRegionFullPath().equals(getFullPath())) { + RegionDestroyedException rde2 = new RegionDestroyedException(toString(), getFullPath()); + rde2.initCause(rde); + throw rde2; + } + } + // catch (CacheWriterException cwe) { + // throw cwe; + // } + // catch (TimeoutException te) { + // throw te; + // } + // catch (RuntimeException re) { + // throw re; + // } + finally { +// event.setPutAllOperation(putAllOp_save); // Gester: temporary fix + if (putAllOp_save == null) { + // only for normal put + if (ifNew) { + this.prStats.endCreate(startTime); + } + else { + this.prStats.endPut(startTime); + } + } + } + if (!result) { + checkReadiness(); + if (!ifNew && !ifOld && !this.concurrencyChecksEnabled) { // may fail due to concurrency conflict + // failed for unknown reason + //throw new PartitionedRegionStorageException("unable to execute operation"); + logger.warn(LocalizedMessage.create( + LocalizedStrings.PartitionedRegion_PRVIRTUALPUT_RETURNING_FALSE_WHEN_IFNEW_AND_IFOLD_ARE_BOTH_FALSE), + new Exception(LocalizedStrings.PartitionedRegion_STACK_TRACE.toLocalizedString())); + } + } + return result; + } + + @Override + public void performPutAllEntry(EntryEventImpl event) { + /* + * force shared data view so that we just do the virtual op, accruing things in the put all operation for later + */ + getSharedDataView().putEntry(event, false, false, null, false, 0L, false); + } + @Override + public void performRemoveAllEntry(EntryEventImpl event) { + // do not call basicDestroy directly since it causes bug 51715 + //basicDestroy(event, true, null); + // force shared data view so that we just do the virtual op + getSharedDataView().destroyExistingEntry(event, true, null); + } + + /* (non-Javadoc) + * @see com.gemstone.gemfire.internal.cache.LocalRegion#checkIfAboveThreshold(com.gemstone.gemfire.internal.cache.EntryEventImpl) + */ + @Override + public void checkIfAboveThreshold(EntryEventImpl evi) + throws LowMemoryException { + getRegionAdvisor().checkIfBucketSick(evi.getKeyInfo().getBucketId(), evi.getKey()); + } + + public boolean isFixedPartitionedRegion() { + if (this.fixedPAttrs != null || this.fixedPASet == 1) { + // We are sure that its a FixedFPA + return true; + } + // We know that it's a normal PR + if (this.fixedPASet == 2) { + return false; + } + // Now is the case for accessor with fixedPAttrs null + // and we don't know if it is a FPR + // We will find out once and return that value whenever we have check again. + this.fixedPASet = hasRemoteFPAttrs(); + return this.fixedPASet == 1; + } + + private byte hasRemoteFPAttrs() { + List fpaList = this.getRegionAdvisor() + .adviseAllFixedPartitionAttributes(); + Set remoteDataStores = this.getRegionAdvisor() + .adviseDataStore(); + if (!fpaList.isEmpty() + || (this.fixedPAttrs != null && !this.fixedPAttrs.isEmpty()) ) { + return 1; + } + if (isDataStore() || !remoteDataStores.isEmpty()) { + return 2; + } + + // This is an accessor and we need to wait for a datastore to see if there + //are any fixed PRs. + return 0; + } + + + @Override + public void postPutAllFireEvents(DistributedPutAllOperation putallOp, VersionedObjectList successfulPuts) { + /* + * No op on pr, will happen in the buckets etc. + */ + } + + @Override + public void postRemoveAllFireEvents(DistributedRemoveAllOperation op, VersionedObjectList successfulOps) { + /* + * No op on pr, will happen in the buckets etc. + */ + } + + + /** + * Create PutAllPRMsgs for each bucket, and send them. + * + * @param putallO + * DistributedPutAllOperation object. + * @param successfulPuts + * not used in PartitionedRegion. + */ + @Override + public void postPutAllSend(DistributedPutAllOperation putallO, VersionedObjectList successfulPuts) { + final boolean isDebugEnabled = logger.isDebugEnabled(); + + if (cache.isCacheAtShutdownAll()) { + throw new CacheClosedException("Cache is shutting down"); + } + + try { + final long startTime = PartitionedRegionStats.startTime(); + // build all the msgs by bucketid + HashMap prMsgMap = putallO.createPRMessages(); + PutAllPartialResult partialKeys = new PutAllPartialResult(putallO.putAllDataSize); + + // clear the successfulPuts list since we're actually doing the puts here + // and the basicPutAll work was just a way to build the DPAO object + Map keyToVersionMap = new HashMap(successfulPuts.size()); + successfulPuts.clearVersions(); + Iterator itor = prMsgMap.entrySet().iterator(); + while (itor.hasNext()) { + Map.Entry mapEntry = (Map.Entry)itor.next(); + Integer bucketId = (Integer)mapEntry.getKey(); + PutAllPRMessage prMsg =(PutAllPRMessage)mapEntry.getValue(); + checkReadiness(); + long then = 0; + if (isDebugEnabled) { + then = System.currentTimeMillis(); + } + try { + VersionedObjectList versions = sendMsgByBucket(bucketId, prMsg); + if (versions.size() > 0) { + partialKeys.addKeysAndVersions(versions); + versions.saveVersions(keyToVersionMap); + } else if (!this.concurrencyChecksEnabled) { // no keys returned if not versioned + Set keys = prMsg.getKeys(); + partialKeys.addKeys(keys); + } + } catch (PutAllPartialResultException pre) { + // sendMsgByBucket applied partial keys + if (isDebugEnabled) { + logger.debug("PR.postPutAll encountered PutAllPartialResultException, ",pre); + } + partialKeys.consolidate(pre.getResult()); + } catch (Exception ex) { + // If failed at other exception + if (isDebugEnabled) { + logger.debug("PR.postPutAll encountered exception at sendMsgByBucket, ",ex); + } + EntryEventImpl firstEvent = prMsg.getFirstEvent(this); + try { + partialKeys.saveFailedKey(firstEvent.getKey(), ex); + } finally { + firstEvent.release(); + } + } + if (isDebugEnabled) { + long now = System.currentTimeMillis(); + if ((now - then) >= 10000) { + logger.debug("PR.sendMsgByBucket took "+(now-then)+" ms"); + } + } + } + this.prStats.endPutAll(startTime); + if (!keyToVersionMap.isEmpty()) { + for (Iterator it=successfulPuts.getKeys().iterator(); it.hasNext(); ) { + successfulPuts.addVersion(keyToVersionMap.get(it.next())); + } + keyToVersionMap.clear(); + } + + if (partialKeys.hasFailure()) { + logger.info(LocalizedMessage.create(LocalizedStrings.Region_PutAll_Applied_PartialKeys_0_1, + new Object[] {getFullPath(), partialKeys})); + if (putallO.isBridgeOperation()) { + if (partialKeys.getFailure() instanceof CancelException) { + throw (CancelException)partialKeys.getFailure(); + } else { + throw new PutAllPartialResultException(partialKeys); + } + } else { + if (partialKeys.getFailure() instanceof RuntimeException) { + throw (RuntimeException)partialKeys.getFailure(); + } else { + throw new RuntimeException(partialKeys.getFailure()); + } + } + } + } finally { + /* +// TODO XD OFFHEAP MERGE: do we have any events that need freeOffHeapReferences + for (PutAllPRMessage.PutAllResponse resp : responses) { + PutAllPRMessage.PRMsgResponseContext ctx = resp.getContextObject(); + if (ctx != null) { + EntryEventImpl e = ctx.getEvent(); + if (e != null) { + e.release(); + } + } + } + */ + } + } + @Override + public void postRemoveAllSend(DistributedRemoveAllOperation op, VersionedObjectList successfulOps) { + final boolean isDebugEnabled = logger.isDebugEnabled(); + + if (cache.isCacheAtShutdownAll()) { + throw new CacheClosedException("Cache is shutting down"); + } + + final long startTime = PartitionedRegionStats.startTime(); + // build all the msgs by bucketid + HashMap prMsgMap = op.createPRMessages(); + PutAllPartialResult partialKeys = new PutAllPartialResult(op.removeAllDataSize); + + // clear the successfulOps list since we're actually doing the removes here + // and the basicRemoveAll work was just a way to build the "op" object + Map keyToVersionMap = new HashMap(successfulOps.size()); + successfulOps.clearVersions(); + Iterator> itor = prMsgMap.entrySet().iterator(); + while (itor.hasNext()) { + Map.Entry mapEntry = itor.next(); + Integer bucketId = (Integer)mapEntry.getKey(); + RemoveAllPRMessage prMsg = mapEntry.getValue(); + checkReadiness(); + long then = 0; + if (isDebugEnabled) { + then = System.currentTimeMillis(); + } + try { + VersionedObjectList versions = sendMsgByBucket(bucketId, prMsg); + if (versions.size() > 0) { + partialKeys.addKeysAndVersions(versions); + versions.saveVersions(keyToVersionMap); + } else if (!this.concurrencyChecksEnabled) { // no keys returned if not versioned + Set keys = prMsg.getKeys(); + partialKeys.addKeys(keys); + } + } catch (PutAllPartialResultException pre) { + // sendMsgByBucket applied partial keys + if (isDebugEnabled) { + logger.debug("PR.postRemoveAll encountered BulkOpPartialResultException, ",pre); + } + partialKeys.consolidate(pre.getResult()); + } catch (Exception ex) { + // If failed at other exception + if (isDebugEnabled) { + logger.debug("PR.postRemoveAll encountered exception at sendMsgByBucket, ",ex); + } + EntryEventImpl firstEvent = prMsg.getFirstEvent(this); + try { + partialKeys.saveFailedKey(firstEvent.getKey(), ex); + } finally { + firstEvent.release(); + } + } + if (isDebugEnabled) { + long now = System.currentTimeMillis(); + if ((now - then) >= 10000) { + logger.debug("PR.sendMsgByBucket took {} ms", (now-then)); + } + } + } + this.prStats.endRemoveAll(startTime); + if (!keyToVersionMap.isEmpty()) { + for (Iterator it=successfulOps.getKeys().iterator(); it.hasNext(); ) { + successfulOps.addVersion(keyToVersionMap.get(it.next())); + } + keyToVersionMap.clear(); + } + + if (partialKeys.hasFailure()) { + logger.info(LocalizedMessage.create(LocalizedStrings.Region_PutAll_Applied_PartialKeys_0_1, + new Object[] {getFullPath(), partialKeys})); + if (op.isBridgeOperation()) { + if (partialKeys.getFailure() instanceof CancelException) { + throw (CancelException)partialKeys.getFailure(); + } else { + throw new PutAllPartialResultException(partialKeys); + } + } else { + if (partialKeys.getFailure() instanceof RuntimeException) { + throw (RuntimeException)partialKeys.getFailure(); + } else { + throw new RuntimeException(partialKeys.getFailure()); + } + } + } + } + + /* If failed after retries, it will throw PartitionedRegionStorageException, no need for return value */ + private VersionedObjectList sendMsgByBucket(final Integer bucketId, PutAllPRMessage prMsg) + { + final boolean isDebugEnabled = logger.isDebugEnabled(); + + // retry the put remotely until it finds the right node managing the bucket + EntryEventImpl event = prMsg.getFirstEvent(this); + try { + RetryTimeKeeper retryTime = null; + InternalDistributedMember currentTarget = getNodeForBucketWrite(bucketId.intValue(), null); + if (isDebugEnabled) { + logger.debug("PR.sendMsgByBucket:bucket {}'s currentTarget is {}", bucketId, currentTarget); + } + + long timeOut = 0; + int count = 0; + for (;;) { + switch (count) { + case 0: + // Note we don't check for DM cancellation in common case. + // First time. Assume success, keep going. + break; + case 1: + this.cache.getCancelCriterion().checkCancelInProgress(null); + // Second time (first failure). Calculate timeout and keep going. + timeOut = System.currentTimeMillis() + this.retryTimeout; + break; + default: + this.cache.getCancelCriterion().checkCancelInProgress(null); + // test for timeout + long timeLeft = timeOut - System.currentTimeMillis(); + if (timeLeft < 0) { + PRHARedundancyProvider.timedOut(this, null, null, "update an entry", this.retryTimeout); + // NOTREACHED + } + + // Didn't time out. Sleep a bit and then continue + boolean interrupted = Thread.interrupted(); + try { + Thread.sleep(PartitionedRegionHelper.DEFAULT_WAIT_PER_RETRY_ITERATION); + } + catch (InterruptedException e) { + interrupted = true; + } + finally { + if (interrupted) { + Thread.currentThread().interrupt(); + } + } + break; + } // switch + count ++; + + if (currentTarget == null) { // pick target + checkReadiness(); + if (retryTime == null) { + retryTime = new RetryTimeKeeper(this.retryTimeout); + } + + currentTarget = waitForNodeOrCreateBucket(retryTime, event, bucketId); + if (isDebugEnabled) { + logger.debug("PR.sendMsgByBucket: event size is {}, new currentTarget is {}", getEntrySize(event), currentTarget); + } + + // It's possible this is a GemFire thread e.g. ServerConnection + // which got to this point because of a distributed system shutdown or + // region closure which uses interrupt to break any sleep() or wait() calls + // e.g. waitForPrimary or waitForBucketRecovery in which case throw exception + checkShutdown(); + continue; + } // pick target + + try { + return tryToSendOnePutAllMessage(prMsg,currentTarget); + } + catch (ForceReattemptException prce) { + checkReadiness(); + InternalDistributedMember lastTarget = currentTarget; + if (retryTime == null) { + retryTime = new RetryTimeKeeper(this.retryTimeout); + } + currentTarget = getNodeForBucketWrite(bucketId.intValue(), retryTime); + if (isDebugEnabled) { + logger.debug("PR.sendMsgByBucket: Old target was {}, Retrying", lastTarget, currentTarget); + } + if (lastTarget.equals(currentTarget)) { + if (isDebugEnabled) { + logger.debug("PR.sendMsgByBucket: Retrying at the same node:{} due to {}", currentTarget, prce.getMessage()); + } + if (retryTime.overMaximum()) { + PRHARedundancyProvider.timedOut(this, null, null, "update an entry", this.retryTimeout); + // NOTREACHED + } + retryTime.waitToRetryNode(); + } + event.setPossibleDuplicate(true); + if (prMsg != null) { + prMsg.setPossibleDuplicate(true); + } + } + catch (PrimaryBucketException notPrimary) { + if (isDebugEnabled) { + logger.debug("Bucket {} on Node {} not primnary", notPrimary.getLocalizedMessage(), currentTarget); + } + getRegionAdvisor().notPrimary(bucketId.intValue(), currentTarget); + if (retryTime == null) { + retryTime = new RetryTimeKeeper(this.retryTimeout); + } + currentTarget = getNodeForBucketWrite(bucketId.intValue(), retryTime); + } + catch (DataLocationException dle) { + if (isDebugEnabled) { + logger.debug("DataLocationException processing putAll", dle); + } + throw new TransactionException(dle); + } + + // It's possible this is a GemFire thread e.g. ServerConnection + // which got to this point because of a distributed system shutdown or + // region closure which uses interrupt to break any sleep() or wait() + // calls + // e.g. waitForPrimary or waitForBucketRecovery in which case throw + // exception + checkShutdown(); + + // If we get here, the attempt failed... + if (count == 1) { + this.prStats.incPutAllMsgsRetried(); + } + this.prStats.incPutAllRetries(); + } // for + } finally { + if (event != null) { + event.release(); + } + } + // NOTREACHED + } + + /* If failed after retries, it will throw PartitionedRegionStorageException, no need for return value */ + private VersionedObjectList sendMsgByBucket(final Integer bucketId, RemoveAllPRMessage prMsg) + { + // retry the put remotely until it finds the right node managing the bucket + EntryEventImpl event = prMsg.getFirstEvent(this); + RetryTimeKeeper retryTime = null; + InternalDistributedMember currentTarget = getNodeForBucketWrite(bucketId.intValue(), null); + if (logger.isDebugEnabled()) { + logger.debug("PR.sendMsgByBucket:bucket {}'s currentTarget is {}", bucketId, currentTarget); + } + + long timeOut = 0; + int count = 0; + for (;;) { + switch (count) { + case 0: + // Note we don't check for DM cancellation in common case. + // First time. Assume success, keep going. + break; + case 1: + this.cache.getCancelCriterion().checkCancelInProgress(null); + // Second time (first failure). Calculate timeout and keep going. + timeOut = System.currentTimeMillis() + this.retryTimeout; + break; + default: + this.cache.getCancelCriterion().checkCancelInProgress(null); + // test for timeout + long timeLeft = timeOut - System.currentTimeMillis(); + if (timeLeft < 0) { + PRHARedundancyProvider.timedOut(this, null, null, "update an entry", this.retryTimeout); + // NOTREACHED + } + + // Didn't time out. Sleep a bit and then continue + boolean interrupted = Thread.interrupted(); + try { + Thread.sleep(PartitionedRegionHelper.DEFAULT_WAIT_PER_RETRY_ITERATION); + } + catch (InterruptedException e) { + interrupted = true; + } + finally { + if (interrupted) { + Thread.currentThread().interrupt(); + } + } + break; + } // switch + count ++; + + if (currentTarget == null) { // pick target + checkReadiness(); + if (retryTime == null) { + retryTime = new RetryTimeKeeper(this.retryTimeout); + } + + currentTarget = waitForNodeOrCreateBucket(retryTime, event, bucketId); + if (logger.isDebugEnabled()) { + logger.debug("PR.sendMsgByBucket: event size is {}, new currentTarget is {}", getEntrySize(event), currentTarget); + } + + // It's possible this is a GemFire thread e.g. ServerConnection + // which got to this point because of a distributed system shutdown or + // region closure which uses interrupt to break any sleep() or wait() calls + // e.g. waitForPrimary or waitForBucketRecovery in which case throw exception + checkShutdown(); + continue; + } // pick target + + try { + return tryToSendOneRemoveAllMessage(prMsg,currentTarget); + } + catch (ForceReattemptException prce) { + checkReadiness(); + InternalDistributedMember lastTarget = currentTarget; + if (retryTime == null) { + retryTime = new RetryTimeKeeper(this.retryTimeout); + } + currentTarget = getNodeForBucketWrite(bucketId.intValue(), retryTime); + if (logger.isTraceEnabled()) { + logger.trace("PR.sendMsgByBucket: Old target was {}, Retrying {}", lastTarget, currentTarget); + } + if (lastTarget.equals(currentTarget)) { + if (logger.isDebugEnabled()) { + logger.debug("PR.sendMsgByBucket: Retrying at the same node:{} due to {}", currentTarget, prce.getMessage()); + } + if (retryTime.overMaximum()) { + PRHARedundancyProvider.timedOut(this, null, null, "update an entry", this.retryTimeout); + // NOTREACHED + } + retryTime.waitToRetryNode(); + } + event.setPossibleDuplicate(true); + if (prMsg != null) { + prMsg.setPossibleDuplicate(true); + } + } + catch (PrimaryBucketException notPrimary) { + if (logger.isDebugEnabled()) { + logger.debug("Bucket {} on Node {} not primary", notPrimary.getLocalizedMessage(), currentTarget); + } + getRegionAdvisor().notPrimary(bucketId.intValue(), currentTarget); + if (retryTime == null) { + retryTime = new RetryTimeKeeper(this.retryTimeout); + } + currentTarget = getNodeForBucketWrite(bucketId.intValue(), retryTime); + } + catch (DataLocationException dle) { + if (logger.isDebugEnabled()) { + logger.debug("DataLocationException processing putAll",dle); + } + throw new TransactionException(dle); + } + + // It's possible this is a GemFire thread e.g. ServerConnection + // which got to this point because of a distributed system shutdown or + // region closure which uses interrupt to break any sleep() or wait() + // calls + // e.g. waitForPrimary or waitForBucketRecovery in which case throw + // exception + checkShutdown(); + + // If we get here, the attempt failed... + if (count == 1) { + this.prStats.incRemoveAllMsgsRetried(); + } + this.prStats.incRemoveAllRetries(); + } // for + // NOTREACHED + } + + public VersionedObjectList tryToSendOnePutAllMessage(PutAllPRMessage prMsg,InternalDistributedMember currentTarget) throws DataLocationException { + boolean putResult = false; + VersionedObjectList versions = null; + final boolean isLocal = (this.localMaxMemory > 0) && currentTarget.equals(getMyId()); + if (isLocal) { // local + // It might throw retry exception when one key failed + // InternalDS has to be set for each msg + prMsg.initMessage(this, null, false, null); + putResult = prMsg.doLocalPutAll(this, this.getDistributionManager().getDistributionManagerId(), 0L); + versions = prMsg.getVersions(); + } else { + PutAllPRMessage.PutAllResponse response = (PutAllPRMessage.PutAllResponse)prMsg.send(currentTarget, this); + PutAllPRMessage.PutAllResult pr = null; + if (response != null) { + this.prStats.incPartitionMessagesSent(); + try { + pr = response.waitForResult(); + putResult = pr.returnValue; + versions = pr.versions; + } + catch (RegionDestroyedException rde) { + if (logger.isDebugEnabled()) { + logger.debug("prMsg.send: caught RegionDestroyedException", rde); + } + throw new RegionDestroyedException(toString(), getFullPath()); + } + catch (CacheException ce) { + // Fix for bug 36014 + throw new PartitionedRegionDistributionException("prMsg.send on " + + currentTarget + " failed", ce); + } + } else { + putResult = true; // follow the same behavior of putRemotely() + } + } + + if (!putResult) { + // retry exception when msg failed in waitForResult() + ForceReattemptException fre = new ForceReattemptException( + "false result in PutAllMessage.send - retrying"); + fre.setHash(0); + throw fre; + } + return versions; + } + + public VersionedObjectList tryToSendOneRemoveAllMessage(RemoveAllPRMessage prMsg,InternalDistributedMember currentTarget) throws DataLocationException { + boolean putResult = false; + VersionedObjectList versions = null; + final boolean isLocal = (this.localMaxMemory > 0) && currentTarget.equals(getMyId()); + if (isLocal) { // local + // It might throw retry exception when one key failed + // InternalDS has to be set for each msg + prMsg.initMessage(this, null, false, null); + putResult = prMsg.doLocalRemoveAll(this, this.getDistributionManager().getDistributionManagerId(), true); + versions = prMsg.getVersions(); + } else { + RemoveAllPRMessage.RemoveAllResponse response = (RemoveAllPRMessage.RemoveAllResponse)prMsg.send(currentTarget, this); + RemoveAllPRMessage.RemoveAllResult pr = null; + if (response != null) { + this.prStats.incPartitionMessagesSent(); + try { + pr = response.waitForResult(); + putResult = pr.returnValue; + versions = pr.versions; + } + catch (RegionDestroyedException rde) { + if (logger.isDebugEnabled()) { + logger.debug("prMsg.send: caught RegionDestroyedException", rde); + } + throw new RegionDestroyedException(toString(), getFullPath()); + } + catch (CacheException ce) { + // Fix for bug 36014 + throw new PartitionedRegionDistributionException("prMsg.send on " + + currentTarget + " failed", ce); + } + } else { + putResult = true; // follow the same behavior of putRemotely() + } + } + + if (!putResult) { + // retry exception when msg failed in waitForResult() + ForceReattemptException fre = new ForceReattemptException( + "false result in PutAllMessage.send - retrying"); + fre.setHash(0); + throw fre; + } + return versions; + } + +/** + * Performs the {@link Operation#UPDATE put} operation in the bucket on the + * remote VM and invokes "put" callbacks + * + * @param targetNode + * the VM in whose {@link PartitionedRegionDataStore} contains the + * bucket + * @param bucketId + * the identity of the bucket + * @param event + * the event that contains the key and value + * @param lastModified + * the timestamp that the entry was modified + * @param ifNew + * true=can create a new key false=can't create a new key + * @param ifOld + * true=can update existing entry false=can't update existing + * entry + * @param expectedOldValue + * only succeed if old value is equal to this value. If null, + * then doesn't matter what old value is. If INVALID token, + * must be INVALID. + * @see LocalRegion#virtualPut(EntryEventImpl, boolean, boolean, Object, boolean, long, + * boolean) + * @return false if ifNew is true and there is an existing key, or ifOld is + * true and there is no existing entry; otherwise return true. + * + */ + private boolean putInBucket(final InternalDistributedMember targetNode, + final Integer bucketId, + final EntryEventImpl event, + final boolean ifNew, + boolean ifOld, + Object expectedOldValue, + boolean requireOldValue, + final long lastModified) { + if (logger.isDebugEnabled()) { + logger.debug("putInBucket: {} ({}) to {} to bucketId={} retry={} ms", + event.getKey(), event.getKey().hashCode(), targetNode, bucketStringForLogs(bucketId.intValue()), retryTimeout); + } + // retry the put remotely until it finds the right node managing the bucket + + RetryTimeKeeper retryTime = null; + boolean result = false; + InternalDistributedMember currentTarget = targetNode; + long timeOut = 0; + int count = 0; + for (;;) { + switch (count) { + case 0: + // Note we don't check for DM cancellation in common case. + // First time. Assume success, keep going. + break; + case 1: + this.cache.getCancelCriterion().checkCancelInProgress(null); + // Second time (first failure). Calculate timeout and keep going. + timeOut = System.currentTimeMillis() + this.retryTimeout; + break; + default: + this.cache.getCancelCriterion().checkCancelInProgress(null); + // test for timeout + long timeLeft = timeOut - System.currentTimeMillis(); + if (timeLeft < 0) { + PRHARedundancyProvider.timedOut(this, null, null, "update an entry", this.retryTimeout); + // NOTREACHED + } + + // Didn't time out. Sleep a bit and then continue + boolean interrupted = Thread.interrupted(); + try { + Thread.sleep(PartitionedRegionHelper.DEFAULT_WAIT_PER_RETRY_ITERATION); + } + catch (InterruptedException e) { + interrupted = true; + } + finally { + if (interrupted) { + Thread.currentThread().interrupt(); + } + } + break; + } // switch + count ++; + + if (currentTarget == null) { // pick target + checkReadiness(); + if (retryTime == null) { + retryTime = new RetryTimeKeeper(this.retryTimeout); + } + currentTarget = waitForNodeOrCreateBucket(retryTime, event, bucketId); + + // It's possible this is a GemFire thread e.g. ServerConnection + // which got to this point because of a distributed system shutdown or + // region closure which uses interrupt to break any sleep() or wait() calls + // e.g. waitForPrimary or waitForBucketRecovery in which case throw exception + checkShutdown(); + continue; + } // pick target + + try { + final boolean isLocal = (this.localMaxMemory > 0) && currentTarget.equals(getMyId()); + if (logger.isDebugEnabled()) { + logger.debug("putInBucket: currentTarget = {}; ifNew = {}; ifOld = {}; isLocal = {}", + currentTarget, ifNew, ifOld, isLocal); + } + checkIfAboveThreshold(event); + if (isLocal) { +// final boolean cacheWrite = !event.isOriginRemote() +// && !event.isNetSearch(); +// if (cacheWrite) { +// doCacheWriteBeforePut(event, ifNew); +// } + event.setInvokePRCallbacks(true); + long start = this.prStats.startPutLocal(); + try { + final BucketRegion br = this.dataStore.getInitializedBucketForId(event.getKey(), bucketId); + // Local updates should insert a serialized (aka CacheDeserializable) object + // given that most manipulation of values is remote (requiring serialization to send). + // But... function execution always implies local manipulation of + // values so keeping locally updated values in Object form should be more efficient. + if (! DistributionManager.isFunctionExecutionThread.get().booleanValue()) { + // TODO: this condition may not help since BucketRegion.virtualPut calls forceSerialized + br.forceSerialized(event); + } + if (ifNew) { + result = this.dataStore.createLocally(br, + event, + ifNew, + ifOld, + requireOldValue, + lastModified); + } + else { + result = this.dataStore.putLocally(br, + event, + ifNew, + ifOld, + expectedOldValue, + requireOldValue, + lastModified); + } + } finally { + this.prStats.endPutLocal(start); + } + } // local + else { // remote + // no need to perform early serialization (and create an un-necessary byte array) + // sending the message performs that work. + long start = this.prStats.startPutRemote(); + try { + if (ifNew) { + result = createRemotely(currentTarget, + bucketId, + event, + requireOldValue); + } + else { + result = putRemotely(currentTarget, + event, + ifNew, + ifOld, + expectedOldValue, + requireOldValue); + if (!requireOldValue) { + // make sure old value is set to NOT_AVAILABLE token + event.oldValueNotAvailable(); + } + } + } finally { + this.prStats.endPutRemote(start); + } + } // remote + + if (!result && !ifOld && !ifNew) { + Assert.assertTrue(!isLocal); + ForceReattemptException fre = new ForceReattemptException(LocalizedStrings.PartitionedRegion_FALSE_RESULT_WHEN_IFNEW_AND_IFOLD_IS_UNACCEPTABLE_RETRYING.toLocalizedString()); + fre.setHash(event.getKey().hashCode()); + throw fre; + } + + return result; + } catch (ConcurrentCacheModificationException e) { + if (logger.isDebugEnabled()) { + logger.debug("putInBucket: caught concurrent cache modification exception", e); + } + event.isConcurrencyConflict(true); + + if (logger.isTraceEnabled()) { + logger.trace("ConcurrentCacheModificationException received for putInBucket for bucketId: {}{}{} for event: {} No reattampt is done, returning from here", + getPRId(), BUCKET_ID_SEPARATOR, bucketId, event); + } + return result; + } + catch (ForceReattemptException prce) { + prce.checkKey(event.getKey()); + if (logger.isDebugEnabled()) { + logger.debug("putInBucket: Got ForceReattemptException for {} on VM {} for node {}{}{} for bucket = {}", + this, this.getMyId(), currentTarget, getPRId(), BUCKET_ID_SEPARATOR, bucketId, prce); + logger.debug("putInBucket: count={}", count); + } + checkReadiness(); + InternalDistributedMember lastTarget = currentTarget; + if (retryTime == null) { + retryTime = new RetryTimeKeeper(this.retryTimeout); + } + currentTarget = getNodeForBucketWrite(bucketId.intValue(), retryTime); + if (lastTarget.equals(currentTarget)) { + if (retryTime.overMaximum()) { + PRHARedundancyProvider.timedOut(this, null, null, "update an entry", this.retryTimeout); + // NOTREACHED + } + retryTime.waitToRetryNode(); + } + event.setPossibleDuplicate(true); + } + catch (PrimaryBucketException notPrimary) { + if (logger.isDebugEnabled()) { + logger.debug("Bucket {} on Node {} not primary", notPrimary.getLocalizedMessage(), currentTarget); + } + getRegionAdvisor().notPrimary(bucketId.intValue(), currentTarget); + if (retryTime == null) { + retryTime = new RetryTimeKeeper(this.retryTimeout); + } + currentTarget = getNodeForBucketWrite(bucketId.intValue(), retryTime); + } + + // It's possible this is a GemFire thread e.g. ServerConnection + // which got to this point because of a distributed system shutdown or + // region closure which uses interrupt to break any sleep() or wait() + // calls + // e.g. waitForPrimary or waitForBucketRecovery in which case throw + // exception + checkShutdown(); + + // If we get here, the attempt failed... + if (count == 1) { + if (ifNew) { + this.prStats.incCreateOpsRetried(); + } + else { + this.prStats.incPutOpsRetried(); + } + } + if (event.getOperation().isCreate()) { + this.prStats.incCreateRetries(); + } + else { + this.prStats.incPutRetries(); + } + + if (logger.isDebugEnabled()) { + logger.debug("putInBucket for bucketId = {} failed (attempt # {} ({} ms left), retrying with node {}", + bucketStringForLogs(bucketId.intValue()), count, (timeOut - System.currentTimeMillis()), currentTarget); + } + } // for + + // NOTREACHED + } + + + /** + * Find an existing live Node that owns the bucket, or create the bucket and + * return one of its owners. + * + * @param retryTime + * the RetryTimeKeeper to track retry times + * @param event + * the event used to get the entry size in the event a new + * bucket should be created + * @param bucketId + * the identity of the bucket should it be created + * @return a Node which contains the bucket, potentially null + */ + private InternalDistributedMember waitForNodeOrCreateBucket( + RetryTimeKeeper retryTime, EntryEventImpl event, Integer bucketId) + { + InternalDistributedMember newNode; + if (retryTime.overMaximum()) { + PRHARedundancyProvider.timedOut(this, null, null, "allocate a bucket", retryTime.getRetryTime()); + // NOTREACHED + } + + retryTime.waitForBucketsRecovery(); + newNode = getNodeForBucketWrite(bucketId.intValue(), retryTime); + if (newNode == null) { + newNode = createBucket(bucketId.intValue(), getEntrySize(event), + retryTime); + } + + return newNode; + } + + /** + * Serialize the key and value early (prior to creating the message) to gather + * the size of the entry Assumes the new value from the + * EntryEventImpl is not serialized + * + * @return sum of bytes as reported by + * {@link CachedDeserializable#getSizeInBytes()} + */ + // private int serializeValue(EntryEventImpl event) + // { + // TODO serialize the key as well + // this code used to make the following call: + // Object val = event.getNewValue(); + // which deserializes the value and we don't want to do that. + // int numBytes = 0; + // Object val = event.getNewValue(); + // if (val == null) { + // // event.setSerializedNewValue(new byte[] {DataSerializer.NULL}); + // return 0; + // } + // if (val instanceof byte[]) { + // byte[] v = (byte[]) val; + // numBytes = v.length; + // } else { + // if (event.getSerializedNewValue() == null) { + // event.setSerializedNewValue(EntryEventImpl.serialize(event.getNewValue())); + // } + // numBytes = getEntrySize(event); + // } + // return numBytes; + // } + /** + * Get the serialized size of an EntryEventImpl + * + * @param eei + * the entry from whcih to fetch the size + * @return the size of the serialized entry + */ + private static int getEntrySize(EntryEventImpl eei) { + @Unretained final Object v = eei.getRawNewValue(); + if (v instanceof CachedDeserializable) { + return ((CachedDeserializable)v).getSizeInBytes(); + } + return 0; + } + + // /** + // * Gets the Node that is managing a specific bucketId. This does consider + // the + // * failed nodes. + // * + // * @param bucketId + // * identifier for bucket + // * @param failedNodeList + // * of all the failedNodes to avoid these failed nodes to be picked in + // * the next node selection. + // * @return the Node managing the bucket + // */ + // private Node getNodeForBucketExcludeFailedNode(final Long bucketId, + // final List failedNodeList) { + // throw new IllegalStateException("bucket2node should not be used"); + // } + + public InternalDistributedMember getOrCreateNodeForBucketWrite(int bucketId, final RetryTimeKeeper snoozer) { + InternalDistributedMember targetNode = getNodeForBucketWrite(bucketId, snoozer); + if(targetNode != null) { + return targetNode; + } + + try { + return createBucket(bucketId, 0, null); + } + catch (PartitionedRegionStorageException e) { + // try not to throw a PRSE if the cache is closing or this region was + // destroyed during createBucket() (bug 36574) + this.checkReadiness(); + if (this.cache.isClosed()) { + throw new RegionDestroyedException(toString(), getFullPath()); + } + throw e; + } + } + /** + * Fetch the primary Node returning if the redundancy for the Node is satisfied + * @param bucketId the identity of the bucket + * @param snoozer a RetryTimeKeeper to track how long we may wait until the bucket is ready + * @return the primary member's id or null if there is no storage + */ + public InternalDistributedMember getNodeForBucketWrite(int bucketId, + final RetryTimeKeeper snoozer) { + final boolean isDebugEnabled = logger.isDebugEnabled(); + +// InternalDistributedSystem ids = (InternalDistributedSystem)this.cache.getDistributedSystem(); + RetryTimeKeeper localSnoozer = snoozer; + // Prevent early access to buckets that are not completely created/formed + // and + // prevent writing to a bucket whose redundancy is sub par + while (minimumWriteRedundancy > 0 && getRegionAdvisor().getBucketRedundancy(bucketId) < this.minimumWriteRedundancy) { + this.cache.getCancelCriterion().checkCancelInProgress(null); + + // First check to see if there is any storage assigned TODO: redundant check to while condition + if ( ! getRegionAdvisor().isStorageAssignedForBucket(bucketId, this.minimumWriteRedundancy, false)) { + if (isDebugEnabled) { + logger.debug("No storage assigned for bucket ({}{}{}) writer", getPRId(), BUCKET_ID_SEPARATOR, bucketId); + } + return null; // No bucket for this key + } + + if (localSnoozer == null) { + localSnoozer = new RetryTimeKeeper(this.retryTimeout); + } + + if (!localSnoozer.overMaximum()) { + localSnoozer.waitForBucketsRecovery(); + } + else { + int red = getRegionAdvisor().getBucketRedundancy(bucketId); + final TimeoutException noTime = new TimeoutException( + LocalizedStrings.PartitionedRegion_ATTEMPT_TO_ACQUIRE_PRIMARY_NODE_FOR_WRITE_ON_BUCKET_0_TIMED_OUT_IN_1_MS_CURRENT_REDUNDANCY_2_DOES_NOT_SATISFY_MINIMUM_3 + .toLocalizedString(new Object[] { bucketStringForLogs(bucketId), Integer.valueOf(localSnoozer.getRetryTime()), + Integer.valueOf(red), Integer.valueOf(this.minimumWriteRedundancy) })); + checkReadiness(); + throw noTime; + } + } + // Possible race with loss of redundancy at this point. + // This loop can possibly create a soft hang if no primary is ever selected. + // This is preferable to returning null since it will prevent obtaining the + // bucket lock for bucket creation. + return waitForNoStorageOrPrimary(bucketId, "write"); + } + + + + /** + * wait until there is a primary or there is no storage + * @param bucketId the id of the target bucket + * @param readOrWrite a string used in log messages + * @return the primary member's id or null if there is no storage + */ + private InternalDistributedMember waitForNoStorageOrPrimary(int bucketId, + String readOrWrite) { + boolean isInterrupted = false; + try { + for (;;) { + isInterrupted = Thread.interrupted() || isInterrupted; + InternalDistributedMember d = getBucketPrimary(bucketId); + if (d != null) { + return d; // success! + } + else { + // go around the loop again + if (logger.isDebugEnabled()) { + logger.debug("No primary node found for bucket ({}{}{}) {}", getPRId(), BUCKET_ID_SEPARATOR, bucketId, readOrWrite); + } + } + if (!getRegionAdvisor().isStorageAssignedForBucket(bucketId)) { + if (logger.isDebugEnabled()) { + logger.debug("No storage while waiting for primary for bucket ({}{}{}) {}", getPRId(), BUCKET_ID_SEPARATOR, bucketId, readOrWrite); + } + return null; // No bucket for this key + } + checkShutdown(); + } + } + finally { + if (isInterrupted) { + Thread.currentThread().interrupt(); + } + } + } + + /** + * override the one in LocalRegion since we don't need to do getDeserialized. + */ + @Override + public Object get(Object key, Object aCallbackArgument, + boolean generateCallbacks, boolean disableCopyOnRead, boolean preferCD, + ClientProxyMembershipID requestingClient, + EntryEventImpl clientEvent, boolean returnTombstones, boolean allowReadFromHDFS) throws TimeoutException, CacheLoaderException + { + validateKey(key); + validateCallbackArg(aCallbackArgument); + checkReadiness(); + checkForNoAccess(); + discoverJTA(); + CachePerfStats stats = getCachePerfStats(); + long start = stats.startGet(); + boolean miss = true; + try { + // if scope is local and there is no loader, then + // don't go further to try and get value + Object value = getDataView().findObject(getKeyInfo(key, aCallbackArgument), this, true/*isCreate*/, generateCallbacks, + null /*no local value*/, disableCopyOnRead, preferCD, requestingClient, clientEvent, returnTombstones, allowReadFromHDFS); + if (value != null && !Token.isInvalid(value)) { + miss = false; + } + return value; + } + finally { + stats.endGet(start, miss); + } + } + + public InternalDistributedMember getOrCreateNodeForBucketRead(int bucketId) { + InternalDistributedMember targetNode = getNodeForBucketRead(bucketId); + if(targetNode != null) { + return targetNode; + } + try { + return createBucket(bucketId, 0, null); + } + catch (PartitionedRegionStorageException e) { + // try not to throw a PRSE if the cache is closing or this region was + // destroyed during createBucket() (bug 36574) + this.checkReadiness(); + if (this.cache.isClosed()) { + throw new RegionDestroyedException(toString(), getFullPath()); + } + throw e; + } + } + + /** + * Gets the Node for reading a specific bucketId. This method gives + * priority to local node to speed up operation and avoid remote calls. + * + * @param bucketId + * identifier for bucket + * + * @return the primary member's id or null if there is no storage + */ + public InternalDistributedMember getNodeForBucketRead(int bucketId) { + // Wait until there is storage + InternalDistributedMember primary = waitForNoStorageOrPrimary(bucketId, + "read"); + if (primary == null) { + return null; + } + if (isTX() || this.hdfsStoreName != null) { + return getNodeForBucketWrite(bucketId, null); + } + InternalDistributedMember result = getRegionAdvisor().getPreferredNode(bucketId); + return result; + } + + /** + * Gets the Node for reading or performing a load from a specific bucketId. + * @return the member from which to read or load + * @since 5.7 + */ + private InternalDistributedMember getNodeForBucketReadOrLoad(int bucketId) { + InternalDistributedMember targetNode; + if (!this.haveCacheLoader && (this.hdfsStoreName == null)) { + targetNode = getNodeForBucketRead(bucketId); + } + else { + targetNode = getNodeForBucketWrite(bucketId, null /* retryTimeKeeper */); + } + if (targetNode == null) { + this.checkShutdown(); // Fix for bug#37207 + targetNode = createBucket(bucketId, 0 /* size */, null /* retryTimeKeeper */); + } + return targetNode; + } + + /** + * Puts the key/value pair into the remote target that is managing the key's + * bucket. + * + * @param recipient + * the member to receive the message + * @param event + * the event prompting this action + * @param ifNew + * the mysterious ifNew parameter + * @param ifOld + * the mysterious ifOld parameter + * @return whether the operation succeeded + * @throws PrimaryBucketException + * if the remote bucket was not the primary + * @throws ForceReattemptException + * if the peer is no longer available + */ + public boolean putRemotely(final DistributedMember recipient, + final EntryEventImpl event, + boolean ifNew, + boolean ifOld, + Object expectedOldValue, + boolean requireOldValue) + throws PrimaryBucketException, ForceReattemptException { + // boolean forceAck = basicGetWriter() != null + // || getDistributionAdvisor().adviseNetWrite().size() > 0; + long eventTime = event.getEventTime(0L); + PutMessage.PutResponse response = + (PutMessage.PutResponse)PutMessage.send(recipient, + this, + event, + eventTime, + ifNew, + ifOld, + expectedOldValue, + requireOldValue); + PutResult pr = null; + if (response != null) { + this.prStats.incPartitionMessagesSent(); + try { + pr = response.waitForResult(); + event.setOperation(pr.op); + event.setVersionTag(pr.versionTag); + if (requireOldValue) { + event.setOldValue(pr.oldValue, true); + } + return pr.returnValue; + } + catch (RegionDestroyedException rde) { + if (logger.isDebugEnabled()) { + logger.debug("putRemotely: caught RegionDestroyedException", rde); + } + throw new RegionDestroyedException(toString(), getFullPath()); + } catch(TransactionException te) { + throw te; + } + catch (CacheException ce) { + // Fix for bug 36014 + throw new PartitionedRegionDistributionException(LocalizedStrings.PartitionedRegion_PUTTING_ENTRY_ON_0_FAILED.toLocalizedString(recipient), ce); + } + } + return true;// ???:ezoerner:20080728 why return true if response was null? + } + + /** + * Create a bucket for the provided bucket identifier in an atomic fashion. + * + * @param bucketId + * the bucket identifier for the bucket that needs creation + * @param snoozer + * tracking object used to determine length of time t for + * bucket creation + * @return a selected Node on which to perform bucket operations + */ + public InternalDistributedMember createBucket(int bucketId, int size, + final RetryTimeKeeper snoozer) { + + InternalDistributedMember ret = getNodeForBucketWrite(bucketId, snoozer); + if (ret != null) { + return ret; + } + // In the current co-location scheme, we have to create the bucket for the + // colocatedWith region, before we create bucket for this region + final PartitionedRegion colocatedWith = ColocationHelper + .getColocatedRegion(this); + if (colocatedWith != null) { + colocatedWith.createBucket(bucketId, size, snoozer); + } + + // THis is for FPR.if the given bucket id is not starting bucket id then + // create bucket for starting bucket id + String partitionName = null; + if (this.isFixedPartitionedRegion()) { + FixedPartitionAttributesImpl fpa = PartitionedRegionHelper + .getFixedPartitionAttributesForBucket(this, bucketId); + partitionName = fpa.getPartitionName(); + int startBucketId = fpa.getStartingBucketID(); + if(startBucketId == -1){ + throw new PartitionNotAvailableException( + LocalizedStrings.FOR_FIXED_PARTITION_REGION_0_PARTITION_1_IS_NOT_YET_INITIALIZED_ON_DATASTORE + .toString(new Object[]{getName(),partitionName})); + } + if (startBucketId != bucketId) { + createBucket(startBucketId, size, snoozer); + } + } + // Potentially no storage assigned, start bucket creation, be careful of race + // conditions + final long startTime = PartitionedRegionStats.startTime(); + if(isDataStore()) { + ret = this.redundancyProvider.createBucketAtomically(bucketId, size, + startTime, false, partitionName); + } else { + ret = this.redundancyProvider.createBucketOnDataStore(bucketId, size, startTime, snoozer); + } + return ret; + } + + @Override + protected Object findObjectInSystem(KeyInfo keyInfo, boolean isCreate, + TXStateInterface tx, boolean generateCallbacks, Object localValue, boolean disableCopyOnRead, boolean preferCD, ClientProxyMembershipID requestingClient, + EntryEventImpl clientEvent, boolean returnTombstones, boolean allowReadFromHDFS) + throws CacheLoaderException, TimeoutException + { + Object obj = null; + final Object key = keyInfo.getKey(); + final Object aCallbackArgument = keyInfo.getCallbackArg(); + final long startTime = PartitionedRegionStats.startTime(); + try { + int bucketId = keyInfo.getBucketId(); + if (bucketId == KeyInfo.UNKNOWN_BUCKET) { + bucketId = PartitionedRegionHelper.getHashKey(this, + isCreate ? Operation.CREATE : null, key, null, aCallbackArgument); + keyInfo.setBucketId(bucketId); + } + InternalDistributedMember targetNode = null; + TXStateProxy txState = getTXState(); + boolean allowRetry; + if (txState != null) { + if (txState.isRealDealLocal()) { + targetNode = getMyId(); + } else { + targetNode = (InternalDistributedMember) txState.getTarget(); + assert targetNode != null; + } + allowRetry = false; + } else { + targetNode = getNodeForBucketReadOrLoad(bucketId); + allowRetry = true; + } + if (targetNode == null) { + if (logger.isDebugEnabled()) { + logger.debug("No need to create buckets on get(), no CacheLoader configured."); + } + return null; + } + + obj = getFromBucket(targetNode, bucketId, key, aCallbackArgument, disableCopyOnRead, preferCD, requestingClient, clientEvent, returnTombstones, allowRetry, allowReadFromHDFS); + } + finally { + this.prStats.endGet(startTime); + } + return obj; + } + + /** + * Execute the provided named function in all locations that contain the given + * keys. So function can be executed on just one fabric node, executed in + * parallel on a subset of nodes in parallel across all the nodes. + * + * @param function + * @param execution + * @param rc + * @since 6.0 + */ + public ResultCollector executeFunction(final Function function, + final PartitionedRegionFunctionExecutor execution, ResultCollector rc, + boolean executeOnBucketSet) { + if (execution.isPrSingleHop()) { + if (!executeOnBucketSet) { + switch (execution.getFilter().size()) { + case 1: + if (logger.isDebugEnabled()) { + logger.debug("Executing Function: (Single Hop) {} on single node.", function.getId()); + } + return executeOnSingleNode(function, execution, rc, true, false); + default: + if (logger.isDebugEnabled()) { + logger.debug("Executing Function: (Single Hop) {} on multiple nodes.", function.getId()); + } + return executeOnMultipleNodes(function, execution, rc, true, false); + } + } + else { + if (logger.isDebugEnabled()) { + logger.debug("Executing Function: (Single Hop) {} on a set of buckets nodes.", function.getId()); + } + return executeOnBucketSet(function, execution, rc, execution + .getFilter()); + } + } + else { + switch (execution.getFilter().size()) { + case 0: + if (logger.isDebugEnabled()) { + logger.debug("Executing Function: {} withArgs={} on all buckets.", function.getId(), execution.getArguments()); + } + return executeOnAllBuckets(function, execution, rc, false); + case 1: + if (logger.isDebugEnabled()) { + logger.debug("Executing Function: {} withArgs={} on single node.", function.getId(), execution.getArguments()); + } + return executeOnSingleNode(function, execution, rc, false, executeOnBucketSet); + default: + if (logger.isDebugEnabled()) { + logger.debug("Executing Function: {} withArgs={} on multiple nodes.", function.getId(), execution.getArguments()); + } + return executeOnMultipleNodes(function, execution, rc, false, executeOnBucketSet); + } + } + } + + /** + * Executes function on multiple nodes + * + * @param function + * @param execution + */ + private ResultCollector executeOnMultipleNodes(final Function function, + final PartitionedRegionFunctionExecutor execution, ResultCollector rc, boolean isPRSingleHop, + boolean isBucketSetAsFilter) { + final Set routingKeys = execution.getFilter(); + final boolean primaryMembersNeeded = function.optimizeForWrite(); + final boolean hasRoutingObjects = execution.hasRoutingObjects(); + HashMap bucketToKeysMap = FunctionExecutionNodePruner + .groupByBucket(this, routingKeys, primaryMembersNeeded, + hasRoutingObjects, isBucketSetAsFilter); + HashMap memberToKeysMap = new HashMap(); + HashMap> memberToBuckets = FunctionExecutionNodePruner + .groupByMemberToBuckets(this, bucketToKeysMap.keySet(), primaryMembersNeeded); + + if (isPRSingleHop && (memberToBuckets.size() > 1)) { + // memberToBuckets.remove(getMyId()); // don't remove + for (InternalDistributedMember targetNode : memberToBuckets.keySet()) { + if (!targetNode.equals(getMyId())) { + for (Integer bucketId : memberToBuckets.get(targetNode)) { + Set profiles = this.getRegionAdvisor() + .getClientBucketProfiles(bucketId); + if (profiles != null) { + for (ServerBucketProfile profile : profiles) { + if (profile.getDistributedMember().equals(targetNode)) { + if (logger.isDebugEnabled()) { + logger.debug("FunctionServiceSingleHop: Found multiple nodes.{}", getMyId()); + } + throw new InternalFunctionInvocationTargetException( + LocalizedStrings.PartitionedRegion_MULTIPLE_TARGET_NODE_FOUND_FOR + .toLocalizedString()); + } + } + } + } + } + } + } + + while(!execution.getFailedNodes().isEmpty()) { + Set memberKeySet = memberToBuckets.keySet(); + RetryTimeKeeper retryTime = new RetryTimeKeeper(this.retryTimeout); + Iterator iterator = memberKeySet.iterator(); + + boolean hasRemovedNode = false; + + while (iterator.hasNext()){ + if(execution.getFailedNodes().contains(((InternalDistributedMember)iterator.next()).getId())){ + hasRemovedNode = true; + } + } + + if(hasRemovedNode){ + if (retryTime.overMaximum()) { + PRHARedundancyProvider.timedOut(this, null, null, "doing function execution", this.retryTimeout); + // NOTREACHED + } + retryTime.waitToRetryNode(); + memberToBuckets = FunctionExecutionNodePruner.groupByMemberToBuckets( + this, bucketToKeysMap.keySet(), primaryMembersNeeded); + + }else{ + execution.clearFailedNodes(); + } + } + + for (Map.Entry entry : memberToBuckets.entrySet()) { + InternalDistributedMember member = (InternalDistributedMember)entry + .getKey(); + HashSet buckets = (HashSet)entry.getValue(); + for (Integer bucket : buckets) { + HashSet keys = memberToKeysMap.get(member); + if (keys == null) { + keys = new HashSet(); + } + keys.addAll(bucketToKeysMap.get(bucket)); + memberToKeysMap.put(member, keys); + } + } + //memberToKeysMap.keySet().retainAll(memberToBuckets.keySet()); + if (memberToKeysMap.isEmpty()) { + throw new FunctionException( + LocalizedStrings.PartitionedRegion_NO_TARGET_NODE_FOUND_FOR_KEY_0 + .toLocalizedString(routingKeys)); + } + Set dest = memberToKeysMap.keySet(); + execution.validateExecution(function, dest); + //added for the data aware procedure. + execution.setExecutionNodes(dest); + //end + + final HashSet localKeys = memberToKeysMap.remove(getMyId()); + HashSet localBucketSet = null; + boolean remoteOnly = false; + if (localKeys == null) { + remoteOnly = true; + } + else { + localBucketSet = FunctionExecutionNodePruner + .getBucketSet(PartitionedRegion.this, localKeys, + hasRoutingObjects, isBucketSetAsFilter); + + remoteOnly = false; + } + final LocalResultCollector localResultCollector = execution + .getLocalResultCollector(function, rc); + final DM dm = getDistributionManager(); + final PartitionedRegionFunctionResultSender resultSender = new PartitionedRegionFunctionResultSender( + dm, this, 0L, localResultCollector, execution + .getServerResultSender(), memberToKeysMap.isEmpty(), remoteOnly, + execution.isForwardExceptions(), function, localBucketSet); + + if (localKeys != null) { + final RegionFunctionContextImpl prContext = new RegionFunctionContextImpl( + function.getId(), + PartitionedRegion.this, + execution.getArgumentsForMember(getMyId().getId()), + localKeys, + ColocationHelper.constructAndGetAllColocatedLocalDataSet( + PartitionedRegion.this, localBucketSet), + localBucketSet, + resultSender, + execution.isReExecute()); + execution.executeFunctionOnLocalPRNode(function, prContext, resultSender, dm, isTX()); + } + + if (!memberToKeysMap.isEmpty()) { + HashMap recipMap = + new HashMap(); + for (Map.Entry me : memberToKeysMap.entrySet()) { + InternalDistributedMember recip = (InternalDistributedMember)me + .getKey(); + HashSet memKeys = (HashSet)me.getValue(); + FunctionRemoteContext context = new FunctionRemoteContext(function, + execution.getArgumentsForMember(recip.getId()), memKeys, + FunctionExecutionNodePruner.getBucketSet(this, memKeys, + hasRoutingObjects, isBucketSetAsFilter), execution.isReExecute(), + execution.isFnSerializationReqd()); + recipMap.put(recip, context); + } + + PartitionedRegionFunctionResultWaiter resultReciever = new PartitionedRegionFunctionResultWaiter( + getSystem(), this.getPRId(), localResultCollector, function, + resultSender); + return resultReciever.getPartitionedDataFrom(recipMap, this, execution); + } + return localResultCollector; + + } + + /** + * Single key execution on single node + * + * @param function + * @param execution + * @since 6.0 + */ + private ResultCollector executeOnSingleNode(final Function function, + final PartitionedRegionFunctionExecutor execution, ResultCollector rc, + boolean isPRSingleHop, boolean isBucketSetAsFilter){ + final Set routingKeys = execution.getFilter(); + final Object key = routingKeys.iterator().next(); + final Integer bucketId; + if (isBucketSetAsFilter) { + bucketId = ((Integer) key).intValue(); + } else { + if (execution.hasRoutingObjects()) { + bucketId = Integer.valueOf(PartitionedRegionHelper + .getHashKey(this, key)); + } else { + // bucketId = Integer.valueOf(PartitionedRegionHelper.getHashKey(this, + // Operation.FUNCTION_EXECUTION, key, null)); + bucketId = Integer.valueOf(PartitionedRegionHelper.getHashKey(this, + Operation.FUNCTION_EXECUTION, key, null, null)); + } + } + InternalDistributedMember targetNode = null; + if (function.optimizeForWrite()) { + targetNode = createBucket(bucketId.intValue(), 0, null /* retryTimeKeeper */); + HeapMemoryMonitor hmm = ((InternalResourceManager) cache.getResourceManager()).getHeapMonitor(); + if (hmm.isMemberHeapCritical(targetNode) + && !MemoryThresholds.isLowMemoryExceptionDisabled()) { + Set sm = Collections.singleton((DistributedMember) targetNode); + throw new LowMemoryException(LocalizedStrings.ResourceManager_LOW_MEMORY_FOR_0_FUNCEXEC_MEMBERS_1.toLocalizedString( + new Object[] {function.getId(), sm}), sm); + } + } + else { + targetNode = getOrCreateNodeForBucketRead(bucketId.intValue()); + } + final DistributedMember localVm = getMyId(); + if (targetNode!= null && isPRSingleHop && !localVm.equals(targetNode)) { + Set profiles = this.getRegionAdvisor() + .getClientBucketProfiles(bucketId); + if (profiles != null) { + for (ServerBucketProfile profile : profiles) { + if (profile.getDistributedMember().equals(targetNode)) { + if (logger.isDebugEnabled()) { + logger.debug("FunctionServiceSingleHop: Found remote node.{}", localVm); + } + throw new InternalFunctionInvocationTargetException( + LocalizedStrings.PartitionedRegion_MULTIPLE_TARGET_NODE_FOUND_FOR + .toLocalizedString()); + } + } + } + } + + if (targetNode == null) { + throw new FunctionException( + LocalizedStrings.PartitionedRegion_NO_TARGET_NODE_FOUND_FOR_KEY_0 + .toLocalizedString(key)); + } + + if (logger.isDebugEnabled()) { + logger.debug("Executing Function: {} withArgs={} on {}", function.getId(), execution.getArguments(), targetNode); + } + while (!execution.getFailedNodes().isEmpty()) { + RetryTimeKeeper retryTime = new RetryTimeKeeper(this.retryTimeout); + if (execution.getFailedNodes().contains(targetNode.getId())) { + /*if (retryTime.overMaximum()) { + PRHARedundancyProvider.timedOut(this, null, null, + "doing function execution", this.retryTimeout); + // NOTREACHED + }*/ + //Asif: Fix for Bug # 40083 + targetNode = null; + while (targetNode == null) { + if (retryTime.overMaximum()) { + PRHARedundancyProvider.timedOut(this, null, null, + "doing function execution", this.retryTimeout); + // NOTREACHED + } + retryTime.waitToRetryNode(); + if (function.optimizeForWrite()) { + targetNode = getOrCreateNodeForBucketWrite(bucketId.intValue(), retryTime); + } + else { + targetNode = getOrCreateNodeForBucketRead(bucketId.intValue()); + } + } + if (targetNode == null) { + throw new FunctionException( + LocalizedStrings.PartitionedRegion_NO_TARGET_NODE_FOUND_FOR_KEY_0 + .toLocalizedString(key)); + } + } + else { + execution.clearFailedNodes(); + } + } + + final HashSet buckets = new HashSet(); + buckets.add(bucketId); + final Set singleMember = Collections + .singleton(targetNode); + execution.validateExecution(function, singleMember); + execution.setExecutionNodes(singleMember); + if (targetNode.equals(localVm)) { + final LocalResultCollector localRC = execution + .getLocalResultCollector(function, rc); + final DM dm = getDistributionManager(); + PartitionedRegionFunctionResultSender resultSender = new PartitionedRegionFunctionResultSender( + dm, PartitionedRegion.this, 0, localRC, execution.getServerResultSender(), true, false, execution.isForwardExceptions(), function, buckets); + final FunctionContext context = new RegionFunctionContextImpl(function + .getId(), PartitionedRegion.this, execution + .getArgumentsForMember(localVm.getId()), routingKeys, + ColocationHelper.constructAndGetAllColocatedLocalDataSet( + PartitionedRegion.this, buckets), buckets, resultSender, execution.isReExecute()); + execution.executeFunctionOnLocalPRNode(function, context, resultSender, dm, isTX()); + return localRC; + } + else { + return executeFunctionOnRemoteNode(targetNode, function, execution + .getArgumentsForMember(targetNode.getId()), routingKeys, rc, buckets, + execution.getServerResultSender(), execution); + } + } + + public ResultCollector executeOnBucketSet(final Function function, + PartitionedRegionFunctionExecutor execution, ResultCollector rc, Set bucketSet) { + Set actualBucketSet = this.getRegionAdvisor().getBucketSet(); + try { + bucketSet.retainAll(actualBucketSet); + } + catch (NoSuchElementException done) { + } + HashMap> memberToBuckets = FunctionExecutionNodePruner + .groupByMemberToBuckets(this, bucketSet, function.optimizeForWrite()); + + if (memberToBuckets.isEmpty()) { + if (logger.isDebugEnabled()) { + logger.debug("Executing on bucketset : {} executeOnBucketSet Member to buckets map is : {} bucketSet is empty", + bucketSet, memberToBuckets); + } + throw new EmtpyRegionFunctionException( + LocalizedStrings.PartitionedRegion_FUNCTION_NOT_EXECUTED_AS_REGION_IS_EMPTY + .toLocalizedString()); + } + else { + if (logger.isDebugEnabled()) { + logger.debug("Executing on bucketset : {} executeOnBucketSet Member to buckets map is : {}", + bucketSet, memberToBuckets); + + } + } + + if (memberToBuckets.size() > 1) { + for (InternalDistributedMember targetNode : memberToBuckets.keySet()) { + if (!targetNode.equals(getMyId())) { + for (Integer bucketId : memberToBuckets.get(targetNode)) { + Set profiles = this.getRegionAdvisor() + .getClientBucketProfiles(bucketId); + if (profiles != null) { + for (ServerBucketProfile profile : profiles) { + if (profile.getDistributedMember().equals(targetNode)) { + if (logger.isDebugEnabled()) { + logger.debug("FunctionServiceSingleHop: Found multiple nodes for executing on bucket set.{}", getMyId()); + } + throw new InternalFunctionInvocationTargetException( + LocalizedStrings.PartitionedRegion_MULTIPLE_TARGET_NODE_FOUND_FOR + .toLocalizedString()); + } + } + } + } + } + } + } + + execution = (PartitionedRegionFunctionExecutor)execution.withFilter(new HashSet()); + while (!execution.getFailedNodes().isEmpty()) { + Set memberKeySet = memberToBuckets.keySet(); + RetryTimeKeeper retryTime = new RetryTimeKeeper(this.retryTimeout); + Iterator iterator = memberKeySet.iterator(); + boolean hasRemovedNode = false; + + while (iterator.hasNext()) { + if (execution.getFailedNodes().contains( + ((InternalDistributedMember)iterator.next()).getId())) { + hasRemovedNode = true; + } + } + + if (hasRemovedNode) { + if (retryTime.overMaximum()) { + PRHARedundancyProvider.timedOut(this, null, null, + "doing function execution", this.retryTimeout); + // NOTREACHED + } + retryTime.waitToRetryNode(); + memberToBuckets = FunctionExecutionNodePruner.groupByMemberToBuckets( + this, bucketSet, function.optimizeForWrite()); + } + else { + execution.clearFailedNodes(); + } + } + + Set dest = memberToBuckets.keySet(); + if (function.optimizeForWrite() && cache.getResourceManager().getHeapMonitor(). + containsHeapCriticalMembers(dest) && + !MemoryThresholds.isLowMemoryExceptionDisabled()) { + Set hcm = cache.getResourceAdvisor().adviseCritialMembers(); + Set sm = SetUtils.intersection(hcm, dest); + throw new LowMemoryException(LocalizedStrings.ResourceManager_LOW_MEMORY_FOR_0_FUNCEXEC_MEMBERS_1.toLocalizedString( + new Object[] {function.getId(), sm}), sm); + } + + boolean isSelf = false; + execution.setExecutionNodes(dest); + final Set localBucketSet = memberToBuckets.remove(getMyId()); + if (localBucketSet != null) { + isSelf = true; + } + final HashMap recipMap = new HashMap(); + for (InternalDistributedMember recip : dest) { + FunctionRemoteContext context = new FunctionRemoteContext(function, + execution.getArgumentsForMember(recip.getId()), null, memberToBuckets + .get(recip), execution.isReExecute(), execution.isFnSerializationReqd() ); + recipMap.put(recip, context); + } + //final LocalResultCollector localResultCollector = new LocalResultCollector(function, rc, execution); + final LocalResultCollector localRC = execution + .getLocalResultCollector(function, rc); + + final DM dm = getDistributionManager(); + final PartitionedRegionFunctionResultSender resultSender = new PartitionedRegionFunctionResultSender( + dm, this, 0L, localRC, execution + .getServerResultSender(), recipMap.isEmpty(), !isSelf, execution.isForwardExceptions(), function, localBucketSet); + + // execute locally and collect the result + if (isSelf && this.dataStore != null) { + final RegionFunctionContextImpl prContext = new RegionFunctionContextImpl(function.getId(), PartitionedRegion.this, + execution.getArgumentsForMember(getMyId().getId()), null, + ColocationHelper.constructAndGetAllColocatedLocalDataSet( + PartitionedRegion.this, localBucketSet), localBucketSet, + resultSender, execution.isReExecute()); +// final RegionFunctionContextImpl prContext = new RegionFunctionContextImpl( +// function.getId(), PartitionedRegion.this, execution +// .getArgumentsForMember(getMyId().getId()), null, ColocationHelper +// .constructAndGetAllColocatedLocalDataSet(PartitionedRegion.this, +// localBucketSet), resultSender, execution.isReExecute()); + execution.executeFunctionOnLocalNode(function, prContext, resultSender, + dm, isTX()); + } + PartitionedRegionFunctionResultWaiter resultReciever = new PartitionedRegionFunctionResultWaiter( + getSystem(), this.getPRId(), localRC, function, resultSender); + + ResultCollector reply = resultReciever.getPartitionedDataFrom(recipMap, + this, execution); + + return reply; + + } + + /** + * Executes function on all bucket nodes + * + * @param function + * @param execution + * @return ResultCollector + * @since 6.0 + */ + private ResultCollector executeOnAllBuckets(final Function function, + final PartitionedRegionFunctionExecutor execution, ResultCollector rc, boolean isPRSingleHop) { + Set bucketSet = new HashSet(); + Iterator itr = this.getRegionAdvisor().getBucketSet().iterator(); + while (itr.hasNext()) { + try { + bucketSet.add(itr.next()); + } + catch (NoSuchElementException ex) { + } + } + HashMap> memberToBuckets = FunctionExecutionNodePruner + .groupByMemberToBuckets(this, bucketSet, function.optimizeForWrite()); + + if (memberToBuckets.isEmpty()) { + throw new EmtpyRegionFunctionException(LocalizedStrings.PartitionedRegion_FUNCTION_NOT_EXECUTED_AS_REGION_IS_EMPTY.toLocalizedString() + ); + } + + while(!execution.getFailedNodes().isEmpty()){ + Set memberKeySet = memberToBuckets.keySet(); + RetryTimeKeeper retryTime = new RetryTimeKeeper(this.retryTimeout); + + Iterator iterator = memberKeySet.iterator(); + + boolean hasRemovedNode = false; + + while (iterator.hasNext()){ + if(execution.getFailedNodes().contains(((InternalDistributedMember)iterator.next()).getId())){ + hasRemovedNode = true; + } + } + + if(hasRemovedNode){ + if (retryTime.overMaximum()) { + PRHARedundancyProvider.timedOut(this, null, null, "doing function execution", this.retryTimeout); + // NOTREACHED + } + retryTime.waitToRetryNode(); + memberToBuckets = FunctionExecutionNodePruner + .groupByMemberToBuckets(this, bucketSet, function.optimizeForWrite()); + }else{ + execution.clearFailedNodes(); + } + } + + Set dest = memberToBuckets.keySet(); + execution.validateExecution(function, dest); + execution.setExecutionNodes(dest); + + boolean isSelf = false; + final Set localBucketSet = memberToBuckets.remove(getMyId()); + if (localBucketSet != null) { + isSelf = true; + } + final HashMap recipMap = new HashMap(); + for (InternalDistributedMember recip : memberToBuckets.keySet()) { + FunctionRemoteContext context = new FunctionRemoteContext(function, + execution.getArgumentsForMember(recip.getId()), null, memberToBuckets + .get(recip), execution.isReExecute(), execution.isFnSerializationReqd() ); + recipMap.put(recip, context); + } + final LocalResultCollector localResultCollector = execution + .getLocalResultCollector(function, rc); + final DM dm = getDistributionManager(); + final PartitionedRegionFunctionResultSender resultSender = new PartitionedRegionFunctionResultSender( + dm, this, 0L, localResultCollector, execution + .getServerResultSender(), recipMap.isEmpty(), !isSelf, execution.isForwardExceptions(), function, localBucketSet); + + // execute locally and collect the result + if (isSelf && this.dataStore != null) { + final RegionFunctionContextImpl prContext = new RegionFunctionContextImpl( + function.getId(), PartitionedRegion.this, execution + .getArgumentsForMember(getMyId().getId()), null, + ColocationHelper.constructAndGetAllColocatedLocalDataSet( + PartitionedRegion.this, localBucketSet), localBucketSet, + resultSender, execution.isReExecute()); + execution.executeFunctionOnLocalPRNode(function, prContext, resultSender, dm, isTX()); + } + PartitionedRegionFunctionResultWaiter resultReciever = new PartitionedRegionFunctionResultWaiter( + getSystem(), this.getPRId(), localResultCollector, function, resultSender); + + ResultCollector reply = resultReciever.getPartitionedDataFrom(recipMap, + this, execution); + + return reply; + } + + /** + * no docs + * @param preferCD + * @param requestingClient the client requesting the object, or null if not from a client + * @param clientEvent TODO + * @param returnTombstones TODO + * @param allowRetry if false then do not retry + */ + private Object getFromBucket(final InternalDistributedMember targetNode, + int bucketId, final Object key, final Object aCallbackArgument, + boolean disableCopyOnRead, boolean preferCD, ClientProxyMembershipID requestingClient, EntryEventImpl clientEvent, boolean returnTombstones, boolean allowRetry, boolean allowReadFromHDFS) { + final boolean isDebugEnabled = logger.isDebugEnabled(); + + final int retryAttempts = calcRetry(); + Object obj; + // retry the get remotely until it finds the right node managing the bucket + int count = 0; + RetryTimeKeeper retryTime = null; + InternalDistributedMember retryNode = targetNode; + while (count <= retryAttempts) { + // Every continuation should check for DM cancellation + if (retryNode == null) { + checkReadiness(); + if (retryTime == null) { + retryTime = new RetryTimeKeeper(this.retryTimeout); + } + retryNode = getNodeForBucketReadOrLoad(bucketId); + + // No storage found for bucket, early out preventing hot loop, bug 36819 + if (retryNode == null) { + checkShutdown(); + return null; + } + continue; + } + final boolean isLocal = this.localMaxMemory > 0 && retryNode.equals(getMyId()); + + try { + if (isLocal) { + obj = this.dataStore.getLocally(bucketId, key, aCallbackArgument, + disableCopyOnRead, preferCD, requestingClient, clientEvent, returnTombstones, false, allowReadFromHDFS); + } + else { + if (localCacheEnabled && null != (obj = localCacheGet(key))) { // OFFHEAP: copy into heap cd; TODO optimize for preferCD case + if (logger.isTraceEnabled()) { + logger.trace("getFromBucket: Getting key {} ({}) from local cache", key, key.hashCode()); + } + return obj; + } + else if (this.haveCacheLoader || this.hdfsStoreName != null) { + // If the region has a cache loader, + // the target node is the primary server of the bucket. But, if the + // value can be found in a local bucket, we should first try there. + + /* MergeGemXDHDFSToGFE -readoing from local bucket was disabled in GemXD*/ + if (null != ( obj = getFromLocalBucket(bucketId, key, aCallbackArgument, + disableCopyOnRead, preferCD, requestingClient, clientEvent, returnTombstones, allowReadFromHDFS))) { + return obj; + } + } + + // Test hook + if (((LocalRegion)this).isTest()) + ((LocalRegion)this).incCountNotFoundInLocal(); + obj = getRemotely(retryNode, bucketId, key, aCallbackArgument, preferCD, requestingClient, clientEvent, returnTombstones, allowReadFromHDFS); + + // TODO:Suranjan&Yogesh : there should be better way than this one + String name = Thread.currentThread().getName(); + if (name.startsWith("ServerConnection") + && !getMyId().equals(retryNode)) { + setNetworkHop(bucketId, (InternalDistributedMember)retryNode); + } + } + return obj; + } + catch (PRLocallyDestroyedException pde) { + if (isDebugEnabled) { + logger.debug("getFromBucket Encountered PRLocallyDestroyedException", pde); + } + checkReadiness(); + if (allowRetry) { + retryNode = getNodeForBucketReadOrLoad(bucketId); + } else { + return null; + } + } + catch (ForceReattemptException prce) { + prce.checkKey(key); + checkReadiness(); + + if (allowRetry) { + InternalDistributedMember lastNode = retryNode; + if (isDebugEnabled) { + logger.debug("getFromBucket: retry attempt: {} of {}", count, retryAttempts, prce); + } + retryNode = getNodeForBucketReadOrLoad(bucketId); + if (lastNode.equals(retryNode)) { + if (retryTime == null) { + retryTime = new RetryTimeKeeper(this.retryTimeout); + } + if (retryTime.overMaximum()) { + break; + } + if (isDebugEnabled) { + logger.debug("waiting to retry node {}", retryNode); + } + retryTime.waitToRetryNode(); + } + } else { + Throwable cause = prce.getCause(); + if (cause instanceof PrimaryBucketException) { + throw (PrimaryBucketException)cause; + } else if (cause instanceof TransactionDataRebalancedException) { + throw (TransactionDataRebalancedException)cause; + } else { + return null; + } + } + } + catch (PrimaryBucketException notPrimary) { + if (allowRetry) { + if (isDebugEnabled) { + logger.debug("getFromBucket: {} on Node {} not primary", notPrimary.getLocalizedMessage(), retryNode); + } + getRegionAdvisor().notPrimary(bucketId, retryNode); + retryNode = getNodeForBucketReadOrLoad(bucketId); + } else { + throw notPrimary; + } + } + + // It's possible this is a GemFire thread e.g. ServerConnection + // which got to this point because of a distributed system shutdown or + // region closure which uses interrupt to break any sleep() or wait() + // calls + // e.g. waitForPrimary + checkShutdown(); + + count++; + if (count == 1) { + this.prStats.incGetOpsRetried(); + } + this.prStats.incGetRetries(); + if (isDebugEnabled) { + logger.debug("getFromBucket: Attempting to resend get to node {} after {} failed attempts", retryNode, count); + } + } // While + + PartitionedRegionDistributionException e = null; // Fix for bug 36014 + if (logger.isDebugEnabled()) { + e = new PartitionedRegionDistributionException(LocalizedStrings.PartitionRegion_NO_VM_AVAILABLE_FOR_GET_IN_0_ATTEMPTS.toLocalizedString(Integer.valueOf(count))); + } + logger.warn(LocalizedMessage.create(LocalizedStrings.PartitionRegion_NO_VM_AVAILABLE_FOR_GET_IN_0_ATTEMPTS, Integer.valueOf(count)), e); + return null; + } + + /** + * If a bucket is local, try to fetch the value + * from it + * + */ + public Object getFromLocalBucket(int bucketId, final Object key, + final Object aCallbackArgument, boolean disableCopyOnRead, + boolean preferCD, ClientProxyMembershipID requestingClient, + EntryEventImpl clientEvent, boolean returnTombstones, boolean allowReadFromHDFS) + throws ForceReattemptException, PRLocallyDestroyedException { + Object obj; + // try reading locally. + InternalDistributedMember readNode = getNodeForBucketRead(bucketId); + if (readNode == null) { + return null; // fixes 51657 + } + if (readNode.equals(getMyId()) && null != ( obj = this.dataStore.getLocally(bucketId, key, aCallbackArgument, + disableCopyOnRead, preferCD, requestingClient, clientEvent, returnTombstones, true, allowReadFromHDFS))) { + if (logger.isTraceEnabled()) { + logger.trace("getFromBucket: Getting key {} ({}) locally - success", key, key.hashCode()); + } + return obj; + } + return null; + } + + + /** + * This invokes a cache writer before a destroy operation. Although it has the + * same method signature as the method in LocalRegion, it is invoked in a + * different code path. LocalRegion invokes this method via its "entries" + * member, while PartitionedRegion invokes this method in its region operation + * methods and messages. + * + * @see LocalRegion#cacheWriteBeforeRegionDestroy(RegionEventImpl) + */ + @Override + boolean cacheWriteBeforeRegionDestroy(RegionEventImpl event) + throws CacheWriterException, TimeoutException { + + if (event.getOperation().isDistributed()) { + serverRegionDestroy(event); + CacheWriter localWriter = basicGetWriter(); + Set netWriteRecipients = localWriter == null ? this.distAdvisor + .adviseNetWrite() : null; + + if (localWriter == null + && (netWriteRecipients == null || netWriteRecipients.isEmpty())) { + return false; + } + + final long start = getCachePerfStats().startCacheWriterCall(); + try { + SearchLoadAndWriteProcessor processor = SearchLoadAndWriteProcessor + .getProcessor(); + processor.initialize(this, "preDestroyRegion", null); + processor.doNetWrite(event, netWriteRecipients, localWriter, + SearchLoadAndWriteProcessor.BEFOREREGIONDESTROY); + processor.release(); + } + finally { + getCachePerfStats().endCacheWriterCall(start); + } + return true; + } + return false; + } + + /** + * Test Method: Get the DistributedMember identifier for the vm containing a + * key + * + * @param key + * the key to look for + * @return The ID of the DistributedMember holding the key, or null if there + * is no current mapping for the key + */ + public DistributedMember getMemberOwning(Object key) { + int bucketId = PartitionedRegionHelper.getHashKey(this, null, key, null, null); + InternalDistributedMember targetNode = getNodeForBucketRead(bucketId); + return targetNode; + } + + /** + * Test Method: Investigate the local cache to determine if it contains a the + * key + * + * @param key + * The key + * @return true if the key exists + * @see LocalRegion#containsKey(Object) + */ + public boolean localCacheContainsKey(Object key) { + return getRegionMap().containsKey(key); + } + + /** + * Test Method: Fetch a value from the local cache + * + * @param key + * The kye + * @return the value associated with that key + * @see LocalRegion#get(Object, Object, boolean, EntryEventImpl) + */ + public Object localCacheGet(Object key) { + RegionEntry re = getRegionMap().getEntry(key); + if (re == null || re.isDestroyedOrRemoved()) { + // TODO:KIRK:OK if (re == null || Token.isRemoved(re.getValueInVM(this))) { + return null; + } else { + return re.getValue(this); // OFFHEAP: spin until we can copy into a heap cd? + } + } + + /** + * Test Method: Fetch the local cache's key set + * + * @return A set of keys + * @see LocalRegion#keys() + */ + public Set localCacheKeySet() { + return super.keys(); + } + + /** + * Test Method: Get a random set of keys from a randomly selected bucket using + * the provided Random number generator. + * + * @param rnd + * @return A set of keys from a randomly chosen bucket or + * {@link Collections#EMPTY_SET} + * @throws IOException + * @throws ClassNotFoundException + */ + public Set getSomeKeys(Random rnd) throws IOException, + ClassNotFoundException { + InternalDistributedMember nod = null; + Integer buck = null; + Set buks = getRegionAdvisor().getBucketSet(); + + if (buks != null && !buks.isEmpty()) { + Object[] buksA = buks.toArray(); + Set ret = null; + // Randomly pick a node to get some data from + for (int i = 0; i < buksA.length; i++) { + try { + logger.debug("getSomeKeys: iteration: {}", i); + int ind = rnd.nextInt(buksA.length); + if (ind >= buksA.length) { + // The GSRandom.nextInt(int) may return a value that includes the + // maximum. + ind = buksA.length - 1; + } + buck = (Integer)buksA[ind]; + + nod = getNodeForBucketRead(buck.intValue()); + if (nod != null) { + logger.debug("getSomeKeys: iteration: {} for node {}", i, nod); + if (nod.equals(getMyId())) { + ret = dataStore.handleRemoteGetKeys(buck, + InterestType.REGULAR_EXPRESSION, ".*", false); + } + else { + FetchKeysResponse r = FetchKeysMessage.send(nod, this, buck, false); + ret = r.waitForKeys(); + } + + if (ret != null && !ret.isEmpty()) { + return ret; + } + } + } catch (ForceReattemptException movinOn) { + checkReadiness(); + logger.debug("Test hook getSomeKeys caught a ForceReattemptException for bucketId={}{}{}. Moving on to another bucket", + getPRId(), BUCKET_ID_SEPARATOR, buck, movinOn); + continue; + } catch (PRLocallyDestroyedException pde) { + logger.debug("getSomeKeys: Encountered PRLocallyDestroyedException"); + checkReadiness(); + continue; + } + + } // nod != null + } // for + logger.debug("getSomeKeys: no keys found returning empty set"); + return Collections.EMPTY_SET; + } + + /** + * Test Method: Get all entries for all copies of a bucket + * + * This method will not work correctly if membership in the distributed + * system changes while the result is being calculated. + * + * @return a List of HashMaps, each map being a copy of the entries in a + * bucket + */ + public List getAllBucketEntries(final int bucketId) + throws ForceReattemptException { + if (bucketId >= getTotalNumberOfBuckets()) { + return Collections.EMPTY_LIST; + } + ArrayList ret = new ArrayList(); + HashSet collected = new HashSet(); + for (;;) { + // Collect all the candidates by re-examining the advisor... + Set owners = getRegionAdvisor().getBucketOwners(bucketId); + // Remove ones we've already polled... + owners.removeAll(collected); + + // Terminate if no more entries + if (owners.isEmpty()) { + break; + } + // Get first entry + Iterator ownersI = owners.iterator(); + InternalDistributedMember owner = (InternalDistributedMember) + ownersI.next(); + // Remove it from our list + collected.add(owner); + + // If it is ourself, answer directly + if (owner.equals(getMyId())) { + BucketRegion br = this.dataStore.handleRemoteGetEntries(bucketId); + Map m = new HashMap() { + private static final long serialVersionUID = 0L; + + @Override + public String toString() { + return "Bucket id = " + bucketId + " from local member = " + + getDistributionManager().getDistributionManagerId() + ": " + + super.toString(); + } + }; + + Map versions = new HashMap(); + + for (Iterator it=br.entrySet().iterator(); it.hasNext(); ) { + LocalRegion.NonTXEntry entry = (LocalRegion.NonTXEntry)it.next(); + RegionEntry re = entry.getRegionEntry(); + Object value = re.getValue(br); // OFFHEAP: incrc, deserialize, decrc + VersionStamp versionStamp = re.getVersionStamp(); + VersionTag versionTag = versionStamp != null ? versionStamp.asVersionTag() : null; + if(versionTag != null) { + versionTag.replaceNullIDs(br.getVersionMember()); + } + if (Token.isRemoved(value)) { + continue; + } + else if (Token.isInvalid(value)) { + value = null; + } + else if (value instanceof CachedDeserializable) { + value = ((CachedDeserializable)value).getDeserializedForReading(); + } + m.put(re.getKey(), value); + versions.put(re.getKey(), versionTag); + } + RegionVersionVector rvv = br.getVersionVector(); + rvv = rvv != null ? rvv.getCloneForTransmission() : null; + ret.add(new BucketDump(bucketId, owner, rvv, m, versions)); + continue; + } + + // Send a message + try { + final FetchEntriesResponse r; + r = FetchEntriesMessage.send(owner, + this, bucketId); + ret.add(r.waitForEntries()); + } + catch (ForceReattemptException e) { + // node has departed? Ignore. + } + } // for + + return ret; + } + + + /** + * Fetch the keys for the given bucket identifier, if the bucket is local or + * remote. + * + * @param bucketNum + * @return A set of keys from bucketNum or {@link Collections#EMPTY_SET}if no + * keys can be found. + */ + public Set getBucketKeys(int bucketNum) { + return getBucketKeys(bucketNum, false); + } + + /** + * Fetch the keys for the given bucket identifier, if the bucket is local or + * remote. This version of the method allows you to retrieve Tombstone entries + * as well as undestroyed entries. + * + * @param bucketNum + * @param allowTombstones whether to include destroyed entries in the result + * @return A set of keys from bucketNum or {@link Collections#EMPTY_SET}if no + * keys can be found. + */ + public Set getBucketKeys(int bucketNum, boolean allowTombstones) { + Integer buck = Integer.valueOf(bucketNum); + final int retryAttempts = calcRetry(); + Set ret = null; + int count = 0; + InternalDistributedMember nod = getOrCreateNodeForBucketRead(bucketNum); + RetryTimeKeeper snoozer = null; + while (count <= retryAttempts) { + // It's possible this is a GemFire thread e.g. ServerConnection + // which got to this point because of a distributed system shutdown or + // region closure which uses interrupt to break any sleep() or wait() + // calls + // e.g. waitForPrimary or waitForBucketRecovery + checkShutdown(); + + if (nod == null) { + if (snoozer == null) { + snoozer = new RetryTimeKeeper(this.retryTimeout); + } + nod = getOrCreateNodeForBucketRead(bucketNum); + + // No storage found for bucket, early out preventing hot loop, bug 36819 + if (nod == null) { + checkShutdown(); + break; + } + count++; + continue; + } + + try { + if (nod.equals(getMyId())) { + ret = this.dataStore.getKeysLocally(buck, allowTombstones); + } + else { + FetchKeysResponse r = FetchKeysMessage.send(nod, this, buck, allowTombstones); + ret = r.waitForKeys(); + } + if (ret != null) { + return ret; + } + } + catch (PRLocallyDestroyedException pde) { + if (logger.isDebugEnabled()) { + logger.debug("getBucketKeys: Encountered PRLocallyDestroyedException"); + } + checkReadiness(); + } + catch (ForceReattemptException prce) { + if (logger.isDebugEnabled()) { + logger.debug("getBucketKeys: attempt:{}", (count + 1), prce); + } + checkReadiness(); + if (snoozer == null) { + snoozer = new RetryTimeKeeper(this.retryTimeout); + } + InternalDistributedMember oldNode = nod; + nod = getNodeForBucketRead(buck.intValue()); + if (nod != null && nod.equals(oldNode)) { + if (snoozer.overMaximum()) { + checkReadiness(); + throw new TimeoutException(LocalizedStrings.PartitionedRegion_ATTEMPT_TO_ACQUIRE_PRIMARY_NODE_FOR_READ_ON_BUCKET_0_TIMED_OUT_IN_1_MS.toLocalizedString(new Object[] {getBucketName(buck.intValue()), Integer.valueOf(snoozer.getRetryTime())})); + } + snoozer.waitToRetryNode(); + } + + } + count++; + } + if (logger.isDebugEnabled()) { + logger.debug("getBucketKeys: no keys found returning empty set"); + } + return Collections.EMPTY_SET; + } + + /** + * Fetches entries from local and remote nodes and appends these to + * register-interest response. + */ + public void fetchEntries(HashMap bucketKeys, + VersionedObjectList values, ServerConnection servConn) throws IOException { + int retryAttempts = calcRetry(); + RetryTimeKeeper retryTime = null; + HashMap failures = new HashMap(bucketKeys); + HashMap> nodeToBuckets = new HashMap>(); + + while (--retryAttempts >= 0 && !failures.isEmpty()) { + nodeToBuckets.clear(); + updateNodeToBucketMap(nodeToBuckets, failures); + failures.clear(); + + HashMap localBuckets = nodeToBuckets.remove(getMyId()); + if (localBuckets != null && !localBuckets.isEmpty()) { + Set keys = new HashSet(); + for (Integer id : localBuckets.keySet()) { + keys.addAll(localBuckets.get(id)); + } + if (!keys.isEmpty()) { + BaseCommand.appendNewRegisterInterestResponseChunkFromLocal(this, values, "keyList", keys, servConn); + } + } + + // Handle old nodes for Rolling Upgrade support + Set failedSet = handleOldNodes(nodeToBuckets, values, servConn); + // Add failed buckets to nodeToBuckets map so that these will be tried on + // remote nodes. + if (!failedSet.isEmpty()) { + for (Integer bId : failedSet) { + failures.put(bId, bucketKeys.get(bId)); + } + updateNodeToBucketMap(nodeToBuckets, failures); + failures.clear(); + } + + fetchRemoteEntries(nodeToBuckets, failures, values, servConn); + if (!failures.isEmpty()) { + if (retryTime == null) { + retryTime = new RetryTimeKeeper(this.retryTimeout); + } + if (!waitForFetchRemoteEntriesRetry(retryTime)) { + break; + } + } + } + if (!failures.isEmpty()) { + throw new InternalGemFireException("Failed to fetch entries from " + failures.size() + " buckets of region " + getName() + " for register interest."); + } + } + + private void updateNodeToBucketMap( + HashMap> nodeToBuckets, + HashMap bucketKeys) { + for (int id : bucketKeys.keySet()) { + InternalDistributedMember node = getOrCreateNodeForBucketRead(id); + if (nodeToBuckets.containsKey(node)) { + nodeToBuckets.get(node).put(id, bucketKeys.get(id)); + } else { + HashMap map = new HashMap(); + map.put(id, bucketKeys.get(id)); + nodeToBuckets.put(node, map); + } + } + } + + /** + * + * @param nodeToBuckets + * @param values + * @param servConn + * @return set of bucket-ids that could not be read from. + * @throws IOException + */ + private Set handleOldNodes(HashMap nodeToBuckets, + VersionedObjectList values, ServerConnection servConn) throws IOException { + Set failures = new HashSet(); + HashMap oldFellas = filterOldMembers(nodeToBuckets); + for (Iterator it = oldFellas.entrySet().iterator(); it.hasNext();) { + Map.Entry e = (Map.Entry) it.next(); + InternalDistributedMember member = (InternalDistributedMember) e.getKey(); + Object bucketInfo = e.getValue(); + + HashMap bucketKeys = null; + Set buckets = null; + + if (bucketInfo instanceof Set) { + buckets = (Set) bucketInfo; + } else { + bucketKeys = (HashMap) bucketInfo; + buckets = bucketKeys.keySet(); + } + + for (Integer bucket : buckets) { + Set keys = null; + if (bucketKeys == null) { + try { + FetchKeysResponse fkr = FetchKeysMessage.send(member, this, bucket, true); + keys = fkr.waitForKeys(); + } catch (ForceReattemptException fre) { + failures.add(bucket); + } + } else { + keys = bucketKeys.get(bucket); + } + + // TODO (ashetkar) Use single Get70 instance for all? + for (Object key : keys) { + Get70 command = (Get70) Get70.getCommand(); + Get70.Entry ge = command.getValueAndIsObject(this, key, null, servConn); + + if (ge.keyNotPresent) { + values.addObjectPartForAbsentKey(key, ge.value, ge.versionTag); + } else { + values.addObjectPart(key, ge.value, ge.isObject, ge.versionTag); + } + + if (values.size() == BaseCommand.maximumChunkSize) { + BaseCommand.sendNewRegisterInterestResponseChunk(this, "keyList", values, false, servConn); + values.clear(); + } + } + } + } + return failures; + } + + /** + * @param nodeToBuckets + * A map with InternalDistributedSystem as key and either HashSet or + * HashMap as value. + * @return Map of . + */ + private HashMap filterOldMembers(HashMap nodeToBuckets) { + DistributionManager dm = (DistributionManager)getDistributionManager(); + HashMap oldGuys = new HashMap(); + + Set oldMembers = new HashSet(nodeToBuckets.keySet()); + dm.removeMembersWithSameOrNewerVersion(oldMembers, Version.CURRENT); + Iterator oldies = oldMembers.iterator(); + while (oldies.hasNext()) { + InternalDistributedMember old = oldies.next(); + if (nodeToBuckets.containsKey(old)) { + oldGuys.put(old, nodeToBuckets.remove(old)); + } else { + oldies.remove(); + } + } + + return oldGuys; + } + + /** + * Fetches entries from local and remote nodes and appends these to + * register-interest response. + */ + public void fetchEntries(String regex, VersionedObjectList values, + ServerConnection servConn) throws IOException { + int retryAttempts = calcRetry(); + RetryTimeKeeper retryTime = null; + HashSet failures = new HashSet(getRegionAdvisor().getBucketSet()); + HashMap> nodeToBuckets = new HashMap>(); + + while (--retryAttempts >= 0 && !failures.isEmpty()) { + nodeToBuckets.clear(); + updateNodeToBucketMap(nodeToBuckets, failures); + failures.clear(); + + HashSet localBuckets = nodeToBuckets.remove(getMyId()); + + if (localBuckets != null && !localBuckets.isEmpty()) { + for (Integer id : localBuckets) { + Set keys = fetchAllLocalKeys(id, failures, regex); + if (!keys.isEmpty()) { + BaseCommand.appendNewRegisterInterestResponseChunkFromLocal(this, values, regex != null ? regex : "ALL_KEYS", keys, servConn); + } + } + } + // Add failed buckets to nodeToBuckets map so that these will be tried on + // remote nodes. + updateNodeToBucketMap(nodeToBuckets, failures); + failures.clear(); + + // Handle old nodes for Rolling Upgrade support + Set ret = handleOldNodes(nodeToBuckets, values, servConn); + if (!ret.isEmpty()) { + failures.addAll(ret); + updateNodeToBucketMap(nodeToBuckets, failures); + failures.clear(); + } + + localBuckets = nodeToBuckets.remove(getMyId()); + if (localBuckets != null && !localBuckets.isEmpty()) { + failures.addAll(localBuckets); +// updateNodeToBucketMap(nodeToBuckets, failures); +// failures.clear(); + } + + fetchAllRemoteEntries(nodeToBuckets, failures, regex, values, servConn); + if (!failures.isEmpty()) { + if (retryTime == null) { + retryTime = new RetryTimeKeeper(this.retryTimeout); + } + if (!waitForFetchRemoteEntriesRetry(retryTime)) { + break; + } + } + } + if (!failures.isEmpty()) { + throw new InternalGemFireException("Failed to fetch entries from " + failures.size() + " buckets of region " + getName() + " for register interest."); + } + } + + private void updateNodeToBucketMap( + HashMap> nodeToBuckets, + Set buckets) { + for (int id : buckets) { + InternalDistributedMember node = getOrCreateNodeForBucketRead(id); + if (nodeToBuckets.containsKey(node)) { + nodeToBuckets.get(node).add(id); + } else { + HashSet set = new HashSet(); + set.add(id); + nodeToBuckets.put(node, set); + } + } + } + + /** + * + * @param retryTime + * @return boolean False indicates caller should stop re-trying. + */ + private boolean waitForFetchRemoteEntriesRetry(RetryTimeKeeper retryTime) { + if (retryTime.overMaximum()) { + return false; + } + retryTime.waitToRetryNode(); + return true; + } + + public Set fetchAllLocalKeys(Integer id, Set failures, String regex) { + Set result = new HashSet(); + try { + Set keys = null; + if (regex != null) { + keys = this.dataStore.handleRemoteGetKeys(id, + InterestType.REGULAR_EXPRESSION, regex, true); + } else { + keys = this.dataStore.getKeysLocally(id, true); + } + result.addAll(keys); + } catch (ForceReattemptException fre) { + failures.add(id); + } catch (PRLocallyDestroyedException prlde) { + failures.add(id); + } + return result; + } + + /** + * Sends FetchBulkEntriesMessage to each of the nodes hosting the buckets, + * unless the nodes are older than 8.0 + * + * @param nodeToBuckets + * @param failures + * @param values + * @param servConn + * @throws IOException + */ + public void fetchRemoteEntries( + HashMap> nodeToBuckets, + HashMap failures, VersionedObjectList values, + ServerConnection servConn) throws IOException { + Set result = null; + HashMap oneBucketKeys = new HashMap(); + + for(Iterator>> itr = nodeToBuckets.entrySet().iterator(); itr.hasNext();) { + Map.Entry> entry = itr.next(); + HashMap bucketKeys = entry.getValue(); + FetchBulkEntriesResponse fber = null; + result = new HashSet(); + + // Fetch one bucket-data at a time to avoid this VM running out of memory. + // See #50647 + for (Map.Entry e : bucketKeys.entrySet()) { + result.clear(); + oneBucketKeys.clear(); + oneBucketKeys.put(e.getKey(), e.getValue()); + try { + if (entry.getKey().getVersionObject().compareTo(Version.GFE_80) < 0) { + failures.putAll(nodeToBuckets.get(entry.getKey())); + continue; + } + fber = FetchBulkEntriesMessage.send(entry.getKey(), this, oneBucketKeys, null, null, true); + + BucketDump[] bds = fber.waitForEntries(); + if (fber.getFailedBucketIds() != null && !fber.getFailedBucketIds().isEmpty()) { + for (int id : fber.getFailedBucketIds()) { + failures.put(id, nodeToBuckets.get(entry.getKey()).get(id)); + } + } + for (BucketDump bd : bds) { + result.addAll(bd.getValuesWithVersions().entrySet()); + } + + BaseCommand.appendNewRegisterInterestResponseChunk(this, values, "keyList", result, servConn); + + } catch (ForceReattemptException fre) { + // failures.putAll(nodeToBuckets.get(entry.getKey())); + failures.put(e.getKey(), e.getValue()); + } + } + } + } + + /** + * Sends FetchBulkEntriesMessage to each of the nodes hosting the buckets, + * unless the nodes are older than 8.0 + * + * @param nodeToBuckets + * @param failures + * @param regex + * @param values + * @param servConn + * @throws IOException + */ + public void fetchAllRemoteEntries( + HashMap> nodeToBuckets, + HashSet failures, String regex, VersionedObjectList values, + ServerConnection servConn) throws IOException { + Set result = null; + HashSet bucketId = new HashSet(); + + for(Iterator>> itr = nodeToBuckets.entrySet().iterator(); itr.hasNext();) { + Map.Entry> entry = itr.next(); + HashSet buckets = new HashSet(entry.getValue()); // Is it needed to copy the set here? + FetchBulkEntriesResponse fber = null; + result = new HashSet(); + + // Fetch one bucket-data at a time to avoid this VM running out of memory. + // See #50647 + for (int bucket : buckets) { + result.clear(); + bucketId.clear(); + bucketId.add(bucket); + try { + if (entry.getKey().getVersionObject().compareTo(Version.GFE_80) < 0) { + failures.addAll(nodeToBuckets.get(entry.getKey())); + continue; + } + fber = FetchBulkEntriesMessage.send(entry.getKey(), this, null, bucketId, regex, true); + + BucketDump[] bds = fber.waitForEntries(); + if (fber.getFailedBucketIds() != null) { + failures.addAll(fber.getFailedBucketIds()); + } + for (BucketDump bd : bds) { + result.addAll(bd.getValuesWithVersions().entrySet()); + } + BaseCommand.appendNewRegisterInterestResponseChunk(this, values, regex != null ? regex : "ALL_KEYS", result, servConn); + + } catch (ForceReattemptException fre) { + // failures.addAll(nodeToBuckets.get(entry.getKey())); + failures.add(bucket); + } + } + } + } + + // /** + // * Fetch all {@link InternalDistributedMember}s hosting a bucket using the + // * bucket2Node region + // * + // * @return the HashSet of unique Members hosting buckets + // */ + // private HashSet getAllBucketDistributedMembers() + // { + // return getAllBucketNodes(true); + // } + + /** + * Test Method: Get all {@link InternalDistributedMember}s known by this + * instance of the PartitionedRegion. Note: A member is recognized as such + * when it partiticpates as a "data store". + * + * @return a HashSet of {@link InternalDistributedMember}s or + * an empty HashSet + */ + public Set getAllNodes() { + Set result = getRegionAdvisor().adviseDataStore(true); + if(this.isDataStore()) { + result.add(getDistributionManager().getId()); + } + return result; + } + + /** + * Test Method: Get the number of entries in the local data store. + */ + public long getLocalSize() { + if (this.dataStore == null) { + return 0L; + } + long ret = 0L; + Integer i; + for (Iterator si = this.dataStore.getSizeLocally().values().iterator(); si + .hasNext();) { + i = (Integer)si.next(); + ret += i.intValue(); + } + return ret; + } + + /** + * Gets the remote object with the given key. + * + * @param targetNode + * the Node hosting the key + * @param bucketId + * the id of the bucket the key hashed into + * @param key + * the key + * @param requestingClient the client that made this request + * @param clientEvent client event for carrying version information. Null if not a client operation + * @param returnTombstones TODO + * @return the value + * @throws PrimaryBucketException + * if the peer is no longer the primary + * @throws ForceReattemptException + * if the peer is no longer available + */ + public Object getRemotely(InternalDistributedMember targetNode, + int bucketId, final Object key, final Object aCallbackArgument, boolean preferCD, ClientProxyMembershipID requestingClient, EntryEventImpl clientEvent, boolean returnTombstones, boolean allowReadFromHDFS) throws PrimaryBucketException, + ForceReattemptException { + Object value; + if (logger.isDebugEnabled()) { + logger.debug("PartitionedRegion#getRemotely: getting value from bucketId={}{}{} for key {}", + getPRId(), BUCKET_ID_SEPARATOR, bucketId, key); + } + GetResponse response = GetMessage.send(targetNode, this, key, + aCallbackArgument, requestingClient, returnTombstones, allowReadFromHDFS); + this.prStats.incPartitionMessagesSent(); + value = response.waitForResponse(preferCD); + if (clientEvent != null) { + clientEvent.setVersionTag(response.getVersionTag()); + } + if (logger.isDebugEnabled()) { + logger.debug("getRemotely: got value {} for key {}", value, key); + } + + // Here even if we can not cache the value, it should return value to + // user. + try { + if (localCacheEnabled && value != null) { + super.put(key, value); + } + } + catch (Exception e) { + if (logger.isDebugEnabled()) { + logger.debug("getRemotely: Can not cache value = {} for key = {} in local cache", value, key, e); + } + } + return value; + } + + private ResultCollector executeFunctionOnRemoteNode( + InternalDistributedMember targetNode, final Function function, + final Object object, final Set routingKeys, ResultCollector rc, + Set bucketSet, ServerToClientFunctionResultSender sender, + AbstractExecution execution) { + PartitionedRegionFunctionResultSender resultSender = new PartitionedRegionFunctionResultSender( + null, this, 0, rc, sender, false, true, execution.isForwardExceptions(), function, bucketSet); + + PartitionedRegionFunctionResultWaiter resultReciever = new PartitionedRegionFunctionResultWaiter( + getSystem(), this.getPRId(), rc, function, resultSender); + + FunctionRemoteContext context = new FunctionRemoteContext(function, object, + routingKeys, bucketSet, execution.isReExecute(), execution.isFnSerializationReqd()); + + HashMap recipMap = + new HashMap(); + + recipMap.put(targetNode, context); + ResultCollector reply = resultReciever.getPartitionedDataFrom(recipMap, + this, execution); + + return reply; + } + + /** + * This method returns Partitioned Region data store associated with this + * Partitioned Region + * + * @return PartitionedRegionDataStore + */ + public PartitionedRegionDataStore getDataStore() { + return this.dataStore; + } + + /** + * Grab the PartitionedRegionID Lock, this MUST be done in a try block since + * it may throw an exception + * + * @return true if the lock was acquired + */ + private static boolean grabPRIDLock(final DistributedLockService lockService) { + final boolean isDebugEnabled = logger.isDebugEnabled(); + + boolean ownership = false; + int n = 0; + while (!ownership) { + if (isDebugEnabled) { + logger.debug("grabPRIDLock: Trying to get the dlock in allPartitionedRegions for {}: {}", + PartitionedRegionHelper.MAX_PARTITIONED_REGION_ID, (n + 1)); + } +// try { + ownership = lockService.lock( + PartitionedRegionHelper.MAX_PARTITIONED_REGION_ID, + VM_OWNERSHIP_WAIT_TIME, -1); +// } +// catch (InterruptedException ie) { +// Thread.currentThread().interrupt(); +// if (ownership) { +// lockService.unlock(PartitionedRegionHelper.MAX_PARTITIONED_REGION_ID); +// } +// throw new PartitionedRegionException(LocalizedStrings.PartitionedRegion_INTERRUPTEDEXCEPTION_ENCOUNTERED_GETTING_THE_MAX_PARTITIONED_REGION_ID.toLocalizedString(), ie); +// } + } + return ownership; + } + + private static void releasePRIDLock(final DistributedLockService lockService) { + try { + lockService.unlock(PartitionedRegionHelper.MAX_PARTITIONED_REGION_ID); + if (logger.isDebugEnabled()) { + logger.debug("releasePRIDLock: Released the dlock in allPartitionedRegions for {}", + PartitionedRegionHelper.MAX_PARTITIONED_REGION_ID); + } + } + catch (Exception es) { + logger.warn(LocalizedMessage.create( + LocalizedStrings.PartitionedRegion_RELEASEPRIDLOCK_UNLOCKING_0_CAUGHT_AN_EXCEPTION, + Integer.valueOf(PartitionedRegionHelper.MAX_PARTITIONED_REGION_ID)), es); + } + } + + /** + * generates new partitioned region ID globally. + */ + // !!!:ezoerner:20080321 made this function public and static. + // @todo should be moved to the Distributed System level as a general service + // for getting a unique id, with different "domains" for different + // contexts + // :soubhik:pr_func merge20914:21056: overloaded static and non-static version of generatePRId. + // static version is used mainly with sqlf & non-static in gfe. + public static int generatePRId(InternalDistributedSystem sys, Cache cache) { + + GemFireCacheImpl gfcache = (GemFireCacheImpl) cache; + + if(gfcache == null) return 0; + + return _generatePRId(sys, gfcache.getPartitionedRegionLockService()); + } + + public int generatePRId(InternalDistributedSystem sys) { + final DistributedLockService lockService = getPartitionedRegionLockService(); + return _generatePRId(sys, lockService); + } + + private static int _generatePRId(InternalDistributedSystem sys, DistributedLockService lockService) { + boolean ownership = false; + int prid = 0; + + try { + ownership = grabPRIDLock(lockService); + if (ownership) { + if (logger.isDebugEnabled()) { + logger.debug("generatePRId: Got the dlock in allPartitionedRegions for {}", + PartitionedRegionHelper.MAX_PARTITIONED_REGION_ID); + } + + Set parMembers = sys.getDistributionManager() + .getOtherDistributionManagerIds(); + + Integer currentPRID; + + IdentityResponse pir = IdentityRequestMessage.send(parMembers, sys); + currentPRID = pir.waitForId(); + + if (currentPRID == null) { + currentPRID = Integer.valueOf(0); + } + prid = currentPRID.intValue() + 1; + currentPRID = Integer.valueOf(prid); + + try { + IdentityUpdateResponse pr = + IdentityUpdateMessage.send(parMembers, + sys, + currentPRID.intValue()); + pr.waitForRepliesUninterruptibly(); + } + catch (ReplyException ignore) { + if (logger.isDebugEnabled()) { + logger.debug("generatePRId: Ignoring exception", ignore); + } + } + } + } + finally { + if (ownership) { + releasePRIDLock(lockService); + } + } + return prid; + } + + public final DistributionAdvisor getDistributionAdvisor() { + return this.distAdvisor; + } + + public final CacheDistributionAdvisor getCacheDistributionAdvisor() + { + return this.distAdvisor; + } + + public final RegionAdvisor getRegionAdvisor() { + return this.distAdvisor; + } + + /** Returns the distribution profile; lazily creates one if needed */ + public Profile getProfile() { + return this.distAdvisor.createProfile(); + } + + public void fillInProfile(Profile p) { + CacheProfile profile = (CacheProfile)p; + // set fields on CacheProfile... + profile.isPartitioned = true; + profile.isPersistent = dataPolicy.withPersistence(); + profile.dataPolicy = getDataPolicy(); + profile.hasCacheLoader = basicGetLoader() != null; + profile.hasCacheWriter = basicGetWriter() != null; + profile.hasCacheListener = hasListener(); + Assert.assertTrue(getScope().isDistributed()); + profile.scope = getScope(); + profile.setSubscriptionAttributes(getSubscriptionAttributes()); + // fillInProfile MUST set serialNumber + profile.serialNumber = getSerialNumber(); + + //TODO - prpersist - this is a bit of a hack, but we're + //reusing this boolean to indicate that this member has finished disk recovery. + profile.regionInitialized = recoveredFromDisk; + + profile.hasCacheServer = ((this.cache.getCacheServers().size() > 0)?true:false); + profile.filterProfile = getFilterProfile(); + profile.gatewaySenderIds = getGatewaySenderIds(); + profile.asyncEventQueueIds = getAsyncEventQueueIds(); + + if(dataPolicy.withPersistence()) { + profile.persistentID = getDiskStore().generatePersistentID(null); + } + + fillInProfile((PartitionProfile) profile); + + profile.isOffHeap = getOffHeap(); + } + + /** set fields that are only in PartitionProfile... */ + public void fillInProfile(PartitionProfile profile) { + // both isDataStore and numBuckets are not required for sending purposes, + // but nice to have for toString debugging + profile.isDataStore = getLocalMaxMemory() > 0; + if (this.dataStore != null) { + profile.numBuckets = this.dataStore.getBucketsManaged(); + } + + profile.requiresNotification = this.requiresNotification; + profile.localMaxMemory = getLocalMaxMemory(); + profile.fixedPAttrs = this.fixedPAttrs; + // shutdownAll + profile.shutDownAllStatus = shutDownAllStatus; + } + + @Override + protected void initialized() { + // PartitionedRegions do not send out a profile at the end of + // initialization. It is not currently needed by other members + // since no GII is done on a PartitionedRegion + } + + @Override + protected void cacheListenersChanged(boolean nowHasListener) { + if (nowHasListener) { + this.advisorListener.initRMLWrappers(); + } + new UpdateAttributesProcessor(this).distribute(); + } + + // propagate the new writer to the data store + @Override + protected void cacheWriterChanged(CacheWriter p_oldWriter) { + CacheWriter oldWriter = p_oldWriter; + super.cacheWriterChanged(oldWriter); + if (oldWriter == null ^ basicGetWriter() == null) { + new UpdateAttributesProcessor(this).distribute(); + } + } + + // propagate the new loader to the data store + @Override + protected void cacheLoaderChanged(CacheLoader oldLoader) { + CacheLoader myOldLoader = oldLoader; + this.dataStore.cacheLoaderChanged(basicGetLoader(), myOldLoader); + super.cacheLoaderChanged(oldLoader); + if (myOldLoader == null ^ basicGetLoader() == null) { + new UpdateAttributesProcessor(this).distribute(); + } + } + + /** + * This method returns PartitionedRegion associated with a PartitionedRegion + * ID from prIdToPR map. + * + * @param prid + * Partitioned Region ID + * @return PartitionedRegion + */ + public static PartitionedRegion getPRFromId(int prid) + throws PRLocallyDestroyedException { + final Object o; + synchronized (prIdToPR) { + o = prIdToPR.getRegion(Integer.valueOf(prid)); + } + return (PartitionedRegion)o; + } + + /** + * Verify that the given prId is correct for the given region name in this vm + * + * @param sender + * the member requesting validation + * @param prId + * the ID being used for the pr by the sender + * @param regionId + * the regionIdentifier used for prId by the sender + */ + public static void validatePRID(InternalDistributedMember sender, int prId, + String regionId) { + try { + PartitionedRegion pr = null; + synchronized (prIdToPR) { + // first do a quick probe + pr = (PartitionedRegion)prIdToPR.getRegion(Integer.valueOf(prId)); + } + if (pr != null && !pr.isLocallyDestroyed && + pr.getRegionIdentifier().equals(regionId)) { + return; + } + } + catch (RegionDestroyedException e) { + // ignore and do full pass over prid map + } + catch (PartitionedRegionException e) { + // ditto + } + catch (PRLocallyDestroyedException e) { + // ignore and do full check + } + synchronized(prIdToPR) { + for (Iterator it = prIdToPR.values().iterator(); it.hasNext();) { + Object o = it.next(); + if (o instanceof String) { + continue; + } + PartitionedRegion pr = (PartitionedRegion)o; + if (pr.getPRId() == prId) { + if (!pr.getRegionIdentifier().equals(regionId)) { + logger.warn(LocalizedMessage.create( + LocalizedStrings.PartitionedRegion_0_IS_USING_PRID_1_FOR_2_BUT_THIS_PROCESS_MAPS_THAT_PRID_TO_3, + new Object[] {sender.toString(), Integer.valueOf(prId), pr.getRegionIdentifier()})); + } + } + else if (pr.getRegionIdentifier().equals(regionId)) { + logger.warn(LocalizedMessage.create( + LocalizedStrings.PartitionedRegion_0_IS_USING_PRID_1_FOR_2_BUT_THIS_PROCESS_IS_USING_PRID_3, + new Object[] {sender, Integer.valueOf(prId), pr.getRegionIdentifier(), Integer.valueOf(pr.getPRId())})); + } + } + } + + } + + public static String dumpPRId() { + return prIdToPR.dump(); + } + + public String dumpAllPartitionedRegions() { + StringBuffer b = new StringBuffer(this.prRoot.getFullPath()); + b.append("\n"); + Object key = null; + for (Iterator i = this.prRoot.keySet().iterator(); i.hasNext();) { + key = i.next(); + b.append(key).append("=>").append(this.prRoot.get(key)); + if (i.hasNext()) { + b.append("\n"); + } + } + return b.toString(); + } + + /** + * This method returns prId + * + * @return partitionedRegionId + */ + public int getPRId() { + + return this.partitionedRegionId; + } + + /** + * Updates local cache with a new value. + * + * @param key + * the key + * @param value + * the value + * @param newVersion + * the new version of the key + */ + void updateLocalCache(Object key, Object value, long newVersion) { + + } + + /** + * This method returns total number of buckets for this PR + * + * @return totalNumberOfBuckets + */ + public int getTotalNumberOfBuckets() { + + return this.totalNumberOfBuckets; + } + + // ///////////////////////////////////////////////////////////////////// + // ////////////////////////// destroy method changes // + // /////////////////////////// + // ///////////////////////////////////////////////////////////////////// + + @Override + void basicDestroy(final EntryEventImpl event, + final boolean cacheWrite, + final Object expectedOldValue) + throws TimeoutException, EntryNotFoundException, CacheWriterException { + + final long startTime = PartitionedRegionStats.startTime(); + try { + if (event.getEventId() == null) { + event.setNewEventId(this.cache.getDistributedSystem()); + } + discoverJTA(); + getDataView().destroyExistingEntry(event, cacheWrite, expectedOldValue); + } + catch (RegionDestroyedException rde) { + if (!rde.getRegionFullPath().equals(getFullPath())) { + // Handle when a bucket is destroyed + RegionDestroyedException rde2 = new RegionDestroyedException(toString(), getFullPath()); + rde2.initCause(rde); + throw rde2; + } + } + finally { + this.prStats.endDestroy(startTime); + } + return; + } + + /** + * + * @param event + * @param expectedOldValue only succeed if current value is equal to expectedOldValue + * @throws EntryNotFoundException if entry not found or if expectedOldValue + * not null and current value was not equal to expectedOldValue + * @throws CacheWriterException + */ + public void destroyInBucket(final EntryEventImpl event, Object expectedOldValue) + throws EntryNotFoundException, CacheWriterException { + // Get the bucket id for the key + final Integer bucketId = event.getKeyInfo().getBucketId(); + assert bucketId != KeyInfo.UNKNOWN_BUCKET; + // check in bucket2Node region + final InternalDistributedMember targetNode = getOrCreateNodeForBucketWrite( + bucketId, null); + + if (logger.isDebugEnabled()) { + logger.debug("destroyInBucket: key={} ({}) in node {} to bucketId={} retry={} ms", + event.getKey(), event.getKey().hashCode(), targetNode, bucketStringForLogs(bucketId.intValue()), retryTimeout); + } + + // retry the put remotely until it finds the right node managing the bucket + RetryTimeKeeper retryTime = null; + InternalDistributedMember currentTarget = targetNode; + long timeOut = 0; + int count = 0; + for (;;) { + switch (count) { + case 0: + // Note we don't check for DM cancellation in common case. + // First time, keep going + break; + case 1: + // First failure + this.cache.getCancelCriterion().checkCancelInProgress(null); + timeOut = System.currentTimeMillis() + this.retryTimeout; + break; + default: + this.cache.getCancelCriterion().checkCancelInProgress(null); + // test for timeout + long timeLeft = timeOut - System.currentTimeMillis(); + if (timeLeft < 0) { + PRHARedundancyProvider.timedOut(this, null, null, "destroy an entry", this.retryTimeout); + // NOTREACHED + } + + // Didn't time out. Sleep a bit and then continue + boolean interrupted = Thread.interrupted(); + try { + Thread.sleep(PartitionedRegionHelper.DEFAULT_WAIT_PER_RETRY_ITERATION); + } + catch (InterruptedException e) { + interrupted = true; + } + finally { + if (interrupted) { + Thread.currentThread().interrupt(); + } + } + break; + } + count ++; + + if (currentTarget == null) { // pick target + checkReadiness(); + + if (retryTime == null) { + retryTime = new RetryTimeKeeper(this.retryTimeout); + } + if (retryTime.overMaximum()) { + // if (this.getNodeList(bucketId) == null + // || this.getNodeList(bucketId).size() == 0) { + // throw new EntryNotFoundException("Entry not found for key " + // + event.getKey()); + // } + if (getRegionAdvisor().getBucket(bucketId.intValue()) + .getBucketAdvisor().basicGetPrimaryMember() == null) { + throw new EntryNotFoundException(LocalizedStrings.PartitionedRegion_ENTRY_NOT_FOUND_FOR_KEY_0.toLocalizedString(event.getKey())); + } + TimeoutException e = new TimeoutException(LocalizedStrings.PartitionedRegion_TIME_OUT_LOOKING_FOR_TARGET_NODE_FOR_DESTROY_WAITED_0_MS.toLocalizedString( + Integer.valueOf(retryTime.getRetryTime()))); + if (logger.isDebugEnabled()) { + logger.debug(e.getMessage(), e); + } + checkReadiness(); + throw e; + } + + currentTarget = getOrCreateNodeForBucketWrite(bucketId.intValue(), retryTime); + + // No storage found for bucket, early out preventing hot loop, bug 36819 + if (currentTarget == null) { + checkEntryNotFound(event.getKey()); + } + continue; + } // pick target + + final boolean isLocal = (this.localMaxMemory > 0) && currentTarget.equals(getMyId()); + try { + + DistributedRemoveAllOperation savedOp = event.setRemoveAllOperation(null); + if (savedOp != null) { + savedOp.addEntry(event, bucketId); + return; + } + if (isLocal) { +// doCacheWriteBeforeDestroy(event); + event.setInvokePRCallbacks(true); + this.dataStore.destroyLocally(bucketId, + event, expectedOldValue); + } + else { + if (event.isBridgeEvent()) { + setNetworkHop(bucketId, currentTarget); + } + destroyRemotely(currentTarget, + bucketId, + event, + expectedOldValue); + if (localCacheEnabled) { + try { + // only destroy in local cache if successfully destroyed remotely + final boolean cacheWrite = true; + super.basicDestroy(event, + cacheWrite, + null); // pass null as expectedOldValue, + // since if successfully destroyed + // remotely we always want to succeed + // locally + } + catch (EntryNotFoundException enf) { + if (logger.isDebugEnabled()) { + logger.debug("destroyInBucket: Failed to invalidate from local cache because of EntryNotFoundException.", enf); + } + } + } + } + return; + + // NOTREACHED (success) + } + catch (ConcurrentCacheModificationException e) { + if (logger.isDebugEnabled()) { + logger.debug("destroyInBucket: caught concurrent cache modification exception", e); + } + event.isConcurrencyConflict(true); + + if (logger.isTraceEnabled()) { + logger.trace("ConcurrentCacheModificationException received for destroyInBucket for bucketId: {}{}{} for event: {} No reattempt is done, returning from here", + getPRId(), BUCKET_ID_SEPARATOR, bucketId, event); + } + return; + } + catch (ForceReattemptException e) { + e.checkKey(event.getKey()); + // We don't know if the destroy took place or not at this point. + // Assume that if the next destroy throws EntryDestroyedException, the + // previous destroy attempt was a success + checkReadiness(); + InternalDistributedMember lastNode = currentTarget; + if (retryTime == null) { + retryTime = new RetryTimeKeeper(this.retryTimeout); + } + currentTarget = getOrCreateNodeForBucketWrite(bucketId.intValue(), retryTime); + event.setPossibleDuplicate(true); + if (lastNode.equals(currentTarget)) { + if (retryTime.overMaximum()) { + PRHARedundancyProvider.timedOut(this, null, null, "destroy an entry", retryTime.getRetryTime()); + } + retryTime.waitToRetryNode(); + } + } + catch (PrimaryBucketException notPrimary) { + if (logger.isDebugEnabled()) { + logger.debug("destroyInBucket: {} on Node {} not primary", notPrimary.getLocalizedMessage(), currentTarget); + } + getRegionAdvisor().notPrimary(bucketId.intValue(), currentTarget); + if (retryTime == null) { + retryTime = new RetryTimeKeeper(this.retryTimeout); + } + currentTarget = getOrCreateNodeForBucketWrite(bucketId.intValue(), retryTime); + } + + // If we get here, the attempt failed. + if (count == 1) { + this.prStats.incDestroyOpsRetried(); + } + this.prStats.incDestroyRetries(); + + if (logger.isDebugEnabled()) { + logger.debug("destroyInBucket: Attempting to resend destroy to node {} after {} failed attempts", currentTarget, count); + } + } // for + } + + /** + * TODO txMerge verify + * + * @param bucketId + * @param targetNode + */ + + private void setNetworkHop(final Integer bucketId, + final InternalDistributedMember targetNode) { + + if (this.isDataStore() && !getMyId().equals(targetNode)) { + Set profiles = this.getRegionAdvisor() + .getClientBucketProfiles(bucketId); + + if (profiles != null) { + for (ServerBucketProfile profile : profiles) { + if (profile.getDistributedMember().equals(targetNode)) { + + if (isProfileFromSameGroup(profile)) { + if (this.isNetworkHop() != 1 && logger.isDebugEnabled()) { + logger.debug("one-hop: cache op meta data staleness observed. Message is in same server group (byte 1)"); + } + this.setIsNetworkHop((byte)1); + } else { + if (this.isNetworkHop() != 2 && logger.isDebugEnabled()) { + logger.debug("one-hop: cache op meta data staleness observed. Message is to different server group (byte 2)"); + } + this.setIsNetworkHop((byte)2); + } + this.setMetadataVersion((byte)profile.getVersion()); + break; + } + } + } + } + } + + public boolean isProfileFromSameGroup(ServerBucketProfile profile) { + Set localServerGroups = getLocalServerGroups(); + if (localServerGroups.isEmpty()) { + return true; + } + + Set locations = profile.getBucketServerLocations(); + + for (BucketServerLocation66 sl : locations) { + String[] groups = sl.getServerGroups(); + if (groups.length == 0) { + return true; + } else { + for (String s : groups) { + if (localServerGroups.contains(s)) + return true; + } + } + } + return false; + } + + public Set getLocalServerGroups() { + Set localServerGroups = new HashSet(); + GemFireCacheImpl c = getCache(); + List servers = null; + + servers = c.getCacheServers(); + + Collections.addAll(localServerGroups, MemberAttributes.parseGroups(null, c.getSystem().getConfig().getGroups())); + + for (Object object : servers) { + CacheServerImpl server = (CacheServerImpl)object; + if (server.isRunning() && (server.getExternalAddress() != null)) { + Collections.addAll(localServerGroups, server.getGroups()); + } + } + return localServerGroups; + } + /** + * Destroy the entry on the remote node. + * + * @param recipient + * the member id of the receiver of the message + * @param bucketId + * the idenity of the bucket + * @param event + * the event prompting this request + * @param expectedOldValue + * if not null, then destroy only if entry exists and current value + * is equal to expectedOldValue + * @throws EntryNotFoundException if entry not found OR if expectedOldValue + * is non-null and doesn't equal the current value + * @throws PrimaryBucketException + * if the bucket on that node is not the primary copy + * @throws ForceReattemptException + * if the peer is no longer available + */ + public void destroyRemotely(DistributedMember recipient, + Integer bucketId, + EntryEventImpl event, + Object expectedOldValue) + throws EntryNotFoundException, + PrimaryBucketException, + ForceReattemptException { + DestroyResponse response = DestroyMessage.send(recipient, + this, + event, + expectedOldValue); + if (response != null) { + this.prStats.incPartitionMessagesSent(); + try { + response.waitForCacheException(); + event.setVersionTag(response.getVersionTag()); + } + catch (EntryNotFoundException enfe) { + throw enfe; + } catch (TransactionDataNotColocatedException enfe) { + throw enfe; + } catch (TransactionDataRebalancedException e) { + throw e; + } + catch (CacheException ce) { + throw new PartitionedRegionException(LocalizedStrings.PartitionedRegion_DESTROY_OF_ENTRY_ON_0_FAILED.toLocalizedString(recipient), ce); + } + catch (RegionDestroyedException rde) { + throw new RegionDestroyedException(toString(), getFullPath()); + } + } + } + + /** + * This is getter method for local max memory. + * + * @return local max memory for this PartitionedRegion + */ + public int getLocalMaxMemory() { + return this.localMaxMemory; + } + + /** + * This is getter method for redundancy. + * + * @return redundancy for this PartitionedRegion + */ + final public int getRedundantCopies() { + return this.redundantCopies; + } + + @Override + void createEventTracker() { + // PR buckets maintain their own trackers. None is needed at this level + } + + @Override + public VersionTag findVersionTagForClientEvent(EventID eventId) { + if (this.dataStore != null) { + Set> bucketMap = this.dataStore.getAllLocalBuckets(); + for (Map.Entry entry: bucketMap) { + VersionTag result = entry.getValue().findVersionTagForClientEvent(eventId); + if (result != null) { + return result; + } + } + } + return null; + } + + @Override + public VersionTag findVersionTagForClientBulkOp(EventID eventId) { + Map results = new HashMap(); + if (this.dataStore != null) { + Set> bucketMap = this.dataStore.getAllLocalBuckets(); + for (Map.Entry entry: bucketMap) { + VersionTag bucketResult = entry.getValue().findVersionTagForClientBulkOp(eventId); + if (bucketResult != null) { + return bucketResult; + } + } + } + return null; + } + + /* + * This method cleans the Partioned region structures if the the creation of + * Partition region fails + * OVERRIDES + */ + @Override + public void cleanupFailedInitialization() { + super.cleanupFailedInitialization(); + //Fix for 44551 - make sure persistent buckets + //are done recoverying from disk before sending the + //destroy region message. + this.redundancyProvider.waitForPersistentBucketRecovery(); + this.cache.removePartitionedRegion(this); + this.cache.getResourceManager(false).removeResourceListener(this); + this.redundancyProvider.shutdown(); // see bug 41094 + int serials[] = getRegionAdvisor().getBucketSerials(); + RegionEventImpl event = new RegionEventImpl(this, Operation.REGION_CLOSE, + null, false, getMyId(), generateEventID()/* generate EventID */); + try { + sendDestroyRegionMessage(event, serials); + } + catch (Exception ex) { + logger.warn(LocalizedMessage.create( + LocalizedStrings.PartitionedRegion_PARTITIONEDREGION_CLEANUPFAILEDINITIALIZATION_FAILED_TO_CLEAN_THE_PARTIONREGION_DATA_STORE), ex); + } + if (null != this.dataStore) { + try { + this.dataStore.cleanUp(true, false); + } + catch (Exception ex) { + logger.warn(LocalizedMessage.create( + LocalizedStrings.PartitionedRegion_PARTITIONEDREGION_CLEANUPFAILEDINITIALIZATION_FAILED_TO_CLEAN_THE_PARTIONREGION_DATA_STORE), ex); + } + } + + if (this.cleanPRRegistration) { + try { + synchronized (prIdToPR) { + if (prIdToPR.containsKey(Integer.valueOf(this.partitionedRegionId))) { + prIdToPR.put(Integer.valueOf(this.partitionedRegionId), + PRIdMap.FAILED_REGISTRATION, false); + if (logger.isDebugEnabled()) { + logger.debug("cleanupFailedInitialization: set failed for prId={} named {}", this.partitionedRegionId, this.getName()); + } + } + } + + PartitionedRegionHelper.removeGlobalMetadataForFailedNode(this.node, + this.getRegionIdentifier(), this.getGemFireCache(), true); + } + catch (Exception ex) { + logger.warn(LocalizedMessage.create( + LocalizedStrings.PartitionedRegion_PARTITIONEDREGION_CLEANUPFAILEDINITIALIZATION_FAILED_TO_CLEAN_THE_PARTIONREGION_ALLPARTITIONEDREGIONS), ex); + } + } + this.distAdvisor.close(); + getPrStats().close(); + if(getDiskStore() != null && getDiskStore().getOwnedByRegion()) { + getDiskStore().close(); + } + if (logger.isDebugEnabled()) { + logger.debug("cleanupFailedInitialization: end of {}", getName()); + } + } + + /** + * Perform cleanup when the Cache closes OVERRIDES + */ + // void handleCacheClose() + // { + // super.handleCacheClose(); + // basicClose(); + // } + /** + * Do what needs to be done to partitioned regions state when closing. + */ + // private void basicClose() + // { + // getPrStats().close(); + // // isClosed = true; + // } + /** + * Called after the cache close has closed all regions. This clean up static + * pr resources. + * + * @since 5.0 + */ + static void afterRegionsClosedByCacheClose(GemFireCacheImpl cache) { + PRQueryProcessor.shutdown(); + clearPRIdMap(); + } + + static void destroyLockService() { + PartitionedRegionHelper.destroyLockService(); + } + + @Override + void basicInvalidateRegion(RegionEventImpl event) { + final boolean isDebugEnabled = logger.isDebugEnabled(); + + if (!event.isOriginRemote()) { + sendInvalidateRegionMessage(event); + } + for (BucketRegion br : getDataStore().getAllLocalPrimaryBucketRegions()) { + if (logger.isDebugEnabled()) { + logger.debug("Invalidating bucket {}", br); + } + br.basicInvalidateRegion(event); + } + super.basicInvalidateRegion(event); + } + + @Override + protected void invalidateAllEntries(RegionEvent rgnEvent) { + } + + private void sendInvalidateRegionMessage(RegionEventImpl event) { + final int retryAttempts = calcRetry(); + Throwable thr = null; + int count = 0; + while (count <= retryAttempts) { + try { + count++; + Set recipients = getRegionAdvisor().adviseDataStore(); + ReplyProcessor21 response = InvalidatePartitionedRegionMessage.send( + recipients, this, event); + response.waitForReplies(); + thr = null; + break; + } catch (ReplyException e) { + thr = e; + if (!this.isClosed && !this.isDestroyed) { + if (logger.isDebugEnabled()) { + logger.debug("Invalidating partitioned region caught exception", e); + } + } + } catch (InterruptedException e) { + thr = e; + if (this.cache.getCancelCriterion().cancelInProgress() == null) { + if (logger.isDebugEnabled()) { + logger.debug("Invalidating partitioned region caught exception", e); + } + } + } + } + if (thr != null) { + PartitionedRegionDistributionException e = new PartitionedRegionDistributionException( + LocalizedStrings.PartitionedRegion_INVALIDATING_REGION_CAUGHT_EXCEPTION + .toLocalizedString(Integer.valueOf(count))); + if (logger.isDebugEnabled()) { + logger.debug(e.getMessage(), e); + } + throw e; + } + } + + @Override + void basicInvalidate(EntryEventImpl event) throws EntryNotFoundException { + final long startTime = PartitionedRegionStats.startTime(); + try { + if (event.getEventId() == null) { + event.setNewEventId(this.cache.getDistributedSystem()); + } + discoverJTA(); + getDataView().invalidateExistingEntry(event, isInitialized(), false); + } + catch (RegionDestroyedException rde) { + if (!rde.getRegionFullPath().equals(getFullPath())) { + // Handle when a bucket is destroyed + RegionDestroyedException rde2 = new RegionDestroyedException(toString(), getFullPath()); + rde2.initCause(rde); + throw rde2; + } + } + finally { + this.prStats.endInvalidate(startTime); + } + return; + } + + /* + * We yet don't have any stats for this operation. + * (non-Javadoc) + * @see com.gemstone.gemfire.internal.cache.LocalRegion#basicUpdateEntryVersion(com.gemstone.gemfire.internal.cache.EntryEventImpl) + */ + @Override + void basicUpdateEntryVersion(EntryEventImpl event) + throws EntryNotFoundException { + + try { + if (event.getEventId() == null) { + event.setNewEventId(this.cache.getDistributedSystem()); + } + getDataView().updateEntryVersion(event); + } + catch (RegionDestroyedException rde) { + if (!rde.getRegionFullPath().equals(getFullPath())) { + // Handle when a bucket is destroyed + RegionDestroyedException rde2 = new RegionDestroyedException(toString(), getFullPath()); + rde2.initCause(rde); + throw rde2; + } + } + return; + } + + + /** + * Invalidate the entry in the bucket identified by the key + * @param event + * @throws EntryNotFoundException + */ + void invalidateInBucket(final EntryEventImpl event) + throws EntryNotFoundException { + final boolean isDebugEnabled = logger.isDebugEnabled(); + + final Integer bucketId = event.getKeyInfo().getBucketId(); + assert bucketId != KeyInfo.UNKNOWN_BUCKET; + final InternalDistributedMember targetNode = getOrCreateNodeForBucketWrite( + bucketId, null); + + final int retryAttempts = calcRetry(); + int count = 0; + RetryTimeKeeper retryTime = null; + InternalDistributedMember retryNode = targetNode; + while (count <= retryAttempts) { + // It's possible this is a GemFire thread e.g. ServerConnection + // which got to this point because of a distributed system shutdown or + // region closure which uses interrupt to break any sleep() or wait() + // calls + // e.g. waitForPrimary or waitForBucketRecovery + checkShutdown(); + + if (retryNode == null) { + checkReadiness(); + if (retryTime == null) { + retryTime = new RetryTimeKeeper(this.retryTimeout); + } + try { + retryNode = getOrCreateNodeForBucketWrite(bucketId.intValue(), retryTime); + } + catch (TimeoutException te) { + if (getRegionAdvisor() + .isStorageAssignedForBucket(bucketId.intValue())) { // bucket no + // longer + // exists + throw new EntryNotFoundException(LocalizedStrings.PartitionedRegion_ENTRY_NOT_FOUND_FOR_KEY_0.toLocalizedString(event.getKey())); + } + break; // fall out to failed exception + } + + if (retryNode == null) { + checkEntryNotFound(event.getKey()); + } + continue; + } + final boolean isLocal = (this.localMaxMemory > 0) && retryNode.equals(getMyId()); + try { + if (isLocal) { + event.setInvokePRCallbacks(true); + this.dataStore.invalidateLocally(bucketId, event); + } + else { + invalidateRemotely(retryNode, bucketId, event); + if (localCacheEnabled) { + try { + super.basicInvalidate(event); + } + catch (EntryNotFoundException enf) { + if (isDebugEnabled) { + logger.debug("invalidateInBucket: Failed to invalidate from local cache because of EntryNotFoundException.", enf); + } + } + } + } + return; + } catch (ConcurrentCacheModificationException e) { + if (isDebugEnabled) { + logger.debug("invalidateInBucket: caught concurrent cache modification exception", e); + } + event.isConcurrencyConflict(true); + + if (isDebugEnabled) { + logger.debug("ConcurrentCacheModificationException received for invalidateInBucket for bucketId: {}{}{} for event: {} No reattampt is done, returning from here", + getPRId(), BUCKET_ID_SEPARATOR, bucketId, event); + } + return; + } + catch (ForceReattemptException prce) { + prce.checkKey(event.getKey()); + if (isDebugEnabled) { + logger.debug("invalidateInBucket: retry attempt:{} of {}", count, retryAttempts, prce); + } + checkReadiness(); + + InternalDistributedMember lastNode = retryNode; + retryNode = getOrCreateNodeForBucketWrite(bucketId.intValue(), retryTime); + if (lastNode.equals(retryNode)) { + if (retryTime == null) { + retryTime = new RetryTimeKeeper(this.retryTimeout); + } + if (retryTime.overMaximum()) { + break; + } + retryTime.waitToRetryNode(); + } + event.setPossibleDuplicate(true); + } + catch (PrimaryBucketException notPrimary) { + if (isDebugEnabled) { + logger.debug("invalidateInBucket {} on Node {} not primary", notPrimary.getLocalizedMessage(), retryNode); + } + getRegionAdvisor().notPrimary(bucketId.intValue(), retryNode); + retryNode = getOrCreateNodeForBucketWrite(bucketId.intValue(), retryTime); + } + + count++; + if (count == 1) { + this.prStats.incInvalidateOpsRetried(); + } + this.prStats.incInvalidateRetries(); + if (isDebugEnabled) { + logger.debug("invalidateInBucket: Attempting to resend invalidate to node {} after {} failed attempts", retryNode, count); + } + } // while + + // No target was found + PartitionedRegionDistributionException e + = new PartitionedRegionDistributionException(LocalizedStrings.PartitionedRegion_NO_VM_AVAILABLE_FOR_INVALIDATE_IN_0_ATTEMPTS + .toLocalizedString(Integer.valueOf(count))); // Fix for bug 36014 + if (!isDebugEnabled) { + logger.warn(LocalizedMessage.create(LocalizedStrings.PartitionedRegion_NO_VM_AVAILABLE_FOR_INVALIDATE_IN_0_ATTEMPTS, Integer.valueOf(count))); + } + else { + logger.warn(e.getMessage(), e); + } + throw e; + } + + /** + * invalidates the remote object with the given key. + * + * @param recipient + * the member id of the recipient of the operation + * @param bucketId + * the id of the bucket the key hashed into + * @throws EntryNotFoundException + * if the entry does not exist in this region + * @throws PrimaryBucketException + * if the bucket on that node is not the primary copy + * @throws ForceReattemptException + * if the peer is no longer available + */ + public void invalidateRemotely(DistributedMember recipient, + Integer bucketId, EntryEventImpl event) + throws EntryNotFoundException, PrimaryBucketException, + ForceReattemptException { + InvalidateResponse response = InvalidateMessage.send(recipient, this, event); + if (response != null) { + this.prStats.incPartitionMessagesSent(); + try { + response.waitForResult(); + event.setVersionTag(response.versionTag); + return; + } + catch (EntryNotFoundException ex) { + throw ex; + } catch (TransactionDataNotColocatedException ex) { + throw ex; + } catch (TransactionDataRebalancedException e) { + throw e; + } catch (CacheException ce) { + throw new PartitionedRegionException(LocalizedStrings.PartitionedRegion_INVALIDATION_OF_ENTRY_ON_0_FAILED.toLocalizedString(recipient), ce); + } + } + } + + /** + * Calculate the number of times we attempt to commumnicate with a data store. + * Beware that this method is called very frequently so it absolutely must + * perform well. + * + * @return the number of times to attempt to communicate with a data store + */ + private int calcRetry() { + return (this.retryTimeout / + PartitionedRegionHelper.DEFAULT_WAIT_PER_RETRY_ITERATION) + 1; + } + + /** + * Creates the key/value pair into the remote target that is managing the + * key's bucket. + * + * @param recipient + * member id of the recipient of the operation + * @param bucketId + * the id of the bucket that the key hashed to + * @param event + * the event prompting this request + * @throws PrimaryBucketException + * if the bucket on that node is not the primary copy + * @throws ForceReattemptException + * if the peer is no longer available + * @throws EntryExistsException + */ + private boolean createRemotely(DistributedMember recipient, + Integer bucketId, + EntryEventImpl event, + boolean requireOldValue) + throws PrimaryBucketException, ForceReattemptException { + boolean ret = false; + long eventTime = event.getEventTime(0L); + PutMessage.PutResponse reply = + (PutMessage.PutResponse)PutMessage.send(recipient, + this, + event, + eventTime, + true, + false, + null, // expectedOldValue + requireOldValue); + PutResult pr = null; + if (reply != null) { + this.prStats.incPartitionMessagesSent(); + try { + pr = reply.waitForResult(); + event.setOperation(pr.op); + event.setVersionTag(pr.versionTag); + if (requireOldValue) { + event.setOldValue(pr.oldValue, true); + } + ret = pr.returnValue; + // if (!pr.returnValue) { + // throw new EntryExistsException("An entry already exists for key " + + // event.getKey() + " on region " + getFullPath()); + // } + } + catch (EntryExistsException eee) { + // This might not be necessary and is here for safety sake + ret = false; + } catch (TransactionDataNotColocatedException tdnce) { + throw tdnce; + } catch (TransactionDataRebalancedException e) { + throw e; + } catch (CacheException ce) { + throw new PartitionedRegionException(LocalizedStrings.PartitionedRegion_CREATE_OF_ENTRY_ON_0_FAILED.toLocalizedString(recipient), ce); + } + catch (RegionDestroyedException rde) { + if (logger.isDebugEnabled()) { + logger.debug("createRemotely: caught exception", rde); + } + throw new RegionDestroyedException(toString(), getFullPath()); + } + } + return ret; + } + + // //////////////////////////////// + // ////// Set Operations ///////// + // /////////////////////////////// + + /** + * This method returns set of all the entries of this + * PartitionedRegion(locally or remotely). Currently, it throws + * UnsupportedOperationException + * + * @param recursive + * boolean flag to indicate whether subregions should be + * considered or not. + * @return set of all the entries of this PartitionedRegion + * + * OVERRIDES + */ + @Override + public Set entries(boolean recursive) { + checkReadiness(); + return Collections.unmodifiableSet(new PREntriesSet()); + } + + /** + * Currently used by SQLFabric to get a non-wrapped iterator for all entries + * for index consistency check. + */ + public Set allEntries() { + return new PREntriesSet(); + } + + + /** + * Set view of entries. This currently extends the keySet iterator and + * performs individual getEntry() operations using the keys + * + * @since 5.1 + */ + protected class PREntriesSet extends KeysSet { + + boolean allowTombstones; + + private class EntriesSetIterator extends KeysSetIterator { + + /** reusable KeyInfo */ + private final KeyInfo key = new KeyInfo(null, null, null); + + public EntriesSetIterator(Set bucketSet, boolean allowTombstones) { + super(bucketSet, allowTombstones); + PREntriesSet.this.allowTombstones = allowTombstones; + } + + @Override + public Object next() { + this.key.setKey(super.next()); + this.key.setBucketId(this.currentBucketId); + + Object entry = view.getEntryForIterator(this.key, PartitionedRegion.this, true, allowTombstones); + return entry != null ? entry : new DestroyedEntry(key.getKey().toString()); + } + } + + public PREntriesSet() { + super(); + } + public PREntriesSet(Set bucketSet) { + super(bucketSet); + } + + @Override + public Iterator iterator() { + checkTX(); + return new EntriesSetIterator(this.bucketSet, allowTombstones); + } + } + + /** + * This method returns set of all the keys of this PartitionedRegion(locally + * or remotely). + * + * @return set of all the keys of this PartitionedRegion + * + * OVERRIDES + */ + @Override + public Set keys() { + checkReadiness(); + return Collections.unmodifiableSet(new KeysSet()); + } + + @Override + public Set keySet(boolean allowTombstones) { + checkReadiness(); + return Collections.unmodifiableSet(new KeysSet(allowTombstones)); + } + + public Set keysWithoutCreatesForTests() { + checkReadiness(); + Set availableBuckets = new HashSet(); + for(int i =0; i < getTotalNumberOfBuckets(); i++) { + if(distAdvisor.isStorageAssignedForBucket(i)) { + availableBuckets.add(Integer.valueOf(i)); + } + } + return Collections.unmodifiableSet(new KeysSet(availableBuckets)); + } + + /** Set view of entries */ + protected class KeysSet extends EntriesSet { + class KeysSetIterator implements PREntriesIterator { + final Iterator bucketSetI; + volatile Iterator currentBucketI = null; + int currentBucketId = -1; + volatile Object currentKey = null; + final protected Set bucketSet; + boolean allowTombstones; + + public KeysSetIterator(Set bucketSet, boolean allowTombstones) { + PartitionedRegion.this.checkReadiness(); + this.bucketSet = bucketSet; + this.allowTombstones = allowTombstones; + this.bucketSetI = createBucketSetI(); + this.currentBucketI = getNextBucketIter(false /* no throw */); + } + + protected Iterator createBucketSetI() { + if (this.bucketSet != null) { + return this.bucketSet.iterator(); + } + return getRegionAdvisor().getBucketSet().iterator(); + } + + public boolean hasNext() { + PartitionedRegion.this.checkReadiness(); + if (this.currentBucketI.hasNext()) { + return true; + } + else { + while (!this.currentBucketI.hasNext() && this.bucketSetI.hasNext()) { + PartitionedRegion.this.checkReadiness(); + this.currentBucketI = getNextBucketIter(false); + } + return this.currentBucketI.hasNext(); + } + } + + public Object next() { + if (myTX != null && !skipTxCheckInIteration) { + checkTX(); + } + PartitionedRegion.this.checkReadiness(); + if (this.currentBucketI.hasNext()) { + this.currentKey = this.currentBucketI.next(); + } + else { + this.currentKey = null; + while (!this.currentBucketI.hasNext() && this.bucketSetI.hasNext()) { + PartitionedRegion.this.checkReadiness(); + this.currentBucketI = getNextBucketIter(true); + } + // Next line may throw NoSuchElementException... this is expected. + this.currentKey = this.currentBucketI.next(); + } + return this.currentKey; + } + + protected Iterator getNextBucketIter(boolean canThrow) { + try { + this.currentBucketId = this.bucketSetI.next().intValue(); + // @todo: optimize this code by implementing getBucketKeysIterator. + // Instead of creating a Set to return it can just create an ArrayList + // and return an iterator on it. This would cut down on garbage and + // cpu usage. + return view.getBucketKeys(PartitionedRegion.this, + this.currentBucketId, this.allowTombstones).iterator(); + } + catch (NoSuchElementException endOfTheLine) { + if (canThrow) { + throw endOfTheLine; + } + else { + // Logically pass the NoSuchElementException to the caller + // Can't throw here because it is called in the contructor context + return Collections.EMPTY_SET.iterator(); + } + } + } + + public void remove() { + if (this.currentKey == null) { + throw new IllegalStateException(); + } + try { + PartitionedRegion.this.destroy(this.currentKey); + } + catch (EntryNotFoundException ignore) { + if (logger.isDebugEnabled()) { + logger.debug("Caught exception during KeySetIterator remove", ignore); + } + } + finally { + this.currentKey = null; + } + } + + public final PartitionedRegion getPartitionedRegion() { + return PartitionedRegion.this; + } + + public final int getBucketId() { + return this.currentBucketId; + } + + } + + final protected Set bucketSet; + + public KeysSet() { + super(PartitionedRegion.this, false, IteratorType.KEYS, false); + this.bucketSet = null; + } + public KeysSet(boolean allowTombstones) { + super(PartitionedRegion.this, false, IteratorType.KEYS, allowTombstones); + this.bucketSet = null; + } + public KeysSet(Set bucketSet) { + super(PartitionedRegion.this, false, IteratorType.KEYS, false); + this.bucketSet = bucketSet ; + } + @Override + public int size() { + checkTX(); + return PartitionedRegion.this.entryCount(this.bucketSet); + } + + @Override + public Object[] toArray() { + return toArray(null); + } + + @Override + public Object[] toArray(Object[] array) { + List temp = new ArrayList(this.size()); + for (Iterator iter = this.iterator(); iter.hasNext();) { + temp.add(iter.next()); + } + if (array == null) { + return temp.toArray(); + } + else { + return temp.toArray(array); + } + } + + @Override + public Iterator iterator() { + checkTX(); + return new KeysSetIterator(this.bucketSet, this.allowTombstones); + } + } + + /** + * This method returns collection of all the values of this + * PartitionedRegion(locally or remotely). + * + * @return collection of all the values of this PartitionedRegion + */ + @Override + public Collection values() { + checkReadiness(); + return Collections.unmodifiableSet(new ValuesSet()); + } + + /** + * Set view of values. This currently extends the keySet iterator and performs + * individual get() operations using the keys + * + * @since 5.1 + */ + protected class ValuesSet extends KeysSet { + + private class ValuesSetIterator extends KeysSetIterator { + + Object nextValue = null; + + /** reusable KeyInfo */ + private final KeyInfo key = new KeyInfo(null, null, null); + + public ValuesSetIterator(Set bucketSet) { + super(bucketSet, false); + } + + @Override + public boolean hasNext() { + if (nextValue != null) { + return true; + } + while (nextValue == null) { + if (!super.hasNext()) { + return false; + } + this.key.setKey(super.next()); + this.key.setBucketId(this.currentBucketId); + Region.Entry re = (Region.Entry) view.getEntryForIterator(key, PartitionedRegion.this, rememberReads, allowTombstones); + if (re != null) { + nextValue = re.getValue(); + } + } + return true; + } + + @Override + public Object next() { + if (!this.hasNext()) { + throw new NoSuchElementException(); + } + Assert.assertTrue(nextValue != null, "nextValue found to be null"); + Object result = nextValue; + nextValue = null; + return result; + } + + @Override + public void remove() { + super.remove(); + nextValue = null; + } + } + + public ValuesSet() { + super(); + } + public ValuesSet(Set bucketSet) { + super(bucketSet); + } + + @Override + public Iterator iterator() { + checkTX(); + return new ValuesSetIterator(this.bucketSet); + } + } + + /** + * @since 6.6 + */ + @Override + public boolean containsValue(final Object value) { + if (value == null) { + throw new NullPointerException(LocalizedStrings.LocalRegion_VALUE_FOR_CONTAINSVALUEVALUE_CANNOT_BE_NULL.toLocalizedString()); + } + checkReadiness(); + // First check the values is present locally. + if (this.getDataStore() != null) { + ValuesSet vSet = new ValuesSet(this.getDataStore() + .getAllLocalPrimaryBucketIds()); + Iterator itr = vSet.iterator(); + while (itr.hasNext()) { + Object v = itr.next(); + if (v.equals(value)) { + return true; + } + } + } + + ResultCollector rc = null; + try { + rc = FunctionService.onRegion(this).withArgs((Serializable)value) + .execute(PRContainsValueFunction.class.getName()); + List results = ((List)rc.getResult()); + for(Boolean r: results){ + if(r){ + return true; + } + } + } + catch (FunctionException fe) { + checkShutdown(); + logger.warn(LocalizedMessage.create(LocalizedStrings.PR_CONTAINSVALUE_WARNING), fe.getCause()); + } + return false; + } + + @Override + public boolean containsKey(Object key) { + checkReadiness(); + validateKey(key); + return getDataView().containsKey(getKeyInfo(key), this); + } + + /** + * @param keyInfo + * @return TODO + */ + @Override + protected boolean nonTXContainsKey(KeyInfo keyInfo) { + final long startTime = PartitionedRegionStats.startTime(); + boolean contains = false; + try { + int bucketId = keyInfo.getBucketId(); + if (bucketId == KeyInfo.UNKNOWN_BUCKET) { + bucketId = PartitionedRegionHelper.getHashKey(this, + Operation.CONTAINS_KEY, keyInfo.getKey(), keyInfo.getValue(), + keyInfo.getCallbackArg()); + keyInfo.setBucketId(bucketId); + } + Integer bucketIdInt = Integer.valueOf(bucketId); + InternalDistributedMember targetNode = getOrCreateNodeForBucketRead(bucketId); + // targetNode null means that this key is not in the system. + if (targetNode != null) { + contains = containsKeyInBucket(targetNode, bucketIdInt, keyInfo.getKey(), false); + } + } + finally { + this.prStats.endContainsKey(startTime); + } + return contains; + } + + boolean containsKeyInBucket(final InternalDistributedMember targetNode, + final Integer bucketIdInt, final Object key, boolean valueCheck) { + final int retryAttempts = calcRetry(); + if (logger.isDebugEnabled()) { + logger.debug("containsKeyInBucket: {}{} ({}) from: {} bucketId={}", + (valueCheck ? "ValueForKey key=" : "Key key="), key, key.hashCode(), targetNode, bucketStringForLogs(bucketIdInt.intValue())); + } + boolean ret; + int count = 0; + RetryTimeKeeper retryTime = null; + InternalDistributedMember retryNode = targetNode; + while (count <= retryAttempts) { + // Every continuation should check for DM cancellation + if (retryNode == null) { + checkReadiness(); + if (retryTime == null) { + retryTime = new RetryTimeKeeper(this.retryTimeout); + } + if (retryTime.overMaximum()) { + break; + } + retryNode = getOrCreateNodeForBucketRead(bucketIdInt.intValue()); + // No storage found for bucket, early out preventing hot loop, bug 36819 + if (retryNode == null) { + checkShutdown(); // Prefer closed style exceptions over empty result + return false; + } + + continue; + } // retryNode != null + try { + final boolean loc = retryNode.equals(getMyId()); + if (loc) { + if (valueCheck) { + ret = this.dataStore.containsValueForKeyLocally(bucketIdInt, key); + } + else { + ret = this.dataStore.containsKeyLocally(bucketIdInt, key); + } + } + else { + if (valueCheck) { + ret = containsValueForKeyRemotely(retryNode, bucketIdInt, key); + } + else { + ret = containsKeyRemotely(retryNode, bucketIdInt, key); + } + } + return ret; + } + catch (PRLocallyDestroyedException pde) { + if (logger.isDebugEnabled()) { + logger.debug("containsKeyInBucket: Encountered PRLocallyDestroyedException", pde); + } + checkReadiness(); + } + catch (ForceReattemptException prce) { + prce.checkKey(key); + if (logger.isDebugEnabled()) { + logger.debug("containsKeyInBucket: retry attempt:{} of {}", count, retryAttempts, prce); + } + checkReadiness(); + + InternalDistributedMember lastNode = retryNode; + retryNode = getOrCreateNodeForBucketRead(bucketIdInt.intValue()); + if (lastNode.equals(retryNode)) { + if (retryTime == null) { + retryTime = new RetryTimeKeeper(this.retryTimeout); + } + if (retryTime.overMaximum()) { + break; + } + retryTime.waitToRetryNode(); + } + } + catch (PrimaryBucketException notPrimary) { + if (logger.isDebugEnabled()) { + logger.debug("containsKeyInBucket {} on Node {} not primary", notPrimary.getLocalizedMessage(), retryNode); + } + getRegionAdvisor().notPrimary(bucketIdInt.intValue(), retryNode); + retryNode = getOrCreateNodeForBucketRead(bucketIdInt.intValue()); + } + catch (RegionDestroyedException rde) { + if (!rde.getRegionFullPath().equals(getFullPath())) { + RegionDestroyedException rde2 = new RegionDestroyedException(toString(), getFullPath()); + rde2.initCause(rde); + throw rde2; + } + } + + // It's possible this is a GemFire thread e.g. ServerConnection + // which got to this point because of a distributed system shutdown or + // region closure which uses interrupt to break any sleep() or wait() + // calls + // e.g. waitForPrimary + checkShutdown(); + + count++; + if (count == 1) { + this.prStats.incContainsKeyValueOpsRetried(); + } + this.prStats.incContainsKeyValueRetries(); + + } + + StringId msg = null; + if (valueCheck) { + msg = LocalizedStrings.PartitionedRegion_NO_VM_AVAILABLE_FOR_CONTAINS_VALUE_FOR_KEY_IN_1_ATTEMPTS; + } else { + msg = LocalizedStrings.PartitionedRegion_NO_VM_AVAILABLE_FOR_CONTAINS_KEY_IN_1_ATTEMPTS; + } + + Integer countInteger = Integer.valueOf(count); + PartitionedRegionDistributionException e = null; // Fix for bug 36014 + if (logger.isDebugEnabled()) { + e = new PartitionedRegionDistributionException(msg.toLocalizedString(countInteger)); + } + logger.warn(LocalizedMessage.create(msg, countInteger), e); + return false; + } + + /** + * Checks if a key is contained remotely. + * + * @param targetNode + * the node where bucket region for the key exists. + * @param bucketId + * the bucket id for the key. + * @param key + * the key, whose value needs to be checks + * @return true if the passed key is contained remotely. + * @throws PrimaryBucketException + * if the remote bucket was not the primary + * @throws ForceReattemptException + * if the peer is no longer available + */ + public boolean containsKeyRemotely(InternalDistributedMember targetNode, + Integer bucketId, Object key) throws PrimaryBucketException, + ForceReattemptException { + ContainsKeyValueResponse r = ContainsKeyValueMessage.send(targetNode, this, + key, bucketId, false); + this.prStats.incPartitionMessagesSent(); + return r.waitForContainsResult(); + } + + /** + * Returns whether there is a valid (non-null) value present for the specified + * key, locally or remotely. This method is equivalent to: + * + *
+   * Entry e = getEntry(key);
+   * return e != null && e.getValue() != null;
+   * 
+ * + * This method does not consult localCache, even if enabled. + * + * @param key + * the key to check for a valid value + * @return true if there is an entry in this region for the specified key and + * it has a valid value + * OVERRIDES + */ + @Override + public boolean containsValueForKey(Object key) { + // checkClosed(); + checkReadiness(); + validateKey(key); + final long startTime = PartitionedRegionStats.startTime(); + boolean containsValueForKey = false; + try { + containsValueForKey = getDataView().containsValueForKey(getKeyInfo(key), this); + } + finally { + this.prStats.endContainsValueForKey(startTime); + } + return containsValueForKey; + } + + @Override + protected boolean nonTXContainsValueForKey(KeyInfo keyInfo) { + boolean containsValueForKey = false; + int bucketId = keyInfo.getBucketId(); + if (bucketId == KeyInfo.UNKNOWN_BUCKET) { + bucketId = PartitionedRegionHelper.getHashKey(this, + Operation.CONTAINS_VALUE_FOR_KEY, keyInfo.getKey(), + keyInfo.getValue(), keyInfo.getCallbackArg()); + keyInfo.setBucketId(bucketId); + } + InternalDistributedMember targetNode = getOrCreateNodeForBucketRead(bucketId); + // targetNode null means that this key is not in the system. + if (targetNode != null) { + containsValueForKey = containsKeyInBucket(targetNode, bucketId, keyInfo.getKey(), + true); + } + return containsValueForKey; + } + + /** + * Checks if this instance contains a value for the key remotely. + * + * @param targetNode + * the node where bucket region for the key exists. + * @param bucketId + * the bucket id for the key. + * @param key + * the key, whose value needs to be checks + * @return true if there is non-null value for the given key + * @throws PrimaryBucketException + * if the remote bucket was not the primary + * @throws ForceReattemptException + * if the peer is no longer available + */ + public boolean containsValueForKeyRemotely( + InternalDistributedMember targetNode, Integer bucketId, Object key) + throws PrimaryBucketException, ForceReattemptException { + if (logger.isDebugEnabled()) { + logger.debug("containsValueForKeyRemotely: key={}", key); + } + ContainsKeyValueResponse r = ContainsKeyValueMessage.send(targetNode, this, + key, bucketId, true); + this.prStats.incPartitionMessagesSent(); + return r.waitForContainsResult(); + } + + /** + * Get the VSD statistics type + * + * @return the statistics instance specific to this Partitioned Region + */ + public PartitionedRegionStats getPrStats() { + return this.prStats; + } + + // fix for bug #42945 - PR.size() does not pay attention to transaction state +// @Override +// public int entryCount() { +// return entryCount(null); +// } + /* non-transactional size calculation */ + @Override + public int getRegionSize() { + return entryCount(null); + } + + public int entryCount(boolean localOnly) { + if (localOnly) { + if (this.isDataStore()) { + return entryCount(this.dataStore.getAllLocalBucketIds()); + } + else { + return 0; + } + } + else { + return entryCount(null); + } + } + + public int entryCount(Set buckets) { + return entryCount(buckets, false); + } + + public int entryCount(Set buckets, + boolean estimate) { + Map bucketSizes = null; + if (isHDFSReadWriteRegion() && (includeHDFSResults() || estimate)) { + bucketSizes = getSizeForHDFS( buckets, estimate); + } else { + if (buckets != null) { + if (this.dataStore != null) { + List list = new ArrayList(); + list.addAll(buckets); + bucketSizes = this.dataStore.getSizeLocallyForBuckets(list); + } + } + else { + if (this.dataStore != null) { + bucketSizes = this.dataStore.getSizeForLocalBuckets(); + } + HashSet recips = (HashSet)getRegionAdvisor().adviseDataStore(true); + recips.remove(getMyId()); + if (!recips.isEmpty()) { + Map remoteSizes = getSizeRemotely(recips, false); + if (logger.isDebugEnabled()) { + logger.debug("entryCount: {} remoteSizes={}", this, remoteSizes); + } + if (bucketSizes != null && !bucketSizes.isEmpty()) { + for (Map.Entry me : remoteSizes.entrySet()) { + Integer k = me.getKey(); + if (!bucketSizes.containsKey(k) || !bucketSizes.get(k).isPrimary()) { + bucketSizes.put(k, me.getValue()); + } + } + } + else { + bucketSizes = remoteSizes; + } + } + } + } + + int size = 0; + if (bucketSizes != null) { + for(SizeEntry entry : bucketSizes.values()) { + size += entry.getSize(); + } + } + return size; + + + } + + @Override + public long getEstimatedLocalSize() { + final PartitionedRegionDataStore ds = this.dataStore; + if (ds != null) { + return ds.getEstimatedLocalBucketSize(false); + } + else { + return 0; + } + } + private Map getSizeForHDFS(final Set buckets, boolean estimate) { + // figure out which buckets to include + Map bucketSizes = new HashMap(); + getRegionAdvisor().accept(new BucketVisitor>() { + @Override + public boolean visit(RegionAdvisor advisor, ProxyBucketRegion pbr, + Map map) { + if (buckets == null || buckets.contains(pbr.getBucketId())) { + map.put(pbr.getBucketId(), null); + // ensure that the bucket has been created + pbr.getPartitionedRegion().getOrCreateNodeForBucketWrite(pbr.getBucketId(), null); + } + return true; + } + }, bucketSizes); + + RetryTimeKeeper retry = new RetryTimeKeeper(retryTimeout); + + while (true) { + // get the size from local buckets + if (dataStore != null) { + Map localSizes; + if (estimate) { + localSizes = dataStore.getSizeEstimateForLocalPrimaryBuckets(); + } else { + localSizes = dataStore.getSizeForLocalPrimaryBuckets(); + } + for (Map.Entry me : localSizes.entrySet()) { + if (bucketSizes.containsKey(me.getKey())) { + bucketSizes.put(me.getKey(), me.getValue()); + } + } + } + // all done + int count = 0; + Iterator it = bucketSizes.values().iterator(); + while (it.hasNext()) { + if (it.next() != null) count++; + } + if (bucketSizes.size() == count) { + return bucketSizes; + } + + Set remotes = getRegionAdvisor().adviseDataStore(true); + remotes.remove(getMyId()); + + // collect remote sizes + if (!remotes.isEmpty()) { + Map remoteSizes = new HashMap(); + try { + remoteSizes = getSizeRemotely(remotes, estimate); + } catch (ReplyException e) { + // Remote member will never throw ForceReattemptException or + // PrimaryBucketException, so any exception on the remote member + // should be re-thrown + e.handleAsUnexpected(); + } + for (Map.Entry me : remoteSizes.entrySet()) { + Integer k = me.getKey(); + if (bucketSizes.containsKey(k) && me.getValue().isPrimary()) { + bucketSizes.put(k, me.getValue()); + } + } + } + + if (retry.overMaximum()) { + checkReadiness(); + PRHARedundancyProvider.timedOut(this, null, null, "calculate size", retry.getRetryTime()); + } + + // throttle subsequent attempts + retry.waitForBucketsRecovery(); + } + } + + /** + * This method gets a PartitionServerSocketConnection to targetNode and sends + * size request to the node. It returns size of all the buckets "primarily" + * hosted on that node. Here "primarily" means that for a given bucketID that + * node comes first in the node list. This selective counting ensures that + * redundant bucket size is added only once. + * + * @param targetNodes + * @return the size of all the buckets hosted on the target node. + */ + private Map getSizeRemotely(Set targetNodes, boolean estimate) { + SizeResponse r = SizeMessage.send(targetNodes, this, null,estimate); + this.prStats.incPartitionMessagesSent(); + Map retVal = null; + try { + retVal = r.waitBucketSizes(); + } catch (CacheException e) { + checkReadiness(); + throw e; + } + return retVal; + } + + static int getRandom(int max) { + if (max <= 0) { + return 0; + } + int ti = ((Integer)PartitionedRegion.threadRandom.get()).intValue(); + return ti % max; + } + + /** + * Returns the lockname used by Distributed Lock service to clean the + * allPartitionedRegions + * + * @return String + */ + private String getLockNameForBucket2NodeModification(int bucketID) { + return (getRegionIdentifier() + ":" + bucketID); + } + + /** + * A simple container class that holds the lock name and the service that + * created the lock, typically used for locking buckets, but not restricted to + * that usage. + * + * @since 5.0 + */ + static class BucketLock { + + protected final DLockService lockService; + + protected final String lockName; + + private boolean lockOwned = false; + + private final GemFireCacheImpl cache; + + private final boolean enableAlerts; + + protected BucketLock(String lockName, GemFireCacheImpl cache, boolean enableAlerts) { + this.lockService = (DLockService) + cache.getPartitionedRegionLockService(); + this.cache = cache; + this.lockName = lockName; + this.enableAlerts = enableAlerts; + } + + /** + * Locks the given name (provided during construction) uninterruptibly or + * throws an exception. + * + * @throws LockServiceDestroyedException + */ + public void lock() { + try { + basicLock(); + } + catch (LockServiceDestroyedException e) { + cache.getCancelCriterion().checkCancelInProgress(null); + throw e; + } + } + + /** + * Attempts to lock the given name (provided during construction) + * uninterruptibly + * + * @return true if the lock was acquired, otherwise false. + * @throws LockServiceDestroyedException + */ + public boolean tryLock() { + try { + cache.getCancelCriterion().checkCancelInProgress(null); + basicTryLock( + PartitionedRegionHelper.DEFAULT_WAIT_PER_RETRY_ITERATION); + } + catch (LockServiceDestroyedException e) { + cache.getCancelCriterion().checkCancelInProgress(null); + throw e; + } + return this.lockOwned; + } + + + + private void basicLock() { + if(enableAlerts) { + ReplyProcessor21.forceSevereAlertProcessing(); + } + try { + DM dm = cache.getDistributedSystem().getDistributionManager(); + + long ackWaitThreshold = 0; + long ackSAThreshold = dm.getConfig().getAckSevereAlertThreshold() * 1000; + boolean suspected = false; + boolean severeAlertIssued = false; + DistributedMember lockHolder = null; + + long waitInterval; + long startTime; + + if(!enableAlerts) { + //Make sure we only attempt the lock long enough not to + //get a 15 second warning from the reply processor. + ackWaitThreshold = dm.getConfig().getAckWaitThreshold() * 1000; + waitInterval = ackWaitThreshold - 1; + startTime = System.currentTimeMillis(); + } + else if (ackSAThreshold > 0) { + ackWaitThreshold = dm.getConfig().getAckWaitThreshold() * 1000; + waitInterval = ackWaitThreshold; + startTime = System.currentTimeMillis(); + } + else { + waitInterval = PartitionedRegion.VM_OWNERSHIP_WAIT_TIME; + startTime = 0; + } + + while (!this.lockOwned) { + cache.getCancelCriterion().checkCancelInProgress(null); + this.lockOwned = this.lockService.lock(this.lockName, + waitInterval, -1, false, false, !enableAlerts); + if (!this.lockOwned && ackSAThreshold > 0 && enableAlerts) { + long elapsed = System.currentTimeMillis() - startTime; + if (elapsed > ackWaitThreshold && enableAlerts) { + if (!suspected) { + suspected = true; + severeAlertIssued = false; + waitInterval = ackSAThreshold; + DLockRemoteToken remoteToken = this.lockService.queryLock(this.lockName); + lockHolder = remoteToken.getLessee(); + if (lockHolder != null) { + dm.getMembershipManager() + .suspectMember(lockHolder, + "Has not released a partitioned region lock in over " + + ackWaitThreshold / 1000 + " sec"); + } + } + else if (elapsed > ackSAThreshold && enableAlerts) { + DLockRemoteToken remoteToken = this.lockService.queryLock(this.lockName); + if (lockHolder != null && remoteToken.getLessee() != null + && lockHolder.equals(remoteToken.getLessee())) { + if (!severeAlertIssued) { + severeAlertIssued = true; + logger.fatal(LocalizedMessage.create( + LocalizedStrings.PartitionedRegion_0_SECONDS_HAVE_ELAPSED_WAITING_FOR_THE_PARTITIONED_REGION_LOCK_HELD_BY_1, + new Object[] {Long.valueOf((ackWaitThreshold+ackSAThreshold)/1000), lockHolder})); + } + } + else { + // either no lock holder now, or the lock holder has changed + // since the ackWaitThreshold last elapsed + suspected = false; + waitInterval = ackWaitThreshold; + lockHolder = null; + } + } + } + } + } + } + finally { + if(enableAlerts) { + ReplyProcessor21.unforceSevereAlertProcessing(); + } + } + } + + + + private void basicTryLock(long time) + { + + final Object key = this.lockName; + + final DM dm = cache.getDistributedSystem().getDistributionManager(); + + long start = System.currentTimeMillis(); + long end; + long timeoutMS = time; + if (timeoutMS < 0) { + timeoutMS = Long.MAX_VALUE; + end = Long.MAX_VALUE; + } + else { + end = start + timeoutMS; + } + + long ackSAThreshold = cache.getDistributedSystem().getConfig().getAckSevereAlertThreshold() * 1000; + boolean suspected = false; + boolean severeAlertIssued = false; + DistributedMember lockHolder = null; + + long waitInterval; + long ackWaitThreshold; + + if (ackSAThreshold > 0) { + ackWaitThreshold = cache.getDistributedSystem().getConfig().getAckWaitThreshold() * 1000; + waitInterval = ackWaitThreshold; + start = System.currentTimeMillis(); + } + else { + waitInterval = timeoutMS; + ackWaitThreshold = 0; + start = 0; + } + + do { + try { + waitInterval = Math.min(end-System.currentTimeMillis(), waitInterval); + ReplyProcessor21.forceSevereAlertProcessing(); + this.lockOwned = this.lockService.lock(key, + waitInterval, -1, true, false); + if (this.lockOwned) { + return; + } + if (ackSAThreshold > 0) { + long elapsed = System.currentTimeMillis() - start; + if (elapsed > ackWaitThreshold) { + if (!suspected) { + // start suspect processing on the holder of the lock + suspected = true; + severeAlertIssued = false; // in case this is a new lock holder + waitInterval = ackSAThreshold; + DLockRemoteToken remoteToken = + this.lockService.queryLock(key); + lockHolder = remoteToken.getLessee(); + if (lockHolder != null) { + dm.getMembershipManager() + .suspectMember(lockHolder, + "Has not released a global region entry lock in over " + + ackWaitThreshold / 1000 + " sec"); + } + } + else if (elapsed > ackSAThreshold) { + DLockRemoteToken remoteToken = + this.lockService.queryLock(key); + if (lockHolder != null && remoteToken.getLessee() != null + && lockHolder.equals(remoteToken.getLessee())) { + if (!severeAlertIssued) { + severeAlertIssued = true; + logger.fatal(LocalizedMessage.create( + LocalizedStrings.PartitionedRegion_0_SECONDS_HAVE_ELAPSED_WAITING_FOR_GLOBAL_REGION_ENTRY_LOCK_HELD_BY_1, + new Object[] {Long.valueOf(ackWaitThreshold+ackSAThreshold)/1000 /* fix for bug 44757*/, lockHolder})); + } + } + else { + // the lock holder has changed + suspected = false; + waitInterval = ackWaitThreshold; + lockHolder = null; + } + } + } + } // ackSAThreshold processing + } + catch (IllegalStateException ex) { + cache.getCancelCriterion().checkCancelInProgress(null); + throw ex; + } + finally { + ReplyProcessor21.unforceSevereAlertProcessing(); + } + } while (System.currentTimeMillis() < end); + } + + /** + * Ask the grantor who has the lock + * @return the ID of the member holding the lock + */ + public DistributedMember queryLock() { + try { + DLockRemoteToken remoteToken = this.lockService.queryLock(this.lockName); + return remoteToken.getLessee(); + } + catch (LockServiceDestroyedException e) { + cache.getCancelCriterion().checkCancelInProgress(null); + throw e; + } + } + + public void unlock() { + if (this.lockOwned) { + try { + this.lockService.unlock(this.lockName); + } + catch (LockServiceDestroyedException ignore) { + // cache was probably closed which destroyed this lock service + // note: destroyed lock services release all held locks + cache.getCancelCriterion().checkCancelInProgress(null); + if (logger.isDebugEnabled()) { + logger.debug("BucketLock#unlock: Lock service {} was destroyed", this.lockService, ignore); + } + } + finally { + this.lockOwned = false; + } + } + } + + @Override + public boolean equals(Object obj) { + if (obj == this) { + return true; + } + if (!(obj instanceof BucketLock)) { + return false; + } + + BucketLock other = (BucketLock)obj; + if (!this.lockName.equals(other.lockName)) + return false; + + DLockService ls1 = lockService; + DLockService ls2 = other.lockService; + if (ls1 == null || ls2 == null) { + if (ls1 != ls2) + return false; + } + return ls1.equals(ls2); + } + + @Override + public int hashCode() { + return this.lockName.hashCode(); + } + + @Override + public String toString() { + return "BucketLock@" + System.identityHashCode(this) + "lockName=" + + this.lockName + " lockService=" + this.lockService; + } + } // end class BucketLock + + public BucketLock getBucketLock(int bucketID) { + String lockName = getLockNameForBucket2NodeModification(bucketID); + return new BucketLock(lockName, getCache(), false); + } + + public final static class RegionLock extends BucketLock { + protected RegionLock(String regionIdentifier, GemFireCacheImpl cache) { + super(regionIdentifier, cache, true); + } + + @Override + public String toString() { + return "RegionLock@" + System.identityHashCode(this) + "lockName=" + + super.lockName + " lockService=" + super.lockService; + } + } + + public final class RecoveryLock extends BucketLock { + protected RecoveryLock() { + super(PartitionedRegion.this.getRegionIdentifier() + "-RecoveryLock", getCache(), false); + } + + @Override + public String toString() { + return "RecoveryLock@" + System.identityHashCode(this) + "lockName=" + + super.lockName + " lockService=" + super.lockService; + } + } + + @Override + public String toString() { + return new StringBuffer() + .append("Partitioned Region ") + .append("@").append(Integer.toHexString(hashCode())) + .append(" [") + .append("path='").append(getFullPath()) + .append("'; dataPolicy=").append(this.dataPolicy) + .append("; prId=").append(this.partitionedRegionId) + .append("; isDestroyed=").append(this.isDestroyed) + .append("; isClosed=").append(this.isClosed) + .append("; retryTimeout=").append(this.retryTimeout) + .append("; serialNumber=").append(getSerialNumber()) + .append("; hdfsStoreName=").append(getHDFSStoreName()) + .append("; hdfsWriteOnly=").append(getHDFSWriteOnly()) + + .append("; partition attributes=").append(getPartitionAttributes().toString()) + .append("; on VM ").append(getMyId()) + .append("]") + .toString(); + } + + public RegionLock getRegionLock() { + return getRegionLock(getRegionIdentifier(), getGemFireCache()); + } + + public static RegionLock getRegionLock(String regionIdentifier, GemFireCacheImpl cache) { + return new RegionLock(regionIdentifier, cache); + } + + public RecoveryLock getRecoveryLock() { + return new RecoveryLock(); + } + + public Node getNode() { + return this.node; + } + + @Override + public LoaderHelper createLoaderHelper(Object key, Object callbackArgument, + boolean netSearchAllowed, boolean netLoadAllowed, + SearchLoadAndWriteProcessor searcher) { + return new LoaderHelperImpl(this, key, callbackArgument, netSearchAllowed, + netLoadAllowed, searcher); + } + + public PRHARedundancyProvider getRedundancyProvider() { + return this.redundancyProvider; + } + + /** + * This method returns true if region is closed. + * + */ + public void checkClosed() { + if (this.isClosed) { + throw new RegionDestroyedException(LocalizedStrings.PartitionedRegion_PR_0_IS_LOCALLY_CLOSED.toLocalizedString(this), getFullPath()); + } + } + + public final void setHaveCacheLoader() { + if (!this.haveCacheLoader) { + this.haveCacheLoader = true; + } + } + + /** + * This method closes the partitioned region locally. It is invoked from the + * postDestroyRegion method of LocalRegion {@link LocalRegion}, which is + * overridden in PartitionedRegion This method
+ * Updates this prId in prIDMap
+ * Cleanups the data store (Removes the bucket mapping from b2n region, + * locally destroys b2n and destroys the bucket regions.
+ * sends destroyPartitionedRegionMessage to other VMs so that they update + * their RegionAdvisor
+ * Sends BackupBucketMessage to other nodes + * + * @param event + * the region event + */ + private void closePartitionedRegion(RegionEventImpl event) { + final boolean isClose = event.getOperation().isClose(); + if (isClose) { + this.isClosed = true; + } + final RegionLock rl = getRegionLock(); + try { + rl.lock(); + logger.info(LocalizedMessage.create(LocalizedStrings.PartitionedRegion_PARTITIONED_REGION_0_WITH_PRID_1_CLOSING, + new Object[] {getFullPath(), Integer.valueOf(getPRId())})); + if(!checkIfAlreadyDestroyedOrOldReference()) { + PartitionedRegionHelper.removeGlobalMetadataForFailedNode(getNode(), + this.getRegionIdentifier(), getGemFireCache(), false); + } + int serials[] = getRegionAdvisor().getBucketSerials(); + + if(!event.getOperation().isClose() && getDiskStore() != null && getDataStore() != null) { + for(BucketRegion bucketRegion : getDataStore().getAllLocalBucketRegions()) { + bucketRegion.isDestroyingDiskRegion = true; + bucketRegion.getDiskRegion().beginDestroy(bucketRegion); + } + } + + sendDestroyRegionMessage(event, serials); // Notify other members that this VM + // no longer has the region + + // Must clean up pridToPR map so that messages do not get access to buckets + // which should be destroyed + synchronized (prIdToPR) { + prIdToPR.put(Integer.valueOf(getPRId()), PRIdMap.LOCALLY_DESTROYED, + false); + } + + redundancyProvider.shutdown(); + + if (this.dataStore != null) { + this.dataStore.cleanUp(true, !isClose); + } + } + finally { + // Make extra sure that the static is cleared in the event + // a new cache is created + synchronized (prIdToPR) { + prIdToPR + .put(Integer.valueOf(getPRId()), PRIdMap.LOCALLY_DESTROYED, false); + } + + rl.unlock(); + } + + logger.info(LocalizedMessage.create(LocalizedStrings.PartitionedRegion_PARTITIONED_REGION_0_WITH_PRID_1_CLOSED, + new Object[] {getFullPath(), Integer.valueOf(getPRId())})); + } + + public void checkForColocatedChildren() { + List listOfChildRegions = ColocationHelper + .getColocatedChildRegions(this); + if (listOfChildRegions.size() != 0) { + List childRegionList = new ArrayList(); + for (PartitionedRegion childRegion : listOfChildRegions) { + if (!childRegion.getName().contains( + ParallelGatewaySenderQueue.QSTRING)) { + childRegionList.add(childRegion.getFullPath()); + } + } + if (!childRegionList.isEmpty()) { + throw new IllegalStateException(String.format( + "The parent region [%s] in colocation chain cannot " + + "be destroyed, unless all its children [%s] are destroyed", + this.getFullPath(), childRegionList)); + } + + } + } + + @Override + public void destroyRegion(Object aCallbackArgument) + throws CacheWriterException, TimeoutException { + //For HDFS regions, we need a data store + //to do the global destroy so that it can delete + //the data from HDFS as well. + if(!isDataStore() && this.dataPolicy.withHDFS()) { + if(destroyOnDataStore(aCallbackArgument)) { + //If we were able to find a data store to do the destroy, + //stop here. + //otherwise go ahead and destroy the region from this member + return; + } + } + + checkForColocatedChildren(); + getDataView().checkSupportsRegionDestroy(); + checkForLimitedOrNoAccess(); + + RegionEventImpl event = new RegionEventImpl(this, Operation.REGION_DESTROY, + aCallbackArgument, false, getMyId(), generateEventID()); + basicDestroyRegion(event, true); + } + + /**Globally destroy the partitioned region by sending a message + * to a data store to do the destroy. + * @return true if the region was destroyed successfully + */ + private boolean destroyOnDataStore(Object aCallbackArgument) { + RegionAdvisor advisor = getRegionAdvisor(); + Set attempted = new HashSet(); + + checkReadiness(); + while(!isDestroyed()) { + Set available = advisor.adviseInitializedDataStore(); + available.removeAll(attempted); + if(available.isEmpty()) { + return false; + } + InternalDistributedMember next = available.iterator().next(); + try { + DestroyRegionOnDataStoreMessage.send(next, this, aCallbackArgument); + return true; + } catch(ReplyException e) { + //try the next member + if(logger.isTraceEnabled()) { + logger.trace("Error destroying " + this + " on " + next, e); + } + } + } + + return true; + } + public void destroyParallelGatewaySenderRegion(Operation op, boolean cacheWrite, + boolean lock, boolean callbackEvents) { + + if (logger.isDebugEnabled()) { + logger.debug("Destoying parallel queue region for senders: {}", this.getParallelGatewaySenderIds()); + } + + boolean keepWaiting = true; + + AsyncEventQueueImpl hdfsQueue = getHDFSEventQueue(); + while(true) { + List pausedSenders = new ArrayList(); + List parallelQueues = new ArrayList(); + isDestroyedForParallelWAN = true; + int countOfQueueRegionsToBeDestroyed = 0; + for (String senderId : this.getParallelGatewaySenderIds()) { + AbstractGatewaySender sender = (AbstractGatewaySender)this.cache + .getGatewaySender(senderId); + if (sender == null || sender.getEventProcessor() == null) { + continue; + } + + if (cacheWrite) { // in case of destroy operation senders should be + // resumed + if (sender.isPaused()) { + pausedSenders.add(senderId); + continue; + } + } + + if (pausedSenders.isEmpty()) { // if there are puase sender then only + // check for other pause senders instead + // of creating list of shadowPR + AbstractGatewaySenderEventProcessor ep = sender.getEventProcessor(); + if (ep == null) continue; + ConcurrentParallelGatewaySenderQueue parallelQueue = (ConcurrentParallelGatewaySenderQueue)ep.getQueue(); + PartitionedRegion parallelQueueRegion = parallelQueue.getRegion(this + .getFullPath()); + + // this may be removed in previous iteration + if (parallelQueueRegion == null || parallelQueueRegion.isDestroyed + || parallelQueueRegion.isClosed) { + continue; + } + + parallelQueues.add(parallelQueue); + countOfQueueRegionsToBeDestroyed++; + } + } + + if (!pausedSenders.isEmpty()) { + String exception = null; + if (pausedSenders.size() == 1) { + exception = LocalizedStrings.PartitionedRegion_GATEWAYSENDER_0_IS_PAUSED_RESUME_IT_BEFORE_DESTROYING_USER_REGION_1 + .toLocalizedString(new Object[] { pausedSenders, this.getName() }); + } + else { + exception = LocalizedStrings.PartitionedRegion_GATEWAYSENDERS_0_ARE_PAUSED_RESUME_THEM_BEFORE_DESTROYING_USER_REGION_1 + .toLocalizedString(new Object[] { pausedSenders, this.getName() }); + } + isDestroyedForParallelWAN = false; + throw new GatewaySenderException(exception); + } + + if (countOfQueueRegionsToBeDestroyed == 0) { + break; + } + + for (ConcurrentParallelGatewaySenderQueue parallelQueue : parallelQueues) { + PartitionedRegion parallelQueueRegion = parallelQueue.getRegion(this + .getFullPath()); + // CacheWrite true == distributedDestoy. So in case of false, dont wait + // for queue to drain + // parallelQueueRegion.size() = With DistributedDestroym wait for queue + // to drain + // keepWaiting : comes from the MAXIMUM_SHUTDOWN_WAIT_TIME case handled + if (cacheWrite && parallelQueueRegion.size() != 0 && keepWaiting) { + continue; + } + else {// In any case, destroy shadow PR locally. distributed destroy of + // userPR will take care of detsroying shadowPR locally on other + // nodes. + RegionEventImpl event = null; + if (op.isClose()) { // In case of cache close operation, we want SPR's basic destroy to go through CACHE_CLOSE condition of postDestroyRegion not closePartitionedRegion code + event = new RegionEventImpl(parallelQueueRegion, + op, null, false, getMyId(), + generateEventID()); + } + else { + event = new RegionEventImpl(parallelQueueRegion, + Operation.REGION_LOCAL_DESTROY, null, false, getMyId(), + generateEventID()); + } + parallelQueueRegion.basicDestroyRegion(event, false, lock, + callbackEvents); + parallelQueue.removeShadowPR(this.getFullPath()); + countOfQueueRegionsToBeDestroyed--; + continue; + } + } + + if(countOfQueueRegionsToBeDestroyed == 0){ + break; + } + + if (cacheWrite) { + if (AbstractGatewaySender.MAXIMUM_SHUTDOWN_WAIT_TIME == -1) { + keepWaiting = true; + try { + Thread.sleep(5000); + } + catch (InterruptedException e) { + // interrupted + } + } + else { + try { + Thread + .sleep(AbstractGatewaySender.MAXIMUM_SHUTDOWN_WAIT_TIME * 1000); + } + catch (InterruptedException e) {/* ignore */ + // interrupted + } + keepWaiting = false; + } + } + } + + if(hdfsQueue != null) { + hdfsQueue.destroy(); + cache.removeAsyncEventQueue(hdfsQueue); + } + } + + @Override + public void localDestroyRegion(Object aCallbackArgument) { + localDestroyRegion(aCallbackArgument, false); + } + + /** + * Locally destroy a region. + * + * SQLFabric change: The parameter "ignoreParent" has been added to allow + * skipping the check for parent colocated region. This is because SQLFabric + * DDLs are distributed in any case and are guaranteed to be atomic (i.e. no + * concurrent DMLs on that table). Without this it is quite ugly to implement + * "TRUNCATE TABLE" which first drops the table and recreates it. + */ + public void localDestroyRegion(Object aCallbackArgument, boolean ignoreParent) + { + getDataView().checkSupportsRegionDestroy(); + String prName = this.getColocatedWith(); + List listOfChildRegions = ColocationHelper + .getColocatedChildRegions(this); + + List childRegionsWithoutSendersList = new ArrayList(); + if (listOfChildRegions.size() != 0) { + for (PartitionedRegion childRegion : listOfChildRegions) { + if (!childRegion.getName().contains(ParallelGatewaySenderQueue.QSTRING)) { + childRegionsWithoutSendersList.add(childRegion.getFullPath()); + } + } + } + + if ((!ignoreParent && prName != null) + || (!childRegionsWithoutSendersList.isEmpty())) { + throw new UnsupportedOperationException( + "Any Region in colocation chain cannot be destroyed locally."); + } + + RegionEventImpl event = new RegionEventImpl(this, + Operation.REGION_LOCAL_DESTROY, aCallbackArgument, false, getMyId(), + generateEventID()/* generate EventID */); + try { + basicDestroyRegion(event, false); + } + catch (CacheWriterException e) { + // not possible with local operation, CacheWriter not called + throw new Error( + "CacheWriterException should not be thrown in localDestroyRegion", e); + } + catch (TimeoutException e) { + // not possible with local operation, no distributed locks possible + throw new Error( + "TimeoutException should not be thrown in localDestroyRegion", e); + } + } + + /** + * This method actually destroys the local accessor and data store. This + * method is invoked from the postDestroyRegion method of LocalRegion + * {@link LocalRegion}, which is overridden in PartitionedRegion This method + * is invoked from postDestroyRegion method. If origin is local:
+ * Takes region lock
+ * Removes prId from PRIDMap
+ * Does data store cleanup (removal of bucket regions)
+ * Sends destroyRegionMessage to other nodes
+ * Removes it from allPartitionedRegions
+ * Destroys bucket2node region + * + * @param event + * the RegionEvent that triggered this operation + * + * @see #destroyPartitionedRegionLocally(boolean) + * @see #destroyPartitionedRegionGlobally(RegionEventImpl) + * @see #destroyCleanUp(RegionEventImpl, int[]) + * @see DestroyPartitionedRegionMessage + */ + private void destroyPartitionedRegion(RegionEventImpl event) { + final RegionLock rl = getRegionLock(); + boolean isLocked = false; + + boolean removeFromDisk = !event.getOperation().isClose(); + try { + logger.info(LocalizedMessage.create(LocalizedStrings.PartitionedRegion_PARTITIONED_REGION_0_WITH_PRID_1_IS_BEING_DESTROYED, + new Object[] {getFullPath(), Integer.valueOf(getPRId())})); + if (!event.isOriginRemote()) { + try { + rl.lock(); + isLocked = true; + } + catch (CancelException e) { + // ignore + } + if (!destroyPartitionedRegionGlobally(event)) { + if (destroyPartitionedRegionLocally(removeFromDisk)) { + sendLocalDestroyRegionMessage(event); + } + } + } + else { + PartitionRegionConfig prConfig = null; + try { + prConfig = this.prRoot + .get(getRegionIdentifier()); + } + catch (CancelException e) { + // ignore; metadata not accessible + } + // fix for bug 35306 by Tushar + if (!checkIfAlreadyDestroyedOrOldReference() && null != prConfig && !prConfig.getIsDestroying()) { + try { + rl.lock(); + isLocked = true; + } + catch (CancelException e) { + // ignore + } + if (!destroyPartitionedRegionGlobally(event)) { + if (destroyPartitionedRegionLocally(removeFromDisk)) { + sendLocalDestroyRegionMessage(event); + } + } + } + else { + if (destroyPartitionedRegionLocally(removeFromDisk)) { + sendLocalDestroyRegionMessage(event); + } + } + } + logger.info(LocalizedMessage.create(LocalizedStrings.PartitionedRegion_PARTITIONED_REGION_0_WITH_PRID_1_IS_DESTROYED, + new Object[] {getFullPath(), Integer.valueOf(getPRId())})); + } + finally { + try { + if (isLocked) { + rl.unlock(); + } + } + catch (Exception es) { + logger.info(LocalizedMessage.create(LocalizedStrings.PartitionedRegion_CAUGHT_EXCEPTION_WHILE_TRYING_TO_UNLOCK_DURING_REGION_DESTRUCTION), es); + } + } + } + + /** + * This method destroys the PartitionedRegion globally. It sends destroyRegion + * message to other nodes and handles cleaning up of the data stores and + * meta-data. + * + * @param event + * the RegionEvent which triggered this global destroy + * operation + * @return true if the region was found globally. + */ + private boolean destroyPartitionedRegionGlobally(RegionEventImpl event) { + if (checkIfAlreadyDestroyedOrOldReference()) { + return false; + } + PartitionRegionConfig prConfig; + try { + prConfig = prRoot.get( + this.getRegionIdentifier()); + } + catch (CancelException e) { + return false; // global data not accessible, don't try to finish global destroy. + } + + if (prConfig == null || prConfig.getIsDestroying()) { + return false; + } + prConfig.setIsDestroying(); + try { + this.prRoot.put(this.getRegionIdentifier(), prConfig); + } + catch (CancelException e) { + // ignore; metadata not accessible + } + int serials[] = getRegionAdvisor().getBucketSerials(); + final boolean isClose = event.getOperation().isClose(); + destroyPartitionedRegionLocally(!isClose); + destroyCleanUp(event, serials); + if(!isClose) { + destroyHDFSData(); + } + return true; + } + + private void sendLocalDestroyRegionMessage(RegionEventImpl event) { + int serials[] = getRegionAdvisor().getBucketSerials(); + RegionEventImpl eventForLocalDestroy = (RegionEventImpl)event.clone(); + eventForLocalDestroy.setOperation(Operation.REGION_LOCAL_DESTROY); + sendDestroyRegionMessage(event, serials); + } + + /** + * This method:
+ * Sends DestroyRegionMessage to other nodes
+ * Removes this PartitionedRegion from allPartitionedRegions
+ * Destroys bucket2node region
+ * + * @param event + * the RegionEvent that triggered the region clean up + * + * @see DestroyPartitionedRegionMessage + */ + private void destroyCleanUp(RegionEventImpl event, int serials[]) + { + String rId = getRegionIdentifier(); + try { + if (logger.isDebugEnabled()) { + logger.debug("PartitionedRegion#destroyCleanUp: Destroying region: {}", getFullPath()); + } + sendDestroyRegionMessage(event, serials); + try { + // if this event is global destruction of the region everywhere, remove + // it from the pr root configuration + if (null != this.prRoot) { + this.prRoot.destroy(rId); + } + } + catch (EntryNotFoundException ex) { + if (logger.isDebugEnabled()) { + logger.debug("PartitionedRegion#destroyCleanup: caught exception", ex); + } + } + catch (CancelException e) { + // ignore; metadata not accessible + } + } + finally { + if (logger.isDebugEnabled()) { + logger.debug("PartitionedRegion#destroyCleanUp: " + "Destroyed region: {}", getFullPath()); + } + } + } + + /** + * Sends the partitioned region specific destroy region message and waits for + * any responses. This message is also sent in close/localDestroyRegion + * operation. When it is sent in Cache close/Region close/localDestroyRegion + * operations, it results in updating of RegionAdvisor on recipient nodes. + * + * @param event + * the destruction event + * @param serials the bucket serials hosted locally + * @see Region#destroyRegion() + * @see Region#close() + * @see Region#localDestroyRegion() + * @see GemFireCacheImpl#close() + */ + private void sendDestroyRegionMessage(RegionEventImpl event, int serials[]) + { + if (this.prRoot == null) { + if (logger.isDebugEnabled()) { + logger.debug("Partition region {} failed to initialize. Remove its profile from remote members.", this); + } + new UpdateAttributesProcessor(this, true).distribute(false); + return; + } + final HashSet configRecipients = new HashSet(getRegionAdvisor() + .adviseAllPRNodes()); + + // It's possile this instance has not been initialized + // or hasn't gotten through initialize() far enough to have + // sent a CreateRegionProcessor message, bug 36048 + try { + final PartitionRegionConfig prConfig = this.prRoot.get(getRegionIdentifier()); + + if (prConfig != null) { + // Fix for bug#34621 by Tushar + Iterator itr = prConfig.getNodes().iterator(); + while (itr.hasNext()) { + InternalDistributedMember idm = ((Node)itr.next()).getMemberId(); + if (!idm.equals(getMyId())) { + configRecipients.add(idm); + } + } + } + } + catch (CancelException e) { + // ignore + } + + try { + DestroyPartitionedRegionResponse resp = DestroyPartitionedRegionMessage + .send(configRecipients, this, event, serials); + resp.waitForRepliesUninterruptibly(); + } + catch (ReplyException ignore) { + logger.warn(LocalizedMessage.create( + LocalizedStrings.PartitionedRegion_PARTITIONEDREGION_SENDDESTROYREGIONMESSAGE_CAUGHT_EXCEPTION_DURING_DESTROYREGIONMESSAGE_SEND_AND_WAITING_FOR_RESPONSE), + ignore); + } + } + + /** + * This method is used to destroy this partitioned region data and its + * associated store and removal of its PartitionedRegionID from local prIdToPR + * map. This method is called from destroyPartitionedRegion Method and removes + * the entry from prIdMap and cleans the data store buckets. It first checks + * whether this PartitionedRegion is already locally destroyed. If it is, this + * call returns, else if process with the removal from prIdMap and dataStore + * cleanup. + * @return wether local destroy happened + * + * @see #destroyPartitionedRegion(RegionEventImpl) + */ + boolean destroyPartitionedRegionLocally(boolean removeFromDisk) { + synchronized (this) { + if (this.isLocallyDestroyed) { + return false; + } + this.locallyDestroyingThread = Thread.currentThread(); + this.isLocallyDestroyed = true; + } + if (logger.isDebugEnabled()) { + logger.debug("destroyPartitionedRegionLocally: Starting destroy for PR = {}", this); + } + try { + synchronized (prIdToPR) { + prIdToPR.remove(Integer.valueOf(getPRId())); + } + this.redundancyProvider.shutdown(); // see bug 41094 + if (this.dataStore != null) { + this.dataStore.cleanUp(false, removeFromDisk); + } + } + finally { + this.getRegionAdvisor().close(); + getPrStats().close(); + this.cache.getResourceManager(false).removeResourceListener(this); + this.locallyDestroyingThread = null; + if (logger.isDebugEnabled()) { + logger.debug("destroyPartitionedRegionLocally: Ending destroy for PR = {}", this); + } + } + return true; + } + + /** + * This method is invoked from recursiveDestroyRegion method of LocalRegion. + * This method checks the region type and invokes the relevant method. + * + * @param destroyDiskRegion - true if the contents on disk should be destroyed + * @param event + * the RegionEvent
+ * OVERRIDES + */ + @Override + protected void postDestroyRegion(boolean destroyDiskRegion, RegionEventImpl event) { + if (logger.isDebugEnabled()) { + logger.debug("PartitionedRegion#postDestroyRegion: {}", this); + } + Assert.assertTrue(this.isDestroyed || this.isClosed); + // bruce disabled the dumping of entries to keep the size of dunit log files + // from growing unreasonably large + // if (this.dataStore != null && logger.isDebugEnabled()) { + // this.dataStore.dumpEntries(false); + // } + + //Fixes 44551 - wait for persistent buckets to finish + //recovering before sending the destroy region message + //any GII or wait for persistent recoveery will be aborted by the destroy + //flag being set to true, so this shouldn't take long. + this.redundancyProvider.waitForPersistentBucketRecovery(); + // fix #39196 OOME caused by leak in GemFireCache.partitionedRegions + this.cache.removePartitionedRegion(this); + this.cache.getResourceManager(false).removeResourceListener(this); + + final Operation op = event.getOperation(); + if (op.isClose() || Operation.REGION_LOCAL_DESTROY.equals(op)) { + try { + if (Operation.CACHE_CLOSE.equals(op) || + Operation.FORCED_DISCONNECT.equals(op)) { + int serials[] = getRegionAdvisor().getBucketSerials(); + + try { + getRegionAdvisor().closeBucketAdvisors(); + // BUGFIX for bug#34672 by Tushar Apshankar. It would update the + // advisors on other nodes about cache closing of this PartitionedRegion + sendDestroyRegionMessage(event, serials); + + //Because this code path never cleans up the real buckets, we need + //to log the fact that those buckets are destroyed here + if(RegionLogger.isEnabled()) { + PartitionedRegionDataStore store = getDataStore(); + if(store != null) { + for(BucketRegion bucket: store.getAllLocalBucketRegions()) { + RegionLogger.logDestroy(bucket.getFullPath(), getMyId(), bucket.getPersistentID(), true); + } + } + } + } + catch (CancelException e) { + // Don't throw this; we're just trying to remove the region. + if (logger.isDebugEnabled()) { + logger.debug("postDestroyRegion: failed sending DestroyRegionMessage due to cache closure"); + } + } finally { + // Since we are not calling closePartitionedRegion + // we need to cleanup any diskStore we own here. + // Why don't we call closePartitionedRegion? + //Instead of closing it, we need to register it to be closed later + //Otherwise, when the cache close tries to close all of the bucket regions, + //they'll fail because their disk store is already closed. + DiskStoreImpl dsi = getDiskStore(); + if (dsi != null && dsi.getOwnedByRegion()) { + cache.addDiskStore(dsi); + } + } + + // Majority of cache close operations handled by + // afterRegionsClosedByCacheClose(GemFireCache + // cache) or GemFireCache.close() + } + else { + if (logger.isDebugEnabled()) { + logger.debug("Making closePartitionedRegion call for {} with origin = {} op= {}", this, event.isOriginRemote(), op); + } + try { + closePartitionedRegion(event); + } finally { + if (Operation.REGION_LOCAL_DESTROY.equals(op)) { + DiskStoreImpl dsi = getDiskStore(); + if (dsi != null && dsi.getOwnedByRegion()) { + dsi.destroy(); + } + } + } + } + } + finally { + // tell other members to recover redundancy for any buckets + this.getRegionAdvisor().close(); + getPrStats().close(); + } + } + else if (Operation.REGION_DESTROY.equals(op) || Operation.REGION_EXPIRE_DESTROY.equals(op)) { + if (logger.isDebugEnabled()) { + logger.debug("PartitionedRegion#postDestroyRegion: Making destroyPartitionedRegion call for {} with originRemote = {}", this, event.isOriginRemote()); + } + destroyPartitionedRegion(event); + } + else { + Assert.assertTrue(false, "Unknown op" + op); + } + + // set client routing information into the event + // The destroy operation in case of PR is distributed differently + // hence the FilterRoutingInfo is set here instead of + // DistributedCacheOperation.distribute(). + if (!isUsedForMetaRegion() && !isUsedForPartitionedRegionAdmin() + && !isUsedForPartitionedRegionBucket() + && !isUsedForParallelGatewaySenderQueue()) { + FilterRoutingInfo localCqFrInfo = getFilterProfile().getFilterRoutingInfoPart1(event, FilterProfile.NO_PROFILES, Collections.EMPTY_SET); + FilterRoutingInfo localCqInterestFrInfo = getFilterProfile().getFilterRoutingInfoPart2(localCqFrInfo, event); + if (localCqInterestFrInfo != null){ + event.setLocalFilterInfo(localCqInterestFrInfo.getLocalFilterInfo()); + } + } + + if(destroyDiskRegion) { + DiskStoreImpl dsi = getDiskStore(); + if(dsi != null && getDataPolicy().withPersistence()) { + dsi.removePersistentPR(getFullPath()); + //Fix for support issue 7870 - remove this regions + //config from the parent disk store, if we are removing the region. + if (colocatedWithRegion != null + && colocatedWithRegion.getDiskStore() != null + && colocatedWithRegion.getDiskStore() != dsi) { + colocatedWithRegion.getDiskStore().removePersistentPR(getFullPath()); + + } + } + } + + HDFSRegionDirector.getInstance().clear(getFullPath()); + + RegionLogger.logDestroy(getName(), cache.getMyId(), null, op.isClose()); + } + + /** + * This method checks whether this PartitionedRegion is eligible for the + * destruction or not. It first gets the prConfig for this region, and if it + * NULL, it sends a destroyPartitionedRegionLocally call as a pure + * precautionary measure. If it is not null, we check if this call is intended + * for this region only and there is no new PartitionedRegion creation with + * the same name. This check fixes, bug # 34621. + * + * @return true, if it is eligible for the region destroy + */ + private boolean checkIfAlreadyDestroyedOrOldReference() { + boolean isAlreadyDestroyedOrOldReference = false; + PartitionRegionConfig prConfig = null; + try { + prConfig = prRoot.get(this + .getRegionIdentifier()); + } + catch (CancelException e) { + // ignore, metadata not accessible + } + if (null == prConfig) { + isAlreadyDestroyedOrOldReference = true; + } + else { + // If this reference is a destroyed reference and a new PR is created + // after destruction of the older one is complete, bail out. + if (prConfig.getPRId() != this.partitionedRegionId) { + isAlreadyDestroyedOrOldReference = true; + } + } + return isAlreadyDestroyedOrOldReference; + } + + @Override + void dispatchListenerEvent(EnumListenerEvent op, InternalCacheEvent event) { + // don't dispatch the event if the interest policy forbids it + if (hasListener()) { + if (event.getOperation().isEntry()) { + EntryEventImpl ev = (EntryEventImpl)event; + if (!ev.getInvokePRCallbacks()) { + if (this.getSubscriptionAttributes().getInterestPolicy() == + InterestPolicy.CACHE_CONTENT) { + if (logger.isDebugEnabled()) { + logger.trace(LogMarker.DM_BRIDGE_SERVER, "not dispatching PR event in this member as there is no interest in it"); + } + return; + } + } + } + super.dispatchListenerEvent(op, event); + } + } + + + @Override + protected void generateLocalFilterRouting(InternalCacheEvent event) { + if (event.getLocalFilterInfo() == null) { + super.generateLocalFilterRouting(event); + } + } + + + /** + * Invoke the cache writer before a put is performed. Each + * BucketRegion delegates to the CacheWriter on the PartitionedRegion + * meaning that CacheWriters on a BucketRegion should only be used for internal + * purposes. + * + * @see BucketRegion#cacheWriteBeforePut(EntryEventImpl, Set, CacheWriter, boolean, Object) + */ + @Override + protected void cacheWriteBeforePut(EntryEventImpl event, Set netWriteRecipients, + CacheWriter localWriter, + boolean requireOldValue, + Object expectedOldValue) + throws CacheWriterException, TimeoutException { + final boolean isDebugEnabled = logger.isDebugEnabled(); + + // return if notifications are inhibited + if (event.inhibitAllNotifications()) { + if (isDebugEnabled) { + logger.debug("Notification inhibited for key {}", event.getKey()); + } + + return; + } + + final boolean isNewKey = event.getOperation().isCreate(); + serverPut(event, requireOldValue, expectedOldValue); + if (localWriter == null + && (netWriteRecipients == null || netWriteRecipients.isEmpty())) { + if (isDebugEnabled) { + logger.debug("cacheWriteBeforePut: beforePut empty set returned by advisor.adviseNetWrite in netWrite"); + } + return; + } + + final long start = getCachePerfStats().startCacheWriterCall(); + + try { + SearchLoadAndWriteProcessor processor = SearchLoadAndWriteProcessor + .getProcessor(); + processor.initialize(this, "preUpdate", null); + try { + if (!isNewKey) { + if (isDebugEnabled) { + logger.debug("cacheWriteBeforePut: doNetWrite(BEFOREUPDATE)"); + } + processor.doNetWrite(event, netWriteRecipients, localWriter, + SearchLoadAndWriteProcessor.BEFOREUPDATE); + } + else { + if (isDebugEnabled) { + logger.debug("cacheWriteBeforePut: doNetWrite(BEFORECREATE)"); + } + // sometimes the op will erroneously be UPDATE + processor.doNetWrite(event, netWriteRecipients, localWriter, + SearchLoadAndWriteProcessor.BEFORECREATE); + } + } + finally { + processor.release(); + } + } + finally { + getCachePerfStats().endCacheWriterCall(start); + } + } + + /** + * Invoke the CacheWriter before the detroy operation occurs. Each + * BucketRegion delegates to the CacheWriter on the PartitionedRegion + * meaning that CacheWriters on a BucketRegion should only be used for internal + * purposes. + * @see BucketRegion#cacheWriteBeforeDestroy(EntryEventImpl, Object) + */ + @Override + boolean cacheWriteBeforeDestroy(EntryEventImpl event, Object expectedOldValue) + throws CacheWriterException, EntryNotFoundException, TimeoutException { + // return if notifications are inhibited + if (event.inhibitAllNotifications()) { + if (logger.isDebugEnabled()) { + logger.debug("Notification inhibited for key {}", event.getKey()); + } + return false; + } + + if (event.isDistributed()) { + serverDestroy(event, expectedOldValue); + CacheWriter localWriter = basicGetWriter(); + Set netWriteRecipients = localWriter == null ? this.distAdvisor + .adviseNetWrite() : null; + + if (localWriter == null + && (netWriteRecipients == null || netWriteRecipients.isEmpty())) { + return false; + } + + final long start = getCachePerfStats().startCacheWriterCall(); + try { + event.setOldValueFromRegion(); + SearchLoadAndWriteProcessor processor = SearchLoadAndWriteProcessor + .getProcessor(); + processor.initialize(this, event.getKey(), null); + processor.doNetWrite(event, netWriteRecipients, localWriter, + SearchLoadAndWriteProcessor.BEFOREDESTROY); + processor.release(); + } + finally { + getCachePerfStats().endCacheWriterCall(start); + } + return true; + } + return false; + } + + /** + * Send a message to all PartitionedRegion participants, telling each member + * of the PartitionedRegion with a datastore to dump the contents of the + * buckets to the system.log and validate that the meta-data for buckets + * agrees with the data store's perspective + * + * @param distribute true will distributed a DumpBucketsMessage to PR nodes + * @throws ReplyException + * @see #validateAllBuckets() + */ + public void dumpAllBuckets(boolean distribute) throws ReplyException { + if (logger.isDebugEnabled()) { + logger.debug("[dumpAllBuckets] distribute={} {}", distribute, this); + } + getRegionAdvisor().dumpProfiles("dumpAllBuckets"); + if (distribute) { + PartitionResponse response = DumpBucketsMessage.send(getRegionAdvisor() + .adviseAllPRNodes(), this, false /* only validate */, false); + response.waitForRepliesUninterruptibly(); + } + if (this.dataStore != null) { + this.dataStore.dumpEntries(false /* onlyValidate */); + } + } + + /* (non-Javadoc) + * @see com.gemstone.gemfire.internal.cache.LocalRegion#dumpBackingMap() + */ + @Override + public void dumpBackingMap() { + dumpAllBuckets(true); + } + + /** + * Send a message to all PartitionedRegion participants, telling each member + * of the PartitionedRegion with a datastore to dump just the bucket names to + * the system.log + * + * @throws ReplyException + * @see #validateAllBuckets() + */ + public void dumpJustBuckets() throws ReplyException { + PartitionResponse response = DumpBucketsMessage.send(getRegionAdvisor() + .adviseDataStore(), this, false /* only validate */, true); + response.waitForRepliesUninterruptibly(); + if (this.dataStore != null) { + this.dataStore.dumpBuckets(); + } + } + + /** + * + * Send a message to all PartitionedRegion participants, telling each member + * of the PartitionedRegion with a datastore to validate that the meta-data + * for buckets agrees with the data store's perspective + * + * @throws ReplyException + * @see #dumpAllBuckets(boolean) + */ + public void validateAllBuckets() throws ReplyException { + PartitionResponse response = DumpBucketsMessage.send(getRegionAdvisor() + .adviseAllPRNodes(), this, true /* only validate */, false); + response.waitForRepliesUninterruptibly(); + if (this.dataStore != null) { + this.dataStore.dumpEntries(true /* onlyValidate */); + } + } + + /** + * Sends a message to all the PartitionedRegion participants, + * telling each member of the PartitionedRegion to dump the nodelist in + * bucket2node metadata for specified bucketId. + * + * @param bucketId + */ + public void sendDumpB2NRegionForBucket(int bucketId) { + getRegionAdvisor().dumpProfiles("dumpB2NForBucket"); + try { + PartitionResponse response = DumpB2NRegion.send(this.getRegionAdvisor() + .adviseAllPRNodes(), this, bucketId, false); + response.waitForRepliesUninterruptibly(); + this.dumpB2NForBucket(bucketId); + } + catch (ReplyException re) { + if (logger.isDebugEnabled()) { + logger.debug("sendDumpB2NRegionForBucket got ReplyException", re); + } + } + catch (CancelException e) { + if (logger.isDebugEnabled()) { + logger.debug("sendDumpB2NRegionForBucket got CacheClosedException", e); + } + } + catch (RegionDestroyedException e) { + if (logger.isDebugEnabled()) { + logger.debug("sendDumpB2RegionForBucket got RegionDestroyedException", e); + } + } + } + + /** + * Logs the b2n nodelist for specified bucketId. + * + * @param bId + */ + public void dumpB2NForBucket(int bId) { + getRegionAdvisor().getBucket(bId).getBucketAdvisor().dumpProfiles( + "Dumping advisor bucket meta-data for bId=" + bucketStringForLogs(bId) + + " aka " + getBucketName(bId)); + } + + /** + * Send a message to all PartitionedRegion participants, telling each member + * of the PartitionedRegion with a datastore to dump the contents of the + * allPartitionedRegions for this PartitionedRegion. + * + * @throws ReplyException + */ + public void sendDumpAllPartitionedRegions() throws ReplyException { + getRegionAdvisor().dumpProfiles("dumpAllPartitionedRegions"); + PartitionResponse response = DumpAllPRConfigMessage.send(getRegionAdvisor() + .adviseAllPRNodes(), this); + response.waitForRepliesUninterruptibly(); + dumpSelfEntryFromAllPartitionedRegions(); + } + + /** + * This method prints the content of the allPartitionedRegion's contents for + * this PartitionedRegion. + */ + public void dumpSelfEntryFromAllPartitionedRegions() { + StringBuffer b = new StringBuffer(this.prRoot.getFullPath()); + b.append("Dumping allPartitionedRegions for "); + b.append(this); + b.append("\n"); + b.append(this.prRoot.get(getRegionIdentifier())); + logger.debug(b.toString()); + } + + /** + * A test method to get the list of all the bucket ids for the partitioned + * region in the data Store. + * + */ + public List getLocalBucketsListTestOnly() { + List localBucketList = null; + if (this.dataStore != null) { + localBucketList = this.dataStore.getLocalBucketsListTestOnly(); + } + return localBucketList; + } + + /** + * A test method to get the list of all the primary bucket ids for the partitioned + * region in the data Store. + * + */ + public List getLocalPrimaryBucketsListTestOnly() { + List localPrimaryList = null; + if (this.dataStore != null) { + localPrimaryList = this.dataStore.getLocalPrimaryBucketsListTestOnly(); + } + return localPrimaryList; + } + + // /** + // * Gets the nodeList for a bucketId from B2N Region removing the nodes that + // * are not found in both membershipSet and prConfig meta-data region. + // * + // * @param bucketId + // * @return list of nodes for bucketId + // */ + // ArrayList getNodeList(Integer bucketId) + // { + // ArrayList nList = null; + // VersionedArrayList val = (VersionedArrayList)this.getBucket2Node().get( + // bucketId); + // if (val != null) { + // nList = this.getRedundancyProvider().verifyBucketNodes(val.getListCopy()); + // if (nList.size() == 0) { + // PartitionedRegionHelper.logForDataLoss(this, bucketId.intValue(), + // "getNodeList"); + // } + // } + // return nList; + // } + + /** doesn't throw RegionDestroyedException, used by CacheDistributionAdvisor */ + public DistributionAdvisee getParentAdvisee() { + return (DistributionAdvisee) basicGetParentRegion(); + } + + /** + * A Simple class used to track retry time for Region operations Does not + * provide any synchronization or concurrent safety + * + */ + public final static class RetryTimeKeeper { + private int totalTimeInRetry; + + private final int maxTimeInRetry; + + public RetryTimeKeeper(int maxTime) { + this.maxTimeInRetry = maxTime; + } + + /** + * wait for {@link PartitionedRegionHelper#DEFAULT_WAIT_PER_RETRY_ITERATION}, + * updating the total wait time. Use this method when the same node has been + * selected for consecutive attempts with an operation. + */ + public void waitToRetryNode() { + this.waitForBucketsRecovery(); + } + + /** + * Wait for {@link PartitionedRegionHelper#DEFAULT_WAIT_PER_RETRY_ITERATION} + * time and update the total wait time. + */ + public void waitForBucketsRecovery() { + /* + * Unfortunately, due to interrupts plus the vagaries of thread + * scheduling, we can't assume that our sleep is for exactly the amount of + * time that we specify. Thus, we need to measure the before/after times + * and increment the counter accordingly. + */ + long start = System.currentTimeMillis(); + boolean interrupted = Thread.interrupted(); + try { + Thread.sleep(PartitionedRegionHelper.DEFAULT_WAIT_PER_RETRY_ITERATION); + } + catch (InterruptedException intEx) { + interrupted = true; + } + finally { + if (interrupted) { + Thread.currentThread().interrupt(); + } + } + long delta = System.currentTimeMillis() - start; + if (delta < 1) { + // I don't think this can happen, but I want to guarantee that + // this thing will eventually time out. + delta = 1; + } + this.totalTimeInRetry += delta; + } + + public boolean overMaximum() { + return this.totalTimeInRetry > this.maxTimeInRetry; + } + + public int getRetryTime() { + return this.totalTimeInRetry; + } + } + + public final String getBucketName(int bucketId) { + return PartitionedRegionHelper.getBucketName(getFullPath(), bucketId); + } + + public static final String BUCKET_NAME_SEPARATOR = "_"; + + /** + * Test to determine if the data store is managing the bucket appropriate for + * the given key + * + * @param key + * the cache key + * @return true if the bucket that should host this key is in the data store + */ + public final boolean isManagingBucket(Object key) { + if (this.dataStore != null) { + int bucketId = PartitionedRegionHelper.getHashKey(this, null, key, null, null); + return this.dataStore.isManagingBucket(bucketId); + } + return false; + } + + public boolean isDataStore() { + return localMaxMemory > 0; + } + + @Override + protected void enableConcurrencyChecks() { + if(supportsConcurrencyChecks()) { + this.concurrencyChecksEnabled = true; + assert !isDataStore(); + } + } + + /** + * finds all the keys matching the given regular expression (or all keys if + * regex is ".*") + * + * @param regex + * the regular expression + * @param allowTombstones whether to include destroyed entries + * @param collector + * object that will receive the keys as they arrive + * @throws IOException + */ + public void getKeysWithRegEx(String regex, boolean allowTombstones, SetCollector collector) + throws IOException { + _getKeysWithInterest(InterestType.REGULAR_EXPRESSION, regex, allowTombstones, collector); + } + + /** + * finds all the keys in the given list that are present in the region + * + * @param keyList the key list + * @param allowTombstones whether to return destroyed entries + * @param collector object that will receive the keys as they arrive + * @throws IOException + */ + public void getKeysWithList(List keyList, boolean allowTombstones, SetCollector collector) + throws IOException { + _getKeysWithInterest(InterestType.KEY, keyList, allowTombstones, collector); + } + + /** + * finds all the keys matching the given interest type and passes them to the + * given collector + * + * @param interestType + * @param interestArg + * @param allowTombstones whether to return destroyed entries + * @param collector + * @throws IOException + */ + private void _getKeysWithInterest(int interestType, Object interestArg, + boolean allowTombstones, SetCollector collector) throws IOException { + // this could be parallelized by building up a list of buckets for each + // vm and sending out the requests for keys in parallel. That might dump + // more onto this vm in one swoop than it could handle, though, so we're + // keeping it simple for now + int totalBuckets = getTotalNumberOfBuckets(); + int retryAttempts = calcRetry(); + for (int bucket = 0; bucket < totalBuckets; bucket++) { + Set bucketSet = null; + Integer lbucket = Integer.valueOf(bucket); + final RetryTimeKeeper retryTime = new RetryTimeKeeper(Integer.MAX_VALUE); + InternalDistributedMember bucketNode = getOrCreateNodeForBucketRead(lbucket + .intValue()); + for (int count = 0; count <= retryAttempts; count++) { + if (logger.isDebugEnabled()) { + logger.debug("_getKeysWithInterest bucketId={} attempt={}", bucket, (count + 1)); + } + try { + if (bucketNode != null) { + if (bucketNode.equals(getMyId())) { + bucketSet = this.dataStore.handleRemoteGetKeys(lbucket, + interestType, interestArg, allowTombstones); + } + else { + FetchKeysResponse r = FetchKeysMessage.sendInterestQuery( + bucketNode, this, lbucket, interestType, interestArg, allowTombstones); + bucketSet = r.waitForKeys(); + } + } + break; + } + catch (PRLocallyDestroyedException pde) { + if (logger.isDebugEnabled()) { + logger.debug("_getKeysWithInterest: Encountered PRLocallyDestroyedException"); + } + checkReadiness(); + } + catch (ForceReattemptException prce) { + // no checkKey possible + if (logger.isDebugEnabled()) { + logger.debug("_getKeysWithInterest: retry attempt: {}", count, prce); + } + checkReadiness(); + + InternalDistributedMember lastTarget = bucketNode; + bucketNode = getOrCreateNodeForBucketRead(lbucket.intValue()); + if (lastTarget != null && lastTarget.equals(bucketNode)) { + if (retryTime.overMaximum()) { + break; + } + retryTime.waitToRetryNode(); + } + } + } // for(count) + if (bucketSet != null) { + collector.receiveSet(bucketSet); + } + } // for(bucket) + } + + /** + * EventIDs are generated for PartitionedRegion. + */ + @Override + public boolean generateEventID() { + return true; + } + + @Override + protected boolean shouldNotifyBridgeClients() { + return true; + } + + /** + * SetCollector is implemented by classes that want to receive chunked results + * from queries like getKeysWithRegEx. The implementor creates a method, + * receiveSet, that consumes the chunks. + * + * @since 5.1 + */ + public static interface SetCollector { + public void receiveSet(Set theSet) throws IOException; + } + + /** + * Returns the index flag + * + * @return true if the partitioned region is indexed else false + */ + public boolean isIndexed() { + return this.hasPartitionedIndex; + } + + /** + * Returns the map containing all the indexes on this partitioned region. + * + * @return Map of all the indexes created. + */ + public Map getIndex() { + Hashtable availableIndexes = new Hashtable(); + Iterator iter = this.indexes.values().iterator(); + while (iter.hasNext()){ + Object ind = iter.next(); + // Check if the returned value is instance of Index (this means + // the index is not in create phase, its created successfully). + if (ind instanceof Index){ + availableIndexes.put(((Index)ind).getName(), ind); + } + } + return availableIndexes; + } + + /** + * Returns the a PartitionedIndex on this partitioned region. + * + * @return Index + */ + public PartitionedIndex getIndex(String indexName) { + Iterator iter = this.indexes.values().iterator(); + while (iter.hasNext()){ + Object ind = iter.next(); + // Check if the returned value is instance of Index (this means + // the index is not in create phase, its created successfully). + if (ind instanceof PartitionedIndex && ((Index) ind).getName().equals(indexName)){ + return (PartitionedIndex)ind; + } + } + return null; + } + + /** + * Gets a collecion of all the indexes created on this pr. + * + * @return collection of all the indexes + */ + public Collection getIndexes() { + if (this.indexes.isEmpty()) { + return Collections.EMPTY_LIST; + } + + ArrayList idxs = new ArrayList(); + Iterator it = this.indexes.values().iterator(); + while (it.hasNext()) { + Object ind = it.next(); + // Check if the returned value is instance of Index (this means + // the index is not in create phase, its created successfully). + if (ind instanceof Index){ + idxs.add(ind); + } + } + return idxs; + } + /** + * Creates the actual index on this partitioned regions. + * + * @param remotelyOriginated + * true if the index is created because of a remote index + * creation call + * @param indexType + * the type of index created. + * @param indexName + * the name for the index to be created + * @param indexedExpression + * expression for index creation. + * @param fromClause + * the from clause for index creation + * @param imports + * class to be imported for fromClause. + * + * @return Index an index created on this region. + * @throws ForceReattemptException + * indicating the operation failed to create a remote index + * @throws IndexCreationException + * if the index is not created properly + * @throws IndexNameConflictException + * if an index exists with this name on this region + * @throws IndexExistsException + * if and index already exists with the same properties as the + * one created + */ + public Index createIndex(boolean remotelyOriginated, IndexType indexType, + String indexName, String indexedExpression, String fromClause, + String imports, boolean loadEntries) throws ForceReattemptException, IndexCreationException, + IndexNameConflictException, IndexExistsException { + return createIndex(remotelyOriginated, indexType, indexName, indexedExpression, fromClause, imports, loadEntries, true); + } + + public Index createIndex(boolean remotelyOriginated, IndexType indexType, + String indexName, String indexedExpression, String fromClause, + String imports, boolean loadEntries, boolean sendMessage) throws ForceReattemptException, IndexCreationException, + IndexNameConflictException, IndexExistsException { + // Check if its remote request and this vm is an accessor. + if (remotelyOriginated && dataStore == null) { + // This check makes sure that for some region this vm cannot create + // data store where as it should have. + if (getLocalMaxMemory() != 0) { + throw new IndexCreationException(LocalizedStrings. + PartitionedRegion_DATA_STORE_ON_THIS_VM_IS_NULL_AND_THE_LOCAL_MAX_MEMORY_IS_NOT_ZERO_THE_DATA_POLICY_IS_0_AND_THE_LOCALMAXMEMEORY_IS_1. + toLocalizedString(new Object[] {getDataPolicy(), Long.valueOf(getLocalMaxMemory())})); + } + // Not have to do anything since the region is just an Accessor and + // does not store any data. + logger.info(LocalizedMessage.create(LocalizedStrings.PartitionedRegion_THIS_IS_AN_ACCESSOR_VM_AND_DOESNT_CONTAIN_DATA)); + return null; + } + + // Create indexManager. + if (this.indexManager == null) { + this.indexManager = IndexUtils.getIndexManager(this, true); + } + + if (logger.isDebugEnabled()) { + logger.debug("Started creating index with Index Name :{} On PartitionedRegion {}, Indexfrom caluse={}, Remote Request: {}", + indexName, this.getFullPath(), fromClause, remotelyOriginated); + } + IndexTask indexTask = new IndexTask(remotelyOriginated, indexType, indexName, + indexedExpression, fromClause, imports, loadEntries); + + FutureTask indexFutureTask = new FutureTask(indexTask); + + // This will return either the Index FutureTask or Index itself, based + // on whether the index creation is in process or completed. + Object ind = this.indexes.putIfAbsent(indexTask, indexFutureTask); + + // Check if its instance of Index, in that the case throw index exists exception. + if (ind instanceof Index){ + if (remotelyOriginated) { + return (Index)ind; + } + + throw new IndexNameConflictException(LocalizedStrings.IndexManager_INDEX_NAMED_0_ALREADY_EXISTS + .toLocalizedString(indexName)); + } + + + FutureTask oldIndexFutureTask = (FutureTask)ind; + Index index = null; + boolean interrupted = false; + + try { + if (oldIndexFutureTask == null) { + // Index doesn't exist, create index. + indexFutureTask.run(); + index = indexFutureTask.get(); + if (index != null){ + this.indexes.put(indexTask, index); + PartitionedIndex prIndex = (PartitionedIndex)index; + indexManager.addIndex(indexName, index); + + // Locally originated create index request. + // Send create request to other PR nodes. + if (!remotelyOriginated && sendMessage){ + logger.info(LocalizedMessage.create(LocalizedStrings. + PartitionedRegion_CREATED_INDEX_LOCALLY_SENDING_INDEX_CREATION_MESSAGE_TO_ALL_MEMBERS_AND_WILL_BE_WAITING_FOR_RESPONSE_0, + prIndex)); + HashSet singleIndexDefinition = new HashSet(); + IndexCreationData icd = new IndexCreationData(indexName); + icd.setIndexData(indexType, fromClause, indexedExpression, imports, loadEntries); + singleIndexDefinition.add(icd); + + IndexCreationMsg.IndexCreationResponse response = null; + try { + response = (IndexCreationMsg.IndexCreationResponse)IndexCreationMsg.send(null, PartitionedRegion.this, singleIndexDefinition); + if (response != null) { + IndexCreationMsg.IndexCreationResult result = response.waitForResult(); + Map indexBucketsMap = result.getIndexBucketsMap(); + if(indexBucketsMap != null && indexBucketsMap.size() > 0) { + prIndex.setRemoteBucketesIndexed(indexBucketsMap.values().iterator().next()); + } + } + } catch(UnsupportedOperationException ex) { + // if remote nodes are of older versions indexes will not be created there, so remove index on this node as well. + this.indexes.remove(index); + indexManager.removeIndex(index); + throw new IndexCreationException(LocalizedStrings.PartitionedRegion_INDEX_CREATION_FAILED_ROLLING_UPGRADE.toLocalizedString()); + } + } + } + } else { + // Some other thread is trying to create the same index. + // Wait for index to be initialized from other thread. + index = oldIndexFutureTask.get(); + // The Index is successfully created, throw appropriate error message from this thread. + + if (remotelyOriginated) { + return index; + } + + throw new IndexNameConflictException(LocalizedStrings.IndexManager_INDEX_NAMED_0_ALREADY_EXISTS.toLocalizedString(indexName)); + } + } catch (InterruptedException ie) { + interrupted = true; + } catch (ExecutionException ee) { + if(!remotelyOriginated) { + Throwable c = ee.getCause(); + if (c instanceof IndexNameConflictException) { + throw (IndexNameConflictException)c; + } else if (c instanceof IndexExistsException){ + throw (IndexExistsException)c; + } + throw new IndexInvalidException(ee); + } + } finally { + //If the index is not successfully created, remove IndexTask from the map. + if (index == null){ + ind = this.indexes.get(indexTask); + if (index != null && !(index instanceof Index)){ + this.indexes.remove(indexTask); + } + } + + if (interrupted) { + Thread.currentThread().interrupt(); + } + } + if (logger.isDebugEnabled()) { + logger.debug("Completed creating index with Index Name :{} On PartitionedRegion {}, Remote Request: {}", + indexName, this.getFullPath(), remotelyOriginated); + } + return index; + } + + public List createIndexes(boolean remotelyOriginated, HashSet indexDefinitions) + throws MultiIndexCreationException, CacheException, + ForceReattemptException, IndexCreationException { + if (remotelyOriginated && dataStore == null) { + // This check makes sure that for some region this vm cannot create + // data store where as it should have. + if (getLocalMaxMemory() != 0) { + throw new IndexCreationException( + LocalizedStrings.PartitionedRegion_DATA_STORE_ON_THIS_VM_IS_NULL_AND_THE_LOCAL_MAX_MEMORY_IS_NOT_ZERO_THE_DATA_POLICY_IS_0_AND_THE_LOCALMAXMEMEORY_IS_1 + .toLocalizedString(new Object[] { getDataPolicy(), + Long.valueOf(getLocalMaxMemory()) })); + } + // Not have to do anything since the region is just an Accessor and + // does not store any data. + logger.info(LocalizedStrings.PartitionedRegion_THIS_IS_AN_ACCESSOR_VM_AND_DOESNT_CONTAIN_DATA); + return new ArrayList(); + } + + Set indexes = new HashSet(); + boolean throwException = false; + HashMap exceptionsMap = new HashMap(); + + // First step is creating all the defined indexes. + // Do not send the IndexCreationMsg to remote nodes now. + throwException = createEmptyIndexes(indexDefinitions, remotelyOriginated, indexes, exceptionsMap); + + // If same indexes are created locally and also being created by a remote index creation msg + // populate such indexes only once. + Set unpopulatedIndexes = null; + + if(indexes.size() > 0) { + unpopulatedIndexes = getUnpopulatedIndexes(indexes); + } + + // Second step is iterating over REs and populating all the created indexes + if(unpopulatedIndexes != null && unpopulatedIndexes.size() > 0) { + throwException = populateEmptyIndexes(unpopulatedIndexes, exceptionsMap); + } + + // Third step is to send the message to remote nodes + // Locally originated create index request. + // Send create request to other PR nodes. + throwException = sendCreateIndexesMessage(remotelyOriginated, indexDefinitions, indexes, exceptionsMap); + + //If exception is throw in any of the above steps + if (throwException) { + throw new MultiIndexCreationException(exceptionsMap); + } + + // set the populate flag for all the created PR indexes + for (Index ind : indexes) { + ((AbstractIndex) ind).setPopulated(true); + } + + return new ArrayList(indexes); + } + + private boolean createEmptyIndexes( + HashSet indexDefinitions, boolean remotelyOriginated, + Set indexes, HashMap exceptionsMap) { + boolean throwException = false; + for (IndexCreationData icd : indexDefinitions) { + try { + Index ind = this.createIndex(remotelyOriginated, icd.getIndexType(), + icd.getIndexName(), icd.getIndexExpression(), + icd.getIndexFromClause(), icd.getIndexImportString(), false, false); + // There could be nulls in the set if a node is accessor. + // The index might have been created by the local node. + if (ind != null) { + indexes.add(ind); + } + } catch (Exception ex) { + // If an index creation fails, add the exception to the map and + // continue creating rest of the indexes.The failed indexes will + // be removed from the IndexManager#indexes map by the createIndex + // method so that those indexes will not be populated in the next + // step. + if (logger.isDebugEnabled()) { + logger.debug("Creation failed for index: {}, {}", icd.getIndexName(), ex.getMessage(), ex); + } + exceptionsMap.put(icd.getIndexName(), ex); + throwException = true; + } + } + return throwException; + } + + private Set getUnpopulatedIndexes(Set indexSet) { + synchronized(indexLock) { + HashSet unpopulatedIndexes = new HashSet(); + for(Index ind : indexSet) { + PartitionedIndex prIndex = (PartitionedIndex)ind; + if(!prIndex.isPopulateInProgress()) { + prIndex.setPopulateInProgress(true); + unpopulatedIndexes.add(prIndex); + } + } + return unpopulatedIndexes; + } + } + + private boolean populateEmptyIndexes(Set indexes, + HashMap exceptionsMap) { + boolean throwException = false; + if (getDataStore() != null && indexes.size() > 0) { + Set localBuckets = getDataStore().getAllLocalBuckets(); + Iterator it = localBuckets.iterator(); + while (it.hasNext()) { + Map.Entry entry = (Map.Entry) it.next(); + Region bucket = (Region) entry.getValue(); + + if (bucket == null) { + continue; + } + IndexManager bucketIndexManager = IndexUtils.getIndexManager(bucket, true); + Set bucketIndexes = getBucketIndexesForPRIndexes(bucket, indexes); + try { + bucketIndexManager.populateIndexes(bucketIndexes); + } catch (MultiIndexCreationException ex) { + exceptionsMap.putAll(ex.getExceptionsMap()); + throwException = true; + } + } + } + return throwException; + } + + private Set getBucketIndexesForPRIndexes(Region bucket, Set indexes) { + Set bucketIndexes = new HashSet(); + for(Index ind : indexes) { + bucketIndexes.addAll(((PartitionedIndex)ind).getBucketIndexes(bucket)); + } + return bucketIndexes; + } + + + private boolean sendCreateIndexesMessage(boolean remotelyOriginated, + HashSet indexDefinitions, Set indexes, HashMap exceptionsMap) + throws CacheException, ForceReattemptException { + boolean throwException = false; + if (!remotelyOriginated) { + logger + .info(LocalizedStrings.PartitionedRegion_CREATED_INDEX_LOCALLY_SENDING_INDEX_CREATION_MESSAGE_TO_ALL_MEMBERS_AND_WILL_BE_WAITING_FOR_RESPONSE_0); + IndexCreationMsg.IndexCreationResponse response = null; + try { + response = (IndexCreationMsg.IndexCreationResponse) IndexCreationMsg + .send(null, this, indexDefinitions); + + if (response != null) { + IndexCreationMsg.IndexCreationResult result = response + .waitForResult(); + Map remoteIndexBucketsMap = result.getIndexBucketsMap(); + // set the number of remote buckets indexed for each pr index + if (remoteIndexBucketsMap != null) { + for (Index ind : indexes) { + if (remoteIndexBucketsMap.containsKey(ind.getName())) { + ((PartitionedIndex) ind) + .setRemoteBucketesIndexed(remoteIndexBucketsMap.get(ind.getName())); + } + } + } + } + } catch (UnsupportedOperationException ex) { + // if remote nodes are of older versions indexes will not be created + // there, so remove index on this node as well. + for (Index ind : indexes) { + exceptionsMap.put(ind.getName(), new IndexCreationException( + LocalizedStrings.PartitionedRegion_INDEX_CREATION_FAILED_ROLLING_UPGRADE + .toLocalizedString())); + this.indexes.remove(ind); + indexManager.removeIndex(ind); + } + throwException = true; + } + } + return throwException; + } + + /** + * Explicitly sends an index creation message to a newly added node to the + * system on prs. + * + * @param idM + * id on the newly added node. + */ + public void sendIndexCreationMsg(InternalDistributedMember idM) { + + if (!this.isIndexed()) + return; + + RegionAdvisor advisor = (RegionAdvisor)(this.getCacheDistributionAdvisor()); + final Set recipients = advisor.adviseDataStore(); + if(!recipients.contains(idM)){ + logger.info(LocalizedMessage.create( + LocalizedStrings.PartitionedRegion_NEWLY_ADDED_MEMBER_TO_THE_PR_IS_AN_ACCESSOR_AND_WILL_NOT_RECEIVE_INDEX_INFORMATION_0, idM)); + return; + } + // this should add the member to a synchornized set and then sent this member + // and index creation msg latter after its completed creating the partitioned region. + IndexCreationMsg.IndexCreationResponse response = null; + IndexCreationMsg.IndexCreationResult result = null; + + if (this.indexes.isEmpty()) { + return; + } + + Iterator it = this.indexes.values().iterator(); + HashSet indexDefinitions = new HashSet(); + Set indexes = new HashSet(); + while (it.hasNext()) { + Object ind = it.next(); + // Check if the returned value is instance of Index (this means + // the index is not in create phase, its created successfully). + if (!(ind instanceof Index)){ + continue; + } + PartitionedIndex prIndex = (PartitionedIndex)ind; + indexes.add(prIndex); + IndexCreationData icd = new IndexCreationData(prIndex.getName()); + icd.setIndexData(prIndex.getType(), prIndex.getFromClause(), prIndex.getIndexedExpression(), prIndex.getImports(), true); + indexDefinitions.add(icd); + } + + response = (IndexCreationMsg.IndexCreationResponse)IndexCreationMsg.send( + idM, this, indexDefinitions); + + if (logger.isDebugEnabled()) { + logger.debug("Sending explictly index creation message to : {}", idM); + } + + if (response != null) { + try { + result = response.waitForResult(); + Map remoteIndexBucketsMap = result.getIndexBucketsMap(); + // set the number of remote buckets indexed for each pr index + for (Index ind : indexes) { + ((PartitionedIndex)ind).setRemoteBucketesIndexed(remoteIndexBucketsMap.get(ind.getName())); + } + } catch (ForceReattemptException ignor) { + logger.info(LocalizedStrings.PartitionedRegion_FORCEREATTEMPT_EXCEPTION___0, ignor); + } + } + + + } + + /** + * Removes all the indexes on this partitioned regions instance and send + * remove index message + * + * @throws ForceReattemptException + * @throws CacheException + */ + public int removeIndexes(boolean remotelyOriginated) throws CacheException, + ForceReattemptException { + int numBuckets = 0; + + if (!this.hasPartitionedIndex || this.indexes.isEmpty()) { + if (logger.isDebugEnabled()) { + logger.debug("This partitioned regions does not have any index : {}", this); + } + return numBuckets; + } + + this.hasPartitionedIndex = false; + + logger.info(LocalizedMessage.create(LocalizedStrings.PartitionedRegion_REMOVING_ALL_THE_INDEXES_ON_THIS_PARITITION_REGION__0, this)); + + try { + Iterator bucketIterator = dataStore.getAllLocalBuckets().iterator(); + while (bucketIterator.hasNext()) { + LocalRegion bucket = null; + Map.Entry bucketEntry = (Map.Entry)bucketIterator.next(); + bucket = (LocalRegion)bucketEntry.getValue(); + if (bucket != null) { + bucket.waitForData(); + IndexManager indexMang = IndexUtils.getIndexManager(bucket, false); + if (indexMang != null) { + indexMang.removeIndexes(); + numBuckets++; + if (logger.isDebugEnabled()) { + logger.debug("Removed all the indexes on bucket {}", bucket); + } + } + } + } // ends while + if (logger.isDebugEnabled()) { + logger.debug("Removed this many indexes on the buckets : {}", numBuckets); + } + RemoveIndexesMessage.RemoveIndexesResponse response = null; + + if (!remotelyOriginated) { + logger.info(LocalizedMessage.create(LocalizedStrings.PartitionedRegion_SENDING_REMOVEINDEX_MESSAGE_TO_ALL_THE_PARTICIPATING_PRS)); + + response = (RemoveIndexesMessage.RemoveIndexesResponse) + RemoveIndexesMessage.send(this, null, true); + + if (null != response) { + response.waitForResults(); + logger.info(LocalizedMessage.create(LocalizedStrings.PartitionedRegion_DONE_WATING_FOR_REMOVE_INDEX)); + if (logger.isDebugEnabled()) { + logger.debug("Total number of buckets which removed indexes , locally : {} and remotely removed : {} and the total number of remote buckets : {}", + numBuckets, response.getRemoteRemovedIndexes(), response.getTotalRemoteBuckets()); + } + } + } + this.indexManager.removeIndexes(); + return numBuckets; + + } // outer try block + finally { + //this.indexes = null; + this.indexes.clear(); + } + } + + /** + * Removes a particular index on this partitioned regions instance. + * + * @param ind Index to be removed. + * + */ + public int removeIndex(Index ind, boolean remotelyOrignated) + throws CacheException, ForceReattemptException { + + int numBuckets = 0; + IndexTask indexTask = null; + Object prIndex = null; + + if (ind != null) { + indexTask = new IndexTask(ind.getName()); + prIndex = this.indexes.get(indexTask); + } + + // Check if the returned value is instance of Index (this means the index is + // not in create phase, its created successfully). + if (prIndex == null || !(prIndex instanceof Index)) { + logger.info(LocalizedMessage.create(LocalizedStrings.PartitionedRegion_THIS_INDEX__0_IS_NOT_ON_THIS_PARTITONED_REGION___1, + new Object[] {ind, this})); + return numBuckets; + } + + if (logger.isDebugEnabled()) { + logger.debug("Remove index called, IndexName: {} Index: {} Will be removing all the bucket indexes.", ind.getName(), ind); + } + + Index i = this.indexManager.getIndex(ind.getName()); + if (i != null) { + this.indexManager.removeIndex(i); + } + + // After removing from region wait for removing from index manager and + // marking the index invalid. + if (prIndex != null) { + PartitionedIndex index = (PartitionedIndex) prIndex; + index.acquireIndexWriteLockForRemove(); + } + + this.indexes.remove(indexTask); + + // For releasing the write lock after removal. + try { + synchronized (prIndex) { + List allBucketIndex = ((PartitionedIndex)prIndex).getBucketIndexes(); + Iterator it = allBucketIndex.iterator(); + + if (logger.isDebugEnabled()) { + logger.debug("Will be removing indexes on : {} buckets", allBucketIndex.size()); + } + + while (it.hasNext()) { + Index in = (Index)it.next(); + LocalRegion region = ((LocalRegion)in.getRegion()); + region.waitForData(); + IndexManager indMng = region.getIndexManager(); + indMng.removeIndex(in); + + if (logger.isDebugEnabled()) { + logger.debug("Removed index : {} on bucket {}", in, region); + } + numBuckets++; + ((PartitionedIndex)prIndex).removeFromBucketIndexes(region, in); + } // while + } + } finally { + ((PartitionedIndex)prIndex).releaseIndexWriteLockForRemove(); + } + + if (!remotelyOrignated) { + // send remove index message. + RemoveIndexesMessage.RemoveIndexesResponse response = null; + logger.info(LocalizedMessage.create(LocalizedStrings.PartitionedRegion_SENDING_REMOVEINDEX_MESSAGE_TO_ALL_THE_PARTICIPATING_PRS)); + response = (RemoveIndexesMessage.RemoveIndexesResponse)RemoveIndexesMessage.send(this, ind, false); + + if (response != null) { + response.waitForResults(); + logger.info(LocalizedMessage.create(LocalizedStrings.PartitionedRegion_DONE_WATING_FOR_REMOVE_INDEX)); + if (logger.isDebugEnabled()) { + logger.debug("Total number of buckets which removed indexs , locally : {} and remotely removed : {} and the total number of remote buckets : {}", + numBuckets, response.getRemoteRemovedIndexes(), response.getTotalRemoteBuckets()); + } + } + } + return numBuckets; + } + + /** + * Gets and removes index by name. + * + * @param indexName + * name of the index to be removed. + */ + public int removeIndex(String indexName) throws CacheException, + ForceReattemptException { + int numbuckets = 0; + // remotely orignated removeindex + //IndexTask indexTask = new IndexTask(indexName); + Object ind = this.indexes.get(indexName); + + // Check if the returned value is instance of Index (this means the index is + // not in create phase, its created successfully). + if (ind instanceof Index) { + numbuckets = removeIndex((Index)this.indexes.get(indexName), true); + } + return numbuckets; + } + + /* + * @OVERRIDES + */ + @Override + public Object getValueInVM(Object key) throws EntryNotFoundException { + if (this.dataStore == null) { + throw new EntryNotFoundException(key.toString()); + } + final int bucketId = PartitionedRegionHelper.getHashKey(this, null, key, null, null); + return this.dataStore.getLocalValueInVM(key, bucketId); + } + + @Override + public Object getValueInVM(EntryEventImpl event) + throws EntryNotFoundException { + if (this.dataStore == null) { + throw new EntryNotFoundException(event.getKey().toString()); + } + final int bucketId = PartitionedRegionHelper.getHashKey(event); + return this.dataStore.getLocalValueInVM(event.getKey(), bucketId); + } + + /** + * This method is intended for testing purposes only. + * DO NOT use in product code else it will break SQLFabric that has cases + * where routing object is not part of only the key. + */ + @Override + public Object getValueOnDisk(Object key) throws EntryNotFoundException { + final int bucketId = PartitionedRegionHelper.getHashKey(this, null, key, null, null); + if (this.dataStore == null) { + throw new EntryNotFoundException(key.toString()); + } + return this.dataStore.getLocalValueOnDisk(key, bucketId); + } + + /** + * This method is intended for testing purposes only. + * DO NOT use in product code else it will break SQLFabric that has cases + * where routing object is not part of only the key. + */ + @Override + public Object getValueOnDiskOrBuffer(Object key) throws EntryNotFoundException { + final int bucketId = PartitionedRegionHelper.getHashKey(this, null, key, null, null); + if (this.dataStore == null) { + throw new EntryNotFoundException(key.toString()); + } + return this.dataStore.getLocalValueOnDiskOrBuffer(key, bucketId); + } + + /** + * Test Method: Fetch the given bucket's meta-data from each member hosting + * buckets + * + * @param bucketId + * the identity of the bucket + * @return list of arrays, each array element containing a + * {@link DistributedMember} and a {@link Boolean} the boolean denotes + * if the member is hosting the bucket and believes it is the primary + * @throws ForceReattemptException + * if the caller should reattempt this request + */ + public List getBucketOwnersForValidation(int bucketId) + throws ForceReattemptException { + // bucketid 1 => "vm A", false | "vm B", false | "vm C", true | "vm D", + // false + // bucketid 2 => List< Tuple(MemberId mem, Boolean isPrimary) > + + // remotely fetch each VM's bucket meta-data (versus looking at the bucket + // advisor's data + RuntimeException rte = null; + List remoteInfos = null; + for (int i=0; i<3; i++) { + rte = null; + DumpB2NResponse response = DumpB2NRegion.send(getRegionAdvisor() + .adviseDataStore(), this, bucketId, true); + try { + remoteInfos = new LinkedList(response.waitForPrimaryInfos()); + } catch (TimeoutException e) { + rte = e; + logger.info("DumpB2NRegion failed to get PR {}, bucket id {}'s info due to {}, retrying...", this.getFullPath(), bucketId, e.getMessage()); + } + } + if (rte != null) { + logger.info("DumpB2NRegion retried 3 times", rte); + throw rte; + } + + // Include current VM in the status... + if (getRegionAdvisor().getBucket(bucketId).isHosting()) { + if (getRegionAdvisor().isPrimaryForBucket(bucketId)) { + remoteInfos.add(new Object[] { getSystem().getDM().getId(), + Boolean.TRUE, "" }); + } + else { + remoteInfos.add(new Object[] { getSystem().getDM().getId(), + Boolean.FALSE, "" }); + } + } + return remoteInfos; + } + + /** + * Return the primary for the local bucket. Returns null if no primary + * can be found within {@link com.gemstone.gemfire.distributed.internal.DistributionConfig#getMemberTimeout}. + * @param bucketId + * @return the primary bucket member + */ + public InternalDistributedMember getBucketPrimary(int bucketId) { + return getRegionAdvisor().getPrimaryMemberForBucket(bucketId); + } + + /** + * Test Method: Used to debug the system when an operation fails by throwing + * an exception + * + * @param key + * @return empty string?? + */ + public String getAbortedOperationReason(Object key) { + // Find the primary bucket info (time of creation, primary location, primary + // meta-data on all nodes, bucket size) + // using the given key. + return ""; + } + + /** + * Wait until the bucket meta-data has been built and is ready to receive + * messages and/or updates + */ + public void waitOnBucketMetadataInitialization() { + waitOnInitialization(this.initializationLatchAfterBucketIntialization); + } + + private void releaseAfterBucketMetadataSetupLatch() { + this.initializationLatchAfterBucketIntialization.countDown(); + } + + @Override + protected void releaseLatches() { + super.releaseLatches(); + releaseAfterBucketMetadataSetupLatch(); + } + + /** + * get the total retry interval, in milliseconds, for operations concerning + * this partitioned region + * + * @return millisecond retry timeout interval + */ + public int getRetryTimeout() { + return this.retryTimeout; + } + + public long getBirthTime() { + return birthTime; + } + + public PartitionResolver getPartitionResolver() { + // [SQLFabric] use PartitionAttributes to get the the resolver + // since it may change after ALTER TABLE + return this.partitionAttributes.getPartitionResolver(); + } + + public String getColocatedWith() { + // [SQLFabric] use PartitionAttributes to get colocated region + // since it may change after ALTER TABLE + return this.partitionAttributes.getColocatedWith(); + } + + // For SQLFabric ALTER TABLE. Need to set the colocated region using + // PartitionAttributesImpl and also reset the parentAdvisor for + // BucketAdvisors. + /** + * Set the colocated with region path and adjust the BucketAdvisor's. This + * should *only* be invoked when region is just newly created and has no data + * or existing buckets else will have undefined behaviour. + * + * @since 6.5 + */ + public void setColocatedWith(String colocatedRegionFullPath) { + ((PartitionAttributesImpl)this.partitionAttributes) + .setColocatedWith(colocatedRegionFullPath); + this.getRegionAdvisor().resetBucketAdvisorParents(); + } + + /** + * Used to get membership events from our advisor to implement + * RegionMembershipListener invocations. This is copied almost in whole from + * DistributedRegion + * + * @since 5.7 + */ + protected class AdvisorListener implements MembershipListener + { + protected synchronized void initRMLWrappers() { + if (PartitionedRegion.this.isInitialized() && hasListener()) { + initPostCreateRegionMembershipListeners(getRegionAdvisor().adviseAllPRNodes()); + } + } + + public synchronized void memberJoined(InternalDistributedMember id) { + // bug #44684 - this notification has been moved to a point AFTER the + // other member has finished initializing its region +// if (PartitionedRegion.this.isInitialized() && hasListener()) { +// RegionEventImpl event = new RegionEventImpl(PartitionedRegion.this, +// Operation.REGION_CREATE, null, true, id); +// dispatchListenerEvent(EnumListenerEvent.AFTER_REMOTE_REGION_CREATE, +// event); +// } + // required-roles functionality is not implemented for partitioned regions, + // or it would be done here + } + + public void quorumLost(Set failures, List remaining) { + } + + public void memberSuspect(InternalDistributedMember id, + InternalDistributedMember whoSuspected, String reason) { + } + + public synchronized void memberDeparted(InternalDistributedMember id, + boolean crashed) { + if (PartitionedRegion.this.isInitialized() && hasListener()) { + RegionEventImpl event = new RegionEventImpl(PartitionedRegion.this, + Operation.REGION_CLOSE, null, true, id); + if (crashed) { + dispatchListenerEvent(EnumListenerEvent.AFTER_REMOTE_REGION_CRASH, + event); + } + else { + // @todo darrel: it would be nice to know if what actual op was done + // could be close, local destroy, or destroy (or load snap?) + if (DestroyRegionOperation.isRegionDepartureNotificationOk()) { + dispatchListenerEvent(EnumListenerEvent.AFTER_REMOTE_REGION_DEPARTURE, event); + } + } + } + // required-roles functionality is not implemented for partitioned regions, + // or it would be done here + } + } + + /* + * This is an internal API for sqlFabric only
+ * This is usefull to execute a function on set of nodes irrelevant of the + * routinKeys
+ * notes : This API uses DefaultResultCollector. If you want your Custome + * Result collector, let me know + * + * @param functionName + * @param args + * @param nodes + * Set of DistributedMembers on which this function will be + * executed + * @throws Exception + *//* + public ResultCollector executeFunctionOnNodes(String functionName, + Serializable args, Set nodes) throws Exception { + Assert.assertTrue(functionName != null, "Error: functionName is null"); + Assert.assertTrue(nodes != null, "Error: nodes set is null"); + Assert.assertTrue(nodes.size() != 0, "Error: empty nodes Set"); + ResultCollector rc = new DefaultResultCollector(); + boolean isSelf = nodes.remove(getMyId()); + PartitionedRegionFunctionResponse response = null; + //TODO Yogesh: this API is broken after Resultsender implementation + //response = new PartitionedRegionFunctionResponse(this.getSystem(), nodes, + // rc); + Iterator i = nodes.iterator(); + while (i.hasNext()) { + InternalDistributedMember recip = (InternalDistributedMember)i.next(); + PartitionedRegionFunctionMessage.send(recip, this, functionName, args, + null routingKeys , response, null); + } + if (isSelf) { + // execute locally and collect the result + if (this.dataStore != null) { + this.dataStore.executeOnDataStore( + null routingKeys , functionName, args, 0,null,rc,null); + } + } + return response; + }*/ + + + /* + * This is an internal API for sqlFabric only
+ * API for invoking a function using primitive ints as the routing objects + * (i.e. passing the hashcodes of the routing objects directly).
+ * notes : This API uses DefaultResultCollector. If you want to pass your + * Custom Result collector, let me know + * + * @param functionName + * @param args + * @param hashcodes + * hashcodes of the routing objects + * @throws Exception + *//* + public ResultCollector executeFunctionUsingHashCodes(String functionName, + Serializable args, int hashcodes[]) throws Exception { + Assert.assertTrue(functionName != null, "Error: functionName is null"); + Assert.assertTrue(hashcodes != null, "Error: hashcodes array is null"); + Assert.assertTrue(hashcodes.length != 0, "Error: empty hashcodes array"); + Set nodes = new HashSet(); + for (int i = 0; i < hashcodes.length; i++) { + int bucketId = hashcodes[i] % getTotalNumberOfBuckets(); + InternalDistributedMember n = getNodeForBucketRead(bucketId); + nodes.add(n); + } + return executeFunctionOnNodes(functionName, args, nodes); + }*/ + + /** + * This is an internal API for sqlFabric only
+ * Given a array of routing objects, returns a set of members on which the (owner of each + * buckets) + * + * @param routingObjects array of routing objects passed + * @return Set of InternalDistributedMembers + */ + public Set getMembersFromRoutingObjects(Object[] routingObjects) { + Assert.assertTrue(routingObjects != null, "Error: null routingObjects "); + Assert.assertTrue(routingObjects.length != 0, "Error: empty routingObjects "); + Set nodeSet = new HashSet(); + int bucketId; + for (int i = 0; i < routingObjects.length; i++) { + bucketId = PartitionedRegionHelper.getHashKey(routingObjects[i], + getTotalNumberOfBuckets()); + InternalDistributedMember lnode = getOrCreateNodeForBucketRead(bucketId); + if (lnode != null) { + nodeSet.add(lnode); + } + } + return nodeSet; + } + @Override + protected RegionEntry basicGetTXEntry(KeyInfo keyInfo) { + int bucketId = keyInfo.getBucketId(); + if (bucketId == KeyInfo.UNKNOWN_BUCKET) { + bucketId = PartitionedRegionHelper.getHashKey(this, null, + keyInfo.getKey(), keyInfo.getValue(), keyInfo.getCallbackArg()); + keyInfo.setBucketId(bucketId); + } + if (keyInfo.isCheckPrimary()) { + DistributedMember primary = getRegionAdvisor().getPrimaryMemberForBucket( + bucketId); + if (!primary.equals(getMyId())) { + throw new PrimaryBucketException("Bucket " + bucketId + + " is not primary. Current primary holder is " + primary); + } + } + BucketRegion br = this.dataStore.getLocalBucketById(bucketId); + RegionEntry re = br.basicGetEntry(keyInfo.getKey()); + if (re != null && re.isRemoved()) { + re = null; + } + return re; + } + + + + @Override + protected boolean usesDiskStore(RegionAttributes ra) { + if (ra.getPartitionAttributes().getLocalMaxMemory() <= 0) return false; // see bug 42055 + return super.usesDiskStore(ra); + } + + @Override + protected DiskStoreImpl findDiskStore(RegionAttributes ra, + InternalRegionArguments internalRegionArgs) { + DiskStoreImpl store = super.findDiskStore(ra, internalRegionArgs); + if(store != null && store.getOwnedByRegion()) { + store.initializeIfNeeded(); + } + return store; + } + + @Override + protected DiskRegion createDiskRegion(InternalRegionArguments internalRegionArgs) throws DiskAccessException { + if (internalRegionArgs.getDiskRegion() != null) { + return internalRegionArgs.getDiskRegion(); + } else { + return null; + } + } + + @Override + public void handleInterestEvent(InterestRegistrationEvent event) { + if (logger.isDebugEnabled()) { + logger.debug("PartitionedRegion {} handling {}", getFullPath(), event); + } + // Process event in remote data stores by sending message + Set allRemoteStores = getRegionAdvisor().adviseDataStore(true); + if (logger.isDebugEnabled()) { + logger.debug("PartitionedRegion {} sending InterestEvent message to:{}", getFullPath(), allRemoteStores); + } + InterestEventResponse response = null; + if (!allRemoteStores.isEmpty()) { + try { + response = InterestEventMessage.send(allRemoteStores, this, event); + } + catch (ForceReattemptException e) { + if (logger.isDebugEnabled()) { + logger.debug("PartitionedRegion {} caught exception", getFullPath(), e); + } + } + } + + // Process event in the local data store if necessary + if (this.dataStore != null) { + // Handle the interest event in the local data store + this.dataStore.handleInterestEvent(event); + } + + // Wait for replies + if (response != null) { + try { + if (logger.isDebugEnabled()) { + logger.debug("PartitionedRegion {} waiting for response from {}", getFullPath(), allRemoteStores); + } + response.waitForResponse(); + } + catch (ForceReattemptException e) { + if (logger.isDebugEnabled()) { + logger.debug("PartitionedRegion {} caught exception", getFullPath(), e); + } + } + } + } + + @Override + public AttributesMutator getAttributesMutator() { + checkReadiness(); + return this; + } + + /** + * Changes the timeToLive expiration attributes for the partitioned region as + * a whole + * + * @param timeToLive + * the expiration attributes for the region timeToLive + * @return the previous value of region timeToLive + * @throws IllegalArgumentException + * if timeToLive is null or if the ExpirationAction is + * LOCAL_INVALIDATE and the region is + * {@link DataPolicy#withReplication replicated} + * @throws IllegalStateException + * if statistics are disabled for this region. + */ + @Override + public ExpirationAttributes setRegionTimeToLive( + ExpirationAttributes timeToLive) { + ExpirationAttributes attr = super.setRegionTimeToLive(timeToLive); + // Set to Bucket regions as well + if (this.getDataStore() != null) { // not for accessors + Iterator iter = this.getDataStore().getAllLocalBuckets().iterator(); + while (iter.hasNext()) { + Map.Entry entry = (Map.Entry)iter.next(); + Region bucketRegion = (BucketRegion)entry.getValue(); + bucketRegion.getAttributesMutator().setRegionTimeToLive(timeToLive); + } + } + return attr; + } + + /** + * Changes the idleTimeout expiration attributes for the region as a whole. + * Resets the {@link CacheStatistics#getLastAccessedTime} for the region. + * + * @param idleTimeout + * the ExpirationAttributes for this region idleTimeout + * @return the previous value of region idleTimeout + * @throws IllegalArgumentException + * if idleTimeout is null or if the ExpirationAction is + * LOCAL_INVALIDATE and the region is + * {@link DataPolicy#withReplication replicated} + * @throws IllegalStateException + * if statistics are disabled for this region. + */ + @Override + public ExpirationAttributes setRegionIdleTimeout( + ExpirationAttributes idleTimeout) { + ExpirationAttributes attr = super.setRegionIdleTimeout(idleTimeout); + // Set to Bucket regions as well + if (this.getDataStore() != null) { // not for accessors + Iterator iter = this.getDataStore().getAllLocalBuckets().iterator(); + while (iter.hasNext()) { + Map.Entry entry = (Map.Entry)iter.next(); + Region bucketRegion = (BucketRegion)entry.getValue(); + bucketRegion.getAttributesMutator().setRegionIdleTimeout(idleTimeout); + } + } + return attr; + } + + /** + * Changes the timeToLive expiration attributes for values in this region. + * + * @param timeToLive + * the timeToLive expiration attributes for entries + * @return the previous value of entry timeToLive + * @throws IllegalArgumentException + * if timeToLive is null or if the ExpirationAction is + * LOCAL_DESTROY and the region is + * {@link DataPolicy#withReplication replicated} or if the + * ExpirationAction is LOCAL_INVALIDATE and the region is + * {@link DataPolicy#withReplication replicated} + * @throws IllegalStateException + * if statistics are disabled for this region. + */ + @Override + public ExpirationAttributes setEntryTimeToLive(ExpirationAttributes timeToLive) { + ExpirationAttributes attr = super.setEntryTimeToLive(timeToLive); + // Set to Bucket regions as well + if (this.getDataStore() != null) { // not for accessors + Iterator iter = this.getDataStore().getAllLocalBuckets().iterator(); + while (iter.hasNext()) { + Map.Entry entry = (Map.Entry)iter.next(); + Region bucketRegion = (BucketRegion)entry.getValue(); + bucketRegion.getAttributesMutator().setEntryTimeToLive(timeToLive); + } + } + updatePRConfig(getPRConfigWithLatestExpirationAttributes(), false); + return attr; + } + + private PartitionRegionConfig getPRConfigWithLatestExpirationAttributes(){ + PartitionRegionConfig prConfig = this.prRoot.get(getRegionIdentifier()); + PartitionRegionConfig newConfig = new PartitionRegionConfig( + prConfig.getPRId(), + prConfig.getFullPath(), + prConfig.getPartitionAttrs(), + prConfig.getScope(), + prConfig.getEvictionAttributes(), + this.getRegionIdleTimeout(), + this.getRegionTimeToLive(), + this.getEntryIdleTimeout(), + this.getEntryTimeToLive(), + prConfig.getGatewaySenderIds()); + + return newConfig; + } + + /** + * Changes the custom timeToLive for values in this region + * + * @param custom + * the new CustomExpiry + * @return the old CustomExpiry + */ + @Override + public CustomExpiry setCustomEntryTimeToLive(CustomExpiry custom) { + CustomExpiry expiry = super.setCustomEntryTimeToLive(custom); + // Set to Bucket regions as well + if (this.getDataStore() != null) { // not for accessors + Iterator iter = this.getDataStore().getAllLocalBuckets().iterator(); + while (iter.hasNext()) { + Map.Entry entry = (Map.Entry)iter.next(); + Region bucketRegion = (BucketRegion)entry.getValue(); + bucketRegion.getAttributesMutator().setCustomEntryTimeToLive(custom); + } + } + return expiry; + } + + /** + * Changes the idleTimeout expiration attributes for values in the region. + * + * @param idleTimeout + * the idleTimeout expiration attributes for entries + * @return the previous value of entry idleTimeout + * @throws IllegalArgumentException + * if idleTimeout is null or if the ExpirationAction is + * LOCAL_DESTROY and the region is + * {@link DataPolicy#withReplication replicated} or if the the + * ExpirationAction is LOCAL_INVALIDATE and the region is + * {@link DataPolicy#withReplication replicated} + * @see AttributesFactory#setStatisticsEnabled + * @throws IllegalStateException + * if statistics are disabled for this region. + */ + @Override + public ExpirationAttributes setEntryIdleTimeout( + ExpirationAttributes idleTimeout) { + ExpirationAttributes attr = super.setEntryIdleTimeout(idleTimeout); + // Set to Bucket regions as well + if (this.getDataStore() != null) { // not for accessors + Iterator iter = this.getDataStore().getAllLocalBuckets().iterator(); + while (iter.hasNext()) { + Map.Entry entry = (Map.Entry)iter.next(); + Region bucketRegion = (BucketRegion)entry.getValue(); + bucketRegion.getAttributesMutator().setEntryIdleTimeout(idleTimeout); + } + } + updatePRConfig(getPRConfigWithLatestExpirationAttributes(), false); + return attr; + } + + /** + * Changes the CustomExpiry for idleTimeout for values in the region + * + * @param custom + * the new CustomExpiry + * @return the old CustomExpiry + */ + @Override + public CustomExpiry setCustomEntryIdleTimeout(CustomExpiry custom) { + CustomExpiry expiry = super.setCustomEntryIdleTimeout(custom); + // Set to Bucket regions as well + if (this.getDataStore() != null) { // not for accessors + Iterator iter = this.getDataStore().getAllLocalBuckets().iterator(); + while (iter.hasNext()) { + Map.Entry entry = (Map.Entry)iter.next(); + Region bucketRegion = (BucketRegion)entry.getValue(); + bucketRegion.getAttributesMutator().setCustomEntryIdleTimeout(custom); + } + } + return expiry; + } + + @Override + protected void setMemoryThresholdFlag(MemoryEvent event) { + if (event.getState().isCritical() + && !event.getPreviousState().isCritical() + && (event.getType() == ResourceType.HEAP_MEMORY || (event.getType() == ResourceType.OFFHEAP_MEMORY && getOffHeap()))) { + // update proxy bucket, so that we can reject operations on those buckets. + getRegionAdvisor().markBucketsOnMember(event.getMember(), true/*sick*/); + } else if (!event.getState().isCritical() + && event.getPreviousState().isCritical() + && (event.getType() == ResourceType.HEAP_MEMORY || (event.getType() == ResourceType.OFFHEAP_MEMORY && getOffHeap()))) { + getRegionAdvisor().markBucketsOnMember(event.getMember(), false/*not sick*/); + } + } + + @Override + public void initialCriticalMembers(boolean localMemoryIsCritical, + Set critialMembers) { + for (InternalDistributedMember idm: critialMembers) { + getRegionAdvisor().markBucketsOnMember(idm, true/*sick*/); + } + } + + public DiskRegionStats getDiskRegionStats() { + return diskRegionStats; + } + + @Override + public void removeMemberFromCriticalList(DistributedMember member) { + if (logger.isDebugEnabled()) { + logger.debug("PR: removing member {} from critical member list", member); + } + getRegionAdvisor().markBucketsOnMember(member, false/*sick*/); + } + + public PartitionedRegion getColocatedWithRegion() { + return this.colocatedWithRegion; + } + + private final AtomicBoolean bucketSorterStarted = new AtomicBoolean(false); + private final AtomicBoolean bucketSortedOnce = new AtomicBoolean(false); + + private final Object monitor = new Object(); + + public List getSortedBuckets() { + if (!bucketSorterStarted.get()) { + bucketSorterStarted.set(true); + this.bucketSorter.scheduleAtFixedRate(new BucketSorterThread(), 0, + HeapEvictor.BUCKET_SORTING_INTERVAL, TimeUnit.MILLISECONDS); + if (logger.isDebugEnabled()) { + logger.debug("Started BucketSorter to sort the buckets according to numver of entries in each bucket for every {} milliseconds", + HeapEvictor.BUCKET_SORTING_INTERVAL); + } + } + List bucketList = new ArrayList(); + if(!bucketSortedOnce.get()){ + while(bucketSortedOnce.get() == false); + } + bucketList.addAll(this.sortedBuckets); + return bucketList; + } + + class BucketSorterThread implements Runnable { + public void run() { + try { + List bucketList = new ArrayList(); + Set buckets = dataStore.getAllLocalBucketRegions(); + for (BucketRegion br : buckets) { + if (HeapEvictor.MINIMUM_ENTRIES_PER_BUCKET < br.getSizeForEviction()) { + bucketList.add(br); + } + } + if (!bucketList.isEmpty()) { + Collections.sort(bucketList, new Comparator() { + public int compare(BucketRegion buk1, BucketRegion buk2) { + long buk1NumEntries = buk1.getSizeForEviction(); + long buk2NumEntries = buk2.getSizeForEviction(); + if (buk1NumEntries > buk2NumEntries) { + return -1; + } + else if (buk1NumEntries < buk2NumEntries) { + return 1; + } + return 0; + } + }); + } + sortedBuckets = bucketList; + if(!bucketSortedOnce.get()){ + bucketSortedOnce.set(true); + } + } + catch (Exception e) { + if (logger.isDebugEnabled()) { + logger.debug("BucketSorterThread : encountered Exception ", e); + } + } + } + } + + @Override + public LocalRegion getDataRegionForRead(final KeyInfo keyInfo) { + final Object entryKey = keyInfo.getKey(); + BucketRegion br; + try { + PartitionedRegionDataStore ds = getDataStore(); + if (ds == null) { + throw new TransactionException(LocalizedStrings.PartitionedRegion_TX_ON_DATASTORE.toLocalizedString()); + } + // TODO provide appropriate Operation and arg + int bucketId = keyInfo.getBucketId(); + if (bucketId == KeyInfo.UNKNOWN_BUCKET) { + bucketId = PartitionedRegionHelper.getHashKey(this, null, entryKey, + keyInfo.getValue(), keyInfo.getCallbackArg()); + keyInfo.setBucketId(bucketId); + } + br = ds.getInitializedBucketWithKnownPrimaryForId(null, bucketId); + if (keyInfo.isCheckPrimary()) { + try { + br.checkForPrimary(); + } catch (PrimaryBucketException pbe) { + RuntimeException re = new TransactionDataRebalancedException( + LocalizedStrings.PartitionedRegion_TRANSACTIONAL_DATA_MOVED_DUE_TO_REBALANCING + .toLocalizedString()); + re.initCause(pbe); + throw re; + } + } + } catch(RegionDestroyedException rde) { + RuntimeException re = new TransactionDataNotColocatedException(LocalizedStrings.PartitionedRegion_KEY_0_NOT_COLOCATED_WITH_TRANSACTION.toLocalizedString(entryKey)); + //re.initCause(rde); + throw re; + } catch (ForceReattemptException e) { + br = null; + } + return br; + } + + @Override + public LocalRegion getDataRegionForWrite(KeyInfo keyInfo) { + BucketRegion br = null; + final Object entryKey = keyInfo.getKey(); + try { + int count = 0; + final int retryAttempts = calcRetry(); + // TODO provide appropriate Operation and arg + int bucketId = keyInfo.getBucketId(); + if (bucketId == KeyInfo.UNKNOWN_BUCKET) { + bucketId = PartitionedRegionHelper.getHashKey(this, null, entryKey, + keyInfo.getValue(), keyInfo.getCallbackArg()); + keyInfo.setBucketId(bucketId); + } + while (count <= retryAttempts) { + try { + PartitionedRegionDataStore ds = getDataStore(); + if (ds == null) { + throw new TransactionException(LocalizedStrings.PartitionedRegion_TX_ON_DATASTORE.toLocalizedString()); + } + br = ds.getInitializedBucketWithKnownPrimaryForId(entryKey, bucketId); + break; + } catch (ForceReattemptException e) { + // create a new bucket + InternalDistributedMember member = createBucket(bucketId, 0, null); + if (!getMyId().equals(member) && keyInfo.isCheckPrimary()) { + throw new PrimaryBucketException("Bucket "+bucketId+" is not primary. Current primary holder is "+member); + } + count++; + } + } + Assert.assertTrue(br != null, "Could not create storage for Entry"); + if (keyInfo.isCheckPrimary()) { + br.checkForPrimary(); + } + } catch(PrimaryBucketException pbe) { + RuntimeException re = new TransactionDataRebalancedException(LocalizedStrings.PartitionedRegion_TRANSACTIONAL_DATA_MOVED_DUE_TO_REBALANCING.toLocalizedString()); + re.initCause(pbe); + throw re; + } catch(RegionDestroyedException rde) { + RuntimeException re = new TransactionDataNotColocatedException(LocalizedStrings.PartitionedRegion_KEY_0_NOT_COLOCATED_WITH_TRANSACTION.toLocalizedString(entryKey)); + //re.initCause(rde); + throw re; + } + return br; + } + + @Override + protected InternalDataView buildDataView() { + return new PartitionedRegionDataView(); + } + + @Override + public DistributedMember getOwnerForKey(KeyInfo keyInfo) { + if (keyInfo == null) { + return super.getOwnerForKey(null); + } + // TODO provide appropriate Operation and arg + int bucketId = keyInfo.getBucketId(); + if (bucketId == KeyInfo.UNKNOWN_BUCKET) { + bucketId = PartitionedRegionHelper.getHashKey(this, null, + keyInfo.getKey(), keyInfo.getValue(), keyInfo.getCallbackArg()); + keyInfo.setBucketId(bucketId); + } + return createBucket(bucketId, 0, null); + } + @Override + public KeyInfo getKeyInfo(Object key) { + return getKeyInfo(key, null); + } + + @Override + public KeyInfo getKeyInfo(Object key, Object callbackArg){ + return getKeyInfo(key, null, callbackArg); + } + @Override + public KeyInfo getKeyInfo(Object key, Object value, Object callbackArg) { + final int bucketId; + if (key == null){ + // key is null for putAll + bucketId = KeyInfo.UNKNOWN_BUCKET; + } else { + bucketId = PartitionedRegionHelper.getHashKey(this, null, key, value, callbackArg); + } + return new KeyInfo(key, callbackArg, bucketId); + } + + public static class SizeEntry implements Serializable { + private final int size; + private final boolean isPrimary; + + public SizeEntry(int size, boolean isPrimary) { + this.size = size; + this.isPrimary = isPrimary; + } + + public int getSize() { + return size; + } + + public boolean isPrimary() { + return isPrimary; + } + + @Override + public String toString() { + return "SizeEntry("+size+", primary="+isPrimary+")"; + } + + + } + + /** + * Index Task used to create the index. This is used along with the + * FutureTask to take care of, same index creation request from multiple + * threads. At any time only one thread succeeds and other threads waits + * for the completion of the index creation. This avoids usage of + * synchronization which could block any index creation. + */ + public class IndexTask implements Callable { + + public String indexName; + + public boolean remotelyOriginated; + + private IndexType indexType; + + private String indexedExpression; + + private String fromClause; + + //public List p_list; + + public String imports; + + public boolean loadEntries; + + IndexTask (boolean remotelyOriginated, IndexType indexType, String indexName + , + String indexedExpression, String fromClaus, String imports, boolean loadEntries + ){ + this.indexName = indexName; + this.remotelyOriginated = remotelyOriginated; + this.indexType = indexType; + this.indexName = indexName; + this.indexedExpression = indexedExpression; + this.fromClause = fromClaus; + //this.p_list = p_list; + this.imports = imports; + this.loadEntries = loadEntries; + + } + IndexTask (String indexName) { + this.indexName = indexName; + } + + @Override + public boolean equals (Object other){ + if (other == null) { + return false; + } + IndexTask otherIndexTask = (IndexTask) other; + if (this.indexName.equals(otherIndexTask.indexName)){ + return true; + } + return false; + } + + @Override + public int hashCode(){ + return this.indexName.hashCode(); + } + + /** + * This starts creating the index. + */ + public PartitionedIndex call() throws IndexCreationException, IndexNameConflictException, + IndexExistsException, ForceReattemptException { + // List list = p_list; + PartitionedIndex prIndex = null; + + if (dataStore != null){ + prIndex = createIndexOnPRBuckets(); + } else { + if (getLocalMaxMemory() != 0 ) { + throw new IndexCreationException(LocalizedStrings. + PartitionedRegion_DATA_STORE_ON_THIS_VM_IS_NULL_AND_THE_LOCAL_MAX_MEMORY_IS_NOT_ZERO_0.toLocalizedString( + Long.valueOf(getLocalMaxMemory()))); + } + logger.info(LocalizedMessage.create(LocalizedStrings.PartitionedRegion_THIS_IS_AN_ACCESSOR_VM_AND_DOESNT_CONTAIN_DATA)); + + prIndex = new PartitionedIndex(indexType, indexName, PartitionedRegion.this, + indexedExpression, fromClause, imports); + } + + hasPartitionedIndex = true; + return prIndex; + } + + /** + * This creates indexes on PR buckets. + */ + private PartitionedIndex createIndexOnPRBuckets() throws IndexNameConflictException, IndexExistsException, IndexCreationException { + // List list = p_list; + + Set localBuckets = getDataStore().getAllLocalBuckets(); + Iterator it = localBuckets.iterator(); + QCompiler compiler = new QCompiler(); + if (imports != null) { + compiler.compileImports(imports); + } + + //list = compiler.compileFromClause(fromClause); + + PartitionedIndex parIndex = new PartitionedIndex(indexType, indexName, PartitionedRegion.this, + indexedExpression, fromClause, imports); // imports can be null + String modifiedFromClause; + //In cases where we have no data yet (creation from cache xml), it would leave the populated flag to false + //Not really an issue as a put will trigger bucket index creation which should set this the flag to true + //However if the region is empty, we should set this flag to true so it will be reported as used even though + //there is no data in the region + if (!it.hasNext()) { + parIndex.setPopulated(true); + } + while (it.hasNext()) { + Map.Entry entry = (Map.Entry) it.next(); + Region bucket = (Region) entry.getValue(); + + if (bucket == null) { + continue; + } + + ExecutionContext externalContext = new ExecutionContext(null, cache); + externalContext.setBucketRegion(PartitionedRegion.this, + (BucketRegion) bucket); + IndexManager indMng = IndexUtils.getIndexManager(bucket, true); + try { + Index bucketIndex = indMng + .createIndex(indexName, indexType, indexedExpression, fromClause, + imports, externalContext, parIndex, loadEntries); + //parIndex.addToBucketIndexes(bucketIndex); + } catch (IndexNameConflictException ince) { + if (!remotelyOriginated) { + throw ince; + } + } catch (IndexExistsException iee) { + if (!remotelyOriginated) { + throw iee; + } + } + }// End of bucket list + return parIndex; + } + + } + + public List getFixedPartitionAttributesImpl() { + return fixedPAttrs; + } + + public List getPrimaryFixedPartitionAttributes_TestsOnly() { + List primaryFixedPAttrs = new LinkedList(); + if (this.fixedPAttrs != null) { + for (FixedPartitionAttributesImpl fpa : this.fixedPAttrs) { + if (fpa.isPrimary()) { + primaryFixedPAttrs.add(fpa); + } + } + } + return primaryFixedPAttrs; + } + + public List getSecondaryFixedPartitionAttributes_TestsOnly() { + List secondaryFixedPAttrs = new LinkedList(); + if (this.fixedPAttrs != null) { + for (FixedPartitionAttributesImpl fpa : this.fixedPAttrs) { + if (!fpa.isPrimary()) { + secondaryFixedPAttrs.add(fpa); + } + } + } + return secondaryFixedPAttrs; + } + + /** + * For the very first member, FPR's first partition has starting bucket id as + * 0 and other partitions have starting bucket id as the sum of previous + * partition's starting bucket id and previous partition's num-buckets. + * + * For other members, all partitions defined previously with assigned starting + * bucket ids are fetched from the metadata PartitionRegionConfig. Now for + * each partition defined for this member, if this partition is already + * available in the list of the previously defined partitions then starting + * bucket id is directly assigned from the same previously defined partition. + * + * And if the partition on this member is not available in the previously + * defined partitions then new starting bucket id is calculated as the sum of + * the largest starting bucket id from previously defined partitions and + * corresponding num-buckets of the partition. + * + * This data of the partitions (FixedPartitionAttributes with starting bucket + * id for the Fixed Partitioned Region) is stored in metadata for each member. + */ + + private void calculateStartingBucketIDs(PartitionRegionConfig prConfig) { + if (BEFORE_CALCULATE_STARTING_BUCKET_FLAG) { + PartitionedRegionObserver pro = PartitionedRegionObserverHolder.getInstance(); + pro.beforeCalculatingStartingBucketId(); + } + int startingBucketID = 0; + List fpaList = getFixedPartitionAttributesImpl(); + + if (this.getColocatedWith() == null) { + Set elderFPAs = prConfig + .getElderFPAs(); + if (elderFPAs != null && !elderFPAs.isEmpty()) { + int largestStartBucId = -1; + for (FixedPartitionAttributesImpl fpa : elderFPAs) { + if (fpa.getStartingBucketID() > largestStartBucId) { + largestStartBucId = fpa.getStartingBucketID(); + startingBucketID = largestStartBucId + fpa.getNumBuckets(); + } + } + } + for (FixedPartitionAttributesImpl fpaImpl : fpaList) { + if (elderFPAs != null && elderFPAs.contains(fpaImpl)) { + for (FixedPartitionAttributesImpl remotefpa : elderFPAs) { + if (remotefpa.equals(fpaImpl)) { + fpaImpl.setStartingBucketID(remotefpa.getStartingBucketID()); + } + } + } + else { + fpaImpl.setStartingBucketID(startingBucketID); + startingBucketID += fpaImpl.getNumBuckets(); + } + } + } + prConfig.addFPAs(fpaList); + for (FixedPartitionAttributesImpl fxPrAttr : fpaList) { + this.partitionsMap.put( + fxPrAttr.getPartitionName(), + new Integer[] { fxPrAttr.getStartingBucketID(), + fxPrAttr.getNumBuckets() }); + } + } + + /** + * Returns the local BucketRegion given the key. + * Returns null if no BucketRegion exists. + * @since 6.1.2.9 + */ + public BucketRegion getBucketRegion(Object key) { + if (this.dataStore == null) + return null; + Integer bucketId = Integer.valueOf(PartitionedRegionHelper.getHashKey(this, + null, key, null, null)); + return this.dataStore.getLocalBucketById(bucketId); + } + + /** + * Returns the local BucketRegion given the key and value. Particularly useful + * for SQLFabric where the routing object may be part of value and determining + * from key alone will require an expensive global index lookup. + * Returns null if no BucketRegion exists. + */ + public BucketRegion getBucketRegion(Object key, Object value) { + if (this.dataStore == null) { + return null; + } + final Integer bucketId = Integer.valueOf(PartitionedRegionHelper + .getHashKey(this, null, key, value, null)); + return this.dataStore.getLocalBucketById(bucketId); + } + + /** + * Test hook to return the per entry overhead for a bucket region. + * Returns -1 if no buckets exist in this vm. + * @since 6.1.2.9 + */ + public int getPerEntryLRUOverhead() { + if (this.dataStore == null) { // this is an accessor + return -1; + } + try { + return this.dataStore.getPerEntryLRUOverhead(); + } catch (NoSuchElementException e) { // no buckets available + return -1; + } + } + + @Override + protected boolean isEntryIdleExpiryPossible() { + // false always as this is a partitionedRegion, + // its the BucketRegion that does the expiry + return false; + } + + @Override + public boolean hasSeenEvent(EntryEventImpl ev) { + // [bruce] PRs don't track events - their buckets do that + if (this.dataStore == null) { + return false; + } + return this.dataStore.hasSeenEvent(ev); + } + + public void enableConflation(boolean conflation) { + this.enableConflation = conflation; + } + + public boolean isConflationEnabled() { + return this.enableConflation; + } + + @Override + public CachePerfStats getRegionPerfStats() { + PartitionedRegionDataStore ds = getDataStore(); + CachePerfStats result = null; + if (ds != null) { + // If we don't have a data store (we are an accessor) + // then we do not have per region stats. + // This is not good. We should still have stats even for accessors. + result = ds.getCachePerfStats(); // fixes 46692 + } + return result; + } + + public void updateEntryVersionInBucket(EntryEventImpl event) { + + final boolean isDebugEnabled = logger.isDebugEnabled(); + + final Integer bucketId = event.getKeyInfo().getBucketId(); + assert bucketId != KeyInfo.UNKNOWN_BUCKET; + final InternalDistributedMember targetNode = getOrCreateNodeForBucketWrite( + bucketId, null); + + final int retryAttempts = calcRetry(); + int count = 0; + RetryTimeKeeper retryTime = null; + InternalDistributedMember retryNode = targetNode; + while (count <= retryAttempts) { + // It's possible this is a GemFire thread e.g. ServerConnection + // which got to this point because of a distributed system shutdown or + // region closure which uses interrupt to break any sleep() or wait() + // calls + // e.g. waitForPrimary or waitForBucketRecovery + checkShutdown(); + + if (retryNode == null) { + checkReadiness(); + if (retryTime == null) { + retryTime = new RetryTimeKeeper(this.retryTimeout); + } + try { + retryNode = getOrCreateNodeForBucketWrite(bucketId.intValue(), retryTime); + } + catch (TimeoutException te) { + if (getRegionAdvisor() + .isStorageAssignedForBucket(bucketId.intValue())) { // bucket no + // longer + // exists + throw new EntryNotFoundException(LocalizedStrings.PartitionedRegion_ENTRY_NOT_FOUND_FOR_KEY_0.toLocalizedString(event.getKey())); + } + break; // fall out to failed exception + } + + if (retryNode == null) { + checkEntryNotFound(event.getKey()); + } + continue; + } + final boolean isLocal = (this.localMaxMemory > 0) && retryNode.equals(getMyId()); + try { + if (isLocal) { + this.dataStore.updateEntryVersionLocally(bucketId, event); + } + else { + updateEntryVersionRemotely(retryNode, bucketId, event); + if (localCacheEnabled) { + try { + super.basicUpdateEntryVersion(event); + } + catch (EntryNotFoundException enf) { + if (isDebugEnabled) { + logger.debug("updateEntryVersionInBucket: Failed to update entry version timestamp from local cache because of EntryNotFoundException.", enf); + } + } + } + } + return; + } catch (ConcurrentCacheModificationException e) { + if (isDebugEnabled) { + logger.debug("updateEntryVersionInBucket: caught concurrent cache modification exception", e); + } + event.isConcurrencyConflict(true); + + if (isDebugEnabled) { + logger.debug("ConcurrentCacheModificationException received for updateEntryVersionInBucket for bucketId: {}{}{} for event: {} No reattampt is done, returning from here", + getPRId(), BUCKET_ID_SEPARATOR, bucketId, event); + } + return; + } + catch (ForceReattemptException prce) { + prce.checkKey(event.getKey()); + if (isDebugEnabled) { + logger.debug("updateEntryVersionInBucket: retry attempt:{} of {}", count, retryAttempts, prce); + } + checkReadiness(); + + InternalDistributedMember lastNode = retryNode; + retryNode = getOrCreateNodeForBucketWrite(bucketId.intValue(), retryTime); + if (lastNode.equals(retryNode)) { + if (retryTime == null) { + retryTime = new RetryTimeKeeper(this.retryTimeout); + } + if (retryTime.overMaximum()) { + break; + } + retryTime.waitToRetryNode(); + } + } + catch (PrimaryBucketException notPrimary) { + if (isDebugEnabled) { + logger.debug("updateEntryVersionInBucket {} on Node {} not primary", notPrimary.getLocalizedMessage(), retryNode); + } + getRegionAdvisor().notPrimary(bucketId.intValue(), retryNode); + retryNode = getOrCreateNodeForBucketWrite(bucketId.intValue(), retryTime); + } + + count++; + if (count == 1) { + //this.prStats.incUpdateEntryVersionOpsRetried(); + } + //this.prStats.incUpdateEntryVersionRetries(); + if (isDebugEnabled) { + logger.debug("updateEntryVersionInBucket: Attempting to resend update version to node {} after {} failed attempts", retryNode, count); + } + } // while + + // No target was found + PartitionedRegionDistributionException e + = new PartitionedRegionDistributionException(LocalizedStrings.PartitionedRegion_NO_VM_AVAILABLE_FOR_UPDATE_ENTRY_VERSION_IN_0_ATTEMPTS + .toLocalizedString(Integer.valueOf(count))); // Fix for bug 36014 + if (!isDebugEnabled) { + logger.warn(LocalizedMessage.create(LocalizedStrings.PartitionedRegion_NO_VM_AVAILABLE_FOR_UPDATE_ENTRY_VERSION_IN_0_ATTEMPTS, Integer.valueOf(count))); + } + else { + logger.warn(e.getMessage(), e); + } + throw e; + } + + /** + * Updates the entry version timestamp of the remote object with the given key. + * + * @param recipient + * the member id of the recipient of the operation + * @param bucketId + * the id of the bucket the key hashed into + * @throws EntryNotFoundException + * if the entry does not exist in this region + * @throws PrimaryBucketException + * if the bucket on that node is not the primary copy + * @throws ForceReattemptException + * if the peer is no longer available + */ + private void updateEntryVersionRemotely(InternalDistributedMember recipient, + Integer bucketId, EntryEventImpl event) throws EntryNotFoundException, + PrimaryBucketException, ForceReattemptException { + + UpdateEntryVersionResponse response = PRUpdateEntryVersionMessage.send(recipient, this, event); + if (response != null) { + this.prStats.incPartitionMessagesSent(); + try { + response.waitForResult(); + return; + } + catch (EntryNotFoundException ex) { + throw ex; + } catch (TransactionDataNotColocatedException ex) { + throw ex; + } catch (TransactionDataRebalancedException e) { + throw e; + } catch (CacheException ce) { + throw new PartitionedRegionException(LocalizedStrings.PartitionedRegion_UPDATE_VERSION_OF_ENTRY_ON_0_FAILED.toLocalizedString(recipient), ce); + } + } + } + + /** + * Clear local primary buckets. + * This is currently only used by gemfirexd truncate table + * to clear the partitioned region. + */ + public void clearLocalPrimaries() { + // rest of it should be done only if this is a store while RecoveryLock + // above still required even if this is an accessor + if (getLocalMaxMemory() > 0) { + // acquire the primary bucket locks + // do this in a loop to handle the corner cases where a primary + // bucket region ceases to be so when we actually take the lock + // (probably not required to do this in loop after the recovery lock) + // [sumedh] do we need both recovery lock and bucket locks? + boolean done = false; + Set lockedRegions = null; + while (!done) { + lockedRegions = getDataStore().getAllLocalPrimaryBucketRegions(); + done = true; + for (BucketRegion br : lockedRegions) { + try { + br.doLockForPrimary(false); + } catch (RegionDestroyedException rde) { + done = false; + break; + } catch (PrimaryBucketException pbe) { + done = false; + break; + } catch (Exception e) { + // ignore any other exception + logger.debug( + "GemFireContainer#clear: ignoring exception " + + "in bucket lock acquire", e); + } + } + } + + //hoplogs - pause HDFS dispatcher while we + //clear the buckets to avoid missing some files + //during the clear + pauseHDFSDispatcher(); + + try { + // now clear the bucket regions; we go through the primary bucket + // regions so there is distribution for every bucket but that + // should be performant enough + for (BucketRegion br : lockedRegions) { + try { + br.clear(); + } catch (Exception e) { + // ignore any other exception + logger.debug( + "GemFireContainer#clear: ignoring exception " + + "in bucket clear", e); + } + } + } finally { + resumeHDFSDispatcher(); + // release the bucket locks + for (BucketRegion br : lockedRegions) { + try { + br.doUnlockForPrimary(); + } catch (Exception e) { + // ignore all exceptions at this stage + logger.debug( + "GemFireContainer#clear: ignoring exception " + + "in bucket lock release", e); + } + } + } + } + + } + + /**Destroy all data in HDFS, if this region is using HDFS persistence.*/ + private void destroyHDFSData() { + if(getHDFSStoreName() == null) { + return; + } + + try { + hdfsManager.destroyData(); + } catch (IOException e) { + logger.warn(LocalizedStrings.HOPLOG_UNABLE_TO_DELETE_HDFS_DATA, e); + } + } + + private void pauseHDFSDispatcher() { + if(!isHDFSRegion()) { + return; + } + AbstractGatewaySenderEventProcessor eventProcessor = getHDFSEventProcessor(); + if (eventProcessor == null) return; + eventProcessor.pauseDispatching(); + eventProcessor.waitForDispatcherToPause(); + } + + /** + * Get the statistics for the HDFS event queue associated with this region, + * if any + */ + public AsyncEventQueueStats getHDFSEventQueueStats() { + AsyncEventQueueImpl asyncQ = getHDFSEventQueue(); + if(asyncQ == null) { + return null; + } + return asyncQ.getStatistics(); + } + + protected AbstractGatewaySenderEventProcessor getHDFSEventProcessor() { + final AsyncEventQueueImpl asyncQ = getHDFSEventQueue(); + final AbstractGatewaySender gatewaySender = (AbstractGatewaySender)asyncQ.getSender(); + AbstractGatewaySenderEventProcessor eventProcessor = gatewaySender.getEventProcessor(); + return eventProcessor; + } + + public AsyncEventQueueImpl getHDFSEventQueue() { + String asyncQId = getHDFSEventQueueName(); + if(asyncQId == null) { + return null; + } + final AsyncEventQueueImpl asyncQ = (AsyncEventQueueImpl)this.getCache().getAsyncEventQueue(asyncQId); + return asyncQ; + } + + private void resumeHDFSDispatcher() { + if(!isHDFSRegion()) { + return; + } + AbstractGatewaySenderEventProcessor eventProcessor = getHDFSEventProcessor(); + if (eventProcessor == null) return; + eventProcessor.resumeDispatching(); + } + + protected String getHDFSEventQueueName() { + if (!this.getDataPolicy().withHDFS()) return null; + String colocatedWith = this.getPartitionAttributes().getColocatedWith(); + String eventQueueName; + if (colocatedWith != null) { + PartitionedRegion leader = ColocationHelper.getLeaderRegionName(this); + eventQueueName = HDFSStoreFactoryImpl.getEventQueueName(leader + .getFullPath()); + } + else { + eventQueueName = HDFSStoreFactoryImpl.getEventQueueName(getFullPath()); + } + return eventQueueName; + } + + /** + * schedules compaction on all members where this region is hosted. + * + * @param isMajor + * true for major compaction + * @param maxWaitTime + * time to wait for the operation to complete, 0 will wait forever + */ + @Override + public void forceHDFSCompaction(boolean isMajor, Integer maxWaitTime) { + if (!this.isHDFSReadWriteRegion()) { + if (this.isHDFSRegion()) { + throw new UnsupportedOperationException( + LocalizedStrings.HOPLOG_CONFIGURED_AS_WRITEONLY + .toLocalizedString(getName())); + } + throw new UnsupportedOperationException( + LocalizedStrings.HOPLOG_DOES_NOT_USE_HDFSSTORE + .toLocalizedString(getName())); + } + // send request to remote data stores + long start = System.currentTimeMillis(); + int waitTime = maxWaitTime * 1000; + HDFSForceCompactionArgs args = new HDFSForceCompactionArgs(getRegionAdvisor().getBucketSet(), isMajor, waitTime); + HDFSForceCompactionResultCollector rc = new HDFSForceCompactionResultCollector(); + AbstractExecution execution = (AbstractExecution) FunctionService.onRegion(this).withArgs(args).withCollector(rc); + execution.setWaitOnExceptionFlag(true); // wait for all exceptions + if (logger.isDebugEnabled()) { + logger.debug("HDFS: ForceCompat invoking function with arguments "+args); + } + execution.execute(HDFSForceCompactionFunction.ID); + List result = rc.getResult(); + Set successfulBuckets = rc.getSuccessfulBucketIds(); + if (rc.shouldRetry()) { + int retries = 0; + while (retries < HDFSForceCompactionFunction.FORCE_COMPACTION_MAX_RETRIES) { + waitTime -= System.currentTimeMillis() - start; + if (maxWaitTime > 0 && waitTime < 0) { + break; + } + start = System.currentTimeMillis(); + retries++; + Set retryBuckets = new HashSet(getRegionAdvisor().getBucketSet()); + retryBuckets.removeAll(successfulBuckets); + + for (int bucketId : retryBuckets) { + getNodeForBucketWrite(bucketId, new PartitionedRegion.RetryTimeKeeper(waitTime)); + long now = System.currentTimeMillis(); + waitTime -= now - start; + start = now; + } + + args = new HDFSForceCompactionArgs(retryBuckets, isMajor, waitTime); + rc = new HDFSForceCompactionResultCollector(); + execution = (AbstractExecution) FunctionService.onRegion(this).withArgs(args).withCollector(rc); + execution.setWaitOnExceptionFlag(true); // wait for all exceptions + if (logger.isDebugEnabled()) { + logger.debug("HDFS: ForceCompat re-invoking function with arguments "+args+" filter:"+retryBuckets); + } + execution.execute(HDFSForceCompactionFunction.ID); + result = rc.getResult(); + successfulBuckets.addAll(rc.getSuccessfulBucketIds()); + } + } + if (successfulBuckets.size() != getRegionAdvisor().getBucketSet().size()) { + checkReadiness(); + Set uncessfulBuckets = new HashSet(getRegionAdvisor().getBucketSet()); + uncessfulBuckets.removeAll(successfulBuckets); + throw new FunctionException("Could not run compaction on following buckets:"+uncessfulBuckets); + } + } + + /** + * Schedules compaction on local buckets + * @param buckets the set of buckets to compact + * @param isMajor true for major compaction + * @param time TODO use this + * @return a list of futures for the scheduled compaction tasks + */ + public List> forceLocalHDFSCompaction(Set buckets, boolean isMajor, long time) { + List> futures = new ArrayList>(); + if (!isDataStore() || hdfsManager == null || buckets == null || buckets.isEmpty()) { + if (logger.isDebugEnabled()) { + logger.debug( + "HDFS: did not schedule local " + (isMajor ? "Major" : "Minor") + " compaction"); + } + // nothing to do + return futures; + } + if (logger.isDebugEnabled()) { + logger.debug( + "HDFS: scheduling local " + (isMajor ? "Major" : "Minor") + " compaction for buckets:"+buckets); + } + Collection organizers = hdfsManager.getBucketOrganizers(buckets); + + for (HoplogOrganizer hoplogOrganizer : organizers) { + Future f = hoplogOrganizer.forceCompaction(isMajor); + futures.add(f); + } + return futures; + } + + @Override + public void flushHDFSQueue(int maxWaitTime) { + if (!this.isHDFSRegion()) { + throw new UnsupportedOperationException( + LocalizedStrings.HOPLOG_DOES_NOT_USE_HDFSSTORE + .toLocalizedString(getName())); + } + HDFSFlushQueueFunction.flushQueue(this, maxWaitTime); + } + + @Override + public long lastMajorHDFSCompaction() { + if (!this.isHDFSReadWriteRegion()) { + if (this.isHDFSRegion()) { + throw new UnsupportedOperationException( + LocalizedStrings.HOPLOG_CONFIGURED_AS_WRITEONLY + .toLocalizedString(getName())); + } + throw new UnsupportedOperationException( + LocalizedStrings.HOPLOG_DOES_NOT_USE_HDFSSTORE + .toLocalizedString(getName())); + } + List result = (List) FunctionService.onRegion(this) + .execute(HDFSLastCompactionTimeFunction.ID) + .getResult(); + if (logger.isDebugEnabled()) { + logger.debug("HDFS: Result of LastCompactionTimeFunction "+result); + } + long min = Long.MAX_VALUE; + for (long ts : result) { + if (ts !=0 && ts < min) { + min = ts; + } + } + min = min == Long.MAX_VALUE ? 0 : min; + return min; + } + + public long lastLocalMajorHDFSCompaction() { + if (!isDataStore() || hdfsManager == null) { + // nothing to do + return 0; + } + if (logger.isDebugEnabled()) { + logger.debug( + "HDFS: getting local Major compaction time"); + } + Collection organizers = hdfsManager.getBucketOrganizers(); + long minTS = Long.MAX_VALUE; + for (HoplogOrganizer hoplogOrganizer : organizers) { + long ts = hoplogOrganizer.getLastMajorCompactionTimestamp(); + if (ts !=0 && ts < minTS) { + minTS = ts; + } + } + minTS = minTS == Long.MAX_VALUE ? 0 : minTS; + if (logger.isDebugEnabled()) { + logger.debug( + "HDFS: local Major compaction time: "+minTS); + } + return minTS; + } + + + public void shadowPRWaitForBucketRecovery() { + assert this.isShadowPR(); + PartitionedRegion userPR = ColocationHelper.getLeaderRegion(this); + boolean isAccessor = (userPR.getLocalMaxMemory() == 0); + if (isAccessor) + return; // return from here if accessor node + + // Before going ahead, make sure all the buckets of shadowPR are + // loaded + // and primary nodes have been decided. + // This is required in case of persistent PR and sender. + Set allBuckets = userPR.getDataStore() + .getAllLocalBucketIds(); + Set allBucketsClone = new HashSet(); + allBucketsClone.addAll(allBuckets); + + while (!(allBucketsClone.size() == 0)) { + logger.debug("Need to wait until partitionedRegionQueue <<{}>> is loaded with all the buckets", this.getName()); + Iterator itr = allBucketsClone.iterator(); + while (itr.hasNext()) { + InternalDistributedMember node = this + .getNodeForBucketWrite(itr.next(), null); + if (node != null) { + itr.remove(); + } + } + // after the iteration is over, sleep for sometime before trying + // again + try { + Thread.sleep(ParallelGatewaySenderQueue.WAIT_CYCLE_SHADOW_BUCKET_LOAD); + } catch (InterruptedException e) { + logger.error(e.getMessage(), e); + } + } + } + + @Override + protected void preDestroyChecks() { + try { + // if there are colocated children throw an exception + checkForColocatedChildren(); + } catch (CancelException e) { + // If cache is being closed, ignore and go + // ahead with the destroy + } + } + + @Override + protected boolean hasStorage() { + return this.getLocalMaxMemory() != 0; + } + + @Override + public EntryExpiryTask getEntryExpiryTask(Object key) { + BucketRegion br = this.getDataStore().getLocalBucketByKey(key); + if (br == null) { + throw new EntryNotFoundException("Bucket for key " + key + " does not exist."); + } + return br.getEntryExpiryTask(key); + } +} + diff --git a/gemfire-core/src/main/java/com/gemstone/gemfire/internal/cache/tier/sockets/BaseCommand.java b/gemfire-core/src/main/java/com/gemstone/gemfire/internal/cache/tier/sockets/BaseCommand.java new file mode 100755 index 000000000000..3c4eb457ead3 --- /dev/null +++ b/gemfire-core/src/main/java/com/gemstone/gemfire/internal/cache/tier/sockets/BaseCommand.java @@ -0,0 +1,1624 @@ +/* + * 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 com.gemstone.gemfire.internal.cache.tier.sockets; + +import java.io.EOFException; +import java.io.IOException; +import java.io.InterruptedIOException; +import java.io.PrintWriter; +import java.io.StringWriter; +import java.util.ArrayList; +import java.util.Collection; +import java.util.HashMap; +import java.util.HashSet; +import java.util.Iterator; +import java.util.List; +import java.util.Map; +import java.util.Set; +import java.util.concurrent.Semaphore; +import java.util.regex.Pattern; + +import org.apache.logging.log4j.Logger; + +import com.gemstone.gemfire.CancelException; +import com.gemstone.gemfire.CopyException; +import com.gemstone.gemfire.InternalGemFireError; +import com.gemstone.gemfire.SerializationException; +import com.gemstone.gemfire.SystemFailure; +import com.gemstone.gemfire.cache.CacheLoaderException; +import com.gemstone.gemfire.cache.CacheWriterException; +import com.gemstone.gemfire.cache.InterestResultPolicy; +import com.gemstone.gemfire.cache.Region; +import com.gemstone.gemfire.cache.RegionDestroyedException; +import com.gemstone.gemfire.cache.TransactionException; +import com.gemstone.gemfire.cache.persistence.PartitionOfflineException; +import com.gemstone.gemfire.cache.query.types.CollectionType; +import com.gemstone.gemfire.distributed.DistributedSystemDisconnectedException; +import com.gemstone.gemfire.distributed.internal.DistributionStats; +import com.gemstone.gemfire.distributed.internal.membership.InternalDistributedMember; +import com.gemstone.gemfire.internal.Assert; +import com.gemstone.gemfire.internal.Version; +import com.gemstone.gemfire.internal.cache.CachedDeserializable; +import com.gemstone.gemfire.internal.cache.DistributedRegion; +import com.gemstone.gemfire.internal.cache.EntryEventImpl; +import com.gemstone.gemfire.internal.cache.EntrySnapshot; +import com.gemstone.gemfire.internal.cache.EventID; +import com.gemstone.gemfire.internal.cache.FindVersionTagOperation; +import com.gemstone.gemfire.internal.cache.GemFireCacheImpl; +import com.gemstone.gemfire.internal.cache.LocalRegion; +import com.gemstone.gemfire.internal.cache.LocalRegion.NonTXEntry; +import com.gemstone.gemfire.internal.cache.PartitionedRegion; +import com.gemstone.gemfire.internal.cache.PartitionedRegionHelper; +import com.gemstone.gemfire.internal.cache.TXManagerImpl; +import com.gemstone.gemfire.internal.cache.TXStateProxy; +import com.gemstone.gemfire.internal.cache.Token; +import com.gemstone.gemfire.internal.cache.tier.CachedRegionHelper; +import com.gemstone.gemfire.internal.cache.tier.Command; +import com.gemstone.gemfire.internal.cache.tier.InterestType; +import com.gemstone.gemfire.internal.cache.tier.MessageType; +import com.gemstone.gemfire.internal.cache.versions.VersionStamp; +import com.gemstone.gemfire.internal.cache.versions.VersionTag; +import com.gemstone.gemfire.internal.i18n.LocalizedStrings; +import com.gemstone.gemfire.internal.logging.LogService; +import com.gemstone.gemfire.internal.logging.log4j.LocalizedMessage; +import com.gemstone.gemfire.internal.offheap.OffHeapHelper; +import com.gemstone.gemfire.internal.sequencelog.EntryLogger; +import com.gemstone.gemfire.security.GemFireSecurityException; + +/** + * + */ +public abstract class BaseCommand implements Command { + protected static final Logger logger = LogService.getLogger(); + + /** + * Whether zipped values are being passed to/from the client. Can be modified + * using the system property Message.ZIP_VALUES ? This does not appear to + * happen anywhere + */ + protected static final boolean zipValues = false; + + protected static final boolean APPLY_RETRIES = Boolean + .getBoolean("gemfire.gateway.ApplyRetries"); + + public static final byte[] OK_BYTES = new byte[]{0}; + + public static final int maximumChunkSize = Integer.getInteger( + "BridgeServer.MAXIMUM_CHUNK_SIZE", 100).intValue(); + + /** Maximum number of entries in each chunked response chunk */ + + /** Whether to suppress logging of IOExceptions */ + private static boolean suppressIOExceptionLogging = Boolean + .getBoolean("gemfire.bridge.suppressIOExceptionLogging"); + + /** + * Maximum number of concurrent incoming client message bytes that a bridge + * server will allow. Once a server is working on this number additional + * incoming client messages will wait until one of them completes or fails. + * The bytes are computed based in the size sent in the incoming msg header. + */ + private static final int MAX_INCOMING_DATA = Integer.getInteger( + "BridgeServer.MAX_INCOMING_DATA", -1).intValue(); + + /** + * Maximum number of concurrent incoming client messages that a bridge server + * will allow. Once a server is working on this number additional incoming + * client messages will wait until one of them completes or fails. + */ + private static final int MAX_INCOMING_MSGS = Integer.getInteger( + "BridgeServer.MAX_INCOMING_MSGS", -1).intValue(); + + private static final Semaphore incomingDataLimiter; + + private static final Semaphore incomingMsgLimiter; + static { + Semaphore tmp; + if (MAX_INCOMING_DATA > 0) { + // backport requires that this is fair since we inc by values > 1 + tmp = new Semaphore(MAX_INCOMING_DATA, true); + } + else { + tmp = null; + } + incomingDataLimiter = tmp; + if (MAX_INCOMING_MSGS > 0) { + tmp = new Semaphore(MAX_INCOMING_MSGS, false); // unfair for best + // performance + } + else { + tmp = null; + } + incomingMsgLimiter = tmp; + + } + + final public void execute(Message msg, ServerConnection servConn) { + // Read the request and update the statistics + long start = DistributionStats.getStatTime(); + //servConn.resetTransientData(); + if(EntryLogger.isEnabled() && servConn != null) { + EntryLogger.setSource(servConn.getMembershipID(), "c2s"); + } + boolean shouldMasquerade = shouldMasqueradeForTx(msg, servConn); + try { + if (shouldMasquerade) { + GemFireCacheImpl cache = (GemFireCacheImpl)servConn.getCache(); + InternalDistributedMember member = (InternalDistributedMember)servConn.getProxyID().getDistributedMember(); + TXManagerImpl txMgr = cache.getTxManager(); + TXStateProxy tx = null; + try { + tx = txMgr.masqueradeAs(msg, member, false); + cmdExecute(msg, servConn, start); + } finally { + txMgr.unmasquerade(tx); + } + } else { + cmdExecute(msg, servConn, start); + } + + } + catch (EOFException eof) { + BaseCommand.handleEOFException(msg, servConn, eof); + // TODO:Asif: Check if there is any need for explicitly returning + return; + } + catch (InterruptedIOException e) { // Solaris only + BaseCommand.handleInterruptedIOException(msg, servConn, e); + return; + } + catch (IOException e) { + BaseCommand.handleIOException(msg, servConn, e); + return; + } + catch (DistributedSystemDisconnectedException e) { + BaseCommand.handleShutdownException(msg, servConn, e); + return; + } + catch (PartitionOfflineException e) { // fix for bug #42225 + handleExceptionNoDisconnect(msg, servConn, e); + } + catch (GemFireSecurityException e) { + handleExceptionNoDisconnect(msg, servConn, e); + } + catch (CacheLoaderException e) { + handleExceptionNoDisconnect(msg, servConn, e); + } + catch (CacheWriterException e) { + handleExceptionNoDisconnect(msg, servConn, e); + } catch (SerializationException e) { + handleExceptionNoDisconnect(msg, servConn, e); + } catch (CopyException e) { + handleExceptionNoDisconnect(msg, servConn, e); + } catch (TransactionException e) { + handleExceptionNoDisconnect(msg, servConn, e); + } + + catch (VirtualMachineError err) { + SystemFailure.initiateFailure(err); + // If this ever returns, rethrow the error. We're poisoned + // now, so don't let this thread continue. + throw err; + } + catch (Throwable e) { + BaseCommand.handleThrowable(msg, servConn, e); + } finally { + EntryLogger.clearSource(); + } + /* + * finally { // Keep track of the fact that a message is no longer being // + * processed. servConn.setNotProcessingMessage(); + * servConn.clearRequestMsg(); } + */ + } + + /** + * checks to see if this thread needs to masquerade as a transactional thread. + * clients after GFE_66 should be able to start a transaction. + * @param msg + * @param servConn + * @return true if thread should masquerade as a transactional thread. + */ + protected boolean shouldMasqueradeForTx(Message msg, ServerConnection servConn) { + if (servConn.getClientVersion().compareTo(Version.GFE_66) >= 0 + && msg.getTransactionId() > TXManagerImpl.NOTX) { + return true; + } + return false; + } + + /** + * If an operation is retried then some server may have seen it already. + * We cannot apply this operation to the cache without knowing whether a + * version tag has already been created for it. Otherwise caches that have + * seen the event already will reject it but others will not, but will have + * no version tag with which to perform concurrency checks. + *

The client event should have the event identifier from the client and + * the region affected by the operation. + * @param clientEvent + */ + public boolean recoverVersionTagForRetriedOperation(EntryEventImpl clientEvent) { + LocalRegion r = clientEvent.getRegion(); + VersionTag tag = null; + if ((clientEvent.getVersionTag() != null) && (clientEvent.getVersionTag().isGatewayTag())) { + tag = r.findVersionTagForGatewayEvent(clientEvent.getEventId()); + } + else { + tag = r.findVersionTagForClientEvent(clientEvent.getEventId()); + } + if (tag == null) { + if (r instanceof DistributedRegion || r instanceof PartitionedRegion) { + // TODO this could be optimized for partitioned regions by sending the key + // so that the PR could look at an individual bucket for the event + tag = FindVersionTagOperation.findVersionTag(r, clientEvent.getEventId(), false); + } + } + if (tag != null) { + if (logger.isDebugEnabled()) { + logger.debug("recovered version tag {} for replayed operation {}", tag, clientEvent.getEventId()); + } + clientEvent.setVersionTag(tag); + } + return (tag != null); + } + + /** + * If an operation is retried then some server may have seen it already. + * We cannot apply this operation to the cache without knowing whether a + * version tag has already been created for it. Otherwise caches that have + * seen the event already will reject it but others will not, but will have + * no version tag with which to perform concurrency checks. + *

The client event should have the event identifier from the client and + * the region affected by the operation. + */ + protected VersionTag findVersionTagsForRetriedBulkOp(LocalRegion r, EventID eventID) { + VersionTag tag = r.findVersionTagForClientBulkOp(eventID); + if(tag != null) { + if (logger.isDebugEnabled()) { + logger.debug("recovered version tag {} for replayed bulk operation {}", tag, eventID); + } + return tag; + } + if (r instanceof DistributedRegion || r instanceof PartitionedRegion) { + // TODO this could be optimized for partitioned regions by sending the key + // so that the PR could look at an individual bucket for the event + tag = FindVersionTagOperation.findVersionTag(r, eventID, true); + } + if (tag != null) { + if (logger.isDebugEnabled()) { + logger.debug("recovered version tag {} for replayed bulk operation {}", tag, eventID); + } + } + return tag; + } + + abstract public void cmdExecute(Message msg, ServerConnection servConn, + long start) throws IOException, ClassNotFoundException, InterruptedException; + + protected void writeReply(Message origMsg, ServerConnection servConn) + throws IOException { + Message replyMsg = servConn.getReplyMessage(); + servConn.getCache().getCancelCriterion().checkCancelInProgress(null); + replyMsg.setMessageType(MessageType.REPLY); + replyMsg.setNumberOfParts(1); + replyMsg.setTransactionId(origMsg.getTransactionId()); + replyMsg.addBytesPart(OK_BYTES); + replyMsg.send(servConn); + if (logger.isTraceEnabled()) { + logger.trace("{}: rpl tx: {}", servConn.getName(), origMsg.getTransactionId()); + } + } + protected void writeReplyWithRefreshMetadata(Message origMsg, + ServerConnection servConn, PartitionedRegion pr, byte nwHop) throws IOException { + Message replyMsg = servConn.getReplyMessage(); + servConn.getCache().getCancelCriterion().checkCancelInProgress(null); + replyMsg.setMessageType(MessageType.REPLY); + replyMsg.setNumberOfParts(1); + replyMsg.setTransactionId(origMsg.getTransactionId()); + replyMsg.addBytesPart(new byte[]{pr.getMetadataVersion().byteValue(), nwHop}); + replyMsg.send(servConn); + pr.getPrStats().incPRMetaDataSentCount(); + if (logger.isTraceEnabled()) { + logger.trace("{}: rpl with REFRESH_METADAT tx: {}", servConn.getName(), origMsg.getTransactionId()); + } + } + + private static void handleEOFException(Message msg, + ServerConnection servConn, Exception eof) { + CachedRegionHelper crHelper = servConn.getCachedRegionHelper(); + CacheServerStats stats = servConn.getCacheServerStats(); + boolean potentialModification = servConn.getPotentialModification(); + if (!crHelper.isShutdown()) { + if (potentialModification) { + stats.incAbandonedWriteRequests(); + } + else { + stats.incAbandonedReadRequests(); + } + if (!suppressIOExceptionLogging) { + if (potentialModification) { + int transId = (msg != null) ? msg.getTransactionId() + : Integer.MIN_VALUE; + logger.warn(LocalizedMessage.create( + LocalizedStrings.BaseCommand_0_EOFEXCEPTION_DURING_A_WRITE_OPERATION_ON_REGION__1_KEY_2_MESSAGEID_3, + new Object[] {servConn.getName(), servConn.getModRegion(), servConn.getModKey(), Integer.valueOf(transId)})); + } + else { + logger.debug("EOF exception", eof); + logger.info(LocalizedMessage.create( + LocalizedStrings.BaseCommand_0_CONNECTION_DISCONNECT_DETECTED_BY_EOF, + servConn.getName())); + } + } + } + servConn.setFlagProcessMessagesAsFalse(); + } + + private static void handleInterruptedIOException(Message msg, + ServerConnection servConn, Exception e) { + CachedRegionHelper crHelper = servConn.getCachedRegionHelper(); + if (!crHelper.isShutdown() && servConn.isOpen()) { + if (!suppressIOExceptionLogging) { + if (logger.isDebugEnabled()) + logger.debug("Aborted message due to interrupt: {}", e.getMessage(), e); + } + } + servConn.setFlagProcessMessagesAsFalse(); + } + + private static void handleIOException(Message msg, ServerConnection servConn, + Exception e) { + CachedRegionHelper crHelper = servConn.getCachedRegionHelper(); + boolean potentialModification = servConn.getPotentialModification(); + + if (!crHelper.isShutdown() && servConn.isOpen()) { + if (!suppressIOExceptionLogging) { + if (potentialModification) { + int transId = (msg != null) ? msg.getTransactionId() + : Integer.MIN_VALUE; + logger.warn(LocalizedMessage.create( + LocalizedStrings.BaseCommand_0_UNEXPECTED_IOEXCEPTION_DURING_OPERATION_FOR_REGION_1_KEY_2_MESSID_3, + new Object[] {servConn.getName(), servConn.getModRegion(), servConn.getModKey(), Integer.valueOf(transId)}), e); + } + else { + logger.warn(LocalizedMessage.create( + LocalizedStrings.BaseCommand_0_UNEXPECTED_IOEXCEPTION, + servConn.getName()), e); + } + } + } + servConn.setFlagProcessMessagesAsFalse(); + } + + private static void handleShutdownException(Message msg, + ServerConnection servConn, Exception e) { + CachedRegionHelper crHelper = servConn.getCachedRegionHelper(); + boolean potentialModification = servConn.getPotentialModification(); + + if (!crHelper.isShutdown()) { + if (potentialModification) { + int transId = (msg != null) ? msg.getTransactionId() + : Integer.MIN_VALUE; + logger.warn(LocalizedMessage.create( + LocalizedStrings.BaseCommand_0_UNEXPECTED_SHUTDOWNEXCEPTION_DURING_OPERATION_ON_REGION_1_KEY_2_MESSAGEID_3, + new Object[] {servConn.getName(), servConn.getModRegion(), servConn.getModKey(), Integer.valueOf(transId)}), e); + } + else { + logger.warn(LocalizedMessage.create( + LocalizedStrings.BaseCommand_0_UNEXPECTED_SHUTDOWNEXCEPTION, + servConn.getName()),e); + } + } + servConn.setFlagProcessMessagesAsFalse(); + } + + // Handle GemfireSecurityExceptions separately since the connection should not + // be terminated (by setting processMessages to false) unlike in + // handleThrowable. Fixes bugs #38384 and #39392. +// private static void handleGemfireSecurityException(Message msg, +// ServerConnection servConn, GemFireSecurityException e) { +// +// boolean requiresResponse = servConn.getTransientFlag(REQUIRES_RESPONSE); +// boolean responded = servConn.getTransientFlag(RESPONDED); +// boolean requiresChunkedResponse = servConn +// .getTransientFlag(REQUIRES_CHUNKED_RESPONSE); +// boolean potentialModification = servConn.getPotentialModification(); +// +// try { +// try { +// if (requiresResponse && !responded) { +// if (requiresChunkedResponse) { +// writeChunkedException(msg, e, false, servConn); +// } +// else { +// writeException(msg, e, false, servConn); +// } +// servConn.setAsTrue(RESPONDED); +// } +// } +// finally { // inner try-finally to ensure proper ordering of logging +// if (potentialModification) { +// int transId = (msg != null) ? msg.getTransactionId() +// : Integer.MIN_VALUE; +// } +// } +// } +// catch (IOException ioe) { +// if (logger.isDebugEnabled()) { +// logger.fine(servConn.getName() +// + ": Unexpected IOException writing security exception: ", ioe); +// } +// } +// } + + private static void handleExceptionNoDisconnect(Message msg, + ServerConnection servConn, Exception e) { + boolean requiresResponse = servConn.getTransientFlag(REQUIRES_RESPONSE); + boolean responded = servConn.getTransientFlag(RESPONDED); + boolean requiresChunkedResponse = servConn + .getTransientFlag(REQUIRES_CHUNKED_RESPONSE); + boolean potentialModification = servConn.getPotentialModification(); + boolean wroteExceptionResponse = false; + + try { + try { + if (requiresResponse && !responded) { + if (requiresChunkedResponse) { + writeChunkedException(msg, e, false, servConn); + } + else { + writeException(msg, e, false, servConn); + } + wroteExceptionResponse = true; + servConn.setAsTrue(RESPONDED); + } + } + finally { // inner try-finally to ensure proper ordering of logging + if (potentialModification) { + int transId = (msg != null) ? msg.getTransactionId() + : Integer.MIN_VALUE; + if (!wroteExceptionResponse) { + logger.warn(LocalizedMessage.create( + LocalizedStrings.BaseCommand_0_UNEXPECTED_EXCEPTION_DURING_OPERATION_ON_REGION_1_KEY_2_MESSAGEID_3, + new Object[] {servConn.getName(),servConn.getModRegion(), servConn.getModKey(), Integer.valueOf(transId)}), e); + } else { + if (logger.isDebugEnabled()) { + logger.debug("{}: Exception during operation on region: {} key: {} messageId: {}", servConn.getName(), + servConn.getModRegion(), servConn.getModKey(), transId, e); + } + } + } + else { + if (!wroteExceptionResponse) { + logger.warn(LocalizedMessage.create( + LocalizedStrings.BaseCommand_0_UNEXPECTED_EXCEPTION, + servConn.getName()), e); + } else { + if (logger.isDebugEnabled()) { + logger.debug("{}: Exception: {}", servConn.getName(), e.getMessage(), e); + } + } + } + } + } + catch (IOException ioe) { + if (logger.isDebugEnabled()) { + logger.debug("{}: Unexpected IOException writing exception: {}", servConn.getName(), ioe.getMessage(), ioe); + } + } + } + + private static void handleThrowable(Message msg, ServerConnection servConn, + Throwable th) { + boolean requiresResponse = servConn.getTransientFlag(REQUIRES_RESPONSE); + boolean responded = servConn.getTransientFlag(RESPONDED); + boolean requiresChunkedResponse = servConn + .getTransientFlag(REQUIRES_CHUNKED_RESPONSE); + boolean potentialModification = servConn.getPotentialModification(); + + try { + try { + if (th instanceof Error) { + logger.fatal(LocalizedMessage.create(LocalizedStrings.BaseCommand_0_UNEXPECTED_ERROR_ON_SERVER, + servConn.getName()), th); + } + if (requiresResponse && !responded) { + if (requiresChunkedResponse) { + writeChunkedException(msg, th, false, servConn); + } + else { + writeException(msg, th, false, servConn); + } + servConn.setAsTrue(RESPONDED); + } + } + finally { // inner try-finally to ensure proper ordering of logging + if (th instanceof Error) { + // log nothing + } else if (th instanceof CancelException) { + // log nothing + } else { + if (potentialModification) { + int transId = (msg != null) ? msg.getTransactionId() + : Integer.MIN_VALUE; + logger.warn(LocalizedMessage.create( + LocalizedStrings.BaseCommand_0_UNEXPECTED_EXCEPTION_DURING_OPERATION_ON_REGION_1_KEY_2_MESSAGEID_3, + new Object[] {servConn.getName(),servConn.getModRegion(), servConn.getModKey(), Integer.valueOf(transId)}), th); + } + else { + logger.warn(LocalizedMessage.create( + LocalizedStrings.BaseCommand_0_UNEXPECTED_EXCEPTION, + servConn.getName()), th); + } + } + } + } catch (IOException ioe) { + if (logger.isDebugEnabled()) { + logger.debug("{}: Unexpected IOException writing exception: {}", servConn.getName(), ioe.getMessage(), ioe); + } + } finally { + servConn.setFlagProcessMessagesAsFalse(); + } + } + + protected static void writeChunkedException(Message origMsg, Throwable e, + boolean isSevere, ServerConnection servConn) throws IOException { + writeChunkedException(origMsg, e, isSevere, servConn, servConn.getChunkedResponseMessage()); + } + + protected static void writeChunkedException(Message origMsg, Throwable e, + boolean isSevere, ServerConnection servConn, ChunkedMessage originalReponse) throws IOException { + writeChunkedException(origMsg, e, isSevere, servConn, originalReponse, 2); + } + + protected static void writeChunkedException(Message origMsg, Throwable e, + boolean isSevere, ServerConnection servConn, ChunkedMessage originalReponse, int numOfParts) throws IOException { + ChunkedMessage chunkedResponseMsg = servConn.getChunkedResponseMessage(); + chunkedResponseMsg.setServerConnection(servConn); + if (originalReponse.headerHasBeenSent()) { + //chunkedResponseMsg = originalReponse; + // fix for bug 35442 + chunkedResponseMsg.setNumberOfParts(numOfParts); + chunkedResponseMsg.setLastChunkAndNumParts(true, numOfParts); + chunkedResponseMsg.addObjPart(e); + if (numOfParts == 2) { + chunkedResponseMsg.addStringPart(getExceptionTrace(e)); + } + if (logger.isDebugEnabled()) { + logger.debug("{}: Sending exception chunk while reply in progress: {}", servConn.getName(), e.getMessage(), e); + } + } + else { + chunkedResponseMsg.setMessageType(MessageType.EXCEPTION); + chunkedResponseMsg.setNumberOfParts(numOfParts); + chunkedResponseMsg.setLastChunkAndNumParts(true, numOfParts); + chunkedResponseMsg.setTransactionId(origMsg.getTransactionId()); + chunkedResponseMsg.sendHeader(); + chunkedResponseMsg.addObjPart(e); + if (numOfParts == 2) { + chunkedResponseMsg.addStringPart(getExceptionTrace(e)); + } + if (logger.isDebugEnabled()) { + logger.debug("{}: Sending exception chunk: {}", servConn.getName(), e.getMessage(), e); + } + } + chunkedResponseMsg.sendChunk(servConn); + } + + // Get the exception stacktrace for native clients + public static String getExceptionTrace(Throwable ex) { + StringWriter sw = new StringWriter(); + PrintWriter pw = new PrintWriter(sw); + ex.printStackTrace(pw); + pw.close(); + return sw.toString(); + } + + protected static void writeException(Message origMsg, Throwable e, + boolean isSevere, ServerConnection servConn) throws IOException { + writeException(origMsg, MessageType.EXCEPTION, e, isSevere, servConn); + } + + protected static void writeException(Message origMsg, int msgType, Throwable e, + boolean isSevere, ServerConnection servConn) throws IOException { + Message errorMsg = servConn.getErrorResponseMessage(); + errorMsg.setMessageType(msgType); + errorMsg.setNumberOfParts(2); + errorMsg.setTransactionId(origMsg.getTransactionId()); + if (isSevere) { + String msg = e.getMessage(); + if (msg == null) { + msg = e.toString(); + } + logger.fatal(LocalizedMessage.create(LocalizedStrings.BaseCommand_SEVERE_CACHE_EXCEPTION_0, msg)); + } + errorMsg.addObjPart(e); + errorMsg.addStringPart(getExceptionTrace(e)); + errorMsg.send(servConn); + if (logger.isDebugEnabled()) { + logger.debug("{}: Wrote exception: {}", servConn.getName(), e.getMessage(), e); + } + } + + protected static void writeErrorResponse(Message origMsg, int messageType, + ServerConnection servConn) throws IOException { + Message errorMsg = servConn.getErrorResponseMessage(); + errorMsg.setMessageType(messageType); + errorMsg.setNumberOfParts(1); + errorMsg.setTransactionId(origMsg.getTransactionId()); + errorMsg + .addStringPart(LocalizedStrings.BaseCommand_INVALID_DATA_RECEIVED_PLEASE_SEE_THE_CACHE_SERVER_LOG_FILE_FOR_ADDITIONAL_DETAILS.toLocalizedString()); + errorMsg.send(servConn); + } + + protected static void writeErrorResponse(Message origMsg, int messageType, + String msg, ServerConnection servConn) throws IOException { + Message errorMsg = servConn.getErrorResponseMessage(); + errorMsg.setMessageType(messageType); + errorMsg.setNumberOfParts(1); + errorMsg.setTransactionId(origMsg.getTransactionId()); + errorMsg.addStringPart(msg); + errorMsg.send(servConn); + } + + protected static void writeRegionDestroyedEx(Message msg, String regionName, + String title, ServerConnection servConn) throws IOException { + String reason = servConn.getName() + ": Region named " + regionName + title; + RegionDestroyedException ex = new RegionDestroyedException(reason, + regionName); + if (servConn.getTransientFlag(REQUIRES_CHUNKED_RESPONSE)) { + writeChunkedException(msg, ex, false, servConn); + } + else { + writeException(msg, ex, false, servConn); + } + } + + protected static void writeResponse(Object data, Object callbackArg, + Message origMsg, boolean isObject, ServerConnection servConn) + throws IOException { + Message responseMsg = servConn.getResponseMessage(); + responseMsg.setMessageType(MessageType.RESPONSE); + responseMsg.setTransactionId(origMsg.getTransactionId()); + + + if (callbackArg == null) { + responseMsg.setNumberOfParts(1); + } + else { + responseMsg.setNumberOfParts(2); + } + if (data instanceof byte[]) { + responseMsg.addRawPart((byte[])data, isObject); + } + else { + Assert.assertTrue(isObject, + "isObject should be true when value is not a byte[]"); + responseMsg.addObjPart(data, zipValues); + } + if (callbackArg != null) { + responseMsg.addObjPart(callbackArg); + } + servConn.getCache().getCancelCriterion().checkCancelInProgress(null); + responseMsg.send(servConn); + origMsg.clearParts(); + } + + protected static void writeResponseWithRefreshMetadata(Object data, + Object callbackArg, Message origMsg, boolean isObject, + ServerConnection servConn, PartitionedRegion pr, byte nwHop) throws IOException { + Message responseMsg = servConn.getResponseMessage(); + responseMsg.setMessageType(MessageType.RESPONSE); + responseMsg.setTransactionId(origMsg.getTransactionId()); + + if (callbackArg == null) { + responseMsg.setNumberOfParts(2); + } + else { + responseMsg.setNumberOfParts(3); + } + + if (data instanceof byte[]) { + responseMsg.addRawPart((byte[])data, isObject); + } + else { + Assert.assertTrue(isObject, + "isObject should be true when value is not a byte[]"); + responseMsg.addObjPart(data, zipValues); + } + if (callbackArg != null) { + responseMsg.addObjPart(callbackArg); + } + responseMsg.addBytesPart(new byte[]{pr.getMetadataVersion().byteValue(),nwHop}); + servConn.getCache().getCancelCriterion().checkCancelInProgress(null); + responseMsg.send(servConn); + origMsg.clearParts(); + } + + protected static void writeResponseWithFunctionAttribute(byte[] data, + Message origMsg, ServerConnection servConn) throws IOException { + Message responseMsg = servConn.getResponseMessage(); + responseMsg.setMessageType(MessageType.RESPONSE); + responseMsg.setTransactionId(origMsg.getTransactionId()); + responseMsg.setNumberOfParts(1); + responseMsg.addBytesPart(data); + servConn.getCache().getCancelCriterion().checkCancelInProgress(null); + responseMsg.send(servConn); + origMsg.clearParts(); + } + + static protected void checkForInterrupt(ServerConnection servConn, Exception e) + throws InterruptedException, InterruptedIOException { + servConn.getCachedRegionHelper().checkCancelInProgress(e); + if (e instanceof InterruptedException) { + throw (InterruptedException)e; + } + if (e instanceof InterruptedIOException) { + throw (InterruptedIOException)e; + } + } + + protected static void writeQueryResponseChunk(Object queryResponseChunk, + CollectionType collectionType, boolean lastChunk, + ServerConnection servConn) throws IOException { + ChunkedMessage queryResponseMsg = servConn.getQueryResponseMessage(); + queryResponseMsg.setNumberOfParts(2); + queryResponseMsg.setLastChunk(lastChunk); + queryResponseMsg.addObjPart(collectionType, zipValues); + queryResponseMsg.addObjPart(queryResponseChunk, zipValues); + queryResponseMsg.sendChunk(servConn); + } + + protected static void writeQueryResponseException(Message origMsg, + Throwable e, boolean isSevere, ServerConnection servConn) + throws IOException { + ChunkedMessage queryResponseMsg = servConn.getQueryResponseMessage(); + ChunkedMessage chunkedResponseMsg = servConn.getChunkedResponseMessage(); + if (queryResponseMsg.headerHasBeenSent()) { + // fix for bug 35442 + // This client is expecting 2 parts in this message so send 2 parts + queryResponseMsg.setServerConnection(servConn); + queryResponseMsg.setNumberOfParts(2); + queryResponseMsg.setLastChunkAndNumParts(true, 2); + queryResponseMsg.addObjPart(e); + queryResponseMsg.addStringPart(getExceptionTrace(e)); + if (logger.isDebugEnabled()) { + logger.debug("{}: Sending exception chunk while reply in progress: {}", servConn.getName(), e.getMessage(), e); + } + queryResponseMsg.sendChunk(servConn); + } + else { + chunkedResponseMsg.setServerConnection(servConn); + chunkedResponseMsg.setMessageType(MessageType.EXCEPTION); + chunkedResponseMsg.setNumberOfParts(2); + chunkedResponseMsg.setLastChunkAndNumParts(true, 2); + chunkedResponseMsg.setTransactionId(origMsg.getTransactionId()); + chunkedResponseMsg.sendHeader(); + chunkedResponseMsg.addObjPart(e); + chunkedResponseMsg.addStringPart(getExceptionTrace(e)); + if (logger.isDebugEnabled()) { + logger.debug("{}: Sending exception chunk: {}", servConn.getName(), e.getMessage(), e); + } + chunkedResponseMsg.sendChunk(servConn); + } + } + + protected static void writeChunkedErrorResponse(Message origMsg, + int messageType, String message, ServerConnection servConn) + throws IOException { + // Send chunked response header identifying error message + ChunkedMessage chunkedResponseMsg = servConn.getChunkedResponseMessage(); + if (logger.isDebugEnabled()) { + logger.debug(servConn.getName() + ": Sending error message header type: " + + messageType + " transaction: " + origMsg.getTransactionId()); + } + chunkedResponseMsg.setMessageType(messageType); + chunkedResponseMsg.setTransactionId(origMsg.getTransactionId()); + chunkedResponseMsg.sendHeader(); + + // Send actual error + if (logger.isDebugEnabled()) { + logger.debug("{}: Sending error message chunk: {}", servConn.getName(), message); + } + chunkedResponseMsg.setNumberOfParts(1); + chunkedResponseMsg.setLastChunk(true); + chunkedResponseMsg.addStringPart(message); + chunkedResponseMsg.sendChunk(servConn); + } + + protected static void writeFunctionResponseException(Message origMsg, + int messageType, String message, ServerConnection servConn, Throwable e) + throws IOException { + ChunkedMessage functionResponseMsg = servConn.getFunctionResponseMessage(); + ChunkedMessage chunkedResponseMsg = servConn.getChunkedResponseMessage(); + if (functionResponseMsg.headerHasBeenSent()) { + functionResponseMsg.setServerConnection(servConn); + functionResponseMsg.setNumberOfParts(2); + functionResponseMsg.setLastChunkAndNumParts(true,2); + functionResponseMsg.addObjPart(e); + functionResponseMsg.addStringPart(getExceptionTrace(e)); + if (logger.isDebugEnabled()) { + logger.debug("{}: Sending exception chunk while reply in progress: {}", servConn.getName(), e.getMessage(), e); + } + functionResponseMsg.sendChunk(servConn); + } + else { + chunkedResponseMsg.setServerConnection(servConn); + chunkedResponseMsg.setMessageType(messageType); + chunkedResponseMsg.setNumberOfParts(2); + chunkedResponseMsg.setLastChunkAndNumParts(true,2); + chunkedResponseMsg.setTransactionId(origMsg.getTransactionId()); + chunkedResponseMsg.sendHeader(); + chunkedResponseMsg.addObjPart(e); + chunkedResponseMsg.addStringPart(getExceptionTrace(e)); + if (logger.isDebugEnabled()) { + logger.debug("{}: Sending exception chunk: {}", servConn.getName(), e.getMessage(), e); + } + chunkedResponseMsg.sendChunk(servConn); + } + } + + protected static void writeFunctionResponseError(Message origMsg, + int messageType, String message, ServerConnection servConn) + throws IOException { + ChunkedMessage functionResponseMsg = servConn.getFunctionResponseMessage(); + ChunkedMessage chunkedResponseMsg = servConn.getChunkedResponseMessage(); + if (functionResponseMsg.headerHasBeenSent()) { + functionResponseMsg.setNumberOfParts(1); + functionResponseMsg.setLastChunk(true); + functionResponseMsg.addStringPart(message); + if (logger.isDebugEnabled()) { + logger.debug("{}: Sending Error chunk while reply in progress: {}", servConn.getName(), message); + } + functionResponseMsg.sendChunk(servConn); + } + else { + chunkedResponseMsg.setMessageType(messageType); + chunkedResponseMsg.setNumberOfParts(1); + chunkedResponseMsg.setLastChunk(true); + chunkedResponseMsg.setTransactionId(origMsg.getTransactionId()); + chunkedResponseMsg.sendHeader(); + chunkedResponseMsg.addStringPart(message); + if (logger.isDebugEnabled()) { + logger.debug("{}: Sending Error chunk: {}", servConn.getName(), message); + } + chunkedResponseMsg.sendChunk(servConn); + } + } + + protected static void writeKeySetErrorResponse(Message origMsg, + int messageType, String message, ServerConnection servConn) + throws IOException { + // Send chunked response header identifying error message + ChunkedMessage chunkedResponseMsg = servConn.getKeySetResponseMessage(); + if (logger.isDebugEnabled()) { + logger.debug("{}: Sending error message header type: {} transaction: {}", + servConn.getName(), messageType, origMsg.getTransactionId()); + } + chunkedResponseMsg.setMessageType(messageType); + chunkedResponseMsg.setTransactionId(origMsg.getTransactionId()); + chunkedResponseMsg.sendHeader(); + // Send actual error + if (logger.isDebugEnabled()) { + logger.debug("{}: Sending error message chunk: {}", servConn.getName(), message); + } + chunkedResponseMsg.setNumberOfParts(1); + chunkedResponseMsg.setLastChunk(true); + chunkedResponseMsg.addStringPart(message); + chunkedResponseMsg.sendChunk(servConn); + } + + static Message readRequest(ServerConnection servConn) { + Message requestMsg = null; + try { + requestMsg = servConn.getRequestMessage(); + requestMsg.recv(servConn, MAX_INCOMING_DATA, incomingDataLimiter, + incomingMsgLimiter); + return requestMsg; + } + catch (EOFException eof) { + handleEOFException(null, servConn, eof); + // TODO:Asif: Check if there is any need for explicitly returning + + } + catch (InterruptedIOException e) { // Solaris only + handleInterruptedIOException(null, servConn, e); + + } + catch (IOException e) { + handleIOException(null, servConn, e); + + } + catch (DistributedSystemDisconnectedException e) { + handleShutdownException(null, servConn, e); + + } + catch (VirtualMachineError err) { + SystemFailure.initiateFailure(err); + // If this ever returns, rethrow the error. We're poisoned + // now, so don't let this thread continue. + throw err; + } + catch (Throwable e) { + SystemFailure.checkFailure(); + handleThrowable(null, servConn, e); + } + return requestMsg; + } + + protected static void fillAndSendRegisterInterestResponseChunks( + LocalRegion region, Object riKey, int interestType, + InterestResultPolicy policy, ServerConnection servConn) + throws IOException { + fillAndSendRegisterInterestResponseChunks(region, riKey, interestType, + false, policy, servConn); + } + + /* + * serializeValues is unused for clients < GFE_80 + */ + protected static void fillAndSendRegisterInterestResponseChunks( + LocalRegion region, Object riKey, int interestType, boolean serializeValues, + InterestResultPolicy policy, ServerConnection servConn) + throws IOException { + // Client is not interested. + if (policy.isNone()) { + sendRegisterInterestResponseChunk(region, riKey, new ArrayList(), true, + servConn); + return; + } + if (policy.isKeysValues() + && servConn.getClientVersion().compareTo(Version.GFE_80) >= 0) { + handleKeysValuesPolicy(region, riKey, interestType, serializeValues, servConn); + return; + } + if (riKey instanceof List) { + handleList(region, (List)riKey, policy, servConn); + return; + } + if (!(riKey instanceof String)) { + handleSingleton(region, riKey, policy, servConn); + return; + } + + switch (interestType) { + case InterestType.OQL_QUERY: + // Not supported yet + throw new InternalGemFireError(LocalizedStrings.BaseCommand_NOT_YET_SUPPORTED.toLocalizedString()); + case InterestType.FILTER_CLASS: + throw new InternalGemFireError(LocalizedStrings.BaseCommand_NOT_YET_SUPPORTED.toLocalizedString()); + // handleFilter(region, (String)riKey, policy); + // break; + case InterestType.REGULAR_EXPRESSION: { + String regEx = (String)riKey; + if (regEx.equals(".*")) { + handleAllKeys(region, policy, servConn); + } + else { + handleRegEx(region, regEx, policy, servConn); + } + } + break; + case InterestType.KEY: + if (riKey.equals("ALL_KEYS")) { + handleAllKeys(region, policy, servConn); + } + else { + handleSingleton(region, riKey, policy, servConn); + } + break; + default: + throw new InternalGemFireError(LocalizedStrings.BaseCommand_UNKNOWN_INTEREST_TYPE.toLocalizedString()); + } + } + + @SuppressWarnings("rawtypes") + private static void handleKeysValuesPolicy(LocalRegion region, Object riKey, + int interestType, boolean serializeValues, ServerConnection servConn) + throws IOException { + if (riKey instanceof List) { + handleKVList(region, (List)riKey, serializeValues, servConn); + return; + } + if (!(riKey instanceof String)) { + handleKVSingleton(region, riKey, serializeValues, servConn); + return; + } + + switch (interestType) { + case InterestType.OQL_QUERY: + throw new InternalGemFireError(LocalizedStrings.BaseCommand_NOT_YET_SUPPORTED.toLocalizedString()); + case InterestType.FILTER_CLASS: + throw new InternalGemFireError(LocalizedStrings.BaseCommand_NOT_YET_SUPPORTED.toLocalizedString()); + case InterestType.REGULAR_EXPRESSION: + String regEx = (String)riKey; + if (regEx.equals(".*")) { + handleKVAllKeys(region, null, serializeValues, servConn); + } else { + handleKVAllKeys(region, regEx, serializeValues, servConn); + } + break; + case InterestType.KEY: + if (riKey.equals("ALL_KEYS")) { + handleKVAllKeys(region, null, serializeValues, servConn); + } else { + handleKVSingleton(region, riKey, serializeValues, servConn); + } + break; + default: + throw new InternalGemFireError(LocalizedStrings.BaseCommand_UNKNOWN_INTEREST_TYPE.toLocalizedString()); + } + } + + /** + * @param list + * is a List of entry keys + */ + protected static void sendRegisterInterestResponseChunk(Region region, + Object riKey, ArrayList list, boolean lastChunk, ServerConnection servConn) + throws IOException { + ChunkedMessage chunkedResponseMsg = servConn.getRegisterInterestResponseMessage(); + chunkedResponseMsg.setNumberOfParts(1); + chunkedResponseMsg.setLastChunk(lastChunk); + chunkedResponseMsg.addObjPart(list, zipValues); + String regionName = (region == null) ? " null " : region.getFullPath(); + if (logger.isDebugEnabled()) { + String str = servConn.getName() + ": Sending" + + (lastChunk ? " last " : " ") + + "register interest response chunk for region: " + regionName + + " for keys: " + riKey + " chunk=<" + chunkedResponseMsg + ">"; + logger.debug(str); + } + + chunkedResponseMsg.sendChunk(servConn); + } + + /** + * Determines whether keys for destroyed entries (tombstones) should be sent + * to clients in register-interest results. + * + * @param servConn + * @param policy + * @return true if tombstones should be sent to the client + */ + private static boolean sendTombstonesInRIResults(ServerConnection servConn, InterestResultPolicy policy) { + return (policy == InterestResultPolicy.KEYS_VALUES) + && (servConn.getClientVersion().compareTo(Version.GFE_80) >= 0); + } + + /** + * Process an interest request involving a list of keys + * + * @param region + * the region + * @param keyList + * the list of keys + * @param policy + * the policy + * @throws IOException + */ + private static void handleList(LocalRegion region, List keyList, + InterestResultPolicy policy, ServerConnection servConn) + throws IOException { + if (region instanceof PartitionedRegion) { + // too bad java doesn't provide another way to do this... + handleListPR((PartitionedRegion)region, keyList, policy, servConn); + return; + } + ArrayList newKeyList = new ArrayList(maximumChunkSize); + // Handle list of keys + if (region != null) { + for (Iterator it = keyList.iterator(); it.hasNext();) { + Object entryKey = it.next(); + if (region.containsKey(entryKey) + || (sendTombstonesInRIResults(servConn, policy) && region.containsTombstone(entryKey))) { + + appendInterestResponseKey(region, keyList, entryKey, newKeyList, + "list", servConn); + } + } + } + // Send the last chunk (the only chunk for individual and list keys) + // always send it back, even if the list is of zero size. + sendRegisterInterestResponseChunk(region, keyList, newKeyList, true, + servConn); + } + + /** + * Handles both RR and PR cases + */ + @SuppressWarnings("rawtypes") + @edu.umd.cs.findbugs.annotations.SuppressWarnings(value="NP_NULL_PARAM_DEREF", justification="Null value handled in sendNewRegisterInterestResponseChunk()") + private static void handleKVSingleton(LocalRegion region, Object entryKey, + boolean serializeValues, ServerConnection servConn) + throws IOException { + VersionedObjectList values = new VersionedObjectList(maximumChunkSize, + true, region == null ? true : region.getAttributes() + .getConcurrencyChecksEnabled(), serializeValues); + + if (region != null) { + if (region.containsKey(entryKey) || region.containsTombstone(entryKey)) { + EntryEventImpl versionHolder = EntryEventImpl.createVersionTagHolder(); + ClientProxyMembershipID id = servConn == null ? null : servConn.getProxyID(); + // From Get70.getValueAndIsObject() + Object data = region.get(entryKey, null, true, true, true, id, versionHolder, true, false); + VersionTag vt = versionHolder.getVersionTag(); + + updateValues(values, entryKey, data, vt); + } + } + // Send the last chunk (the only chunk for individual and list keys) + // always send it back, even if the list is of zero size. + sendNewRegisterInterestResponseChunk(region, entryKey, values, true, servConn); + } + + /** + * Process an interest request consisting of a single key + * + * @param region + * the region + * @param entryKey + * the key + * @param policy + * the policy + * @throws IOException + */ + private static void handleSingleton(LocalRegion region, Object entryKey, + InterestResultPolicy policy, ServerConnection servConn) + throws IOException { + ArrayList keyList = new ArrayList(1); + if (region != null) { + if (region.containsKey(entryKey) || + (sendTombstonesInRIResults(servConn, policy) && region.containsTombstone(entryKey))) { + appendInterestResponseKey(region, entryKey, entryKey, keyList, + "individual", servConn); + } + } + // Send the last chunk (the only chunk for individual and list keys) + // always send it back, even if the list is of zero size. + sendRegisterInterestResponseChunk(region, entryKey, keyList, true, servConn); + } + + /** + * Process an interest request of type ALL_KEYS + * + * @param region + * the region + * @param policy + * the policy + * @throws IOException + */ + private static void handleAllKeys(LocalRegion region, + InterestResultPolicy policy, ServerConnection servConn) + throws IOException { + ArrayList keyList = new ArrayList(maximumChunkSize); + if (region != null) { + for (Iterator it = region.keySet(sendTombstonesInRIResults(servConn, policy)).iterator(); it.hasNext();) { + appendInterestResponseKey(region, "ALL_KEYS", it.next(), keyList, + "ALL_KEYS", servConn); + } + } + // Send the last chunk (the only chunk for individual and list keys) + // always send it back, even if the list is of zero size. + sendRegisterInterestResponseChunk(region, "ALL_KEYS", keyList, true, + servConn); + } + + /** + * @param region + * @param regex + * @param serializeValues + * @param servConn + * @throws IOException + */ + private static void handleKVAllKeys(LocalRegion region, String regex, + boolean serializeValues, ServerConnection servConn) throws IOException { + + if (region != null && region instanceof PartitionedRegion) { + handleKVKeysPR((PartitionedRegion) region, regex, serializeValues, servConn); + return; + } + + VersionedObjectList values = new VersionedObjectList(maximumChunkSize, + true, region == null ? true : region.getAttributes() + .getConcurrencyChecksEnabled(), serializeValues); + + if (region != null) { + + VersionTag versionTag = null; + Object data = null; + + Pattern keyPattern = null; + if (regex != null) { + keyPattern = Pattern.compile(regex); + } + + for (Object key : region.keySet(true)) { + EntryEventImpl versionHolder = EntryEventImpl.createVersionTagHolder(); + if (keyPattern != null) { + if (!(key instanceof String)) { + // key is not a String, cannot apply regex to this entry + continue; + } + if (!keyPattern.matcher((String) key).matches()) { + // key does not match the regex, this entry should not be + // returned. + continue; + } + } + + ClientProxyMembershipID id = servConn == null ? null : servConn.getProxyID(); + data = region.get(key, null, true, true, true, id, versionHolder, true, false); + versionTag = versionHolder.getVersionTag(); + updateValues(values, key, data, versionTag); + + if (values.size() == maximumChunkSize) { + sendNewRegisterInterestResponseChunk(region, regex != null ? regex : "ALL_KEYS", values, false, servConn); + values.clear(); + } + } // for + } // if + + // Send the last chunk (the only chunk for individual and list keys) + // always send it back, even if the list is of zero size. + sendNewRegisterInterestResponseChunk(region, regex != null ? regex : "ALL_KEYS", values, true, servConn); + } + + private static void handleKVKeysPR(PartitionedRegion region, Object keyInfo, + boolean serializeValues, ServerConnection servConn) throws IOException { + int id = 0; + HashMap bucketKeys = null; + + VersionedObjectList values = new VersionedObjectList(maximumChunkSize, + true, region.getConcurrencyChecksEnabled(), serializeValues); + + if (keyInfo != null && keyInfo instanceof List) { + bucketKeys = new HashMap(); + for (Object key : (List) keyInfo) { + id = PartitionedRegionHelper.getHashKey(region, null, key, null, null); + if (bucketKeys.containsKey(id)) { + bucketKeys.get(id).add(key); + } else { + HashSet keys = new HashSet(); + keys.add(key); + bucketKeys.put(id, keys); + } + } + region.fetchEntries(bucketKeys, values, servConn); + } else { // keyInfo is a String + region.fetchEntries((String)keyInfo, values, servConn); + } + + // Send the last chunk (the only chunk for individual and list keys) + // always send it back, even if the list is of zero size. + sendNewRegisterInterestResponseChunk(region, keyInfo != null ? keyInfo : "ALL_KEYS", values, true, servConn); + } + + /** + * Copied from Get70.getValueAndIsObject(), except a minor change. (Make the + * method static instead of copying it here?) + * + * @param value + */ + private static void updateValues(VersionedObjectList values, Object key, Object value, VersionTag versionTag) { + boolean isObject = true; + + // If the value in the VM is a CachedDeserializable, + // get its value. If it is Token.REMOVED, Token.DESTROYED, + // Token.INVALID, or Token.LOCAL_INVALID + // set it to null. If it is NOT_AVAILABLE, get the value from + // disk. If it is already a byte[], set isObject to false. + boolean wasInvalid = false; + if (value instanceof CachedDeserializable) { + value = ((CachedDeserializable)value).getValue(); + } + else if (value == Token.REMOVED_PHASE1 || value == Token.REMOVED_PHASE2 || value == Token.DESTROYED || value == Token.TOMBSTONE) { + value = null; + } + else if (value == Token.INVALID || value == Token.LOCAL_INVALID) { + value = null; // fix for bug 35884 + wasInvalid = true; + } + else if (value instanceof byte[]) { + isObject = false; + } + boolean keyNotPresent = !wasInvalid && (value == null || value == Token.TOMBSTONE); + + if (keyNotPresent) { + values.addObjectPartForAbsentKey(key, value, versionTag); + } else { + values.addObjectPart(key, value, isObject, versionTag); + } + } + + public static void appendNewRegisterInterestResponseChunkFromLocal(LocalRegion region, + VersionedObjectList values, Object riKeys, Set keySet, ServerConnection servConn) + throws IOException { + Object key = null; + EntryEventImpl versionHolder = null; + ClientProxyMembershipID requestingClient = servConn == null ? null : servConn.getProxyID(); + for (Iterator it = keySet.iterator(); it.hasNext();) { + key = it.next(); + versionHolder = EntryEventImpl.createVersionTagHolder(); + + Object value = region.get(key, null, true, true, true, requestingClient, versionHolder, true, false); + + updateValues(values, key, value, versionHolder.getVersionTag()); + + if (values.size() == maximumChunkSize) { + // Send the chunk and clear the list + // values.setKeys(null); // Now we need to send keys too. + sendNewRegisterInterestResponseChunk(region, riKeys != null ? riKeys : "ALL_KEYS", values, false, servConn); + values.clear(); + } + } // for + } + + /** + * + * @param region + * @param values {@link VersionedObjectList} + * @param riKeys + * @param set set of entries + * @param servConn + * @throws IOException + */ + public static void appendNewRegisterInterestResponseChunk(LocalRegion region, + VersionedObjectList values, Object riKeys, Set set, ServerConnection servConn) + throws IOException { + for (Iterator it = set.iterator(); it.hasNext();) { + Map.Entry entry = it.next(); // Region.Entry or Map.Entry + if (entry instanceof Region.Entry) { // local entries + VersionTag vt = null; + Object key = null; + Object value = null; + if (entry instanceof EntrySnapshot) { + vt = ((EntrySnapshot) entry).getVersionTag(); + key = ((EntrySnapshot) entry).getRegionEntry().getKey(); + value = ((EntrySnapshot) entry).getRegionEntry().getValue(null); + updateValues(values, key, value, vt); + } else { + VersionStamp vs = ((NonTXEntry)entry).getRegionEntry().getVersionStamp(); + vt = vs == null ? null : vs.asVersionTag(); + key = entry.getKey(); + value = ((NonTXEntry)entry).getRegionEntry()._getValueRetain(region, true); + try { + updateValues(values, key, value, vt); + } finally { + // TODO OFFHEAP: in the future we might want to delay this release + // until the "values" VersionedObjectList is released. + // But for now "updateValues" copies the off-heap value to the heap. + OffHeapHelper.release(value); + } + } + } else { // Map.Entry (remote entries) + ArrayList list = (ArrayList)entry.getValue(); + Object value = list.get(0); + VersionTag tag = (VersionTag)list.get(1); + updateValues(values, entry.getKey(), value, tag); + } + if (values.size() == maximumChunkSize) { + // Send the chunk and clear the list + // values.setKeys(null); // Now we need to send keys too. + sendNewRegisterInterestResponseChunk(region, riKeys != null ? riKeys : "ALL_KEYS", values, false, servConn); + values.clear(); + } + } // for + } + + public static void sendNewRegisterInterestResponseChunk(LocalRegion region, + Object riKey, VersionedObjectList list, boolean lastChunk, ServerConnection servConn) + throws IOException { + ChunkedMessage chunkedResponseMsg = servConn.getRegisterInterestResponseMessage(); + chunkedResponseMsg.setNumberOfParts(1); + chunkedResponseMsg.setLastChunk(lastChunk); + chunkedResponseMsg.addObjPart(list, zipValues); + String regionName = (region == null) ? " null " : region.getFullPath(); + if (logger.isDebugEnabled()) { + String str = servConn.getName() + ": Sending" + + (lastChunk ? " last " : " ") + + "register interest response chunk for region: " + regionName + + " for keys: " + riKey + " chunk=<" + chunkedResponseMsg + ">"; + logger.debug(str); + } + + chunkedResponseMsg.sendChunk(servConn); + } + + /** + * Process an interest request of type {@link InterestType#REGULAR_EXPRESSION} + * + * @param region + * the region + * @param regex + * the regex + * @param policy + * the policy + * @throws IOException + */ + private static void handleRegEx(LocalRegion region, String regex, + InterestResultPolicy policy, ServerConnection servConn) + throws IOException { + if (region instanceof PartitionedRegion) { + // too bad java doesn't provide another way to do this... + handleRegExPR((PartitionedRegion)region, regex, policy, servConn); + return; + } + ArrayList keyList = new ArrayList(maximumChunkSize); + // Handle the regex pattern + Pattern keyPattern = Pattern.compile(regex); + if (region != null) { + for (Iterator it = region.keySet(sendTombstonesInRIResults(servConn, policy)).iterator(); it.hasNext();) { + Object entryKey = it.next(); + if (!(entryKey instanceof String)) { + // key is not a String, cannot apply regex to this entry + continue; + } + if (!keyPattern.matcher((String)entryKey).matches()) { + // key does not match the regex, this entry should not be returned. + continue; + } + + appendInterestResponseKey(region, regex, entryKey, keyList, "regex", + servConn); + } + } + // Send the last chunk (the only chunk for individual and list keys) + // always send it back, even if the list is of zero size. + sendRegisterInterestResponseChunk(region, regex, keyList, true, servConn); + } + + /** + * Process an interest request of type {@link InterestType#REGULAR_EXPRESSION} + * + * @param region + * the region + * @param regex + * the regex + * @param policy + * the policy + * @throws IOException + */ + private static void handleRegExPR(final PartitionedRegion region, + final String regex, final InterestResultPolicy policy, + final ServerConnection servConn) throws IOException { + final ArrayList keyList = new ArrayList(maximumChunkSize); + region.getKeysWithRegEx(regex, sendTombstonesInRIResults(servConn, policy), new PartitionedRegion.SetCollector() { + public void receiveSet(Set theSet) throws IOException { + appendInterestResponseKeys(region, regex, theSet, keyList, "regex", + servConn); + } + }); + // Send the last chunk (the only chunk for individual and list keys) + // always send it back, even if the list is of zero size. + sendRegisterInterestResponseChunk(region, regex, keyList, true, servConn); + } + + /** + * Process an interest request involving a list of keys + * + * @param region + * the region + * @param keyList + * the list of keys + * @param policy + * the policy + * @throws IOException + */ + private static void handleListPR(final PartitionedRegion region, + final List keyList, final InterestResultPolicy policy, + final ServerConnection servConn) throws IOException { + final ArrayList newKeyList = new ArrayList(maximumChunkSize); + region.getKeysWithList(keyList, sendTombstonesInRIResults(servConn, policy), new PartitionedRegion.SetCollector() { + public void receiveSet(Set theSet) throws IOException { + appendInterestResponseKeys(region, keyList, theSet, newKeyList, "list", + servConn); + } + }); + // Send the last chunk (the only chunk for individual and list keys) + // always send it back, even if the list is of zero size. + sendRegisterInterestResponseChunk(region, keyList, newKeyList, true, + servConn); + } + + @SuppressWarnings("rawtypes") + private static void handleKVList(final LocalRegion region, + final List keyList, boolean serializeValues, + final ServerConnection servConn) throws IOException { + + if (region != null && region instanceof PartitionedRegion) { + handleKVKeysPR((PartitionedRegion)region, keyList, serializeValues, servConn); + return; + } + VersionedObjectList values = new VersionedObjectList(maximumChunkSize, + true, region == null ? true : region.getAttributes() + .getConcurrencyChecksEnabled(), serializeValues); + + // Handle list of keys + if (region != null) { + VersionTag versionTag = null; + Object data = null; + + for (Iterator it = keyList.iterator(); it.hasNext();) { + Object key = it.next(); + if (region.containsKey(key) || region.containsTombstone(key)) { + EntryEventImpl versionHolder = EntryEventImpl + .createVersionTagHolder(); + + ClientProxyMembershipID id = servConn == null ? null : servConn + .getProxyID(); + data = region.get(key, null, true, true, true, id, versionHolder, + true, false); + versionTag = versionHolder.getVersionTag(); + updateValues(values, key, data, versionTag); + + if (values.size() == maximumChunkSize) { + // Send the chunk and clear the list + // values.setKeys(null); // Now we need to send keys too. + sendNewRegisterInterestResponseChunk(region, keyList, values, false, servConn); + values.clear(); + } + } + } + } + // Send the last chunk (the only chunk for individual and list keys) + // always send it back, even if the list is of zero size. + sendNewRegisterInterestResponseChunk(region, keyList, values, true, servConn); + } + + /** + * Append an interest response + * + * @param region + * the region (for debugging) + * @param riKey + * the registerInterest "key" (what the client is interested + * in) + * @param entryKey + * key we're responding to + * @param list + * list to append to + * @param kind + * for debugging + */ + private static void appendInterestResponseKey(LocalRegion region, + Object riKey, Object entryKey, ArrayList list, String kind, + ServerConnection servConn) throws IOException { + list.add(entryKey); + if (logger.isDebugEnabled()) { + logger.debug("{}: appendInterestResponseKey <{}>; list size was {}; region: {}", + servConn.getName(), entryKey, list.size(), region.getFullPath()); + } + if (list.size() == maximumChunkSize) { + // Send the chunk and clear the list + sendRegisterInterestResponseChunk(region, riKey, list, false, servConn); + list.clear(); + } + } + + protected static void appendInterestResponseKeys(LocalRegion region, + Object riKey, Collection entryKeys, ArrayList collector, String riDescr, + ServerConnection servConn) throws IOException { + for (Iterator it = entryKeys.iterator(); it.hasNext();) { + appendInterestResponseKey(region, riKey, it.next(), collector, riDescr, + servConn); + } + } +} diff --git a/gemfire-core/src/main/java/com/gemstone/gemfire/internal/cache/tier/sockets/CacheClientProxy.java b/gemfire-core/src/main/java/com/gemstone/gemfire/internal/cache/tier/sockets/CacheClientProxy.java new file mode 100755 index 000000000000..20d22dce3459 --- /dev/null +++ b/gemfire-core/src/main/java/com/gemstone/gemfire/internal/cache/tier/sockets/CacheClientProxy.java @@ -0,0 +1,3111 @@ +/* + * 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 com.gemstone.gemfire.internal.cache.tier.sockets; + +import java.io.ByteArrayInputStream; +import java.io.DataInputStream; +import java.io.IOException; +import java.net.Socket; +import java.net.SocketException; +import java.nio.ByteBuffer; +import java.util.Arrays; +import java.util.Collections; +import java.util.Date; +import java.util.HashMap; +import java.util.HashSet; +import java.util.Iterator; +import java.util.List; +import java.util.Map; +import java.util.Set; +import java.util.concurrent.ConcurrentLinkedQueue; +import java.util.concurrent.atomic.AtomicBoolean; +import java.util.concurrent.atomic.AtomicInteger; +import java.util.concurrent.atomic.AtomicReference; +import java.util.concurrent.locks.Lock; +import java.util.concurrent.locks.ReadWriteLock; +import java.util.concurrent.locks.ReentrantReadWriteLock; +import java.util.regex.Pattern; + +import org.apache.logging.log4j.Logger; + +import com.gemstone.gemfire.CancelException; +import com.gemstone.gemfire.DataSerializer; +import com.gemstone.gemfire.StatisticsFactory; +import com.gemstone.gemfire.cache.Cache; +import com.gemstone.gemfire.cache.CacheClosedException; +import com.gemstone.gemfire.cache.CacheException; +import com.gemstone.gemfire.cache.ClientSession; +import com.gemstone.gemfire.cache.DynamicRegionFactory; +import com.gemstone.gemfire.cache.InterestRegistrationEvent; +import com.gemstone.gemfire.cache.InterestResultPolicy; +import com.gemstone.gemfire.cache.Region; +import com.gemstone.gemfire.cache.RegionDestroyedException; +import com.gemstone.gemfire.cache.RegionExistsException; +import com.gemstone.gemfire.cache.client.internal.RegisterInterestTracker; +import com.gemstone.gemfire.cache.operations.DestroyOperationContext; +import com.gemstone.gemfire.cache.operations.InvalidateOperationContext; +import com.gemstone.gemfire.cache.operations.OperationContext; +import com.gemstone.gemfire.cache.operations.PutOperationContext; +import com.gemstone.gemfire.cache.operations.RegionClearOperationContext; +import com.gemstone.gemfire.cache.operations.RegionCreateOperationContext; +import com.gemstone.gemfire.cache.operations.RegionDestroyOperationContext; +import com.gemstone.gemfire.cache.query.CqException; +import com.gemstone.gemfire.cache.query.CqQuery; +import com.gemstone.gemfire.cache.query.internal.cq.CqService; +import com.gemstone.gemfire.cache.query.internal.cq.InternalCqQuery; +import com.gemstone.gemfire.distributed.DistributedMember; +import com.gemstone.gemfire.distributed.internal.DistributionManager; +import com.gemstone.gemfire.distributed.internal.InternalDistributedSystem; +import com.gemstone.gemfire.internal.SystemTimer; +import com.gemstone.gemfire.internal.SystemTimer.SystemTimerTask; +import com.gemstone.gemfire.internal.Version; +import com.gemstone.gemfire.internal.cache.ClientServerObserver; +import com.gemstone.gemfire.internal.cache.ClientServerObserverHolder; +import com.gemstone.gemfire.internal.cache.CacheDistributionAdvisee; +import com.gemstone.gemfire.internal.cache.CacheDistributionAdvisor.InitialImageAdvice; +import com.gemstone.gemfire.internal.cache.Conflatable; +import com.gemstone.gemfire.internal.cache.DistributedRegion; +import com.gemstone.gemfire.internal.cache.EnumListenerEvent; +import com.gemstone.gemfire.internal.cache.EventID; +import com.gemstone.gemfire.internal.cache.FilterProfile; +import com.gemstone.gemfire.internal.cache.GemFireCacheImpl; +import com.gemstone.gemfire.internal.cache.InterestRegistrationEventImpl; +import com.gemstone.gemfire.internal.cache.LocalRegion; +import com.gemstone.gemfire.internal.cache.PartitionedRegion; +import com.gemstone.gemfire.internal.cache.StateFlushOperation; +import com.gemstone.gemfire.internal.cache.ha.HAContainerWrapper; +import com.gemstone.gemfire.internal.cache.ha.HARegionQueue; +import com.gemstone.gemfire.internal.cache.ha.HARegionQueueAttributes; +import com.gemstone.gemfire.internal.cache.ha.HARegionQueueStats; +import com.gemstone.gemfire.internal.cache.tier.InterestType; +import com.gemstone.gemfire.internal.cache.tier.sockets.ClientUpdateMessageImpl.CqNameToOp; +import com.gemstone.gemfire.internal.cache.tier.sockets.command.Get70; +import com.gemstone.gemfire.internal.cache.versions.VersionTag; +import com.gemstone.gemfire.internal.i18n.LocalizedStrings; +import com.gemstone.gemfire.internal.logging.LogService; +import com.gemstone.gemfire.internal.logging.LoggingThreadGroup; +import com.gemstone.gemfire.internal.logging.log4j.LocalizedMessage; +import com.gemstone.gemfire.internal.logging.log4j.LogMarker; +import com.gemstone.gemfire.internal.security.AuthorizeRequestPP; +import com.gemstone.gemfire.security.AccessControl; +import com.gemstone.gemfire.i18n.StringId; + +/** + * Class CacheClientProxy represents the server side of the + * {@link CacheClientUpdater}. It queues messages to be sent from the server to + * the client. It then reads those messages from the queue and sends them to the + * client. + * + * + * @since 4.2 + */ +@SuppressWarnings("synthetic-access") +public class CacheClientProxy implements ClientSession { + private static final Logger logger = LogService.getLogger(); + + /** + * The socket between the server and the client + */ + protected Socket _socket; + + private final AtomicBoolean _socketClosed = new AtomicBoolean(); + + /** + * A communication buffer used by each message we send to the client + */ + protected ByteBuffer _commBuffer; + + /** + * The remote host's IP address string (cached for convenience) + */ + protected String _remoteHostAddress; + + /** + * Concurrency: protected by synchronization of {@link #isMarkedForRemovalLock} + */ + protected boolean isMarkedForRemoval = false; + + /** + * @see #isMarkedForRemoval + */ + protected final Object isMarkedForRemovalLock = new Object(); + + /** + * The proxy id of the client represented by this proxy + */ + protected ClientProxyMembershipID proxyID; + + /** + * The GemFire cache + */ + protected final GemFireCacheImpl _cache; + + /** + * The list of keys that the client represented by this proxy is interested in + * (stored by region) + */ + protected final ClientInterestList[] cils = new ClientInterestList[2]; + + /** + * A thread that dispatches messages to the client + */ + protected volatile MessageDispatcher _messageDispatcher; + + /** + * The statistics for this proxy + */ + protected final CacheClientProxyStats _statistics; + + protected final AtomicReference _durableExpirationTask = new AtomicReference(); + + protected SystemTimer durableTimer; + + /** + * Whether this dispatcher is paused + */ + protected volatile boolean _isPaused = true; + + /** + * True if we are connected to a client. + */ + private volatile boolean connected = false; +// /** +// * A string representing interest in all keys +// */ +// protected static final String ALL_KEYS = "ALL_KEYS"; +// + /** + * True if a marker message is still in the ha queue. + */ + private boolean markerEnqueued = false; + + /** + * The number of times to peek on shutdown before giving up and shutting down + */ + protected static final int MAXIMUM_SHUTDOWN_PEEKS = Integer.getInteger("gemfire.MAXIMUM_SHUTDOWN_PEEKS",50).intValue(); + + /** + * The number of milliseconds to wait for an offering to the message queue + */ + protected static final int MESSAGE_OFFER_TIME = 0; + + /** + * The default maximum message queue size + */ +// protected static final int MESSAGE_QUEUE_SIZE_DEFAULT = 230000; + + /** The message queue size */ + protected final int _maximumMessageCount; + + /** + * The time (in seconds ) after which a message in the client queue will + * expire. + */ + protected final int _messageTimeToLive; + + /** + * The CacheClientNotifier registering this proxy. + */ + protected final CacheClientNotifier _cacheClientNotifier; + + /** + * Defaults to true; meaning do some logging of dropped client notification + * messages. Set the system property to true to cause dropped messages to NOT + * be logged. + */ + protected static final boolean LOG_DROPPED_MSGS = !Boolean + .getBoolean("gemfire.disableNotificationWarnings"); + + /** + * for testing purposes, delays the start of the dispatcher thread + */ + public static boolean isSlowStartForTesting = false; + + /** + * Default value for slow starting time of dispatcher + */ + private static final long DEFAULT_SLOW_STARTING_TIME = 5000; + + /** + * Key in the system property from which the slow starting time value will be + * retrieved + */ + private static final String KEY_SLOW_START_TIME_FOR_TESTING = "slowStartTimeForTesting"; + + private boolean isPrimary; + + /** @since 5.7 */ + protected byte clientConflation = HandShake.CONFLATION_DEFAULT; + + /** + * Flag to indicate whether to keep a durable client's queue alive + */ + boolean keepalive = false; + + private AccessControl postAuthzCallback; + + /** + * For multiuser environment.. + */ + private ClientUserAuths clientUserAuths; + + private final Object clientUserAuthsLock = new Object(); + + /** + * The version of the client + */ + private Version clientVersion; + + /** + * A map of region name as key and integer as its value. Basically, it stores + * the names of the regions with DataPolicy as EMPTY. If an + * event's region name is present in this map, it's full value (and not + * delta) is sent to the client represented by this proxy. + * + * @since 6.1 + */ + private volatile Map regionsWithEmptyDataPolicy = new HashMap(); + + /** + * A debug flag used for testing Backward compatibility + */ + public static boolean AFTER_MESSAGE_CREATION_FLAG = false; + + /** + * Notify the region when a client interest registration occurs. This tells + * the region to update access time when an update is to be pushed to a + * client. It is enabled only for PartitionedRegions + * currently. + */ + protected static final boolean NOTIFY_REGION_ON_INTEREST = Boolean + .getBoolean("gemfire.updateAccessTimeOnClientInterest"); + + /** + * The AcceptorImpl identifier to which the proxy is connected. + */ + private final long _acceptorId; + + /** acceptor's setting for notifyBySubscription */ + private final boolean notifyBySubscription; + + /** To queue the events arriving during message dispatcher initialization */ + private volatile ConcurrentLinkedQueue queuedEvents = new ConcurrentLinkedQueue(); + + private final Object queuedEventsSync = new Object(); + + private volatile boolean messageDispatcherInit = false; + + /** + * A counter that keeps track of how many task iterations that have occurred + * since the last ping or message. The + * {@linkplain CacheClientNotifier#scheduleClientPingTask ping task} + * increments it. Normal messages sent to the client reset it. If the counter + * reaches 3, a ping is sent. + */ + private final AtomicInteger pingCounter = new AtomicInteger(); + + + /** Date on which this instances was created */ + private Date creationDate; + + /** true when the durable client associated with this proxy is being + * restarted and prevents cqs from being closed and drained**/ + private boolean drainLocked = false; + private final Object drainLock = new Object(); + + /** number of cq drains that are currently in progress **/ + private int numDrainsInProgress = 0; + private final Object drainsInProgressLock = new Object(); + + /** + * Constructor. + * + * @param ccn + * The CacheClientNotifier registering this proxy + * @param socket + * The socket between the server and the client + * @param proxyID + * representing the Connection Proxy of the clien + * @param isPrimary + * The boolean stating whether this prozxy is primary + * @throws CacheException { + */ + protected CacheClientProxy(CacheClientNotifier ccn, Socket socket, + ClientProxyMembershipID proxyID, boolean isPrimary, byte clientConflation, + Version clientVersion, long acceptorId, boolean notifyBySubscription) + throws CacheException { + initializeTransientFields(socket, proxyID, isPrimary, clientConflation, clientVersion); + this._cacheClientNotifier = ccn; + this._cache = (GemFireCacheImpl)ccn.getCache(); + this._maximumMessageCount = ccn.getMaximumMessageCount(); + this._messageTimeToLive = ccn.getMessageTimeToLive(); + this._acceptorId = acceptorId; + this.notifyBySubscription = notifyBySubscription; + StatisticsFactory factory = this._cache.getDistributedSystem(); + this._statistics = new CacheClientProxyStats(factory, + "id_"+this.proxyID.getDistributedMember().getId()+ "_at_"+ this._remoteHostAddress + ":" + this._socket.getPort()); + + // Create the interest list + this.cils[RegisterInterestTracker.interestListIndex] = + new ClientInterestList(this, this.proxyID); + // Create the durable interest list + this.cils[RegisterInterestTracker.durableInterestListIndex] = + new ClientInterestList(this, this.getDurableId()); + this.postAuthzCallback = null; + this._cacheClientNotifier.getAcceptorStats().incCurrentQueueConnections(); + this.creationDate = new Date(); + initializeClientAuths(); + } + + private void initializeClientAuths() + { + if(AcceptorImpl.isPostAuthzCallbackPresent()) + this.clientUserAuths = ServerConnection.getClientUserAuths(this.proxyID); + } + + private void reinitializeClientAuths() + { + if (this.clientUserAuths != null && AcceptorImpl.isPostAuthzCallbackPresent()) { + synchronized (this.clientUserAuthsLock) { + ClientUserAuths newClientAuth = ServerConnection.getClientUserAuths(this.proxyID); + newClientAuth.fillPreviousCQAuth(this.clientUserAuths); + this.clientUserAuths = newClientAuth; + } + } + } + + public void setPostAuthzCallback(AccessControl authzCallback) { + //TODO:hitesh synchronization + synchronized (this.clientUserAuthsLock) { + if (this.postAuthzCallback != null) + this.postAuthzCallback.close(); + this.postAuthzCallback = authzCallback; + } + } + + public void setCQVsUserAuth(String cqName, long uniqueId, boolean isDurable) + { + if(postAuthzCallback == null) //only for multiuser + { + if(this.clientUserAuths != null) + this.clientUserAuths.setUserAuthAttributesForCq(cqName, uniqueId, isDurable); + } + } + + private void initializeTransientFields(Socket socket, + ClientProxyMembershipID pid, boolean ip, byte cc, Version vers) { + this._socket = socket; + this.proxyID = pid; + this.connected = true; + { + int bufSize = 1024; + try { + bufSize = _socket.getSendBufferSize(); + if (bufSize < 1024) { + bufSize = 1024; + } + } catch (SocketException ignore) { + } + this._commBuffer = ServerConnection.allocateCommBuffer(bufSize, socket); + } + this._remoteHostAddress = socket.getInetAddress().getHostAddress(); + this.isPrimary = ip; + this.clientConflation = cc; + this.clientVersion = vers; + } + + public boolean isMarkerEnqueued() { + return markerEnqueued; + } + + public void setMarkerEnqueued(boolean bool) { + markerEnqueued = bool; + } + + public long getAcceptorId(){ + return this._acceptorId; + } + + /** + * @return the notifyBySubscription + */ + public boolean isNotifyBySubscription() { + return this.notifyBySubscription; + } + + + /** + * Returns the DistributedMember represented by this proxy + */ + public ClientProxyMembershipID getProxyID() + { + return this.proxyID; + } + + // the following code was commented out simply because it was not used +// /** +// * Determines if the proxy represents the client host (and only the host, not +// * necessarily the exact VM running on the host) +// * +// * @return Whether the proxy represents the client host +// */ +// protected boolean representsClientHost(String clientHost) +// { +// // [bruce] TODO BUGBUGBUG: this should compare InetAddresses, not Strings +// return this._remoteHostAddress.equals(clientHost); +// } + +// protected boolean representsClientVM(DistributedMember remoteMember) +// { +// // logger.warn("Is input port " + clientPort + " contained in " + +// // logger.warn("Does input host " + clientHost + " equal " + +// // this._remoteHostAddress+ ": " + representsClientHost(clientHost)); +// // logger.warn("representsClientVM: " + +// // (representsClientHost(clientHost) && containsPort(clientPort))); +// return (proxyID.getDistributedMember().equals(remoteMember)); +// } + +// /** +// * Determines if the CacheClientUpdater proxied by this instance is listening +// * on the input clientHost and clientPort +// * +// * @param clientHost +// * The host name of the client to compare +// * @param clientPort +// * The port number of the client to compare +// * +// * @return Whether the CacheClientUpdater proxied by this instance is +// * listening on the input clientHost and clientPort +// */ +// protected boolean representsCacheClientUpdater(String clientHost, +// int clientPort) +// { +// return (clientPort == this._socket.getPort() && representsClientHost(clientHost)); +// } + + protected boolean isMember(ClientProxyMembershipID memberId) + { + return this.proxyID.equals(memberId); + } + + protected boolean isSameDSMember(ClientProxyMembershipID memberId) + { + return this.proxyID.isSameDSMember(memberId); + } + + /** + * Set the queue keepalive option + * + * @param option whether to keep the durable client's queue alive + */ + protected void setKeepAlive(boolean option) { + this.keepalive = option; + } + + /** + * Returns the socket between the server and the client + * + * @return the socket between the server and the client + */ + protected Socket getSocket() + { + return this._socket; + } + + public String getSocketHost() + { + return this._socket.getInetAddress().getHostAddress(); + } + + protected ByteBuffer getCommBuffer() { + return this._commBuffer; + } + + /** + * Returns the remote host's IP address string + * + * @return the remote host's IP address string + */ + protected String getRemoteHostAddress() + { + return this._remoteHostAddress; + } + + /** + * Returns the remote host's port + * + * @return the remote host's port + */ + public int getRemotePort() + { + return this._socket.getPort(); + } + + /** + * Returns whether the proxy is connected to a remote client + * + * @return whether the proxy is connected to a remote client + */ + public boolean isConnected() { + return this.connected; + } + + /** + * Mark the receiver as needing removal + * @return true if it was already marked for removal + */ + protected boolean startRemoval() { + boolean result; + synchronized (this.isMarkedForRemovalLock) { + result = this.isMarkedForRemoval; + this.isMarkedForRemoval = true; + } + return result; + } + + /** + * Wait until the receiver's removal has completed before + * returning. + * @return true if the proxy was initially marked for removal + */ + protected boolean waitRemoval() { + boolean result; + synchronized (this.isMarkedForRemovalLock) { + result = this.isMarkedForRemoval; + boolean interrupted = false; + try { + while (this.isMarkedForRemoval) { + if (logger.isDebugEnabled()) { + logger.debug("Waiting for CacheClientProxy removal: {}", this); + } + try { + this.isMarkedForRemovalLock.wait(); + } + catch (InterruptedException e) { + interrupted = true; + this._cache.getCancelCriterion().checkCancelInProgress(e); + } + } // while + } + finally { + if (interrupted) { + Thread.currentThread().interrupt(); + } + } + } // synchronized + return result; + } + + /** + * Indicate that removal has completed on this instance + */ + protected void notifyRemoval() { + synchronized (this.isMarkedForRemovalLock) { + this.isMarkedForRemoval = false; + this.isMarkedForRemovalLock.notifyAll(); + } + } + + /** + * Returns the GemFire cache + * + * @return the GemFire cache + */ + public GemFireCacheImpl getCache() + { + return this._cache; + } + + public Set getInterestRegisteredRegions() { + HashSet regions = new HashSet(); + for(int i=0; i < this.cils.length; i++){ + if (!this.cils[i].regions.isEmpty()) { + regions.addAll(this.cils[i].regions); + } + } + return regions; + } + + /** + * Returns the proxy's statistics + * + * @return the proxy's statistics + */ + public CacheClientProxyStats getStatistics() + { + return this._statistics; + } + + /** + * Returns this proxy's CacheClientNotifier. + * @return this proxy's CacheClientNotifier + */ + protected CacheClientNotifier getCacheClientNotifier() { + return this._cacheClientNotifier; + } + + /** + * Returns the size of the queue for heuristic purposes. This + * size may be changing concurrently if puts/gets are occurring + * at the same time. + */ + public int getQueueSize() { + return this._messageDispatcher == null ? 0 + : this._messageDispatcher.getQueueSize(); + } + + /** + * returns the queue size calculated through stats + */ + public int getQueueSizeStat() { + return this._messageDispatcher == null ? 0 + : this._messageDispatcher.getQueueSizeStat(); + } + + + public boolean drainInProgress() { + synchronized(drainsInProgressLock) { + return numDrainsInProgress > 0; + } + } + + //Called from CacheClientNotifier when attempting to restart paused proxy + //locking the drain lock requires that no drains are in progress + //when the lock was acquired. + public boolean lockDrain() { + synchronized(drainsInProgressLock) { + if (!drainInProgress()) { + synchronized(drainLock) { + if (testHook != null) { + testHook.doTestHook("PRE_ACQUIRE_DRAIN_LOCK_UNDER_SYNC"); + } + //prevent multiple lockings of drain lock + if (!drainLocked) { + drainLocked = true; + return true; + } + } + } + } + return false; + } + + //Called from CacheClientNotifier when completed restart of proxy + public void unlockDrain() { + if (testHook != null) { + testHook.doTestHook("PRE_RELEASE_DRAIN_LOCK"); + } + synchronized(drainLock) { + drainLocked = false; + } + } + + //Only close the client cq if it is paused and no one is attempting to restart the proxy + public boolean closeClientCq(String clientCQName) throws CqException { + if (testHook != null) { + testHook.doTestHook("PRE_DRAIN_IN_PROGRESS"); + } + synchronized(drainsInProgressLock) { + numDrainsInProgress ++; + } + if (testHook != null) { + testHook.doTestHook("DRAIN_IN_PROGRESS_BEFORE_DRAIN_LOCK_CHECK"); + } + try { + //If the drain lock was acquired, the other thread did so before we could bump up + //the numDrainsInProgress. That means we need to stop. + if (drainLocked) { + // someone is trying to restart a paused proxy + String msg = LocalizedStrings.CacheClientProxy_COULD_NOT_DRAIN_CQ_DUE_TO_RESTARTING_DURABLE_CLIENT.toLocalizedString(clientCQName, proxyID.getDurableId()); + logger.info(msg); + throw new CqException(msg); + } + //isConnected is to protect against the case where a durable client has reconnected + //but has not yet sent a ready for events message + //we can probably remove the isPaused check + if (isPaused() && !isConnected()) { + CqService cqService = getCache().getCqService(); + if (cqService != null) { + InternalCqQuery cqToClose = cqService.getCq(cqService.constructServerCqName( + clientCQName, this.proxyID)); + // close and drain + if (cqToClose != null) { + cqService.closeCq(clientCQName, this.proxyID); + this._messageDispatcher.drainClientCqEvents(this.proxyID, cqToClose); + } + else { + String msg = LocalizedStrings.CqService_CQ_NOT_FOUND_FAILED_TO_CLOSE_THE_SPECIFIED_CQ_0.toLocalizedString(clientCQName); + logger.info(msg); + throw new CqException(msg); + } + } + } else { + String msg = LocalizedStrings.CacheClientProxy_COULD_NOT_DRAIN_CQ_DUE_TO_ACTIVE_DURABLE_CLIENT.toLocalizedString(clientCQName, proxyID.getDurableId()); + logger.info(msg); + throw new CqException(msg); + } + } finally { + synchronized (drainsInProgressLock) { + numDrainsInProgress--; + } + if (testHook != null) { + testHook.doTestHook("DRAIN_COMPLETE"); + } + + } + return true; + } + + + /** + * Returns whether the proxy is alive. It is alive if its message dispatcher + * is processing messages. + * + * @return whether the proxy is alive + */ + protected boolean isAlive() + { + if (this._messageDispatcher == null) { + return false; + } + return !this._messageDispatcher.isStopped(); + } + + /** + * Returns whether the proxy is paused. It is paused if its message dispatcher + * is paused. This only applies to durable clients. + * + * @return whether the proxy is paused + * + * @since 5.5 + */ + protected boolean isPaused() { + return this._isPaused; + } + + protected void setPaused(boolean isPaused) { + this._isPaused = isPaused; + } + + /** + * Closes the proxy. This method checks the message queue for any unprocessed + * messages and processes them for MAXIMUM_SHUTDOWN_PEEKS. + * + * @see CacheClientProxy#MAXIMUM_SHUTDOWN_PEEKS + */ + protected void close() + { + close(true, false); + } + + /** + * Set to true once this proxy starts being closed. + * Remains true for the rest of its existence. + */ + private final AtomicBoolean closing = new AtomicBoolean(false); + + /** + * Close the CacheClientProxy. + * + * @param checkQueue + * Whether to message check the queue and process any contained + * messages (up to MAXIMUM_SHUTDOWN_PEEKS). + * @param stoppedNormally + * Whether client stopped normally + * + * @return whether to keep this CacheClientProxy + * @see CacheClientProxy#MAXIMUM_SHUTDOWN_PEEKS + */ + protected boolean close(boolean checkQueue, boolean stoppedNormally) { + boolean pauseDurable = false; + // If the client is durable and either (a) it hasn't stopped normally or (b) it + // has stopped normally but it is configured to be kept alive, set pauseDurable + // to true + if (isDurable() + && (!stoppedNormally || (getDurableKeepAlive() && stoppedNormally))) { + pauseDurable = true; + } + + boolean keepProxy = false; + if (pauseDurable) { + pauseDispatching(); + keepProxy = true; + } else { + terminateDispatching(checkQueue); + closeTransientFields(); + } + + this.connected = false; + + // Close the Authorization callback (if any) + try { + if (!pauseDurable) { + if (this.postAuthzCallback != null) {//for single user + this.postAuthzCallback.close(); + this.postAuthzCallback = null; + }else if(this.clientUserAuths != null) {//for multiple users + this.clientUserAuths.cleanup(true); + this.clientUserAuths = null; + } + } + } + catch (Exception ex) { + if (this._cache.getSecurityLoggerI18n().warningEnabled()) { + this._cache.getSecurityLoggerI18n().warning(LocalizedStrings.TWO_ARG_COLON, new Object[] {this, ex}); + } + } + // Notify the caller whether to keep this proxy. If the proxy is durable + // and should be paused, then return true; otherwise return false. + return keepProxy; + } + + protected void pauseDispatching() { + if (this._messageDispatcher == null){ + return; + } + + // If this is the primary, pause the dispatcher (which closes its transient + // fields. Otherwise, just close the transient fields. + if (logger.isDebugEnabled()) { + logger.debug("{}: Pausing processing", this); + } + //BUGFIX for BUG#38234 + if(!testAndSetPaused(true) && this.isPrimary) { + if (this._messageDispatcher != Thread.currentThread()) { + // don't interrupt ourself to fix bug 40611 + this._messageDispatcher.interrupt(); + } + } + + try { + // Close transient fields + closeTransientFields(); + } finally { + // make sure this gets called if closeTransientFields throws; see bug 40611 + // Start timer + scheduleDurableExpirationTask(); + } + } + + private boolean testAndSetPaused(boolean newValue) { + + synchronized(this._messageDispatcher._pausedLock) { + if (this._isPaused != newValue) { + this._isPaused = newValue; + this._messageDispatcher._pausedLock.notifyAll(); + return !this._isPaused; + } + else { + this._messageDispatcher._pausedLock.notifyAll(); + return this._isPaused; + } + } + } + protected void terminateDispatching(boolean checkQueue) { + if (this._messageDispatcher == null){ + return; + } + + try { + if (logger.isDebugEnabled()) { + logger.debug("{}: Terminating processing", this); + } + if (this._messageDispatcher == Thread.currentThread()) { + // I'm not even sure this is possible but if the dispatcher + // calls us then at least call stopDispatching + // the old code did this (I'm not even sure it is safe to do). + // This needs to be done without testing OR setting "closing". + this._messageDispatcher.stopDispatching(checkQueue); + this.cils[RegisterInterestTracker.interestListIndex].clearClientInterestList(); + this.cils[RegisterInterestTracker.durableInterestListIndex].clearClientInterestList(); + // VJR: bug 37487 fix + destroyRQ(); + return; + } + + if (!this.closing.compareAndSet(false, true)) { + // must already be closing so just return + // this is part of the fix for 37684 + return; + } + // Unregister interest in all interests (if necessary) + this.cils[RegisterInterestTracker.interestListIndex].clearClientInterestList(); + this.cils[RegisterInterestTracker.durableInterestListIndex].clearClientInterestList(); + + // If the message dispatcher is paused, unpause it. The next bit of + // code will interrupt the waiter. + if (this.testAndSetPaused(false)) { + if (logger.isDebugEnabled()) { + logger.debug("{}: Paused but terminating processing", this); + } + // Cancel the expiration task + cancelDurableExpirationTask(false); + } + + boolean alreadyDestroyed = false; + boolean gotInterrupt = Thread.interrupted(); // clears the flag + try { + // Stop the message dispatcher + this._messageDispatcher.stopDispatching(checkQueue); + + gotInterrupt |= Thread.interrupted(); // clears the flag + + // to fix bug 37684 + // 1. check to see if dispatcher is still alive + if (this._messageDispatcher.isAlive()) { + closeSocket(); + destroyRQ(); + alreadyDestroyed = true; + this._messageDispatcher.interrupt(); + if (this._messageDispatcher.isAlive()) { + try { + this._messageDispatcher.join(1000); + } catch (InterruptedException ex) { + gotInterrupt = true; + } + // if it is still alive then warn and move on + if (this._messageDispatcher.isAlive()) { + //com.gemstone.gemfire.internal.OSProcess.printStacks(com.gemstone.gemfire.internal.OSProcess.getId()); + logger.warn(LocalizedMessage.create(LocalizedStrings.CacheClientProxy_0_COULD_NOT_STOP_MESSAGE_DISPATCHER_THREAD, this)); + } + } + } + } + finally { + if (gotInterrupt) { + Thread.currentThread().interrupt(); + } + if (!alreadyDestroyed) { + destroyRQ(); + } + } + } finally { + // Close the statistics + this._statistics.close(); // fix for bug 40105 + closeTransientFields(); // make sure this happens + } + } + + private void closeSocket() { + if (this._socketClosed.compareAndSet(false, true)) { + // Close the socket + this._cacheClientNotifier.getSocketCloser().asyncClose(this._socket, this._remoteHostAddress, null); + getCacheClientNotifier().getAcceptorStats().decCurrentQueueConnections(); + } + } + + private void closeTransientFields() { + closeSocket(); + + // Null out comm buffer, host address, ports and proxy id. All will be + // replaced when the client reconnects. + releaseCommBuffer(); + { + String remoteHostAddress = this._remoteHostAddress; + if (remoteHostAddress != null) { + this._cacheClientNotifier.getSocketCloser().releaseResourcesForAddress(remoteHostAddress); + this._remoteHostAddress = null; + } + } + try { + this.cils[RegisterInterestTracker.interestListIndex].clearClientInterestList(); + } catch (CacheClosedException e) { + // ignore if cache is shutting down + } + // Commented to fix bug 40259 + //this.clientVersion = null; + closeNonDurableCqs(); + } + + private void releaseCommBuffer() { + ByteBuffer bb = this._commBuffer; + if (bb != null) { + this._commBuffer = null; + ServerConnection.releaseCommBuffer(bb); + } + } + + private void closeNonDurableCqs(){ + CqService cqService = getCache().getCqService(); + if (cqService != null) { + try { + cqService.closeNonDurableClientCqs(getProxyID()); + } + catch (CqException ex) { + logger.warn(LocalizedMessage.create(LocalizedStrings.CacheClientProxy_CQEXCEPTION_WHILE_CLOSING_NON_DURABLE_CQS_0, ex.getLocalizedMessage())); + } + } + } + + private void destroyRQ() { + if (this._messageDispatcher == null) { + return; + } + try { + // Using Destroy Region bcoz this method is modified in HARegion so as + // not to distribute. + // For normal Regions , even the localDestroyRegion actually propagates + HARegionQueue rq = this._messageDispatcher._messageQueue; + rq.destroy(); + + // if (!rq.getRegion().isDestroyed()) { + // rq.getRegion().destroyRegion(); + // } + } + catch (RegionDestroyedException rde) { +// throw rde; + } + catch (CancelException e) { +// throw e; + } + catch (Exception warning) { + logger.warn(LocalizedMessage.create(LocalizedStrings.CacheClientProxy_0_EXCEPTION_IN_CLOSING_THE_UNDERLYING_HAREGION_OF_THE_HAREGIONQUEUE, this), warning); + } + } + + public void registerInterestRegex(String regionName, String regex, + boolean isDurable) { + registerInterestRegex(regionName, regex, isDurable, true); + } + + public void registerInterestRegex(String regionName, String regex, + boolean isDurable, boolean receiveValues) { + if (this.isPrimary) { + // Notify all secondaries and client of change in interest + notifySecondariesAndClient(regionName, regex, InterestResultPolicy.NONE, + isDurable, receiveValues, InterestType.REGULAR_EXPRESSION); + } else { + throw new IllegalStateException(LocalizedStrings.CacheClientProxy_NOT_PRIMARY.toLocalizedString()); + } + } + + public void registerInterest(String regionName, Object keyOfInterest, + InterestResultPolicy policy, boolean isDurable) { + registerInterest(regionName, keyOfInterest, policy, isDurable, true); + } + + public void registerInterest(String regionName, Object keyOfInterest, + InterestResultPolicy policy, boolean isDurable, + boolean receiveValues) { + if (keyOfInterest instanceof String && keyOfInterest.equals("ALL_KEYS")) { + registerInterestRegex(regionName, ".*", isDurable, receiveValues); + } else if (keyOfInterest instanceof List) { + if (this.isPrimary) { + notifySecondariesAndClient(regionName, keyOfInterest, policy, + isDurable, receiveValues, InterestType.KEY); + } else { + throw new IllegalStateException(LocalizedStrings.CacheClientProxy_NOT_PRIMARY.toLocalizedString()); + } + } else { + if (this.isPrimary) { + // Notify all secondaries and client of change in interest + notifySecondariesAndClient(regionName, keyOfInterest, policy, + isDurable, receiveValues, InterestType.KEY); + + // Enqueue the initial value message for the client if necessary + if (policy == InterestResultPolicy.KEYS_VALUES) { + Get70 request = (Get70)Get70.getCommand(); + LocalRegion lr = (LocalRegion) this._cache.getRegion(regionName); + Get70.Entry entry = request.getValueAndIsObject(lr, keyOfInterest, null, + null); + boolean isObject = entry.isObject; + byte[] value = null; + if (entry.value instanceof byte[]) { + value = (byte[])entry.value; + } else { + try { + value = CacheServerHelper.serialize(entry.value); + } catch (IOException e) { + logger.warn(LocalizedMessage.create(LocalizedStrings.CacheClientProxy_THE_FOLLOWING_EXCEPTION_OCCURRED_0, entry.value), e); + } + } + VersionTag tag = entry.versionTag; + ClientUpdateMessage updateMessage = new ClientUpdateMessageImpl( + EnumListenerEvent.AFTER_CREATE, lr, keyOfInterest, value, null, + (isObject ? (byte) 0x01 : (byte) 0x00), null, this.proxyID, + new EventID(this._cache.getDistributedSystem()), tag); + CacheClientNotifier.routeSingleClientMessage(updateMessage, this.proxyID); + } + // Add the client to the region's filters + //addFilterRegisteredClients(regionName, keyOfInterest); + } else { + throw new IllegalStateException(LocalizedStrings.CacheClientProxy_NOT_PRIMARY.toLocalizedString()); + } + } + } + + private void notifySecondariesAndClient(String regionName, + Object keyOfInterest, InterestResultPolicy policy, boolean isDurable, + boolean receiveValues, int interestType) { + // Create a client interest message for the keyOfInterest + ClientInterestMessageImpl message = new ClientInterestMessageImpl( + new EventID(this._cache.getDistributedSystem()), regionName, + keyOfInterest, interestType, policy.getOrdinal(), isDurable, + !receiveValues, ClientInterestMessageImpl.REGISTER); + + // Notify all secondary proxies of a change in interest + notifySecondariesOfInterestChange(message); + + // Modify interest registration + if (keyOfInterest instanceof List) { + registerClientInterestList(regionName, (List) keyOfInterest, isDurable, + !receiveValues, true); + } else { + registerClientInterest(regionName, keyOfInterest, interestType, + isDurable, !receiveValues, true); + } + + // Enqueue the interest registration message for the client. + // If the client is not 7.0.1 or greater and the key of interest is a list, + // then create an individual message for each entry in the list since the + // client doesn't support a ClientInterestMessageImpl containing a list. + if (Version.GFE_701.compareTo(this.clientVersion) > 0 + && keyOfInterest instanceof List) { + for (Iterator i = ((List) keyOfInterest).iterator(); i.hasNext();) { + this._messageDispatcher.enqueueMessage(new ClientInterestMessageImpl( + new EventID(this._cache.getDistributedSystem()), regionName, + i.next(), interestType, policy.getOrdinal(), isDurable, !receiveValues, + ClientInterestMessageImpl.REGISTER)); + } + } else { + this._messageDispatcher.enqueueMessage(message); + } + } + + public void unregisterInterestRegex(String regionName, String regex, + boolean isDurable) { + unregisterInterestRegex(regionName, regex, isDurable, true); + } + + public void unregisterInterestRegex(String regionName, String regex, + boolean isDurable, boolean receiveValues) { + if (this.isPrimary) { + notifySecondariesAndClient(regionName, regex, isDurable, receiveValues, + InterestType.REGULAR_EXPRESSION); + } else { + throw new IllegalStateException(LocalizedStrings.CacheClientProxy_NOT_PRIMARY.toLocalizedString()); + } + } + + public void unregisterInterest(String regionName, Object keyOfInterest, + boolean isDurable) { + unregisterInterest(regionName, keyOfInterest, isDurable, true); + } + + public void unregisterInterest(String regionName, Object keyOfInterest, + boolean isDurable, boolean receiveValues) { + if (keyOfInterest instanceof String && keyOfInterest.equals("ALL_KEYS")) { + unregisterInterestRegex(regionName, ".*", isDurable, receiveValues); + } else { + if (this.isPrimary) { + notifySecondariesAndClient(regionName, keyOfInterest, isDurable, + receiveValues, InterestType.KEY); + } else { + throw new IllegalStateException(LocalizedStrings.CacheClientProxy_NOT_PRIMARY.toLocalizedString()); + } + } + } + + private void notifySecondariesAndClient(String regionName, + Object keyOfInterest, boolean isDurable, boolean receiveValues, + int interestType) { + // Notify all secondary proxies of a change in interest + ClientInterestMessageImpl message = new ClientInterestMessageImpl( + new EventID(this._cache.getDistributedSystem()), regionName, + keyOfInterest, interestType, (byte) 0, isDurable, !receiveValues, + ClientInterestMessageImpl.UNREGISTER); + notifySecondariesOfInterestChange(message); + + // Modify interest registration + if (keyOfInterest instanceof List) { + unregisterClientInterest(regionName, (List) keyOfInterest, false); + } else { + unregisterClientInterest(regionName, keyOfInterest, interestType, + false); + } + + // Enqueue the interest unregistration message for the client. + // If the client is not 7.0.1 or greater and the key of interest is a list, + // then create an individual message for each entry in the list since the + // client doesn't support a ClientInterestMessageImpl containing a list. + if (Version.GFE_701.compareTo(this.clientVersion) > 0 + && keyOfInterest instanceof List) { + for (Iterator i = ((List) keyOfInterest).iterator(); i.hasNext();) { + this._messageDispatcher.enqueueMessage(new ClientInterestMessageImpl( + new EventID(this._cache.getDistributedSystem()), regionName, + i.next(), interestType, (byte) 0, isDurable, !receiveValues, + ClientInterestMessageImpl.UNREGISTER)); + } + } else { + this._messageDispatcher.enqueueMessage(message); + } + } + + protected void notifySecondariesOfInterestChange(ClientInterestMessageImpl message) { + if (logger.isDebugEnabled()) { + StringBuffer subBuffer = new StringBuffer(); + if (message.isRegister()) { + subBuffer + .append("register ") + .append(message.getIsDurable() ? "" : "non-") + .append("durable interest in "); + } else { + subBuffer.append("unregister interest in "); + } + StringBuffer buffer = new StringBuffer(); + buffer + .append(this) + .append(": Notifying secondary proxies to ") + .append(subBuffer.toString()) + .append(message.getRegionName()) + .append("->") + .append(message.getKeyOfInterest()) + .append("->") + .append(InterestType.getString(message.getInterestType())); + logger.debug(buffer.toString()); + } + this._cacheClientNotifier.deliverInterestChange(this.proxyID, message); + } + + /* + protected void addFilterRegisteredClients(String regionName, + Object keyOfInterest) { + try { + this._cacheClientNotifier.addFilterRegisteredClients(regionName, + this.proxyID); + } catch (RegionDestroyedException e) { + logger.warn(LocalizedStrings.CacheClientProxy_0_INTEREST_REG_FOR_0_FAILED, regionName + "->" + keyOfInterest, e); + } + } + */ + + /** + * Registers interest in the input region name and key + * + * @param regionName + * The fully-qualified name of the region in which to register + * interest + * @param keyOfInterest + * The key in which to register interest + */ + protected void registerClientInterest(String regionName, + Object keyOfInterest, int interestType, boolean isDurable, + boolean sendUpdatesAsInvalidates, boolean flushState) + { + ClientInterestList cil = + this.cils[RegisterInterestTracker.getInterestLookupIndex( + isDurable, false)]; + cil.registerClientInterest(regionName, keyOfInterest, interestType, sendUpdatesAsInvalidates); + if (flushState) { + flushForInterestRegistration(regionName, this._cache.getDistributedSystem().getDistributedMember()); + } + HARegionQueue queue = getHARegionQueue(); + if (queue != null) { // queue is null during initialization + queue.setHasRegisteredInterest(true); + } + } + + /** + * flush other regions to the given target. This is usually the member + * that is registering the interest. During queue creation it is the + * queue's image provider. + */ + public void flushForInterestRegistration(String regionName, DistributedMember target) { + Region r = this._cache.getRegion(regionName); + if (r == null) { + if (logger.isDebugEnabled()) { + logger.debug("Unable to find region '{}' to flush for interest registration", regionName); + } + } else if (r.getAttributes().getScope().isDistributed()) { + if (logger.isDebugEnabled()){ + logger.debug("Flushing region '{}' for interest registration", regionName); + } + CacheDistributionAdvisee cd = (CacheDistributionAdvisee)r; + final StateFlushOperation sfo; + if (r instanceof PartitionedRegion) { + // need to flush all buckets. SFO should be changed to target buckets + // belonging to a particular PR, but it doesn't have that option right now + sfo = new StateFlushOperation( + this._cache.getDistributedSystem().getDistributionManager()); + } else { + sfo = new StateFlushOperation((DistributedRegion)r); + } + try { + // bug 41681 - we need to flush any member that may have a cache operation + // in progress so that the changes are received there before returning + // from this method + InitialImageAdvice advice = cd.getCacheDistributionAdvisor().adviseInitialImage(null); + HashSet recips = new HashSet(advice.getReplicates()); + recips.addAll(advice.getUninitialized()); + recips.addAll(advice.getEmpties()); + recips.addAll(advice.getPreloaded()); + recips.addAll(advice.getOthers()); + sfo.flush(recips, + target, + DistributionManager.HIGH_PRIORITY_EXECUTOR, true); + } catch (InterruptedException ie) { + Thread.currentThread().interrupt(); + return; + } + } + } + + /** + * Unregisters interest in the input region name and key + * + * @param regionName + * The fully-qualified name of the region in which to unregister + * interest + * @param keyOfInterest + * The key in which to unregister interest + * @param isClosing + * Whether the caller is closing + */ + protected void unregisterClientInterest(String regionName, + Object keyOfInterest, int interestType, boolean isClosing) + { + // only unregister durable interest if isClosing and !keepalive + if (!isClosing /* explicit unregister */ + || !getDurableKeepAlive() /* close and no keepAlive*/) { + this.cils[RegisterInterestTracker.durableInterestListIndex]. + unregisterClientInterest(regionName, keyOfInterest, interestType); + } + // always unregister non durable interest + this.cils[RegisterInterestTracker.interestListIndex]. + unregisterClientInterest(regionName, keyOfInterest, interestType); + } + + /** + * Registers interest in the input region name and list of keys + * + * @param regionName + * The fully-qualified name of the region in which to register + * interest + * @param keysOfInterest + * The list of keys in which to register interest + */ + protected void registerClientInterestList(String regionName, + List keysOfInterest, boolean isDurable, boolean sendUpdatesAsInvalidates, + boolean flushState) + { + // we only use two interest lists to map the non-durable and durable + // identifiers to their interest settings + ClientInterestList cil = + this.cils[RegisterInterestTracker.getInterestLookupIndex( + isDurable, false/*sendUpdatesAsInvalidates*/)]; + cil.registerClientInterestList(regionName, keysOfInterest, sendUpdatesAsInvalidates); + if (getHARegionQueue() != null) { + if (flushState) { + flushForInterestRegistration(regionName, this._cache.getDistributedSystem().getDistributedMember()); + } + getHARegionQueue().setHasRegisteredInterest(true); + } + } + + /** + * Unregisters interest in the input region name and list of keys + * + * @param regionName + * The fully-qualified name of the region in which to unregister + * interest + * @param keysOfInterest + * The list of keys in which to unregister interest + * @param isClosing + * Whether the caller is closing + */ + protected void unregisterClientInterest(String regionName, + List keysOfInterest, boolean isClosing) + { + // only unregister durable interest if isClosing and !keepalive + if (!isClosing /* explicit unregister */ + || !getDurableKeepAlive() /* close and no keepAlive*/) { + this.cils[RegisterInterestTracker.durableInterestListIndex]. + unregisterClientInterestList(regionName, keysOfInterest); + } + // always unregister non durable interest + this.cils[RegisterInterestTracker.interestListIndex]. + unregisterClientInterestList(regionName, keysOfInterest); + } + + + /** sent by the cache client notifier when there is an interest registration change */ + protected void processInterestMessage(ClientInterestMessageImpl message) { + int interestType = message.getInterestType(); + String regionName = message.getRegionName(); + Object key = message.getKeyOfInterest(); + if (message.isRegister()) { + // Register interest in this region->key + if (key instanceof List) { + registerClientInterestList(regionName, (List) key, + message.getIsDurable(), message.getForUpdatesAsInvalidates(), true); + } else { + registerClientInterest(regionName, key, interestType, + message.getIsDurable(), message.getForUpdatesAsInvalidates(), true); + } + + // Add the client to the region's filters + //addFilterRegisteredClients(regionName, key); + + if (logger.isDebugEnabled()) { + StringBuffer buffer = new StringBuffer(); + buffer + .append(this) + .append(": Interest listener registered ") + .append(message.getIsDurable() ? "" : "non-") + .append("durable interest in ") + .append(message.getRegionName()) + .append("->") + .append(message.getKeyOfInterest()) + .append("->") + .append(InterestType.getString(message.getInterestType())); + logger.debug(buffer.toString()); + } + } else { + // Unregister interest in this region->key + if (key instanceof List) { + unregisterClientInterest(regionName, (List) key, false); + } else { + unregisterClientInterest(regionName, key, interestType, false); + } + + if (logger.isDebugEnabled()) { + StringBuffer buffer = new StringBuffer(); + buffer + .append(this) + .append(": Interest listener unregistered interest in ") + .append(message.getRegionName()) + .append("->") + .append(message.getKeyOfInterest()) + .append("->") + .append(InterestType.getString(message.getInterestType())); + logger.debug(buffer.toString()); + } + } + } + + private boolean postDeliverAuthCheckPassed(ClientUpdateMessage clientMessage) { + // Before adding it in the queue for dispatching, check for post + // process authorization + if (AcceptorImpl.isAuthenticationRequired() + && this.postAuthzCallback == null + && AcceptorImpl.isPostAuthzCallbackPresent()) { + // security is on and callback is null: it means multiuser mode. + ClientUpdateMessageImpl cumi = (ClientUpdateMessageImpl)clientMessage; + + CqNameToOp clientCq = cumi.getClientCq(this.proxyID); + + if (clientCq != null && !clientCq.isEmpty()) { + if (logger.isDebugEnabled()) { + logger.debug("CCP clientCq size before processing auth {}", clientCq.size()); + } + String[] regionNameHolder = new String[1]; + OperationContext opctxt = getOperationContext(clientMessage, + regionNameHolder); + if (opctxt == null) { + logger.warn(LocalizedMessage.create( + LocalizedStrings.CacheClientProxy__0_NOT_ADDING_MESSAGE_TO_QUEUE_1_BECAUSE_THE_OPERATION_CONTEXT_OBJECT_COULD_NOT_BE_OBTAINED_FOR_THIS_CLIENT_MESSAGE, + new Object[] {this, clientMessage})); + return false; + } + + String[] cqNames = clientCq.getNames(); + if (logger.isDebugEnabled()) { + logger.debug("CCP clientCq names array size {}", cqNames.length); + } + for (int i = 0; i < cqNames.length; i++) { + try { + if (logger.isDebugEnabled()) { + logger.debug("CCP clientCq name {}", cqNames[i]); + } + boolean isAuthorized = false; + + if (this.proxyID.isDurable() && this.getDurableKeepAlive() + && this._isPaused) { + // need to take lock as we may be reinitializing proxy cache + synchronized (this.clientUserAuthsLock) { + AuthorizeRequestPP postAuthCallback = this.clientUserAuths + .getUserAuthAttributes(cqNames[i]).getPostAuthzRequest(); + if (logger.isDebugEnabled() && postAuthCallback == null) { + logger.debug("CCP clientCq post callback is null"); + } + if (postAuthCallback != null && postAuthCallback + .getPostAuthzCallback().authorizeOperation( + regionNameHolder[0], opctxt)) { + isAuthorized = true; + } + } + } else { + UserAuthAttributes userAuthAttributes = this.clientUserAuths + .getUserAuthAttributes(cqNames[i]); + + AuthorizeRequestPP postAuthCallback = userAuthAttributes + .getPostAuthzRequest(); + if (postAuthCallback == null && logger.isDebugEnabled()) { + logger.debug("CCP clientCq post callback is null"); + } + if (postAuthCallback != null && postAuthCallback + .getPostAuthzCallback().authorizeOperation( + regionNameHolder[0], opctxt)) { + isAuthorized = true; + } + } + + if (!isAuthorized) { + logger.warn(LocalizedMessage.create( + LocalizedStrings.CacheClientProxy__0_NOT_ADDING_CQ_MESSAGE_TO_QUEUE_1_BECAUSE_AUTHORIZATION_FAILED, + new Object[] {this, clientMessage})); + clientCq.delete(cqNames[i]); + } + } catch (Exception ex) { + // ignore... + } + if (logger.isDebugEnabled()) { + logger.debug("CCP clientCq size after processing auth {}", clientCq.size()); + } + } + // again need to check as there may be no CQ available + if (!clientMessage.hasCqs(this.proxyID)) { + this._statistics.incMessagesNotQueuedNotInterested(); + if (logger.isTraceEnabled(LogMarker.BRIDGE_SERVER)) { + logger.debug("{}: Not adding message to queue. It is not interested in this region and key: {}", clientMessage); + } + return false; + } + } + } + else if (this.postAuthzCallback != null) { + String[] regionNameHolder = new String[1]; + boolean isAuthorize = false; + OperationContext opctxt = getOperationContext(clientMessage, + regionNameHolder); + if (opctxt == null) { + logger.warn(LocalizedMessage.create(LocalizedStrings.CacheClientProxy__0_NOT_ADDING_MESSAGE_TO_QUEUE_1_BECAUSE_THE_OPERATION_CONTEXT_OBJECT_COULD_NOT_BE_OBTAINED_FOR_THIS_CLIENT_MESSAGE, new Object[] {this, clientMessage})); + return false; + } + if (logger.isTraceEnabled()){ + logger.trace("{}: Invoking authorizeOperation for message: {}", this, clientMessage); + } + + if (this.proxyID.isDurable() && this.getDurableKeepAlive() + && this._isPaused) { + synchronized (this.clientUserAuthsLock) { + isAuthorize = this.postAuthzCallback.authorizeOperation( + regionNameHolder[0], opctxt); + } + } else { + isAuthorize = this.postAuthzCallback.authorizeOperation( + regionNameHolder[0], opctxt); + } + if (!isAuthorize) { + logger.warn(LocalizedMessage.create(LocalizedStrings.CacheClientProxy__0_NOT_ADDING_MESSAGE_TO_QUEUE_1_BECAUSE_AUTHORIZATION_FAILED, new Object[] {this, clientMessage})); + return false; + } + } + + return true; + } + + /** + * Delivers the message to the client representing this client proxy. + * @param conflatable + */ + protected void deliverMessage(Conflatable conflatable) + { + ClientUpdateMessage clientMessage = null; + if(conflatable instanceof HAEventWrapper) { + clientMessage = ((HAEventWrapper)conflatable).getClientUpdateMessage(); + } else { + clientMessage = (ClientUpdateMessage)conflatable; + } + + this._statistics.incMessagesReceived(); + + if (clientMessage.needsNoAuthorizationCheck() || postDeliverAuthCheckPassed(clientMessage)) { + // If dispatcher is getting initialized, add the event to temporary queue. + if (this.messageDispatcherInit) { + synchronized (this.queuedEventsSync) { + if (this.messageDispatcherInit) { // Check to see value did not changed while getting the synchronize lock. + if (logger.isDebugEnabled()) { + logger.debug("Message dispatcher for proxy {} is getting initialized. Adding message to the queuedEvents.", this); + } + this.queuedEvents.add(conflatable); + return; + } + } + } + + if (this._messageDispatcher != null) { + this._messageDispatcher.enqueueMessage(conflatable); + } else { + this._statistics.incMessagesFailedQueued(); + if (logger.isDebugEnabled()) { + logger.debug("Message is not added to the queue. Message dispatcher for proxy: {} doesn't exist.", this); + } + } + } else { + this._statistics.incMessagesFailedQueued(); + } + } + + protected void sendMessageDirectly(ClientMessage message) { + // Send the message directly if the connection exists + // (do not go through the queue). + if (logger.isDebugEnabled()){ + logger.debug("About to send message directly to {}", this); + } + if (this._messageDispatcher != null && this._socket != null && !this._socket.isClosed()) { + // If the socket is open, send the message to it + this._messageDispatcher.sendMessageDirectly(message); + if (logger.isDebugEnabled()){ + logger.debug("Sent message directly to {}", this); + } + } else { + // Otherwise just reset the ping counter + resetPingCounter(); + if (logger.isDebugEnabled()){ + logger.debug("Skipped sending message directly to {}", this); + } + } + } + + private OperationContext getOperationContext(ClientMessage cmsg, + String[] regionNameHolder) { + ClientUpdateMessageImpl cmsgimpl = (ClientUpdateMessageImpl)cmsg; + OperationContext opctxt = null; + // TODO SW: Special handling for DynamicRegions; this should be reworked + // when DynamicRegion API is deprecated + String regionName = cmsgimpl.getRegionName(); + regionNameHolder[0] = regionName; + if (cmsgimpl.isCreate()) { + if (DynamicRegionFactory.regionIsDynamicRegionList(regionName)) { + regionNameHolder[0] = (String)cmsgimpl.getKeyOfInterest(); + opctxt = new RegionCreateOperationContext(true); + } + else { + PutOperationContext tmp = new PutOperationContext(cmsgimpl.getKeyOfInterest(), cmsgimpl + .getValue(), cmsgimpl.valueIsObject(), PutOperationContext.CREATE, + true); + tmp.setCallbackArg(cmsgimpl.getCallbackArgument()); + opctxt = tmp; + } + } + else if (cmsgimpl.isUpdate()) { + if (DynamicRegionFactory.regionIsDynamicRegionList(regionName)) { + regionNameHolder[0] = (String)cmsgimpl.getKeyOfInterest(); + opctxt = new RegionCreateOperationContext(true); + } + else { + PutOperationContext tmp = new PutOperationContext(cmsgimpl.getKeyOfInterest(), cmsgimpl + .getValue(), cmsgimpl.valueIsObject(), PutOperationContext.UPDATE, + true); + tmp.setCallbackArg(cmsgimpl.getCallbackArgument()); + opctxt = tmp; + } + } + else if (cmsgimpl.isDestroy()) { + if (DynamicRegionFactory.regionIsDynamicRegionList(regionName)) { + regionNameHolder[0] = (String)cmsgimpl.getKeyOfInterest(); + opctxt = new RegionDestroyOperationContext(true); + } + else { + DestroyOperationContext tmp = new DestroyOperationContext(cmsgimpl.getKeyOfInterest(), true); + tmp.setCallbackArg(cmsgimpl.getCallbackArgument()); + opctxt = tmp; + } + } + else if (cmsgimpl.isDestroyRegion()) { + opctxt = new RegionDestroyOperationContext(true); + } + else if (cmsgimpl.isInvalidate()) { + InvalidateOperationContext tmp = new InvalidateOperationContext(cmsgimpl.getKeyOfInterest(), true); + tmp.setCallbackArg(cmsgimpl.getCallbackArgument()); + opctxt = tmp; + } + else if (cmsgimpl.isClearRegion()) { + RegionClearOperationContext tmp = new RegionClearOperationContext(true); + tmp.setCallbackArg(cmsgimpl.getCallbackArgument()); + opctxt = tmp; + } + return opctxt; + } + + /** + * Initializes the message dispatcher thread. The + * MessageDispatcher processes the message queue. + * + * @throws CacheException + */ + public void initializeMessageDispatcher() throws CacheException + { + this.messageDispatcherInit = true; // Initialization process. + try { + if (logger.isDebugEnabled()) { + logger.debug("{}: Initializing message dispatcher with capacity of {} entries", this, _maximumMessageCount); + } + String name = "Client Message Dispatcher for " + + getProxyID().getDistributedMember() + (isDurable()? " (" + getDurableId()+")" : ""); + this._messageDispatcher = new MessageDispatcher(this, name); + + //Fix for 41375 - drain as many of the queued events + //as we can without synchronization. + if (logger.isDebugEnabled()) { + logger.debug("{} draining {} events from init queue into intialized queue", this, this.queuedEvents.size()); + } + Conflatable nextEvent; + while((nextEvent = queuedEvents.poll()) != null) { + this._messageDispatcher.enqueueMessage(nextEvent); + } + + //Now finish emptying the queue with synchronization to make + //sure we don't miss any events. + synchronized (this.queuedEventsSync){ + while((nextEvent = queuedEvents.poll()) != null) { + this._messageDispatcher.enqueueMessage(nextEvent); + } + + this.messageDispatcherInit = false; // Done initialization. + } + } finally { + if (this.messageDispatcherInit) { // If its not successfully completed. + this._statistics.close(); + } + } + } + + protected void startOrResumeMessageDispatcher(boolean processedMarker) { + // Only start or resume the dispatcher if it is Primary + if (this.isPrimary) { + // Add the marker to the queue + if (!processedMarker) { + EventID eventId = new EventID(this._cache.getDistributedSystem()); + this._messageDispatcher.enqueueMarker(new ClientMarkerMessageImpl(eventId)); + } + + // Set the message queue to primary. + this._messageDispatcher._messageQueue.setPrimary(true); + + // Start or resume the dispatcher + synchronized (this._messageDispatcher._pausedLock) { + if (this.isPaused()) { + // It is paused, resume it + this.setPaused(false); + if (this._messageDispatcher.isStopped()) { + if (logger.isDebugEnabled()) { + logger.debug("{}: Starting dispatcher", this); + } + this._messageDispatcher.start(); + } + else { + // ARB: Initialize transient fields. + this._messageDispatcher.initializeTransients(); + if (logger.isDebugEnabled()) { + logger.debug("{}: Resuming dispatcher", this); + } + this._messageDispatcher.resumeDispatching(); + } + } else if (!this._messageDispatcher.isAlive()) { + if (logger.isDebugEnabled()) { + logger.debug("{}: Starting dispatcher", this); + } + this._messageDispatcher.start(); + } + } + } + } + + /* + * Returns whether the client represented by this CacheClientProxy + * has registered interest in anything. @return whether the client + * represented by this CacheClientProxy has registered interest + * in anything + */ + protected boolean hasRegisteredInterested() + { + return + this.cils[RegisterInterestTracker.interestListIndex].hasInterest() || + this.cils[RegisterInterestTracker.durableInterestListIndex].hasInterest(); + } + + /** + * Returns a string representation of the proxy + */ + @Override + public String toString() + { + StringBuffer buffer = new StringBuffer(); + buffer.append("CacheClientProxy[") + // .append("client proxy id=") + .append(this.proxyID) + // .append("; client host name=") + // .append(this._socket.getInetAddress().getCanonicalHostName()) + // .append("; client host address=") + // .append(this._remoteHostAddress) + .append("; port=").append(this._socket.getPort()) + .append("; primary=").append(isPrimary) + .append("; version=").append(clientVersion) + .append("]"); + return buffer.toString(); + } + + public String getState(){ + StringBuffer buffer = new StringBuffer(); + buffer.append("CacheClientProxy[") + // .append("client proxy id=") + .append(this.proxyID) + // .append("; client host name=") + // .append(this._socket.getInetAddress().getCanonicalHostName()) + // .append("; client host address=") + // .append(this._remoteHostAddress) + .append("; port=").append(this._socket.getPort()) + .append("; primary=").append(isPrimary) + .append("; version=").append(clientVersion) + .append("; paused=").append(isPaused()) + .append("; alive=").append(isAlive()) + .append("; connected=").append(isConnected()) + .append("; isMarkedForRemoval=").append(isMarkedForRemoval) + .append("]"); + return buffer.toString(); + } + + public boolean isPrimary() + { + //boolean primary = this._messageDispatcher.isAlive() + // || this._messageDispatcher._messageQueue.isPrimary(); + boolean primary = this.isPrimary; + //System.out.println(this + ": DISPATCHER IS ALIVE: " + this._messageDispatcher.isAlive()); + //System.out.println(this + ": DISPATCHER QUEUE IS PRIMARY: " + this._messageDispatcher._messageQueue.isPrimary()); + //System.out.println(this + ": IS PRIMARY: " + primary); + return primary; + // return this.isPrimary ; + } + + protected boolean basicIsPrimary() { + return this.isPrimary; + } + + protected void setPrimary(boolean isPrimary) { + this.isPrimary = isPrimary; + } + + // private static int nextId = 0; + // static protected int getNextId() { + // synchronized (CacheClientProxy.class) { + // return ++nextId; + // } + // } + /* + * Return this client's HA region queue + * @returns - HARegionQueue of the client + */ + public HARegionQueue getHARegionQueue() { + if (this._messageDispatcher != null){ + return _messageDispatcher._messageQueue; + } + return null; + } + + + /** + * Reinitialize a durable CacheClientProxy with a new client. + * @param socket + * The socket between the server and the client + * @param ip + * whether this proxy represents the primary + */ + protected void reinitialize(Socket socket, ClientProxyMembershipID proxyId, + Cache cache, boolean ip, byte cc, Version ver) { + // Re-initialize transient fields + initializeTransientFields(socket, proxyId, ip, cc, ver); + getCacheClientNotifier().getAcceptorStats().incCurrentQueueConnections(); + + + // Cancel expiration task + cancelDurableExpirationTask(true); + + // Set the message dispatcher's primary flag. This could go from primary + // to secondary + this._messageDispatcher._messageQueue.setPrimary(ip); + this._messageDispatcher._messageQueue.setClientConflation(cc); + + reinitializeClientAuths(); + this.creationDate = new Date(); + if (logger.isDebugEnabled()) { + logger.debug("{}: Has been reinitialized", this); + } + } + + protected boolean isDurable() { + return getProxyID().isDurable(); + } + + protected String getDurableId() { + return getProxyID().getDurableId(); + } + + protected int getDurableTimeout() { + return getProxyID().getDurableTimeout(); + } + + private boolean getDurableKeepAlive() { + return this.keepalive; + } + + protected String getHARegionName() { + return getProxyID().getHARegionName(); + } + + public Region getHARegion() { + return this._messageDispatcher._messageQueue.getRegion(); + } + + public Version getVersion() { + return this.clientVersion; + } + + protected void scheduleDurableExpirationTask() { + SystemTimer.SystemTimerTask task = new SystemTimer.SystemTimerTask() { + @Override + public void run2() { + _durableExpirationTask.compareAndSet(this, null); + logger.warn(LocalizedMessage.create(LocalizedStrings.CacheClientProxy_0__THE_EXPIRATION_TASK_HAS_FIRED_SO_THIS_PROXY_IS_BEING_TERMINATED, CacheClientProxy.this)); + // Remove the proxy from the CacheClientNofier's registry + getCacheClientNotifier().removeClientProxy(CacheClientProxy.this); + getCacheClientNotifier().durableClientTimedOut(CacheClientProxy.this.proxyID); + + // Close the proxy + terminateDispatching(false); + _cacheClientNotifier._statistics.incQueueDroppedCount(); + + /** + * Setting the expiration task to null again and cancelling existing + * one, if any. See #50894. + *

+ * The message dispatcher may again set the expiry task in below path: + * + * com.gemstone.gemfire.internal.cache.tier.sockets.CacheClientProxy.scheduleDurableExpirationTask(CacheClientProxy.java:2020) + * com.gemstone.gemfire.internal.cache.tier.sockets.CacheClientProxy.pauseDispatching(CacheClientProxy.java:924) + * com.gemstone.gemfire.internal.cache.tier.sockets.CacheClientProxy$MessageDispatcher.pauseOrUnregisterProxy(CacheClientProxy.java:2813) + * com.gemstone.gemfire.internal.cache.tier.sockets.CacheClientProxy$MessageDispatcher.run(CacheClientProxy.java:2692) + * + *

+ * This is because message dispatcher may get an IOException with + * "Proxy closing due to socket being closed locally" during/after + * terminateDispatching(false) above. + */ + Object task = _durableExpirationTask.getAndSet(null); + if (task != null) { + ((SystemTimerTask)task).cancel(); + } + } + + }; + if(this._durableExpirationTask.compareAndSet(null, task)) { + _cache.getCCPTimer().schedule(task, + getDurableTimeout()*1000L); + } + } + + protected void cancelDurableExpirationTask(boolean logMessage) { + SystemTimer.SystemTimerTask task = (SystemTimerTask) _durableExpirationTask.getAndSet(null); + if (task != null) { + if (logMessage) { + logger.info(LocalizedMessage.create(LocalizedStrings.CacheClientProxy_0_CANCELLING_EXPIRATION_TASK_SINCE_THE_CLIENT_HAS_RECONNECTED, this)); + } + task.cancel(); + } + } + + /** + * Class ClientInterestList provides a convenient interface + * for manipulating client interest information. + */ + static protected class ClientInterestList + { + + final CacheClientProxy ccp; + + final Object id; + + /** + * An object used for synchronizing the interest lists + */ + final private Object interestListLock = new Object(); + + /** + * Regions that this client is interested in + */ + final protected Set regions = new HashSet(); + + /** + * Constructor. + */ + protected ClientInterestList(CacheClientProxy ccp, Object interestID) { + this.ccp = ccp; + this.id = interestID; + // this.id = getNextId(); + } + + /** + * Registers interest in the input region name and key + */ + protected void registerClientInterest(String regionName, + Object keyOfInterest, int interestType, boolean sendUpdatesAsInvalidates) + { + if (logger.isDebugEnabled()) { + logger.debug("{}: registerClientInterest region={} key={}", ccp, regionName, keyOfInterest); + } + Set keysRegistered = null; + synchronized(this.interestListLock) { + LocalRegion r = (LocalRegion)this.ccp._cache.getRegion(regionName, true); + if (r == null) { + throw new RegionDestroyedException("Region could not be found for interest registration", regionName); + } + if ( ! (r instanceof CacheDistributionAdvisee) ) { + throw new IllegalArgumentException("region " + regionName + " is not distributed and does not support interest registration"); + } + FilterProfile p = r.getFilterProfile(); + keysRegistered = p.registerClientInterest(id, keyOfInterest, interestType, sendUpdatesAsInvalidates); + regions.add(regionName); + } + // Perform actions if any keys were registered + if ((keysRegistered != null) && containsInterestRegistrationListeners() + && !keysRegistered.isEmpty()) { + handleInterestEvent(regionName, keysRegistered, interestType, true); + } + } + + + protected FilterProfile getProfile(String regionName) { + try { + return this.ccp._cache.getFilterProfile(regionName); + } catch (CacheClosedException e) { + return null; + } + } + + /** + * Unregisters interest in the input region name and key + * + * @param regionName + * The fully-qualified name of the region in which to unregister + * interest + * @param keyOfInterest + * The key in which to unregister interest + */ + protected void unregisterClientInterest(String regionName, + Object keyOfInterest, int interestType) + { + if (logger.isDebugEnabled()) { + logger.debug("{}: unregisterClientInterest region={} key={}", ccp, regionName, keyOfInterest); + } + FilterProfile p = getProfile(regionName); + Set keysUnregistered = null; + synchronized(this.interestListLock) { + if (p != null) { + keysUnregistered = p.unregisterClientInterest( + id, keyOfInterest, interestType); + if (!p.hasInterestFor(id)) { + this.regions.remove(regionName); + } + } else { + this.regions.remove(regionName); + } + } + if (keysUnregistered != null && !keysUnregistered.isEmpty()) { + handleInterestEvent(regionName, keysUnregistered, interestType, false); + } + } + + /** + * Registers interest in the input region name and list of keys + * + * @param regionName + * The fully-qualified name of the region in which to register + * interest + * @param keysOfInterest + * The list of keys in which to register interest + */ + protected void registerClientInterestList(String regionName, + List keysOfInterest, boolean sendUpdatesAsInvalidates) { + FilterProfile p = getProfile(regionName); + if (p == null) { + throw new RegionDestroyedException("Region not found during client interest registration", regionName); + } + Set keysRegistered = null; + synchronized(this.interestListLock) { + keysRegistered = p.registerClientInterestList(id, keysOfInterest, sendUpdatesAsInvalidates); + regions.add(regionName); + } + // Perform actions if any keys were registered + if (containsInterestRegistrationListeners() && !keysRegistered.isEmpty()) { + handleInterestEvent(regionName, keysRegistered, InterestType.KEY, true); + } + } + + /** + * Unregisters interest in the input region name and list of keys + * + * @param regionName + * The fully-qualified name of the region in which to unregister + * interest + * @param keysOfInterest + * The list of keys in which to unregister interest + */ + protected void unregisterClientInterestList(String regionName, + List keysOfInterest) + { + FilterProfile p = getProfile(regionName); + Set keysUnregistered = null; + synchronized(this.interestListLock) { + if (p != null) { + keysUnregistered = p.unregisterClientInterestList( + id, keysOfInterest); + if (!p.hasInterestFor(id)) { + regions.remove(regionName); + } + } else { + regions.remove(regionName); + } + } + // Perform actions if any keys were unregistered + if (!keysUnregistered.isEmpty()) { + handleInterestEvent(regionName, keysUnregistered, InterestType.KEY,false); + } + } + + /* + * Returns whether this interest list has any keys, patterns or filters of + * interest. It answers the question: Are any clients being notified because + * of this interest list? @return whether this interest list has any keys, + * patterns or filters of interest + */ + protected boolean hasInterest() { + return regions.size() > 0; + } + + protected void clearClientInterestList() { + boolean isClosed = ccp.getCache().isClosed(); + + synchronized(this.interestListLock) { + for (String regionName: regions) { + FilterProfile p = getProfile(regionName); + if (p == null) { + continue; + } + if (!isClosed) { + if (p.hasAllKeysInterestFor(id)) { + Set allKeys = new HashSet(); + allKeys.add(".*"); + allKeys = Collections.unmodifiableSet(allKeys); + handleInterestEvent(regionName, allKeys, + InterestType.REGULAR_EXPRESSION, false); + } + Set keysOfInterest = p.getKeysOfInterestFor(id); + if (keysOfInterest != null && keysOfInterest.size() > 0) { + handleInterestEvent(regionName, keysOfInterest, + InterestType.KEY, false); + } + Map patternsOfInterest = + p.getPatternsOfInterestFor(id); + if (patternsOfInterest != null && patternsOfInterest.size() > 0) { + handleInterestEvent(regionName, patternsOfInterest.keySet(), + InterestType.REGULAR_EXPRESSION, false); + } + } + p.clearInterestFor(id); + } + regions.clear(); + } + } + + + private void handleInterestEvent(String regionName, Set keysOfInterest, + int interestType, boolean isRegister) { + // Notify the region about this register interest event if: + // - the application has requested it + // - this is a primary CacheClientProxy (otherwise multiple notifications + // may occur) + // - it is a key interest type (regex is currently not supported) + InterestRegistrationEvent event = null; + if (NOTIFY_REGION_ON_INTEREST && this.ccp.isPrimary() + && interestType == InterestType.KEY) { + event = new InterestRegistrationEventImpl(this.ccp, regionName, + keysOfInterest, interestType, isRegister); + try { + notifyRegionOfInterest(event); + } + catch (Exception e) { + logger.warn(LocalizedStrings.CacheClientProxy_REGION_NOTIFICATION_OF_INTEREST_FAILED, e); + } + } + // Invoke interest registration listeners + if (containsInterestRegistrationListeners()) { + if (event == null) { + event = new InterestRegistrationEventImpl(this.ccp, regionName, + keysOfInterest, interestType, isRegister); + } + notifyInterestRegistrationListeners(event); + } + } + + private void notifyRegionOfInterest(InterestRegistrationEvent event) { + this.ccp.getCacheClientNotifier().handleInterestEvent(event); + } + + private void notifyInterestRegistrationListeners( + InterestRegistrationEvent event) { + this.ccp.getCacheClientNotifier().notifyInterestRegistrationListeners( + event); + } + + private boolean containsInterestRegistrationListeners() { + return this.ccp.getCacheClientNotifier() + .containsInterestRegistrationListeners(); + } + } + + + /** + * Class MessageDispatcher is a Thread that + * processes messages bound for the client by taking messsages from the + * message queue and sending them to the client over the socket. + */ + static class MessageDispatcher extends Thread + { + + /** + * The queue of messages to be sent to the client + */ + protected final HARegionQueue _messageQueue; + +// /** +// * An int used to keep track of the number of messages dropped for logging +// * purposes. If greater than zero then a warning has been logged about +// * messages being dropped. +// */ +// private int _numberOfMessagesDropped = 0; + + /** + * The proxy for which this dispatcher is processing messages + */ + private final CacheClientProxy _proxy; + +// /** +// * The conflator faciliates message conflation +// */ +// protected BridgeEventConflator _eventConflator; + + /** + * Whether the dispatcher is stopped + */ + private volatile boolean _isStopped = true; + + /** + * @guarded.By _pausedLock + */ + //boolean _isPausedDispatcher = false; + + /** + * A lock object used to control pausing this dispatcher + */ + protected final Object _pausedLock = new Object(); + + /** + * An object used to protect when dispatching is being stopped. + */ + private final Object _stopDispatchingLock = new Object(); + + private final ReadWriteLock socketLock = new ReentrantReadWriteLock(); + + private final Lock socketWriteLock = socketLock.writeLock(); +// /** +// * A boolean verifying whether a warning has already been issued if the +// * message queue has reached its capacity. +// */ +// private boolean _messageQueueCapacityReachedWarning = false; + + /** + * Constructor. + * + * @param proxy + * The CacheClientProxy for which this dispatcher is + * processing messages + * @param name thread name for this dispatcher + * @throws CacheException + */ + protected MessageDispatcher(CacheClientProxy proxy, String name) throws CacheException { + super(LoggingThreadGroup.createThreadGroup(name, logger), name); + + setDaemon(true); + + this._proxy = proxy; + + // Create the event conflator + // this._eventConflator = new BridgeEventConflator + + // Create the message queue + try { + HARegionQueueAttributes harq= new HARegionQueueAttributes(); + harq.setBlockingQueueCapacity(proxy._maximumMessageCount); + harq.setExpiryTime(proxy._messageTimeToLive); + ((HAContainerWrapper)proxy._cacheClientNotifier.getHaContainer()) + .putProxy(HARegionQueue.createRegionName(getProxy() + .getHARegionName()), getProxy()); + boolean createDurableQueue = proxy.proxyID.isDurable(); + boolean canHandleDelta = (proxy.clientVersion.compareTo(Version.GFE_61) >= 0) + && InternalDistributedSystem.getAnyInstance().getConfig() + .getDeltaPropagation() + && !(this._proxy.clientConflation == HandShake.CONFLATION_ON); + if ((createDurableQueue || canHandleDelta) && logger.isDebugEnabled()) { + logger.debug("Creating a durable HA queue"); + } + this._messageQueue = + HARegionQueue.getHARegionQueueInstance( + getProxy().getHARegionName(), getCache(), harq, + HARegionQueue.BLOCKING_HA_QUEUE, createDurableQueue, + proxy._cacheClientNotifier.getHaContainer(), + proxy.getProxyID(), + this._proxy.clientConflation, + this._proxy.isPrimary(), canHandleDelta); + // Check if interests were registered during HARegion GII. + if (this._proxy.hasRegisteredInterested()) { + this._messageQueue.setHasRegisteredInterest(true); + } + } + catch (CancelException e) { + throw e; + } + catch (RegionExistsException ree) { + throw ree; + } + catch (Exception e) { + getCache().getCancelCriterion().checkCancelInProgress(e); + throw new CacheException(LocalizedStrings.CacheClientProxy_EXCEPTION_OCCURRED_WHILE_TRYING_TO_CREATE_A_MESSAGE_QUEUE.toLocalizedString(), e) { + private static final long serialVersionUID = 0L;}; + } + } + + private CacheClientProxy getProxy() { + return this._proxy; + } + private GemFireCacheImpl getCache() { + return getProxy().getCache(); + } + private Socket getSocket() { + return getProxy().getSocket(); + } + private ByteBuffer getCommBuffer() { + return getProxy().getCommBuffer(); + } + private CacheClientProxyStats getStatistics() { + return getProxy().getStatistics(); + } + + private void basicStopDispatching() { + if (logger.isDebugEnabled()) { + logger.debug("{}: notified dispatcher to stop", this); + } + this._isStopped = true; + // this.interrupt(); // don't interrupt here. Let close(boolean) do this. + } + + @Override + public String toString() { + return getProxy().toString(); + } + + /** + * Notifies the dispatcher to stop dispatching. + * + * @param checkQueue + * Whether to check the message queue for any unprocessed messages + * and process them for MAXIMUM_SHUTDOWN_PEEKS. + * + * @see CacheClientProxy#MAXIMUM_SHUTDOWN_PEEKS + */ + protected synchronized void stopDispatching(boolean checkQueue) + { + if (isStopped()) { + return; + } + + if (logger.isDebugEnabled()) { + logger.debug("{}: Stopping dispatching", this); + } + if (!checkQueue) { + basicStopDispatching(); + return; + } + + // Stay alive until the queue is empty or a number of peeks is reached. + List events = null; + try { + for (int numberOfPeeks = 0; numberOfPeeks < MAXIMUM_SHUTDOWN_PEEKS; + ++numberOfPeeks) { + boolean interrupted = Thread.interrupted(); + try { + events = this._messageQueue.peek(1, -1); + if (events == null || events.size() == 0) { + break; + } + if (logger.isDebugEnabled()){ + logger.debug("Waiting for client to drain queue: {}", _proxy.proxyID); + } + Thread.sleep(500); + } + catch (InterruptedException e) { + interrupted = true; + /*GemFireCache c = (GemFireCache)_cache; + c.getDistributedSystem().getCancelCriterion().checkCancelInProgress(e);*/ + } + catch (CancelException e) { + break; + } + catch (CacheException e) { + if (logger.isDebugEnabled()) { + logger.debug("{}: Exception occurred while trying to stop dispatching", this, e); + } + } + finally { + if (interrupted) Thread.currentThread().interrupt(); + } + } // for + } + finally { + basicStopDispatching(); + } + } + + /** + * Returns whether the dispatcher is stopped + * + * @return whether the dispatcher is stopped + */ + protected boolean isStopped() + { + return this._isStopped; + } + + /** + * Returns the size of the queue for heuristic purposes. This size may be + * changing concurrently if puts / gets are occurring at the same time. + * + * @return the size of the queue + */ + protected int getQueueSize() + { + return this._messageQueue == null ? 0 : this._messageQueue.size(); + } + + /** + * Returns the size of the queue calculated through stats + * This includes events that have dispatched but have yet been removed + * @return the size of the queue + */ + protected int getQueueSizeStat() + { + if (this._messageQueue != null) { + HARegionQueueStats stats = this._messageQueue.getStatistics(); + return ((int)(stats.getEventsEnqued() - stats.getEventsRemoved() - stats.getEventsConflated() - stats.getMarkerEventsConflated() - stats.getEventsExpired() - stats.getEventsRemovedByQrm() - stats.getEventsTaken() - stats.getNumVoidRemovals())); + } + return 0; + } + + protected void drainClientCqEvents(ClientProxyMembershipID clientId, InternalCqQuery cqToClose) { + this._messageQueue.closeClientCq(clientId, cqToClose); + } + + /** + * Runs the dispatcher by taking a message from the queue and sending it to + * the client attached to this proxy. + */ + @Override + public void run() + { + boolean exceptionOccured = false; + this._isStopped = false; + + if (logger.isDebugEnabled()) { + logger.debug("{}: Beginning to process events", this); + } + // for testing purposes + if (isSlowStartForTesting) { + long slowStartTimeForTesting = Long.getLong(KEY_SLOW_START_TIME_FOR_TESTING, + DEFAULT_SLOW_STARTING_TIME).longValue(); + long elapsedTime = 0; + long startTime = System.currentTimeMillis(); + while ((slowStartTimeForTesting > elapsedTime) && isSlowStartForTesting) { + try { + Thread.sleep(500); + } + catch (InterruptedException ignore) { + if (logger.isDebugEnabled()) { + logger.debug("Slow start for testing interrupted"); + } + break; + } + elapsedTime = System.currentTimeMillis() - startTime; + } + if(slowStartTimeForTesting < elapsedTime) { + isSlowStartForTesting = false; + } + } + + ClientMessage clientMessage = null; + while (!isStopped()) { +// SystemFailure.checkFailure(); DM's stopper does this + if (this._proxy._cache.getCancelCriterion().cancelInProgress() != null) { + break; + } + try { + // If paused, wait to be told to resume (or interrupted if stopped) + if (getProxy().isPaused()) { + try { + // ARB: Before waiting for resumption, process acks from client. + // This will reduce the number of duplicates that a client receives after + // reconnecting. + if (this._messageQueue.size() > 0) { + Thread.sleep(50); + } + logger.info("available ids = " + this._messageQueue.size()+ " , isEmptyAckList =" + this._messageQueue.isEmptyAckList() + + ", peekInitialized = " + this._messageQueue.isPeekInitialized()); + while (!this._messageQueue.isEmptyAckList()&& this._messageQueue.isPeekInitialized()) { + this._messageQueue.remove(); + } + } + catch (InterruptedException ex) { + logger.warn(LocalizedMessage.create(LocalizedStrings.CacheClientProxy_0_SLEEP_INTERRUPTED, this)); + } + waitForResumption(); + } + try { + clientMessage = (ClientMessage)this._messageQueue.peek(); + } + catch (RegionDestroyedException skipped) { + break; + } + getStatistics().setQueueSize(this._messageQueue.size()); + if (isStopped()) { + break; + } + // Process the message + long start = getStatistics().startTime(); + //// BUGFIX for BUG#38206 and BUG#37791 + boolean isDispatched = dispatchMessage(clientMessage); + getStatistics().endMessage(start); + if(isDispatched){ + this._messageQueue.remove(); + if (clientMessage instanceof ClientMarkerMessageImpl) { + getProxy().markerEnqueued = false; + } + } + clientMessage = null; + } + catch (IOException e) { + // Added the synchronization below to ensure that exception handling + // does not occur while stopping the dispatcher and vice versa. + synchronized (this._stopDispatchingLock) { + // An IOException occurred while sending a message to the + // client. If the processor is not already stopped, assume + // the client is dead and stop processing. + if (!isStopped() && !getProxy().isPaused()) { + if ("Broken pipe".equals(e.getMessage())) { + logger.warn(LocalizedMessage.create(LocalizedStrings.CacheClientProxy_0_PROXY_CLOSING_DUE_TO_UNEXPECTED_BROKEN_PIPE_ON_SOCKET_CONNECTION, this)); + } else if ("Connection reset".equals(e.getMessage())) { + logger.warn(LocalizedMessage.create(LocalizedStrings.CacheClientProxy_0_PROXY_CLOSING_DUE_TO_UNEXPECTED_RESET_ON_SOCKET_CONNECTION, this)); + } + else if ("Connection reset by peer".equals(e.getMessage())) { + logger.warn(LocalizedMessage.create(LocalizedStrings.CacheClientProxy_0_PROXY_CLOSING_DUE_TO_UNEXPECTED_RESET_BY_PEER_ON_SOCKET_CONNECTION, this)); + } + else if ("Socket is closed".equals(e.getMessage()) || "Socket Closed".equals(e.getMessage())) { + logger.info(LocalizedMessage.create(LocalizedStrings.CacheClientProxy_0_PROXY_CLOSING_DUE_TO_SOCKET_BEING_CLOSED_LOCALLY, this)); + } + else { + logger.warn(LocalizedMessage.create(LocalizedStrings.CacheClientProxy_0_AN_UNEXPECTED_IOEXCEPTION_OCCURRED_SO_THE_PROXY_WILL_BE_CLOSED, this), e); + } + // Let the CacheClientNotifier discover the proxy is not alive. + // See isAlive(). + // getProxy().close(false); + + pauseOrUnregisterProxy(); + } // _isStopped + } // synchronized + exceptionOccured = true; + } // IOException + catch (InterruptedException e) { + // If the thread is paused, ignore the InterruptedException and + // continue. The proxy is null if stopDispatching has been called. + if (getProxy().isPaused()) { + if (logger.isDebugEnabled()) { + logger.debug("{}: interrupted because it is being paused. It will continue and wait for resumption.", this); + } + Thread.interrupted(); + continue; + } + + // no need to reset the bit; we're exiting + if (logger.isDebugEnabled()) { + logger.debug("{}: interrupted", this); + } + break; + } + catch (CancelException e) { + if (logger.isDebugEnabled()) { + logger.debug("{}: shutting down due to cancellation", this); + } + exceptionOccured = true; // message queue is defunct, don't try to read it. + break; + } + catch (RegionDestroyedException e) { + if (logger.isDebugEnabled()) { + logger.debug("{}: shutting down due to loss of message queue", this); + } + exceptionOccured = true; // message queue is defunct, don't try to read it. + break; + } + catch (Exception e) { + // An exception occured while processing a message. Since it + // is not an IOException, the client may still be alive, so + // continue processing. + if (!isStopped()) { + logger.fatal(LocalizedMessage.create(LocalizedStrings.CacheClientProxy_0__AN_UNEXPECTED_EXCEPTION_OCCURRED, this), e); + } + } + } + + // Processing gets here if isStopped=true. What is this code below doing? + List list = null; + if(!exceptionOccured) { + try { + // Clear the interrupt status if any, + Thread.interrupted(); + int size = this._messageQueue.size(); + list = this._messageQueue.peek(size); + if (logger.isDebugEnabled()) { + logger.debug("{}: After flagging the dispatcher to stop , the residual List of messages to be dispatched={} size={}", this, list, list.size()); + } + if (list.size() > 0) { + long start = getStatistics().startTime(); + Iterator itr = list.iterator(); + while (itr.hasNext()) { + dispatchMessage((ClientMessage)itr.next()); + getStatistics().endMessage(start); + // @todo asif: shouldn't we call itr.remove() since the current msg + // has been sent? That way list will be more accurate + // if we have an exception. + } + this._messageQueue.remove(); + } + } + catch (CancelException e) { + if (logger.isDebugEnabled()) { + logger.debug("CacheClientNotifier stopped due to cancellation"); + } + } + catch (Exception ignore) { + //if (logger.isInfoEnabled()) { + StringId extraMsg = null; + + if ("Broken pipe".equals(ignore.getMessage())) { + extraMsg = LocalizedStrings.CacheClientProxy_PROBLEM_CAUSED_BY_BROKEN_PIPE_ON_SOCKET; + } + else if (ignore instanceof RegionDestroyedException) { + extraMsg = LocalizedStrings.CacheClientProxy_PROBLEM_CAUSED_BY_MESSAGE_QUEUE_BEING_CLOSED; + } + final Object[] msgArgs = new Object[] { + ((!isStopped()) ? this.toString() + ": " : ""), + ((list == null) ? 0 : list.size())}; + if (extraMsg != null) { + //Dont print exception details, but add on extraMsg + logger.info(LocalizedMessage.create(LocalizedStrings.CacheClientProxy_0_POSSIBILITY_OF_NOT_BEING_ABLE_TO_SEND_SOME_OR_ALL_THE_MESSAGES_TO_CLIENTS_TOTAL_MESSAGES_CURRENTLY_PRESENT_IN_THE_LIST_1, msgArgs)); + logger.info(extraMsg); + } else { + //Print full stacktrace + logger.info(LocalizedMessage.create(LocalizedStrings.CacheClientProxy_0_POSSIBILITY_OF_NOT_BEING_ABLE_TO_SEND_SOME_OR_ALL_THE_MESSAGES_TO_CLIENTS_TOTAL_MESSAGES_CURRENTLY_PRESENT_IN_THE_LIST_1, msgArgs), ignore); + } + } + + if (list != null && logger.isTraceEnabled()) { + logger.trace("Messages remaining in the list are: {}", list); + } + + //} + } + if (logger.isTraceEnabled()) { + logger.trace("{}: Dispatcher thread is ending", this); + } + + } + + private void pauseOrUnregisterProxy() { + if (getProxy().isDurable()) { + try { + getProxy().pauseDispatching(); + } catch (Exception ex) { + // see bug 40611; we catch Exception here because + // we once say an InterruptedException here. + // log a warning saying we couldn't pause? + if (logger.isDebugEnabled()) { + logger.debug("{}: {}", this, ex); + } + } + } + else { + this._isStopped = true; + } + + // Stop the ServerConnections. This will force the client to + // server communication to close. + ClientHealthMonitor chm = ClientHealthMonitor.getInstance(); + + // Note now that _proxy is final the following comment is no + // longer true. the _isStopped check should be sufficient. + // Added the test for this._proxy != null to prevent bug 35801. + // The proxy could have been stopped after this IOException has + // been caught and here, so the _proxy will be null. + if (chm != null) { + ClientProxyMembershipID proxyID = getProxy().proxyID; + chm.removeAllConnectionsAndUnregisterClient(proxyID); + if (!getProxy().isDurable()) { + getProxy().getCacheClientNotifier().unregisterClient(proxyID, false); + } + } + } + + /** + * Sends a message to the client attached to this proxy + * + * @param clientMessage + * The ClientMessage to send to the client + * + * @throws IOException + */ + protected boolean dispatchMessage(ClientMessage clientMessage) + throws IOException + { + boolean isDispatched = false ; + if (logger.isTraceEnabled(LogMarker.BRIDGE_SERVER)) { + logger.trace(LogMarker.BRIDGE_SERVER, "Dispatching {}", clientMessage); + } + Message message = null; + + // byte[] latestValue = + // this._eventConflator.getLatestValue(clientMessage); + + if (clientMessage instanceof ClientUpdateMessage) { + byte[] latestValue = (byte[])((ClientUpdateMessage)clientMessage).getValue(); + if (logger.isTraceEnabled()) { + StringBuilder msg = new StringBuilder(100); + msg.append(this).append(": Using latest value: ").append(Arrays.toString(latestValue)); + if (((ClientUpdateMessage)clientMessage).valueIsObject()) { + if (latestValue != null) { + msg.append(" (").append(deserialize(latestValue)).append(")"); + } + msg.append(" for ").append(clientMessage); + } + logger.trace(msg.toString()); + } + + message = ((ClientUpdateMessageImpl)clientMessage).getMessage(getProxy(), + latestValue); + + if (AFTER_MESSAGE_CREATION_FLAG) { + ClientServerObserver bo = ClientServerObserverHolder.getInstance(); + bo.afterMessageCreation(message); + } + } + else { + message = clientMessage.getMessage(getProxy(), true /* notify */); + } + + // ////////////////////////////// + // TEST CODE BEGIN (Throws exception to test closing proxy) + // if (true) throw new IOException("test"); + // TEST CODE END + // ////////////////////////////// + // Message message = ((ClientUpdateMessageImpl)clientMessage).getMessage(getProxy().proxyID, latestValue); + //Message message = clientMessage.getMessage(); removed during merge. + // BugFix for BUG#38206 and BUG#37791 + if (!this._proxy.isPaused()) { + sendMessage(message); + + // ////////////////////////////// + // TEST CODE BEGIN (Throws exception to test closing proxy) + // if (true) throw new IOException("test"); + // TEST CODE END + // ////////////////////////////// + //Message message = ((ClientUpdateMessageImpl)clientMessage).getMessage(getProxy().proxyID, latestValue); + //Message message = clientMessage.getMessage(); removed during merge. + //message.setComms(getSocket(), getCommBuffer(), getStatistics()); + //message.send(); + + // ////////////////////////////// + // TEST CODE BEGIN (Introduces random wait in client) + // Sleep a random number of ms + // java.util.Random rand = new java.util.Random(); + // try {Thread.sleep(rand.nextInt(5));} catch (InterruptedException e) {} + // TEST CODE END + // ////////////////////////////// + + if (logger.isTraceEnabled()) { + logger.trace("{}: Dispatched {}", this, clientMessage); + } + isDispatched = true; + } + else { + if (logger.isDebugEnabled()) { + logger.debug("Message Dispatcher of a Paused CCProxy is trying to dispatch message"); + } + } + if (isDispatched) { + this._messageQueue.getStatistics().incEventsDispatched(); + } + return isDispatched; + } + + private void sendMessage(Message message) throws IOException { + if (message == null) { + return; + } + this.socketWriteLock.lock(); + try { + message.setComms(getSocket(), getCommBuffer(), getStatistics()); + message.send(); + getProxy().resetPingCounter(); + } finally { + this.socketWriteLock.unlock(); + } + } + + /** + * Add the input client message to the message queue + * + * @param clientMessage + * The Conflatable to add to the queue + */ + protected void enqueueMessage(Conflatable clientMessage) + { + try { + this._messageQueue.put(clientMessage); + if(this._proxy.isPaused() && this._proxy.isDurable()){ + this._proxy._cacheClientNotifier._statistics.incEventEnqueuedWhileClientAwayCount(); + if (logger.isDebugEnabled()) { + logger.debug("{}: Queued message while Durable Client is away {}", this, clientMessage); + } + } else { +// [bruce] we don't really know that it was added, so don't log this +// if (logger.isDebugEnabled() || BridgeServerImpl.VERBOSE) { +// logger.debug(LocalizedStrings.DEBUG, this + " added message to queue: " + clientMessage); +// } + } + } + catch (CancelException e) { + throw e; + } + catch (Exception e) { + if (!isStopped()) { + this._proxy._statistics.incMessagesFailedQueued(); + logger.fatal(LocalizedMessage.create(LocalizedStrings.CacheClientProxy_0_EXCEPTION_OCCURRED_WHILE_ATTEMPTING_TO_ADD_MESSAGE_TO_QUEUE, this), e); + } + } + } + + + protected void enqueueMarker(ClientMessage message) { + try { + if (logger.isDebugEnabled()) { + logger.debug("{}: Queueing marker message. <{}>. The queue contains {} entries.", this, message, getQueueSize()); + } + this._messageQueue.put(message); + if (logger.isDebugEnabled()) { + logger.debug("{}: Queued marker message. The queue contains {} entries.", this, getQueueSize()); + } + } + catch (CancelException e) { + throw e; + } + catch (Exception e) { + if (!isStopped()) { + logger.fatal(LocalizedMessage.create(LocalizedStrings.CacheClientProxy_0__EXCEPTION_OCCURRED_WHILE_ATTEMPTING_TO_ADD_MESSAGE_TO_QUEUE, this), e); + } + } + } + + private void sendMessageDirectly(ClientMessage clientMessage) { + Message message; + try { + if (logger.isDebugEnabled()) { + logger.debug("{}: Dispatching directly: {}", this, clientMessage); + } + message = clientMessage.getMessage(getProxy(), true); + sendMessage(message); + if (logger.isDebugEnabled()) { + logger.debug("{}: Dispatched directly: {}", this, clientMessage); + } + // The exception handling code was modeled after the MessageDispatcher + // run method + } catch (IOException e) { + synchronized (this._stopDispatchingLock) { + // Pause or unregister proxy + if (!isStopped() && !getProxy().isPaused()) { + logger.fatal(LocalizedMessage.create(LocalizedStrings.CacheClientProxy_0__AN_UNEXPECTED_EXCEPTION_OCCURRED, this), e); + pauseOrUnregisterProxy(); + } + } + } catch (Exception e) { + if (!isStopped()) { + logger.fatal(LocalizedMessage.create(LocalizedStrings.CacheClientProxy_0__AN_UNEXPECTED_EXCEPTION_OCCURRED, this), e); + } + } + } + + protected void waitForResumption() throws InterruptedException { + synchronized (this._pausedLock) { + logger.info(LocalizedMessage.create(LocalizedStrings.CacheClientProxy_0__PAUSING_PROCESSING, this)); + if (!getProxy().isPaused()) { + return; + } + while (getProxy().isPaused()) { + this._pausedLock.wait(); + } + // Fix for #48571 + _messageQueue.clearPeekedIDs(); + } + } + + protected void resumeDispatching() { + logger.info(LocalizedMessage.create(LocalizedStrings.CacheClientProxy_0__RESUMING_PROCESSING, this)); + + // Notify thread to resume + this._pausedLock.notifyAll(); + } + + protected Object deserialize(byte[] serializedBytes) + { + Object deserializedObject = serializedBytes; + // This is a debugging method so ignore all exceptions like + // ClassNotFoundException + try { + DataInputStream dis = new DataInputStream(new ByteArrayInputStream( + serializedBytes)); + deserializedObject = DataSerializer.readObject(dis); + } + catch (Exception e) { + } + return deserializedObject; + } + + protected void initializeTransients() + { + while (!this._messageQueue.isEmptyAckList()&& this._messageQueue.isPeekInitialized()) { + try { + this._messageQueue.remove(); + }catch(InterruptedException e){ + e.printStackTrace(); + } + } + this._messageQueue.initializeTransients(); + } + } + + /** + * Returns the current number of CQS the client installed. + * + * @return int the current count of CQs for this client + */ + public int getCqCount() { + synchronized (this) { + return this._statistics.getCqCount(); + } + } + + /** + * Increment the number of CQs the client installed + * + */ + public void incCqCount() { + synchronized (this) { + this._statistics.incCqCount(); + } + } + + /** + * Decrement the number of CQs the client installed + * + */ + public synchronized void decCqCount() { + synchronized (this) { + this._statistics.decCqCount(); + } + } + + /** + * Returns true if the client has one CQ + * + * @return true if the client has one CQ + */ + public boolean hasOneCq() { + synchronized (this) { + return this._statistics.getCqCount() == 1; + } + } + + /** + * Returns true if the client has no CQs + * + * @return true if the client has no CQs + */ + public boolean hasNoCq() { + synchronized (this) { + return this._statistics.getCqCount() == 0; + } + } + + /** + * Get map of regions with empty data policy + * + * @since 6.1 + */ + public Map getRegionsWithEmptyDataPolicy() { + return regionsWithEmptyDataPolicy; + } + + public int incrementAndGetPingCounter() { + int pingCount = this.pingCounter.incrementAndGet(); + return pingCount; + } + + public void resetPingCounter() { + this.pingCounter.set(0); + } + + /** + * Returns the number of seconds that have elapsed since the Client proxy + * created. + * + * @since 7.0 + */ + public long getUpTime() { + return (long) ((System.currentTimeMillis() - this.creationDate.getTime()) / 1000); + } + + public interface TestHook { + public void doTestHook(String spot); + } + public static TestHook testHook; +} diff --git a/gemfire-core/src/main/java/com/gemstone/gemfire/internal/cache/tier/sockets/Message.java b/gemfire-core/src/main/java/com/gemstone/gemfire/internal/cache/tier/sockets/Message.java new file mode 100755 index 000000000000..aaca286dfd0f --- /dev/null +++ b/gemfire-core/src/main/java/com/gemstone/gemfire/internal/cache/tier/sockets/Message.java @@ -0,0 +1,1101 @@ +/* + * 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 com.gemstone.gemfire.internal.cache.tier.sockets; + +import java.io.EOFException; +import java.io.IOException; +import java.io.InputStream; +import java.io.OutputStream; +import java.net.Socket; +import java.net.SocketTimeoutException; +import java.nio.ByteBuffer; +import java.nio.channels.SocketChannel; +import java.util.concurrent.Semaphore; +import java.util.concurrent.TimeUnit; + +import org.apache.logging.log4j.Logger; + +import com.gemstone.gemfire.SerializationException; +import com.gemstone.gemfire.internal.Assert; +import com.gemstone.gemfire.internal.HeapDataOutputStream; +import com.gemstone.gemfire.internal.SocketUtils; +import com.gemstone.gemfire.internal.Version; +import com.gemstone.gemfire.internal.cache.TXManagerImpl; +import com.gemstone.gemfire.internal.cache.tier.MessageType; +import com.gemstone.gemfire.internal.i18n.LocalizedStrings; +import com.gemstone.gemfire.internal.logging.LogService; +import com.gemstone.gemfire.internal.logging.log4j.LocalizedMessage; +import com.gemstone.gemfire.internal.offheap.StoredObject; +import com.gemstone.gemfire.internal.offheap.annotations.Unretained; +import com.gemstone.gemfire.internal.util.BlobHelper; + +/** + * This class encapsulates the wire protocol. It provides accessors to + * encode and decode a message and serialize it out to the wire. + * + *

+ * msgType       - int   - 4 bytes type of message, types enumerated below
+ *
+ * msgLength     - int - 4 bytes   total length of variable length payload
+ *
+ * numberOfParts - int - 4 bytes   number of elements (LEN-BYTE* pairs)
+ *                     contained in the payload. Message can
+ *                       be a multi-part message
+ *
+ * transId       - int - 4 bytes  filled in by the requestor, copied back into
+ *                    the response
+ *
+ * flags         - byte- 1 byte   filled in by the requestor
+ * len1
+ * part1
+ * .
+ * .
+ * .
+ * lenn
+ * partn
+ * 
+ * + * We read the fixed length 16 bytes into a byte[] and populate a bytebuffer + * We read the fixed length header tokens from the header + * parse the header and use information contained in there to read the payload. + * + *

+ * + * See also package description. + * + * @see com.gemstone.gemfire.internal.cache.tier.MessageType + * + * @since 2.0.2 + */ +public class Message { + + private static final Logger logger = LogService.getLogger(); + + private static final int PART_HEADER_SIZE = 5; // 4 bytes for length, 1 byte for isObject + + private static final int FIXED_LENGTH = 17; + + private static final ThreadLocal tlCommBuffer = new ThreadLocal<>(); + + protected int msgType; + protected int payloadLength=0; + protected int numberOfParts =0; + protected int transactionId = TXManagerImpl.NOTX; + protected int currentPart = 0; + protected Part[] partsList = null; + protected ByteBuffer cachedCommBuffer; + protected Socket socket = null; + protected SocketChannel sockCh = null; + protected OutputStream os = null; + protected InputStream is = null; + protected boolean messageModified = true; + /** is this message a retry of a previously sent message? */ + protected boolean isRetry; + private byte flags = 0x00; + protected MessageStats msgStats = null; + protected ServerConnection sc = null; + private int maxIncomingMessageLength = -1; + private Semaphore dataLimiter = null; +// private int MAX_MSGS = -1; + private Semaphore msgLimiter = null; + private boolean hdrRead = false; + private int chunkSize = 1024;//Default Chunk Size. + + protected Part securePart = null; + private boolean isMetaRegion = false; + + + // These two statics are fields shoved into the flags byte for transmission. + // The MESSAGE_IS_RETRY bit is stripped out during deserialization but the other + // is left in place + public static final byte MESSAGE_HAS_SECURE_PART = (byte)0x02; + public static final byte MESSAGE_IS_RETRY = (byte)0x04; + + public static final byte MESSAGE_IS_RETRY_MASK = (byte)0xFB; + + // Tentative workaround to avoid OOM stated in #46754. + public static final ThreadLocal messageType = new ThreadLocal(); + + Version version; + + /** + * Creates a new message with the given number of parts + */ + public Message(int numberOfParts, Version destVersion) { + this.version = destVersion; + Assert.assertTrue(destVersion != null, "Attempt to create an unversioned message"); + partsList = new Part[numberOfParts]; + this.numberOfParts = numberOfParts; + for (int i=0;i this.partsList.length) { + Part[] newPartsList = new Part[numberOfParts]; + for (int i=0;ibyte + * array (as opposed to a serialized object). + * + * @see #addPart(byte[], boolean) + */ + public void addBytesPart(byte[] newPart) { + addRawPart(newPart, false); + } + + public void addStringOrObjPart(Object o) { + if (o instanceof String || o == null) { + addStringPart((String)o); + } else { + // Note even if o is a byte[] we need to serialize it. + // This could be cleaned up but it would require C client code to change. + serializeAndAddPart(o, false); + } + } + + public void addDeltaPart(HeapDataOutputStream hdos) { + this.messageModified = true; + Part part = partsList[this.currentPart]; + part.setPartState(hdos, false); + this.currentPart++; + } + + public void addObjPart(Object o) { + addObjPart(o, false); + } + /** + * Like addObjPart(Object) but also prefers to reference + * objects in the part instead of copying them into a byte buffer. + */ + public void addObjPartNoCopying(Object o) { + if (o == null || o instanceof byte[]) { + addRawPart((byte[])o, false); + } else { + serializeAndAddPartNoCopying(o); + } + } + public void addObjPart(Object o, boolean zipValues) { + if (o == null || o instanceof byte[]) { + addRawPart((byte[])o, false); + } else { + serializeAndAddPart(o, zipValues); + } + } + public void addPartInAnyForm(@Unretained Object o, boolean isObject) { + if (o == null) { + addRawPart((byte[])o, false); + } else if (o instanceof byte[]) { + addRawPart((byte[])o, isObject); + } else if (o instanceof StoredObject) { + // It is possible it is an off-heap StoredObject that contains a simple non-object byte[]. + this.messageModified = true; + Part part = partsList[this.currentPart]; + part.setPartState((StoredObject)o, isObject); + this.currentPart++; + } else { + serializeAndAddPart(o, false); + } + } + + private void serializeAndAddPartNoCopying(Object o) { + HeapDataOutputStream hdos; + Version v = version; + if (version.equals(Version.CURRENT)){ + v = null; + } + // create the HDOS with a flag telling it that it can keep any byte[] or ByteBuffers/ByteSources passed to it. + hdos = new HeapDataOutputStream(chunkSize, v, true); + // TODO OFFHEAP: Change Part to look for an HDOS and just pass a reference to its DirectByteBuffer. + // Then change HDOS sendTo(SocketChannel...) to use the GatheringByteChannel to write a bunch of bbs. + // TODO OFFHEAP This code optimizes one part which works pretty good for getAll since all the values are + // returned in one part. But the following seems even better... + // BETTER: change Message to consolidate all the part hdos bb lists into a single bb array and have it do the GatheringByteChannel write. + // Message can use slice for the small parts (msg header and part header) that are not in the parts data (its a byte array, Chunk, or HDOS). + // EVEN BETTER: the message can have a single HDOS which owns a direct comm buffer. It can reserve space if it does not yet know the value to write (for example the size of the message or part). + // If we write something to the HDOS that is direct then it does not need to be copied. + // But large heap byte arrays will need to be copied to the hdos (the socket write does this anyway). + // If the direct buffer is full then we can allocate another one. If a part is already in a heap byte array + // then we could defer copying it by slicing the current direct bb and then adding the heap byte array + // as bb using ByteBuffer.wrap. Once we have all the data in the HDOS we can finally generate the header + // and then start working on sending the ByteBuffers to the channel. If we have room in a direct bb then + // we can copy a heap bb to it. Otherwise we can write the bb ahead of it which would free up room to copy + // the heap bb to the existing direct bb without needing to allocate extra direct bbs. + // Delaying the flush uses more direct memory but reduces the number of system calls. + try { + BlobHelper.serializeTo(o, hdos); + } catch (IOException ex) { + throw new SerializationException("failed serializing object", ex); + } + this.messageModified = true; + Part part = partsList[this.currentPart]; + part.setPartState(hdos, true); + this.currentPart++; + + } + + private void serializeAndAddPart(Object o, boolean zipValues) { + if (zipValues) { + throw new UnsupportedOperationException("zipValues no longer supported"); + + } else { + HeapDataOutputStream hdos; + Version v = version; + if (version.equals(Version.CURRENT)){ + v = null; + } + hdos = new HeapDataOutputStream(chunkSize, v); + try { + BlobHelper.serializeTo(o, hdos); + } catch (IOException ex) { + throw new SerializationException("failed serializing object", ex); + } + this.messageModified = true; + Part part = partsList[this.currentPart]; + part.setPartState(hdos, true); + this.currentPart++; + } + } + + public void addIntPart(int v) { + this.messageModified = true; + Part part = partsList[this.currentPart]; + part.setInt(v); + this.currentPart++; + } + + public void addLongPart(long v) { + this.messageModified = true; + Part part = partsList[this.currentPart]; + part.setLong(v); + this.currentPart++; + } + + /** + * Adds a new part to this message that may contain a serialized + * object. + */ + public void addRawPart(byte[] newPart,boolean isObject) { + this.messageModified = true; + Part part = partsList[this.currentPart]; + part.setPartState(newPart, isObject); + this.currentPart++; + } + + public int getMessageType() { + return this.msgType; + } + + public int getPayloadLength() { + return this.payloadLength; + } + + public int getHeaderLength() { + return FIXED_LENGTH; + } + + public int getNumberOfParts() { + return this.numberOfParts; + } + + public int getTransactionId() { + return this.transactionId; + } + + public Part getPart(int index) { + if (index < this.numberOfParts) { + Part p = partsList[index]; + if (this.version != null) { + p.setVersion(this.version); + } + return p; + } + return null; + } + + public static ByteBuffer setTLCommBuffer(ByteBuffer bb) { + ByteBuffer result = tlCommBuffer.get(); + tlCommBuffer.set(bb); + return result; + } + + public ByteBuffer getCommBuffer() { + if (this.cachedCommBuffer != null) { + return this.cachedCommBuffer; + } + else { + return tlCommBuffer.get(); + } + } + + public void clear() { + this.isRetry = false; + int len = this.payloadLength; + if (len != 0) { + this.payloadLength = 0; + } + if (this.hdrRead) { + if (this.msgStats != null) { + this.msgStats.decMessagesBeingReceived(len); + } + } + ByteBuffer buffer = getCommBuffer(); + if (buffer != null) { + buffer.clear(); + } + clearParts(); + if (len != 0 && this.dataLimiter != null) { + this.dataLimiter.release(len); + this.dataLimiter = null; + this.maxIncomingMessageLength = 0; + } + if (this.hdrRead) { + if (this.msgLimiter != null) { + this.msgLimiter.release(1); + this.msgLimiter = null; + } + this.hdrRead = false; + } + this.flags = 0; + } + + protected void packHeaderInfoForSending(int msgLen, boolean isSecurityHeader) { + //TODO:hitesh setting second bit of flags byte for client + //this is not require but this makes all changes easily at client side right now + //just see this bit and process security header + byte flagsByte = this.flags; + if (isSecurityHeader) { + flagsByte |= MESSAGE_HAS_SECURE_PART; + } + if (this.isRetry) { + flagsByte |= MESSAGE_IS_RETRY; + } + getCommBuffer() + .putInt(this.msgType) + .putInt(msgLen) + .putInt(this.numberOfParts) + .putInt(this.transactionId) + .put(flagsByte); + } + + protected Part getSecurityPart() { + if (this.sc != null ) { + //look types right put get etc + return this.sc.updateAndGetSecurityPart(); + } + return null; + } + + public void setSecurePart(byte[] bytes) { + this.securePart = new Part(); + this.securePart.setPartState(bytes, false); + } + + public void setMetaRegion(boolean isMetaRegion) { + this.isMetaRegion = isMetaRegion; + } + + public boolean getAndResetIsMetaRegion() { + boolean isMetaRegion = this.isMetaRegion; + this.isMetaRegion = false; + return isMetaRegion; + } + + /** + * Sends this message out on its socket. + */ + protected void sendBytes(boolean clearMessage) throws IOException { + if (this.sc != null) { + // Keep track of the fact that we are making progress. + this.sc.updateProcessingMessage(); + } + if (this.socket != null) { + final ByteBuffer cb = getCommBuffer(); + if (cb == null) { + throw new IOException("No buffer"); + } + synchronized(cb) { + int numOfSecureParts = 0; + Part securityPart = this.getSecurityPart(); + boolean isSecurityHeader = false; + + if (securityPart != null) { + isSecurityHeader = true; + numOfSecureParts = 1; + } + else if (this.securePart != null) { + // This is a client sending this message. + securityPart = this.securePart; + isSecurityHeader = true; + numOfSecureParts = 1; + } + + int totalPartLen = 0; + for (int i=0;i 0); + } else { + this.os.write(cb.array(), 0, cb.position()); + } + if (this.msgStats != null) { + this.msgStats.incSentBytes(cb.position()); + } + cb.clear(); + } + + private void read() + throws IOException { + clearParts(); + //TODO:Hitesh ??? for server changes make sure sc is not null as this class also used by client :( + readHeaderAndPayload(); + } + + /** + * Read the actual bytes of the header off the socket + */ + protected final void fetchHeader() throws IOException { + final ByteBuffer cb = getCommBuffer(); + cb.clear(); + // msgType is invalidated here and can be used as an indicator + // of problems reading the message + this.msgType = MessageType.INVALID; + + int hdr = 0; + + final int headerLength = getHeaderLength(); + if (this.sockCh != null) { + cb.limit(headerLength); + do { + int bytesRead = this.sockCh.read(cb); + //System.out.println("DEBUG: fetchHeader read " + bytesRead + " bytes commBuffer=" + cb); + if (bytesRead == -1) { + throw new EOFException(LocalizedStrings.Message_THE_CONNECTION_HAS_BEEN_RESET_WHILE_READING_THE_HEADER.toLocalizedString()); + } + if (this.msgStats != null) { + this.msgStats.incReceivedBytes(bytesRead); + } + } while (cb.remaining() > 0); + cb.flip(); + } else { + do { + int bytesRead = -1; + try { + bytesRead = this.is.read(cb.array(),hdr, headerLength-hdr); + } + catch (SocketTimeoutException e) { +// bytesRead = 0; + // TODO add a cancellation check + throw e; + } + if (bytesRead == -1) { + throw new EOFException(LocalizedStrings.Message_THE_CONNECTION_HAS_BEEN_RESET_WHILE_READING_THE_HEADER.toLocalizedString()); + } + hdr += bytesRead; + if (this.msgStats != null) { + this.msgStats.incReceivedBytes(bytesRead); + } + } while (hdr < headerLength); + + // now setup the commBuffer for the caller to parse it + cb.rewind(); + } + } + + private void readHeaderAndPayload() + throws IOException { + //TODO:Hitesh ??? + fetchHeader(); + final ByteBuffer cb = getCommBuffer(); + final int type = cb.getInt(); + final int len = cb.getInt(); + final int numParts = cb.getInt(); + final int txid = cb.getInt(); + byte bits = cb.get(); + cb.clear(); + + if (!MessageType.validate(type)) { + throw new IOException(LocalizedStrings.Message_INVALID_MESSAGE_TYPE_0_WHILE_READING_HEADER.toLocalizedString(Integer.valueOf(type))); + } + int timeToWait = 0; + if (this.sc != null) { + // Keep track of the fact that a message is being processed. + this.sc.setProcessingMessage(); + timeToWait = sc.getClientReadTimeout(); + } + this.hdrRead = true; + if (this.msgLimiter != null) { + for (;;) { + this.sc.getCachedRegionHelper().checkCancelInProgress(null); + boolean interrupted = Thread.interrupted(); + try { + if (timeToWait == 0) { + this.msgLimiter.acquire(1); + } + else { + if (!this.msgLimiter.tryAcquire(1, timeToWait, TimeUnit.MILLISECONDS)) { + if (this.msgStats != null + && this.msgStats instanceof CacheServerStats) { + ((CacheServerStats)this.msgStats).incConnectionsTimedOut(); + } + throw new IOException(LocalizedStrings.Message_OPERATION_TIMED_OUT_ON_SERVER_WAITING_ON_CONCURRENT_MESSAGE_LIMITER_AFTER_WAITING_0_MILLISECONDS.toLocalizedString(Integer.valueOf(timeToWait))); + } + } + break; + } + catch (InterruptedException e) { + interrupted = true; + } + finally { + if (interrupted) { + Thread.currentThread().interrupt(); + } + } + } // for + } + if (len > 0) { + if (this.maxIncomingMessageLength > 0 && len > this.maxIncomingMessageLength) { + throw new IOException(LocalizedStrings.Message_MESSAGE_SIZE_0_EXCEEDED_MAX_LIMIT_OF_1.toLocalizedString(new Object[] {Integer.valueOf(len), Integer.valueOf(this.maxIncomingMessageLength)})); + } + if (this.dataLimiter != null) { + for (;;) { + if (sc != null) { + this.sc.getCachedRegionHelper().checkCancelInProgress(null); + } + boolean interrupted = Thread.interrupted(); + try { + if (timeToWait == 0) { + this.dataLimiter.acquire(len); + } + else { + int newTimeToWait = timeToWait; + if (this.msgLimiter != null) { + // may have waited for msg limit so recalc time to wait + newTimeToWait -= (int)sc.getCurrentMessageProcessingTime(); + } + if (newTimeToWait <= 0 || !this.msgLimiter.tryAcquire(1, newTimeToWait, TimeUnit.MILLISECONDS)) { + throw new IOException(LocalizedStrings.Message_OPERATION_TIMED_OUT_ON_SERVER_WAITING_ON_CONCURRENT_DATA_LIMITER_AFTER_WAITING_0_MILLISECONDS.toLocalizedString(timeToWait)); + } + } + this.payloadLength = len; // makes sure payloadLength gets set now so we will release the semaphore + break; // success + } + catch (InterruptedException e) { + interrupted = true; + } + finally { + if (interrupted) { + Thread.currentThread().interrupt(); + } + } + } + } + } + if (this.msgStats != null) { + this.msgStats.incMessagesBeingReceived(len); + this.payloadLength = len; // makes sure payloadLength gets set now so we will dec on clear + } + + this.isRetry = (bits & MESSAGE_IS_RETRY) != 0; + bits = (byte)(bits & MESSAGE_IS_RETRY_MASK); + this.flags = bits; + // TODO why is the msgType set twice, here and after reading the payload fields? + this.msgType = type; + + readPayloadFields(numParts, len); + + // Set the header and payload fields only after receiving all the + // socket data, providing better message consistency in the face + // of exceptional conditions (e.g. IO problems, timeouts etc.) + this.msgType = type; + this.payloadLength = len; + // this.numberOfParts = numParts; Already set in setPayloadFields via setNumberOfParts + this.transactionId = txid; + this.flags = bits; + if (this.sc != null) { + // Keep track of the fact that a message is being processed. + this.sc.updateProcessingMessage(); + } + } + + protected void readPayloadFields(final int numParts, final int len) + throws IOException { + //TODO:Hitesh + if (len > 0 && numParts <= 0 || + len <= 0 && numParts > 0) { + throw new IOException(LocalizedStrings.Message_PART_LENGTH_0_AND_NUMBER_OF_PARTS_1_INCONSISTENT.toLocalizedString( + new Object[] {Integer.valueOf(len), Integer.valueOf(numParts)})); + } + + Integer msgType = messageType.get(); + if (msgType != null && msgType == MessageType.PING) { + messageType.set(null); // set it to null right away. + int pingParts = 10; // Some number which will not throw OOM but still be acceptable for a ping operation. + if (numParts > pingParts) { + throw new IOException("Part length ( " + numParts + + " ) is inconsistent for " + MessageType.getString(msgType) + + " operation."); + } + } + setNumberOfParts(numParts); + if (numParts <= 0) + return; + + if (len < 0) { + logger.info(LocalizedMessage.create(LocalizedStrings.Message_RPL_NEG_LEN__0, len)); + throw new IOException(LocalizedStrings.Message_DEAD_CONNECTION.toLocalizedString()); + } + + final ByteBuffer cb = getCommBuffer(); + cb.clear(); + cb.flip(); + + int readSecurePart = 0; + //TODO:Hitesh look if securePart can be cached here + readSecurePart = checkAndSetSecurityPart(); + + int bytesRemaining = len; + for (int i = 0; ((i < numParts + readSecurePart) || ((readSecurePart == 1) && (cb + .remaining() > 0))); i++) { + int bytesReadThisTime = readPartChunk(bytesRemaining); + bytesRemaining -= bytesReadThisTime; + + Part part; + + if(i < numParts) { + part = this.partsList[i]; + } + else { + part = this.securePart; + } + + int partLen = cb.getInt(); + byte partType = cb.get(); + byte[] partBytes = null; + if (partLen > 0) { + partBytes = new byte[partLen]; + int alreadyReadBytes = cb.remaining(); + if (alreadyReadBytes > 0) { + if (partLen < alreadyReadBytes) { + alreadyReadBytes = partLen; + } + cb.get(partBytes, 0, alreadyReadBytes); + } + // now we need to read partLen - alreadyReadBytes off the wire + int off = alreadyReadBytes; + int remaining = partLen - off; + while (remaining > 0) { + if (this.sockCh != null) { + int bytesThisTime = remaining; + cb.clear(); + if (bytesThisTime > cb.capacity()) { + bytesThisTime = cb.capacity(); + } + cb.limit(bytesThisTime); + int res = this.sockCh.read(cb); + if (res != -1) { + cb.flip(); + bytesRemaining -= res; + remaining -= res; + cb.get(partBytes, off, res); + off += res; + if (this.msgStats != null) { + this.msgStats.incReceivedBytes(res); + } + } else { + throw new EOFException(LocalizedStrings.Message_THE_CONNECTION_HAS_BEEN_RESET_WHILE_READING_A_PART.toLocalizedString()); + } + } else { + int res = 0; + try { + res = this.is.read(partBytes, off, remaining); + } + catch (SocketTimeoutException e) { + // TODO: add cancellation check + throw e; + } + if (res != -1) { + bytesRemaining -= res; + remaining -= res; + off += res; + if (this.msgStats != null) { + this.msgStats.incReceivedBytes(res); + } + } else { + throw new EOFException(LocalizedStrings.Message_THE_CONNECTION_HAS_BEEN_RESET_WHILE_READING_A_PART.toLocalizedString()); + } + } + } + } + part.init(partBytes, partType); + } + } + + protected int checkAndSetSecurityPart() { + if ((this.flags | MESSAGE_HAS_SECURE_PART) == this.flags) { + this.securePart = new Part(); + return 1; + } + else { + this.securePart = null; + return 0; + } + } + + /** + * @param bytesRemaining the most bytes we can read + * @return the number of bytes read into commBuffer + */ + private int readPartChunk(int bytesRemaining) throws IOException { + final ByteBuffer cb = getCommBuffer(); + if (cb.remaining() >= PART_HEADER_SIZE) { + // we already have the next part header in commBuffer so just return + return 0; + } + if (cb.position() != 0) { + cb.compact(); + } else { + cb.position(cb.limit()); + cb.limit(cb.capacity()); + } + int bytesRead = 0; + if (this.sc != null) { + // Keep track of the fact that we are making progress + this.sc.updateProcessingMessage(); + } + if (this.sockCh != null) { + int remaining = cb.remaining(); + if (remaining > bytesRemaining) { + remaining = bytesRemaining; + cb.limit(cb.position()+bytesRemaining); + } + while (remaining > 0) { + int res = this.sockCh.read(cb); + if (res != -1) { + remaining -= res; + bytesRead += res; + if (this.msgStats != null) { + this.msgStats.incReceivedBytes(res); + } + } else { + throw new EOFException(LocalizedStrings.Message_THE_CONNECTION_HAS_BEEN_RESET_WHILE_READING_THE_PAYLOAD.toLocalizedString()); + } + } + + } else { + int bufSpace = cb.capacity() - cb.position(); + int bytesToRead = bufSpace; + if (bytesRemaining < bytesToRead) { + bytesToRead = bytesRemaining; + } + int pos = cb.position(); + while (bytesToRead > 0) { + int res = 0; + try { + res = this.is.read(cb.array(), pos, bytesToRead); + } + catch (SocketTimeoutException e) { + // TODO add a cancellation check + throw e; + } + if (res != -1) { + bytesToRead -= res; + pos += res; + bytesRead += res; + if (this.msgStats != null) { + this.msgStats.incReceivedBytes(res); + } + } else { + throw new EOFException(LocalizedStrings.Message_THE_CONNECTION_HAS_BEEN_RESET_WHILE_READING_THE_PAYLOAD.toLocalizedString()); + } + } + cb.position(pos); + } + cb.flip(); + return bytesRead; + } + + /** + * Gets rid of all the parts that have been added to this message. + */ + public void clearParts() { + for (int i=0; i< partsList.length; i++){ + partsList[i].clear(); + } + this.currentPart=0; + } + + @Override + public String toString() { + StringBuffer sb = new StringBuffer(); + sb.append("type=").append(MessageType.getString(msgType)); + sb.append("; payloadLength=").append(payloadLength); + sb.append("; numberOfParts=").append(numberOfParts); + sb.append("; transactionId=").append(transactionId); + sb.append("; currentPart=").append(currentPart); + sb.append("; messageModified=").append(messageModified); + sb.append("; flags=").append(Integer.toHexString(flags)); + for (int i = 0; i < numberOfParts; i ++) { + sb.append("; part[").append(i).append("]={"); + sb.append(this.partsList[i].toString()); + sb.append("}"); + } + return sb.toString(); + } + + + public void setComms(ServerConnection sc, Socket socket, ByteBuffer bb, MessageStats msgStats) throws IOException { + this.sc = sc; + setComms(socket, bb, msgStats); + } + + public void setComms(Socket socket, ByteBuffer bb, MessageStats msgStats) throws IOException { + this.sockCh = socket.getChannel(); + if (this.sockCh == null) { + setComms(socket, SocketUtils.getInputStream(socket), SocketUtils.getOutputStream(socket), bb, msgStats); + } else { + setComms(socket, null, null, bb, msgStats); + } + } + + public void setComms(Socket socket, InputStream is, OutputStream os, ByteBuffer bb, MessageStats msgStats) + throws IOException + { + Assert.assertTrue(socket != null); + this.socket = socket; + this.sockCh = socket.getChannel(); + this.is = is; + this.os = os; + this.cachedCommBuffer = bb; + this.msgStats = msgStats; + } + /** + * Undo any state changes done by setComms. + * @since 5.7 + */ + public void unsetComms() { + this.socket = null; + this.sockCh = null; + this.is = null; + this.os = null; + this.cachedCommBuffer = null; + this.msgStats = null; + } + + /** + * Sends this message to its receiver over its + * setOutputStream?? output stream. + */ + public void send() + throws IOException { + send(true); + } + + public void send(ServerConnection servConn) + throws IOException { + if (this.sc != servConn) throw new IllegalStateException("this.sc was not correctly set"); + send(true); + } + + /** + * Sends this message to its receiver over its + * setOutputStream?? output stream. + */ + public void send(boolean clearMessage) + throws IOException { + sendBytes(clearMessage); + } + + /** + * Populates the stats of this Message with information + * received via its socket + */ + public void recv() + throws IOException { + if (this.socket != null) { + synchronized(getCommBuffer()) { + read(); + } + } + else { + throw new IOException(LocalizedStrings.Message_DEAD_CONNECTION.toLocalizedString()); + } + } + public void recv(ServerConnection sc, int maxMessageLength, Semaphore dataLimiter, Semaphore msgLimiter) + throws IOException { + this.sc = sc; + this.maxIncomingMessageLength = maxMessageLength; + this.dataLimiter = dataLimiter; + this.msgLimiter = msgLimiter; + recv(); + } + +} diff --git a/gemfire-core/src/main/java/com/gemstone/gemfire/internal/cache/tier/sockets/Part.java b/gemfire-core/src/main/java/com/gemstone/gemfire/internal/cache/tier/sockets/Part.java new file mode 100755 index 000000000000..07c0d635c32a --- /dev/null +++ b/gemfire-core/src/main/java/com/gemstone/gemfire/internal/cache/tier/sockets/Part.java @@ -0,0 +1,451 @@ +/* + * 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 com.gemstone.gemfire.internal.cache.tier.sockets; + +import com.gemstone.gemfire.internal.*; +import com.gemstone.gemfire.internal.cache.CachedDeserializable; +import com.gemstone.gemfire.internal.offheap.Chunk; +import com.gemstone.gemfire.internal.offheap.DataAsAddress; +import com.gemstone.gemfire.internal.offheap.StoredObject; +import com.gemstone.gemfire.internal.offheap.UnsafeMemoryChunk; + +import java.io.*; +import java.nio.*; +import java.nio.channels.*; + +/** + * Represents one unit of information (essentially a byte + * array) in the wire protocol. Each server connection runs in its + * own thread to maximize concurrency and improve response times to + * edge requests + * + * @see Message + * + * @since 2.0.2 + */ +public class Part { + private static final byte BYTE_CODE = 0; + private static final byte OBJECT_CODE = 1; + + private Version version; + /** + * Used to represent and empty byte array for bug 36279 + * @since 5.1 + */ + private static final byte EMPTY_BYTEARRAY_CODE = 2; + private static final byte[] EMPTY_BYTE_ARRAY = new byte[0]; + + /** The payload of this part. + * Could be null, a byte[] or a HeapDataOutputStream on the send side. + * Could be null, or a byte[] on the receiver side. + */ + private Object part; + + /** Is the payload (part) a serialized object? */ + private byte typeCode; + + public void init(byte[] v, byte tc) { + if (tc == EMPTY_BYTEARRAY_CODE) { + this.part = EMPTY_BYTE_ARRAY; + } + else { + this.part = v; + } + this.typeCode = tc; + } + + + public void clear() { + this.part = null; + this.typeCode = BYTE_CODE; + } + + public boolean isNull() { + if (this.part == null) { + return true; + } + if (isObject() && this.part instanceof byte[]) { + byte[] b = (byte[])this.part; + if (b.length == 1 && b[0] == DSCODE.NULL) { + return true; + } + } + return false; + } + public boolean isObject() { + return this.typeCode == OBJECT_CODE; + } + public boolean isBytes() { + return this.typeCode == BYTE_CODE || this.typeCode == EMPTY_BYTEARRAY_CODE; + } + + public void setPartState(byte[] b, boolean isObject) { + if (isObject) { + this.typeCode = OBJECT_CODE; + } else if (b != null && b.length == 0) { + this.typeCode = EMPTY_BYTEARRAY_CODE; + b = EMPTY_BYTE_ARRAY; + } else { + this.typeCode = BYTE_CODE; + } + this.part = b; + } + + public void setPartState(HeapDataOutputStream os, boolean isObject) { + if (isObject) { + this.typeCode = OBJECT_CODE; + this.part = os; + } else if (os != null && os.size() == 0) { + this.typeCode = EMPTY_BYTEARRAY_CODE; + this.part = EMPTY_BYTE_ARRAY; + } else { + this.typeCode = BYTE_CODE; + this.part = os; + } + } + public void setPartState(StoredObject so, boolean isObject) { + if (isObject) { + this.typeCode = OBJECT_CODE; + } else if (so.getValueSizeInBytes() == 0) { + this.typeCode = EMPTY_BYTEARRAY_CODE; + this.part = EMPTY_BYTE_ARRAY; + return; + } else { + this.typeCode = BYTE_CODE; + } + if (so instanceof DataAsAddress) { + this.part = ((DataAsAddress)so).getRawBytes(); + } else { + this.part = (Chunk)so; + } + } + public byte getTypeCode() { + return this.typeCode; + } + /** + * Return the length of the part. The length is the number of bytes needed + * for its serialized form. + */ + public int getLength() { + if (this.part == null) { + return 0; + } else if (this.part instanceof byte[]) { + return ((byte[])this.part).length; + } else if (this.part instanceof Chunk) { + return ((Chunk) this.part).getValueSizeInBytes(); + } else { + return ((HeapDataOutputStream)this.part).size(); + } + } + public String getString() { + if (this.part == null) { + return null; + } + if (!isBytes()) { + Assert.assertTrue(false, "expected String part to be of type BYTE, part =" + + this.toString()); + } + return CacheServerHelper.fromUTF((byte[])this.part); + } + + public int getInt() { + if (!isBytes()) { + Assert.assertTrue(false, "expected int part to be of type BYTE, part = " + + this.toString()); + } + if (getLength() != 4) { + Assert.assertTrue(false, + "expected int length to be 4 but it was " + getLength() + + "; part = " + this.toString()); + } + byte[] bytes = getSerializedForm(); + return decodeInt(bytes, 0); + } + + public static int decodeInt(byte[] bytes, int offset) { + return (((bytes[offset + 0]) << 24) & 0xFF000000) + | (((bytes[offset + 1]) << 16) & 0x00FF0000) + | (((bytes[offset + 2]) << 8) & 0x0000FF00) + | ((bytes[offset + 3]) & 0x000000FF); + } + + public void setInt(int v) { + byte[] bytes = new byte[4]; + encodeInt(v, bytes); + this.typeCode = BYTE_CODE; + this.part = bytes; + } + + /** + * @since 5.7 + */ + public static void encodeInt(int v, byte[] bytes) { + encodeInt(v, bytes, 0); + } + + public static void encodeInt(int v, byte[] bytes, int offset) { + // encode an int into the given byte array + bytes[offset + 0] = (byte) ((v & 0xFF000000) >> 24); + bytes[offset + 1] = (byte) ((v & 0x00FF0000) >> 16); + bytes[offset + 2] = (byte) ((v & 0x0000FF00) >> 8 ); + bytes[offset + 3] = (byte) (v & 0x000000FF); + } + + public void setLong(long v) { + byte[] bytes = new byte[8]; + bytes[0] = (byte) ((v & 0xFF00000000000000l) >> 56); + bytes[1] = (byte) ((v & 0x00FF000000000000l) >> 48); + bytes[2] = (byte) ((v & 0x0000FF0000000000l) >> 40); + bytes[3] = (byte) ((v & 0x000000FF00000000l) >> 32); + bytes[4] = (byte) ((v & 0x00000000FF000000l) >> 24); + bytes[5] = (byte) ((v & 0x0000000000FF0000l) >> 16); + bytes[6] = (byte) ((v & 0x000000000000FF00l) >> 8); + bytes[7] = (byte) (v & 0xFF); + this.typeCode = BYTE_CODE; + this.part = bytes; + } + + public long getLong() { + if (!isBytes()) { + Assert.assertTrue(false, "expected long part to be of type BYTE, part = " + + this.toString()); + } + if (getLength() != 8) { + Assert.assertTrue(false, + "expected long length to be 8 but it was " + getLength() + + "; part = " + this.toString()); + } + byte[] bytes = getSerializedForm(); + return ((((long)bytes[0]) << 56) & 0xFF00000000000000l) | + ((((long)bytes[1]) << 48) & 0x00FF000000000000l) | + ((((long)bytes[2]) << 40) & 0x0000FF0000000000l) | + ((((long)bytes[3]) << 32) & 0x000000FF00000000l) | + ((((long)bytes[4]) << 24) & 0x00000000FF000000l) | + ((((long)bytes[5]) << 16) & 0x0000000000FF0000l) | + ((((long)bytes[6]) << 8) & 0x000000000000FF00l) | + ( bytes[7] & 0x00000000000000FFl); + } + + + public byte[] getSerializedForm() { + if (this.part == null) { + return null; + } else if (this.part instanceof byte[]) { + return (byte[])this.part; + } else { + return null; // should not be called on sender side? + } + } + public Object getObject(boolean unzip) throws IOException, ClassNotFoundException { + if (isBytes()) { + return this.part; + } + else { + if (this.version != null) { + return CacheServerHelper.deserialize((byte[])this.part, this.version, + unzip); + } + else { + return CacheServerHelper.deserialize((byte[])this.part, unzip); + } + } + } + public Object getObject() throws IOException, ClassNotFoundException { + return getObject(false); + } + + public Object getStringOrObject() throws IOException, ClassNotFoundException { + if (isObject()) { + return getObject(); + } else { + return getString(); + } + } + + /** + * Write the contents of this part to the specified output stream. + * This is only called for parts that will not fit into the commBuffer + * so they need to be written directly to the stream. + * A stream is used because the client is configured for old IO (instead of nio). + * @param buf the buffer to use if any data needs to be copied to one + */ + public final void sendTo(OutputStream out, ByteBuffer buf) throws IOException { + if (getLength() > 0) { + if (this.part instanceof byte[]) { + byte[] bytes = (byte[])this.part; + out.write(bytes, 0, bytes.length); + } else if (this.part instanceof Chunk) { + Chunk c = (Chunk) this.part; + ByteBuffer cbb = c.createDirectByteBuffer(); + if (cbb != null) { + HeapDataOutputStream.writeByteBufferToStream(out, buf, cbb); + } else { + int bytesToSend = c.getDataSize(); + long addr = c.getAddressForReading(0, bytesToSend); + while (bytesToSend > 0) { + if (buf.remaining() == 0) { + HeapDataOutputStream.flushStream(out, buf); + } + buf.put(UnsafeMemoryChunk.readAbsoluteByte(addr)); + addr++; + bytesToSend--; + } + } + } else { + HeapDataOutputStream hdos = (HeapDataOutputStream)this.part; + hdos.sendTo(out, buf); + hdos.rewind(); + } + } + } + /** + * Write the contents of this part to the specified byte buffer. + * Precondition: caller has already checked the length of this part + * and it will fit into "buf". + */ + public final void sendTo(ByteBuffer buf) { + if (getLength() > 0) { + if (this.part instanceof byte[]) { + buf.put((byte[])this.part); + } else if (this.part instanceof Chunk) { + Chunk c = (Chunk) this.part; + ByteBuffer bb = c.createDirectByteBuffer(); + if (bb != null) { + buf.put(bb); + } else { + int bytesToSend = c.getDataSize(); + long addr = c.getAddressForReading(0, bytesToSend); + while (bytesToSend > 0) { + buf.put(UnsafeMemoryChunk.readAbsoluteByte(addr)); + addr++; + bytesToSend--; + } + } + } else { + HeapDataOutputStream hdos = (HeapDataOutputStream)this.part; + hdos.sendTo(buf); + hdos.rewind(); + } + } + } + /** + * Write the contents of this part to the specified socket channel + * using the specified byte buffer. + * This is only called for parts that will not fit into the commBuffer + * so they need to be written directly to the socket. + * Precondition: buf contains nothing that needs to be sent + */ + public final void sendTo(SocketChannel sc, ByteBuffer buf) throws IOException { + if (getLength() > 0) { + final int BUF_MAX = buf.capacity(); + if (this.part instanceof byte[]) { + final byte[] bytes = (byte[])this.part; + int off = 0; + int len = bytes.length; + buf.clear(); + while (len > 0) { + int bytesThisTime = len; + if (bytesThisTime > BUF_MAX) { + bytesThisTime = BUF_MAX; + } + buf.put(bytes, off, bytesThisTime); + len -= bytesThisTime; + off += bytesThisTime; + buf.flip(); + while (buf.remaining() > 0) { + sc.write(buf); + } + buf.clear(); + } + } else if (this.part instanceof Chunk) { + // instead of copying the Chunk to buf try to create a direct ByteBuffer and + // just write it directly to the socket channel. + Chunk c = (Chunk) this.part; + ByteBuffer bb = c.createDirectByteBuffer(); + if (bb != null) { + while (bb.remaining() > 0) { + sc.write(bb); + } + } else { + int len = c.getDataSize(); + long addr = c.getAddressForReading(0, len); + buf.clear(); + while (len > 0) { + int bytesThisTime = len; + if (bytesThisTime > BUF_MAX) { + bytesThisTime = BUF_MAX; + } + len -= bytesThisTime; + while (bytesThisTime > 0) { + buf.put(UnsafeMemoryChunk.readAbsoluteByte(addr)); + addr++; + bytesThisTime--; + } + buf.flip(); + while (buf.remaining() > 0) { + sc.write(buf); + } + buf.clear(); + } + } + } else { + HeapDataOutputStream hdos = (HeapDataOutputStream)this.part; + hdos.sendTo(sc, buf); + hdos.rewind(); + } + } + } + + static private String typeCodeToString(byte c) { + switch (c) { + case BYTE_CODE: + return "BYTE_CODE"; + case OBJECT_CODE: + return "OBJECT_CODE"; + case EMPTY_BYTEARRAY_CODE: + return "EMPTY_BYTEARRAY_CODE"; + default: + return "unknown code " + c; + } + } + + @Override + public String toString() { + StringBuffer sb = new StringBuffer(); + sb.append("partCode="); + sb.append(typeCodeToString(this.typeCode)); + sb.append(" partLength=" + getLength()); +// sb.append(" partBytes="); +// byte[] b = getSerializedForm(); +// if (b == null) { +// sb.append("null"); +// } +// else { +// sb.append("("); +// for (int i = 0; i < b.length; i ++) { +// sb.append(Integer.toString(b[i])); +// sb.append(" "); +// } +// sb.append(")"); +// } + return sb.toString(); + } + + public void setVersion(Version clientVersion) { + this.version = clientVersion; + } +} diff --git a/gemfire-core/src/main/java/com/gemstone/gemfire/internal/cache/wan/GatewaySenderEventImpl.java b/gemfire-core/src/main/java/com/gemstone/gemfire/internal/cache/wan/GatewaySenderEventImpl.java new file mode 100644 index 000000000000..019085238e56 --- /dev/null +++ b/gemfire-core/src/main/java/com/gemstone/gemfire/internal/cache/wan/GatewaySenderEventImpl.java @@ -0,0 +1,1285 @@ +/* + * 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 com.gemstone.gemfire.internal.cache.wan; + +import java.io.DataInput; +import java.io.DataOutput; +import java.io.IOException; +import java.io.InputStream; + +import com.gemstone.gemfire.DataSerializer; +import com.gemstone.gemfire.InternalGemFireError; +import com.gemstone.gemfire.cache.CacheEvent; +import com.gemstone.gemfire.cache.CacheFactory; +import com.gemstone.gemfire.cache.EntryEvent; +import com.gemstone.gemfire.cache.Operation; +import com.gemstone.gemfire.cache.Region; +import com.gemstone.gemfire.cache.SerializedCacheValue; +import com.gemstone.gemfire.cache.asyncqueue.AsyncEvent; +import com.gemstone.gemfire.cache.util.ObjectSizer; +import com.gemstone.gemfire.cache.wan.EventSequenceID; +import com.gemstone.gemfire.distributed.internal.InternalDistributedSystem; +import com.gemstone.gemfire.internal.DataSerializableFixedID; +import com.gemstone.gemfire.internal.InternalDataSerializer; +import com.gemstone.gemfire.internal.Version; +import com.gemstone.gemfire.internal.VersionedDataInputStream; +import com.gemstone.gemfire.internal.cache.CachedDeserializable; +import com.gemstone.gemfire.internal.cache.CachedDeserializableFactory; +import com.gemstone.gemfire.internal.cache.Conflatable; +import com.gemstone.gemfire.internal.cache.EntryEventImpl; +import com.gemstone.gemfire.internal.cache.EnumListenerEvent; +import com.gemstone.gemfire.internal.cache.EventID; +import com.gemstone.gemfire.internal.cache.LocalRegion; +import com.gemstone.gemfire.internal.cache.Token; +import com.gemstone.gemfire.internal.cache.WrappedCallbackArgument; +import com.gemstone.gemfire.internal.cache.lru.Sizeable; +import com.gemstone.gemfire.internal.cache.tier.sockets.CacheServerHelper; +import com.gemstone.gemfire.internal.i18n.LocalizedStrings; +import com.gemstone.gemfire.internal.offheap.Chunk; +import com.gemstone.gemfire.internal.offheap.ChunkWithHeapForm; +import com.gemstone.gemfire.internal.offheap.OffHeapHelper; +import com.gemstone.gemfire.internal.offheap.ReferenceCountHelper; +import com.gemstone.gemfire.internal.offheap.Releasable; +import com.gemstone.gemfire.internal.offheap.StoredObject; +import com.gemstone.gemfire.internal.offheap.annotations.OffHeapIdentifier; +import com.gemstone.gemfire.internal.offheap.annotations.Released; +import com.gemstone.gemfire.internal.offheap.annotations.Retained; +import com.gemstone.gemfire.internal.offheap.annotations.Unretained; + +/** + * Class GatewaySenderEventImpl represents an event sent between + * GatewaySender + * + * + * @since 7.0 + * + */ +public class GatewaySenderEventImpl implements + AsyncEvent, DataSerializableFixedID, Conflatable, Sizeable, Releasable { + private static final long serialVersionUID = -5690172020872255422L; + + protected static final Object TOKEN_NULL = new Object(); + + protected static final short VERSION = 0x11; + + protected EnumListenerEvent operation; + + protected Object substituteValue; + + /** + * The action to be taken (e.g. AFTER_CREATE) + */ + protected int action; + + /** + * The operation detail of EntryEvent (e.g. LOAD, PUTALL etc.) + */ + protected int operationDetail; + + /** + * The number of parts for the Message + * + * @see com.gemstone.gemfire.internal.cache.tier.sockets.Message + */ + protected int numberOfParts; + + /** + * The identifier of this event + */ + protected EventID id; + + /** + * The Region that was updated + */ + private transient LocalRegion region; + + /** + * The name of the region being affected by this event + */ + protected String regionPath; + + /** + * The key being affected by this event + */ + protected Object key; + + /** + * The serialized new value for this event's key. + * May not be computed at construction time. + */ + protected byte[] value; + + /** + * The "object" form of the value. + * Will be null after this object is deserialized. + */ + @Retained(OffHeapIdentifier.GATEWAY_SENDER_EVENT_IMPL_VALUE) + protected transient Object valueObj; + protected transient boolean valueObjReleased; + + /** + * Whether the value is a serialized object or just a byte[] + */ + protected byte valueIsObject; + + /** + * The callback argument for this event + */ + protected GatewaySenderEventCallbackArgument callbackArgument; + + /** + * The version timestamp + */ + protected long versionTimeStamp; + + /** + * Whether this event is a possible duplicate + */ + protected boolean possibleDuplicate; + + /** + * Whether this event is acknowledged after the ack received by + * AckReaderThread. As of now this is getting used for PDX related + * GatewaySenderEvent. But can be extended for for other GatewaySenderEvent. + */ + protected volatile boolean isAcked; + + /** + * Whether this event is dispatched by dispatcher. As of now this is getting + * used for PDX related GatewaySenderEvent. But can be extended for for other + * GatewaySenderEvent. + */ + protected volatile boolean isDispatched; + /** + * The creation timestamp in ms + */ + protected long creationTime; + + /** + * For ParalledGatewaySender we need bucketId of the PartitionRegion on which + * the update operation was applied. + */ + protected int bucketId; + + protected Long shadowKey = Long.valueOf(-1L); + + protected boolean isInitialized; + + /** + * Is this thread in the process of serializing this event? + */ + public static final ThreadLocal isSerializingValue = new ThreadLocal() { + @Override + protected Object initialValue() { + return Boolean.FALSE; + } + }; + + private static final int CREATE_ACTION = 0; + + private static final int UPDATE_ACTION = 1; + + private static final int DESTROY_ACTION = 2; + + private static final int VERSION_ACTION = 3; + + private static final int INVALIDATE_ACTION = 5; + /** + * Static constants for Operation detail of EntryEvent. + */ + private static final int OP_DETAIL_NONE = 10; + + private static final int OP_DETAIL_LOCAL_LOAD = 11; + + private static final int OP_DETAIL_NET_LOAD = 12; + + private static final int OP_DETAIL_PUTALL = 13; + + private static final int OP_DETAIL_REMOVEALL = 14; + +// /** +// * Is this thread in the process of deserializing this event? +// */ +// public static final ThreadLocal isDeserializingValue = new ThreadLocal() { +// @Override +// protected Object initialValue() { +// return Boolean.FALSE; +// } +// }; + + /** + * Constructor. No-arg constructor for data serialization. + * + * @see DataSerializer + */ + public GatewaySenderEventImpl() { + } + + /** + * Constructor. Creates an initialized GatewayEventImpl + * + * @param operation + * The operation for this event (e.g. AFTER_CREATE) + * @param event + * The CacheEvent on which this + * GatewayEventImpl is based + * @param substituteValue + * The value to be enqueued instead of the value in the event. + * + * @throws IOException + */ + @Retained + public GatewaySenderEventImpl(EnumListenerEvent operation, CacheEvent event, + Object substituteValue) throws IOException { + this(operation, event, substituteValue, true); + } + + @Retained + public GatewaySenderEventImpl(EnumListenerEvent operation, CacheEvent event, + Object substituteValue, boolean initialize, int bucketId) + throws IOException { + this(operation, event, substituteValue, initialize); + this.bucketId = bucketId; + } + + /** + * Constructor. + * + * @param operation + * The operation for this event (e.g. AFTER_CREATE) + * @param ce + * The CacheEvent on which this + * GatewayEventImpl is based + * @param substituteValue + * The value to be enqueued instead of the value in the event. + * @param initialize + * Whether to initialize this instance + * + * @throws IOException + */ + @Retained + public GatewaySenderEventImpl(EnumListenerEvent operation, CacheEvent ce, + Object substituteValue, boolean initialize) throws IOException { + // Set the operation and event + final EntryEventImpl event = (EntryEventImpl)ce; + this.operation = operation; + this.substituteValue = substituteValue; + + // Initialize the region name. This is being done here because the event + // can get serialized/deserialized (for some reason) between the time + // it is set above and used (in initialize). If this happens, the + // region is null because it is a transient field of the event. + this.region = (LocalRegion)event.getRegion(); + this.regionPath = this.region.getFullPath(); + + // Initialize the unique id + initializeId(event); + + // Initialize possible duplicate + this.possibleDuplicate = event.isPossibleDuplicate(); + + //Initialize ack and dispatch status of events + this.isAcked = false; + this.isDispatched = false; + + + // Initialize the creation timestamp + this.creationTime = System.currentTimeMillis(); + + if (event.getVersionTag() != null) { + this.versionTimeStamp = event.getVersionTag().getVersionTimeStamp(); + } + + // Set key + // System.out.println("this._entryEvent: " + event); + // System.out.println("this._entryEvent.getKey(): " + + // event.getKey()); + this.key = event.getKey(); + + initializeValue(event); + + // Set the callback arg + this.callbackArgument = (GatewaySenderEventCallbackArgument) + event.getRawCallbackArgument(); + + // Initialize the action and number of parts (called after _callbackArgument + // is set above) + initializeAction(this.operation); + + //initialize the operation detail + initializeOperationDetail(event.getOperation()); + + setShadowKey(event.getTailKey()); + + if (initialize) { + initialize(); + } + } + + /** + * Used to create a heap copy of an offHeap event. + * Note that this constructor produces an instance that does not need to be released. + */ + protected GatewaySenderEventImpl(GatewaySenderEventImpl offHeapEvent) { + this.operation = offHeapEvent.operation; + this.action = offHeapEvent.action; + this.numberOfParts = offHeapEvent.numberOfParts; + this.id = offHeapEvent.id; + this.region = offHeapEvent.region; + this.regionPath = offHeapEvent.regionPath; + this.key = offHeapEvent.key; + this.callbackArgument = offHeapEvent.callbackArgument; + this.versionTimeStamp = offHeapEvent.versionTimeStamp; + this.possibleDuplicate = offHeapEvent.possibleDuplicate; + this.isAcked = offHeapEvent.isAcked; + this.isDispatched = offHeapEvent.isDispatched; + this.creationTime = offHeapEvent.creationTime; + this.bucketId = offHeapEvent.bucketId; + this.shadowKey = offHeapEvent.shadowKey; + this.isInitialized = offHeapEvent.isInitialized; + + this.valueObj = null; + this.valueObjReleased = false; + this.valueIsObject = offHeapEvent.valueIsObject; + this.value = offHeapEvent.getSerializedValue(); + } + + /** + * Returns this event's action + * + * @return this event's action + */ + public int getAction() { + return this.action; + } + + /** + * Returns this event's operation + * + * @return this event's operation + */ + public Operation getOperation() { + Operation op = null; + switch (this.action) { + case CREATE_ACTION: + switch (this.operationDetail) { + case OP_DETAIL_LOCAL_LOAD: + op = Operation.LOCAL_LOAD_CREATE; + break; + case OP_DETAIL_NET_LOAD: + op = Operation.NET_LOAD_CREATE; + break; + case OP_DETAIL_PUTALL: + op = Operation.PUTALL_CREATE; + break; + case OP_DETAIL_NONE: + op = Operation.CREATE; + break; + //if operationDetail is none of the above, then default should be NONE + default: + op = Operation.CREATE; + break; + } + break; + case UPDATE_ACTION: + switch (this.operationDetail) { + case OP_DETAIL_LOCAL_LOAD: + op = Operation.LOCAL_LOAD_UPDATE; + break; + case OP_DETAIL_NET_LOAD: + op = Operation.NET_LOAD_UPDATE; + break; + case OP_DETAIL_PUTALL: + op = Operation.PUTALL_UPDATE; + break; + case OP_DETAIL_NONE: + op = Operation.UPDATE; + break; + //if operationDetail is none of the above, then default should be NONE + default: + op = Operation.UPDATE; + break; + } + break; + case DESTROY_ACTION: + if (this.operationDetail == OP_DETAIL_REMOVEALL) { + op = Operation.REMOVEALL_DESTROY; + } else { + op = Operation.DESTROY; + } + break; + case VERSION_ACTION: + op = Operation.UPDATE_VERSION_STAMP; + break; + case INVALIDATE_ACTION: + op = Operation.INVALIDATE; + break; + } + return op; + } + + public Object getSubstituteValue() { + return this.substituteValue; + } + + public EnumListenerEvent getEnumListenerEvent(){ + return this.operation; + } + /** + * Return this event's region name + * + * @return this event's region name + */ + public String getRegionPath() { + return this.regionPath; + } + + public boolean isInitialized() { + return this.isInitialized; + } + /** + * Returns this event's key + * + * @return this event's key + */ + public Object getKey() { + // TODO:Asif : Ideally would like to have throw exception if the key + // is TOKEN_UN_INITIALIZED, but for the time being trying to retain the GFE + // behaviour + // of returning null if getKey is invoked on un-initialized gateway event + return isInitialized() ? this.key : null; + } + + /** + * Returns whether this event's value is a serialized object + * + * @return whether this event's value is a serialized object + */ + public byte getValueIsObject() { + return this.valueIsObject; + } + + /** + * Return this event's callback argument + * + * @return this event's callback argument + */ + public Object getCallbackArgument() { + Object result = getSenderCallbackArgument(); + while (result instanceof WrappedCallbackArgument) { + WrappedCallbackArgument wca = (WrappedCallbackArgument)result; + result = wca.getOriginalCallbackArg(); + } + return result; + } + + public GatewaySenderEventCallbackArgument getSenderCallbackArgument() { + return this.callbackArgument; + } + + /** + * Return this event's number of parts + * + * @return this event's number of parts + */ + public int getNumberOfParts() { + return this.numberOfParts; + } + + /** + * Return the value as a byte[] array, if it is plain byte array, + * otherwise return a cache deserializable or plain object, depending + * on if the currently held form of the object is serialized or not. + * + * If the object is held off heap, this will copy it to the heap return the heap copy. + * + * //OFFHEAP TODO: Optimize callers by returning a reference to the off heap value + */ + public Object getValue() { + if (CachedDeserializableFactory.preferObject()) { + // sqlf does not use CacheDeserializable wrappers + return getDeserializedValue(); + } + Object rawValue = this.value; + if (rawValue == null) { + @Unretained(OffHeapIdentifier.GATEWAY_SENDER_EVENT_IMPL_VALUE) + Object vo = this.valueObj; + if (vo instanceof StoredObject) { + rawValue = ((StoredObject) vo).getValueAsHeapByteArray(); + } else { + rawValue = vo; + } + } + if (valueIsObject == 0x00) { + //if the value is a byte array, just return it + return rawValue; + } else if (CachedDeserializableFactory.preferObject()) { + // sqlf does not use CacheDeserializable wrappers + return rawValue; + } else if (rawValue instanceof byte[]) { + return CachedDeserializableFactory.create((byte[]) rawValue); + } else { + return rawValue; + } + } + + /** + * Return the currently held form of the object. + * May return a retained OFF_HEAP_REFERENCE. + */ + @Retained + public Object getRawValue() { + @Retained(OffHeapIdentifier.GATEWAY_SENDER_EVENT_IMPL_VALUE) + Object result = this.value; + if (result == null) { + result = this.valueObj; + if (result instanceof Chunk) { + if (this.valueObjReleased) { + result = null; + } else { + Chunk ohref = (Chunk) result; + if (!ohref.retain()) { + result = null; + } else if (this.valueObjReleased) { + ohref.release(); + result = null; + } + } + } + } + return result; + } + + /** + * This method is meant for internal use by the SimpleMemoryAllocatorImpl. + * Others should use getRawValue instead. + * @return if the result is an off-heap reference then callers must use it before this event is released. + */ + @Unretained(OffHeapIdentifier.GATEWAY_SENDER_EVENT_IMPL_VALUE) + public Object getValueObject() { + return this.valueObj; + } + + /** + * Return this event's deserialized value + * + * @return this event's deserialized value + */ + public Object getDeserializedValue() { +// TODO OFFHEAP MERGE: handle substituteValue here? + if (this.valueIsObject == 0x00) { + Object result = this.value; + if (result == null) { + @Unretained(OffHeapIdentifier.GATEWAY_SENDER_EVENT_IMPL_VALUE) + Object so = this.valueObj; + if (this.valueObjReleased) { + throw new IllegalStateException("Value is no longer available. getDeserializedValue must be called before processEvents returns."); + } + if (so instanceof StoredObject) { + // TODO OFFHEAP: returns off-heap PdxInstance + return ((StoredObject)so).getValueAsDeserializedHeapObject(); + } else { + throw new IllegalStateException("expected valueObj field to be an instance of StoredObject but it was " + so); + } + } + return result; + } + else { + Object vo = this.valueObj; + if (vo != null) { + if (vo instanceof StoredObject) { + @Unretained(OffHeapIdentifier.GATEWAY_SENDER_EVENT_IMPL_VALUE) + StoredObject so = (StoredObject)vo; + // TODO OFFHEAP: returns off-heap PdxInstance + return so.getValueAsDeserializedHeapObject(); + } else { + return vo; // it is already deserialized + } + } else { + if (this.value != null) { + Object result = EntryEventImpl.deserialize(this.value); + this.valueObj = result; + return result; + } else { + if (this.valueObjReleased) { + throw new IllegalStateException("Value is no longer available. getDeserializedValue must be called before processEvents returns."); + } + // both value and valueObj are null but we did not free it. + return null; + } + } + } + } + + /** + * Returns the value in the form of a String. + * This should be used by code that wants to log + * the value. This is a debugging exception. + */ + public String getValueAsString(boolean deserialize) { +// TODO OFFHEAP MERGE: handle substituteValue here? + Object v = this.value; + if (deserialize) { + try { + v = getDeserializedValue(); + } catch (Exception e) { + return "Could not convert value to string because " + e; + } catch (InternalGemFireError e) { // catch this error for bug 49147 + return "Could not convert value to string because " + e; + } + } + if (v == null) { + @Unretained(OffHeapIdentifier.GATEWAY_SENDER_EVENT_IMPL_VALUE) + Object ov = this.valueObj; + if (ov instanceof CachedDeserializable) { + return ((CachedDeserializable) ov).getStringForm(); + } + } + if (v != null) { + if (v instanceof byte[]) { + byte[] bav = (byte[]) v; + // Using Arrays.toString(bav) can cause us to run out of memory + return "byte[" + bav.length + "]"; + } else { + return v.toString(); + } + } else { + return ""; + } + } + + /** + * If the value owned of this event is just bytes return that byte array; + * otherwise serialize the value object and return the serialized bytes. + * Use {@link #getValueIsObject()} to determine if the result is raw or serialized bytes. + */ + public byte[] getSerializedValue() { + byte[] result = this.value; + if (result == null) { + @Unretained(OffHeapIdentifier.GATEWAY_SENDER_EVENT_IMPL_VALUE) + Object vo = this.valueObj; + if (vo instanceof StoredObject) { + synchronized (this) { + result = this.value; + if (result == null) { + StoredObject so = (StoredObject) vo; + result = so.getValueAsHeapByteArray(); + this.value = result; + } + } + } else { + synchronized (this) { + result = this.value; + if (result == null && vo != null && !(vo instanceof Token)) { + result = EntryEventImpl.serialize(vo); + this.value = result; + } else if (result == null) { + if (this.valueObjReleased) { + throw new IllegalStateException("Value is no longer available. getSerializedValue must be called before processEvents returns."); + } + } + } + } + } + return result; + } + + public void setPossibleDuplicate(boolean possibleDuplicate) { + this.possibleDuplicate = possibleDuplicate; + } + + public boolean getPossibleDuplicate() { + return this.possibleDuplicate; + } + + public long getCreationTime() { + return this.creationTime; + } + + public int getDSFID() { + return GATEWAY_SENDER_EVENT_IMPL; + } + + public void toData(DataOutput out) throws IOException { + // Make sure we are initialized before we serialize. + initialize(); + out.writeShort(VERSION); + out.writeInt(this.action); + out.writeInt(this.numberOfParts); + // out.writeUTF(this._id); + DataSerializer.writeObject(this.id, out); + DataSerializer.writeString(this.regionPath, out); + out.writeByte(this.valueIsObject); + serializeKey(out); + DataSerializer.writeByteArray(getSerializedValue(), out); + DataSerializer.writeObject(this.callbackArgument, out); + out.writeBoolean(this.possibleDuplicate); + out.writeLong(this.creationTime); + out.writeInt(this.bucketId); + out.writeLong(this.shadowKey); + out.writeLong(getVersionTimeStamp()); + } + + protected void serializeKey(DataOutput out) throws IOException { + DataSerializer.writeObject(this.key, out); + } + + public void fromData(DataInput in) throws IOException, ClassNotFoundException { + short version = in.readShort(); + if (version != VERSION) { + // warning? + } + this.isInitialized = true; + this.action = in.readInt(); + this.numberOfParts = in.readInt(); + // this._id = in.readUTF(); + if (version < 0x11 && + (in instanceof InputStream) && + InternalDataSerializer.getVersionForDataStream(in) == Version.CURRENT) { + in = new VersionedDataInputStream((InputStream)in, Version.GFE_701); + } + this.id = (EventID)DataSerializer.readObject(in); + // TODO:Asif ; Check if this violates Barry's logic of not assiging VM + // specific Token.FROM_GATEWAY + // and retain the serialized Token.FROM_GATEWAY + // this._id.setFromGateway(false); + this.regionPath = DataSerializer.readString(in); + this.valueIsObject = in.readByte(); + deserializeKey(in); + this.value = DataSerializer.readByteArray(in); + this.callbackArgument = (GatewaySenderEventCallbackArgument)DataSerializer + .readObject(in); + this.possibleDuplicate = in.readBoolean(); + this.creationTime = in.readLong(); + this.bucketId = in.readInt(); + this.shadowKey = in.readLong(); + this.versionTimeStamp = in.readLong(); + // TODO should this call initializeKey()? + } + + protected void deserializeKey(DataInput in) throws IOException, + ClassNotFoundException { + this.key = DataSerializer.readObject(in); + } + + @Override + public String toString() { + StringBuffer buffer = new StringBuffer(); + buffer.append("SenderEventImpl[").append("id=").append(this.id) + .append(";action=").append(this.action).append(";operation=") + .append(getOperation()).append(";region=").append(this.regionPath) + .append(";key=").append(this.key).append(";value=") + .append(getValueAsString(true)).append(";valueIsObject=") + .append(this.valueIsObject).append(";numberOfParts=") + .append(this.numberOfParts).append(";callbackArgument=") + .append(this.callbackArgument).append(";possibleDuplicate=") + .append(this.possibleDuplicate).append(";creationTime=") + .append(this.creationTime).append(";shadowKey= ") + .append(this.shadowKey) + .append(";timeStamp=").append(this.versionTimeStamp) + .append(";acked=").append(this.isAcked) + .append(";dispatched=").append(this.isDispatched) + .append("]"); + return buffer.toString(); + } + + public static boolean isSerializingValue() { + return ((Boolean)isSerializingValue.get()).booleanValue(); + } + +// public static boolean isDeserializingValue() { +// return ((Boolean)isDeserializingValue.get()).booleanValue(); +// } + + // / Conflatable interface methods /// + + /** + * Determines whether or not to conflate this message. This method will answer + * true IFF the message's operation is AFTER_UPDATE and its region has enabled + * are conflation. Otherwise, this method will answer false. Messages whose + * operation is AFTER_CREATE, AFTER_DESTROY, AFTER_INVALIDATE or + * AFTER_REGION_DESTROY are not conflated. + * + * @return Whether to conflate this message + */ + public boolean shouldBeConflated() { + // If the message is an update, it may be conflatable. If it is a + // create, destroy, invalidate or destroy-region, it is not conflatable. + // Only updates are conflated. + return isUpdate(); + } + + public String getRegionToConflate() { + return this.regionPath; + } + + public Object getKeyToConflate() { + return this.key; + } + + public Object getValueToConflate() { + // Since all the uses of this are for logging + // changing it to return the string form of the value + // instead of the actual value. + return this.getValueAsString(true); + } + + public void setLatestValue(Object value) { + // Currently this method is never used. + // If someone does want to use it in the future + // then the implementation needs to be updated + // to correctly update value, valueObj, and valueIsObject + throw new UnsupportedOperationException(); + } + + // / End Conflatable interface methods /// + + /** + * Returns whether this GatewayEvent represents an update. + * + * @return whether this GatewayEvent represents an update + */ + protected boolean isUpdate() { + // This event can be in one of three states: + // - in memory primary (initialized) + // - in memory secondary (not initialized) + // - evicted to disk, read back in (initialized) + // In the first case, both the operation and action are set. + // In the second case, only the operation is set. + // In the third case, only the action is set. + return this.operation == null ? this.action == UPDATE_ACTION + : this.operation == EnumListenerEvent.AFTER_UPDATE; + } + + /** + * Returns whether this GatewayEvent represents a create. + * + * @return whether this GatewayEvent represents a create + */ + protected boolean isCreate() { + // See the comment in isUpdate() for additional details + return this.operation == null ? this.action == CREATE_ACTION + : this.operation == EnumListenerEvent.AFTER_CREATE; + } + + /** + * Returns whether this GatewayEvent represents a destroy. + * + * @return whether this GatewayEvent represents a destroy + */ + protected boolean isDestroy() { + // See the comment in isUpdate() for additional details + return this.operation == null ? this.action == DESTROY_ACTION + : this.operation == EnumListenerEvent.AFTER_DESTROY; + } + + /** + * Initialize the unique identifier for this event. This id is used by the + * receiving Gateway to keep track of which events have been + * processed. Duplicates can be dropped. + */ + private void initializeId(EntryEventImpl event) { + // CS43_HA + this.id = event.getEventId(); + // TODO:ASIF :Once stabilized remove the check below + if (this.id == null) { + throw new IllegalStateException( + LocalizedStrings.GatewayEventImpl_NO_EVENT_ID_IS_AVAILABLE_FOR_THIS_GATEWAY_EVENT + .toLocalizedString()); + } + + } + + /** + * Initialize this instance. Get the useful parts of the input operation and + * event. + */ + public void initialize() { + if (isInitialized()) { + return; + } + this.isInitialized = true; + } + + + // Initializes the value object. This function need a relook because the + // serialization of the value looks unnecessary. + @Retained(OffHeapIdentifier.GATEWAY_SENDER_EVENT_IMPL_VALUE) + protected void initializeValue(EntryEventImpl event) throws IOException { + // Set the value to be a byte[] representation of either the value or + // substituteValue (if set). + if (this.substituteValue == null) { + // If the value is already serialized, use it. + this.valueIsObject = 0x01; + /** + * so ends up being stored in this.valueObj + */ + @Retained(OffHeapIdentifier.GATEWAY_SENDER_EVENT_IMPL_VALUE) + StoredObject so = null; + if (event.hasDelta()) { + this.valueIsObject = 0x02; + } else { + ReferenceCountHelper.setReferenceCountOwner(this); + so = event.getOffHeapNewValue(); + ReferenceCountHelper.setReferenceCountOwner(null); + // TODO OFFHEAP MERGE: check for a cached serialized value first + // so we can use it instead of reading offheap + // If we do read offheap then add the serialize new value to the event cache + } + + if (so != null) { +// if (so != null && !event.hasDelta()) { + // Since GatewaySenderEventImpl instances can live for a long time in the gateway region queue + // we do not want the StoredObject to be one that keeps the heap form cached. + if (so instanceof ChunkWithHeapForm) { + so = ((ChunkWithHeapForm) so).getChunkWithoutHeapForm(); // fixes 51999 + } + this.valueObj = so; + if (!so.isSerialized()) { + this.valueIsObject = 0x00; + } + } else if (event.getCachedSerializedNewValue() != null) { + // We want this to have lower precedence than StoredObject so that the gateway + // can share a reference to the off-heap value. + this.value = event.getCachedSerializedNewValue(); + } else { + final Object newValue = event.getRawNewValue(shouldApplyDelta()); + assert !(newValue instanceof StoredObject); // since we already called getOffHeapNewValue() and it returned null + if (newValue instanceof CachedDeserializable) { + this.value = ((CachedDeserializable) newValue).getSerializedValue(); + } else if (newValue instanceof byte[]) { + // The value is byte[]. Set _valueIsObject flag to 0x00 (not an object) + this.value = (byte[])newValue; + this.valueIsObject = 0x00; + } else { + // The value is an object. It will be serialized later when getSerializedValue is called. + this.valueObj = newValue; + // to prevent bug 48281 we need to serialize it now + this.getSerializedValue(); + this.valueObj = null; + } + } + } else { + // The substituteValue is set. Use it. + if (this.substituteValue instanceof byte[]) { + // The substituteValue is byte[]. Set valueIsObject flag to 0x00 (not an object) + this.value = (byte[]) this.substituteValue; + this.valueIsObject = 0x00; + } else if (this.substituteValue == TOKEN_NULL) { + // The substituteValue represents null. Set the value to null. + this.value = null; + this.valueIsObject = 0x01; + } else { + // The substituteValue is an object. Serialize it. + isSerializingValue.set(Boolean.TRUE); + this.value = CacheServerHelper.serialize(this.substituteValue); + isSerializingValue.set(Boolean.FALSE); + event.setCachedSerializedNewValue(this.value); + this.valueIsObject = 0x01; + } + } + } + + protected boolean shouldApplyDelta() { + return false; + } + + /** + * Initialize this event's action and number of parts + * + * @param operation + * The operation from which to initialize this event's action and + * number of parts + */ + protected void initializeAction(EnumListenerEvent operation) { + if (operation == EnumListenerEvent.AFTER_CREATE) { + // Initialize after create action + this.action = CREATE_ACTION; + + // Initialize number of parts + // part 1 = action + // part 2 = posDup flag + // part 3 = regionName + // part 4 = eventId + // part 5 = key + // part 6 = value (create and update only) + // part 7 = whether callbackArgument is non-null + // part 8 = callbackArgument (if non-null) + // part 9 = versionTimeStamp; + this.numberOfParts = (this.callbackArgument == null) ? 8 : 9; + } else if (operation == EnumListenerEvent.AFTER_UPDATE) { + // Initialize after update action + this.action = UPDATE_ACTION; + + // Initialize number of parts + this.numberOfParts = (this.callbackArgument == null) ? 8 : 9; + } else if (operation == EnumListenerEvent.AFTER_DESTROY) { + // Initialize after destroy action + this.action = DESTROY_ACTION; + + // Initialize number of parts + // Since there is no value, there is one less part + this.numberOfParts = (this.callbackArgument == null) ? 7 : 8; + } else if (operation == EnumListenerEvent.TIMESTAMP_UPDATE) { + // Initialize after destroy action + this.action = VERSION_ACTION; + + // Initialize number of parts + // Since there is no value, there is one less part + this.numberOfParts = (this.callbackArgument == null) ? 7 : 8; + } else if (operation == EnumListenerEvent.AFTER_INVALIDATE) { + // Initialize after invalidate action + this.action = INVALIDATE_ACTION; + + // Initialize number of parts + // Since there is no value, there is one less part + this.numberOfParts = (this.callbackArgument == null) ? 7 : 8; + } + } + + private void initializeOperationDetail(Operation operation) { + if (operation.isLocalLoad()) { + operationDetail = OP_DETAIL_LOCAL_LOAD; + } else if (operation.isNetLoad()) { + operationDetail = OP_DETAIL_NET_LOAD; + } else if (operation.isPutAll()) { + operationDetail = OP_DETAIL_PUTALL; + } else if (operation.isRemoveAll()) { + operationDetail = OP_DETAIL_REMOVEALL; + } else { + operationDetail = OP_DETAIL_NONE; + } + } + + public EventID getEventId() { + return this.id; + } + + /** + * Return the EventSequenceID of the Event + * @return EventSequenceID + */ + public EventSequenceID getEventSequenceID() { + return new EventSequenceID(id.getMembershipID(), id.getThreadID(), id + .getSequenceID()); + } + + public long getVersionTimeStamp() { + return this.versionTimeStamp; + } + + public int getSizeInBytes() { + // Calculate the size of this event. This is used for overflow to disk. + + // The sizes of the following variables are calculated: + // + // - the value (byte[]) + // - the original callback argument (Object) + // - primitive and object instance variable references + // + // The sizes of the following variables are not calculated: + + // - the key because it is a reference + // - the region and regionName because they are references + // - the operation because it is a reference + // - the entry event because it is nulled prior to calling this method + + // The size of instances of the following internal datatypes were estimated + // using a NullDataOutputStream and hardcoded into this method: + + // - the id (an instance of EventId) + // - the callbackArgument (an instance of GatewayEventCallbackArgument) + + int size = 0; + + // Add this event overhead + size += Sizeable.PER_OBJECT_OVERHEAD; + + // Add object references + // _id reference = 4 bytes + // _region reference = 4 bytes + // _regionName reference = 4 bytes + // _key reference = 4 bytes + // _callbackArgument reference = 4 bytes + // _operation reference = 4 bytes + // _entryEvent reference = 4 bytes + size += 28; + + // Add primitive references + // int _action = 4 bytes + // int _numberOfParts = 4 bytes + // byte _valueIsObject = 1 byte + // boolean _possibleDuplicate = 1 byte + // int bucketId = 4 bytes + // long shadowKey = 8 bytes + // long creationTime = 8 bytes + size += 30; + + // Add the id (an instance of EventId) + // The hardcoded value below was estimated using a NullDataOutputStream + size += Sizeable.PER_OBJECT_OVERHEAD + 56; + + // The value (a byte[]) + size += getSerializedValueSize(); + + // The callback argument (a GatewayEventCallbackArgument wrapping an Object + // which is the original callback argument) + // The hardcoded value below represents the GatewayEventCallbackArgument + // and was estimated using a NullDataOutputStream + size += Sizeable.PER_OBJECT_OVERHEAD + 194; + // The sizeOf call gets the size of the input callback argument. + size += Sizeable.PER_OBJECT_OVERHEAD + sizeOf(getCallbackArgument()); + + // the version timestamp + size += 8; + + return size; + } + + private int sizeOf(Object obj) { + int size = 0; + if (obj == null) { + return size; + } + if (obj instanceof String) { + size = ObjectSizer.DEFAULT.sizeof(obj); + } else if (obj instanceof Integer) { + size = 4; // estimate + } else if (obj instanceof Long) { + size = 8; // estimate + } else { + size = CachedDeserializableFactory.calcMemSize(obj) + - Sizeable.PER_OBJECT_OVERHEAD; + } + return size; + } + + + // Asif: If the GatewayEvent serializes to a node where the region itself may + // not be present or the + // region is not created yet , and if the gateway event queue is persistent, + // then even if + // we try to set the region in the fromData , we may still get null. Though + // the product is + // not using this method anywhere still not comfortable changing the Interface + // so + // modifying the implementation a bit. + + public Region getRegion() { + // The region will be null mostly for the other node where the gateway event + // is serialized + return this.region != null ? this.region : CacheFactory.getAnyInstance() + .getRegion(this.regionPath); + } + + public int getBucketId() { + return bucketId; + } + + /** + * @param tailKey + * the tailKey to set + */ + public void setShadowKey(Long tailKey) { + this.shadowKey = tailKey; + } + + /** + * @return the tailKey + */ + public Long getShadowKey() { + return this.shadowKey; + } + + @Override + public Version[] getSerializationVersions() { + // TODO Auto-generated method stub + return null; + } + + public int getSerializedValueSize() { + @Unretained(OffHeapIdentifier.GATEWAY_SENDER_EVENT_IMPL_VALUE) + Object vo = this.valueObj; + if (vo instanceof StoredObject) { + return ((StoredObject) vo).getSizeInBytes(); + } else { + return CachedDeserializableFactory.calcMemSize(getSerializedValue()); + } + } + + @Override + @Released(OffHeapIdentifier.GATEWAY_SENDER_EVENT_IMPL_VALUE) + public void release() { + @Released(OffHeapIdentifier.GATEWAY_SENDER_EVENT_IMPL_VALUE) + Object vo = this.valueObj; + if (OffHeapHelper.releaseAndTrackOwner(vo, this)) { + this.valueObj = null; + this.valueObjReleased = true; + } + } + + public static void release(@Released(OffHeapIdentifier.GATEWAY_SENDER_EVENT_IMPL_VALUE) Object o) { + if (o instanceof GatewaySenderEventImpl) { + ((GatewaySenderEventImpl) o).release(); + } + } + + /** + * Make a heap copy of this off-heap event and return it. + * A copy only needs to be made if the event's value is stored off-heap. + * If it is already on the java heap then just return "this". + * If it was stored off-heap and is no longer available (because it was released) then return null. + */ + public GatewaySenderEventImpl makeHeapCopyIfOffHeap() { + if (this.value != null) { + // we have the value stored on the heap so return this + return this; + } else { + Object v = this.valueObj; + if (v == null) { + if (this.valueObjReleased) { + // this means that the original off heap value was freed + return null; + } else { + return this; + } + } + if (v instanceof Chunk) { + try { + return makeCopy(); + } catch (IllegalStateException ex) { + // this means that the original off heap value was freed + return null; + } + } else { + // the valueObj does not use refCounts so just return this. + return this; + } + } + } + + protected GatewaySenderEventImpl makeCopy() { + return new GatewaySenderEventImpl(this); + } + + public void copyOffHeapValue() { + if (this.value == null) { + this.value = getSerializedValue(); + } + } +} diff --git a/gemfire-core/src/main/java/com/gemstone/gemfire/internal/offheap/Fragment.java b/gemfire-core/src/main/java/com/gemstone/gemfire/internal/offheap/Fragment.java new file mode 100644 index 000000000000..2287d2b1b678 --- /dev/null +++ b/gemfire-core/src/main/java/com/gemstone/gemfire/internal/offheap/Fragment.java @@ -0,0 +1,138 @@ +/* + * 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 com.gemstone.gemfire.internal.offheap; + +import java.util.concurrent.atomic.AtomicIntegerFieldUpdater; + +/** + * A fragment is a block of memory that can have chunks allocated from it. + * The allocations are always from the front so the free memory is always + * at the end. The freeIdx keeps track of the first byte of free memory in + * the fragment. + * The base memory address and the total size of a fragment never change. + * During compaction fragments go away and are recreated. + * + * + */ +public class Fragment implements MemoryBlock { + private static final byte FILL_BYTE = Chunk.FILL_BYTE; + private final long baseAddr; + private final int size; + @SuppressWarnings("unused") + private volatile int freeIdx; + private static AtomicIntegerFieldUpdater freeIdxUpdater = AtomicIntegerFieldUpdater.newUpdater(Fragment.class, "freeIdx"); + + public Fragment(long addr, int size) { + SimpleMemoryAllocatorImpl.validateAddress(addr); + this.baseAddr = addr; + this.size = size; + freeIdxUpdater.set(this, 0); + } + + public int freeSpace() { + return getSize() - getFreeIndex(); + } + + public boolean allocate(int oldOffset, int newOffset) { + return freeIdxUpdater.compareAndSet(this, oldOffset, newOffset); + } + + public int getFreeIndex() { + return freeIdxUpdater.get(this); + } + + public int getSize() { + return this.size; + } + + public long getMemoryAddress() { + return this.baseAddr; + } + + @Override + public State getState() { + return State.UNUSED; + } + + @Override + public MemoryBlock getNextBlock() { + throw new UnsupportedOperationException(); + } + + @Override + public int getBlockSize() { + return freeSpace(); + } + + @Override + public int getSlabId() { + throw new UnsupportedOperationException(); + } + + @Override + public int getFreeListId() { + return -1; + } + + @Override + public int getRefCount() { + return 0; + } + + @Override + public String getDataType() { + return "N/A"; + } + + @Override + public boolean isSerialized() { + return false; + } + + @Override + public boolean isCompressed() { + return false; + } + + @Override + public Object getDataValue() { + return null; + } + + public void fill() { + UnsafeMemoryChunk.fill(this.baseAddr, this.size, FILL_BYTE); + } + + @Override + public ChunkType getChunkType() { + return null; + } + + @Override + public boolean equals(Object o) { + if (o instanceof Fragment) { + return getMemoryAddress() == ((Fragment) o).getMemoryAddress(); + } + return false; + } + + @Override + public int hashCode() { + long value = this.getMemoryAddress(); + return (int)(value ^ (value >>> 32)); + } +} \ No newline at end of file diff --git a/gemfire-core/src/main/java/com/gemstone/gemfire/internal/offheap/MemoryAllocator.java b/gemfire-core/src/main/java/com/gemstone/gemfire/internal/offheap/MemoryAllocator.java new file mode 100644 index 000000000000..d3caca229177 --- /dev/null +++ b/gemfire-core/src/main/java/com/gemstone/gemfire/internal/offheap/MemoryAllocator.java @@ -0,0 +1,63 @@ +/* + * 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 com.gemstone.gemfire.internal.offheap; + +/** + * Basic contract for a heap that manages off heap memory. Any MemoryChunks allocated from a heap + * are returned to that heap when freed. + * + * @since 9.0 + */ +public interface MemoryAllocator { + /** + * @param size the size in bytes of the chunk of memory to allocate + * @param chunkType TODO + * @return the allocated chunk of memory. + * @throws IllegalStateException if the heap does not have enough memory to grant the request + */ + public MemoryChunk allocate(int size, ChunkType chunkType); + + /** + * Allocates off heap memory for the given data and returns a MemoryChunk + * that is backed by this allocated memory and that contains the data. + * @param data the bytes of the data to put in the allocated CachedDeserializable + * @param isSerialized true if data contains a serialized object; false if it is an actual byte array. + * @param isCompressed true if data is compressed; false if it is uncompressed. + * @param chunkType TODO + * @throws IllegalStateException if the heap does not have enough memory to grant the request + */ + public StoredObject allocateAndInitialize(byte[] data, boolean isSerialized, boolean isCompressed, ChunkType chunkType); + + public long getFreeMemory(); + + public long getUsedMemory(); + + public long getTotalMemory(); + + public OffHeapMemoryStats getStats(); + + /** + * This allocator will no longer be used so free up any system memory that belongs to it. + */ + public void close(); + + public MemoryInspector getMemoryInspector(); + + public void addMemoryUsageListener(MemoryUsageListener listener); + + public void removeMemoryUsageListener(MemoryUsageListener listener); +} diff --git a/gemfire-core/src/main/java/com/gemstone/gemfire/internal/offheap/MemoryBlock.java b/gemfire-core/src/main/java/com/gemstone/gemfire/internal/offheap/MemoryBlock.java new file mode 100755 index 000000000000..2d9cc6f3a7cc --- /dev/null +++ b/gemfire-core/src/main/java/com/gemstone/gemfire/internal/offheap/MemoryBlock.java @@ -0,0 +1,70 @@ +/* + * 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 com.gemstone.gemfire.internal.offheap; + + +/** + * Basic size and usage information about an off-heap memory block under + * inspection. For test validation only. + * + * @since 9.0 + */ +public interface MemoryBlock { + + public enum State { + /** Unused fragment (not used and not in a free list) */ + UNUSED, + /** Allocated chunk currently in use */ + ALLOCATED, + /** Deallocated chunk currently in a free list */ + DEALLOCATED + } + + public State getState(); + + /** + * Returns the unsafe memory address of the first byte of this block. + */ + public long getMemoryAddress(); + + /** + * Returns the size of this memory block in bytes. + */ + public int getBlockSize(); + + /** + * Returns the next memory block immediately after this one. + */ + public MemoryBlock getNextBlock(); + + /** + * Returns the identifier of which slab contains this block. + */ + public int getSlabId(); + + /** + * Returns the identifier of which free list contains this block. + */ + public int getFreeListId(); + + public int getRefCount(); + public String getDataType(); + public ChunkType getChunkType(); + public boolean isSerialized(); + public boolean isCompressed(); + public Object getDataValue(); +} diff --git a/gemfire-core/src/main/java/com/gemstone/gemfire/internal/offheap/OffHeapCachedDeserializable.java b/gemfire-core/src/main/java/com/gemstone/gemfire/internal/offheap/OffHeapCachedDeserializable.java new file mode 100644 index 000000000000..bf23f8e15886 --- /dev/null +++ b/gemfire-core/src/main/java/com/gemstone/gemfire/internal/offheap/OffHeapCachedDeserializable.java @@ -0,0 +1,141 @@ +/* + * 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 com.gemstone.gemfire.internal.offheap; + +import com.gemstone.gemfire.cache.Region; +import com.gemstone.gemfire.internal.DSCODE; +import com.gemstone.gemfire.internal.cache.BytesAndBitsForCompactor; +import com.gemstone.gemfire.internal.cache.EntryBits; +import com.gemstone.gemfire.internal.cache.RegionEntry; +import com.gemstone.gemfire.internal.offheap.annotations.Unretained; + +/** + * This abstract class is intended to be used by {@link MemoryChunk} implementations that also want + * to be a CachedDeserializable. + * + * @since 9.0 + */ +public abstract class OffHeapCachedDeserializable extends AbstractStoredObject implements MemoryChunkWithRefCount { + public abstract void setSerializedValue(byte[] value); + @Override + public abstract byte[] getSerializedValue(); + @Override + public abstract int getSizeInBytes(); + @Override + public abstract int getValueSizeInBytes(); + @Override + public abstract Object getDeserializedValue(Region r, RegionEntry re); + + @Override + public void fillSerializedValue(BytesAndBitsForCompactor wrapper, byte userBits) { + if (isSerialized()) { + userBits = EntryBits.setSerialized(userBits, true); + } + wrapper.setChunkData((Chunk) this, userBits); + } + + String getShortClassName() { + String cname = getClass().getName(); + return cname.substring(getClass().getPackage().getName().length()+1); + } + + @Override + public String toString() { + return getShortClassName()+"@"+this.hashCode(); + } + public boolean checkDataEquals(@Unretained OffHeapCachedDeserializable other) { + if (this == other) { + return true; + } + if (isSerialized() != other.isSerialized()) { + return false; + } + int mySize = getValueSizeInBytes(); + if (mySize != other.getValueSizeInBytes()) { + return false; + } + // We want to be able to do this operation without copying any of the data into the heap. + // Hopefully the jvm is smart enough to use our stack for this short lived array. + final byte[] dataCache1 = new byte[1024]; + final byte[] dataCache2 = new byte[dataCache1.length]; + // TODO OFFHEAP: no need to copy to heap. Just get the address of each and compare each byte. + int i; + // inc it twice since we are reading two different off-heap objects + SimpleMemoryAllocatorImpl.getAllocator().getStats().incReads(); + SimpleMemoryAllocatorImpl.getAllocator().getStats().incReads(); + for (i=0; i < mySize-(dataCache1.length-1); i+=dataCache1.length) { + this.readBytes(i, dataCache1); + other.readBytes(i, dataCache2); + for (int j=0; j < dataCache1.length; j++) { + if (dataCache1[j] != dataCache2[j]) { + return false; + } + } + } + int bytesToRead = mySize-i; + if (bytesToRead > 0) { + // need to do one more read which will be less than dataCache.length + this.readBytes(i, dataCache1, 0, bytesToRead); + other.readBytes(i, dataCache2, 0, bytesToRead); + for (int j=0; j < bytesToRead; j++) { + if (dataCache1[j] != dataCache2[j]) { + return false; + } + } + } + return true; + } + + public boolean isSerializedPdxInstance() { + byte dsCode = this.readByte(0); + return dsCode == DSCODE.PDX || dsCode == DSCODE.PDX_ENUM || dsCode == DSCODE.PDX_INLINE_ENUM; + } + + public boolean checkDataEquals(byte[] serializedObj) { + // caller was responsible for checking isSerialized + int mySize = getValueSizeInBytes(); + if (mySize != serializedObj.length) { + return false; + } + // We want to be able to do this operation without copying any of the data into the heap. + // Hopefully the jvm is smart enough to use our stack for this short lived array. + // TODO OFFHEAP: compare as ByteBuffers? + final byte[] dataCache = new byte[1024]; + int idx=0; + int i; + SimpleMemoryAllocatorImpl.getAllocator().getStats().incReads(); + for (i=0; i < mySize-(dataCache.length-1); i+=dataCache.length) { + this.readBytes(i, dataCache); + for (int j=0; j < dataCache.length; j++) { + if (dataCache[j] != serializedObj[idx++]) { + return false; + } + } + } + int bytesToRead = mySize-i; + if (bytesToRead > 0) { + // need to do one more read which will be less than dataCache.length + this.readBytes(i, dataCache, 0, bytesToRead); + for (int j=0; j < bytesToRead; j++) { + if (dataCache[j] != serializedObj[idx++]) { + return false; + } + } + } + return true; + } +} diff --git a/gemfire-core/src/main/java/com/gemstone/gemfire/internal/offheap/OffHeapRegionEntryHelper.java b/gemfire-core/src/main/java/com/gemstone/gemfire/internal/offheap/OffHeapRegionEntryHelper.java new file mode 100644 index 000000000000..bbe263a9eec4 --- /dev/null +++ b/gemfire-core/src/main/java/com/gemstone/gemfire/internal/offheap/OffHeapRegionEntryHelper.java @@ -0,0 +1,417 @@ +/* + * 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 com.gemstone.gemfire.internal.offheap; + +import com.gemstone.gemfire.internal.DSCODE; +import com.gemstone.gemfire.internal.cache.CachedDeserializableFactory; +import com.gemstone.gemfire.internal.cache.DiskEntry; +import com.gemstone.gemfire.internal.cache.DiskId; +import com.gemstone.gemfire.internal.cache.EntryEventImpl; +import com.gemstone.gemfire.internal.cache.OffHeapRegionEntry; +import com.gemstone.gemfire.internal.cache.RegionEntryContext; +import com.gemstone.gemfire.internal.cache.Token; +import com.gemstone.gemfire.internal.offheap.annotations.Released; +import com.gemstone.gemfire.internal.offheap.annotations.Retained; +import com.gemstone.gemfire.internal.offheap.annotations.Unretained; + +/** + * The class just has static methods + * that operate on instances of {@link OffHeapRegionEntry}. + * It allows common code to be shared for all the + * classes we have that implement {@link OffHeapRegionEntry}. + * + * @since 9.0 + */ +public class OffHeapRegionEntryHelper { + + protected static final long NULL_ADDRESS = 0L<<1; + protected static final long INVALID_ADDRESS = 1L<<1; + protected static final long LOCAL_INVALID_ADDRESS = 2L<<1; + protected static final long DESTROYED_ADDRESS = 3L<<1; + protected static final long REMOVED_PHASE1_ADDRESS = 4L<<1; + protected static final long REMOVED_PHASE2_ADDRESS = 5L<<1; + protected static final long END_OF_STREAM_ADDRESS = 6L<<1; + protected static final long NOT_AVAILABLE_ADDRESS = 7L<<1; + protected static final long TOMBSTONE_ADDRESS = 8L<<1; + public static final int MAX_LENGTH_FOR_DATA_AS_ADDRESS = 8; + /* private static final ChunkFactory chunkFactory ; + static { + ChunkFactory factory; + try { + factory= SimpleMemoryAllocatorImpl.getAllocator().getChunkFactory(); + + }catch(CacheClosedException ce) { + factory = null; + } + chunkFactory = factory; + }*/ + + private static final Token[] addrToObj = new Token[]{ + null, + Token.INVALID, + Token.LOCAL_INVALID, + Token.DESTROYED, + Token.REMOVED_PHASE1, + Token.REMOVED_PHASE2, + Token.END_OF_STREAM, + Token.NOT_AVAILABLE, + Token.TOMBSTONE, + }; + + private static long objectToAddress(@Unretained Object v) { + if (v instanceof Chunk) return ((Chunk) v).getMemoryAddress(); + if (v instanceof DataAsAddress) return ((DataAsAddress) v).getEncodedAddress(); + if (v == null) return NULL_ADDRESS; + if (v == Token.TOMBSTONE) return TOMBSTONE_ADDRESS; + if (v == Token.INVALID) return INVALID_ADDRESS; + if (v == Token.LOCAL_INVALID) return LOCAL_INVALID_ADDRESS; + if (v == Token.DESTROYED) return DESTROYED_ADDRESS; + if (v == Token.REMOVED_PHASE1) return REMOVED_PHASE1_ADDRESS; + if (v == Token.REMOVED_PHASE2) return REMOVED_PHASE2_ADDRESS; + if (v == Token.END_OF_STREAM) return END_OF_STREAM_ADDRESS; + if (v == Token.NOT_AVAILABLE) return NOT_AVAILABLE_ADDRESS; + throw new IllegalStateException("Can not convert " + v + " to an off heap address."); + } + + /** + * This method may release the object stored at ohAddress if the result + * needs to be decompressed and the decompress parameter is true. + * This decompressed result will be on the heap. + * + * @param ohAddress OFF_HEAP_ADDRESS + * @param decompress true if off-heap value should be decompressed before returning + * @param context used for decompression + * @return OFF_HEAP_OBJECT (sometimes) + */ + @Unretained @Retained + public static Object addressToObject(@Released @Retained long ohAddress, boolean decompress, RegionEntryContext context) { + if (isOffHeap(ohAddress)) { + //Chunk chunk = chunkFactory.newChunk(ohAddress); + @Unretained Chunk chunk = SimpleMemoryAllocatorImpl.getAllocator().getChunkFactory().newChunk(ohAddress); + @Unretained Object result = chunk; + if (decompress && chunk.isCompressed()) { + try { + // to fix bug 47982 need to: + byte[] decompressedBytes = chunk.getDecompressedBytes(context); + if (chunk.isSerialized()) { + // return a VMCachedDeserializable with the decompressed serialized bytes since chunk is serialized + result = CachedDeserializableFactory.create(decompressedBytes); + } else { + // return a byte[] since chunk is not serialized + result = decompressedBytes; + } + } finally { + // decompress is only true when this method is called by _getValueRetain. + // In that case the caller has already retained ohAddress because it thought + // we would return it. But we have unwrapped it and are returning the decompressed results. + // So we need to release the chunk here. + chunk.release(); + } + } + return result; + } else if ((ohAddress & ENCODED_BIT) != 0) { + DataAsAddress daa = new DataAsAddress(ohAddress); + Object result = daa; + if (decompress && daa.isCompressed()) { + byte[] decompressedBytes = daa.getDecompressedBytes(context); + if (daa.isSerialized()) { + // return a VMCachedDeserializable with the decompressed serialized bytes since daa is serialized + result = CachedDeserializableFactory.create(decompressedBytes); + } else { + // return a byte[] since daa is not serialized + result = decompressedBytes; + } + } + return result; + } else { + return addrToObj[(int) ohAddress>>1]; + } + } + + public static int getSerializedLengthFromDataAsAddress(DataAsAddress dataAsAddress) { + final long ohAddress = dataAsAddress.getEncodedAddress(); + + if ((ohAddress & ENCODED_BIT) != 0) { + boolean isLong = (ohAddress & LONG_BIT) != 0; + if (isLong) { + return 9; + } else { + return (int) ((ohAddress & SIZE_MASK) >> SIZE_SHIFT); + } + } else { + return 0; + } + } + + /* + * This method is optimized for cases where if the caller wants to convert address to a Token + * compared to addressToObject which would deserialize the value. + */ + private static Token addressToToken(long ohAddress) { + if (isOffHeap(ohAddress) || (ohAddress & ENCODED_BIT) != 0) { + return Token.NOT_A_TOKEN; + } else { + return addrToObj[(int) ohAddress>>1]; + } + } + + private static void releaseAddress(@Released long ohAddress) { + if (isOffHeap(ohAddress)) { + Chunk.release(ohAddress, true); + } + } + + /** + * The address in 're' will be @Released. + */ + public static void releaseEntry(@Released OffHeapRegionEntry re) { + if (re instanceof DiskEntry) { + DiskId did = ((DiskEntry) re).getDiskId(); + if (did != null && did.isPendingAsync()) { + synchronized (did) { + // This may not be needed so remove this call if it causes problems. + // We no longer need this entry to be written to disk so unschedule it + // before we change its value to REMOVED_PHASE2. + did.setPendingAsync(false); + setValue(re, Token.REMOVED_PHASE2); + return; + } + } + } + setValue(re, Token.REMOVED_PHASE2); + } + + public static void releaseEntry(@Unretained OffHeapRegionEntry re, @Released MemoryChunkWithRefCount expectedValue) { + long oldAddress = objectToAddress(expectedValue); + final long newAddress = objectToAddress(Token.REMOVED_PHASE2); + if (re.setAddress(oldAddress, newAddress) || re.getAddress() != newAddress) { + releaseAddress(oldAddress); + } /*else { + if (!calledSetValue || re.getAddress() != newAddress) { + expectedValue.release(); + } + }*/ + } + + /** + * This bit is set to indicate that this address has data encoded in it. + */ + private static long ENCODED_BIT = 1L; + /** + * This bit is set to indicate that the encoded data is serialized. + */ + static long SERIALIZED_BIT = 2L; + /** + * This bit is set to indicate that the encoded data is compressed. + */ + static long COMPRESSED_BIT = 4L; + /** + * This bit is set to indicate that the encoded data is a long whose value fits in 7 bytes. + */ + private static long LONG_BIT = 8L; + /** + * size is in the range 0..7 so we only need 3 bits. + */ + private static long SIZE_MASK = 0x70L; + /** + * number of bits to shift the size by. + */ + private static int SIZE_SHIFT = 4; + // the msb of this byte is currently unused + + /** + * Returns 0 if the data could not be encoded as an address. + */ + public static long encodeDataAsAddress(byte[] v, boolean isSerialized, boolean isCompressed) { + if (v.length < MAX_LENGTH_FOR_DATA_AS_ADDRESS) { + long result = 0L; + for (int i=0; i < v.length; i++) { + result |= v[i] & 0x00ff; + result <<= 8; + } + result |= (v.length << SIZE_SHIFT) | ENCODED_BIT; + if (isSerialized) { + result |= SERIALIZED_BIT; + } + if (isCompressed) { + result |= COMPRESSED_BIT; + } + return result; + } else if (isSerialized && !isCompressed) { + // Check for some special types that take more than 7 bytes to serialize + // but that might be able to be inlined with less than 8 bytes. + if (v[0] == DSCODE.LONG) { + // A long is currently always serialized as 8 bytes (9 if you include the dscode). + // But many long values will actually be small enough for is to encode in 7 bytes. + if ((v[1] == 0 && (v[2] & 0x80) == 0) || (v[1] == -1 && (v[2] & 0x80) != 0)) { + // The long can be encoded as 7 bytes since the most signification byte + // is simply an extension of the sign byte on the second most signification byte. + long result = 0L; + for (int i=2; i < v.length; i++) { + result |= v[i] & 0x00ff; + result <<= 8; + } + result |= (7 << SIZE_SHIFT) | LONG_BIT | SERIALIZED_BIT | ENCODED_BIT; + return result; + } + } + } + return 0L; + } + + static Object decodeAddressToObject(long ohAddress) { + byte[] bytes = decodeAddressToBytes(ohAddress, true, false); + + boolean isSerialized = (ohAddress & SERIALIZED_BIT) != 0; + if (isSerialized) { + return EntryEventImpl.deserialize(bytes); + } else { + return bytes; + } + } + + static byte[] decodeAddressToBytes(long addr, boolean decompress, boolean compressedOk) { + assert (addr & ENCODED_BIT) != 0; + boolean isCompressed = (addr & COMPRESSED_BIT) != 0; + int size = (int) ((addr & SIZE_MASK) >> SIZE_SHIFT); + boolean isLong = (addr & LONG_BIT) != 0; + byte[] bytes; + if (isLong) { + bytes = new byte[9]; + bytes[0] = DSCODE.LONG; + for (int i=8; i >=2; i--) { + addr >>= 8; + bytes[i] = (byte) (addr & 0x00ff); + } + if ((bytes[2] & 0x80) != 0) { + bytes[1] = -1; + } else { + bytes[1] = 0; + } + } else { + bytes = new byte[size]; + for (int i=size-1; i >=0; i--) { + addr >>= 8; + bytes[i] = (byte) (addr & 0x00ff); + } + } + if (decompress && isCompressed) { + if (!compressedOk) { + throw new UnsupportedOperationException("Did not expect DataAsAddress to be compressed"); + } + } + return bytes; + } + + /** + * The previous value at the address in 're' will be @Released and then the + * address in 're' will be set to the @Unretained address of 'v'. + */ + public static void setValue(@Released OffHeapRegionEntry re, @Unretained Object v) { + // setValue is called when synced so I don't need to worry + // about oldAddress being released by someone else. + final long newAddress = objectToAddress(v); + long oldAddress; + do { + oldAddress = re.getAddress(); + } while (!re.setAddress(oldAddress, newAddress)); + ReferenceCountHelper.setReferenceCountOwner(re); + releaseAddress(oldAddress); + ReferenceCountHelper.setReferenceCountOwner(null); + } + + public static Token getValueAsToken(@Unretained OffHeapRegionEntry re) { + return addressToToken(re.getAddress()); + } + + @Unretained + public static Object _getValue(@Unretained OffHeapRegionEntry re) { + return addressToObject(re.getAddress(), false, null); // no context needed so decompress is false + } + + public static boolean isOffHeap(long addr) { + if ((addr & ENCODED_BIT) != 0) return false; + if (addr < 0) return true; + addr >>= 1; // shift right 1 to convert to array index; + return addr >= addrToObj.length; + } + + /** + * If the value stored at the location held in 're' is returned, then it will + * be Retained. If the value returned is 're' decompressed into another + * off-heap location, then 're' will be Unretained but the new, + * decompressed value will be Retained. Therefore, whichever is returned + * (the value at the address in 're' or the decompressed value) it will have + * been Retained. + * + * @return possible OFF_HEAP_OBJECT (caller must release) + */ + @Retained + public static Object _getValueRetain(@Retained @Unretained OffHeapRegionEntry re, boolean decompress, RegionEntryContext context) { + int retryCount = 0; + @Retained long addr = re.getAddress(); + while (isOffHeap(addr)) { + if (Chunk.retain(addr)) { + @Unretained long addr2 = re.getAddress(); + if (addr != addr2) { + retryCount = 0; + Chunk.release(addr, true); + // spin around and try again. + addr = addr2; + } else { + return addressToObject(addr, decompress, context); + } + } else { + // spin around and try again + long addr2 = re.getAddress(); + retryCount++; + if (retryCount > 100) { + throw new IllegalStateException("retain failed addr=" + addr + " addr2=" + addr + " 100 times" + " history=" + ReferenceCountHelper.getFreeRefCountInfo(addr)); + } + addr = addr2; + // Since retain returned false our region entry should have a different + // value in it. However the actual address could be the exact same one + // because addr was released, then reallocated from the free list and set + // back into this region entry. See bug 47782 + } + } + return addressToObject(addr, decompress, context); + } + + + + public static boolean isSerialized(long address) { + return (address & SERIALIZED_BIT) != 0; + } + + public static boolean isCompressed(long address) { + return (address & COMPRESSED_BIT) != 0; + } + + private static final ThreadLocal clearNeedsToCheckForOffHeap = new ThreadLocal(); + public static boolean doesClearNeedToCheckForOffHeap() { + return clearNeedsToCheckForOffHeap.get() != null; + } + public static void doWithOffHeapClear(Runnable r) { + clearNeedsToCheckForOffHeap.set(Boolean.TRUE); + try { + r.run(); + } finally { + clearNeedsToCheckForOffHeap.remove(); + } + } +} diff --git a/gemfire-core/src/main/java/com/gemstone/gemfire/internal/offheap/SimpleMemoryAllocatorImpl.java b/gemfire-core/src/main/java/com/gemstone/gemfire/internal/offheap/SimpleMemoryAllocatorImpl.java new file mode 100644 index 000000000000..3fe864ae8677 --- /dev/null +++ b/gemfire-core/src/main/java/com/gemstone/gemfire/internal/offheap/SimpleMemoryAllocatorImpl.java @@ -0,0 +1,623 @@ +/* + * 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 com.gemstone.gemfire.internal.offheap; + +import java.util.ArrayList; +import java.util.Arrays; +import java.util.Collections; +import java.util.Comparator; +import java.util.HashSet; +import java.util.Iterator; +import java.util.List; +import java.util.Set; +import java.util.concurrent.atomic.AtomicBoolean; + +import org.apache.logging.log4j.Logger; + +import com.gemstone.gemfire.LogWriter; +import com.gemstone.gemfire.cache.CacheClosedException; +import com.gemstone.gemfire.cache.Region; +import com.gemstone.gemfire.cache.RegionService; +import com.gemstone.gemfire.internal.cache.BucketRegion; +import com.gemstone.gemfire.internal.cache.GemFireCacheImpl; +import com.gemstone.gemfire.internal.cache.LocalRegion; +import com.gemstone.gemfire.internal.cache.PartitionedRegion; +import com.gemstone.gemfire.internal.cache.PartitionedRegionDataStore; +import com.gemstone.gemfire.internal.cache.RegionEntry; +import com.gemstone.gemfire.internal.logging.LogService; +import com.gemstone.gemfire.internal.offheap.annotations.OffHeapIdentifier; +import com.gemstone.gemfire.internal.offheap.annotations.Unretained; + +/** + * This allocator is somewhat like an Arena allocator. + * We start out with an array of multiple large chunks of memory. + * We also keep lists of any chunk that have been allocated and freed. + * An allocation will always try to find a chunk in a free list that is a close fit to the requested size. + * If no close fits exist then it allocates the next slice from the front of one the original large chunks. + * If we can not find enough free memory then all the existing free memory is compacted. + * If we still do not have enough to make the allocation an exception is thrown. + * + * @since 9.0 + */ +public final class SimpleMemoryAllocatorImpl implements MemoryAllocator { + + static final Logger logger = LogService.getLogger(); + + public static final String FREE_OFF_HEAP_MEMORY_PROPERTY = "gemfire.free-off-heap-memory"; + + /** + * How many extra allocations to do for each actual slab allocation. + * Is this really a good idea? + */ + public static final int BATCH_SIZE = Integer.getInteger("gemfire.OFF_HEAP_BATCH_ALLOCATION_SIZE", 1); + /** + * Every allocated chunk smaller than TINY_MULTIPLE*TINY_FREE_LIST_COUNT will allocate a chunk of memory that is a multiple of this value. + * Sizes are always rounded up to the next multiple of this constant + * so internal fragmentation will be limited to TINY_MULTIPLE-1 bytes per allocation + * and on average will be TINY_MULTIPLE/2 given a random distribution of size requests. + * This does not account for the additional internal fragmentation caused by the off-heap header + * which currently is always 8 bytes. + */ + public final static int TINY_MULTIPLE = Integer.getInteger("gemfire.OFF_HEAP_ALIGNMENT", 8); + /** + * Number of free lists to keep for tiny allocations. + */ + public final static int TINY_FREE_LIST_COUNT = Integer.getInteger("gemfire.OFF_HEAP_FREE_LIST_COUNT", 16384); + public final static int MAX_TINY = TINY_MULTIPLE*TINY_FREE_LIST_COUNT; + /** + * How many unused bytes are allowed in a huge memory allocation. + */ + public final static int HUGE_MULTIPLE = 256; + + volatile OffHeapMemoryStats stats; + + volatile OutOfOffHeapMemoryListener ooohml; + + /** The MemoryChunks that this allocator is managing by allocating smaller chunks of them. + * The contents of this array never change. + */ + private final UnsafeMemoryChunk[] slabs; + private final long totalSlabSize; + private final int largestSlab; + + public final FreeListManager freeList; + + private MemoryInspector memoryInspector; + + private volatile MemoryUsageListener[] memoryUsageListeners = new MemoryUsageListener[0]; + + private static SimpleMemoryAllocatorImpl singleton = null; + final ChunkFactory chunkFactory; + + public static SimpleMemoryAllocatorImpl getAllocator() { + SimpleMemoryAllocatorImpl result = singleton; + if (result == null) { + throw new CacheClosedException("Off Heap memory allocator does not exist."); + } + return result; + } + + private static final boolean DO_EXPENSIVE_VALIDATION = Boolean.getBoolean("gemfire.OFF_HEAP_DO_EXPENSIVE_VALIDATION"); + + public static MemoryAllocator create(OutOfOffHeapMemoryListener ooohml, OffHeapMemoryStats stats, LogWriter lw, + int slabCount, long offHeapMemorySize, long maxSlabSize) { + return create(ooohml, stats, lw, slabCount, offHeapMemorySize, maxSlabSize, + null, TINY_MULTIPLE, BATCH_SIZE, TINY_FREE_LIST_COUNT, HUGE_MULTIPLE, + new UnsafeMemoryChunk.Factory() { + @Override + public UnsafeMemoryChunk create(int size) { + return new UnsafeMemoryChunk(size); + } + }); + } + + private static SimpleMemoryAllocatorImpl create(OutOfOffHeapMemoryListener ooohml, OffHeapMemoryStats stats, LogWriter lw, + int slabCount, long offHeapMemorySize, long maxSlabSize, + UnsafeMemoryChunk[] slabs, int tinyMultiple, int batchSize, int tinyFreeListCount, int hugeMultiple, + UnsafeMemoryChunk.Factory memChunkFactory) { + SimpleMemoryAllocatorImpl result = singleton; + boolean created = false; + try { + if (result != null) { + result.reuse(ooohml, lw, stats, offHeapMemorySize, slabs); + if (lw != null) { + lw.config("Reusing " + result.getTotalMemory() + " bytes of off-heap memory. The maximum size of a single off-heap object is " + result.largestSlab + " bytes."); + } + created = true; + LifecycleListener.invokeAfterReuse(result); + } else { + if (slabs == null) { + // allocate memory chunks + //SimpleMemoryAllocatorImpl.cleanupPreviousAllocator(); + if (lw != null) { + lw.config("Allocating " + offHeapMemorySize + " bytes of off-heap memory. The maximum size of a single off-heap object is " + maxSlabSize + " bytes."); + } + slabs = new UnsafeMemoryChunk[slabCount]; + long uncreatedMemory = offHeapMemorySize; + for (int i=0; i < slabCount; i++) { + try { + if (uncreatedMemory >= maxSlabSize) { + slabs[i] = memChunkFactory.create((int) maxSlabSize); + uncreatedMemory -= maxSlabSize; + } else { + // the last slab can be smaller then maxSlabSize + slabs[i] = memChunkFactory.create((int) uncreatedMemory); + } + } catch (OutOfMemoryError err) { + if (i > 0) { + if (lw != null) { + lw.severe("Off-heap memory creation failed after successfully allocating " + (i*maxSlabSize) + " bytes of off-heap memory."); + } + } + for (int j=0; j < i; j++) { + if (slabs[j] != null) { + slabs[j].release(); + } + } + throw err; + } + } + } + + result = new SimpleMemoryAllocatorImpl(ooohml, stats, slabs, tinyMultiple, batchSize, tinyFreeListCount, hugeMultiple); + singleton = result; + LifecycleListener.invokeAfterCreate(result); + created = true; + } + } finally { + if (!created) { + if (stats != null) { + stats.close(); + } + if (ooohml != null) { + ooohml.close(); + } + } + } + return result; + } + // for unit tests + static SimpleMemoryAllocatorImpl create(OutOfOffHeapMemoryListener ooohml, OffHeapMemoryStats stats, LogWriter lw, + int slabCount, long offHeapMemorySize, long maxSlabSize, UnsafeMemoryChunk.Factory memChunkFactory) { + return create(ooohml, stats, lw, slabCount, offHeapMemorySize, maxSlabSize, + null, TINY_MULTIPLE, BATCH_SIZE, TINY_FREE_LIST_COUNT, HUGE_MULTIPLE, memChunkFactory); + } + // for unit tests + public static SimpleMemoryAllocatorImpl create(OutOfOffHeapMemoryListener oooml, OffHeapMemoryStats stats, UnsafeMemoryChunk[] slabs) { + return create(oooml, stats, slabs, TINY_MULTIPLE, BATCH_SIZE, TINY_FREE_LIST_COUNT, HUGE_MULTIPLE); + } + // for unit tests + static SimpleMemoryAllocatorImpl create(OutOfOffHeapMemoryListener oooml, OffHeapMemoryStats stats, UnsafeMemoryChunk[] slabs, + int tinyMultiple, int batchSize, int tinyFreeListCount, int hugeMultiple) { + int slabCount = 0; + long offHeapMemorySize = 0; + long maxSlabSize = 0; + if (slabs != null) { + slabCount = slabs.length; + for (int i=0; i < slabCount; i++) { + int slabSize = slabs[i].getSize(); + offHeapMemorySize += slabSize; + if (slabSize > maxSlabSize) { + maxSlabSize = slabSize; + } + } + } + return create(oooml, stats, null, slabCount, offHeapMemorySize, maxSlabSize, slabs, tinyMultiple, batchSize, tinyFreeListCount, hugeMultiple, null); + } + + + private void reuse(OutOfOffHeapMemoryListener oooml, LogWriter lw, OffHeapMemoryStats newStats, long offHeapMemorySize, UnsafeMemoryChunk[] slabs) { + if (isClosed()) { + throw new IllegalStateException("Can not reuse a closed off-heap memory manager."); + } + if (oooml == null) { + throw new IllegalArgumentException("OutOfOffHeapMemoryListener is null"); + } + if (getTotalMemory() != offHeapMemorySize) { + if (lw != null) { + lw.warning("Using " + getTotalMemory() + " bytes of existing off-heap memory instead of the requested " + offHeapMemorySize); + } + } + if (slabs != null) { + // this will only happen in unit tests + if (slabs != this.slabs) { + // If the unit test gave us a different array + // of slabs then something is wrong because we + // are trying to reuse the old already allocated + // array which means that the new one will never + // be used. Note that this code does not bother + // comparing the contents of the arrays. + throw new IllegalStateException("attempted to reuse existing off-heap memory even though new off-heap memory was allocated"); + } + } + this.ooohml = oooml; + newStats.initialize(this.stats); + this.stats = newStats; + } + + private SimpleMemoryAllocatorImpl(final OutOfOffHeapMemoryListener oooml, final OffHeapMemoryStats stats, final UnsafeMemoryChunk[] slabs, + int tinyMultiple, int batchSize, int tinyFreeListCount, int hugeMultiple) { + if (oooml == null) { + throw new IllegalArgumentException("OutOfOffHeapMemoryListener is null"); + } + if (tinyMultiple <= 0 || (tinyMultiple & 3) != 0) { + throw new IllegalStateException("gemfire.OFF_HEAP_ALIGNMENT must be a multiple of 8."); + } + if (tinyMultiple > 256) { + // this restriction exists because of the dataSize field in the object header. + throw new IllegalStateException("gemfire.OFF_HEAP_ALIGNMENT must be <= 256 and a multiple of 8."); + } + if (batchSize <= 0) { + throw new IllegalStateException("gemfire.OFF_HEAP_BATCH_ALLOCATION_SIZE must be >= 1."); + } + if (tinyFreeListCount <= 0) { + throw new IllegalStateException("gemfire.OFF_HEAP_FREE_LIST_COUNT must be >= 1."); + } + if (hugeMultiple > 256 || hugeMultiple < 0) { + // this restriction exists because of the dataSize field in the object header. + throw new IllegalStateException("HUGE_MULTIPLE must be >= 0 and <= 256 but it was " + hugeMultiple); + } + + this.ooohml = oooml; + this.stats = stats; + this.slabs = slabs; + this.chunkFactory = new GemFireChunkFactory(); + + //OSProcess.printStacks(0, InternalDistributedSystem.getAnyInstance().getLogWriter(), false); + this.stats.setFragments(slabs.length); + largestSlab = slabs[0].getSize(); + this.stats.setLargestFragment(largestSlab); + long total = 0; + for (int i=0; i < slabs.length; i++) { + //debugLog("slab"+i + " @" + Long.toHexString(slabs[i].getMemoryAddress()), false); + //UnsafeMemoryChunk.clearAbsolute(slabs[i].getMemoryAddress(), slabs[i].getSize()); // HACK to see what this does to bug 47883 + total += slabs[i].getSize(); + } + totalSlabSize = total; + this.stats.incMaxMemory(this.totalSlabSize); + this.stats.incFreeMemory(this.totalSlabSize); + + this.freeList = new FreeListManager(this); + this.memoryInspector = new MemoryInspectorImpl(this.freeList); + } + + public List getLostChunks() { + List liveChunks = this.freeList.getLiveChunks(); + List regionChunks = getRegionLiveChunks(); + Set liveChunksSet = new HashSet<>(liveChunks); + Set regionChunksSet = new HashSet<>(regionChunks); + liveChunksSet.removeAll(regionChunksSet); + return new ArrayList(liveChunksSet); + } + + /** + * Returns a possibly empty list that contains all the Chunks used by regions. + */ + private List getRegionLiveChunks() { + ArrayList result = new ArrayList(); + RegionService gfc = GemFireCacheImpl.getInstance(); + if (gfc != null) { + Iterator> rootIt = gfc.rootRegions().iterator(); + while (rootIt.hasNext()) { + Region rr = rootIt.next(); + getRegionLiveChunks(rr, result); + Iterator> srIt = rr.subregions(true).iterator(); + while (srIt.hasNext()) { + getRegionLiveChunks(srIt.next(), result); + } + } + } + return result; + } + + private void getRegionLiveChunks(Region r, List result) { + if (r.getAttributes().getOffHeap()) { + + if (r instanceof PartitionedRegion) { + PartitionedRegionDataStore prs = ((PartitionedRegion) r).getDataStore(); + if (prs != null) { + Set brs = prs.getAllLocalBucketRegions(); + if (brs != null) { + for (BucketRegion br : brs) { + if (br != null && !br.isDestroyed()) { + this.basicGetRegionLiveChunks(br, result); + } + + } + } + } + } else { + this.basicGetRegionLiveChunks((LocalRegion) r, result); + } + + } + + } + + private void basicGetRegionLiveChunks(LocalRegion r, List result) { + for (Object key : r.keySet()) { + RegionEntry re = ((LocalRegion) r).getRegionEntry(key); + if (re != null) { + /** + * value could be GATEWAY_SENDER_EVENT_IMPL_VALUE or region entry value. + */ + @Unretained(OffHeapIdentifier.GATEWAY_SENDER_EVENT_IMPL_VALUE) + Object value = re._getValue(); + if (value instanceof Chunk) { + result.add((Chunk) value); + } + } + } + } + + @Override + public MemoryChunk allocate(int size, ChunkType chunkType) { + //System.out.println("allocating " + size); + Chunk result = this.freeList.allocate(size, chunkType); + //("allocated off heap object of size " + size + " @" + Long.toHexString(result.getMemoryAddress()), true); + if (ReferenceCountHelper.trackReferenceCounts()) { + ReferenceCountHelper.refCountChanged(result.getMemoryAddress(), false, 1); + } + return result; + } + + public static void debugLog(String msg, boolean logStack) { + if (logStack) { + logger.info(msg, new RuntimeException(msg)); + } else { + logger.info(msg); + } + } + + @Override + public StoredObject allocateAndInitialize(byte[] v, boolean isSerialized, boolean isCompressed, ChunkType chunkType) { + long addr = OffHeapRegionEntryHelper.encodeDataAsAddress(v, isSerialized, isCompressed); + if (addr != 0L) { + return new DataAsAddress(addr); + } + if (chunkType == null) { + chunkType = GemFireChunk.TYPE; + } + + Chunk result = this.freeList.allocate(v.length, chunkType); + //debugLog("allocated off heap object of size " + v.length + " @" + Long.toHexString(result.getMemoryAddress()), true); + //debugLog("allocated off heap object of size " + v.length + " @" + Long.toHexString(result.getMemoryAddress()) + "chunkSize=" + result.getSize() + " isSerialized=" + isSerialized + " v=" + Arrays.toString(v), true); + if (ReferenceCountHelper.trackReferenceCounts()) { + ReferenceCountHelper.refCountChanged(result.getMemoryAddress(), false, 1); + } + assert result.getChunkType() == chunkType: "chunkType=" + chunkType + " getChunkType()=" + result.getChunkType(); + result.setSerializedValue(v); + result.setSerialized(isSerialized); + result.setCompressed(isCompressed); + return result; + } + + @Override + public long getFreeMemory() { + return this.freeList.getFreeMemory(); + } + + @Override + public long getUsedMemory() { + return this.freeList.getUsedMemory(); + } + + @Override + public long getTotalMemory() { + return totalSlabSize; + } + + @Override + public void close() { + try { + LifecycleListener.invokeBeforeClose(this); + } finally { + this.ooohml.close(); + if (Boolean.getBoolean(FREE_OFF_HEAP_MEMORY_PROPERTY)) { + realClose(); + } + } + } + + public static void freeOffHeapMemory() { + SimpleMemoryAllocatorImpl ma = singleton; + if (ma != null) { + ma.realClose(); + } + } + + private void realClose() { + // Removing this memory immediately can lead to a SEGV. See 47885. + if (setClosed()) { + freeSlabs(this.slabs); + this.stats.close(); + singleton = null; + } + } + + private final AtomicBoolean closed = new AtomicBoolean(); + private boolean isClosed() { + return this.closed.get(); + } + /** + * Returns true if caller is the one who should close; false if some other thread + * is already closing. + */ + private boolean setClosed() { + return this.closed.compareAndSet(false, true); + } + + + private static void freeSlabs(final UnsafeMemoryChunk[] slabs) { + //debugLog("called freeSlabs", false); + for (int i=0; i < slabs.length; i++) { + slabs[i].release(); + } + } + + void freeChunk(long addr) { + this.freeList.free(addr); + } + + protected UnsafeMemoryChunk[] getSlabs() { + return this.slabs; + } + + /** + * Return the slabId of the slab that contains the given addr. + */ + int findSlab(long addr) { + for (int i=0; i < this.slabs.length; i++) { + UnsafeMemoryChunk slab = this.slabs[i]; + long slabAddr = slab.getMemoryAddress(); + if (addr >= slabAddr) { + if (addr < slabAddr + slab.getSize()) { + return i; + } + } + } + throw new IllegalStateException("could not find a slab for addr " + addr); + } + + public OffHeapMemoryStats getStats() { + return this.stats; + } + + public ChunkFactory getChunkFactory() { + return this.chunkFactory; + } + + @Override + public void addMemoryUsageListener(final MemoryUsageListener listener) { + synchronized (this.memoryUsageListeners) { + final MemoryUsageListener[] newMemoryUsageListeners = Arrays.copyOf(this.memoryUsageListeners, this.memoryUsageListeners.length + 1); + newMemoryUsageListeners[this.memoryUsageListeners.length] = listener; + this.memoryUsageListeners = newMemoryUsageListeners; + } + } + + @Override + public void removeMemoryUsageListener(final MemoryUsageListener listener) { + synchronized (this.memoryUsageListeners) { + int listenerIndex = -1; + for (int i = 0; i < this.memoryUsageListeners.length; i++) { + if (this.memoryUsageListeners[i] == listener) { + listenerIndex = i; + break; + } + } + + if (listenerIndex != -1) { + final MemoryUsageListener[] newMemoryUsageListeners = new MemoryUsageListener[this.memoryUsageListeners.length - 1]; + System.arraycopy(this.memoryUsageListeners, 0, newMemoryUsageListeners, 0, listenerIndex); + System.arraycopy(this.memoryUsageListeners, listenerIndex + 1, newMemoryUsageListeners, listenerIndex, + this.memoryUsageListeners.length - listenerIndex - 1); + this.memoryUsageListeners = newMemoryUsageListeners; + } + } + } + + void notifyListeners() { + final MemoryUsageListener[] savedListeners = this.memoryUsageListeners; + + if (savedListeners.length == 0) { + return; + } + + final long bytesUsed = getUsedMemory(); + for (int i = 0; i < savedListeners.length; i++) { + savedListeners[i].updateMemoryUsed(bytesUsed); + } + } + + static void validateAddress(long addr) { + validateAddressAndSize(addr, -1); + } + + static void validateAddressAndSize(long addr, int size) { + // if the caller does not have a "size" to provide then use -1 + if ((addr & 7) != 0) { + StringBuilder sb = new StringBuilder(); + sb.append("address was not 8 byte aligned: 0x").append(Long.toString(addr, 16)); + SimpleMemoryAllocatorImpl ma = SimpleMemoryAllocatorImpl.singleton; + if (ma != null) { + sb.append(". Valid addresses must be in one of the following ranges: "); + for (int i=0; i < ma.slabs.length; i++) { + long startAddr = ma.slabs[i].getMemoryAddress(); + long endAddr = startAddr + ma.slabs[i].getSize(); + sb.append("[").append(Long.toString(startAddr, 16)).append("..").append(Long.toString(endAddr, 16)).append("] "); + } + } + throw new IllegalStateException(sb.toString()); + } + if (addr >= 0 && addr < 1024) { + throw new IllegalStateException("addr was smaller than expected 0x" + addr); + } + validateAddressAndSizeWithinSlab(addr, size, DO_EXPENSIVE_VALIDATION); + } + + static void validateAddressAndSizeWithinSlab(long addr, int size, boolean doExpensiveValidation) { + if (doExpensiveValidation) { + SimpleMemoryAllocatorImpl ma = SimpleMemoryAllocatorImpl.singleton; + if (ma != null) { + for (int i=0; i < ma.slabs.length; i++) { + if (ma.slabs[i].getMemoryAddress() <= addr && addr < (ma.slabs[i].getMemoryAddress() + ma.slabs[i].getSize())) { + // validate addr + size is within the same slab + if (size != -1) { // skip this check if size is -1 + if (!(ma.slabs[i].getMemoryAddress() <= (addr+size-1) && (addr+size-1) < (ma.slabs[i].getMemoryAddress() + ma.slabs[i].getSize()))) { + throw new IllegalStateException(" address 0x" + Long.toString(addr+size-1, 16) + " does not address the original slab memory"); + } + } + return; + } + } + throw new IllegalStateException(" address 0x" + Long.toString(addr, 16) + " does not address the original slab memory"); + } + } + } + + public synchronized List getOrphans() { + List liveChunks = this.freeList.getLiveChunks(); + List regionChunks = getRegionLiveChunks(); + liveChunks.removeAll(regionChunks); + List orphans = new ArrayList(); + for (Chunk chunk: liveChunks) { + orphans.add(new MemoryBlockNode(this, chunk)); + } + Collections.sort(orphans, + new Comparator() { + @Override + public int compare(MemoryBlock o1, MemoryBlock o2) { + return Long.valueOf(o1.getMemoryAddress()).compareTo(o2.getMemoryAddress()); + } + }); + //this.memoryBlocks = new WeakReference>(orphans); + return orphans; + } + + @Override + public MemoryInspector getMemoryInspector() { + return this.memoryInspector; + } + + /* + * Set this to "true" to perform data integrity checks on allocated and reused Chunks. This may clobber + * performance so turn on only when necessary. + */ + final boolean validateMemoryWithFill = Boolean.getBoolean("gemfire.validateOffHeapWithFill"); + +} diff --git a/gemfire-core/src/main/java/com/gemstone/gemfire/internal/tcp/ByteBufferInputStream.java b/gemfire-core/src/main/java/com/gemstone/gemfire/internal/tcp/ByteBufferInputStream.java new file mode 100644 index 000000000000..8e68b16f0db9 --- /dev/null +++ b/gemfire-core/src/main/java/com/gemstone/gemfire/internal/tcp/ByteBufferInputStream.java @@ -0,0 +1,1018 @@ +/* + * 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 com.gemstone.gemfire.internal.tcp; + +import java.io.DataInput; +import java.io.DataInputStream; +import java.io.DataOutput; +import java.io.IOException; +import java.io.InputStream; +import java.io.ObjectInput; +import java.io.ObjectOutput; +import java.lang.reflect.InvocationTargetException; +import java.lang.reflect.Method; +import java.nio.BufferUnderflowException; +import java.nio.ByteBuffer; +import java.nio.ByteOrder; + +import com.gemstone.gemfire.internal.ByteBufferWriter; +import com.gemstone.gemfire.internal.HeapDataOutputStream; +import com.gemstone.gemfire.internal.offheap.Chunk; +import com.gemstone.gemfire.internal.offheap.UnsafeMemoryChunk; + +/** + *

+ * ByteBufferInputStream is an input stream for ByteBuffer objects. It's + * incredible that the jdk doesn't have one of these already. + *

+ * + * The methods in this class throw BufferUnderflowException, not EOFException, + * if the end of the buffer is reached before we read the full amount. That + * breaks the contract for InputStream and DataInput, but it works for our code. + * + * @since 3.0 + */ + +public class ByteBufferInputStream extends InputStream implements DataInput, java.io.Externalizable +{ + /** + * This interface is used to wrap either a ByteBuffer or an offheap Chunk + * as the source of bytes for a ByteBufferInputStream. + * + * + */ + public static interface ByteSource { + int position(); + int limit(); + int capacity(); + int remaining(); + + void position(int newPosition); + void limit(int endOffset); + + void get(byte[] b); + void get(byte[] b, int off, int len); + byte get(); + byte get(int pos); + short getShort(); + short getShort(int pos); + char getChar(); + char getChar(int pos); + int getInt(); + int getInt(int pos); + long getLong(); + long getLong(int pos); + float getFloat(); + float getFloat(int pos); + double getDouble(); + double getDouble(int pos); + + boolean hasArray(); + byte[] array(); + int arrayOffset(); + + ByteSource duplicate(); + ByteSource slice(int length); + ByteSource slice(int pos, int limit); + + /** + * Returns the ByteBuffer that this ByteSource wraps; null if no ByteBuffer + */ + ByteBuffer getBackingByteBuffer(); + + void sendTo(ByteBuffer out); + void sendTo(DataOutput out) throws IOException; + } + + public static class ByteSourceFactory { + public static ByteSource wrap(byte[] bytes) { + return new ByteBufferByteSource(ByteBuffer.wrap(bytes)); + } + public static ByteSource create(ByteBuffer bb) { + return new ByteBufferByteSource(bb); + } + public static ByteSource create(Chunk chunk) { + // Since I found a way to create a DirectByteBuffer (using reflection) from a Chunk + // we might not even need the ByteSource abstraction any more. + // But it is possible that createByteBuffer will not work on a different jdk so keep it for now. + ByteBuffer bb = chunk.createDirectByteBuffer(); + if (bb != null) { + return create(bb); + } else { + return new OffHeapByteSource(chunk); + } + } + } + + public static class ByteBufferByteSource implements ByteSource { + private final ByteBuffer bb; + public ByteBufferByteSource(ByteBuffer bb) { + this.bb = bb; + } + /** + * Returns the current hash code of this byte source. + * + *

The hash code of a byte source depends only upon its remaining + * elements; that is, upon the elements from position() up to, and + * including, the element at limit() - 1. + * + *

Because byte source hash codes are content-dependent, it is inadvisable + * to use byte sources as keys in hash maps or similar data structures unless it + * is known that their contents will not change.

+ * + * @return The current hash code of this byte source + */ + @Override + public int hashCode() { + int h = 1; + int p = position(); + for (int i = limit() - 1; i >= p; i--) { + h = 31 * h + (int)get(i); + } + return h; + } + @Override + public boolean equals(Object ob) { + if (this == ob) { + return true; + } + if (!(ob instanceof ByteSource)) { + return false; + } + ByteSource that = (ByteSource)ob; + if (this.remaining() != that.remaining()) { + return false; + } + int p = this.position(); + for (int i = this.limit() - 1, j = that.limit() - 1; i >= p; i--, j--) { + if (this.get(i) != that.get(j)) { + return false; + } + } + return true; + } + + @Override + public ByteSource duplicate() { + return ByteSourceFactory.create(this.bb.duplicate()); + } + @Override + public byte get() { + return this.bb.get(); + } + @Override + public void get(byte[] b, int off, int len) { + this.bb.get(b, off, len); + } + @Override + public int remaining() { + return this.bb.remaining(); + } + @Override + public int position() { + return this.bb.position(); + } + @Override + public byte get(int pos) { + return this.bb.get(pos); + } + @Override + public char getChar() { + return this.bb.getChar(); + } + @Override + public char getChar(int pos) { + return this.bb.getChar(pos); + } + @Override + public double getDouble() { + return this.bb.getDouble(); + } + @Override + public double getDouble(int pos) { + return this.bb.getDouble(pos); + } + @Override + public float getFloat() { + return this.bb.getFloat(); + } + @Override + public float getFloat(int pos) { + return this.bb.getFloat(pos); + } + @Override + public void get(byte[] b) { + this.bb.get(b); + } + @Override + public int getInt() { + return this.bb.getInt(); + } + @Override + public int getInt(int pos) { + return this.bb.getInt(pos); + } + @Override + public long getLong() { + return this.bb.getLong(); + } + @Override + public long getLong(int pos) { + return this.bb.getLong(pos); + } + @Override + public short getShort() { + return this.bb.getShort(); + } + @Override + public short getShort(int pos) { + return this.bb.getShort(pos); + } + @Override + public int limit() { + return this.bb.limit(); + } + @Override + public void position(int newPosition) { + this.bb.position(newPosition); + } + @Override + public boolean hasArray() { + return this.bb.hasArray(); + } + @Override + public byte[] array() { + return this.bb.array(); + } + @Override + public int arrayOffset() { + return this.bb.arrayOffset(); + } + @Override + public void limit(int endOffset) { + this.bb.limit(endOffset); + } + @Override + public ByteSource slice(int length) { + if (length < 0) { + throw new IllegalArgumentException(); + } + ByteBuffer dup = this.bb.duplicate(); + dup.limit(dup.position() + length); + return ByteSourceFactory.create(dup.slice()); + } + @Override + public ByteSource slice(int pos, int limit) { + ByteBuffer dup = this.bb.duplicate(); + dup.limit(limit); + dup.position(pos); + return ByteSourceFactory.create(dup.slice()); + } + @Override + public int capacity() { + return this.bb.capacity(); + } + @Override + public void sendTo(ByteBuffer out) { + out.put(this.bb); + } + @Override + public void sendTo(DataOutput out) throws IOException { + int len = remaining(); + if (len == 0) return; + if (out instanceof ByteBufferWriter) { + ((ByteBufferWriter) out).write(this.bb); + return; + } + if (this.bb.hasArray()) { + byte[] bytes = this.bb.array(); + int offset = this.bb.arrayOffset() + this.bb.position(); + out.write(bytes, offset, len); + this.bb.position(this.bb.limit()); + } else { + while (len > 0) { + out.writeByte(get()); + len--; + } + } + } + @Override + public ByteBuffer getBackingByteBuffer() { + return this.bb; + } + } + + public static class OffHeapByteSource implements ByteSource { + private int position; + private int limit; + private final Chunk chunk; + + public OffHeapByteSource(Chunk c) { + this.chunk = c; + this.position = 0; + this.limit = capacity(); + } + private OffHeapByteSource(OffHeapByteSource other) { + this.chunk = other.chunk; + this.position = other.position; + this.limit = other.limit; + } + + /** + * Returns the current hash code of this byte source. + * + *

The hash code of a byte source depends only upon its remaining + * elements; that is, upon the elements from position() up to, and + * including, the element at limit() - 1. + * + *

Because byte source hash codes are content-dependent, it is inadvisable + * to use byte sources as keys in hash maps or similar data structures unless it + * is known that their contents will not change.

+ * + * @return The current hash code of this byte source + */ + @Override + public int hashCode() { + int h = 1; + int p = position(); + for (int i = limit() - 1; i >= p; i--) { + h = 31 * h + (int)get(i); + } + return h; + } + + @Override + public boolean equals(Object ob) { + if (this == ob) { + return true; + } + if (!(ob instanceof ByteSource)) { + return false; + } + ByteSource that = (ByteSource)ob; + if (this.remaining() != that.remaining()) { + return false; + } + int p = this.position(); + for (int i = this.limit() - 1, j = that.limit() - 1; i >= p; i--, j--) { + if (this.get(i) != that.get(j)) { + return false; + } + } + return true; + } + + @Override + public int remaining() { + return this.limit - this.position; + } + + @Override + public int position() { + return this.position; + } + + @Override + public int limit() { + return this.limit; + } + + @Override + public void position(int newPosition) { + if ((newPosition > this.limit) || (newPosition < 0)) { + throw new IllegalArgumentException(); + } + this.position = newPosition; + } + + @Override + public void limit(int newLimit) { + if ((newLimit > capacity()) || (newLimit < 0)) { + throw new IllegalArgumentException(); + } + this.limit = newLimit; + if (this.position > this.limit) { + this.position = this.limit; + } + } + + @Override + public int capacity() { + return this.chunk.getDataSize(); + } + + private final int nextGetIndex() { + int p = this.position; + if (p >= this.limit) { + throw new BufferUnderflowException(); + } + this.position += 1; + return p; + } + + private final int nextGetIndex(int nb) { + int p = this.position; + if (this.limit - p < nb) { + throw new BufferUnderflowException(); + } + this.position += nb; + return p; + } + + /** + * Checks the given index against the limit, throwing an {@link + * IndexOutOfBoundsException} if it is not smaller than the limit + * or is smaller than zero. + */ + private final void checkIndex(int i) { + if ((i < 0) || (i >= this.limit)) { + throw new IndexOutOfBoundsException(); + } + } + + private final void checkIndex(int i, int nb) { + if ((i < 0) || (nb > this.limit - i)) { + throw new IndexOutOfBoundsException(); + } + } + private static void checkBounds(int off, int len, int size) { + if ((off | len | (off + len) | (size - (off + len))) < 0) { + throw new IndexOutOfBoundsException(); + } + } + + @Override + public void get(byte[] b) { + basicGet(b, 0, b.length); + } + @Override + public void get(byte[] dst, int offset, int length) { + checkBounds(offset, length, dst.length); + basicGet(dst, offset, length); + } + private void basicGet(byte[] dst, int offset, int length) { + if (length > remaining()) { + throw new BufferUnderflowException(); + } + int p = this.position; + this.position += length; + this.chunk.readBytes(p, dst, offset, length); + } + + @Override + public byte get() { + return this.chunk.readByte(nextGetIndex()); + } + @Override + public byte get(int pos) { + checkIndex(pos); + return this.chunk.readByte(pos); + } + + /** + * Return true if the hardware supported unaligned reads from memory. + */ + private static boolean determineUnaligned() { + try { + Class c = Class.forName("java.nio.Bits"); + Method m = c.getDeclaredMethod("unaligned"); + m.setAccessible(true); + return (boolean) m.invoke(null); + } catch (ClassNotFoundException | NoSuchMethodException | SecurityException | IllegalAccessException | IllegalArgumentException | InvocationTargetException e) { + return false; + //throw new IllegalStateException("Could not invoke java.nio.Bits.unaligned()", e); + } + } + private static final boolean unaligned = determineUnaligned(); + + @Override + public short getShort() { + return basicGetShort(this.nextGetIndex(2)); + } + @Override + public short getShort(int pos) { + this.checkIndex(pos, 2); + return basicGetShort(pos); + } + private short basicGetShort(int pos) { + long addr = this.chunk.getAddressForReading(pos, 2); + if (unaligned) { + short result = UnsafeMemoryChunk.readAbsoluteShort(addr); + if (ByteOrder.nativeOrder() == ByteOrder.LITTLE_ENDIAN) { + result = Short.reverseBytes(result); + } + return result; + } else { + int ch1 = UnsafeMemoryChunk.readAbsoluteByte(addr++); + int ch2 = UnsafeMemoryChunk.readAbsoluteByte(addr); + return (short)((ch1 << 8) + (ch2 << 0)); + } + } + + @Override + public char getChar() { + return basicGetChar(this.nextGetIndex(2)); + } + @Override + public char getChar(int pos) { + this.checkIndex(pos, 2); + return basicGetChar(pos); + } + private char basicGetChar(int pos) { + long addr = this.chunk.getAddressForReading(pos, 2); + if (unaligned) { + char result = UnsafeMemoryChunk.readAbsoluteChar(addr); + if (ByteOrder.nativeOrder() == ByteOrder.LITTLE_ENDIAN) { + result = Character.reverseBytes(result); + } + return result; + } else { + int ch1 = UnsafeMemoryChunk.readAbsoluteByte(addr++); + int ch2 = UnsafeMemoryChunk.readAbsoluteByte(addr); + return (char)((ch1 << 8) + (ch2 << 0)); + } + } + + @Override + public int getInt() { + return basicGetInt(this.nextGetIndex(4)); + } + @Override + public int getInt(int pos) { + this.checkIndex(pos, 4); + return basicGetInt(pos); + } + + private int basicGetInt(final int pos) { + long addr = this.chunk.getAddressForReading(pos, 4); + if (unaligned) { + int result = UnsafeMemoryChunk.readAbsoluteInt(addr); + if (ByteOrder.nativeOrder() == ByteOrder.LITTLE_ENDIAN) { + result = Integer.reverseBytes(result); + } + return result; + } else { + byte b0 = UnsafeMemoryChunk.readAbsoluteByte(addr++); + byte b1 = UnsafeMemoryChunk.readAbsoluteByte(addr++); + byte b2 = UnsafeMemoryChunk.readAbsoluteByte(addr++); + byte b3 = UnsafeMemoryChunk.readAbsoluteByte(addr); + return (b0 << 24) + ((b1 & 255) << 16) + ((b2 & 255) << 8) + ((b3 & 255) << 0); + } + } + + @Override + public long getLong() { + return basicGetLong(this.nextGetIndex(8)); + } + @Override + public long getLong(int pos) { + this.checkIndex(pos, 8); + return basicGetLong(pos); + } + private long basicGetLong(final int pos) { + long addr = this.chunk.getAddressForReading(pos, 8); + if (unaligned) { + long result = UnsafeMemoryChunk.readAbsoluteLong(addr); + if (ByteOrder.nativeOrder() == ByteOrder.LITTLE_ENDIAN) { + result = Long.reverseBytes(result); + } + return result; + } else { + byte b0 = UnsafeMemoryChunk.readAbsoluteByte(addr++); + byte b1 = UnsafeMemoryChunk.readAbsoluteByte(addr++); + byte b2 = UnsafeMemoryChunk.readAbsoluteByte(addr++); + byte b3 = UnsafeMemoryChunk.readAbsoluteByte(addr++); + byte b4 = UnsafeMemoryChunk.readAbsoluteByte(addr++); + byte b5 = UnsafeMemoryChunk.readAbsoluteByte(addr++); + byte b6 = UnsafeMemoryChunk.readAbsoluteByte(addr++); + byte b7 = UnsafeMemoryChunk.readAbsoluteByte(addr); + return (((long)b0 << 56) + + ((long)(b1 & 255) << 48) + + ((long)(b2 & 255) << 40) + + ((long)(b3 & 255) << 32) + + ((long)(b4 & 255) << 24) + + ((b5 & 255) << 16) + + ((b6 & 255) << 8) + + ((b7 & 255) << 0)); + } + } + + @Override + public float getFloat() { + return basicGetFloat(this.nextGetIndex(4)); + } + @Override + public float getFloat(int pos) { + this.checkIndex(pos, 4); + return basicGetFloat(pos); + } + private float basicGetFloat(int pos) { + return Float.intBitsToFloat(basicGetInt(pos)); + } + + @Override + public double getDouble() { + return basicGetDouble(this.nextGetIndex(8)); + } + @Override + public double getDouble(int pos) { + this.checkIndex(pos, 8); + return basicGetDouble(pos); + } + private double basicGetDouble(int pos) { + return Double.longBitsToDouble(basicGetLong(pos)); + } + + @Override + public boolean hasArray() { + return false; + } + + @Override + public byte[] array() { + throw new UnsupportedOperationException(); + } + + @Override + public int arrayOffset() { + throw new UnsupportedOperationException(); + } + + @Override + public ByteSource duplicate() { + return new OffHeapByteSource(this); + } + + @Override + public ByteSource slice(int length) { + if (length < 0) { + throw new IllegalArgumentException(); + } + return slice(this.position, this.position + length); + } + + @Override + public ByteSource slice(int pos, int limit) { + if ((limit > capacity()) || (limit < 0)) { + throw new IllegalArgumentException(); + } + if ((pos > limit) || (pos < 0)) { + throw new IllegalArgumentException(); + } + return new OffHeapByteSource(this.chunk.slice(pos, limit)); + } + + @Override + public void sendTo(ByteBuffer out) { + int len = remaining(); + while (len > 0) { + out.put(get()); + len--; + } + // We will not even create an instance of this class if createByteBuffer works on this platform. +// if (len > 0) { +// ByteBuffer bb = this.chunk.createByteBuffer(); +// bb.position(position()); +// bb.limit(limit()); +// out.put(bb); +// position(limit()); +// } + } + + @Override + public void sendTo(DataOutput out) throws IOException { + int len = remaining(); + while (len > 0) { + out.writeByte(get()); + len--; + } + } + @Override + public ByteBuffer getBackingByteBuffer() { + return null; + } + } + + private ByteSource buffer; + + public ByteBufferInputStream(ByteBuffer buffer) { + setBuffer(buffer); + } + + public ByteBufferInputStream() { + } + + protected ByteBufferInputStream(ByteBufferInputStream copy) { + this.buffer = copy.buffer.duplicate(); + } + + public ByteBufferInputStream(Chunk blob) { + this.buffer = ByteSourceFactory.create(blob); + } + + public final void setBuffer(ByteSource buffer) { + if(buffer == null) { + throw new NullPointerException(); + } + this.buffer = buffer; + } + + public final void setBuffer(ByteBuffer bb) { + if (bb == null) { + throw new NullPointerException(); + } + setBuffer(ByteSourceFactory.create(bb)); + } + + /** + * See the InputStream read method for javadocs. + * Note that if an attempt + * to read past the end of the wrapped ByteBuffer is done this method + * throws BufferUnderflowException + */ + @Override + public final int read() { + return (buffer.get() & 0xff); + } + + + /* this method is not thread safe + * See the InputStream read method for javadocs. + * Note that if an attempt + * to read past the end of the wrapped ByteBuffer is done this method + * throws BufferUnderflowException + */ + @Override + public final int read(byte b[], int off, int len) { + buffer.get(b, off, len); + return len; + } + + @Override + public int available() { + return this.buffer.remaining(); + } + + public int position() { + return this.buffer.position(); + } + + // GemFire does not use mark or reset so I changed this class + // to just inherit from InputStream which does not support mark/reset. + // That way we do not need to add support for them to the new ByteSource class. + +// @Override +// public boolean markSupported() { +// return true; +// } +// +// @Override +// public void mark(int limit) { +// this.buffer.mark(); +// } +// +// @Override +// public void reset() { +// this.buffer.reset(); +// } + + @Override + public long skip(long n) throws IOException { + if (n <= Integer.MAX_VALUE) { + return skipBytes((int) n); + } else { + return super.skip(n); + } + } + + public boolean readBoolean() { + return this.buffer.get() != 0; + } + public boolean readBoolean(int pos) { + return this.buffer.get(pos) != 0; + } + + /* (non-Javadoc) + * @see java.io.DataInput#readByte() + */ + public byte readByte() { + return this.buffer.get(); + } + public byte readByte(int pos) { + return this.buffer.get(pos); + } + + /* (non-Javadoc) + * @see java.io.DataInput#readChar() + */ + public char readChar() { + return this.buffer.getChar(); + } + public char readChar(int pos) { + return this.buffer.getChar(pos); + } + + /* (non-Javadoc) + * @see java.io.DataInput#readDouble() + */ + public double readDouble() { + return this.buffer.getDouble(); + } + public double readDouble(int pos) { + return this.buffer.getDouble(pos); + } + + /* (non-Javadoc) + * @see java.io.DataInput#readFloat() + */ + public float readFloat() { + return this.buffer.getFloat(); + } + public float readFloat(int pos) { + return this.buffer.getFloat(pos); + } + + /* (non-Javadoc) + * @see java.io.DataInput#readFully(byte[]) + */ + public void readFully(byte[] b) { + this.buffer.get(b); + + } + + /* (non-Javadoc) + * @see java.io.DataInput#readFully(byte[], int, int) + */ + public void readFully(byte[] b, int off, int len) { + this.buffer.get(b, off, len); + + } + + /* (non-Javadoc) + * @see java.io.DataInput#readInt() + */ + public int readInt() { + return this.buffer.getInt(); + } + public int readInt(int pos) { + return this.buffer.getInt(pos); + } + + /* (non-Javadoc) + * @see java.io.DataInput#readLine() + */ + public String readLine() { + throw new UnsupportedOperationException(); + } + + /* (non-Javadoc) + * @see java.io.DataInput#readLong() + */ + public long readLong() { + return this.buffer.getLong(); + } + public long readLong(int pos) { + return this.buffer.getLong(pos); + } + + /* (non-Javadoc) + * @see java.io.DataInput#readShort() + */ + public short readShort() { + return this.buffer.getShort(); + } + public short readShort(int pos) { + return this.buffer.getShort(pos); + } + + /* (non-Javadoc) + * @see java.io.DataInput#readUTF() + */ + public String readUTF() throws IOException { + return DataInputStream.readUTF(this); + } + + /* (non-Javadoc) + * @see java.io.DataInput#readUnsignedByte() + */ + public int readUnsignedByte() { + return this.buffer.get() & 0xff; + } + public int readUnsignedByte(int pos) { + return this.buffer.get(pos) & 0xff; + } + + /* (non-Javadoc) + * @see java.io.DataInput#readUnsignedShort() + */ + public int readUnsignedShort() { + return this.buffer.getShort() & 0xffff; + } + public int readUnsignedShort(int pos) { + return this.buffer.getShort(pos) & 0xffff; + } + + /* (non-Javadoc) + * @see java.io.DataInput#skipBytes(int) + */ + public int skipBytes(int n) { + int newPosition = this.buffer.position() + n; + if(newPosition > this.buffer.limit()) { + newPosition = this.buffer.limit(); + n = newPosition - this.buffer.position(); + } + this.buffer.position(newPosition); + return n; + } + + public int size() { + return this.buffer.limit(); + } + + public byte get(int idx) { + return this.buffer.get(idx); + } + + public short getShort(int idx) { + return this.buffer.getShort(idx); + } + + public int getInt(int idx) { + return this.buffer.getInt(idx); + } + + public void position(int absPos) { +// if (absPos < 0) { +// throw new IllegalArgumentException("position was less than zero " + absPos); +// } else if (absPos > this.buffer.limit()) { +// throw new IllegalArgumentException( "position " + absPos + " was greater than the limit " + this.buffer.limit()); +// } + this.buffer.position(absPos); + } + + public void sendTo(DataOutput out) throws IOException { + this.buffer.position(0); + this.buffer.sendTo(out); + } + + public void sendTo(ByteBuffer out) { + this.buffer.position(0); + this.buffer.sendTo(out); + } + + public ByteSource slice(int length) { + return this.buffer.slice(length); + } + + public ByteSource slice(int startOffset, int endOffset) { + return this.buffer.slice(startOffset, endOffset); + } + + public void writeExternal(ObjectOutput out) throws IOException { + out.writeBoolean(this.buffer != null); + if (this.buffer != null) { + out.writeInt(this.buffer.capacity()); + out.writeInt(this.buffer.limit()); + out.writeInt(this.buffer.position()); + for (int i=0; i < this.buffer.capacity(); i++) { + out.write(this.buffer.get(i)); + } + } + } + + public void readExternal(ObjectInput in) throws IOException, + ClassNotFoundException { + boolean hasBuffer = in.readBoolean(); + if (hasBuffer) { + int capacity = in.readInt(); + int limit = in.readInt(); + int position = in.readInt(); + byte[] bytes = new byte[capacity]; + int bytesRead = in.read(bytes); + if (bytesRead != capacity) { + throw new IOException("Expected to read " + capacity + " bytes but only read " + bytesRead + " bytes."); + } + setBuffer(ByteBuffer.wrap(bytes, position, limit-position)); + } else { + this.buffer = null; + } + } + + public ByteSource getBuffer() { + return buffer; + } +} diff --git a/gemfire-core/src/main/java/com/gemstone/gemfire/internal/tcp/ImmutableByteBufferInputStream.java b/gemfire-core/src/main/java/com/gemstone/gemfire/internal/tcp/ImmutableByteBufferInputStream.java new file mode 100644 index 000000000000..4ec3626b4c31 --- /dev/null +++ b/gemfire-core/src/main/java/com/gemstone/gemfire/internal/tcp/ImmutableByteBufferInputStream.java @@ -0,0 +1,84 @@ +/* + * 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 com.gemstone.gemfire.internal.tcp; + +import java.nio.ByteBuffer; + +import com.gemstone.gemfire.internal.offheap.Chunk; + +/** + * You should only create an instance of this class if the bytes this buffer reads + * will never change. If you want a buffer than can be refilled with other bytes then + * create an instance of ByteBufferInputStream instead. + * Note that even though this class is immutable the position on its ByteBuffer can change. + * + * @since 6.6 + */ +public class ImmutableByteBufferInputStream extends ByteBufferInputStream { + + /** + * Create an immutable input stream by whose contents are the first length + * bytes from the given input stream. + * @param existing the input stream whose content will go into this stream. Note that this existing stream will be read by this class (a copy is not made) so it should not be changed externally. + * @param length the number of bytes to put in this stream + */ + public ImmutableByteBufferInputStream(ByteBufferInputStream existing, + int length) { + setBuffer(existing.slice(length)); + } + /** + * Create an immutable input stream whose contents are the given bytes + * @param bytes the content of this stream. Note that this byte array will be read by this class (a copy is not made) so it should not be changed externally. + */ + public ImmutableByteBufferInputStream(byte[] bytes) { + setBuffer(ByteBuffer.wrap(bytes)); + } + + /** + * Create an immutable input stream whose contents are the given bytes + * @param bb the content of this stream. Note that bb will be read by this class (a copy is not made) so it should not be changed externally. + */ + public ImmutableByteBufferInputStream(ByteBuffer bb) { + setBuffer(bb.slice()); + } + /** + * Create an immutable input stream by copying another. A somewhat shallow copy is made. + * @param copy the input stream to copy. Note that this copy stream will be read by this class (a copy is not made) so it should not be changed externally. + */ + public ImmutableByteBufferInputStream(ImmutableByteBufferInputStream copy) { + super(copy); + } + public ImmutableByteBufferInputStream() { + // for serialization + } + + public ImmutableByteBufferInputStream(Chunk blob) { + super(blob); + } + @Override + public boolean markSupported() { + return false; + } + @Override + public void mark(int limit) { + // unsupported but exception thrown by reset + } + @Override + public void reset() { + throw new UnsupportedOperationException(); + } +} diff --git a/gemfire-core/src/main/java/com/gemstone/gemfire/management/internal/AgentUtil.java b/gemfire-core/src/main/java/com/gemstone/gemfire/management/internal/AgentUtil.java new file mode 100644 index 000000000000..284f9f7ab18e --- /dev/null +++ b/gemfire-core/src/main/java/com/gemstone/gemfire/management/internal/AgentUtil.java @@ -0,0 +1,133 @@ +/* + * 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 com.gemstone.gemfire.management.internal; + +import java.io.File; +import java.net.URL; + +import org.apache.logging.log4j.Logger; + +import com.gemstone.gemfire.internal.lang.StringUtils; +import com.gemstone.gemfire.internal.logging.LogService; + +/** + * Hosts common utility methods needed by the management package + * + * @since Geode 1.0.0.0 + * + */ +public class AgentUtil { + + private static final Logger logger = LogService.getLogger(); + + public static final String ERROR_VARIABLE_NOT_SET = "The GEMFIRE environment variable must be set!"; + + private String gemfireVersion = null; + + public AgentUtil(String gemfireVersion) { + this.gemfireVersion = gemfireVersion; + } + + /** + * this method will try to find the named war files in the following order: + * 1. if GEMFIRE is defined, it will look under tools/Extensions, tools/Pulse and lib folder (in this order) to find + * either the name-version.war or the name.war file + * 2. If GEMFIRE is not defined, it will try to find either the name-version.war/name.war (in that order) on the + * classpath + * + * @param warFilePrefix : the prefix of the war file, e.g. gemfire-web, gemfire-pulse, or gemfire-web-api + */ + public String findWarLocation(String warFilePrefix) { + String gemfireHome = getGemFireHome(); + if(!StringUtils.isBlank(gemfireHome)) { + String[] possibleFiles = { + gemfireHome + "/tools/Extensions/" + warFilePrefix + "-" + gemfireVersion + ".war", + gemfireHome + "/tools/Pulse/" + warFilePrefix + "-" + gemfireVersion + ".war", + gemfireHome + "/lib/" + warFilePrefix + "-" + gemfireVersion + ".war", + gemfireHome + "/tools/Extensions/" + warFilePrefix + ".war", + gemfireHome + "/tools/Pulse/" + warFilePrefix + ".war", + gemfireHome + "/lib/" + warFilePrefix + ".war" + }; + for (String possibleFile : possibleFiles) { + if (new File(possibleFile).isFile()) { + logger.info(warFilePrefix + " war found: {}", possibleFile); + return possibleFile; + } + } + } + + // if $GEMFIRE is not set or we are not able to find it in all the possible locations under $GEMFIRE, try to + // find in the classpath + String[] possibleFiles = { + warFilePrefix + "-" + gemfireVersion + ".war", + "tools/Pulse/" + warFilePrefix + "-" + gemfireVersion + ".war", + "tools/Extensions/" + warFilePrefix + "-" + gemfireVersion + ".war", + "lib/" + warFilePrefix + "-" + gemfireVersion + ".war", + warFilePrefix + ".war" + }; + for(String possibleFile:possibleFiles){ + URL url = this.getClass().getClassLoader().getResource(possibleFile); + if(url!=null){ + // found the war file + logger.info(warFilePrefix + " war found: {}", possibleFile); + return url.getPath(); + } + } + + // we still couldn't find the war file + logger.warn(warFilePrefix+" war file was not found"); + return null; + } + + public boolean isWebApplicationAvailable(final String warFileLocation) { + return !StringUtils.isBlank(warFileLocation); + } + + public boolean isWebApplicationAvailable(final String... warFileLocations) { + for (String warFileLocation : warFileLocations) { + if (isWebApplicationAvailable(warFileLocation)) { + return true; + } + } + + return false; + } + + public String getGemFireHome() { + + String gemFireHome = System.getenv("GEMFIRE"); + + logger.info("GEMFIRE HOME:" + gemFireHome); + // Check for empty variable. if empty, then log message and exit HTTP server + // startup + if (StringUtils.isBlank(gemFireHome)) { + gemFireHome = System.getProperty("gemfire.home"); + logger.info("Reading gemfire.home System Property -> {}", gemFireHome); + if (StringUtils.isBlank(gemFireHome)) { + logger.info("GEMFIRE environment variable not set; HTTP service will not start."); + gemFireHome = null; + } + } + return gemFireHome; + } + + public boolean isGemfireHomeDefined() { + String gemfireHome = getGemFireHome(); + return !StringUtils.isBlank(gemfireHome); + } +} diff --git a/gemfire-core/src/main/java/com/gemstone/gemfire/management/internal/ManagementAgent.java b/gemfire-core/src/main/java/com/gemstone/gemfire/management/internal/ManagementAgent.java new file mode 100755 index 000000000000..ccebe7d6a475 --- /dev/null +++ b/gemfire-core/src/main/java/com/gemstone/gemfire/management/internal/ManagementAgent.java @@ -0,0 +1,515 @@ +/* + * 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 com.gemstone.gemfire.management.internal; + +import java.io.IOException; +import java.io.Serializable; +import java.lang.management.ManagementFactory; +import java.net.InetAddress; +import java.net.ServerSocket; +import java.net.Socket; +import java.net.UnknownHostException; +import java.rmi.AlreadyBoundException; +import java.rmi.registry.LocateRegistry; +import java.rmi.registry.Registry; +import java.rmi.server.RMIClientSocketFactory; +import java.rmi.server.RMIServerSocketFactory; +import java.rmi.server.UnicastRemoteObject; +import java.util.HashMap; + +import javax.management.MBeanServer; +import javax.management.remote.JMXConnectorServer; +import javax.management.remote.JMXServiceURL; +import javax.management.remote.rmi.RMIConnectorServer; +import javax.management.remote.rmi.RMIJRMPServerImpl; +import javax.management.remote.rmi.RMIServerImpl; +import javax.rmi.ssl.SslRMIClientSocketFactory; + +import org.apache.logging.log4j.Logger; +import org.eclipse.jetty.server.Server; +import org.eclipse.jetty.server.ServerConnector; + +import com.gemstone.gemfire.cache.CacheFactory; +import com.gemstone.gemfire.distributed.internal.DistributionConfig; +import com.gemstone.gemfire.distributed.internal.DistributionManager; +import com.gemstone.gemfire.internal.GemFireVersion; +import com.gemstone.gemfire.internal.SocketCreator; +import com.gemstone.gemfire.internal.cache.GemFireCacheImpl; +import com.gemstone.gemfire.internal.lang.StringUtils; +import com.gemstone.gemfire.internal.logging.LogService; +import com.gemstone.gemfire.internal.tcp.TCPConduit; +import com.gemstone.gemfire.management.ManagementException; +import com.gemstone.gemfire.management.ManagementService; +import com.gemstone.gemfire.management.ManagerMXBean; +import com.gemstone.gemfire.management.internal.security.ManagementInterceptor; +import com.gemstone.gemfire.management.internal.unsafe.ReadOpFileAccessController; + +/** + * Agent implementation that controls the JMX server end points for JMX clients + * to connect, such as an RMI server. + * + * The ManagementAgent could be used in a loner or GemFire client to define and + * control JMX server end points for the Platform MBeanServer and the GemFire + * MBeans hosted within it. + * + * @since 7.0 + */ +public class ManagementAgent { + private static final Logger logger = LogService.getLogger(); + + /** + * True if running. Protected by synchronizing on this Manager instance. I + * used synchronization because I think we'll want to hold the same + * synchronize while configuring, starting, and eventually stopping the RMI + * server, the hidden management regions (in FederatingManager), etc + */ + private boolean running = false; + private Registry registry; + private JMXConnectorServer cs; + private final DistributionConfig config; + private boolean isHttpServiceRunning = false; + private ManagementInterceptor securityInterceptor; + + /** + * This system property is set to true when the embedded HTTP server is + * started so that the embedded pulse webapp can use a local MBeanServer + * instead of a remote JMX connection. + */ + private static final String PULSE_EMBEDDED_PROP = "pulse.embedded"; + + public ManagementAgent(DistributionConfig config) { + this.config = config; + } + + public synchronized boolean isRunning() { + return this.running; + } + + public synchronized boolean isHttpServiceRunning() { + return isHttpServiceRunning; + } + + public synchronized void setHttpServiceRunning(boolean isHttpServiceRunning) { + this.isHttpServiceRunning = isHttpServiceRunning; + } + + private boolean isAPIRestServiceRunning(GemFireCacheImpl cache) { + return (cache != null && cache.getRestAgent() != null && cache.getRestAgent().isRunning()); + } + + private boolean isServerNode(GemFireCacheImpl cache) { + return (cache.getDistributedSystem().getDistributedMember().getVmKind() != DistributionManager.LOCATOR_DM_TYPE + && cache.getDistributedSystem().getDistributedMember().getVmKind() != DistributionManager.ADMIN_ONLY_DM_TYPE && !cache + .isClient()); + } + + public synchronized void startAgent(GemFireCacheImpl cache) { + // Do not start Management REST service if developer REST service is already + // started. + + if (!isAPIRestServiceRunning(cache)) { + startHttpService(isServerNode(cache)); + } else { + if (logger.isDebugEnabled()) { + logger + .debug("Developer REST APIs webapp is already running, Not Starting M&M REST and pulse!"); + } + } + + if (!this.running && this.config.getJmxManagerPort() != 0) { + try { + configureAndStart(); + } catch (IOException e) { + throw new ManagementException(e); + } + this.running = true; + } + } + + public synchronized void stopAgent() { + stopHttpService(); + + if (!this.running) + return; + + if (logger.isDebugEnabled()) { + logger.debug("Stopping jmx manager agent"); + } + try { + cs.stop(); + UnicastRemoteObject.unexportObject(registry, true); + } catch (IOException e) { + throw new ManagementException(e); + } + + this.running = false; + } + + private Server httpServer; + private final String GEMFIRE_VERSION = GemFireVersion.getGemFireVersion(); + private AgentUtil agentUtil = new AgentUtil(GEMFIRE_VERSION); + + private void startHttpService(boolean isServer) { + final SystemManagementService managementService = (SystemManagementService) ManagementService + .getManagementService(CacheFactory.getAnyInstance()); + + final ManagerMXBean managerBean = managementService.getManagerMXBean(); + + if (this.config.getHttpServicePort() != 0) { + if (logger.isDebugEnabled()) { + logger.debug("Attempting to start HTTP service on port ({}) at bind-address ({})...", + this.config.getHttpServicePort(), this.config.getHttpServiceBindAddress()); + } + + // Find the Management WAR file + final String gemfireWar = agentUtil.findWarLocation("gemfire-web"); + if (gemfireWar == null) { + if (logger.isDebugEnabled()) { + logger.debug("Unable to find GemFire Management REST API WAR file; the Management REST Interface for GemFire will not be accessible."); + } + } + + // Find the Pulse WAR file + final String pulseWar = agentUtil.findWarLocation("gemfire-pulse"); + + if (pulseWar == null) { + final String message = "Unable to find Pulse web application WAR file; Pulse for GemFire will not be accessible"; + setStatusMessage(managerBean, message); + if (logger.isDebugEnabled()) { + logger.debug(message); + } + } + + // Find developer REST WAR file + final String gemfireAPIWar = agentUtil.findWarLocation("gemfire-web-api"); + if (gemfireAPIWar == null) { + final String message = "Unable to find GemFire Developer REST API WAR file; the Developer REST Interface for GemFire will not be accessible."; + setStatusMessage(managerBean, message); + if (logger.isDebugEnabled()) { + logger.debug(message); + } + } + + try { + if (agentUtil.isWebApplicationAvailable(gemfireWar, pulseWar, gemfireAPIWar)) { + + final String bindAddress = this.config.getHttpServiceBindAddress(); + final int port = this.config.getHttpServicePort(); + + boolean isRestWebAppAdded = false; + + this.httpServer = JettyHelper.initJetty(bindAddress, port, + this.config.getHttpServiceSSLEnabled(), + this.config.getHttpServiceSSLRequireAuthentication(), + this.config.getHttpServiceSSLProtocols(), this.config.getHttpServiceSSLCiphers(), + this.config.getHttpServiceSSLProperties()); + + if (agentUtil.isWebApplicationAvailable(gemfireWar)) { + this.httpServer = JettyHelper + .addWebApplication(this.httpServer, "/gemfire", gemfireWar); + } + + if (agentUtil.isWebApplicationAvailable(pulseWar)) { + this.httpServer = JettyHelper.addWebApplication(this.httpServer, "/pulse", pulseWar); + } + + if (isServer && this.config.getStartDevRestApi()) { + if (agentUtil.isWebApplicationAvailable(gemfireAPIWar)) { + this.httpServer = JettyHelper.addWebApplication(this.httpServer, "/gemfire-api", + gemfireAPIWar); + isRestWebAppAdded = true; + } + } else { + final String message = "Developer REST API web application will not start when start-dev-rest-api is not set and node is not server"; + setStatusMessage(managerBean, message); + if (logger.isDebugEnabled()) { + logger.debug(message); + } + } + + if (logger.isDebugEnabled()) { + logger.debug("Starting HTTP embedded server on port ({}) at bind-address ({})...", + ((ServerConnector) this.httpServer.getConnectors()[0]).getPort(), bindAddress); + } + + System.setProperty(PULSE_EMBEDDED_PROP, "true"); + + this.httpServer = JettyHelper.startJetty(this.httpServer); + + // now, that Tomcat has been started, we can set the URL used by web + // clients to connect to Pulse + if (agentUtil.isWebApplicationAvailable(pulseWar)) { + managerBean.setPulseURL("http://".concat(getHost(bindAddress)).concat(":") + .concat(String.valueOf(port)).concat("/pulse/")); + } + + // set cache property for developer REST service running + if (isRestWebAppAdded) { + GemFireCacheImpl cache = (GemFireCacheImpl) CacheFactory.getAnyInstance(); + cache.setRESTServiceRunning(true); + + // create region to hold query information (queryId, queryString). + // Added for the developer REST APIs + RestAgent.createParameterizedQueryRegion(); + } + + // set true for HTTP service running + setHttpServiceRunning(true); + } + } catch (Exception e) { + stopHttpService();// Jetty needs to be stopped even if it has failed to + // start. Some of the threads are left behind even if + // server.start() fails due to an exception + setStatusMessage(managerBean, "HTTP service failed to start with " + + e.getClass().getSimpleName() + " '" + e.getMessage() + "'"); + throw new ManagementException("HTTP service failed to start", e); + } + } else { + setStatusMessage(managerBean, + "Embedded HTTP server configured not to start (http-service-port=0) or (jmx-manager-http-port=0)"); + } + } + + private String getHost(final String bindAddress) throws UnknownHostException { + if (!StringUtils.isBlank(this.config.getJmxManagerHostnameForClients())) { + return this.config.getJmxManagerHostnameForClients(); + } else if (!StringUtils.isBlank(bindAddress)) { + return InetAddress.getByName(bindAddress).getHostAddress(); + } else { + return SocketCreator.getLocalHost().getHostAddress(); + } + } + + private boolean isRunningInTomcat() { + return (System.getProperty("catalina.base") != null || System.getProperty("catalina.home") != null); + } + + private void setStatusMessage(ManagerMXBean mBean, String message) { + mBean.setPulseURL(""); + mBean.setStatusMessage(message); + } + + private void stopHttpService() { + if (this.httpServer != null) { + if (logger.isDebugEnabled()) { + logger.debug("Stopping the HTTP service..."); + } + try { + this.httpServer.stop(); + } catch (Exception e) { + logger.warn("Failed to stop the HTTP service because: {}", e.getMessage(), e); + } finally { + try { + this.httpServer.destroy(); + } catch (Exception ignore) { + logger.error("Failed to properly release resources held by the HTTP service: {}", + ignore.getMessage(), ignore); + } finally { + this.httpServer = null; + System.clearProperty("catalina.base"); + System.clearProperty("catalina.home"); + } + } + } + } + + /** + * http://docs.oracle.com/javase/6/docs/technotes/guides/management/agent.html + * #gdfvq https://blogs.oracle.com/jmxetc/entry/java_5_premain_rmi_connectors + * https + * ://blogs.oracle.com/jmxetc/entry/building_a_remotely_stoppable_connector + * https + * ://blogs.oracle.com/jmxetc/entry/jmx_connecting_through_firewalls_using + */ + private void configureAndStart() throws IOException { + // KIRK: I copied this from + // https://blogs.oracle.com/jmxetc/entry/java_5_premain_rmi_connectors + // we'll need to change this significantly but it's a starting point + + // get the port for RMI Registry and RMI Connector Server + final int port = this.config.getJmxManagerPort(); + final String hostname; + final InetAddress bindAddr; + if (this.config.getJmxManagerBindAddress().equals("")) { + hostname = SocketCreator.getLocalHost().getHostName(); + bindAddr = null; + } else { + hostname = this.config.getJmxManagerBindAddress(); + bindAddr = InetAddress.getByName(hostname); + } + + final boolean ssl = this.config.getJmxManagerSSLEnabled(); + + if (logger.isDebugEnabled()) { + logger.debug("Starting jmx manager agent on port {}{}", port, + (bindAddr != null ? (" bound to " + bindAddr) : "") + (ssl ? " using SSL" : "")); + } + + final SocketCreator sc = SocketCreator.createNonDefaultInstance(ssl, + this.config.getJmxManagerSSLRequireAuthentication(), + this.config.getJmxManagerSSLProtocols(), this.config.getJmxManagerSSLCiphers(), + this.config.getJmxSSLProperties()); + RMIClientSocketFactory csf = ssl ? new SslRMIClientSocketFactory() : null;// RMISocketFactory.getDefaultSocketFactory(); + // new GemFireRMIClientSocketFactory(sc, getLogger()); + RMIServerSocketFactory ssf = new GemFireRMIServerSocketFactory(sc, bindAddr); + + // Following is done to prevent rmi causing stop the world gcs + System.setProperty("sun.rmi.dgc.server.gcInterval", Long.toString(Long.MAX_VALUE - 1)); + + // Create the RMI Registry using the SSL socket factories above. + // In order to use a single port, we must use these factories + // everywhere, or nowhere. Since we want to use them in the JMX + // RMI Connector server, we must also use them in the RMI Registry. + // Otherwise, we wouldn't be able to use a single port. + // + // Start an RMI registry on port . + registry = LocateRegistry.createRegistry(port, csf, ssf); + + // Retrieve the PlatformMBeanServer. + MBeanServer mbs = ManagementFactory.getPlatformMBeanServer(); + + // Environment map. KIRK: why is this declared as HashMap? + final HashMap env = new HashMap(); + + boolean integratedSecEnabled = System.getProperty("resource-authenticator") != null; + if (integratedSecEnabled) { + securityInterceptor = new ManagementInterceptor(logger); + env.put(JMXConnectorServer.AUTHENTICATOR, securityInterceptor); + } else { + /* Disable the old authenticator mechanism */ + String pwFile = this.config.getJmxManagerPasswordFile(); + if (pwFile != null && pwFile.length() > 0) { + env.put("jmx.remote.x.password.file", pwFile); + } + + String accessFile = this.config.getJmxManagerAccessFile(); + if (accessFile != null && accessFile.length() > 0) { + // Lets not use default connector based authorization + // env.put("jmx.remote.x.access.file", accessFile); + // Rewire the mbs hierarchy to set accessController + ReadOpFileAccessController controller = new ReadOpFileAccessController(accessFile); + controller.setMBeanServer(mbs); + mbs = controller; + } + } + + // Manually creates and binds a JMX RMI Connector Server stub with the + // registry created above: the port we pass here is the port that can + // be specified in "service:jmx:rmi://"+hostname+":"+port - where the + // RMI server stub and connection objects will be exported. + // Here we choose to use the same port as was specified for the + // RMI Registry. We can do so because we're using \*the same\* client + // and server socket factories, for the registry itself \*and\* for this + // object. + final RMIServerImpl stub = new RMIJRMPServerImpl(port, csf, ssf, env); + + // Create an RMI connector server. + // + // As specified in the JMXServiceURL the RMIServer stub will be + // registered in the RMI registry running in the local host on + // port with the name "jmxrmi". This is the same name the + // out-of-the-box management agent uses to register the RMIServer + // stub too. + // + // The port specified in "service:jmx:rmi://"+hostname+":"+port + // is the second port, where RMI connection objects will be exported. + // Here we use the same port as that we choose for the RMI registry. + // The port for the RMI registry is specified in the second part + // of the URL, in "rmi://"+hostname+":"+port + // + // We construct a JMXServiceURL corresponding to what we have done + // for our stub... + final JMXServiceURL url = new JMXServiceURL("service:jmx:rmi://" + hostname + ":" + port + + "/jndi/rmi://" + hostname + ":" + port + "/jmxrmi"); + + // Create an RMI connector server with the JMXServiceURL + // + // KIRK: JDK 1.5 cannot use JMXConnectorServerFactory because of + // http://bugs.sun.com/view_bug.do?bug_id=5107423 + // but we're using JDK 1.6 + cs = new RMIConnectorServer(new JMXServiceURL("rmi", hostname, port), env, stub, mbs) { + @Override + public JMXServiceURL getAddress() { + return url; + } + + @Override + public synchronized void start() throws IOException { + try { + registry.bind("jmxrmi", stub); + } catch (AlreadyBoundException x) { + final IOException io = new IOException(x.getMessage()); + io.initCause(x); + throw io; + } + super.start(); + } + }; + // This may be the 1.6 way of doing it but the problem is it does not use + // our "stub". + // cs = JMXConnectorServerFactory.newJMXConnectorServer(url, env, mbs); + + if (integratedSecEnabled) { + cs.setMBeanServerForwarder(securityInterceptor.getMBeanServerForwarder()); + logger.info("Starting RMI Connector with Security Interceptor"); + } + + cs.start(); + if (logger.isDebugEnabled()) { + logger.debug("Finished starting jmx manager agent."); + } + // System.out.println("Server started at: "+cs.getAddress()); + + // Start the CleanThread daemon... KIRK: not sure what CleanThread is... + // + // final Thread clean = new CleanThread(cs); + // clean.start(); + } + + private static class GemFireRMIClientSocketFactory implements RMIClientSocketFactory, + Serializable { + private static final long serialVersionUID = -7604285019188827617L; + + private/* final hack to prevent serialization */transient SocketCreator sc; + + public GemFireRMIClientSocketFactory(SocketCreator sc) { + this.sc = sc; + } + + @Override + public Socket createSocket(String host, int port) throws IOException { + return this.sc.connectForClient(host, port, 0/* no timeout */); + } + }; + + private static class GemFireRMIServerSocketFactory implements RMIServerSocketFactory, + Serializable { + private static final long serialVersionUID = -811909050641332716L; + private/* final hack to prevent serialization */transient SocketCreator sc; + private final InetAddress bindAddr; + + public GemFireRMIServerSocketFactory(SocketCreator sc, InetAddress bindAddr) { + this.sc = sc; + this.bindAddr = bindAddr; + } + + @Override + public ServerSocket createServerSocket(int port) throws IOException { + return this.sc.createServerSocket(port, TCPConduit.getBackLog(), this.bindAddr); + } + }; +} diff --git a/gemfire-core/src/main/java/com/gemstone/gemfire/management/internal/RestAgent.java b/gemfire-core/src/main/java/com/gemstone/gemfire/management/internal/RestAgent.java new file mode 100755 index 000000000000..7d603f241f5a --- /dev/null +++ b/gemfire-core/src/main/java/com/gemstone/gemfire/management/internal/RestAgent.java @@ -0,0 +1,216 @@ +/* + * 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 com.gemstone.gemfire.management.internal; + +import org.apache.logging.log4j.Logger; +import org.eclipse.jetty.server.Server; +import org.eclipse.jetty.server.ServerConnector; + +import com.gemstone.gemfire.cache.AttributesFactory; +import com.gemstone.gemfire.cache.CacheFactory; +import com.gemstone.gemfire.cache.DataPolicy; +import com.gemstone.gemfire.cache.RegionAttributes; +import com.gemstone.gemfire.cache.Scope; +import com.gemstone.gemfire.distributed.internal.DistributionConfig; +import com.gemstone.gemfire.internal.GemFireVersion; +import com.gemstone.gemfire.internal.cache.GemFireCacheImpl; +import com.gemstone.gemfire.internal.cache.InternalRegionArguments; +import com.gemstone.gemfire.internal.logging.LogService; +import com.gemstone.gemfire.management.ManagementService; + +/** + * Agent implementation that controls the HTTP server end points used for REST + * clients to connect gemfire data node. + * + * The RestAgent is used to start http service in embedded mode on any non + * manager data node with developer REST APIs service enabled. + * + * @since 8.0 + */ +public class RestAgent { + private static final Logger logger = LogService.getLogger(); + + private boolean running = false; + private final DistributionConfig config; + + public RestAgent(DistributionConfig config) { + this.config = config; + } + + public synchronized boolean isRunning() { + return this.running; + } + + private boolean isManagementRestServiceRunning(GemFireCacheImpl cache) { + final SystemManagementService managementService = (SystemManagementService) ManagementService + .getManagementService(cache); + return (managementService.getManagementAgent() != null && managementService + .getManagementAgent().isHttpServiceRunning()); + + } + + public synchronized void start(GemFireCacheImpl cache) { + if (!this.running && this.config.getHttpServicePort() != 0 + && !isManagementRestServiceRunning(cache)) { + try { + startHttpService(); + this.running = true; + cache.setRESTServiceRunning(true); + + // create region to hold query information (queryId, queryString). Added + // for the developer REST APIs + RestAgent.createParameterizedQueryRegion(); + + } catch (RuntimeException e) { + logger.debug(e.getMessage(), e); + } + } + + } + + public synchronized void stop() { + if (this.running) { + stopHttpService(); + if (logger.isDebugEnabled()) { + logger.debug("Gemfire Rest Http service stopped"); + } + this.running = false; + } else { + if (logger.isDebugEnabled()) { + logger.debug("Attempt to stop Gemfire Rest Http service which is not running"); + } + } + } + + private Server httpServer; + private final String GEMFIRE_VERSION = GemFireVersion.getGemFireVersion(); + private AgentUtil agentUtil = new AgentUtil(GEMFIRE_VERSION); + + private boolean isRunningInTomcat() { + return (System.getProperty("catalina.base") != null || System.getProperty("catalina.home") != null); + } + + // Start HTTP service in embedded mode + public void startHttpService() { + // TODO: add a check that will make sure that we start HTTP service on + // non-manager data node + logger.info("Attempting to start HTTP service on port ({}) at bind-address ({})...", + this.config.getHttpServicePort(), this.config.getHttpServiceBindAddress()); + + // Find the developer REST WAR file + final String gemfireAPIWar = agentUtil.findWarLocation("gemfire-web-api"); + if (gemfireAPIWar == null) { + logger.info("Unable to find GemFire Developer REST API WAR file; the Developer REST Interface for GemFire will not be accessible."); + } + + try { + // Check if we're already running inside Tomcat + if (isRunningInTomcat()) { + logger.warn("Detected presence of catalina system properties. HTTP service will not be started. To enable the GemFire Developer REST API, please deploy the /gemfire-api WAR file in your application server."); + } else if (agentUtil.isWebApplicationAvailable(gemfireAPIWar)) { + + final String bindAddress = this.config.getHttpServiceBindAddress(); + final int port = this.config.getHttpServicePort(); + + this.httpServer = JettyHelper.initJetty(bindAddress, port, + this.config.getHttpServiceSSLEnabled(), + this.config.getHttpServiceSSLRequireAuthentication(), + this.config.getHttpServiceSSLProtocols(), this.config.getHttpServiceSSLCiphers(), + this.config.getHttpServiceSSLProperties()); + + this.httpServer = JettyHelper.addWebApplication(httpServer, "/gemfire-api", gemfireAPIWar); + + if (logger.isDebugEnabled()) { + logger.debug("Starting HTTP embedded server on port ({}) at bind-address ({})...", + ((ServerConnector) this.httpServer.getConnectors()[0]).getPort(), bindAddress); + } + + this.httpServer = JettyHelper.startJetty(this.httpServer); + logger.info("HTTP service started successfully...!!"); + } + } catch (Exception e) { + stopHttpService();// Jetty needs to be stopped even if it has failed to + // start. Some of the threads are left behind even if + // server.start() fails due to an exception + throw new RuntimeException("HTTP service failed to start due to " + e.getMessage()); + } + } + + private void stopHttpService() { + if (this.httpServer != null) { + logger.info("Stopping the HTTP service..."); + try { + this.httpServer.stop(); + } catch (Exception e) { + logger.warn("Failed to stop the HTTP service because: {}", e.getMessage(), e); + } finally { + try { + this.httpServer.destroy(); + } catch (Exception ignore) { + logger.error("Failed to properly release resources held by the HTTP service: {}", + ignore.getMessage(), ignore); + } finally { + this.httpServer = null; + System.clearProperty("catalina.base"); + System.clearProperty("catalina.home"); + } + } + } + } + + /** + * This method will create a REPLICATED region named _ParameterizedQueries__. + * In developer REST APIs, this region will be used to store the queryId and + * queryString as a key and value respectively. + */ + public static void createParameterizedQueryRegion() { + try { + if (logger.isDebugEnabled()) { + logger.debug("Starting creation of __ParameterizedQueries__ region"); + } + GemFireCacheImpl cache = (GemFireCacheImpl) CacheFactory.getAnyInstance(); + if (cache != null) { + // cache.getCacheConfig().setPdxReadSerialized(true); + final InternalRegionArguments regionArguments = new InternalRegionArguments(); + regionArguments.setIsUsedForMetaRegion(true); + final AttributesFactory attributesFactory = new AttributesFactory(); + + attributesFactory.setConcurrencyChecksEnabled(false); + attributesFactory.setDataPolicy(DataPolicy.REPLICATE); + attributesFactory.setKeyConstraint(String.class); + attributesFactory.setScope(Scope.DISTRIBUTED_NO_ACK); + attributesFactory.setStatisticsEnabled(false); + attributesFactory.setValueConstraint(String.class); + + final RegionAttributes regionAttributes = attributesFactory.create(); + + cache.createVMRegion("__ParameterizedQueries__", regionAttributes, regionArguments); + if (logger.isDebugEnabled()) { + logger.debug("Successfully created __ParameterizedQueries__ region"); + } + } else { + logger.error("Cannot create ParameterizedQueries Region as no cache found!"); + } + } catch (Exception e) { + if (logger.isDebugEnabled()) { + logger.debug("Error creating __ParameterizedQueries__ Region with cause {}", + e.getMessage(), e); + } + } + } +} diff --git a/gemfire-core/src/main/java/com/gemstone/gemfire/management/internal/cli/commands/LauncherLifecycleCommands.java b/gemfire-core/src/main/java/com/gemstone/gemfire/management/internal/cli/commands/LauncherLifecycleCommands.java new file mode 100755 index 000000000000..259816bb4482 --- /dev/null +++ b/gemfire-core/src/main/java/com/gemstone/gemfire/management/internal/cli/commands/LauncherLifecycleCommands.java @@ -0,0 +1,2802 @@ +/* + * 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 com.gemstone.gemfire.management.internal.cli.commands; + +import java.awt.Desktop; +import java.io.BufferedReader; +import java.io.BufferedWriter; +import java.io.File; +import java.io.FileFilter; +import java.io.FileNotFoundException; +import java.io.FileReader; +import java.io.FileWriter; +import java.io.IOException; +import java.io.InputStream; +import java.io.InputStreamReader; +import java.net.InetAddress; +import java.net.MalformedURLException; +import java.net.URI; +import java.net.UnknownHostException; +import java.util.ArrayList; +import java.util.Arrays; +import java.util.Collections; +import java.util.EmptyStackException; +import java.util.HashMap; +import java.util.HashSet; +import java.util.List; +import java.util.Map; +import java.util.Properties; +import java.util.Set; +import java.util.Stack; +import java.util.TreeSet; +import java.util.concurrent.TimeUnit; +import java.util.concurrent.atomic.AtomicReference; + +import javax.management.MalformedObjectNameException; +import javax.management.ObjectName; +import javax.management.Query; +import javax.management.QueryExp; +import javax.net.ssl.SSLException; +import javax.net.ssl.SSLHandshakeException; + +import com.gemstone.gemfire.GemFireException; +import com.gemstone.gemfire.SystemFailure; +import com.gemstone.gemfire.cache.server.CacheServer; +import com.gemstone.gemfire.distributed.AbstractLauncher; +import com.gemstone.gemfire.distributed.AbstractLauncher.ServiceState; +import com.gemstone.gemfire.distributed.AbstractLauncher.Status; +import com.gemstone.gemfire.distributed.LocatorLauncher; +import com.gemstone.gemfire.distributed.LocatorLauncher.LocatorState; +import com.gemstone.gemfire.distributed.ServerLauncher; +import com.gemstone.gemfire.distributed.ServerLauncher.ServerState; +import com.gemstone.gemfire.distributed.internal.DistributionConfig; +import com.gemstone.gemfire.distributed.internal.tcpserver.TcpClient; +import com.gemstone.gemfire.internal.DistributionLocator; +import com.gemstone.gemfire.internal.GemFireVersion; +import com.gemstone.gemfire.internal.OSProcess; +import com.gemstone.gemfire.internal.SocketCreator; +import com.gemstone.gemfire.internal.cache.persistence.PersistentMemberPattern; +import com.gemstone.gemfire.internal.i18n.LocalizedStrings; +import com.gemstone.gemfire.internal.lang.ClassUtils; +import com.gemstone.gemfire.internal.lang.ObjectUtils; +import com.gemstone.gemfire.internal.lang.StringUtils; +import com.gemstone.gemfire.internal.lang.SystemUtils; +import com.gemstone.gemfire.internal.process.ClusterConfigurationNotAvailableException; +import com.gemstone.gemfire.internal.process.NonBlockingProcessStreamReader; +import com.gemstone.gemfire.internal.process.ProcessLauncherContext; +import com.gemstone.gemfire.internal.process.ProcessStreamReader; +import com.gemstone.gemfire.internal.process.ProcessStreamReader.InputListener; +import com.gemstone.gemfire.internal.process.ProcessStreamReader.ReadingMode; +import com.gemstone.gemfire.internal.process.ProcessType; +import com.gemstone.gemfire.internal.process.ProcessUtils; +import com.gemstone.gemfire.internal.process.signal.SignalEvent; +import com.gemstone.gemfire.internal.process.signal.SignalListener; +import com.gemstone.gemfire.internal.util.IOUtils; +import com.gemstone.gemfire.internal.util.StopWatch; +import com.gemstone.gemfire.lang.AttachAPINotFoundException; +import com.gemstone.gemfire.management.DistributedSystemMXBean; +import com.gemstone.gemfire.management.MemberMXBean; +import com.gemstone.gemfire.management.cli.CliMetaData; +import com.gemstone.gemfire.management.cli.ConverterHint; +import com.gemstone.gemfire.management.cli.Result; +import com.gemstone.gemfire.management.internal.ManagementConstants; +import com.gemstone.gemfire.management.internal.cli.CliUtil; +import com.gemstone.gemfire.management.internal.cli.LogWrapper; +import com.gemstone.gemfire.management.internal.cli.converters.ConnectionEndpointConverter; +import com.gemstone.gemfire.management.internal.cli.domain.ConnectToLocatorResult; +import com.gemstone.gemfire.management.internal.cli.i18n.CliStrings; +import com.gemstone.gemfire.management.internal.cli.result.InfoResultData; +import com.gemstone.gemfire.management.internal.cli.result.ResultBuilder; +import com.gemstone.gemfire.management.internal.cli.shell.Gfsh; +import com.gemstone.gemfire.management.internal.cli.shell.JmxOperationInvoker; +import com.gemstone.gemfire.management.internal.cli.shell.OperationInvoker; +import com.gemstone.gemfire.management.internal.cli.util.CauseFinder; +import com.gemstone.gemfire.management.internal.cli.util.CommandStringBuilder; +import com.gemstone.gemfire.management.internal.cli.util.ConnectionEndpoint; +import com.gemstone.gemfire.management.internal.cli.util.JConsoleNotFoundException; +import com.gemstone.gemfire.management.internal.cli.util.VisualVmNotFoundException; +import com.gemstone.gemfire.management.internal.configuration.domain.SharedConfigurationStatus; +import com.gemstone.gemfire.management.internal.configuration.messages.SharedConfigurationStatusRequest; +import com.gemstone.gemfire.management.internal.configuration.messages.SharedConfigurationStatusResponse; + +import org.springframework.shell.core.annotation.CliAvailabilityIndicator; +import org.springframework.shell.core.annotation.CliCommand; +import org.springframework.shell.core.annotation.CliOption; + +/** + * The LauncherLifecycleCommands class encapsulates all GemFire launcher commands for GemFire tools (like starting + * GemFire Monitor (GFMon) and Visual Statistics Display (VSD)) as well external tools (like jconsole). + *

+ * @see com.gemstone.gemfire.distributed.LocatorLauncher + * @see com.gemstone.gemfire.distributed.ServerLauncher + * @see com.gemstone.gemfire.management.internal.cli.commands.AbstractCommandsSupport + * @see com.gemstone.gemfire.management.internal.cli.shell.Gfsh + * @since 7.0 + */ +@SuppressWarnings("unused") +public class LauncherLifecycleCommands extends AbstractCommandsSupport { + + private static final String LOCATOR_TERM_NAME = "Locator"; + private static final String SERVER_TERM_NAME = "Server"; + + private static final long PROCESS_STREAM_READER_JOIN_TIMEOUT_MILLIS = 30*1000; + private static final long PROCESS_STREAM_READER_ASYNC_STOP_TIMEOUT_MILLIS = 5*1000; + private static final long WAITING_FOR_STOP_TO_MAKE_PID_GO_AWAY_TIMEOUT_MILLIS = 30*1000; + private static final long WAITING_FOR_PID_FILE_TO_CONTAIN_PID_TIMEOUT_MILLIS = 2*1000; + + protected static final int CMS_INITIAL_OCCUPANCY_FRACTION = 60; + protected static final int DEFAULT_PROCESS_OUTPUT_WAIT_TIME_MILLISECONDS = 5000; + protected static final int INVALID_PID = -1; + protected static final int MINIMUM_HEAP_FREE_RATIO = 10; + protected static final int NUM_ATTEMPTS_FOR_SHARED_CONFIGURATION_STATUS = 3; + + protected static final AtomicReference ATTACH_API_AVAILABLE = new AtomicReference<>(null); + + protected static final String ATTACH_API_CLASS_NAME = "com.sun.tools.attach.AttachNotSupportedException"; + protected static final String GEMFIRE_HOME = System.getenv("GEMFIRE"); + protected static final String JAVA_HOME = System.getProperty("java.home"); + protected static final String LOCALHOST = "localhost"; + + // MUST CHANGE THIS TO REGEX SINCE VERSION CHANGES IN JAR NAME + protected static final String GEMFIRE_JAR_PATHNAME = IOUtils.appendToPath(GEMFIRE_HOME, "lib", GemFireVersion.getGemFireJarFileName()); + + protected static final String CORE_DEPENDENCIES_JAR_PATHNAME = + IOUtils.appendToPath(GEMFIRE_HOME, "lib", "gemfire-core-dependencies.jar"); + + protected static final String SPRING_AOP_JAR_NAME_PREFIX = "spring-aop"; + protected static final String SPRING_BEANS_JAR_NAME_PREFIX = "spring-beans"; + protected static final String SPRING_CONTEXT_JAR_NAME_PREFIX = "spring-context"; + protected static final String SPRING_CONTEXT_SUPPORT_JAR_NAME_PREFIX = "spring-context-support"; + protected static final String SPRING_DATA_COMMONS_JAR_NAME_PREFIX = "spring-data-commons"; + protected static final String SPRING_DATA_GEMFIRE_JAR_NAME_PREFIX = "spring-data-gemfire"; + protected static final String SPRING_EXPRESSION_JAR_NAME_PREFIX = "spring-expression"; + protected static final String SPRING_TX_JAR_NAME_PREFIX = "spring-tx"; + + protected static final Set SPRING_JAR_NAME_PREFIXES; + + static { + Set springJarNamePrefixes = new HashSet<>(8); + + springJarNamePrefixes.add(SPRING_AOP_JAR_NAME_PREFIX); + springJarNamePrefixes.add(SPRING_BEANS_JAR_NAME_PREFIX); + springJarNamePrefixes.add(SPRING_CONTEXT_JAR_NAME_PREFIX); + springJarNamePrefixes.add(SPRING_CONTEXT_SUPPORT_JAR_NAME_PREFIX); + springJarNamePrefixes.add(SPRING_DATA_COMMONS_JAR_NAME_PREFIX); + springJarNamePrefixes.add(SPRING_DATA_GEMFIRE_JAR_NAME_PREFIX); + springJarNamePrefixes.add(SPRING_EXPRESSION_JAR_NAME_PREFIX); + springJarNamePrefixes.add(SPRING_TX_JAR_NAME_PREFIX); + + SPRING_JAR_NAME_PREFIXES = Collections.unmodifiableSet(springJarNamePrefixes); + } + + protected static boolean isAttachApiAvailable() { + if (ATTACH_API_AVAILABLE.get() == null) { + try { + ClassUtils.forName(ATTACH_API_CLASS_NAME, new AttachAPINotFoundException()); + ATTACH_API_AVAILABLE.set(Boolean.TRUE); + } + catch (AttachAPINotFoundException ignore) { + ATTACH_API_AVAILABLE.set(Boolean.FALSE); + } + } + + return ATTACH_API_AVAILABLE.get(); + } + + @CliCommand(value = CliStrings.START_LOCATOR, help = CliStrings.START_LOCATOR__HELP) + @CliMetaData(shellOnly = true, relatedTopic = { CliStrings.TOPIC_GEMFIRE_LOCATOR, CliStrings.TOPIC_GEMFIRE_LIFECYCLE }) + public Result startLocator(@CliOption(key = CliStrings.START_LOCATOR__MEMBER_NAME, + mandatory = true, + unspecifiedDefaultValue = CliMetaData.ANNOTATION_NULL_VALUE, + help = CliStrings.START_LOCATOR__MEMBER_NAME__HELP) + final String memberName, + @CliOption(key = CliStrings.START_LOCATOR__BIND_ADDRESS, + unspecifiedDefaultValue = CliMetaData.ANNOTATION_NULL_VALUE, + help = CliStrings.START_LOCATOR__BIND_ADDRESS__HELP) + final String bindAddress, + @CliOption(key = CliStrings.START_LOCATOR__CLASSPATH, + unspecifiedDefaultValue = CliMetaData.ANNOTATION_NULL_VALUE, + help = CliStrings.START_LOCATOR__CLASSPATH__HELP) + final String classpath, + @CliOption(key = CliStrings.START_LOCATOR__FORCE, + unspecifiedDefaultValue = "false", + specifiedDefaultValue = "true", + help = CliStrings.START_LOCATOR__FORCE__HELP) + final Boolean force, + @CliOption(key = CliStrings.START_LOCATOR__GROUP, + optionContext = ConverterHint.MEMBERGROUP, + unspecifiedDefaultValue = CliMetaData.ANNOTATION_NULL_VALUE, + help = CliStrings.START_LOCATOR__GROUP__HELP) + final String group, + @CliOption(key = CliStrings.START_LOCATOR__HOSTNAME_FOR_CLIENTS, + unspecifiedDefaultValue = CliMetaData.ANNOTATION_NULL_VALUE, + help = CliStrings.START_LOCATOR__HOSTNAME_FOR_CLIENTS__HELP) + final String hostnameForClients, + @CliOption(key = CliStrings.START_LOCATOR__INCLUDE_SYSTEM_CLASSPATH, + specifiedDefaultValue = "true", + unspecifiedDefaultValue = "false", + help = CliStrings.START_LOCATOR__INCLUDE_SYSTEM_CLASSPATH__HELP) + final Boolean includeSystemClasspath, + @CliOption(key = CliStrings.START_LOCATOR__LOCATORS, + optionContext = ConverterHint.LOCATOR_DISCOVERY_CONFIG, + unspecifiedDefaultValue = CliMetaData.ANNOTATION_NULL_VALUE, + help = CliStrings.START_LOCATOR__LOCATORS__HELP) + final String locators, + @CliOption(key = CliStrings.START_LOCATOR__LOG_LEVEL, + optionContext = ConverterHint.LOG_LEVEL, + unspecifiedDefaultValue = CliMetaData.ANNOTATION_NULL_VALUE, + help = CliStrings.START_LOCATOR__LOG_LEVEL__HELP) + final String logLevel, + @CliOption(key = CliStrings.START_LOCATOR__MCAST_ADDRESS, + unspecifiedDefaultValue = CliMetaData.ANNOTATION_NULL_VALUE, + help = CliStrings.START_LOCATOR__MCAST_ADDRESS__HELP) + final String mcastBindAddress, + @CliOption(key = CliStrings.START_LOCATOR__MCAST_PORT, + unspecifiedDefaultValue = CliMetaData.ANNOTATION_NULL_VALUE, + help = CliStrings.START_LOCATOR__MCAST_PORT__HELP) + final Integer mcastPort, + @CliOption(key = CliStrings.START_LOCATOR__PORT, + unspecifiedDefaultValue = CliMetaData.ANNOTATION_NULL_VALUE, + help = CliStrings.START_LOCATOR__PORT__HELP) + final Integer port, + @CliOption(key = CliStrings.START_LOCATOR__DIR, + optionContext = ConverterHint.DIR_PATHSTRING, + unspecifiedDefaultValue = CliMetaData.ANNOTATION_NULL_VALUE, + help = CliStrings.START_LOCATOR__DIR__HELP) + String workingDirectory, + @CliOption(key = CliStrings.START_LOCATOR__PROPERTIES, + optionContext = ConverterHint.FILE_PATHSTRING, + unspecifiedDefaultValue = CliMetaData.ANNOTATION_NULL_VALUE, + help = CliStrings.START_LOCATOR__PROPERTIES__HELP) + String gemfirePropertiesPathname, + @CliOption(key = CliStrings.START_LOCATOR__SECURITY_PROPERTIES, + optionContext = ConverterHint.FILE_PATHSTRING, + unspecifiedDefaultValue = CliMetaData.ANNOTATION_NULL_VALUE, + help = CliStrings.START_LOCATOR__SECURITY_PROPERTIES__HELP) + String gemfireSecurityPropertiesPathname, + @CliOption(key = CliStrings.START_LOCATOR__INITIALHEAP, + unspecifiedDefaultValue = CliMetaData.ANNOTATION_NULL_VALUE, + help = CliStrings.START_LOCATOR__INITIALHEAP__HELP) + final String initialHeap, + @CliOption(key = CliStrings.START_LOCATOR__MAXHEAP, + unspecifiedDefaultValue = CliMetaData.ANNOTATION_NULL_VALUE, + help = CliStrings.START_LOCATOR__MAXHEAP__HELP) + final String maxHeap, + @CliOption(key = CliStrings.START_LOCATOR__J, + optionContext = ConverterHint.STRING_LIST, + unspecifiedDefaultValue = CliMetaData.ANNOTATION_NULL_VALUE, + help = CliStrings.START_LOCATOR__J__HELP) + @CliMetaData(valueSeparator = ",") + final String[] jvmArgsOpts, + @CliOption (key = CliStrings.START_LOCATOR__CONNECT, + unspecifiedDefaultValue = "true", + specifiedDefaultValue = "true", + help = CliStrings.START_LOCATOR__CONNECT__HELP) + final boolean connect, + @CliOption(key = CliStrings.START_LOCATOR__ENABLE__SHARED__CONFIGURATION, + unspecifiedDefaultValue = "true", + specifiedDefaultValue = "true", + help = CliStrings.START_LOCATOR__ENABLE__SHARED__CONFIGURATION__HELP) + final boolean enableSharedConfiguration, + @CliOption(key = CliStrings.START_LOCATOR__LOAD__SHARED_CONFIGURATION__FROM__FILESYSTEM, + unspecifiedDefaultValue = "false", + help = CliStrings.START_LOCATOR__LOAD__SHARED_CONFIGURATION__FROM__FILESYSTEM__HELP) + final boolean loadSharedConfigurationFromDirectory, + @CliOption(key = CliStrings.START_LOCATOR__CLUSTER__CONFIG__DIR, + unspecifiedDefaultValue = "", + help = CliStrings.START_LOCATOR__CLUSTER__CONFIG__DIR__HELP) + final String clusterConfigDir + ) { + try { + if (workingDirectory == null) { + // attempt to use or make sub-directory using memberName... + File locatorWorkingDirectory = new File(memberName); + + if (!(locatorWorkingDirectory.exists() || locatorWorkingDirectory.mkdir())) { + throw new IllegalStateException(CliStrings.format(CliStrings.START_LOCATOR__MSG__COULD_NOT_CREATE_DIRECTORY_0_VERIFY_PERMISSIONS, + locatorWorkingDirectory.getAbsolutePath())); + } + + workingDirectory = IOUtils.tryGetCanonicalPathElseGetAbsolutePath(locatorWorkingDirectory); + } + + gemfirePropertiesPathname = CliUtil.resolvePathname(gemfirePropertiesPathname); + + if (!StringUtils.isBlank(gemfirePropertiesPathname) && !IOUtils.isExistingPathname(gemfirePropertiesPathname)) { + return ResultBuilder.createUserErrorResult(CliStrings.format(CliStrings.GEMFIRE_0_PROPERTIES_1_NOT_FOUND_MESSAGE, + StringUtils.EMPTY_STRING, gemfirePropertiesPathname)); + } + + gemfireSecurityPropertiesPathname = CliUtil.resolvePathname(gemfireSecurityPropertiesPathname); + + if (!StringUtils.isBlank(gemfireSecurityPropertiesPathname) && !IOUtils.isExistingPathname(gemfireSecurityPropertiesPathname)) { + return ResultBuilder.createUserErrorResult(CliStrings.format(CliStrings.GEMFIRE_0_PROPERTIES_1_NOT_FOUND_MESSAGE, + "Security ", gemfireSecurityPropertiesPathname)); + } + + File locatorPidFile = new File(workingDirectory, ProcessType.LOCATOR.getPidFileName()); + + final int oldPid = readPid(locatorPidFile); + + Properties gemfireProperties = new Properties(); + + gemfireProperties.setProperty(DistributionConfig.GROUPS_NAME, StringUtils.valueOf(group, StringUtils.EMPTY_STRING)); + gemfireProperties.setProperty(DistributionConfig.LOCATORS_NAME, StringUtils.valueOf(locators, StringUtils.EMPTY_STRING)); + gemfireProperties.setProperty(DistributionConfig.LOG_LEVEL_NAME, StringUtils.valueOf(logLevel, StringUtils.EMPTY_STRING)); + gemfireProperties.setProperty(DistributionConfig.MCAST_ADDRESS_NAME, StringUtils.valueOf(mcastBindAddress, StringUtils.EMPTY_STRING)); + gemfireProperties.setProperty(DistributionConfig.MCAST_PORT_NAME, StringUtils.valueOf(mcastPort, StringUtils.EMPTY_STRING)); + gemfireProperties.setProperty(DistributionConfig.ENABLE_CLUSTER_CONFIGURATION_NAME, StringUtils.valueOf(enableSharedConfiguration, StringUtils.EMPTY_STRING)); + gemfireProperties.setProperty(DistributionConfig.LOAD_CLUSTER_CONFIG_FROM_DIR_NAME, StringUtils.valueOf(loadSharedConfigurationFromDirectory, StringUtils.EMPTY_STRING)); + gemfireProperties.setProperty(DistributionConfig.CLUSTER_CONFIGURATION_DIR, StringUtils.valueOf(clusterConfigDir, StringUtils.EMPTY_STRING)); + + // read the OSProcess enable redirect system property here -- TODO: replace with new GFSH argument + final boolean redirectOutput = Boolean.getBoolean(OSProcess.ENABLE_OUTPUT_REDIRECTION_PROPERTY); + LocatorLauncher locatorLauncher = new LocatorLauncher.Builder() + .setBindAddress(bindAddress) + .setForce(force) + .setHostnameForClients(hostnameForClients) + .setMemberName(memberName) + .setPort(port) + .setRedirectOutput(redirectOutput) + .setWorkingDirectory(workingDirectory) + .build(); + + String[] locatorCommandLine = createStartLocatorCommandLine(locatorLauncher, gemfirePropertiesPathname, + gemfireSecurityPropertiesPathname, gemfireProperties, classpath, includeSystemClasspath, jvmArgsOpts, initialHeap, maxHeap); + + //getGfsh().logInfo(StringUtils.concat(locatorCommandLine, " "), null); + + final Process locatorProcess = new ProcessBuilder(locatorCommandLine) + .directory(new File(locatorLauncher.getWorkingDirectory())) + .start(); + + locatorProcess.getInputStream().close(); + locatorProcess.getOutputStream().close(); + + // fix TRAC bug #51967 by using NON_BLOCKING on Windows + final ReadingMode readingMode = SystemUtils.isWindows() ? ReadingMode.NON_BLOCKING : ReadingMode.BLOCKING; + + final StringBuffer message = new StringBuffer(); // need thread-safe StringBuffer + InputListener inputListener = new InputListener() { + @Override + public void notifyInputLine(String line) { + message.append(line); + if (readingMode == ReadingMode.BLOCKING) { + message.append(StringUtils.LINE_SEPARATOR); + } + } + }; + + ProcessStreamReader stderrReader = new ProcessStreamReader.Builder(locatorProcess) + .inputStream(locatorProcess.getErrorStream()) + .inputListener(inputListener) + .readingMode(readingMode) + .continueReadingMillis(2*1000) + .build() + .start(); + + LocatorState locatorState; + + String previousLocatorStatusMessage = null; + + LauncherSignalListener locatorSignalListener = new LauncherSignalListener(); + + final boolean registeredLocatorSignalListener = getGfsh().getSignalHandler().registerListener(locatorSignalListener); + + try { + getGfsh().logInfo(String.format(CliStrings.START_LOCATOR__RUN_MESSAGE, + IOUtils.tryGetCanonicalPathElseGetAbsolutePath(new File(locatorLauncher.getWorkingDirectory()))), null); + + do { + try { + final int exitValue = locatorProcess.exitValue(); + + stderrReader.join(PROCESS_STREAM_READER_JOIN_TIMEOUT_MILLIS); // was Long.MAX_VALUE + + //Gfsh.println(message); + + return ResultBuilder.createShellClientErrorResult(String.format( + CliStrings.START_LOCATOR__PROCESS_TERMINATED_ABNORMALLY_ERROR_MESSAGE, + exitValue, locatorLauncher.getWorkingDirectory(), message.toString())); + } + catch (IllegalThreadStateException ignore) { + // the IllegalThreadStateException is expected; it means the Locator's process has not terminated, + // and basically should not + Gfsh.print("."); + + synchronized (this) { + TimeUnit.MILLISECONDS.timedWait(this, 500); + } + + locatorState = (ProcessUtils.isAttachApiAvailable() ? locatorStatus(locatorPidFile, oldPid, memberName) + : locatorStatus(workingDirectory, memberName)); + + String currentLocatorStatusMessage = locatorState.getStatusMessage(); + + if (isStartingOrNotResponding(locatorState.getStatus()) + && !(StringUtils.isBlank(currentLocatorStatusMessage) + || currentLocatorStatusMessage.equalsIgnoreCase(previousLocatorStatusMessage))) + { + Gfsh.println(); + Gfsh.println(currentLocatorStatusMessage); + previousLocatorStatusMessage = currentLocatorStatusMessage; + } + } + } + while (!(registeredLocatorSignalListener && locatorSignalListener.isSignaled()) + && isStartingOrNotResponding(locatorState.getStatus())); + } + finally { + stderrReader.stopAsync(PROCESS_STREAM_READER_ASYNC_STOP_TIMEOUT_MILLIS); // stop will close ErrorStream + getGfsh().getSignalHandler().unregisterListener(locatorSignalListener); + } + + Gfsh.println(); + + final boolean asyncStart = (registeredLocatorSignalListener && locatorSignalListener.isSignaled() + && isStartingNotRespondingOrNull(locatorState)); + + InfoResultData infoResultData = ResultBuilder.createInfoResultData(); + + if (asyncStart) { + infoResultData.addLine(String.format(CliStrings.ASYNC_PROCESS_LAUNCH_MESSAGE, LOCATOR_TERM_NAME)); + } + else { + infoResultData.addLine(locatorState.toString()); + + String locatorHostName = StringUtils.defaultIfBlank(locatorLauncher.getHostnameForClients(), getLocalHost()); + int locatorPort = locatorLauncher.getPort(); + + // AUTO-CONNECT + // If the connect succeeds add the connected message to the result, + // Else, ask the user to use the "connect" command to connect to the Locator. + if (shouldAutoConnect(connect)) { + doAutoConnect(locatorHostName, locatorPort, gemfirePropertiesPathname, gemfireSecurityPropertiesPathname, + infoResultData); + } + + // Report on the state of the Shared Configuration service if enabled... + if (enableSharedConfiguration) { + infoResultData.addLine(getSharedConfigurationStatusFromLocator(locatorHostName, locatorPort)); + } + } + + return ResultBuilder.buildResult(infoResultData); + } + catch (IllegalArgumentException e) { + String message = e.getMessage(); + if (message != null && message.matches(LocalizedStrings.Launcher_Builder_UNKNOWN_HOST_ERROR_MESSAGE.toLocalizedString(".+"))) { + message = CliStrings.format(CliStrings.LAUNCHERLIFECYCLECOMMANDS__MSG__FAILED_TO_START_0_REASON_1, LOCATOR_TERM_NAME, message); + } + return ResultBuilder.createUserErrorResult(message); + } + catch (IllegalStateException e) { + return ResultBuilder.createUserErrorResult(e.getMessage()); + } + catch (VirtualMachineError e) { + SystemFailure.initiateFailure(e); + throw e; + } + catch (Throwable t) { + SystemFailure.checkFailure(); + String errorMessage = String.format(CliStrings.START_LOCATOR__GENERAL_ERROR_MESSAGE, + StringUtils.defaultIfBlank(workingDirectory, memberName), getLocatorId(bindAddress, port), + toString(t, getGfsh().getDebug())); + getGfsh().logToFile(errorMessage, t); + return ResultBuilder.createShellClientErrorResult(errorMessage); + } + finally { + Gfsh.redirectInternalJavaLoggers(); + } + } + + protected String[] createStartLocatorCommandLine(final LocatorLauncher launcher, + final String gemfirePropertiesPathname, + final String gemfireSecurityPropertiesPathname, + final Properties gemfireProperties, + final String userClasspath, + final Boolean includeSystemClasspath, + final String[] jvmArgsOpts, + final String initialHeap, + final String maxHeap) + throws MalformedObjectNameException + { + List commandLine = new ArrayList<>(); + + commandLine.add(getJavaPath()); + commandLine.add("-server"); + commandLine.add("-classpath"); + commandLine.add(getLocatorClasspath(Boolean.TRUE.equals(includeSystemClasspath), userClasspath)); + + addCurrentLocators(commandLine, gemfireProperties); + addGemFirePropertyFile(commandLine, gemfirePropertiesPathname); + addGemFireSecurityPropertyFile(commandLine, gemfireSecurityPropertiesPathname); + addGemFireSystemProperties(commandLine, gemfireProperties); + addJvmArgumentsAndOptions(commandLine, jvmArgsOpts); + addInitialHeap(commandLine, initialHeap); + addMaxHeap(commandLine, maxHeap); + + commandLine.add("-D".concat(AbstractLauncher.SIGNAL_HANDLER_REGISTRATION_SYSTEM_PROPERTY.concat("=true"))); + commandLine.add("-Djava.awt.headless=true"); + commandLine.add("-Dsun.rmi.dgc.server.gcInterval".concat("=").concat(Long.toString(Long.MAX_VALUE-1))); + commandLine.add(LocatorLauncher.class.getName()); + commandLine.add(LocatorLauncher.Command.START.getName()); + + if (!StringUtils.isBlank(launcher.getMemberName())) { + commandLine.add(launcher.getMemberName()); + } + + if (launcher.getBindAddress() != null) { + commandLine.add("--bind-address=" + launcher.getBindAddress().getCanonicalHostName()); + } + + if (launcher.isDebugging() || isDebugging()) { + commandLine.add("--debug"); + } + + if (launcher.isForcing()) { + commandLine.add("--force"); + } + + if (!StringUtils.isBlank(launcher.getHostnameForClients())) { + commandLine.add("--hostname-for-clients=" + launcher.getHostnameForClients()); + } + + if (launcher.getPort() != null) { + commandLine.add("--port=" + launcher.getPort()); + } + + if (launcher.isRedirectingOutput()) { + commandLine.add("--redirect-output"); + } + + return commandLine.toArray(new String[commandLine.size()]); + } + + // TODO should we connect implicitly when in non-interactive, headless mode (e.g. gfsh -e "start locator ...")? + // With execute option (-e), there could be multiple commands which might presume that a prior "start locator" + // has formed the connection. + private boolean shouldAutoConnect(final boolean connect) { + return (connect && !(getGfsh() == null || isConnectedAndReady())); + } + + private boolean doAutoConnect(final String locatorHostname, + final int locatorPort, + final String gemfirePropertiesPathname, + final String gemfireSecurityPropertiesPathname, + final InfoResultData infoResultData) + { + boolean connectSuccess = false; + boolean jmxManagerAuthEnabled = false; + boolean jmxManagerSslEnabled = false; + + Map configurationProperties = loadConfigurationProperties(gemfireSecurityPropertiesPathname, + loadConfigurationProperties(gemfirePropertiesPathname)); + Map locatorConfigurationProperties = new HashMap<>(configurationProperties); + + String responseFailureMessage = null; + + for (int attempts = 0; (attempts < 10 && !connectSuccess); attempts++) { + try { + ConnectToLocatorResult connectToLocatorResult = ShellCommands.connectToLocator(locatorHostname, locatorPort, + ShellCommands.getConnectLocatorTimeoutInMS() / 4, locatorConfigurationProperties); + + ConnectionEndpoint memberEndpoint = connectToLocatorResult.getMemberEndpoint(); + + jmxManagerSslEnabled = connectToLocatorResult.isJmxManagerSslEnabled(); + + if (!jmxManagerSslEnabled) { + configurationProperties.clear(); + } + + getGfsh().setOperationInvoker(new JmxOperationInvoker(memberEndpoint.getHost(), memberEndpoint.getPort(), + null, null, configurationProperties)); + + String shellAndLogMessage = CliStrings.format(CliStrings.CONNECT__MSG__SUCCESS, memberEndpoint.toString(false)); + + infoResultData.addLine("\n"); + infoResultData.addLine(shellAndLogMessage); + getGfsh().logToFile(shellAndLogMessage, null); + + connectSuccess = true; + responseFailureMessage = null; + } + catch (IllegalStateException unexpected) { + if (CauseFinder.indexOfCause(unexpected, ClassCastException.class, false) != -1) { + responseFailureMessage = "The Locator might require SSL Configuration."; + } + } + catch (SecurityException ignore) { + getGfsh().logToFile(ignore.getMessage(), ignore); + jmxManagerAuthEnabled = true; + break; // no need to continue after SecurityException + } + catch (SSLException ignore) { + if (ignore instanceof SSLHandshakeException) { + // try to connect again without SSL since the SSL handshake failed implying a plain text connection... + locatorConfigurationProperties.clear(); + } + else { + // another type of SSL error occurred (possibly a configuration issue); pass the buck... + getGfsh().logToFile(ignore.getMessage(), ignore); + responseFailureMessage = "Check your SSL configuration and try again."; + break; + } + } + catch (Exception ignore) { + getGfsh().logToFile(ignore.getMessage(), ignore); + responseFailureMessage = "Failed to connect; unknown cause: " + ignore.getMessage(); + } + } + + if (!connectSuccess) { + doOnConnectionFailure(locatorHostname, locatorPort, jmxManagerAuthEnabled, jmxManagerSslEnabled, infoResultData); + } + + if (!StringUtils.isBlank(responseFailureMessage)) { + infoResultData.addLine("\n"); + infoResultData.addLine(responseFailureMessage); + } + + return connectSuccess; + } + + private void doOnConnectionFailure(final String locatorHostName, + final int locatorPort, + final boolean jmxManagerAuthEnabled, + final boolean jmxManagerSslEnabled, + final InfoResultData infoResultData) + { + infoResultData.addLine("\n"); + infoResultData.addLine(CliStrings.format(CliStrings.START_LOCATOR__USE__0__TO__CONNECT, + new CommandStringBuilder(CliStrings.CONNECT).addOption(CliStrings.CONNECT__LOCATOR, + locatorHostName + "[" + locatorPort + "]").toString())); + + StringBuilder message = new StringBuilder(); + + if (jmxManagerAuthEnabled) { + message.append("Authentication"); + } + if (jmxManagerSslEnabled) { + message.append(jmxManagerAuthEnabled ? " and " : StringUtils.EMPTY_STRING).append("SSL configuration"); + } + if (jmxManagerAuthEnabled || jmxManagerSslEnabled) { + message.append(" required to connect to the Manager."); + infoResultData.addLine("\n"); + infoResultData.addLine(message.toString()); + } + } + + private Map loadConfigurationProperties(final String configurationPropertiesPathname) { + return loadConfigurationProperties(configurationPropertiesPathname, null); + } + + private Map loadConfigurationProperties(final String configurationPropertiesPathname, + Map configurationProperties) + { + configurationProperties = (configurationProperties != null ? configurationProperties + : new HashMap()); + + if (IOUtils.isExistingPathname(configurationPropertiesPathname)) { + try { + configurationProperties.putAll(ShellCommands.loadPropertiesFromURL( + new File(configurationPropertiesPathname).toURI().toURL())); + } + catch (MalformedURLException ignore) { + LogWrapper.getInstance().warning(String.format( + "Failed to load GemFire configuration properties from pathname (%1$s)!", + configurationPropertiesPathname), ignore); + } + } + + return configurationProperties; + } + + private String getSharedConfigurationStatusFromLocatorState(LocatorState locatorState) throws ClassNotFoundException, IOException { + return getSharedConfigurationStatusFromLocator(locatorState.getHost(), Integer.parseInt(locatorState.getPort())); + } + + private String getSharedConfigurationStatusFromLocator(String locatorHostName, int locatorPort) throws ClassNotFoundException, IOException { + final StringBuilder buffer = new StringBuilder(); + + try { + final InetAddress networkAddress = InetAddress.getByName(locatorHostName); + + SharedConfigurationStatusResponse statusResponse = (SharedConfigurationStatusResponse) + TcpClient.requestToServer(networkAddress, locatorPort, new SharedConfigurationStatusRequest(), 10000, true); + + for (int i=0; i pmpSet = statusResponse.getOtherLocatorInformation(); + if (!pmpSet.isEmpty()) { + buffer.append("\nThis locator might have stale cluster configuration data."); + buffer.append("\nFollowing locators contain potentially newer cluster configuration data"); + + for (PersistentMemberPattern pmp : pmpSet) { + buffer.append("\nHost : ").append(pmp.getHost()); + buffer.append("\nDirectory : ").append(pmp.getDirectory()); + } + } + else { + buffer.append("\nPlease check the log file for errors"); + } + break; + case UNDETERMINED: + buffer.append("\nUnable to determine the status of shared configuration service, please check the log file"); + break; + case NOT_STARTED: + buffer.append("\nCluster configuration service has not been started yet"); + break; + case STARTED: + buffer.append("\nCluster configuration service has been started, but its not running yet"); + break; + } + } + catch (Exception e) { + // TODO fix this once Trac Bug #50513 gets fixed + // NOTE this ClassCastException occurs if the a plain text TCP/IP connection is used to connect to a Locator + // configured with SSL. + getGfsh().logToFile(String.format("Failed to get the status of the Shared Configuration Service running on Locator (%1$s[%2$d])!", + locatorHostName, locatorPort), e); + } + + return buffer.toString(); + } + + @CliCommand(value = CliStrings.STATUS_LOCATOR, help = CliStrings.STATUS_LOCATOR__HELP) + @CliMetaData(shellOnly = true, relatedTopic = { CliStrings.TOPIC_GEMFIRE_LOCATOR, CliStrings.TOPIC_GEMFIRE_LIFECYCLE }) + public Result statusLocator(@CliOption(key = CliStrings.STATUS_LOCATOR__MEMBER, + optionContext = ConverterHint.LOCATOR_MEMBER_IDNAME, + unspecifiedDefaultValue = CliMetaData.ANNOTATION_NULL_VALUE, + help = CliStrings.STATUS_LOCATOR__MEMBER__HELP) + final String member, + @CliOption(key = CliStrings.STATUS_LOCATOR__HOST, + unspecifiedDefaultValue = CliMetaData.ANNOTATION_NULL_VALUE, + help = CliStrings.STATUS_LOCATOR__HOST__HELP) + final String locatorHost, + @CliOption(key = CliStrings.STATUS_LOCATOR__PORT, + unspecifiedDefaultValue = CliMetaData.ANNOTATION_NULL_VALUE, + help = CliStrings.STATUS_LOCATOR__PORT__HELP) + final Integer locatorPort, + @CliOption(key = CliStrings.STATUS_LOCATOR__PID, + unspecifiedDefaultValue = CliMetaData.ANNOTATION_NULL_VALUE, + help = CliStrings.STATUS_LOCATOR__PID__HELP) + final Integer pid, + @CliOption(key = CliStrings.STATUS_LOCATOR__DIR, + optionContext = ConverterHint.DIR_PATHSTRING, + unspecifiedDefaultValue = CliMetaData.ANNOTATION_NULL_VALUE, + help = CliStrings.STATUS_LOCATOR__DIR__HELP) + final String workingDirectory) + { + try { + if (!StringUtils.isBlank(member)) { + if (isConnectedAndReady()) { + final MemberMXBean locatorProxy = getMemberMXBean(member); + + if (locatorProxy != null) { + LocatorState state = LocatorState.fromJson(locatorProxy.status()); + return createStatusLocatorResult(state); + } + else { + return ResultBuilder.createUserErrorResult(CliStrings.format( + CliStrings.STATUS_LOCATOR__NO_LOCATOR_FOUND_FOR_MEMBER_ERROR_MESSAGE, member)); + } + } + else { + return ResultBuilder.createUserErrorResult(CliStrings.format( + CliStrings.STATUS_SERVICE__GFSH_NOT_CONNECTED_ERROR_MESSAGE, LOCATOR_TERM_NAME)); + } + } + else { + final LocatorLauncher locatorLauncher = new LocatorLauncher.Builder() + .setCommand(LocatorLauncher.Command.STATUS) + .setBindAddress(locatorHost) + .setDebug(isDebugging()) + .setPid(pid) + .setPort(locatorPort) + .setWorkingDirectory(workingDirectory) + .build(); + + final LocatorState state = locatorLauncher.status(); + return createStatusLocatorResult(state); + } + } + catch (IllegalArgumentException e) { + return ResultBuilder.createUserErrorResult(e.getMessage()); + } + catch (IllegalStateException e) { + return ResultBuilder.createUserErrorResult(e.getMessage()); + } + catch (VirtualMachineError e) { + SystemFailure.initiateFailure(e); + throw e; + } + catch (Throwable t) { + SystemFailure.checkFailure(); + return ResultBuilder.createShellClientErrorResult(String.format(CliStrings.STATUS_LOCATOR__GENERAL_ERROR_MESSAGE, + getLocatorId(locatorHost, locatorPort), StringUtils.defaultIfBlank(workingDirectory, SystemUtils.CURRENT_DIRECTORY), + toString(t, getGfsh().getDebug()))); + } + } + + @CliCommand(value=CliStrings.STOP_LOCATOR, help=CliStrings.STOP_LOCATOR__HELP) + @CliMetaData(shellOnly=true, relatedTopic = {CliStrings.TOPIC_GEMFIRE_LOCATOR, CliStrings.TOPIC_GEMFIRE_LIFECYCLE}) + public Result stopLocator(@CliOption(key = CliStrings.STOP_LOCATOR__MEMBER, + optionContext = ConverterHint.LOCATOR_MEMBER_IDNAME, + unspecifiedDefaultValue=CliMetaData.ANNOTATION_NULL_VALUE, + help=CliStrings.STOP_LOCATOR__MEMBER__HELP) + final String member, + @CliOption(key=CliStrings.STOP_LOCATOR__PID, + unspecifiedDefaultValue=CliMetaData.ANNOTATION_NULL_VALUE, + help=CliStrings.STOP_LOCATOR__PID__HELP) + final Integer pid, + @CliOption(key=CliStrings.STOP_LOCATOR__DIR, + optionContext = ConverterHint.DIR_PATHSTRING, + unspecifiedDefaultValue=CliMetaData.ANNOTATION_NULL_VALUE, + help=CliStrings.STOP_LOCATOR__DIR__HELP) + final String workingDirectory) + { + LocatorState locatorState; + + try { + if (!StringUtils.isBlank(member)) { + if (isConnectedAndReady()) { + final MemberMXBean locatorProxy = getMemberMXBean(member); + + if (locatorProxy != null) { + if (!locatorProxy.isLocator()) { + throw new IllegalStateException(CliStrings.format(CliStrings.STOP_LOCATOR__NOT_LOCATOR_ERROR_MESSAGE, member)); + } + + if (locatorProxy.isServer()) { + throw new IllegalStateException(CliStrings.format(CliStrings.STOP_LOCATOR__LOCATOR_IS_CACHE_SERVER_ERROR_MESSAGE, member)); + } + + locatorState = LocatorState.fromJson(locatorProxy.status()); + locatorProxy.shutDownMember(); + } + else { + return ResultBuilder.createUserErrorResult(CliStrings.format( + CliStrings.STOP_LOCATOR__NO_LOCATOR_FOUND_FOR_MEMBER_ERROR_MESSAGE, member)); + } + } + else { + return ResultBuilder.createUserErrorResult(CliStrings.format( + CliStrings.STOP_SERVICE__GFSH_NOT_CONNECTED_ERROR_MESSAGE, LOCATOR_TERM_NAME)); + } + } + else { + final LocatorLauncher locatorLauncher = new LocatorLauncher.Builder() + .setCommand(LocatorLauncher.Command.STOP) + .setDebug(isDebugging()) + .setPid(pid) + .setWorkingDirectory(workingDirectory) + .build(); + + locatorState = locatorLauncher.status(); + locatorLauncher.stop(); + } + + if (Status.ONLINE.equals(locatorState.getStatus())) { + getGfsh().logInfo(String.format(CliStrings.STOP_LOCATOR__STOPPING_LOCATOR_MESSAGE, + locatorState.getWorkingDirectory(), locatorState.getServiceLocation(), locatorState.getMemberName(), + locatorState.getPid(), locatorState.getLogFile()), null); + + StopWatch stopWatch = new StopWatch(true); + while (isVmWithProcessIdRunning(locatorState.getPid())) { + Gfsh.print("."); + if (stopWatch.elapsedTimeMillis() > WAITING_FOR_STOP_TO_MAKE_PID_GO_AWAY_TIMEOUT_MILLIS) { + break; + } + synchronized (this) { + TimeUnit.MILLISECONDS.timedWait(this, 500); + } + } + + return ResultBuilder.createInfoResult(StringUtils.EMPTY_STRING); + } + else { + return ResultBuilder.createUserErrorResult(locatorState.toString()); + } + } + catch (IllegalArgumentException e) { + return ResultBuilder.createUserErrorResult(e.getMessage()); + } + catch (IllegalStateException e) { + return ResultBuilder.createUserErrorResult(e.getMessage()); + } + catch (VirtualMachineError e) { + SystemFailure.initiateFailure(e); + throw e; + } + catch (Throwable t) { + SystemFailure.checkFailure(); + return ResultBuilder.createShellClientErrorResult(String.format(CliStrings.STOP_LOCATOR__GENERAL_ERROR_MESSAGE, + toString(t, getGfsh().getDebug()))); + } finally { + Gfsh.redirectInternalJavaLoggers(); + } + } + + // TODO re-evaluate whether a MalformedObjectNameException should be thrown here; just because we were not able to find + // the "current" Locators in order to conveniently add the new member to the GemFire cluster does not mean we should + // throw an Exception! + protected void addCurrentLocators(final List commandLine, final Properties gemfireProperties) throws MalformedObjectNameException { + if (StringUtils.isBlank(gemfireProperties.getProperty(DistributionConfig.LOCATORS_NAME))) { + String currentLocators = getCurrentLocators(); + + if (!StringUtils.isBlank(currentLocators)) { + commandLine.add("-D".concat(ProcessLauncherContext.OVERRIDDEN_DEFAULTS_PREFIX) + .concat(DistributionConfig.LOCATORS_NAME).concat("=").concat(currentLocators)); + } + } + } + + protected Result createStatusLocatorResult(final LocatorState state) throws NumberFormatException, IOException, ClassNotFoundException { + InfoResultData infoResultData = ResultBuilder.createInfoResultData(); + infoResultData.addLine(state.toString()); + infoResultData.addLine(getSharedConfigurationStatusFromLocatorState(state)); + return ResultBuilder.buildResult(infoResultData); + } + + protected void addGemFirePropertyFile(final List commandLine, final String gemfirePropertiesPathname) { + if (!StringUtils.isBlank(gemfirePropertiesPathname)) { + commandLine.add("-DgemfirePropertyFile=" + gemfirePropertiesPathname); + } + } + + protected void addGemFireSecurityPropertyFile(final List commandLine, final String gemfireSecurityPropertiesPathname) { + if (!StringUtils.isBlank(gemfireSecurityPropertiesPathname)) { + commandLine.add("-DgemfireSecurityPropertyFile=" + gemfireSecurityPropertiesPathname); + } + } + + protected void addGemFireSystemProperties(final List commandLine, final Properties gemfireProperties) { + for (final Object property : gemfireProperties.keySet()) { + final String propertyName = property.toString(); + final String propertyValue = gemfireProperties.getProperty(propertyName); + if (!StringUtils.isBlank(propertyValue)) { + commandLine.add("-Dgemfire." + propertyName + "=" + propertyValue); + } + } + } + + protected void addInitialHeap(final List commandLine, final String initialHeap) { + if (!StringUtils.isBlank(initialHeap)) { + commandLine.add("-Xms" + initialHeap); + } + } + + protected void addJvmArgumentsAndOptions(final List commandLine, final String[] jvmArgsOpts) { + if (jvmArgsOpts != null) { + commandLine.addAll(Arrays.asList(jvmArgsOpts)); + } + } + + // Fix for Bug #47192 - "Causing the GemFire member (JVM process) to exit on OutOfMemoryErrors" + protected void addJvmOptionsForOutOfMemoryErrors(final List commandLine) { + if (SystemUtils.isHotSpotVM()) { + if (SystemUtils.isWindows()) { + // ProcessBuilder "on Windows" needs every word (space separated) to be + // a different element in the array/list. See #47312. Need to study why! + commandLine.add("-XX:OnOutOfMemoryError=taskkill /F /PID %p"); + } + else { // All other platforms (Linux, Mac OS X, UNIX, etc) + commandLine.add("-XX:OnOutOfMemoryError=kill -KILL %p"); + } + } + else if (SystemUtils.isJ9VM()) { + // NOTE IBM states the following IBM J9 JVM command-line option/switch has side-effects on "performance", + // as noted in the reference documentation... + // http://publib.boulder.ibm.com/infocenter/javasdk/v6r0/index.jsp?topic=/com.ibm.java.doc.diagnostics.60/diag/appendixes/cmdline/commands_jvm.html + commandLine.add("-Xcheck:memory"); + } + else if (SystemUtils.isJRockitVM()) { + // NOTE the following Oracle JRockit JVM documentation was referenced to identify the appropriate JVM option to + // set when handling OutOfMemoryErrors. + // http://docs.oracle.com/cd/E13150_01/jrockit_jvm/jrockit/jrdocs/refman/optionXX.html + commandLine.add("-XXexitOnOutOfMemory"); + } + } + + protected void addMaxHeap(final List commandLine, final String maxHeap) { + if (!StringUtils.isBlank(maxHeap)) { + commandLine.add("-Xmx" + maxHeap); + commandLine.add("-XX:+UseConcMarkSweepGC"); + commandLine.add("-XX:CMSInitiatingOccupancyFraction=" + CMS_INITIAL_OCCUPANCY_FRACTION); + //commandLine.add("-XX:MinHeapFreeRatio=" + MINIMUM_HEAP_FREE_RATIO); + } + } + + protected LocatorState locatorStatus(final File locatorPidFile, final int oldPid, final String memberName) { + final int newPid = readPid(locatorPidFile); + + if (newPid != INVALID_PID && newPid != oldPid) { + LocatorState locatorState = new LocatorLauncher.Builder().setPid(newPid).build().status(); + + if (ObjectUtils.equals(locatorState.getMemberName(), memberName)) { + return locatorState; + } + } + + return new LocatorState(new LocatorLauncher.Builder().build(), Status.NOT_RESPONDING); + } + + protected LocatorState locatorStatus(final String workingDirectory, final String memberName) { + LocatorState locatorState = new LocatorLauncher.Builder().setWorkingDirectory(workingDirectory).build().status(); + + if (ObjectUtils.equals(locatorState.getMemberName(), memberName)) { + return locatorState; + } + + return new LocatorState(new LocatorLauncher.Builder().build(), Status.NOT_RESPONDING); + } + + protected String readErrorStream(final Process process) throws IOException { + BufferedReader reader = new BufferedReader(new InputStreamReader(process.getErrorStream())); + StringBuilder message = new StringBuilder(); + + for (String line = reader.readLine(); line != null; line = reader.readLine()) { + message.append(line); + message.append(StringUtils.LINE_SEPARATOR); + } + + IOUtils.close(reader); + + return message.toString(); + } + + protected int readPid(final File pidFile) { + assert pidFile != null : "The file from which to read the process ID (pid) cannot be null!"; + + if (pidFile.isFile()) { + BufferedReader fileReader = null; + try { + fileReader = new BufferedReader(new FileReader(pidFile)); + return Integer.parseInt(fileReader.readLine()); + } + catch (IOException ignore) { + } + catch (NumberFormatException ignore) { + } + finally { + IOUtils.close(fileReader); + } + } + + return INVALID_PID; + } + + protected ServerState serverStatus(final File serverPidFile, final int oldPid, final String memberName) { + final int newPid = readPid(serverPidFile); + + if (newPid != INVALID_PID && newPid != oldPid) { + ServerState serverState = new ServerLauncher.Builder().setPid(newPid).setDisableDefaultServer(true) + .build().status(); + + if (ObjectUtils.equals(serverState.getMemberName(), memberName)) { + return serverState; + } + } + + return new ServerState(new ServerLauncher.Builder().build(), Status.NOT_RESPONDING); + } + + protected ServerState serverStatus(final String workingDirectory, final String memberName) { + ServerState serverState = new ServerLauncher.Builder().setWorkingDirectory(workingDirectory) + .setDisableDefaultServer(true).build().status(); + + if (ObjectUtils.equals(serverState.getMemberName(), memberName)) { + return serverState; + } + + return new ServerState(new ServerLauncher.Builder().build(), Status.NOT_RESPONDING); + } + + @Deprecated + protected String getClasspath(final String userClasspath) { + String classpath = getSystemClasspath(); + + if (!StringUtils.isBlank(userClasspath)) { + classpath += (File.pathSeparator + userClasspath); + } + + return classpath; + } + + protected String getLocatorClasspath(final boolean includeSystemClasspath, final String userClasspath) { + return toClasspath(includeSystemClasspath, new String[] { CORE_DEPENDENCIES_JAR_PATHNAME }, userClasspath); + } + + protected String getServerClasspath(final boolean includeSystemClasspath, + final boolean includeSpringDependencies, + final String userClasspath) + { + List jarFilePathnames = new ArrayList<>(); + + jarFilePathnames.add(CORE_DEPENDENCIES_JAR_PATHNAME); + + if (includeSpringDependencies) { + jarFilePathnames.addAll(getSpringJars()); + } + + return toClasspath(includeSystemClasspath, jarFilePathnames.toArray(new String[jarFilePathnames.size()]), + userClasspath); + } + + protected List getSpringJars() { + File gemfireHomeDirectory= new File(GEMFIRE_HOME); + + assertArgument(gemfireHomeDirectory.isDirectory(), + "Please set the GEMFIRE environment variable to the product installation directory."); + + List springJarFilePathnames = new ArrayList<>(SPRING_JAR_NAME_PREFIXES.size()); + + for (File jarFile : new File(gemfireHomeDirectory, "lib").listFiles(new FileFilter() { + @Override public boolean accept(final File pathname) { + return (pathname.getName().startsWith("spring-") && pathname.getAbsolutePath().endsWith(".jar")); + } + })) { + String jarFileName = jarFile.getName(); + String jarFileNamePrefix = jarFileName.substring(0, jarFileName.lastIndexOf("-")); + + if (SPRING_JAR_NAME_PREFIXES.contains(jarFileNamePrefix.toLowerCase().trim())) { + springJarFilePathnames.add(jarFile.getAbsolutePath()); + } + } + + assertState(springJarFilePathnames.size() == SPRING_JAR_NAME_PREFIXES.size(), + "Unable to find all the necessary Spring JAR files in $GEMFIRE/lib (%1$s): expected (%2$s); but was (%3$s)", + gemfireHomeDirectory, SPRING_JAR_NAME_PREFIXES, springJarFilePathnames); + + return springJarFilePathnames; + } + + protected String getSystemClasspath() { + return System.getProperty("java.class.path"); + } + + String toClasspath(final boolean includeSystemClasspath, String[] jarFilePathnames, String... userClasspaths) { + // gemfire jar must absolutely be the first JAR file on the CLASSPATH!!! + String classpath = getGemFireJarPath(); + + userClasspaths = (userClasspaths != null ? userClasspaths : StringUtils.EMPTY_STRING_ARRAY); + + // Then, include user-specified classes on CLASSPATH to enable the user to override GemFire JAR dependencies + // with application-specific versions; this logic/block corresponds to classes/jar-files specified with the + // --classpath option to the 'start locator' and 'start server commands'; also this will override any + // System CLASSPATH environment variable setting, which is consistent with the Java platform behavior... + for (String userClasspath : userClasspaths) { + if (!StringUtils.isBlank(userClasspath)) { + classpath += (classpath.isEmpty() ? StringUtils.EMPTY_STRING : File.pathSeparator); + classpath += userClasspath; + } + } + + // Now, include any System-specified CLASSPATH environment variable setting... + if (includeSystemClasspath) { + classpath += File.pathSeparator; + classpath += getSystemClasspath(); + } + + jarFilePathnames = (jarFilePathnames != null ? jarFilePathnames : StringUtils.EMPTY_STRING_ARRAY); + + // And finally, include all GemFire dependencies on the CLASSPATH... + for (String jarFilePathname : jarFilePathnames) { + if (!StringUtils.isBlank(jarFilePathname)) { + classpath += (classpath.isEmpty() ? StringUtils.EMPTY_STRING : File.pathSeparator); + classpath += jarFilePathname; + } + } + + return classpath; + } + + protected String getGemFireJarPath() { + String classpath = getSystemClasspath(); + String gemfireJarPath = GEMFIRE_JAR_PATHNAME; + + for (String classpathElement : classpath.split(File.pathSeparator)) { + // MUST CHANGE THIS TO REGEX SINCE VERSION CHANGES IN JAR NAME + if (classpathElement.endsWith("gemfire-core-8.2.0.0-SNAPSHOT.jar")) { + gemfireJarPath = classpathElement; + break; + } + } + + return gemfireJarPath; + } + + protected String getJavaPath() { + return new File(new File(JAVA_HOME, "bin"), "java").getPath(); + } + + @Deprecated + protected String getToolsJarPath() throws AttachAPINotFoundException { + String toolsJarPathname = null; + + if (!SystemUtils.isMacOSX()) { + toolsJarPathname = IOUtils.appendToPath(JAVA_HOME, "lib", "tools.jar"); + + if (!IOUtils.isExistingPathname(toolsJarPathname)) { + // perhaps the java.home System property refers to the JRE ($JAVA_HOME/jre)... + String JDK_HOME = new File(JAVA_HOME).getParentFile().getPath(); + toolsJarPathname = IOUtils.appendToPath(JDK_HOME, "lib", "tools.jar"); + } + + try { + IOUtils.verifyPathnameExists(toolsJarPathname); + } + catch (IOException e) { + throw new AttachAPINotFoundException(getAttachAPINotFoundMessage()); + } + } + + return toolsJarPathname; + } + + // TODO refactor the following method into a common base class or utility class + protected String getLocalHost() { + try { + return SocketCreator.getLocalHost().getCanonicalHostName(); + } + catch (UnknownHostException ignore) { + return LOCALHOST; + } + } + + protected String getAttachAPINotFoundMessage() { + return CliStrings.format(CliStrings.ATTACH_API_IN_0_NOT_FOUND_ERROR_MESSAGE, + ((SystemUtils.isMacOSX() && SystemUtils.isAppleJVM()) ? "classes.jar" : "tools.jar")); + } + + protected String getLocatorId(final String host, final Integer port) { + final String locatorHost = (host != null ? host : getLocalHost()); + final String locatorPort = StringUtils.valueOf(port, String.valueOf(DistributionLocator.DEFAULT_LOCATOR_PORT)); + return locatorHost.concat("[").concat(locatorPort).concat("]"); + } + + /** + * Gets a proxy to the DistributedSystemMXBean from the GemFire Manager's MBeanServer, or null if unable to find + * the DistributedSystemMXBean. + *

+ * @return a proxy to the DistributedSystemMXBean from the GemFire Manager's MBeanServer, or null if unable to find + * the DistributedSystemMXBean. + */ + protected DistributedSystemMXBean getDistributedSystemMXBean() throws IOException, MalformedObjectNameException { + assertState(isConnectedAndReady(), "Gfsh must be connected in order to get proxy to a GemFire DistributedSystemMXBean."); + return getGfsh().getOperationInvoker().getDistributedSystemMXBean(); + } + + /** + * Gets a proxy to the MemberMXBean for the GemFire member specified by member name or ID from the GemFire Manager's + * MBeanServer. + *

+ * @param member a String indicating the GemFire member's name or ID. + * @return a proxy to the MemberMXBean having the specified GemFire member's name or ID from the GemFire Manager's + * MBeanServer, or null if no GemFire member could be found with the specified member name or ID. + * @see #getMemberMXBean(String, String) + */ + protected MemberMXBean getMemberMXBean(final String member) throws IOException { + return getMemberMXBean(null, member); + } + + protected MemberMXBean getMemberMXBean(final String serviceName, final String member) throws IOException { + assertState(isConnectedAndReady(), "Gfsh must be connected in order to get proxy to a GemFire Member MBean."); + + MemberMXBean memberBean = null; + + try { + String objectNamePattern = ManagementConstants.OBJECTNAME__PREFIX; + + objectNamePattern += (StringUtils.isBlank(serviceName) ? StringUtils.EMPTY_STRING + : "service=" + serviceName + StringUtils.COMMA_DELIMITER); + objectNamePattern += "type=Member,*"; + + // NOTE throws a MalformedObjectNameException, however, this should not happen since the ObjectName is constructed + // here in a conforming pattern + final ObjectName objectName = ObjectName.getInstance(objectNamePattern); + + final QueryExp query = Query.or( + Query.eq(Query.attr("Name"), Query.value(member)), + Query.eq(Query.attr("Id"), Query.value(member)) + ); + + final Set memberObjectNames = getGfsh().getOperationInvoker().queryNames(objectName, query); + + if (!memberObjectNames.isEmpty()) { + memberBean = getGfsh().getOperationInvoker().getMBeanProxy(memberObjectNames.iterator().next(), MemberMXBean.class); + } + } + catch (MalformedObjectNameException e) { + getGfsh().logSevere(e.getMessage(), e); + } + + return memberBean; + } + + protected String getServerId(final String host, final Integer port) { + String serverHost = (host != null ? host : getLocalHost()); + String serverPort = StringUtils.valueOf(port, String.valueOf(CacheServer.DEFAULT_PORT)); + return serverHost.concat("[").concat(serverPort).concat("]"); + } + + protected boolean isStartingNotRespondingOrNull(final ServiceState serviceState) { + return (serviceState == null || isStartingOrNotResponding(serviceState.getStatus())); + } + + protected boolean isStartingOrNotResponding(final Status processStatus) { + return (Status.NOT_RESPONDING.equals(processStatus) || Status.STARTING.equals(processStatus)); + } + + protected boolean isVmWithProcessIdRunning(final Integer pid) { + // note: this will use JNA if available or Attach if available or return false if neither is available + return ProcessUtils.isProcessAlive(pid); + } + + @CliCommand(value = CliStrings.START_SERVER, help = CliStrings.START_SERVER__HELP) + @CliMetaData(shellOnly = true, relatedTopic = { CliStrings.TOPIC_GEMFIRE_SERVER, CliStrings.TOPIC_GEMFIRE_LIFECYCLE }) + public Result startServer(@CliOption(key = CliStrings.START_SERVER__ASSIGN_BUCKETS, + unspecifiedDefaultValue = "false", + specifiedDefaultValue = "true", + help = CliStrings.START_SERVER__ASSIGN_BUCKETS__HELP) + final Boolean assignBuckets, + @CliOption(key = CliStrings.START_SERVER__BIND_ADDRESS, + unspecifiedDefaultValue = CliMetaData.ANNOTATION_NULL_VALUE, + help = CliStrings.START_SERVER__BIND_ADDRESS__HELP) + final String bindAddress, + @CliOption(key = CliStrings.START_SERVER__CACHE_XML_FILE, + optionContext = ConverterHint.FILE_PATHSTRING, + unspecifiedDefaultValue = CliMetaData.ANNOTATION_NULL_VALUE, + help = CliStrings.START_SERVER__CACHE_XML_FILE__HELP) + String cacheXmlPathname, + @CliOption(key = CliStrings.START_SERVER__CLASSPATH, + /*optionContext = ConverterHint.FILE_PATHSTRING, // there's an issue with TAB here*/ + unspecifiedDefaultValue = CliMetaData.ANNOTATION_NULL_VALUE, + help = CliStrings.START_SERVER__CLASSPATH__HELP) + final String classpath, + @CliOption(key = CliStrings.START_SERVER__CRITICAL__HEAP__PERCENTAGE, + unspecifiedDefaultValue = CliMetaData.ANNOTATION_NULL_VALUE, + help = CliStrings.START_SERVER__CRITICAL__HEAP__HELP) + final Float criticalHeapPercentage, + @CliOption(key = CliStrings.START_SERVER__CRITICAL_OFF_HEAP_PERCENTAGE, + unspecifiedDefaultValue = CliMetaData.ANNOTATION_NULL_VALUE, + help = CliStrings.START_SERVER__CRITICAL_OFF_HEAP__HELP) + final Float criticalOffHeapPercentage, + @CliOption(key = CliStrings.START_SERVER__DIR, + optionContext = ConverterHint.DIR_PATHSTRING, + unspecifiedDefaultValue = CliMetaData.ANNOTATION_NULL_VALUE, + help = CliStrings.START_SERVER__DIR__HELP) + String workingDirectory, + @CliOption(key = CliStrings.START_SERVER__DISABLE_DEFAULT_SERVER, + unspecifiedDefaultValue = "false", + specifiedDefaultValue = "true", + help = CliStrings.START_SERVER__DISABLE_DEFAULT_SERVER__HELP) + final Boolean disableDefaultServer, + @CliOption(key = CliStrings.START_SERVER__DISABLE_EXIT_WHEN_OUT_OF_MEMORY, + unspecifiedDefaultValue = "false", + specifiedDefaultValue = "true", + help = CliStrings.START_SERVER__DISABLE_EXIT_WHEN_OUT_OF_MEMORY_HELP) + final Boolean disableExitWhenOutOfMemory, + @CliOption(key = CliStrings.START_SERVER__ENABLE_TIME_STATISTICS, + unspecifiedDefaultValue = CliMetaData.ANNOTATION_NULL_VALUE, + specifiedDefaultValue = "true", + help = CliStrings.START_SERVER__ENABLE_TIME_STATISTICS__HELP) + final Boolean enableTimeStatistics, + @CliOption(key = CliStrings.START_SERVER__EVICTION__HEAP__PERCENTAGE, + unspecifiedDefaultValue = CliMetaData.ANNOTATION_NULL_VALUE, + help = CliStrings.START_SERVER__EVICTION__HEAP__PERCENTAGE__HELP) + final Float evictionHeapPercentage, + @CliOption(key = CliStrings.START_SERVER__EVICTION_OFF_HEAP_PERCENTAGE, + unspecifiedDefaultValue = CliMetaData.ANNOTATION_NULL_VALUE, + help = CliStrings.START_SERVER__EVICTION_OFF_HEAP_PERCENTAGE__HELP) + final Float evictionOffHeapPercentage, + @CliOption(key = CliStrings.START_SERVER__FORCE, + unspecifiedDefaultValue = "false", + specifiedDefaultValue = "true", + help = CliStrings.START_SERVER__FORCE__HELP) + final Boolean force, + @CliOption(key = CliStrings.START_SERVER__GROUP, + optionContext = ConverterHint.MEMBERGROUP, + unspecifiedDefaultValue = CliMetaData.ANNOTATION_NULL_VALUE, + help = CliStrings.START_SERVER__GROUP__HELP) + final String group, + @CliOption(key = CliStrings.START_SERVER__HOSTNAME__FOR__CLIENTS, + unspecifiedDefaultValue = CliMetaData.ANNOTATION_NULL_VALUE, + help = CliStrings.START_SERVER__HOSTNAME__FOR__CLIENTS__HELP) + final String hostNameForClients, + @CliOption(key = CliStrings.START_SERVER__INCLUDE_SYSTEM_CLASSPATH, + specifiedDefaultValue = "true", + unspecifiedDefaultValue = "false", + help = CliStrings.START_SERVER__INCLUDE_SYSTEM_CLASSPATH__HELP) + final Boolean includeSystemClasspath, + @CliOption(key = CliStrings.START_SERVER__INITIAL_HEAP, + unspecifiedDefaultValue = CliMetaData.ANNOTATION_NULL_VALUE, + help = CliStrings.START_SERVER__INITIAL_HEAP__HELP) + final String initialHeap, + @CliOption(key = CliStrings.START_SERVER__J, + optionContext = ConverterHint.STRING_LIST, + unspecifiedDefaultValue = CliMetaData.ANNOTATION_NULL_VALUE, + help = CliStrings.START_SERVER__J__HELP) + @CliMetaData(valueSeparator = ",") + final String[] jvmArgsOpts, + @CliOption(key = CliStrings.START_SERVER__LOCATORS, + optionContext = ConverterHint.LOCATOR_DISCOVERY_CONFIG, + unspecifiedDefaultValue = CliMetaData.ANNOTATION_NULL_VALUE, + help = CliStrings.START_SERVER__LOCATORS__HELP) + final String locators, + @CliOption(key = CliStrings.START_SERVER__LOCATOR_WAIT_TIME, + unspecifiedDefaultValue = CliMetaData.ANNOTATION_NULL_VALUE, + help = CliStrings.START_SERVER__LOCATOR_WAIT_TIME_HELP) + final Integer locatorWaitTime, + @CliOption(key = CliStrings.START_SERVER__LOCK_MEMORY, + unspecifiedDefaultValue = CliMetaData.ANNOTATION_NULL_VALUE, + specifiedDefaultValue = "true", + help = CliStrings.START_SERVER__LOCK_MEMORY__HELP) + final Boolean lockMemory, + @CliOption(key = CliStrings.START_SERVER__LOG_LEVEL, + optionContext = ConverterHint.LOG_LEVEL, + unspecifiedDefaultValue = CliMetaData.ANNOTATION_NULL_VALUE, + help = CliStrings.START_SERVER__LOG_LEVEL__HELP) + final String logLevel, + @CliOption(key = CliStrings.START_SERVER__MAX__CONNECTIONS, + unspecifiedDefaultValue = CliMetaData.ANNOTATION_NULL_VALUE, + help = CliStrings.START_SERVER__MAX__CONNECTIONS__HELP) + final Integer maxConnections, + @CliOption(key = CliStrings.START_SERVER__MAXHEAP, + unspecifiedDefaultValue = CliMetaData.ANNOTATION_NULL_VALUE, + help = CliStrings.START_SERVER__MAXHEAP__HELP) + final String maxHeap, + @CliOption(key = CliStrings.START_SERVER__MAX__MESSAGE__COUNT, + unspecifiedDefaultValue = CliMetaData.ANNOTATION_NULL_VALUE, + help = CliStrings.START_SERVER__MAX__MESSAGE__COUNT__HELP) + final Integer maxMessageCount, + @CliOption(key = CliStrings.START_SERVER__MAX__THREADS, + unspecifiedDefaultValue = CliMetaData.ANNOTATION_NULL_VALUE, + help = CliStrings.START_SERVER__MAX__THREADS__HELP) + final Integer maxThreads, + @CliOption(key = CliStrings.START_SERVER__MCAST_ADDRESS, + unspecifiedDefaultValue = CliMetaData.ANNOTATION_NULL_VALUE, + help = CliStrings.START_SERVER__MCAST_ADDRESS__HELP) + final String mcastBindAddress, + @CliOption(key = CliStrings.START_SERVER__MCAST_PORT, + unspecifiedDefaultValue = CliMetaData.ANNOTATION_NULL_VALUE, + help = CliStrings.START_SERVER__MCAST_PORT__HELP) + final Integer mcastPort, + @CliOption(key = CliStrings.START_SERVER__MEMCACHED_PORT, + unspecifiedDefaultValue = CliMetaData.ANNOTATION_NULL_VALUE, + help = CliStrings.START_SERVER__MEMCACHED_PORT__HELP) + final Integer memcachedPort, + @CliOption(key = CliStrings.START_SERVER__MEMCACHED_PROTOCOL, + unspecifiedDefaultValue = CliMetaData.ANNOTATION_NULL_VALUE, + help = CliStrings.START_SERVER__MEMCACHED_PROTOCOL__HELP) + final String memcachedProtocol, + @CliOption(key = CliStrings.START_SERVER__MEMCACHED_BIND_ADDRESS, + unspecifiedDefaultValue = CliMetaData.ANNOTATION_NULL_VALUE, + help = CliStrings.START_SERVER__MEMCACHED_BIND_ADDRESS__HELP) + final String memcachedBindAddress, + @CliOption(key = CliStrings.START_SERVER__REDIS_PORT, + unspecifiedDefaultValue = CliMetaData.ANNOTATION_NULL_VALUE, + help = CliStrings.START_SERVER__REDIS_PORT__HELP) + final Integer redisPort, + @CliOption(key = CliStrings.START_SERVER__REDIS_BIND_ADDRESS, + unspecifiedDefaultValue = CliMetaData.ANNOTATION_NULL_VALUE, + help = CliStrings.START_SERVER__REDIS_BIND_ADDRESS__HELP) + final String redisBindAddress, + @CliOption(key = CliStrings.START_SERVER__REDIS_PASSWORD, + unspecifiedDefaultValue = CliMetaData.ANNOTATION_NULL_VALUE, + help = CliStrings.START_SERVER__REDIS_PASSWORD__HELP) + final String redisPassword, + @CliOption(key = CliStrings.START_SERVER__MESSAGE__TIME__TO__LIVE, + unspecifiedDefaultValue = CliMetaData.ANNOTATION_NULL_VALUE, + help = CliStrings.START_SERVER__MESSAGE__TIME__TO__LIVE__HELP) + final Integer messageTimeToLive, + @CliOption(key = CliStrings.START_SERVER__NAME, + mandatory = true, + unspecifiedDefaultValue = CliMetaData.ANNOTATION_NULL_VALUE, + help = CliStrings.START_SERVER__NAME__HELP) + final String memberName, + @CliOption(key = CliStrings.START_SERVER__OFF_HEAP_MEMORY_SIZE, + unspecifiedDefaultValue = CliMetaData.ANNOTATION_NULL_VALUE, + help = CliStrings.START_SERVER__OFF_HEAP_MEMORY_SIZE__HELP) + final String offHeapMemorySize, + @CliOption(key = CliStrings.START_SERVER__PROPERTIES, + optionContext = ConverterHint.FILE_PATHSTRING, + unspecifiedDefaultValue = CliMetaData.ANNOTATION_NULL_VALUE, + help = CliStrings.START_SERVER__PROPERTIES__HELP) + String gemfirePropertiesPathname, + @CliOption(key = CliStrings.START_SERVER__REBALANCE, + unspecifiedDefaultValue = "false", + specifiedDefaultValue = "true", + help = CliStrings.START_SERVER__REBALANCE__HELP) + final Boolean rebalance, + @CliOption(key = CliStrings.START_SERVER__SECURITY_PROPERTIES, + optionContext = ConverterHint.FILE_PATHSTRING, + unspecifiedDefaultValue = CliMetaData.ANNOTATION_NULL_VALUE, + help = CliStrings.START_SERVER__SECURITY_PROPERTIES__HELP) + String gemfireSecurityPropertiesPathname, + @CliOption(key = CliStrings.START_SERVER__SERVER_BIND_ADDRESS, + unspecifiedDefaultValue = CacheServer.DEFAULT_BIND_ADDRESS, + help = CliStrings.START_SERVER__SERVER_BIND_ADDRESS__HELP) + final String serverBindAddress, + @CliOption(key = CliStrings.START_SERVER__SERVER_PORT, + unspecifiedDefaultValue = ("" + CacheServer.DEFAULT_PORT), + help = CliStrings.START_SERVER__SERVER_PORT__HELP) + final Integer serverPort, + @CliOption(key = CliStrings.START_SERVER__SOCKET__BUFFER__SIZE, + unspecifiedDefaultValue = CliMetaData.ANNOTATION_NULL_VALUE, + help = CliStrings.START_SERVER__SOCKET__BUFFER__SIZE__HELP) + final Integer socketBufferSize, + @CliOption(key = CliStrings.START_SERVER__SPRING_XML_LOCATION, + unspecifiedDefaultValue = CliMetaData.ANNOTATION_NULL_VALUE, + help = CliStrings.START_SERVER__SPRING_XML_LOCATION_HELP) + final String springXmlLocation, + @CliOption(key = CliStrings.START_SERVER__STATISTIC_ARCHIVE_FILE, + unspecifiedDefaultValue = CliMetaData.ANNOTATION_NULL_VALUE, + help = CliStrings.START_SERVER__STATISTIC_ARCHIVE_FILE__HELP) + final String statisticsArchivePathname, + @CliOption(key = CliStrings.START_SERVER__USE_CLUSTER_CONFIGURATION, + unspecifiedDefaultValue = "true", + specifiedDefaultValue = "true", + help = CliStrings.START_SERVER__USE_CLUSTER_CONFIGURATION__HELP) + final Boolean requestSharedConfiguration) + // NOTICE: keep the parameters in alphabetical order based on their CliStrings.START_SERVER_* text + { + + try { + if (workingDirectory == null) { + // attempt to use or make sub-directory using memberName... + File serverWorkingDirectory = new File(memberName); + + if (!(serverWorkingDirectory.exists() || serverWorkingDirectory.mkdir())) { + throw new IllegalStateException(CliStrings.format(CliStrings.START_SERVER__MSG__COULD_NOT_CREATE_DIRECTORY_0_VERIFY_PERMISSIONS, + serverWorkingDirectory.getAbsolutePath())); + } + + workingDirectory = IOUtils.tryGetCanonicalPathElseGetAbsolutePath(serverWorkingDirectory); + } + + cacheXmlPathname = CliUtil.resolvePathname(cacheXmlPathname); + + if (!StringUtils.isBlank(cacheXmlPathname) && !IOUtils.isExistingPathname(cacheXmlPathname)) { + return ResultBuilder.createUserErrorResult(CliStrings.format(CliStrings.CACHE_XML_NOT_FOUND_MESSAGE, cacheXmlPathname)); + } + + gemfirePropertiesPathname = CliUtil.resolvePathname(gemfirePropertiesPathname); + + if (!StringUtils.isBlank(gemfirePropertiesPathname) && !IOUtils.isExistingPathname(gemfirePropertiesPathname)) { + return ResultBuilder.createUserErrorResult(CliStrings.format(CliStrings.GEMFIRE_0_PROPERTIES_1_NOT_FOUND_MESSAGE, + StringUtils.EMPTY_STRING, gemfirePropertiesPathname)); + } + + gemfireSecurityPropertiesPathname = CliUtil.resolvePathname(gemfireSecurityPropertiesPathname); + + if (!StringUtils.isBlank(gemfireSecurityPropertiesPathname) && !IOUtils.isExistingPathname(gemfireSecurityPropertiesPathname)) { + return ResultBuilder.createUserErrorResult(CliStrings.format(CliStrings.GEMFIRE_0_PROPERTIES_1_NOT_FOUND_MESSAGE, + "Security ", gemfireSecurityPropertiesPathname)); + } + + File serverPidFile = new File(workingDirectory, ProcessType.SERVER.getPidFileName()); + + final int oldPid = readPid(serverPidFile); + + Properties gemfireProperties = new Properties(); + + gemfireProperties.setProperty(DistributionConfig.BIND_ADDRESS_NAME, StringUtils.valueOf(bindAddress, StringUtils.EMPTY_STRING)); + gemfireProperties.setProperty(DistributionConfig.CACHE_XML_FILE_NAME, StringUtils.valueOf(cacheXmlPathname, StringUtils.EMPTY_STRING)); + gemfireProperties.setProperty(DistributionConfig.ENABLE_TIME_STATISTICS_NAME, StringUtils.valueOf(enableTimeStatistics, StringUtils.EMPTY_STRING)); + gemfireProperties.setProperty(DistributionConfig.GROUPS_NAME, StringUtils.valueOf(group, StringUtils.EMPTY_STRING)); + gemfireProperties.setProperty(DistributionConfig.LOCATORS_NAME, StringUtils.valueOf(locators, StringUtils.EMPTY_STRING)); + gemfireProperties.setProperty(DistributionConfig.LOCATOR_WAIT_TIME_NAME, StringUtils.valueOf(locatorWaitTime, StringUtils.EMPTY_STRING)); + gemfireProperties.setProperty(DistributionConfig.LOG_LEVEL_NAME, StringUtils.valueOf(logLevel, StringUtils.EMPTY_STRING)); + gemfireProperties.setProperty(DistributionConfig.MCAST_ADDRESS_NAME, StringUtils.valueOf(mcastBindAddress, StringUtils.EMPTY_STRING)); + gemfireProperties.setProperty(DistributionConfig.MCAST_PORT_NAME, StringUtils.valueOf(mcastPort, StringUtils.EMPTY_STRING)); + gemfireProperties.setProperty(DistributionConfig.MEMCACHED_PORT_NAME, StringUtils.valueOf(memcachedPort, StringUtils.EMPTY_STRING)); + gemfireProperties.setProperty(DistributionConfig.MEMCACHED_PROTOCOL_NAME, StringUtils.valueOf(memcachedProtocol, StringUtils.EMPTY_STRING)); + gemfireProperties.setProperty(DistributionConfig.MEMCACHED_BIND_ADDRESS_NAME, StringUtils.valueOf(memcachedBindAddress, StringUtils.EMPTY_STRING)); + gemfireProperties.setProperty(DistributionConfig.REDIS_PORT_NAME, StringUtils.valueOf(redisPort, StringUtils.EMPTY_STRING)); + gemfireProperties.setProperty(DistributionConfig.REDIS_BIND_ADDRESS_NAME, StringUtils.valueOf(redisBindAddress, StringUtils.EMPTY_STRING)); + gemfireProperties.setProperty(DistributionConfig.REDIS_PASSWORD_NAME, StringUtils.valueOf(redisPassword, StringUtils.EMPTY_STRING)); + gemfireProperties.setProperty(DistributionConfig.STATISTIC_ARCHIVE_FILE_NAME, StringUtils.valueOf(statisticsArchivePathname, StringUtils.EMPTY_STRING)); + gemfireProperties.setProperty(DistributionConfig.USE_CLUSTER_CONFIGURATION_NAME, StringUtils.valueOf(requestSharedConfiguration, Boolean.TRUE.toString())); + gemfireProperties.setProperty(DistributionConfig.LOCK_MEMORY_NAME, StringUtils.valueOf(lockMemory, StringUtils.EMPTY_STRING)); + gemfireProperties.setProperty(DistributionConfig.OFF_HEAP_MEMORY_SIZE_NAME, StringUtils.valueOf(offHeapMemorySize, StringUtils.EMPTY_STRING)); + + // read the OSProcess enable redirect system property here -- TODO: replace with new GFSH argument + final boolean redirectOutput = Boolean.getBoolean(OSProcess.ENABLE_OUTPUT_REDIRECTION_PROPERTY); + + ServerLauncher serverLauncher = new ServerLauncher.Builder() + .setAssignBuckets(assignBuckets) + .setDisableDefaultServer(disableDefaultServer) + .setForce(force) + .setMemberName(memberName) + .setRebalance(rebalance) + .setRedirectOutput(redirectOutput) + .setServerBindAddress(serverBindAddress) + .setServerPort(serverPort) + .setSpringXmlLocation(springXmlLocation) + .setWorkingDirectory(workingDirectory) + .setCriticalHeapPercentage(criticalHeapPercentage) + .setEvictionHeapPercentage(evictionHeapPercentage) + .setCriticalOffHeapPercentage(criticalOffHeapPercentage) + .setEvictionOffHeapPercentage(evictionOffHeapPercentage) + .setMaxConnections(maxConnections) + .setMaxMessageCount(maxMessageCount) + .setMaxThreads(maxThreads) + .setMessageTimeToLive(messageTimeToLive) + .setSocketBufferSize(socketBufferSize) + .setHostNameForClients(hostNameForClients) + .build(); + + String[] serverCommandLine = createStartServerCommandLine(serverLauncher, gemfirePropertiesPathname, + gemfireSecurityPropertiesPathname, gemfireProperties, classpath, includeSystemClasspath, jvmArgsOpts, + disableExitWhenOutOfMemory, initialHeap, maxHeap); + + if (getGfsh().getDebug()) { + getGfsh().logInfo(StringUtils.concat(serverCommandLine, " "), null); + } + + Process serverProcess = new ProcessBuilder(serverCommandLine) + .directory(new File(serverLauncher.getWorkingDirectory())) + .start(); + + serverProcess.getInputStream().close(); + serverProcess.getOutputStream().close(); + + // fix TRAC bug #51967 by using NON_BLOCKING on Windows + final ReadingMode readingMode = SystemUtils.isWindows() ? ReadingMode.NON_BLOCKING : ReadingMode.BLOCKING; + + final StringBuffer message = new StringBuffer(); // need thread-safe StringBuffer + InputListener inputListener = new InputListener() { + @Override + public void notifyInputLine(String line) { + message.append(line); + if (readingMode == ReadingMode.BLOCKING) { + message.append(StringUtils.LINE_SEPARATOR); + } + } + }; + + ProcessStreamReader stderrReader = new ProcessStreamReader.Builder(serverProcess) + .inputStream(serverProcess.getErrorStream()) + .inputListener(inputListener) + .readingMode(readingMode) + .continueReadingMillis(2*1000) + .build() + .start(); + + ServerState serverState; + + String previousServerStatusMessage = null; + + LauncherSignalListener serverSignalListener = new LauncherSignalListener(); + + final boolean registeredServerSignalListener = getGfsh().getSignalHandler().registerListener(serverSignalListener); + + try { + getGfsh().logInfo(String.format(CliStrings.START_SERVER__RUN_MESSAGE, + IOUtils.tryGetCanonicalPathElseGetAbsolutePath(new File(serverLauncher.getWorkingDirectory()))), null); + + do { + try { + final int exitValue = serverProcess.exitValue(); + + stderrReader.join(PROCESS_STREAM_READER_JOIN_TIMEOUT_MILLIS); // was Long.MAX_VALUE + + //Gfsh.println(message); + + return ResultBuilder.createShellClientErrorResult(String.format( + CliStrings.START_SERVER__PROCESS_TERMINATED_ABNORMALLY_ERROR_MESSAGE, + exitValue, serverLauncher.getWorkingDirectory(), message.toString())); + } + catch (IllegalThreadStateException ignore) { + // the IllegalThreadStateException is expected; it means the Server's process has not terminated, + // and should not + Gfsh.print("."); + + synchronized (this) { + TimeUnit.MILLISECONDS.timedWait(this, 500); + } + + serverState = (ProcessUtils.isAttachApiAvailable() ? serverStatus(serverPidFile, oldPid, memberName) + : serverStatus(workingDirectory, memberName)); + + String currentServerStatusMessage = serverState.getStatusMessage(); + + if (isStartingOrNotResponding(serverState.getStatus()) + && !(StringUtils.isBlank(currentServerStatusMessage) + || currentServerStatusMessage.equalsIgnoreCase(previousServerStatusMessage))) + { + Gfsh.println(); + Gfsh.println(currentServerStatusMessage); + previousServerStatusMessage = currentServerStatusMessage; + } + } + } + while (!(registeredServerSignalListener && serverSignalListener.isSignaled()) + && isStartingOrNotResponding(serverState.getStatus())); + } + finally { + stderrReader.stopAsync(PROCESS_STREAM_READER_ASYNC_STOP_TIMEOUT_MILLIS); // stop will close ErrorStream + getGfsh().getSignalHandler().unregisterListener(serverSignalListener); + } + + Gfsh.println(); + + final boolean asyncStart = isStartingNotRespondingOrNull(serverState); + + if (asyncStart) { // async start + Gfsh.print(String.format(CliStrings.ASYNC_PROCESS_LAUNCH_MESSAGE, SERVER_TERM_NAME)); + return ResultBuilder.createInfoResult(""); + } + else { + return ResultBuilder.createInfoResult(serverState.toString()); + } + } + catch (IllegalArgumentException e) { + String message = e.getMessage(); + if (message != null && message.matches(LocalizedStrings.Launcher_Builder_UNKNOWN_HOST_ERROR_MESSAGE.toLocalizedString(".+"))) { + message = CliStrings.format(CliStrings.LAUNCHERLIFECYCLECOMMANDS__MSG__FAILED_TO_START_0_REASON_1, SERVER_TERM_NAME, message); + } + return ResultBuilder.createUserErrorResult(message); + } + catch (IllegalStateException e) { + return ResultBuilder.createUserErrorResult(e.getMessage()); + } + catch (ClusterConfigurationNotAvailableException e) { + return ResultBuilder.createShellClientErrorResult(e.getMessage()); + } + catch (VirtualMachineError e) { + SystemFailure.initiateFailure(e); + throw e; + } + catch (Throwable t) { + SystemFailure.checkFailure(); + return ResultBuilder.createShellClientErrorResult(String.format(CliStrings.START_SERVER__GENERAL_ERROR_MESSAGE, + toString(t, getGfsh().getDebug()))); + } + } + + protected String[] createStartServerCommandLine(final ServerLauncher launcher, + final String gemfirePropertiesPathname, + final String gemfireSecurityPropertiesPathname, + final Properties gemfireProperties, + final String userClasspath, + final Boolean includeSystemClasspath, + final String[] jvmArgsOpts, + final Boolean disableExitWhenOutOfMemory, + final String initialHeap, + final String maxHeap) + throws MalformedObjectNameException + { + List commandLine = new ArrayList<>(); + + commandLine.add(getJavaPath()); + commandLine.add("-server"); + commandLine.add("-classpath"); + commandLine.add(getServerClasspath(Boolean.TRUE.equals(includeSystemClasspath), + launcher.isSpringXmlLocationSpecified(), userClasspath)); + + addCurrentLocators(commandLine, gemfireProperties); + addGemFirePropertyFile(commandLine, gemfirePropertiesPathname); + addGemFireSecurityPropertyFile(commandLine, gemfireSecurityPropertiesPathname); + addGemFireSystemProperties(commandLine, gemfireProperties); + addJvmArgumentsAndOptions(commandLine, jvmArgsOpts); + + // NOTE asserting not equal to true rather than equal to false handles the null case and ensures the user + // explicitly specified the command-line option in order to disable JVM memory checks. + if (!Boolean.TRUE.equals(disableExitWhenOutOfMemory)) { + addJvmOptionsForOutOfMemoryErrors(commandLine); + } + + addInitialHeap(commandLine, initialHeap); + addMaxHeap(commandLine, maxHeap); + + commandLine.add("-D".concat(AbstractLauncher.SIGNAL_HANDLER_REGISTRATION_SYSTEM_PROPERTY.concat("=true"))); + commandLine.add("-Djava.awt.headless=true"); + commandLine.add("-Dsun.rmi.dgc.server.gcInterval".concat("=").concat(Long.toString(Long.MAX_VALUE-1))); + + commandLine.add(ServerLauncher.class.getName()); + commandLine.add(ServerLauncher.Command.START.getName()); + + if (!StringUtils.isBlank(launcher.getMemberName())) { + commandLine.add(launcher.getMemberName()); + } + + if (launcher.isAssignBuckets()) { + commandLine.add("--assign-buckets"); + } + + if (launcher.isDebugging() || isDebugging()) { + commandLine.add("--debug"); + } + + if (launcher.isDisableDefaultServer()) { + commandLine.add("--disable-default-server"); + } + + if (launcher.isForcing()) { + commandLine.add("--force"); + } + + if (launcher.isRebalancing()) { + commandLine.add("--rebalance"); + } + + if (launcher.isRedirectingOutput()) { + commandLine.add("--redirect-output"); + } + + if (launcher.getServerBindAddress() != null) { + commandLine.add("--server-bind-address=" + launcher.getServerBindAddress().getCanonicalHostName()); + } + + if (launcher.getServerPort() != null) { + commandLine.add("--server-port=" + launcher.getServerPort()); + } + + if (launcher.isSpringXmlLocationSpecified()) { + commandLine.add("--spring-xml-location=".concat(launcher.getSpringXmlLocation())); + } + + if (launcher.getCriticalHeapPercentage() != null) { + commandLine.add("--" + CliStrings.START_SERVER__CRITICAL__HEAP__PERCENTAGE + "=" + launcher.getCriticalHeapPercentage()); + } + + if (launcher.getEvictionHeapPercentage() != null) { + commandLine.add("--" + CliStrings.START_SERVER__EVICTION__HEAP__PERCENTAGE + "=" + launcher.getEvictionHeapPercentage()); + } + + if (launcher.getCriticalOffHeapPercentage() != null) { + commandLine.add("--" + CliStrings.START_SERVER__CRITICAL_OFF_HEAP_PERCENTAGE + "=" + launcher.getCriticalOffHeapPercentage()); + } + + if (launcher.getEvictionOffHeapPercentage() != null) { + commandLine.add("--" + CliStrings.START_SERVER__EVICTION_OFF_HEAP_PERCENTAGE + "=" + launcher.getEvictionOffHeapPercentage()); + } + + if (launcher.getMaxConnections() != null) { + commandLine.add("--" + CliStrings.START_SERVER__MAX__CONNECTIONS + "=" + launcher.getMaxConnections()); + } + + if (launcher.getMaxMessageCount() != null) { + commandLine.add("--" + CliStrings.START_SERVER__MAX__MESSAGE__COUNT + "=" + launcher.getMaxMessageCount()); + } + + if (launcher.getMaxThreads() != null) { + commandLine.add("--" + CliStrings.START_SERVER__MAX__THREADS + "=" + launcher.getMaxThreads()); + } + + if (launcher.getHostNameForClients() != null) { + commandLine.add("--" + CliStrings.START_SERVER__HOSTNAME__FOR__CLIENTS + "=" + launcher.getHostNameForClients()); + } + + return commandLine.toArray(new String[commandLine.size()]); + } + + private String getCurrentLocators() throws MalformedObjectNameException { + String delimitedLocators = ""; + try { + if (isConnectedAndReady()) { + final DistributedSystemMXBean dsMBeanProxy = getDistributedSystemMXBean(); + if (dsMBeanProxy != null) { + final String[] locators = dsMBeanProxy.listLocators(); + if (locators != null && locators.length > 0) { + final StringBuilder sb = new StringBuilder(); + for (int i = 0; i < locators.length; i++) { + if (i > 0) { + sb.append(","); + } + sb.append(locators[i]); + } + delimitedLocators = sb.toString(); + } + } + } + } catch (IOException e) { // thrown by getDistributedSystemMXBean + // leave delimitedLocators = "" + getGfsh().logWarning("DistributedSystemMXBean is unavailable\n", e); + } + return delimitedLocators; + } + + @CliCommand(value = CliStrings.STATUS_SERVER, help = CliStrings.STATUS_SERVER__HELP) + @CliMetaData(shellOnly = true, relatedTopic = { CliStrings.TOPIC_GEMFIRE_SERVER, CliStrings.TOPIC_GEMFIRE_LIFECYCLE }) + public Result statusServer(@CliOption(key = CliStrings.STATUS_SERVER__MEMBER, + optionContext = ConverterHint.MEMBERIDNAME, + unspecifiedDefaultValue = CliMetaData.ANNOTATION_NULL_VALUE, + help = CliStrings.STATUS_SERVER__MEMBER__HELP) + final String member, + @CliOption(key = CliStrings.STATUS_SERVER__PID, + unspecifiedDefaultValue = CliMetaData.ANNOTATION_NULL_VALUE, + help = CliStrings.STATUS_SERVER__PID__HELP) + final Integer pid, + @CliOption(key = CliStrings.STATUS_SERVER__DIR, + optionContext = ConverterHint.DIR_PATHSTRING, + unspecifiedDefaultValue = CliMetaData.ANNOTATION_NULL_VALUE, + help = CliStrings.STATUS_SERVER__DIR__HELP) + final String workingDirectory) + { + try { + if (!StringUtils.isBlank(member)) { + if (isConnectedAndReady()) { + final MemberMXBean serverProxy = getMemberMXBean(member); + + if (serverProxy != null) { + return ResultBuilder.createInfoResult(ServerState.fromJson(serverProxy.status()).toString()); + } + else { + return ResultBuilder.createUserErrorResult(CliStrings.format( + CliStrings.STATUS_SERVER__NO_SERVER_FOUND_FOR_MEMBER_ERROR_MESSAGE, member)); + } + } + else { + return ResultBuilder.createUserErrorResult(CliStrings.format( + CliStrings.STATUS_SERVICE__GFSH_NOT_CONNECTED_ERROR_MESSAGE, "Cache Server")); + } + } + else { + final ServerLauncher serverLauncher = new ServerLauncher.Builder() + .setCommand(ServerLauncher.Command.STATUS) + .setDebug(isDebugging()) + // NOTE since we do not know whether the "CacheServer" was enabled or not on the GemFire server when it was started, + // set the disableDefaultServer property in the ServerLauncher.Builder to default status to the MemberMBean + // TODO fix this hack! (how, the 'start server' loop needs it) + .setDisableDefaultServer(true) + .setMemberName(member) + .setPid(pid) + .setWorkingDirectory(workingDirectory) + .build(); + + final ServerState status = serverLauncher.status(); + + return ResultBuilder.createInfoResult(status.toString()); + } + } + catch (IllegalArgumentException e) { + return ResultBuilder.createUserErrorResult(e.getMessage()); + } + catch (IllegalStateException e) { + return ResultBuilder.createUserErrorResult(e.getMessage()); + } + catch (VirtualMachineError e) { + SystemFailure.initiateFailure(e); + throw e; + } + catch (Throwable t) { + SystemFailure.checkFailure(); + return ResultBuilder.createShellClientErrorResult(String.format(CliStrings.STATUS_SERVER__GENERAL_ERROR_MESSAGE, + toString(t, getGfsh().getDebug()))); + } + } + + @CliCommand(value = CliStrings.STOP_SERVER, help = CliStrings.STOP_SERVER__HELP) + @CliMetaData(shellOnly = true, relatedTopic = { CliStrings.TOPIC_GEMFIRE_SERVER, CliStrings.TOPIC_GEMFIRE_LIFECYCLE }) + public Result stopServer(@CliOption(key = CliStrings.STOP_SERVER__MEMBER, + optionContext = ConverterHint.MEMBERIDNAME, + unspecifiedDefaultValue = CliMetaData.ANNOTATION_NULL_VALUE, + help = CliStrings.STOP_SERVER__MEMBER__HELP) + final String member, + @CliOption(key = CliStrings.STOP_SERVER__PID, + unspecifiedDefaultValue = CliMetaData.ANNOTATION_NULL_VALUE, + help = CliStrings.STOP_SERVER__PID__HELP) + final Integer pid, + @CliOption(key = CliStrings.STOP_SERVER__DIR, + optionContext = ConverterHint.DIR_PATHSTRING, + unspecifiedDefaultValue = CliMetaData.ANNOTATION_NULL_VALUE, + help = CliStrings.STOP_SERVER__DIR__HELP) + final String workingDirectory) + { + ServerState serverState; + + try { + if (!StringUtils.isBlank(member)) { + if (isConnectedAndReady()) { + final MemberMXBean serverProxy = getMemberMXBean(member); + + if (serverProxy != null) { + if (!serverProxy.isServer()) { + throw new IllegalStateException(CliStrings.format(CliStrings.STOP_SERVER__MEMBER_IS_NOT_SERVER_ERROR_MESSAGE, member)); + } + + serverState = ServerState.fromJson(serverProxy.status()); + serverProxy.shutDownMember(); + } + else { + return ResultBuilder.createUserErrorResult(CliStrings.format( + CliStrings.STOP_SERVER__NO_SERVER_FOUND_FOR_MEMBER_ERROR_MESSAGE, member)); + } + } + else { + return ResultBuilder.createUserErrorResult(CliStrings.format( + CliStrings.STOP_SERVICE__GFSH_NOT_CONNECTED_ERROR_MESSAGE, "Cache Server")); + } + } + else { + final ServerLauncher serverLauncher = new ServerLauncher.Builder() + .setCommand(ServerLauncher.Command.STOP) + .setDebug(isDebugging()) + .setMemberName(member) + .setPid(pid) + .setWorkingDirectory(workingDirectory) + .build(); + + serverState = serverLauncher.status(); + serverLauncher.stop(); + } + + if (Status.ONLINE.equals(serverState.getStatus())) { + getGfsh().logInfo(String.format(CliStrings.STOP_SERVER__STOPPING_SERVER_MESSAGE, + serverState.getWorkingDirectory(), serverState.getServiceLocation(), serverState.getMemberName(), + serverState.getPid(), serverState.getLogFile()), null); + + StopWatch stopWatch = new StopWatch(true); + while (isVmWithProcessIdRunning(serverState.getPid())) { + Gfsh.print("."); + if (stopWatch.elapsedTimeMillis() > WAITING_FOR_STOP_TO_MAKE_PID_GO_AWAY_TIMEOUT_MILLIS) { + break; + } + synchronized (this) { + TimeUnit.MILLISECONDS.timedWait(this, 500); + } + } + + return ResultBuilder.createInfoResult(StringUtils.EMPTY_STRING); + } + else { + return ResultBuilder.createUserErrorResult(serverState.toString()); + } + } + catch (IllegalArgumentException e) { + return ResultBuilder.createUserErrorResult(e.getMessage()); + } + catch (IllegalStateException e) { + return ResultBuilder.createUserErrorResult(e.getMessage()); + } + catch (VirtualMachineError e) { + SystemFailure.initiateFailure(e); + throw e; + } + catch (Throwable t) { + SystemFailure.checkFailure(); + return ResultBuilder.createShellClientErrorResult(String.format(CliStrings.STOP_SERVER__GENERAL_ERROR_MESSAGE, + toString(t, getGfsh().getDebug()))); + } finally { + Gfsh.redirectInternalJavaLoggers(); + } + } + + //@CliCommand(value=CliStrings.START_MANAGER, help=CliStrings.START_MANAGER__HELP) + //@CliMetaData(shellOnly=true, relatedTopic = {CliStrings.TOPIC_GEMFIRE_MANAGER, CliStrings.TOPIC_GEMFIRE_JMX, CliStrings.TOPIC_GEMFIRE_LIFECYCLE}) + public Result startManager(@CliOption(key=CliStrings.START_MANAGER__MEMBERNAME, + unspecifiedDefaultValue=CliMetaData.ANNOTATION_NULL_VALUE, + help=CliStrings.START_MANAGER__MEMBERNAME__HELP) + String memberName, + @CliOption(key=CliStrings.START_MANAGER__DIR, + unspecifiedDefaultValue=CliMetaData.ANNOTATION_NULL_VALUE, + help=CliStrings.START_MANAGER__DIR__HELP) + String dir, + @CliOption(key=CliStrings.START_MANAGER__PORT, + unspecifiedDefaultValue="1099", + help=CliStrings.START_MANAGER__PORT__HELP) + int cacheServerPort, + @CliOption(key=CliStrings.START_MANAGER__BIND_ADDRESS, + unspecifiedDefaultValue="localhost", + help=CliStrings.START_MANAGER__BIND_ADDRESS__HELP) + String cacheServerHost, + @CliOption(key=CliStrings.START_MANAGER__CLASSPATH, + unspecifiedDefaultValue=CliMetaData.ANNOTATION_NULL_VALUE, + help=CliStrings.START_MANAGER__CLASSPATH__HELP) + String classpath, + @CliOption(key=CliStrings.START_MANAGER__MAXHEAP, + unspecifiedDefaultValue=CliMetaData.ANNOTATION_NULL_VALUE, + help=CliStrings.START_MANAGER__MAXHEAP__HELP) + String maxHeap, + @CliOption(key=CliStrings.START_MANAGER__INITIALHEAP, + unspecifiedDefaultValue=CliMetaData.ANNOTATION_NULL_VALUE, + help=CliStrings.START_MANAGER__INITIALHEAP__HELP) + String initialHeap, + @CliOption(key=CliStrings.START_MANAGER__J, + unspecifiedDefaultValue=CliMetaData.ANNOTATION_NULL_VALUE, + help=CliStrings.START_MANAGER__J__HELP) + Map systepProps, + @CliOption(key=CliStrings.START_MANAGER__GEMFIREPROPS, + unspecifiedDefaultValue=CliMetaData.ANNOTATION_NULL_VALUE, + help=CliStrings.START_MANAGER__GEMFIREPROPS__HELP) + Map gemfireProps) + { + return ResultBuilder.createInfoResult("Not-implemented"); + } + + @CliCommand(value = CliStrings.START_JCONSOLE, help = CliStrings.START_JCONSOLE__HELP) + @CliMetaData(shellOnly = true, relatedTopic = { CliStrings.TOPIC_GEMFIRE_MANAGER, CliStrings.TOPIC_GEMFIRE_JMX, CliStrings.TOPIC_GEMFIRE_M_AND_M }) + public Result startJConsole(@CliOption(key = CliStrings.START_JCONSOLE__INTERVAL, + unspecifiedDefaultValue = "4", + help = CliStrings.START_JCONSOLE__INTERVAL__HELP) + final int interval, + @CliOption(key = CliStrings.START_JCONSOLE__NOTILE, + specifiedDefaultValue = "true", + unspecifiedDefaultValue = "false", + help = CliStrings.START_JCONSOLE__NOTILE__HELP) + final boolean notile, + @CliOption(key=CliStrings.START_JCONSOLE__PLUGINPATH, + unspecifiedDefaultValue=CliMetaData.ANNOTATION_NULL_VALUE, + help=CliStrings.START_JCONSOLE__PLUGINPATH__HELP) + final String pluginpath, + @CliOption(key = CliStrings.START_JCONSOLE__VERSION, + specifiedDefaultValue = "true", + unspecifiedDefaultValue = "false", + help = CliStrings.START_JCONSOLE__VERSION__HELP) + final boolean version, + @CliOption(key = CliStrings.START_JCONSOLE__J, + optionContext = ConverterHint.STRING_LIST, + unspecifiedDefaultValue = CliMetaData.ANNOTATION_NULL_VALUE, + help = CliStrings.START_JCONSOLE__J__HELP) + @CliMetaData(valueSeparator = ",") + final List jvmArgs) + { + try { + String[] jconsoleCommandLine = createJConsoleCommandLine(null, interval, notile, pluginpath, version, jvmArgs); + + if (isDebugging()) { + getGfsh().printAsInfo(String.format("JConsole command-line ($1%s)", Arrays.toString(jconsoleCommandLine))); + } + + Process jconsoleProcess = Runtime.getRuntime().exec(jconsoleCommandLine); + + StringBuilder message = new StringBuilder(); + + if (version) { + jconsoleProcess.waitFor(); + + BufferedReader reader = new BufferedReader(new InputStreamReader(jconsoleProcess.getErrorStream())); + + for (String line = reader.readLine(); line != null; line = reader.readLine()) { + message.append(line); + message.append(StringUtils.LINE_SEPARATOR); + } + + IOUtils.close(reader); + } + else { + getGfsh().printAsInfo(CliStrings.START_JCONSOLE__RUN); + + String jconsoleProcessOutput = waitAndCaptureProcessStandardErrorStream(jconsoleProcess); + + if (!StringUtils.isBlank(jconsoleProcessOutput)) { + message.append(StringUtils.LINE_SEPARATOR); + message.append(jconsoleProcessOutput); + } + } + + return ResultBuilder.createInfoResult(message.toString()); + } + catch (GemFireException e) { + return ResultBuilder.createShellClientErrorResult(e.getMessage()); + } + catch (IllegalArgumentException e) { + return ResultBuilder.createShellClientErrorResult(e.getMessage()); + } + catch (IllegalStateException e) { + return ResultBuilder.createShellClientErrorResult(e.getMessage()); + } + catch (IOException e) { + return ResultBuilder.createShellClientErrorResult(CliStrings.START_JCONSOLE__IO_EXCEPTION_MESSAGE); + } + catch (VirtualMachineError e) { + SystemFailure.initiateFailure(e); + throw e; + } + catch (Throwable t) { + SystemFailure.checkFailure(); + return ResultBuilder.createShellClientErrorResult(String.format(CliStrings.START_JCONSOLE__CATCH_ALL_ERROR_MESSAGE, + toString(t, false))); + } + } + + protected String[] createJConsoleCommandLine(final String member, + final int interval, + final boolean notile, + final String pluginpath, + final boolean version, + final List jvmArgs) + { + List commandLine = new ArrayList<>(); + + commandLine.add(getJConsolePathname()); + + if (version) { + commandLine.add("-version"); + } + else { + commandLine.add("-interval=" + interval); + + if (notile) { + commandLine.add("-notile"); + } + + if (!StringUtils.isBlank(pluginpath)) { + commandLine.add("-pluginpath " + pluginpath); + } + + if (jvmArgs != null) { + for (final String arg : jvmArgs) { + commandLine.add("-J" + arg); + } + } + + String jmxServiceUrl = getJmxServiceUrlAsString(member); + + if (!StringUtils.isBlank(jmxServiceUrl)) { + commandLine.add(jmxServiceUrl); + } + } + + return commandLine.toArray(new String[commandLine.size()]); + } + + protected String getJConsolePathname() { + return getJdkToolPathname("jconsole" + getExecutableSuffix(), + new JConsoleNotFoundException(CliStrings.START_JCONSOLE__NOT_FOUND_ERROR_MESSAGE)); + } + + protected String getJdkToolPathname(final String jdkToolExecutableName, final GemFireException throwable) { + assertNotNull(jdkToolExecutableName, "The JDK tool executable name cannot be null!"); + assertNotNull(throwable, "The GemFireException cannot be null!"); + + Stack pathnames = new Stack<>(); + + pathnames.push(jdkToolExecutableName); + pathnames.push(IOUtils.appendToPath(System.getenv("JAVA_HOME"), "..", "bin", jdkToolExecutableName)); + pathnames.push(IOUtils.appendToPath(System.getenv("JAVA_HOME"), "bin", jdkToolExecutableName)); + pathnames.push(IOUtils.appendToPath(JAVA_HOME, "..", "bin", jdkToolExecutableName)); + pathnames.push(IOUtils.appendToPath(JAVA_HOME, "bin", jdkToolExecutableName)); + + return getJdkToolPathname(pathnames, throwable); + } + + protected String getJdkToolPathname(final Stack pathnames, final GemFireException throwable) { + assertNotNull(pathnames, "The JDK tool executable pathnames cannot be null!"); + assertNotNull(throwable, "The GemFireException cannot be null!"); + + try { + // assume 'java.home' JVM System property refers to the JDK installation directory. note, however, that the + // 'java.home' JVM System property usually refers to the JRE used to launch this application + return IOUtils.verifyPathnameExists(pathnames.pop()); + } + catch (EmptyStackException ignore) { + throw throwable; + } + catch (FileNotFoundException ignore) { + return getJdkToolPathname(pathnames, throwable); + } + } + + protected static String getExecutableSuffix() { + return SystemUtils.isWindows() ? ".exe" : StringUtils.EMPTY_STRING; + } + + protected String getJmxServiceUrlAsString(final String member) { + if (!StringUtils.isBlank(member)) { + ConnectionEndpointConverter converter = new ConnectionEndpointConverter(); + + try { + ConnectionEndpoint connectionEndpoint = converter.convertFromText(member, ConnectionEndpoint.class, null); + + return StringUtils.concat("service:jmx:rmi://", connectionEndpoint.getHost(), ":", connectionEndpoint.getPort(), + "/jndi/rmi://", connectionEndpoint.getHost(), ":", connectionEndpoint.getPort(), "/jmxrmi"); + } + catch (Exception e) { + throw new IllegalArgumentException(CliStrings.START_JCONSOLE__CONNECT_BY_MEMBER_NAME_ID_ERROR_MESSAGE); + } + } + else { + if (isConnectedAndReady() && (getGfsh().getOperationInvoker() instanceof JmxOperationInvoker)) { + JmxOperationInvoker jmxOperationInvoker = (JmxOperationInvoker) getGfsh().getOperationInvoker(); + + return ObjectUtils.toString(jmxOperationInvoker.getJmxServiceUrl()); + } + } + + return null; + } + + @CliCommand(value = CliStrings.START_JVISUALVM, help = CliStrings.START_JVISUALVM__HELP) + @CliMetaData(shellOnly = true, relatedTopic = { CliStrings.TOPIC_GEMFIRE_MANAGER, CliStrings.TOPIC_GEMFIRE_JMX, CliStrings.TOPIC_GEMFIRE_M_AND_M }) + public Result startJVisualVM(@CliOption(key = CliStrings.START_JCONSOLE__J, + optionContext = ConverterHint.STRING_LIST, + unspecifiedDefaultValue = CliMetaData.ANNOTATION_NULL_VALUE, + help = CliStrings.START_JCONSOLE__J__HELP) + @CliMetaData(valueSeparator = ",") + final List jvmArgs) + { + try { + String[] jvisualvmCommandLine = createJVisualVMCommandLine(jvmArgs); + + if (isDebugging()) { + getGfsh().printAsInfo(String.format("JVisualVM command-line (%1$s)", Arrays.toString(jvisualvmCommandLine))); + } + + Process jvisualvmProcess = Runtime.getRuntime().exec(jvisualvmCommandLine); + + getGfsh().printAsInfo(CliStrings.START_JVISUALVM__RUN); + + String jvisualvmProcessOutput = waitAndCaptureProcessStandardErrorStream(jvisualvmProcess); + + InfoResultData infoResultData = ResultBuilder.createInfoResultData(); + + if (!StringUtils.isBlank(jvisualvmProcessOutput)) { + infoResultData.addLine(StringUtils.LINE_SEPARATOR); + infoResultData.addLine(jvisualvmProcessOutput); + } + + return ResultBuilder.buildResult(infoResultData); + } + catch (GemFireException e) { + return ResultBuilder.createShellClientErrorResult(e.getMessage()); + } + catch (IllegalArgumentException e) { + return ResultBuilder.createShellClientErrorResult(e.getMessage()); + } + catch (IllegalStateException e) { + return ResultBuilder.createShellClientErrorResult(e.getMessage()); + } + catch (VirtualMachineError e) { + SystemFailure.initiateFailure(e); + throw e; + } + catch (Throwable t) { + SystemFailure.checkFailure(); + return ResultBuilder.createShellClientErrorResult(String.format(CliStrings.START_JVISUALVM__ERROR_MESSAGE, + toString(t, false))); + } + } + + protected String[] createJVisualVMCommandLine(final List jvmArgs) { + List commandLine = new ArrayList<>(); + + commandLine.add(getJVisualVMPathname()); + + if (jvmArgs != null) { + for (final String arg : jvmArgs) { + commandLine.add("-J" + arg); + } + } + + return commandLine.toArray(new String[commandLine.size()]); + } + + protected String getJVisualVMPathname() { + if (SystemUtils.isMacOSX()) { + try { + return IOUtils.verifyPathnameExists("/System/Library/Java/Support/VisualVM.bundle/Contents/Home/bin/jvisualvm"); + } + catch (FileNotFoundException e) { + throw new VisualVmNotFoundException(CliStrings.START_JVISUALVM__NOT_FOUND_ERROR_MESSAGE, e); + } + } + else { // Linux, Solaris, Windows, etc... + try { + return getJdkToolPathname("jvisualvm" + getExecutableSuffix(), + new VisualVmNotFoundException(CliStrings.START_JVISUALVM__NOT_FOUND_ERROR_MESSAGE)); + } + catch (VisualVmNotFoundException e) { + if (!SystemUtils.isJavaVersionAtLeast("1.6")) { + throw new VisualVmNotFoundException(CliStrings.START_JVISUALVM__EXPECTED_JDK_VERSION_ERROR_MESSAGE); + } + + throw e; + } + } + } + + @CliCommand(value = CliStrings.START_PULSE, help = CliStrings.START_PULSE__HELP) + @CliMetaData(shellOnly = true, relatedTopic = { CliStrings.TOPIC_GEMFIRE_MANAGER, CliStrings.TOPIC_GEMFIRE_JMX, CliStrings.TOPIC_GEMFIRE_M_AND_M }) + // TODO change url parameter type to URL when I figure out the Converter logic in Gfsh + public Result startPulse(@CliOption(key = CliStrings.START_PULSE__URL, + unspecifiedDefaultValue = "http://localhost:7070/pulse", + help = CliStrings.START_PULSE__URL__HELP) + final String url) + { + try { + if (!StringUtils.isBlank(url)) { + browse(URI.create(url)); + return ResultBuilder.createInfoResult(CliStrings.START_PULSE__RUN); + } + else { + if (isConnectedAndReady()) { + OperationInvoker operationInvoker = getGfsh().getOperationInvoker(); + + ObjectName managerObjectName = (ObjectName) operationInvoker.getAttribute( + ManagementConstants.OBJECTNAME__DISTRIBUTEDSYSTEM_MXBEAN, "ManagerObjectName"); + + String pulseURL = (String) operationInvoker.getAttribute(managerObjectName.toString(), "PulseURL"); + + if (!StringUtils.isBlank(pulseURL)) { + browse(URI.create(pulseURL)); + return ResultBuilder.createInfoResult(CliStrings.START_PULSE__RUN + " with URL: " + pulseURL); + } + else { + String pulseMessage = (String) operationInvoker.getAttribute(managerObjectName.toString(), "StatusMessage"); + return (!StringUtils.isBlank(pulseMessage) ? ResultBuilder.createGemFireErrorResult(pulseMessage) + : ResultBuilder.createGemFireErrorResult(CliStrings.START_PULSE__URL__NOTFOUND)); + } + } + else { + return ResultBuilder.createUserErrorResult(CliStrings.format(CliStrings.GFSH_MUST_BE_CONNECTED_FOR_LAUNCHING_0, + "GemFire Pulse")); + } + } + } + catch (GemFireException e) { + return ResultBuilder.createShellClientErrorResult(e.getMessage()); + } + catch (Exception e) { + return ResultBuilder.createShellClientErrorResult(e.getMessage()); + } + catch (VirtualMachineError e) { + SystemFailure.initiateFailure(e); + throw e; + } + catch (Throwable t) { + SystemFailure.checkFailure(); + return ResultBuilder.createShellClientErrorResult(String.format(CliStrings.START_PULSE__ERROR, + toString(t, false))); + } + } + + private void browse(URI uri) throws IOException { + assertState(Desktop.isDesktopSupported(), String.format(CliStrings.DESKSTOP_APP_RUN_ERROR_MESSAGE, + System.getProperty("os.name"))); + Desktop.getDesktop().browse(uri); + } + + @Deprecated + protected File readIntoTempFile(final String classpathResourceLocation) throws IOException { + String resourceName = classpathResourceLocation.substring(classpathResourceLocation.lastIndexOf(File.separator) + 1); + File resourceFile = new File(System.getProperty("java.io.tmpdir"), resourceName); + + if (!resourceFile.exists() && resourceFile.createNewFile()) { + BufferedReader resourceReader = new BufferedReader(new InputStreamReader( + ClassLoader.getSystemClassLoader().getResourceAsStream(classpathResourceLocation))); + + BufferedWriter resourceFileWriter = new BufferedWriter(new FileWriter(resourceFile, false)); + + try { + for (String line = resourceReader.readLine(); line != null; line = resourceReader.readLine()) { + resourceFileWriter.write(line); + resourceFileWriter.write(StringUtils.LINE_SEPARATOR); + } + + resourceFileWriter.flush(); + } + finally { + IOUtils.close(resourceReader); + IOUtils.close(resourceFileWriter); + } + } + + resourceFile.deleteOnExit(); + + return resourceFile; + } + + @CliCommand(value=CliStrings.START_VSD, help=CliStrings.START_VSD__HELP) + @CliMetaData(shellOnly=true, relatedTopic = { CliStrings.TOPIC_GEMFIRE_M_AND_M, CliStrings.TOPIC_GEMFIRE_STATISTICS }) + public Result startVsd(@CliOption(key=CliStrings.START_VSD__FILE, help=CliStrings.START_VSD__FILE__HELP) + final String[] statisticsArchiveFilePathnames) + { + try { + String gemfireHome = System.getenv("GEMFIRE"); + + assertState(!StringUtils.isBlank(gemfireHome), CliStrings.GEMFIRE_HOME_NOT_FOUND_ERROR_MESSAGE); + + assertState(IOUtils.isExistingPathname(getPathToVsd()), String.format(CliStrings.START_VSD__NOT_FOUND_ERROR_MESSAGE, + gemfireHome)); + + String[] vsdCommandLine = createdVsdCommandLine(statisticsArchiveFilePathnames); + + if (isDebugging()) { + getGfsh().printAsInfo(String.format("GemFire VSD command-line (%1$s)", Arrays.toString(vsdCommandLine))); + } + + Process vsdProcess = Runtime.getRuntime().exec(vsdCommandLine); + + getGfsh().printAsInfo(CliStrings.START_VSD__RUN); + + String vsdProcessOutput = waitAndCaptureProcessStandardErrorStream(vsdProcess); + + InfoResultData infoResultData = ResultBuilder.createInfoResultData(); + + if (!StringUtils.isBlank(vsdProcessOutput)) { + infoResultData.addLine(StringUtils.LINE_SEPARATOR); + infoResultData.addLine(vsdProcessOutput); + } + + return ResultBuilder.buildResult(infoResultData); + } + catch (GemFireException e) { + return ResultBuilder.createShellClientErrorResult(e.getMessage()); + } + catch (FileNotFoundException e) { + return ResultBuilder.createShellClientErrorResult(e.getMessage()); + } + catch (IllegalArgumentException e) { + return ResultBuilder.createShellClientErrorResult(e.getMessage()); + } + catch (IllegalStateException e) { + return ResultBuilder.createShellClientErrorResult(e.getMessage()); + } + catch (VirtualMachineError e) { + SystemFailure.initiateFailure(e); + throw e; + } + catch (Throwable t) { + SystemFailure.checkFailure(); + return ResultBuilder.createShellClientErrorResult(String.format(CliStrings.START_VSD__ERROR_MESSAGE, + toString(t, false))); + } + } + + protected String[] createdVsdCommandLine(final String[] statisticsArchiveFilePathnames) throws FileNotFoundException { + List commandLine = new ArrayList<>(); + + commandLine.add(getPathToVsd()); + commandLine.addAll(processStatisticsArchiveFiles(statisticsArchiveFilePathnames)); + + return commandLine.toArray(new String[commandLine.size()]); + } + + protected String getPathToVsd() { + String vsdPathname = IOUtils.appendToPath(System.getenv("GEMFIRE"), "tools", "vsd", "bin", "vsd"); + + if (SystemUtils.isWindows()) { + vsdPathname += ".bat"; + } + + return vsdPathname; + } + + protected Set processStatisticsArchiveFiles(final String[] statisticsArchiveFilePathnames) throws FileNotFoundException { + Set statisticsArchiveFiles = new TreeSet<>(); + + if (statisticsArchiveFilePathnames != null) { + for (String pathname : statisticsArchiveFilePathnames) { + File path = new File(pathname); + + if (path.exists()) { + if (path.isFile()) { + if (StatisticsArchiveFileFilter.INSTANCE.accept(path)) { + statisticsArchiveFiles.add(pathname); + } + else { + throw new IllegalArgumentException("A Statistics Archive File must end with a .gfs file extension."); + } + } + else { // the File (path) is a directory + processStatisticsArchiveFiles(path, statisticsArchiveFiles); + } + } + else { + throw new FileNotFoundException(String.format( + "The pathname (%1$s) does not exist. Please check the path and try again.", + path.getAbsolutePath())); + } + } + } + + return statisticsArchiveFiles; + } + + @SuppressWarnings("null") + protected void processStatisticsArchiveFiles(final File path, final Set statisticsArchiveFiles) { + if (path != null && path.isDirectory()) { + for (File file : path.listFiles(StatisticsArchiveFileAndDirectoryFilter.INSTANCE)) { + if (file.isDirectory()) { + processStatisticsArchiveFiles(file, statisticsArchiveFiles); + } + else if (StatisticsArchiveFileFilter.INSTANCE.accept(file)) { + statisticsArchiveFiles.add(file.getAbsolutePath()); + } + } + } + } + + // NOTE as of 8.0, this command is no more! + //@CliCommand(value=CliStrings.START_DATABROWSER, help=CliStrings.START_DATABROWSER__HELP) + @CliMetaData(shellOnly=true, relatedTopic={CliStrings.TOPIC_GEMFIRE_M_AND_M}) + public Result startDataBrowser() { + try { + String gemfireHome = System.getenv("GEMFIRE"); + + assertState(!StringUtils.isBlank(gemfireHome), CliStrings.GEMFIRE_HOME_NOT_FOUND_ERROR_MESSAGE); + + if (isConnectedAndReady() && (getGfsh().getOperationInvoker() instanceof JmxOperationInvoker)) { + String dataBrowserPath = getPathToDataBrowser(); + + assertState(IOUtils.isExistingPathname(dataBrowserPath), String.format( + CliStrings.START_DATABROWSER__NOT_FOUND_ERROR_MESSAGE, gemfireHome)); + + JmxOperationInvoker operationInvoker = (JmxOperationInvoker) getGfsh().getOperationInvoker(); + + String dataBrowserCommandLine = String.format("%1$s %2$s %3$d", getPathToDataBrowser(), + operationInvoker.getManagerHost(), operationInvoker.getManagerPort()); + + if (isDebugging()) { + getGfsh().printAsInfo(String.format("GemFire DataBrowser command-line (%1$s)", dataBrowserCommandLine)); + } + + Process dataBrowserProcess = Runtime.getRuntime().exec(dataBrowserCommandLine); + + getGfsh().printAsInfo(CliStrings.START_DATABROWSER__RUN); + + String dataBrowserProcessOutput = waitAndCaptureProcessStandardOutputStream(dataBrowserProcess); + + InfoResultData infoResultData = ResultBuilder.createInfoResultData(); + + if (!StringUtils.isBlank(dataBrowserProcessOutput)) { + infoResultData.addLine(StringUtils.LINE_SEPARATOR); + infoResultData.addLine(dataBrowserProcessOutput); + } + + return ResultBuilder.buildResult(infoResultData); + } + else { + return ResultBuilder.createUserErrorResult(CliStrings.format(CliStrings.GFSH_MUST_BE_CONNECTED_VIA_JMX_FOR_LAUNCHING_0, + "GemFire DataBrowser")); + } + } + catch (IllegalArgumentException e) { + return ResultBuilder.createUserErrorResult(e.getMessage()); + } + catch (IllegalStateException e) { + return ResultBuilder.createUserErrorResult(e.getMessage()); + } + catch (VirtualMachineError e) { + SystemFailure.initiateFailure(e); + throw e; + } + catch (Throwable t) { + SystemFailure.checkFailure(); + return ResultBuilder.createShellClientErrorResult(t.getMessage()); + } + } + + protected String getPathToDataBrowser() { + String dataBrowserPathName = IOUtils.appendToPath(GEMFIRE_HOME, "tools", "DataBrowser", "bin", "databrowser"); + + if (SystemUtils.isWindows()) { + dataBrowserPathName += ".bat"; + } + + return dataBrowserPathName; + } + + protected String waitAndCaptureProcessStandardOutputStream(final Process process) { + return waitAndCaptureProcessStandardOutputStream(process, DEFAULT_PROCESS_OUTPUT_WAIT_TIME_MILLISECONDS); + } + + protected String waitAndCaptureProcessStandardOutputStream(final Process process, final long waitTimeMilliseconds) { + return waitAndCaptureProcessStream(process, process.getInputStream(), waitTimeMilliseconds); + } + + protected String waitAndCaptureProcessStandardErrorStream(final Process process) { + return waitAndCaptureProcessStandardErrorStream(process, DEFAULT_PROCESS_OUTPUT_WAIT_TIME_MILLISECONDS); + } + + protected String waitAndCaptureProcessStandardErrorStream(final Process process, final long waitTimeMilliseconds) { + return waitAndCaptureProcessStream(process, process.getErrorStream(), waitTimeMilliseconds); + } + + private String waitAndCaptureProcessStream(final Process process, final InputStream processInputStream, long waitTimeMilliseconds) { + final StringBuffer buffer = new StringBuffer(); + + InputListener inputListener = new InputListener() { + @Override + public void notifyInputLine(final String line) { + buffer.append(line); + buffer.append(StringUtils.LINE_SEPARATOR); + } + }; + + ProcessStreamReader reader = new ProcessStreamReader.Builder(process) + .inputStream(processInputStream) + .inputListener(inputListener) + .build(); + + try { + reader.start(); + + final long endTime = (System.currentTimeMillis() + waitTimeMilliseconds); + + while (System.currentTimeMillis() < endTime) { + try { + reader.join(waitTimeMilliseconds); + } + catch (InterruptedException ignore) { + } + } + } + finally { + reader.stop(); + } + + return buffer.toString(); + } + + @CliAvailabilityIndicator({CliStrings.START_LOCATOR, CliStrings.STOP_LOCATOR, CliStrings.STATUS_LOCATOR, + CliStrings.START_SERVER, CliStrings.STOP_SERVER, CliStrings.STATUS_SERVER, + CliStrings.START_MANAGER, CliStrings.START_PULSE, CliStrings.START_VSD, CliStrings.START_DATABROWSER}) + public boolean launcherCommandsAvailable() { + return true; + } + + protected static final class LauncherSignalListener implements SignalListener { + + private volatile boolean signaled = false; + + public boolean isSignaled() { + return signaled; + } + + public void handle(final SignalEvent event) { + //System.err.printf("Gfsh LauncherSignalListener Received Signal '%1$s' (%2$d)...%n", + // event.getSignal().getName(), event.getSignal().getNumber()); + this.signaled = true; + } + } + + protected static class StatisticsArchiveFileFilter implements FileFilter { + + protected static final StatisticsArchiveFileFilter INSTANCE = new StatisticsArchiveFileFilter(); + + public boolean accept(final File pathname) { + return (pathname.isFile() && pathname.getAbsolutePath().endsWith(".gfs")); + } + } + + protected static class StatisticsArchiveFileAndDirectoryFilter extends StatisticsArchiveFileFilter { + + protected static final StatisticsArchiveFileAndDirectoryFilter INSTANCE = new StatisticsArchiveFileAndDirectoryFilter(); + + @Override + public boolean accept(final File pathname) { + return (pathname.isDirectory() || super.accept(pathname)); + } + } + +} diff --git a/gemfire-core/src/main/java/com/gemstone/gemfire/pdx/internal/PdxInputStream.java b/gemfire-core/src/main/java/com/gemstone/gemfire/pdx/internal/PdxInputStream.java new file mode 100644 index 000000000000..226c461bb6ac --- /dev/null +++ b/gemfire-core/src/main/java/com/gemstone/gemfire/pdx/internal/PdxInputStream.java @@ -0,0 +1,438 @@ +/* + * 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 com.gemstone.gemfire.pdx.internal; + +import java.io.IOException; +import java.nio.ByteBuffer; +import java.util.Date; + +import com.gemstone.gemfire.DataSerializer; +import com.gemstone.gemfire.InternalGemFireException; +import com.gemstone.gemfire.pdx.PdxSerializationException; +import com.gemstone.gemfire.internal.offheap.Chunk; +import com.gemstone.gemfire.internal.tcp.ByteBufferInputStream; +import com.gemstone.gemfire.internal.tcp.ImmutableByteBufferInputStream; + +/** + * Used by PdxReaderImpl to manage the raw bytes of a PDX. + * + * @since 6.6 + */ +public class PdxInputStream extends ImmutableByteBufferInputStream { + + /** + * Create a pdx input stream by whose contents are the first length + * bytes from the given input stream. + * @param existing the input stream whose content will go into this stream. Note that this existing stream will be read by this class (a copy is not made) so it should not be changed externally. + * @param length the number of bytes to put in this stream + */ + public PdxInputStream(ByteBufferInputStream existing, int length) { + super(existing, length); + } + + /** + * Create a pdx input stream whose contents are the given bytes + * @param bytes the content of this stream. Note that this byte array will be read by this class (a copy is not made) so it should not be changed externally. + */ + public PdxInputStream(byte[] bytes) { + super(bytes); + } + + /** + * Create a pdx input stream whose contents are the given bytes + * @param bb the content of this stream. Note that bb will be read by this class (a copy is not made) so it should not be changed externally. + */ + public PdxInputStream(ByteBuffer bb) { + super(bb); + } + + /** + * Create a pdx input stream by copying another. A somewhat shallow copy is made. + * @param copy the input stream to copy. Note that this copy stream will be read by this class (a copy is not made) so it should not be changed externally. + */ + public PdxInputStream(PdxInputStream copy) { + super(copy); + } + + public PdxInputStream() { + // for serialization + } + + public PdxInputStream(Chunk blob) { + super(blob); + } + + public String readString(int positionForField) { + position(positionForField); + return readString(); + } + + public Object readObject(int positionForField) { + position(positionForField); + return readObject(); + } + + public char[] readCharArray(int positionForField) { + position(positionForField); + return readCharArray(); + } + + public boolean[] readBooleanArray(int positionForField) { + position(positionForField); + return readBooleanArray(); + } + + public byte[] readByteArray(int positionForField) { + position(positionForField); + return readByteArray(); + } + + public short[] readShortArray(int positionForField) { + position(positionForField); + return readShortArray(); + } + + public int[] readIntArray(int positionForField) { + position(positionForField); + return readIntArray(); + } + + public long[] readLongArray(int positionForField) { + position(positionForField); + return readLongArray(); + } + + public float[] readFloatArray(int positionForField) { + position(positionForField); + return readFloatArray(); + } + + public double[] readDoubleArray(int positionForField) { + position(positionForField); + return readDoubleArray(); + } + + public String[] readStringArray(int positionForField) { + position(positionForField); + return readStringArray(); + } + + public Object[] readObjectArray(int positionForField) { + position(positionForField); + return readObjectArray(); + } + + public byte[][] readArrayOfByteArrays(int positionForField) { + position(positionForField); + return readArrayOfByteArrays(); + } + + public Date readDate(int offset) { + long time = readLong(offset); + return convertLongToDate(time); + } + + @Override + public boolean readBoolean(int pos) { + try { + return super.readBoolean(pos); + } catch (IndexOutOfBoundsException e) { + throw new PdxSerializationException("Failed reading a PDX boolean field", e); + } + } + + @Override + public byte readByte(int pos) { + try { + return super.readByte(pos); + } catch (IndexOutOfBoundsException e) { + throw new PdxSerializationException("Failed reading a PDX byte field", e); + } + } + + @Override + public char readChar(int pos) { + try { + return super.readChar(pos); + } catch (IndexOutOfBoundsException e) { + throw new PdxSerializationException("Failed reading a PDX char field", e); + } + + } + + @Override + public double readDouble(int pos) { + try { + return super.readDouble(pos); + } catch (IndexOutOfBoundsException e) { + throw new PdxSerializationException("Failed reading a PDX double field", e); + } + } + + @Override + public float readFloat(int pos) { + try { + return super.readFloat(pos); + } catch (IndexOutOfBoundsException e) { + throw new PdxSerializationException("Failed reading a PDX float field", e); + } + } + + @Override + public int readInt(int pos) { + try { + return super.readInt(pos); + } catch (IndexOutOfBoundsException e) { + throw new PdxSerializationException("Failed reading a PDX int field", e); + } + } + + @Override + public long readLong(int pos) { + try { + return super.readLong(pos); + } catch (IndexOutOfBoundsException e) { + throw new PdxSerializationException("Failed reading a PDX long field", e); + } + } + + @Override + public short readShort(int pos) { + try { + return super.readShort(pos); + } catch (IndexOutOfBoundsException e) { + throw new PdxSerializationException("Failed reading a PDX short field", e); + } + } + + @Override + public void position(int absPos) { + try { + super.position(absPos); + } catch (IllegalArgumentException e) { + throw new PdxSerializationException("Internal error; failed to set position to " + absPos, e); + } + } + + public String readString() { + try { + return DataSerializer.readString(this); + } catch (IOException e) { + throw new PdxSerializationException("Exception deserializing a PDX field", e); + } + } + + public Object readObject() { + try { + return DataSerializer.readObject(this); + } catch (IOException e) { + throw new PdxSerializationException("Exception deserializing a PDX field", e); + } catch (ClassNotFoundException e) { + throw new PdxSerializationException("Class not found deserializing a PDX field", e); + } + } + + public char[] readCharArray() { + try { + return DataSerializer.readCharArray(this); + } catch (IOException e) { + throw new PdxSerializationException("Exception deserializing a PDX field", e); + } + } + + public boolean[] readBooleanArray() { + try { + return DataSerializer.readBooleanArray(this); + } catch (IOException e) { + throw new PdxSerializationException("Exception deserializing a PDX field", e); + } + } + + public byte[] readByteArray() { + try { + return DataSerializer.readByteArray(this); + } catch (IOException e) { + throw new PdxSerializationException("Exception deserializing a PDX field", e); + } + } + + public short[] readShortArray() { + try { + return DataSerializer.readShortArray(this); + } catch (IOException e) { + throw new PdxSerializationException("Exception deserializing a PDX field", e); + } + } + + public int[] readIntArray() { + try { + return DataSerializer.readIntArray(this); + } catch (IOException e) { + throw new PdxSerializationException("Exception deserializing a PDX field", e); + } + } + + public long[] readLongArray() { + try { + return DataSerializer.readLongArray(this); + } catch (IOException e) { + throw new PdxSerializationException("Exception deserializing a PDX field", e); + } + } + + public float[] readFloatArray() { + try { + return DataSerializer.readFloatArray(this); + } catch (IOException e) { + throw new PdxSerializationException("Exception deserializing a PDX field", e); + } + } + + public double[] readDoubleArray() { + try { + return DataSerializer.readDoubleArray(this); + } catch (IOException e) { + throw new PdxSerializationException("Exception deserializing a PDX field", e); + } + } + + public String[] readStringArray() { + try { + return DataSerializer.readStringArray(this); + } catch (IOException e) { + throw new PdxSerializationException("Exception deserializing a PDX field", e); + } + } + + public Object[] readObjectArray() { + try { + return DataSerializer.readObjectArray(this); + } catch (IOException e) { + throw new PdxSerializationException("Exception deserializing a PDX field", e); + } catch (ClassNotFoundException e) { + throw new PdxSerializationException("Class not found while deserializing a PDX field", e); + } + } + + public byte[][] readArrayOfByteArrays() { + try { + return DataSerializer.readArrayOfByteArrays(this); + } catch (IOException e) { + throw new PdxSerializationException("Exception deserializing a PDX field", e); + } catch (ClassNotFoundException ex) { + throw new InternalGemFireException( + "ClassNotFoundException should never be thrown but it was", ex); + } + } + + public Date readDate() { + long time = readLong(); + return convertLongToDate(time); + } + + @Override + public boolean readBoolean() { + try { + return super.readBoolean(); + } catch (IndexOutOfBoundsException e) { + throw new PdxSerializationException("Failed reading a PDX boolean field", e); + } + } + + @Override + public byte readByte() { + try { + return super.readByte(); + } catch (IndexOutOfBoundsException e) { + throw new PdxSerializationException("Failed reading a PDX byte field", e); + } + } + + @Override + public char readChar() { + try { + return super.readChar(); + } catch (IndexOutOfBoundsException e) { + throw new PdxSerializationException("Failed reading a PDX char field", e); + } + } + + @Override + public double readDouble() { + try { + return super.readDouble(); + } catch (IndexOutOfBoundsException e) { + throw new PdxSerializationException("Failed reading a PDX double field", e); + } + } + + @Override + public float readFloat() { + try { + return super.readFloat(); + } catch (IndexOutOfBoundsException e) { + throw new PdxSerializationException("Failed reading a PDX float field", e); + } + } + + @Override + public int readInt() { + try { + return super.readInt(); + } catch (IndexOutOfBoundsException e) { + throw new PdxSerializationException("Failed reading a PDX int field", e); + } + } + + @Override + public long readLong() { + try { + return super.readLong(); + } catch (IndexOutOfBoundsException e) { + throw new PdxSerializationException("Failed reading a PDX long field", e); + } + } + + @Override + public short readShort() { + try { + return super.readShort(); + } catch (IndexOutOfBoundsException e) { + throw new PdxSerializationException("Failed reading a PDX short field", e); + } + } + + @Override + public ByteSource slice(int startOffset, int endOffset) { + try { + return super.slice(startOffset, endOffset); + } catch (IllegalArgumentException e) { + throw new PdxSerializationException("Internal error; failed to slice start=" + startOffset + " end="+ endOffset, e); + } + } + + private Date convertLongToDate(long v) { + Date result = null; + if (v != -1L) { + result = new Date(v); + } + return result; + } +} diff --git a/gemfire-core/src/test/java/com/gemstone/gemfire/cache/management/MXMemoryPoolListenerExample.java b/gemfire-core/src/test/java/com/gemstone/gemfire/cache/management/MXMemoryPoolListenerExample.java new file mode 100644 index 000000000000..0bb9dadcee07 --- /dev/null +++ b/gemfire-core/src/test/java/com/gemstone/gemfire/cache/management/MXMemoryPoolListenerExample.java @@ -0,0 +1,205 @@ +/* + * 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 com.gemstone.gemfire.cache.management; + +import java.lang.management.ManagementFactory; +import java.lang.management.MemoryMXBean; +import java.lang.management.MemoryPoolMXBean; +import java.lang.management.MemoryType; +import java.util.List; +import java.util.Properties; +import java.util.concurrent.TimeUnit; +import java.util.concurrent.atomic.AtomicBoolean; + +import javax.management.Notification; +import javax.management.NotificationEmitter; +import javax.management.NotificationListener; + +import com.gemstone.gemfire.LogWriter; +import com.gemstone.gemfire.admin.DistributedSystemConfig; +import com.gemstone.gemfire.cache.Cache; +import com.gemstone.gemfire.cache.CacheFactory; +import com.gemstone.gemfire.cache.Region; +import com.gemstone.gemfire.cache.RegionFactory; +import com.gemstone.gemfire.cache.Scope; +import com.gemstone.gemfire.distributed.DistributedSystem; +import com.gemstone.gemfire.distributed.internal.DistributionConfig; + +/** + * An test class for exploring the various notification listener behaviors + * + * Run it like this: + * + * java -cp gemfire-core-dependencies.jar:. -Dgemfire.log-file=system.log -Dgemfire.statistic-archive-file=statsArchive.gfs com.gemstone.gemfire.cache.control.MXMemoryPoolListenerExample + * + * @since 6.0 + */ +public class MXMemoryPoolListenerExample implements NotificationListener { + private AtomicBoolean critical = new AtomicBoolean(); + final private LogWriter logger; + + /** + * @param ds + */ + public MXMemoryPoolListenerExample(DistributedSystem ds) { + this.logger = ds.getLogWriter(); + } + + /* (non-Javadoc) + * @see javax.management.NotificationListener#handleNotification(javax.management.Notification, java.lang.Object) + */ + public void handleNotification(Notification arg0, Object arg1) { + this.logger.info("Notification: " + arg0 + + "; o: " + arg1 + + "; m: " + arg0.getMessage()); + this.critical.set(true); + } + + public static void main(String args[]) { + + final MemoryMXBean mbean = ManagementFactory.getMemoryMXBean(); + + + final double threshold; + { + double t = 0.8; + if (args.length > 0) { + try { + t = Integer.parseInt(args[0]) / 100; + } catch (NumberFormatException useDefault) { + } + } + if (t < 0.0 || t > 1.0) { + throw new IllegalArgumentException("Theshold must be >= 0 and <= 100"); + } + threshold = t; + } + + final int percentTenured; + { + int p = 100; + if (args.length > 1) { + try { + p = Integer.parseInt(args[1]); + } catch (NumberFormatException useDefault) { + } + } + if (p > 100 || p < 0) { + throw new IllegalArgumentException("Percent Tenured must be >= 0 and <= 100"); + } + percentTenured = p; + } + + Properties dsProps = new Properties(); + dsProps.setProperty(DistributedSystemConfig.MCAST_PORT_NAME, "0"); // Loner + dsProps.setProperty(DistributedSystemConfig.LOG_LEVEL_NAME, "info"); + dsProps.setProperty(DistributionConfig.STATISTIC_SAMPLE_RATE_NAME, "200"); + dsProps.setProperty(DistributionConfig.ENABLE_TIME_STATISTICS_NAME, "true"); + dsProps.setProperty(DistributionConfig.STATISTIC_SAMPLING_ENABLED_NAME, "true"); + DistributedSystem ds = DistributedSystem.connect(dsProps); + final LogWriter logger = ds.getLogWriter(); + + logger.info("Usage threshold: " + threshold + + "; percent tenured: " + percentTenured + + "; Runtime Maximum memory: " + (Runtime.getRuntime().maxMemory() / (1024*1024)) + "Mb" + + "; Heap Maximum memory: " + (mbean.getHeapMemoryUsage().getMax() / (1024*1024)) + "Mb"); + + MXMemoryPoolListenerExample me = new MXMemoryPoolListenerExample(ds); + + // Register this listener to NotificationEmitter + NotificationEmitter emitter = (NotificationEmitter)mbean; + emitter.addNotificationListener(me, null, null); + List pools = ManagementFactory.getMemoryPoolMXBeans(); + for (MemoryPoolMXBean p : pools) { + if (p.isCollectionUsageThresholdSupported()) { + // p.setCollectionUsageThreshold(0); + logger.info("Pool which supports collection usage threshold: " + p.getName() + "; " + p.getCollectionUsage()); + } + + // On JRockit do not set the usage threshold on the Nursery pool + if (p.getType().equals(MemoryType.HEAP) && p.isUsageThresholdSupported() && + !p.getName().startsWith("Nursery")) { + int byteThreshold = (int) Math.ceil(threshold * p.getUsage().getMax()); + logger.info("Setting threshold " + (byteThreshold/(1024*1024)) + "Mb on: " + p.getName() + "; " + p.getCollectionUsage()); + p.setUsageThreshold(byteThreshold); + } + } + + final Cache c = CacheFactory.create(ds); + new MemoryHog("hog_1", c, me.critical).consumeMemory(percentTenured).printTenuredSize(); + ds.disconnect(); + } + + public static class MemoryHog { + private final String name; + private final Region tenuredData; + private final Cache cache; + private final AtomicBoolean criticalState; + + public MemoryHog(String n, Cache c, AtomicBoolean critical) { + this.name = n; + this.cache = c; + this.tenuredData = new RegionFactory().setScope(Scope.LOCAL).create(this.name); + this.criticalState = critical; + } + + /** + * @param percentTenured + */ + public MemoryHog consumeMemory(final int percentTenured) { + final long maxSecondsToRun = 180; + final LogWriter logger = this.cache.getLogger(); + final long start = System.nanoTime(); + for (int i=100;;i++) { + // Create garbage + byte[] val = new byte[1012]; // 1024 less 4 bytes for obj ref, less 8 bytes for Integer key == 1012 + // Some random usage of the data to prevent optimization + val[percentTenured] = (byte) i; + if (percentTenured > 0 && (i % 100) <= percentTenured) { + // Grow heap + this.tenuredData.put(new Integer(i), val); + } + + if (i % 1000 == 0) { + long runTime = TimeUnit.NANOSECONDS.toSeconds(System.nanoTime() - start); + if (runTime > maxSecondsToRun) { + logger.info(this.name + ": Ending consume loop after " + runTime + "s"); + break; + } + } + + if (this.criticalState.get()) { + logger.info(this.name + ": Clearing tenured data: size=" + (this.tenuredData.size() / 1024) + "Mb"); + this.tenuredData.clear(); + this.criticalState.set(false); + try { + Thread.sleep(250); + } catch (InterruptedException ie) { + } + } + } + return this; + } + + public MemoryHog printTenuredSize() { + this.cache.getLogger().info("Tenured data size: " + this.tenuredData.getName() + + ": " + this.tenuredData.size()); + return this; + } + } + +} diff --git a/gemfire-core/src/test/java/com/gemstone/gemfire/cache/query/internal/index/IndexUseJUnitTest.java b/gemfire-core/src/test/java/com/gemstone/gemfire/cache/query/internal/index/IndexUseJUnitTest.java new file mode 100644 index 000000000000..90d706382569 --- /dev/null +++ b/gemfire-core/src/test/java/com/gemstone/gemfire/cache/query/internal/index/IndexUseJUnitTest.java @@ -0,0 +1,1885 @@ +/* + * 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. + */ +/* + * IndexTest.java + * + * Created on February 23, 2005, 3:17 PM + */ +package com.gemstone.gemfire.cache.query.internal.index; + +import static org.junit.Assert.assertEquals; +import static org.junit.Assert.assertFalse; +import static org.junit.Assert.assertTrue; +import static org.junit.Assert.fail; + +import java.util.ArrayList; +import java.util.Collection; +import java.util.HashMap; +import java.util.Iterator; +import java.util.List; +import java.util.Map; + +import org.junit.After; +import org.junit.Before; +import org.junit.Test; +import org.junit.experimental.categories.Category; + +import com.gemstone.gemfire.cache.AttributesFactory; +import com.gemstone.gemfire.cache.PartitionAttributesFactory; +import com.gemstone.gemfire.cache.Region; +import com.gemstone.gemfire.cache.query.CacheUtils; +import com.gemstone.gemfire.cache.query.Index; +import com.gemstone.gemfire.cache.query.IndexType; +import com.gemstone.gemfire.cache.query.Query; +import com.gemstone.gemfire.cache.query.QueryInvalidException; +import com.gemstone.gemfire.cache.query.QueryService; +import com.gemstone.gemfire.cache.query.SelectResults; +import com.gemstone.gemfire.cache.query.Struct; +import com.gemstone.gemfire.cache.query.data.Portfolio; +import com.gemstone.gemfire.cache.query.functional.StructSetOrResultsSet; +import com.gemstone.gemfire.cache.query.internal.QueryObserverAdapter; +import com.gemstone.gemfire.cache.query.internal.QueryObserverHolder; +import com.gemstone.gemfire.cache.query.internal.index.IndexManager.TestHook; +import com.gemstone.gemfire.internal.cache.LocalRegion; +import com.gemstone.gemfire.test.junit.categories.IntegrationTest; + +/** + * + */ +@Category(IntegrationTest.class) +public class IndexUseJUnitTest +{ + + Region region; + + QueryService qs; + + @Before + public void setUp() throws Exception { + CacheUtils.startCache(); + region = CacheUtils.createRegion("pos", Portfolio.class); + region.put("0", new Portfolio(0)); + region.put("1", new Portfolio(1)); + region.put("2", new Portfolio(2)); + region.put("3", new Portfolio(3)); + + qs = CacheUtils.getQueryService(); + qs.createIndex("statusIndex", IndexType.FUNCTIONAL, "status", "/pos"); + qs.createIndex("idIndex", IndexType.FUNCTIONAL, "ID", "/pos"); + qs.createIndex("secIdIndex", IndexType.FUNCTIONAL, "P1.secId", "/pos"); + qs.createIndex("secIdIndex2", IndexType.FUNCTIONAL, "P2.secId", "/pos"); + qs.createIndex("p1secindex", "p.position1.secId", " /pos p "); + } + + @After + public void tearDown() throws Exception { + CacheUtils.closeCache(); + IndexManager indexManager = ((LocalRegion)region).getIndexManager(); + if (indexManager != null) + indexManager.destroy(); + IndexManager.TEST_RANGEINDEX_ONLY = false; + + } + + @Test + public void testIndexUseSingleCondition() throws Exception { + String testData[][] = { { "status", "'active'" }, { "ID", "2" }, + { "P1.secId", "'IBM'" }, }; + String operators[] = { "=", "<>", "!=", "<", "<=", ">", ">=" }; + for (int i = 0; i < operators.length; i++) { + String operator = operators[i]; + for (int j = 0; j < testData.length; j++) { + Query q = qs.newQuery("SELECT DISTINCT * FROM /pos where " + + testData[j][0] + " " + operator + " " + testData[j][1]); + QueryObserverImpl observer = new QueryObserverImpl(); + QueryObserverHolder.setInstance(observer); + q.execute(); + if (!observer.isIndexesUsed) { + fail("Index not uesd for operator '" + operator + "'"); + } + } + } + } + + @Test + public void testIndexUseMultipleConditions() throws Exception { + String testData[][] = { { "P1.secType = 'a'", "0" }, + { "status = 'active' AND ID = 2", "1" }, + { "status = 'active' AND ID = 2 AND P1.secId = 'IBM'", "1" }, + { "status = 'active' OR ID = 2", "2" }, + { "status = 'active' OR ID = 2 OR P1.secId = 'IBM'", "3" }, + { "status = 'active' AND ID = 2 OR P1.secId = 'IBM'", "2" }, + { "status = 'active' AND ( ID = 2 OR P1.secId = 'IBM')", "1" }, + { "status = 'active' OR ID = 2 AND P1.secId = 'IBM'", "2" }, + { "(status = 'active' OR ID = 2) AND P1.secId = 'IBM'", "1" }, + { "NOT (status = 'active') AND ID = 2", "1" }, + { "status = 'active' AND NOT( ID = 2 )", "1" }, + { "NOT (status = 'active') OR ID = 2", "2" }, + { "status = 'active' OR NOT( ID = 2 )", "2" }, + { "status = 'active' AND P1.secType = 'a'", "1" }, + { "status = 'active' OR P1.secType = 'a'", "0" }, + { "status = 'active' AND ID =1 AND P1.secType = 'a'", "1" }, + { "status = 'active' AND ID = 1 OR P1.secType = 'a'", "0" }, + { "status = 'active' OR ID = 1 AND P1.secType = 'a'", "2" }, + { "P2.secId = null", "1" }, { "IS_UNDEFINED(P2.secId)", "1" }, + { "IS_DEFINED(P2.secId)", "1" }, { "P2.secId = UNDEFINED", "0" }, }; + for (int j = 0; j < testData.length; j++) { + Query q = qs.newQuery("SELECT DISTINCT * FROM /pos where " + + testData[j][0]); + QueryObserverImpl observer = new QueryObserverImpl(); + QueryObserverHolder.setInstance(observer); + q.execute(); + if (observer.indexesUsed.size() != Integer.parseInt(testData[j][1])) { + fail("Wrong Index use for " + testData[j][0] + "\n Indexes used " + + observer.indexesUsed); + } + } + } + + /** + * Test to check if Region object is passed as bind argument, the index + * utilization occurs or not + */ + @Test + public void testBug36421_part1() { + try { + String testData[][] = { { "status", "'active'" }, }; + String operators[] = { "=" }; + for (int i = 0; i < operators.length; i++) { + String operator = operators[i]; + for (int j = 0; j < testData.length; j++) { + Query q = qs.newQuery("SELECT DISTINCT * FROM $1 where " + + testData[j][0] + " " + operator + " " + testData[j][1]); + QueryObserverImpl observer = new QueryObserverImpl(); + QueryObserverHolder.setInstance(observer); + q.execute(new Object[] { CacheUtils.getRegion("/pos") }); + if (!observer.isIndexesUsed) { + fail("Index not uesd for operator '" + operator + "'"); + } + } + } + } + catch (Exception e) { + CacheUtils.getLogger().error(e); + fail("Test faield due to exception =" + e); + } + } + + /** + * Test to check if Region short cut method is used for querying, the index + * utilization occurs or not + */ + @Test + public void testBug36421_part2() { + try { + String testData[][] = { { "status", "'active'" }, }; + String operators[] = { "=" }; + for (int i = 0; i < operators.length; i++) { + String operator = operators[i]; + for (int j = 0; j < testData.length; j++) { + + QueryObserverImpl observer = new QueryObserverImpl(); + QueryObserverHolder.setInstance(observer); + CacheUtils.getRegion("/pos").query( + testData[j][0] + " " + operator + " " + testData[j][1]); + if (!observer.isIndexesUsed) { + fail("Index not uesd for operator '" + operator + "'"); + } + } + } + } + catch (Exception e) { + CacheUtils.getLogger().error(e); + fail("Test failed due to exception =" + e); + } + } + + /** + * Test to check if a parametrized query when using different bind arguments + * of Region uses the index correctly + */ + @Test + public void testBug36421_part3() { + + Query q = null; + try { + q = qs.newQuery("SELECT DISTINCT * FROM $1 z where z.status = 'active'"); + QueryObserverImpl observer = new QueryObserverImpl(); + QueryObserverHolder.setInstance(observer); + q.execute(new Object[] { CacheUtils.getRegion("/pos") }); + if (!observer.isIndexesUsed) { + fail("Index not uesd for operator '='"); + } + assertTrue(observer.indexesUsed.get(0).equals("statusIndex")); + region = CacheUtils.createRegion("pos1", Portfolio.class); + region.put("0", new Portfolio(0)); + region.put("1", new Portfolio(1)); + region.put("2", new Portfolio(2)); + region.put("3", new Portfolio(3)); + qs.createIndex("statusIndex1", IndexType.FUNCTIONAL, "pf1.status", + "/pos1 pf1"); + region.put("4", new Portfolio(4)); + observer = new QueryObserverImpl(); + QueryObserverHolder.setInstance(observer); + q.execute(new Object[] { CacheUtils.getRegion("/pos1") }); + if (!observer.isIndexesUsed) { + fail("Index not uesd for operator'='"); + } + assertTrue(observer.indexesUsed.get(0).equals("statusIndex1")); + + } + catch (Exception e) { + CacheUtils.getLogger().error(e); + fail("Test failed due to exception =" + e); + } + } + + /** + * Test to check if Region short cut method is used for querying, the Primary + * key index utilization occurs or not + */ + @Test + public void testBug36421_part4() { +// Query q = null; + try { + qs.createIndex("pkIndex", IndexType.PRIMARY_KEY, "pk", "/pos"); + QueryObserverImpl observer = new QueryObserverImpl(); + QueryObserverHolder.setInstance(observer); + SelectResults rs = CacheUtils.getRegion("/pos").query("pk = '2'"); + if (!observer.isIndexesUsed) { + fail("Index not uesd for operator '='"); + } + assertTrue(rs.size() == 1); + assertTrue(((Portfolio)rs.iterator().next()).pkid.equals("2")); + assertTrue(observer.indexesUsed.get(0).equals("pkIndex")); + CacheUtils.getRegion("/pos").put("7", new Portfolio(7)); + observer = new QueryObserverImpl(); + QueryObserverHolder.setInstance(observer); + rs = CacheUtils.getRegion("/pos").query("pk = '7'"); + if (!observer.isIndexesUsed) { + fail("Index not uesd for operator '='"); + } + assertTrue(rs.size() == 1); + assertTrue(((Portfolio)rs.iterator().next()).pkid.equals("7")); + assertTrue(observer.indexesUsed.get(0).equals("pkIndex")); + } + catch (Exception e) { + CacheUtils.getLogger().error(e); + fail("Test failed due to exception =" + e); + } + } + + @Test + public void testMapIndexUsageAllKeys() throws Exception { + QueryService qs; + qs = CacheUtils.getQueryService(); + LocalRegion testRgn = (LocalRegion)CacheUtils.createRegion("testRgn", null); + int ID =1; + //Add some test data now + //Add 5 main objects. 1 will contain key1, 2 will contain key1 & key2 + // and so on + for(; ID <=30; ++ID) { + MapKeyIndexData mkid = new MapKeyIndexData(ID); + for(int j =1; j<= ID;++j) { + mkid.maap.put("key1", j*1); + mkid.maap.put("key2", j*2); + mkid.maap.put("key3", j*3); + } + testRgn.put(ID, mkid); + } + String queries[] = { + "SELECT DISTINCT * FROM /testRgn itr1 WHERE itr1.maap['key2'] >= 16" + /* "SELECT DISTINCT * FROM /testRgn itr1 WHERE itr1.maap.get('key2') >= 16" ,*/ + }; + String queriesIndexNotUsed[] = { + "SELECT DISTINCT * FROM /testRgn itr1 WHERE itr1.maap.get('key2') >= 16" + }; + Object r[][]= new Object[queries.length][2]; + + qs = CacheUtils.getQueryService(); + + //Execute Queries without Indexes + for (int i = 0; i < queries.length; i++) { + Query q = null; + try { + q = CacheUtils.getQueryService().newQuery(queries[i]); + CacheUtils.getLogger().info("Executing query: " + queries[i]); + r[i][0] = q.execute(); + CacheUtils.log("Executed query: " + queries[i] ); + } catch (Exception e) { + e.printStackTrace(); + fail(q.getQueryString()); + } + } + + Index i1 = qs.createIndex("Index1", IndexType.FUNCTIONAL, "objs.maap[*]", + "/testRgn objs"); + + //Execute Queries with Indexes + for (int i = 0; i < queries.length; i++) { + Query q = null; + try { + q = CacheUtils.getQueryService().newQuery(queries[i]); + CacheUtils.getLogger().info("Executing query: " + queries[i]); + QueryObserverImpl observer = new QueryObserverImpl(); + QueryObserverHolder.setInstance(observer); + r[i][1] = q.execute(); + CacheUtils.log("Executing query: " + queries[i] + " with index created"); + if(!observer.isIndexesUsed){ + fail("Index is NOT uesd"); + } + Iterator itr = observer.indexesUsed.iterator(); + assertTrue(itr.hasNext()); + String temp = itr.next().toString(); + assertEquals(temp,"Index1"); + + } catch (Exception e) { + e.printStackTrace(); + fail(q.getQueryString()); + } + } + StructSetOrResultsSet ssOrrs = new StructSetOrResultsSet(); + ssOrrs.CompareQueryResultsWithoutAndWithIndexes(r,queries.length,queries); + + //Test queries index not used + for (int i = 0; i < queriesIndexNotUsed.length; i++) { + Query q = null; + try { + q = CacheUtils.getQueryService().newQuery(queriesIndexNotUsed[i]); + CacheUtils.getLogger().info("Executing query: " + queriesIndexNotUsed[i]); + QueryObserverImpl observer = new QueryObserverImpl(); + QueryObserverHolder.setInstance(observer); + CacheUtils.log("Executing query: " + queriesIndexNotUsed[i] + " with index created"); + q.execute(); + assertFalse(observer.isIndexesUsed); + Iterator itr = observer.indexesUsed.iterator(); + assertFalse(itr.hasNext()); + + } catch (Exception e) { + e.printStackTrace(); + fail(q.getQueryString()); + } + } + + } + + @Test + public void testCompactMapIndexUsageWithIndexOnSingleKey() throws Exception + { + QueryService qs; + qs = CacheUtils.getQueryService(); + LocalRegion testRgn = (LocalRegion)CacheUtils.createRegion("testRgn", null); + int ID = 1; + // Add some test data now + // Add 5 main objects. 1 will contain key1, 2 will contain key1 & key2 + // and so on + for (; ID <= 30; ++ID) { + MapKeyIndexData mkid = new MapKeyIndexData(ID); + for (int j = 1; j <= ID; ++j) { + mkid.addKeyValue("key1", j * 1); + mkid.addKeyValue("key2", j * 2); + mkid.addKeyValue("key3", j * 3); + } + testRgn.put(ID, mkid); + } + + qs = CacheUtils.getQueryService(); + String queries[] = { "SELECT DISTINCT * FROM /testRgn itr1 WHERE itr1.maap['key2'] >= 3" }; + + String queriesIndexNotUsed[] = { + "SELECT DISTINCT * FROM /testRgn itr1 WHERE itr1.maap.get('key2') >= 3", + "SELECT DISTINCT * FROM /testRgn itr1 WHERE itr1.maap['key3'] >= 3", }; + + Object r[][] = new Object[queries.length][2]; + + // Execute Queries without Indexes + for (int i = 0; i < queries.length; i++) { + Query q = null; + try { + q = CacheUtils.getQueryService().newQuery(queries[i]); + CacheUtils.getLogger().info("Executing query: " + queries[i]); + r[i][0] = q.execute(); + CacheUtils.log("Executed query: " + queries[i]); + } + catch (Exception e) { + e.printStackTrace(); + fail(q.getQueryString()); + } + } + + Index i1 = qs.createIndex("Index1", IndexType.FUNCTIONAL, + "objs.maap['key2']", "/testRgn objs"); + assertTrue(i1 instanceof CompactRangeIndex); + // Execute Queries with Indexes + for (int i = 0; i < queries.length; i++) { + Query q = null; + try { + q = CacheUtils.getQueryService().newQuery(queries[i]); + CacheUtils.getLogger().info("Executing query: " + queries[i]); + QueryObserverImpl observer = new QueryObserverImpl(); + QueryObserverHolder.setInstance(observer); + r[i][1] = q.execute(); + CacheUtils.log("Executing query: " + queries[i] + + " with index created"); + if (!observer.isIndexesUsed) { + fail("Index is NOT uesd"); + } + Iterator itr = observer.indexesUsed.iterator(); + assertTrue(itr.hasNext()); + String temp = itr.next().toString(); + assertEquals(temp, "Index1"); + + } + catch (Exception e) { + e.printStackTrace(); + fail(q.getQueryString()); + } + } + StructSetOrResultsSet ssOrrs = new StructSetOrResultsSet(); + ssOrrs.CompareQueryResultsWithoutAndWithIndexes(r, queries.length,queries); + + // Test queries index not used + for (int i = 0; i < queriesIndexNotUsed.length; i++) { + Query q = null; + try { + q = CacheUtils.getQueryService().newQuery(queriesIndexNotUsed[i]); + CacheUtils.getLogger().info( + "Executing query: " + queriesIndexNotUsed[i]); + QueryObserverImpl observer = new QueryObserverImpl(); + QueryObserverHolder.setInstance(observer); + CacheUtils.log("Executing query: " + queriesIndexNotUsed[i] + + " with index created"); + q.execute(); + assertFalse(observer.isIndexesUsed); + Iterator itr = observer.indexesUsed.iterator(); + assertFalse(itr.hasNext()); + + } + catch (Exception e) { + e.printStackTrace(); + fail(q.getQueryString()); + } + } + + String query = "SELECT DISTINCT * FROM /testRgn itr1 WHERE itr1.liist[0] >= 2"; + SelectResults withoutIndex, withIndex; + Query q = CacheUtils.getQueryService().newQuery(query); + CacheUtils.getLogger().info("Executing query: " + query); + withoutIndex = (SelectResults)q.execute(); + CacheUtils.log("Executed query: " + query); + + Index i2 = qs.createIndex("Index2", IndexType.FUNCTIONAL, "objs.liist[0]", + "/testRgn objs"); + assertTrue(i2 instanceof CompactRangeIndex); + CacheUtils.getLogger().info("Executing query: " + query); + QueryObserverImpl observer = new QueryObserverImpl(); + QueryObserverHolder.setInstance(observer); + withIndex = (SelectResults)q.execute(); + CacheUtils.log("Executing query: " + query + " with index created"); + if (!observer.isIndexesUsed) { + fail("Index is NOT uesd"); + } + Iterator itr = observer.indexesUsed.iterator(); + assertTrue(itr.hasNext()); + String temp = itr.next().toString(); + assertEquals(temp, "Index2"); + + ssOrrs = new StructSetOrResultsSet(); + ssOrrs.CompareQueryResultsWithoutAndWithIndexes(new Object[][] { { + withoutIndex, withIndex } }, 1,queries); + + } + @Test + public void testCompactMapIndexUsageWithIndexOnMultipleKeys() throws Exception + { + QueryService qs; + qs = CacheUtils.getQueryService(); + LocalRegion testRgn = (LocalRegion)CacheUtils.createRegion("testRgn", null); + int ID = 1; + // Add some test data now + // Add 5 main objects. 1 will contain key1, 2 will contain key1 & key2 + // and so on + for (; ID <= 30; ++ID) { + MapKeyIndexData mkid = new MapKeyIndexData(ID); + for (int j = 1; j <= ID; ++j) { + mkid.addKeyValue("key1", j * 1); + mkid.addKeyValue("key2", j * 2); + mkid.addKeyValue("key3", j * 3); + } + testRgn.put(ID, mkid); + } + + qs = CacheUtils.getQueryService(); + String queries[] = { + "SELECT DISTINCT * FROM /testRgn itr1 WHERE itr1.maap['key2'] >= 3", + "SELECT DISTINCT * FROM /testRgn itr1 WHERE itr1.maap['key3'] >= 3" }; + + String queriesIndexNotUsed[] = { + "SELECT DISTINCT * FROM /testRgn itr1 WHERE itr1.maap.get('key2') >= 16", + "SELECT DISTINCT * FROM /testRgn itr1 WHERE itr1.maap['key4'] >= 16", }; + + Object r[][] = new Object[queries.length][2]; + + // Execute Queries without Indexes + for (int i = 0; i < queries.length; i++) { + Query q = null; + try { + q = CacheUtils.getQueryService().newQuery(queries[i]); + CacheUtils.getLogger().info("Executing query: " + queries[i]); + r[i][0] = q.execute(); + CacheUtils.log("Executed query: " + queries[i]); + } + catch (Exception e) { + e.printStackTrace(); + fail(q.getQueryString()); + } + } + + Index i1 = qs.createIndex("Index1", IndexType.FUNCTIONAL, + "objs.maap['key2','key3']", "/testRgn objs"); + assertTrue(i1 instanceof CompactMapRangeIndex); + // Execute Queries with Indexes + for (int i = 0; i < queries.length; i++) { + Query q = null; + try { + q = CacheUtils.getQueryService().newQuery(queries[i]); + CacheUtils.getLogger().info("Executing query: " + queries[i]); + QueryObserverImpl observer = new QueryObserverImpl(); + QueryObserverHolder.setInstance(observer); + r[i][1] = q.execute(); + CacheUtils.log("Executing query: " + queries[i] + + " with index created"); + if (!observer.isIndexesUsed) { + fail("Index is NOT uesd"); + } + Iterator itr = observer.indexesUsed.iterator(); + assertTrue(itr.hasNext()); + String temp = itr.next().toString(); + assertEquals(temp, "Index1"); + + } + catch (Exception e) { + e.printStackTrace(); + fail(q.getQueryString()); + } + } + StructSetOrResultsSet ssOrrs = new StructSetOrResultsSet(); + ssOrrs.CompareQueryResultsWithoutAndWithIndexes(r, queries.length,queries); + + // Test queries index not used + for (int i = 0; i < queriesIndexNotUsed.length; i++) { + Query q = null; + try { + q = CacheUtils.getQueryService().newQuery(queriesIndexNotUsed[i]); + CacheUtils.getLogger().info( + "Executing query: " + queriesIndexNotUsed[i]); + QueryObserverImpl observer = new QueryObserverImpl(); + QueryObserverHolder.setInstance(observer); + CacheUtils.log("Executing query: " + queriesIndexNotUsed[i] + + " with index created"); + q.execute(); + assertFalse(observer.isIndexesUsed); + Iterator itr = observer.indexesUsed.iterator(); + assertFalse(itr.hasNext()); + + } + catch (Exception e) { + e.printStackTrace(); + fail(q.getQueryString()); + } + } + + } + + @Test + public void testMapIndexUsageWithIndexOnMultipleKeys() throws Exception + { + IndexManager.TEST_RANGEINDEX_ONLY = true; + QueryService qs; + qs = CacheUtils.getQueryService(); + LocalRegion testRgn = (LocalRegion)CacheUtils.createRegion("testRgn", null); + int ID = 1; + // Add some test data now + // Add 5 main objects. 1 will contain key1, 2 will contain key1 & key2 + // and so on + for (; ID <= 30; ++ID) { + MapKeyIndexData mkid = new MapKeyIndexData(ID); + for (int j = 1; j <= ID; ++j) { + mkid.addKeyValue("key1", j * 1); + mkid.addKeyValue("key2", j * 2); + mkid.addKeyValue("key3", j * 3); + } + testRgn.put(ID, mkid); + } + + qs = CacheUtils.getQueryService(); + String queries[] = { + "SELECT DISTINCT * FROM /testRgn itr1 WHERE itr1.maap['key2'] >= 3", + "SELECT DISTINCT * FROM /testRgn itr1 WHERE itr1.maap['key3'] >= 3" }; + + String queriesIndexNotUsed[] = { + "SELECT DISTINCT * FROM /testRgn itr1 WHERE itr1.maap.get('key2') >= 16", + "SELECT DISTINCT * FROM /testRgn itr1 WHERE itr1.maap['key4'] >= 16", }; + + Object r[][] = new Object[queries.length][2]; + + // Execute Queries without Indexes + for (int i = 0; i < queries.length; i++) { + Query q = null; + try { + q = CacheUtils.getQueryService().newQuery(queries[i]); + CacheUtils.getLogger().info("Executing query: " + queries[i]); + r[i][0] = q.execute(); + CacheUtils.log("Executed query: " + queries[i]); + } + catch (Exception e) { + e.printStackTrace(); + fail(q.getQueryString()); + } + } + + Index i1 = qs.createIndex("Index1", IndexType.FUNCTIONAL, + "objs.maap['key2','key3']", "/testRgn objs"); + assertTrue(i1 instanceof MapRangeIndex); + // Execute Queries with Indexes + for (int i = 0; i < queries.length; i++) { + Query q = null; + try { + q = CacheUtils.getQueryService().newQuery(queries[i]); + CacheUtils.getLogger().info("Executing query: " + queries[i]); + QueryObserverImpl observer = new QueryObserverImpl(); + QueryObserverHolder.setInstance(observer); + r[i][1] = q.execute(); + CacheUtils.log("Executing query: " + queries[i] + + " with index created"); + if (!observer.isIndexesUsed) { + fail("Index is NOT uesd"); + } + Iterator itr = observer.indexesUsed.iterator(); + assertTrue(itr.hasNext()); + String temp = itr.next().toString(); + assertEquals(temp, "Index1"); + + } + catch (Exception e) { + e.printStackTrace(); + fail(q.getQueryString()); + } + } + StructSetOrResultsSet ssOrrs = new StructSetOrResultsSet(); + ssOrrs.CompareQueryResultsWithoutAndWithIndexes(r, queries.length,queries); + + // Test queries index not used + for (int i = 0; i < queriesIndexNotUsed.length; i++) { + Query q = null; + try { + q = CacheUtils.getQueryService().newQuery(queriesIndexNotUsed[i]); + CacheUtils.getLogger().info( + "Executing query: " + queriesIndexNotUsed[i]); + QueryObserverImpl observer = new QueryObserverImpl(); + QueryObserverHolder.setInstance(observer); + CacheUtils.log("Executing query: " + queriesIndexNotUsed[i] + + " with index created"); + q.execute(); + assertFalse(observer.isIndexesUsed); + Iterator itr = observer.indexesUsed.iterator(); + assertFalse(itr.hasNext()); + + } + catch (Exception e) { + e.printStackTrace(); + fail(q.getQueryString()); + } + } + + } + + @Test + public void testIndexUsageWithOrderBy() throws Exception + { + QueryService qs; + qs = CacheUtils.getQueryService(); + LocalRegion testRgn = (LocalRegion)CacheUtils.createRegion("testRgn", null); + + int numObjects = 30; + // Add some test data now + // Add 5 main objects. 1 will contain key1, 2 will contain key1 & key2 + // and so on + for (int i=0; i < numObjects; i++) { + Portfolio p = new Portfolio(i); + p.pkid = ("" +(numObjects - i)); + testRgn.put("" + i, p); + } + + qs = CacheUtils.getQueryService(); + String queries[] = { + "SELECT DISTINCT * FROM /testRgn p WHERE p.ID <= 10 order by p.pkid asc limit 1", + "SELECT DISTINCT * FROM /testRgn p WHERE p.ID <= 10 order by p.pkid desc limit 1", + }; + + Object r[][] = new Object[queries.length][2]; + + // Execute Queries without Indexes + for (int i = 0; i < queries.length; i++) { + Query q = null; + try { + q = CacheUtils.getQueryService().newQuery(queries[i]); + CacheUtils.getLogger().info("Executing query: " + queries[i]); + // verify individual result + SelectResults sr = (SelectResults)q.execute(); + List results = sr.asList(); + for (int rows=0; rows < results.size(); rows++) { + Portfolio p = (Portfolio)results.get(0); + CacheUtils.getLogger().info("p: " + p); + if (i == 0) { + assertEquals(p.getID(), 10); + assertEquals(p.pkid, "" + (numObjects - 10)); + } else if (i == 1) { + assertEquals(p.getID(), 0); + assertEquals(p.pkid, "" + numObjects); + } + } + r[i][0] = sr; + CacheUtils.log("Executed query: " + queries[i]); + } + catch (Exception e) { + e.printStackTrace(); + fail(q.getQueryString()); + } + } + + Index i1 = qs.createIndex("Index1", IndexType.FUNCTIONAL, "p.ID", "/testRgn p"); + + // Execute Queries with Indexes + for (int i = 0; i < queries.length; i++) { + Query q = null; + try { + q = CacheUtils.getQueryService().newQuery(queries[i]); + CacheUtils.getLogger().info("Executing query: " + queries[i]); + QueryObserverImpl observer = new QueryObserverImpl(); + QueryObserverHolder.setInstance(observer); + SelectResults sr = (SelectResults)q.execute(); + List results = sr.asList(); + for (int rows=0; rows < results.size(); rows++) { + Portfolio p = (Portfolio)results.get(0); + CacheUtils.getLogger().info("index p: " + p); + if (i == 0) { + assertEquals(p.getID(), 10); + assertEquals(p.pkid, "" + (numObjects - 10)); + } else if (i == 1) { + assertEquals(p.getID(), 0); + assertEquals(p.pkid, "" + numObjects); + } + } + r[i][1] = sr; + //r[i][1] = q.execute(); + CacheUtils.log("Executing query: " + queries[i] + + " with index created"); + if (!observer.isIndexesUsed) { + fail("Index is NOT uesd"); + } + Iterator itr = observer.indexesUsed.iterator(); + assertTrue(itr.hasNext()); + String temp = itr.next().toString(); + assertEquals(temp, "Index1"); + } + + catch (Exception e) { + e.printStackTrace(); + fail(q.getQueryString()); + } + } + StructSetOrResultsSet ssOrrs = new StructSetOrResultsSet(); + ssOrrs.CompareQueryResultsWithoutAndWithIndexes(r, queries.length,queries); + } + + @Test + public void testIndexUsageWithOrderBy3() throws Exception + { + QueryService qs; + qs = CacheUtils.getQueryService(); + LocalRegion testRgn = (LocalRegion)CacheUtils.createRegion("testRgn", null); + + int numObjects = 30; + // Add some test data now + // Add 5 main objects. 1 will contain key1, 2 will contain key1 & key2 + // and so on + for (int i=0; i < numObjects; i++) { + Portfolio p = new Portfolio(i); + p.pkid = ("" +(numObjects - i)); + testRgn.put("" + i, p); + } + + qs = CacheUtils.getQueryService(); + String queries[] = { + "SELECT DISTINCT * FROM /testRgn p WHERE p.ID <= 10 order by ID asc limit 1", + "SELECT DISTINCT * FROM /testRgn p WHERE p.ID <= 10 order by p.ID desc limit 1", + }; + + Object r[][] = new Object[queries.length][2]; + + + Index i1 = qs.createIndex("Index1", IndexType.FUNCTIONAL, "p.ID", "/testRgn p"); + + // Execute Queries with Indexes + for (int i = 0; i < queries.length; i++) { + Query q = null; + try { + q = CacheUtils.getQueryService().newQuery(queries[i]); + CacheUtils.getLogger().info("Executing query: " + queries[i]); + QueryObserverImpl observer = new QueryObserverImpl(); + QueryObserverHolder.setInstance(observer); + SelectResults sr = (SelectResults)q.execute(); + List results = sr.asList(); + for (int rows=0; rows < results.size(); rows++) { + Portfolio p = (Portfolio)results.get(0); + CacheUtils.getLogger().info("index p: " + p); + if (i == 0) { + assertEquals(p.getID(), 0); + + } else if (i == 1) { + assertEquals(p.getID(), 10); + + } + } + r[i][1] = sr; + //r[i][1] = q.execute(); + CacheUtils.log("Executing query: " + queries[i] + + " with index created"); + if (!observer.isIndexesUsed) { + fail("Index is NOT uesd"); + } + Iterator itr = observer.indexesUsed.iterator(); + assertTrue(itr.hasNext()); + String temp = itr.next().toString(); + assertEquals(temp, "Index1"); + } + + catch (Exception e) { + e.printStackTrace(); + fail(q.getQueryString()); + } + } + + } + + @Test + public void testIndexUsageWithOrderBy2() throws Exception + { + QueryService qs; + qs = CacheUtils.getQueryService(); + LocalRegion testRgn = (LocalRegion)CacheUtils.createRegion("testRgn", null); + + int numObjects = 30; + // Add some test data now + // Add 5 main objects. 1 will contain key1, 2 will contain key1 & key2 + // and so on + for (int i=0; i < numObjects; i++) { + Portfolio p = new Portfolio(i % 2); + p.createTime = (numObjects - i); + testRgn.put("" + i, p); + } + + qs = CacheUtils.getQueryService(); + String queries[] = { + "SELECT DISTINCT p.key, p.value FROM /testRgn.entrySet p WHERE p.value.ID <= 10 order by p.value.createTime asc limit 1", + "SELECT DISTINCT p.key, p.value FROM /testRgn.entrySet p WHERE p.value.ID <= 10 order by p.value.createTime desc limit 1", + }; + + Object r[][] = new Object[queries.length][2]; + + // Execute Queries without Indexes + for (int i = 0; i < queries.length; i++) { + Query q = null; + try { + q = CacheUtils.getQueryService().newQuery(queries[i]); + CacheUtils.getLogger().info("Executing query: " + queries[i]); + // verify individual result + SelectResults sr = (SelectResults)q.execute(); + List results = sr.asList(); + for (int rows=0; rows < results.size(); rows++) { + Struct s = (Struct)results.get(0); + Portfolio p = (Portfolio)s.get("value"); + CacheUtils.getLogger().info("p: " + p); + if (i == 0) { + assertEquals(p.createTime, 1); + } else if (i == 1) { + assertEquals(p.createTime, numObjects); + } + } + r[i][0] = sr; + CacheUtils.log("Executed query: " + queries[i]); + } + catch (Exception e) { + e.printStackTrace(); + fail(q.getQueryString()); + } + } + + Index i1 = qs.createIndex("Index1", IndexType.FUNCTIONAL, "p.value.ID", "/testRgn.entrySet p"); + + // Execute Queries with Indexes + for (int i = 0; i < queries.length; i++) { + Query q = null; + try { + q = CacheUtils.getQueryService().newQuery(queries[i]); + CacheUtils.getLogger().info("Executing query: " + queries[i]); + QueryObserverImpl observer = new QueryObserverImpl(); + QueryObserverHolder.setInstance(observer); + SelectResults sr = (SelectResults)q.execute(); + List results = sr.asList(); + for (int rows=0; rows < results.size(); rows++) { + Struct s = (Struct)results.get(0); + Portfolio p = (Portfolio)s.get("value"); + CacheUtils.getLogger().info("index p: " + p); + if (i == 0) { + assertEquals(p.createTime, 1); + } else if (i == 1) { + assertEquals(p.createTime, numObjects); + } + } + r[i][1] = sr; + //r[i][1] = q.execute(); + CacheUtils.log("Executing query: " + queries[i] + + " with index created"); + if (!observer.isIndexesUsed) { + fail("Index is NOT uesd"); + } + Iterator itr = observer.indexesUsed.iterator(); + assertTrue(itr.hasNext()); + String temp = itr.next().toString(); + assertEquals(temp, "Index1"); + } + + catch (Exception e) { + e.printStackTrace(); + fail(q.getQueryString()); + } + } + StructSetOrResultsSet ssOrrs = new StructSetOrResultsSet(); + ssOrrs.CompareQueryResultsWithoutAndWithIndexes(r, queries.length,queries); + } + + @Test + public void testIncorrectIndexOperatorSyntax() { + QueryService qs; + qs = CacheUtils.getQueryService(); + LocalRegion testRgn = (LocalRegion)CacheUtils.createRegion("testRgn", null); + int ID =1; + //Add some test data now + //Add 5 main objects. 1 will contain key1, 2 will contain key1 & key2 + // and so on + for(; ID <=30; ++ID) { + MapKeyIndexData mkid = new MapKeyIndexData(ID); + for(int j =1; j<= ID;++j) { + mkid.maap.put("key1", j*1); + mkid.maap.put("key2", j*2); + mkid.maap.put("key3", j*3); + } + testRgn.put(ID, mkid); + } + + + qs = CacheUtils.getQueryService(); + try { + Query q = CacheUtils.getQueryService().newQuery( + "SELECT DISTINCT * FROM /testRgn itr1 WHERE itr1.maap[*] >= 3"); + fail("Should have thrown exception"); + }catch(QueryInvalidException qe) { + //ok + } + + try { + Query q = CacheUtils.getQueryService().newQuery( + "SELECT DISTINCT * FROM /testRgn itr1 WHERE itr1.maap['key1','key2'] >= 3"); + fail("Should have thrown exception"); + }catch(QueryInvalidException qe) { + //ok + } + + } + + @Test + public void testRangeGroupingBehaviourOfCompactMapIndex() throws Exception { + QueryService qs; + qs = CacheUtils.getQueryService(); + LocalRegion testRgn = (LocalRegion)CacheUtils.createRegion("testRgn", null); + int ID = 1; + // Add some test data now + // Add 5 main objects. 1 will contain key1, 2 will contain key1 & key2 + // and so on + for (; ID <= 30; ++ID) { + MapKeyIndexData mkid = new MapKeyIndexData(ID); + for (int j = 1; j <= ID; ++j) { + mkid.addKeyValue("key1", j * 1); + mkid.addKeyValue("key2", j * 2); + mkid.addKeyValue("key3", j * 3); + } + testRgn.put(ID, mkid); + } + + qs = CacheUtils.getQueryService(); + String queries[] = { + "SELECT DISTINCT * FROM /testRgn itr1 WHERE itr1.maap['key2'] >= 3 and itr1.maap['key2'] <=18", + "SELECT DISTINCT * FROM /testRgn itr1 WHERE itr1.maap['key3'] >= 3 and itr1.maap['key3'] >= 13 ", + "SELECT DISTINCT * FROM /testRgn itr1 WHERE itr1.maap['key2'] >= 3 and itr1.maap['key3'] >= 13 ", + "SELECT DISTINCT * FROM /testRgn itr1 WHERE itr1.maap['key2'] >= 3 and itr1.maap['key3'] < 18 " + + }; + + + Object r[][] = new Object[queries.length][2]; + + // Execute Queries without Indexes + for (int i = 0; i < queries.length; i++) { + Query q = null; + try { + q = CacheUtils.getQueryService().newQuery(queries[i]); + CacheUtils.getLogger().info("Executing query: " + queries[i]); + r[i][0] = q.execute(); + CacheUtils.log("Executed query: " + queries[i]); + } + catch (Exception e) { + e.printStackTrace(); + fail(q.getQueryString()); + } + } + + Index i1 = qs.createIndex("Index1", IndexType.FUNCTIONAL, + "objs.maap['key2','key3']", "/testRgn objs"); + assertTrue(i1 instanceof CompactMapRangeIndex); + // Execute Queries with Indexes + for (int i = 0; i < queries.length; i++) { + Query q = null; + try { + q = CacheUtils.getQueryService().newQuery(queries[i]); + CacheUtils.getLogger().info("Executing query: " + queries[i]); + QueryObserverImpl observer = new QueryObserverImpl(); + QueryObserverHolder.setInstance(observer); + r[i][1] = q.execute(); + CacheUtils.log("Executing query: " + queries[i] + + " with index created"); + if (!observer.isIndexesUsed) { + fail("Index is NOT uesd"); + } + Iterator itr = observer.indexesUsed.iterator(); + assertTrue(itr.hasNext()); + String temp = itr.next().toString(); + assertEquals(temp, "Index1"); + + } + catch (Exception e) { + e.printStackTrace(); + fail(q.getQueryString()); + } + } + StructSetOrResultsSet ssOrrs = new StructSetOrResultsSet(); + ssOrrs.CompareQueryResultsWithoutAndWithIndexes(r, queries.length,queries); + + } + + @Test + public void testRangeGroupingBehaviourOfMapIndex() throws Exception { + IndexManager.TEST_RANGEINDEX_ONLY = true; + QueryService qs; + qs = CacheUtils.getQueryService(); + LocalRegion testRgn = (LocalRegion)CacheUtils.createRegion("testRgn", null); + int ID = 1; + // Add some test data now + // Add 5 main objects. 1 will contain key1, 2 will contain key1 & key2 + // and so on + for (; ID <= 30; ++ID) { + MapKeyIndexData mkid = new MapKeyIndexData(ID); + for (int j = 1; j <= ID; ++j) { + mkid.addKeyValue("key1", j * 1); + mkid.addKeyValue("key2", j * 2); + mkid.addKeyValue("key3", j * 3); + } + testRgn.put(ID, mkid); + } + + qs = CacheUtils.getQueryService(); + String queries[] = { + "SELECT DISTINCT * FROM /testRgn itr1 WHERE itr1.maap['key2'] >= 3 and itr1.maap['key2'] <=18", + "SELECT DISTINCT * FROM /testRgn itr1 WHERE itr1.maap['key3'] >= 3 and itr1.maap['key3'] >= 13 ", + "SELECT DISTINCT * FROM /testRgn itr1 WHERE itr1.maap['key2'] >= 3 and itr1.maap['key3'] >= 13 ", + "SELECT DISTINCT * FROM /testRgn itr1 WHERE itr1.maap['key2'] >= 3 and itr1.maap['key3'] < 18 " + + }; + + + Object r[][] = new Object[queries.length][2]; + + // Execute Queries without Indexes + for (int i = 0; i < queries.length; i++) { + Query q = null; + try { + q = CacheUtils.getQueryService().newQuery(queries[i]); + CacheUtils.getLogger().info("Executing query: " + queries[i]); + r[i][0] = q.execute(); + CacheUtils.log("Executed query: " + queries[i]); + } + catch (Exception e) { + e.printStackTrace(); + fail(q.getQueryString()); + } + } + + Index i1 = qs.createIndex("Index1", IndexType.FUNCTIONAL, + "objs.maap['key2','key3']", "/testRgn objs"); + assertTrue(i1 instanceof MapRangeIndex); + // Execute Queries with Indexes + for (int i = 0; i < queries.length; i++) { + Query q = null; + try { + q = CacheUtils.getQueryService().newQuery(queries[i]); + CacheUtils.getLogger().info("Executing query: " + queries[i]); + QueryObserverImpl observer = new QueryObserverImpl(); + QueryObserverHolder.setInstance(observer); + r[i][1] = q.execute(); + CacheUtils.log("Executing query: " + queries[i] + + " with index created"); + if (!observer.isIndexesUsed) { + fail("Index is NOT uesd"); + } + Iterator itr = observer.indexesUsed.iterator(); + assertTrue(itr.hasNext()); + String temp = itr.next().toString(); + assertEquals(temp, "Index1"); + + } + catch (Exception e) { + e.printStackTrace(); + fail(q.getQueryString()); + } + } + StructSetOrResultsSet ssOrrs = new StructSetOrResultsSet(); + ssOrrs.CompareQueryResultsWithoutAndWithIndexes(r, queries.length,queries); + + } + + @Test + public void testMapIndexUsableQueryOnEmptyRegion() throws Exception + { + + QueryService qs; + qs = CacheUtils.getQueryService(); + LocalRegion testRgn = (LocalRegion)CacheUtils.createRegion("testRgn", null); + Index i1 = qs.createIndex("Index1", IndexType.FUNCTIONAL, + "objs.maap['key2','key3']", "/testRgn objs"); + qs = CacheUtils.getQueryService(); + // Execute Queries without Indexes + Query q = CacheUtils.getQueryService().newQuery( + "SELECT DISTINCT * FROM /testRgn itr1 WHERE itr1.maap['key2'] >= 3 "); + SelectResults sr = (SelectResults)q.execute(); + assertTrue(sr.isEmpty()); + + } + + @Test + public void testSizeEstimateLTInRangeIndexForNullMap() throws Exception { + QueryService qs = CacheUtils.getQueryService(); + LocalRegion testRgn = (LocalRegion)CacheUtils.createRegion("testRgn", null); + //Create indexes + Index i1 = qs.createIndex("Index1", IndexType.FUNCTIONAL, + "p.status", "/testRgn p, p.positions"); + Index i2 = qs.createIndex("Index2", IndexType.FUNCTIONAL, + "p.ID", "/testRgn p, p.positions"); + + //put values + testRgn.put(0, new Portfolio(0)); + testRgn.put(1, new Portfolio(1)); + + //Set TestHook in RangeIndex + TestHook hook = new RangeIndexTestHook(); + RangeIndex.setTestHook(hook); + // Execute Queries without Indexes + Query q = CacheUtils.getQueryService().newQuery( + " SELECT * FROM /testRgn p, p.positions where p.status = 'active' AND p.ID > 0 "); + + //Following should throw NullPointerException. + SelectResults sr = (SelectResults)q.execute(); + + assertTrue("RangeIndexTestHook was not hooked for spot 2", ((RangeIndexTestHook)hook).isHooked(2)); + RangeIndex.setTestHook(null); + } + + @Test + public void testSizeEstimateGTInRangeIndexForNullMap() throws Exception { + QueryService qs = CacheUtils.getQueryService(); + LocalRegion testRgn = (LocalRegion)CacheUtils.createRegion("testRgn", null); + //Create indexes + Index i1 = qs.createIndex("Index1", IndexType.FUNCTIONAL, + "p.status", "/testRgn p, p.positions"); + Index i2 = qs.createIndex("Index2", IndexType.FUNCTIONAL, + "p.ID", "/testRgn p, p.positions"); + + //put values + testRgn.put(0, new Portfolio(0)); + testRgn.put(1, new Portfolio(1)); + + //Set TestHook in RangeIndex + TestHook hook = new RangeIndexTestHook(); + RangeIndex.setTestHook(hook); + // Execute Queries without Indexes + Query q = CacheUtils.getQueryService().newQuery( + " SELECT * FROM /testRgn p, p.positions where p.status = 'active' AND p.ID < 0 "); + + //Following should throw NullPointerException. + SelectResults sr = (SelectResults)q.execute(); + + assertTrue("RangeIndexTestHook was not hooked for spot 1", ((RangeIndexTestHook)hook).isHooked(1)); + RangeIndex.setTestHook(null); + } + + @Test + public void testSizeEstimateLTInCompactRangeIndexForNullMap() throws Exception { + QueryService qs = CacheUtils.getQueryService(); + LocalRegion testRgn = (LocalRegion)CacheUtils.createRegion("testRgn", null); + //Create indexes + Index i1 = qs.createIndex("Index1", IndexType.FUNCTIONAL, + "p.status", "/testRgn p"); + Index i2 = qs.createIndex("Index2", IndexType.FUNCTIONAL, + "p.ID", "/testRgn p"); + + //put values + testRgn.put(0, new Portfolio(0)); + testRgn.put(1, new Portfolio(1)); + + //Set TestHook in RangeIndex + TestHook hook = new RangeIndexTestHook(); + CompactRangeIndex.setTestHook(hook); + // Execute Queries without Indexes + Query q = CacheUtils.getQueryService().newQuery( + " SELECT * FROM /testRgn p where p.status = 'active' AND p.ID > 0 "); + + //Following should throw NullPointerException. + SelectResults sr = (SelectResults)q.execute(); + + assertTrue("RangeIndexTestHook was not hooked for spot 2", ((RangeIndexTestHook)hook).isHooked(2)); + CompactRangeIndex.setTestHook(null); + } + + @Test + public void testSizeEstimateGTInCompactRangeIndexForNullMap() throws Exception { + QueryService qs = CacheUtils.getQueryService(); + LocalRegion testRgn = (LocalRegion)CacheUtils.createRegion("testRgn", null); + //Create indexes + Index i1 = qs.createIndex("Index1", IndexType.FUNCTIONAL, + "p.status", "/testRgn p"); + Index i2 = qs.createIndex("Index2", IndexType.FUNCTIONAL, + "p.ID", "/testRgn p"); + + //put values + testRgn.put(0, new Portfolio(0)); + testRgn.put(1, new Portfolio(1)); + + //Set TestHook in RangeIndex + TestHook hook = new RangeIndexTestHook(); + CompactRangeIndex.setTestHook(hook); + // Execute Queries without Indexes + Query q = CacheUtils.getQueryService().newQuery( + " SELECT * FROM /testRgn p where p.status = 'active' AND p.ID < 0 "); + + //Following should throw NullPointerException. + SelectResults sr = (SelectResults)q.execute(); + + assertTrue("RangeIndexTestHook was not hooked for spot 1", ((RangeIndexTestHook)hook).isHooked(1)); + CompactRangeIndex.setTestHook(null); + } + + @Test + public void testCompactMapIndexUsageAllKeysWithVariousValueTypes() throws Exception { + QueryService qs; + qs = CacheUtils.getQueryService(); + LocalRegion testRgn = (LocalRegion)CacheUtils.createRegion("testRgn", null); + int ID =1; + for(; ID <=30; ++ID) { + TestObject object = new TestObject(ID); + testRgn.put(ID, object); + } + String queries[] = { + "SELECT DISTINCT * FROM /testRgn itr1 WHERE itr1.testFields['string'] = '1'", + "SELECT DISTINCT * FROM /testRgn itr1 WHERE itr1.testFields['double'] > 1D", + "SELECT DISTINCT * FROM /testRgn itr1 WHERE itr1.testFields['integer'] > 1", + "SELECT DISTINCT * FROM /testRgn itr1 WHERE itr1.testFields['long'] > 1L" + }; + String queriesIndexNotUsed[] = { + "SELECT DISTINCT * FROM /testRgn itr1 WHERE itr1.testFields.get('string') = '1'", + "SELECT DISTINCT * FROM /testRgn itr1 WHERE itr1.testFields.get('double') > 1D", + "SELECT DISTINCT * FROM /testRgn itr1 WHERE itr1.testFields.get('integer') > 1", + "SELECT DISTINCT * FROM /testRgn itr1 WHERE itr1.testFields.get('long') > 1L" + }; + Object r[][]= new Object[queries.length][2]; + + qs = CacheUtils.getQueryService(); + + //Execute Queries without Indexes + for (int i = 0; i < queries.length; i++) { + Query q = null; + try { + q = CacheUtils.getQueryService().newQuery(queries[i]); + CacheUtils.getLogger().info("Executing query: " + queries[i]); + r[i][0] = q.execute(); + CacheUtils.log("Executed query: " + queries[i] ); + } catch (Exception e) { + e.printStackTrace(); + fail(q.getQueryString()); + } + } + + Index i1 = qs.createIndex("Index1", IndexType.FUNCTIONAL, "itr1.testFields[*]", + "/testRgn itr1"); + + assertTrue(i1 instanceof CompactMapRangeIndex); + + //Execute Queries with Indexes + for (int i = 0; i < queries.length; i++) { + Query q = null; + try { + q = CacheUtils.getQueryService().newQuery(queries[i]); + CacheUtils.getLogger().info("Executing query: " + queries[i]); + QueryObserverImpl observer = new QueryObserverImpl(); + QueryObserverHolder.setInstance(observer); + r[i][1] = q.execute(); + CacheUtils.log("Executing query: " + queries[i] + " with index created"); + if(!observer.isIndexesUsed){ + fail("Index is NOT uesd"); + } + Iterator itr = observer.indexesUsed.iterator(); + assertTrue(itr.hasNext()); + String temp = itr.next().toString(); + assertEquals(temp,"Index1"); + + } catch (Exception e) { + e.printStackTrace(); + fail(q.getQueryString()); + } + } + StructSetOrResultsSet ssOrrs = new StructSetOrResultsSet(); + ssOrrs.CompareQueryResultsWithoutAndWithIndexes(r,queries.length,queries); + + //Test queries index not used + for (int i = 0; i < queriesIndexNotUsed.length; i++) { + Query q = null; + try { + q = CacheUtils.getQueryService().newQuery(queriesIndexNotUsed[i]); + CacheUtils.getLogger().info("Executing query: " + queriesIndexNotUsed[i]); + QueryObserverImpl observer = new QueryObserverImpl(); + QueryObserverHolder.setInstance(observer); + CacheUtils.log("Executing query: " + queriesIndexNotUsed[i] + " with index created"); + q.execute(); + assertFalse(observer.isIndexesUsed); + Iterator itr = observer.indexesUsed.iterator(); + assertFalse(itr.hasNext()); + + } catch (Exception e) { + e.printStackTrace(); + fail(q.getQueryString()); + } + } + } + + @Test + public void testCompactMapIndexUsageAllKeysOneIndex() throws Exception { + QueryService qs; + qs = CacheUtils.getQueryService(); + LocalRegion testRgn = (LocalRegion)CacheUtils.createRegion("testRgn", null); + int ID =1; + for(; ID <=30; ++ID) { + TestObject object = new TestObject(ID); + testRgn.put(ID, object); + } + String queries[] = { + "SELECT DISTINCT * FROM /testRgn itr1 WHERE itr1.testFields['string'] = '1'", + "SELECT DISTINCT * FROM /testRgn itr1 WHERE itr1.testFields['double'] > 1D", + "SELECT DISTINCT * FROM /testRgn itr1 WHERE itr1.testFields['integer'] > 1", + "SELECT DISTINCT * FROM /testRgn itr1 WHERE itr1.testFields['long'] > 1L" + }; + String queriesIndexNotUsed[] = { + "SELECT DISTINCT * FROM /testRgn itr1 WHERE itr1.testFields.get('string') = '1'", + "SELECT DISTINCT * FROM /testRgn itr1 WHERE itr1.testFields.get('double') > 1D", + "SELECT DISTINCT * FROM /testRgn itr1 WHERE itr1.testFields.get('integer') > 1", + "SELECT DISTINCT * FROM /testRgn itr1 WHERE itr1.testFields.get('long') > 1L" + }; + Object r[][]= new Object[queries.length][2]; + + qs = CacheUtils.getQueryService(); + + //Execute Queries without Indexes + for (int i = 0; i < queries.length; i++) { + Query q = null; + try { + q = CacheUtils.getQueryService().newQuery(queries[i]); + CacheUtils.getLogger().info("Executing query: " + queries[i]); + r[i][0] = q.execute(); + CacheUtils.log("Executed query: " + queries[i] ); + } catch (Exception e) { + e.printStackTrace(); + fail(q.getQueryString()); + } + } + + Index i1 = qs.createIndex("Index1", IndexType.FUNCTIONAL, "itr1.testFields['string','double','integer','long']", + "/testRgn itr1"); + + assertTrue(i1 instanceof CompactMapRangeIndex); + + //Execute Queries with Indexes + for (int i = 0; i < queries.length; i++) { + Query q = null; + try { + q = CacheUtils.getQueryService().newQuery(queries[i]); + CacheUtils.getLogger().info("Executing query: " + queries[i]); + QueryObserverImpl observer = new QueryObserverImpl(); + QueryObserverHolder.setInstance(observer); + r[i][1] = q.execute(); + CacheUtils.log("Executing query: " + queries[i] + " with index created"); + if(!observer.isIndexesUsed){ + fail("Index is NOT uesd"); + } + Iterator itr = observer.indexesUsed.iterator(); + assertTrue(itr.hasNext()); + String temp = itr.next().toString(); + assertEquals(temp,"Index1"); + + } catch (Exception e) { + e.printStackTrace(); + fail(q.getQueryString()); + } + } + StructSetOrResultsSet ssOrrs = new StructSetOrResultsSet(); + ssOrrs.CompareQueryResultsWithoutAndWithIndexes(r,queries.length,queries); + + //Test queries index not used + for (int i = 0; i < queriesIndexNotUsed.length; i++) { + Query q = null; + try { + q = CacheUtils.getQueryService().newQuery(queriesIndexNotUsed[i]); + CacheUtils.getLogger().info("Executing query: " + queriesIndexNotUsed[i]); + QueryObserverImpl observer = new QueryObserverImpl(); + QueryObserverHolder.setInstance(observer); + CacheUtils.log("Executing query: " + queriesIndexNotUsed[i] + " with index created"); + q.execute(); + assertFalse(observer.isIndexesUsed); + Iterator itr = observer.indexesUsed.iterator(); + assertFalse(itr.hasNext()); + + } catch (Exception e) { + e.printStackTrace(); + fail(q.getQueryString()); + } + } + } + + @Test + public void testCompactMapIndexUsageManyGetKeysWithVariousValueTypes() throws Exception { + QueryService qs; + qs = CacheUtils.getQueryService(); + LocalRegion testRgn = (LocalRegion)CacheUtils.createRegion("testRgn", null); + int ID =1; + for(; ID <=30; ++ID) { + TestObject object = new TestObject(ID); + testRgn.put(ID, object); + } + String queries[] = { + "SELECT DISTINCT * FROM /testRgn itr1 WHERE itr1.testFields.get('string') = '1'", + "SELECT DISTINCT * FROM /testRgn itr1 WHERE itr1.testFields.get('double') > 1D", + "SELECT DISTINCT * FROM /testRgn itr1 WHERE itr1.testFields.get('integer') > 1", + "SELECT DISTINCT * FROM /testRgn itr1 WHERE itr1.testFields.get('long') > 1L" + }; + String queriesIndexNotUsed[] = { + "SELECT DISTINCT * FROM /testRgn itr1 WHERE itr1.testFields['string'] = '1'", + "SELECT DISTINCT * FROM /testRgn itr1 WHERE itr1.testFields['double'] > 1D", + "SELECT DISTINCT * FROM /testRgn itr1 WHERE itr1.testFields['integer'] > 1", + "SELECT DISTINCT * FROM /testRgn itr1 WHERE itr1.testFields['long'] > 1L" + }; + Object r[][]= new Object[queries.length][2]; + + qs = CacheUtils.getQueryService(); + + //Execute Queries without Indexes + for (int i = 0; i < queries.length; i++) { + Query q = null; + try { + q = CacheUtils.getQueryService().newQuery(queries[i]); + CacheUtils.getLogger().info("Executing query: " + queries[i]); + r[i][0] = q.execute(); + CacheUtils.log("Executed query: " + queries[i] ); + } catch (Exception e) { + e.printStackTrace(); + fail(q.getQueryString()); + } + } + + Index i1 = qs.createIndex("Index1", IndexType.FUNCTIONAL, "itr1.testFields.get('string')", + "/testRgn itr1"); + Index i2 = qs.createIndex("Index2", IndexType.FUNCTIONAL, "itr1.testFields.get('double')", + "/testRgn itr1"); + Index i3 = qs.createIndex("Index3", IndexType.FUNCTIONAL, "itr1.testFields.get('integer')", + "/testRgn itr1"); + Index i4 = qs.createIndex("Index4", IndexType.FUNCTIONAL, "itr1.testFields.get('long')", + "/testRgn itr1"); + Index i5 = qs.createIndex("Index5", IndexType.FUNCTIONAL, "itr1.testFields.get('complex')", + "/testRgn itr1"); + + assertTrue(i1 instanceof CompactRangeIndex); + + //Execute Queries with Indexes + for (int i = 0; i < queries.length; i++) { + Query q = null; + try { + q = CacheUtils.getQueryService().newQuery(queries[i]); + CacheUtils.getLogger().info("Executing query: " + queries[i]); + QueryObserverImpl observer = new QueryObserverImpl(); + QueryObserverHolder.setInstance(observer); + r[i][1] = q.execute(); + CacheUtils.log("Executing query: " + queries[i] + " with index created"); + if(!observer.isIndexesUsed){ + fail("Index is NOT uesd"); + } + Iterator itr = observer.indexesUsed.iterator(); + assertTrue(itr.hasNext()); + String temp = itr.next().toString(); + assertEquals(temp,"Index" + (i + 1)); + + } catch (Exception e) { + e.printStackTrace(); + fail(q.getQueryString()); + } + } + StructSetOrResultsSet ssOrrs = new StructSetOrResultsSet(); + ssOrrs.CompareQueryResultsWithoutAndWithIndexes(r,queries.length,queries); + + //Test queries index not used + for (int i = 0; i < queriesIndexNotUsed.length; i++) { + Query q = null; + try { + q = CacheUtils.getQueryService().newQuery(queriesIndexNotUsed[i]); + CacheUtils.getLogger().info("Executing query: " + queriesIndexNotUsed[i]); + QueryObserverImpl observer = new QueryObserverImpl(); + QueryObserverHolder.setInstance(observer); + CacheUtils.log("Executing query: " + queriesIndexNotUsed[i] + " with index created"); + q.execute(); + assertFalse(observer.isIndexesUsed); + Iterator itr = observer.indexesUsed.iterator(); + assertFalse(itr.hasNext()); + + } catch (Exception e) { + e.printStackTrace(); + fail(q.getQueryString()); + } + } + } + + @Test + public void testCompactMapIndexUsageManyKeysWithVariousValueTypes() throws Exception { + QueryService qs; + qs = CacheUtils.getQueryService(); + LocalRegion testRgn = (LocalRegion)CacheUtils.createRegion("testRgn", null); + int ID =1; + for(; ID <=30; ++ID) { + TestObject object = new TestObject(ID); + testRgn.put(ID, object); + } + String queries[] = { + "SELECT DISTINCT * FROM /testRgn itr1 WHERE itr1.testFields['string'] = '1'", + "SELECT DISTINCT * FROM /testRgn itr1 WHERE itr1.testFields['double'] > 1D", + "SELECT DISTINCT * FROM /testRgn itr1 WHERE itr1.testFields['integer'] > 1", + "SELECT DISTINCT * FROM /testRgn itr1 WHERE itr1.testFields['long'] > 1L" + }; + String queriesIndexNotUsed[] = { + "SELECT DISTINCT * FROM /testRgn itr1 WHERE itr1.testFields.get('string') = '1'", + "SELECT DISTINCT * FROM /testRgn itr1 WHERE itr1.testFields.get('double') > 1D", + "SELECT DISTINCT * FROM /testRgn itr1 WHERE itr1.testFields.get('integer') > 1", + "SELECT DISTINCT * FROM /testRgn itr1 WHERE itr1.testFields.get('long') > 1L" + }; + Object r[][]= new Object[queries.length][2]; + + qs = CacheUtils.getQueryService(); + + //Execute Queries without Indexes + for (int i = 0; i < queries.length; i++) { + Query q = null; + try { + q = CacheUtils.getQueryService().newQuery(queries[i]); + CacheUtils.getLogger().info("Executing query: " + queries[i]); + r[i][0] = q.execute(); + CacheUtils.log("Executed query: " + queries[i] ); + } catch (Exception e) { + e.printStackTrace(); + fail(q.getQueryString()); + } + } + + Index i1 = qs.createIndex("Index1", IndexType.FUNCTIONAL, "itr1.testFields['string']", + "/testRgn itr1"); + Index i2 = qs.createIndex("Index2", IndexType.FUNCTIONAL, "itr1.testFields['double']", + "/testRgn itr1"); + Index i3 = qs.createIndex("Index3", IndexType.FUNCTIONAL, "itr1.testFields['integer']", + "/testRgn itr1"); + Index i4 = qs.createIndex("Index4", IndexType.FUNCTIONAL, "itr1.testFields['long']", + "/testRgn itr1"); + Index i5 = qs.createIndex("Index5", IndexType.FUNCTIONAL, "itr1.testFields['complex']", + "/testRgn itr1"); + + assertTrue(i1 instanceof CompactRangeIndex); + + //Execute Queries with Indexes + for (int i = 0; i < queries.length; i++) { + Query q = null; + try { + q = CacheUtils.getQueryService().newQuery(queries[i]); + CacheUtils.getLogger().info("Executing query: " + queries[i]); + QueryObserverImpl observer = new QueryObserverImpl(); + QueryObserverHolder.setInstance(observer); + r[i][1] = q.execute(); + CacheUtils.log("Executing query: " + queries[i] + " with index created"); + if(!observer.isIndexesUsed){ + fail("Index is NOT uesd"); + } + Iterator itr = observer.indexesUsed.iterator(); + assertTrue(itr.hasNext()); + String temp = itr.next().toString(); + assertEquals(temp,"Index" + (i+1)); + + } catch (Exception e) { + e.printStackTrace(); + fail(q.getQueryString()); + } + } + StructSetOrResultsSet ssOrrs = new StructSetOrResultsSet(); + ssOrrs.CompareQueryResultsWithoutAndWithIndexes(r,queries.length,queries); + + //Test queries index not used + for (int i = 0; i < queriesIndexNotUsed.length; i++) { + Query q = null; + try { + q = CacheUtils.getQueryService().newQuery(queriesIndexNotUsed[i]); + CacheUtils.getLogger().info("Executing query: " + queriesIndexNotUsed[i]); + QueryObserverImpl observer = new QueryObserverImpl(); + QueryObserverHolder.setInstance(observer); + CacheUtils.log("Executing query: " + queriesIndexNotUsed[i] + " with index created"); + q.execute(); + assertFalse(observer.isIndexesUsed); + Iterator itr = observer.indexesUsed.iterator(); + assertFalse(itr.hasNext()); + + } catch (Exception e) { + e.printStackTrace(); + fail(q.getQueryString()); + } + } + } + + @Test + public void testIndexUseSelfJoin() throws Exception { + String[] queries = {"SELECT DISTINCT * FROM /pos p1, /pos p2 where p1.status = p2.status", + "SELECT DISTINCT * FROM /pos p1, /pos p2 where p1.ID = p2.ID", + "SELECT DISTINCT * FROM /pos p1, /pos p2 where p1.P1.secId = p2.P1.secId", + "SELECT DISTINCT * FROM /pos p1, /pos p2 where p1.status = p2.status and p1.status = 'active'", + "SELECT DISTINCT * FROM /pos p1, /pos p2 where p1.ID = p2.ID and p1.ID < 2", + "SELECT * FROM /pos p1, /pos p2 where p1.ID = p2.ID", + "SELECT * FROM /pos p1, /pos p2 where p1.P1.secId = p2.P1.secId", + "SELECT * FROM /pos p1, /pos p2 where p1.status = p2.status and p1.status = 'active'", + "SELECT * FROM /pos p1, /pos p2 where p1.ID = p2.ID and p1.ID < 2"}; + + SelectResults[][] sr = new SelectResults[queries.length][2]; + for (int j = 0; j < queries.length; j++) { + Query q = qs.newQuery(queries[j]); + QueryObserverImpl observer = new QueryObserverImpl(); + QueryObserverHolder.setInstance(observer); + sr[j][0] = (SelectResults) q.execute(); + if(sr[j][0].size() == 0) { + fail("Query " + q.getQueryString() + " should have returned results"); + } + if (!observer.isIndexesUsed) { + fail("Index should have been used for query '" + q.getQueryString() + "'"); + } + } + qs.removeIndexes(); + for (int j = 0; j < queries.length; j++) { + Query q = qs.newQuery(queries[j]); + QueryObserverImpl observer = new QueryObserverImpl(); + QueryObserverHolder.setInstance(observer); + sr[j][1] = (SelectResults) q.execute(); + if(sr[j][1].size() == 0) { + fail("Query " + q.getQueryString() + " should have returned results"); + } + if (observer.isIndexesUsed) { + fail("Index should not be used for query '" + q.getQueryString() + "'"); + } + } + CacheUtils.compareResultsOfWithAndWithoutIndex(sr); + } + + @Test + public void testUndefinedInResults() throws Exception { + Portfolio p1 = new Portfolio(0); + p1.position1 = null; + region.put("0", p1); + Portfolio p2 = new Portfolio(2); + p2.position1 = null; + region.put("2", p2); + + String query = "SELECT p.position1.secId FROM /pos p where p.position1.secId != 'MSFT' "; + SelectResults[][] sr = new SelectResults[1][2]; + sr[0][0] = (SelectResults) qs.newQuery(query).execute(); + qs.removeIndexes(); + sr[0][1] = (SelectResults) qs.newQuery(query).execute(); + if(!CacheUtils.compareResultsOfWithAndWithoutIndex(sr)) { + fail("Query results not same with and without index"); + } + } + + @Test + public void testBug52444() throws Exception { + // Create partitioned region + PartitionAttributesFactory paf = new PartitionAttributesFactory(); + AttributesFactory af = new AttributesFactory(); + af.setPartitionAttributes(paf.create()); + Region region = CacheUtils.createRegion("testBug52444", af.create(), false); + + // Add index + PartitionedIndex index = (PartitionedIndex) qs.createIndex("statusIndex", "status", region.getFullPath()); + + // Do puts + for (int i=0; i<200; i++) { + region.put(i, new Portfolio(i)); + } + + // Initialize query observer + QueryObserverImpl observer = new QueryObserverImpl(); + QueryObserverHolder.setInstance(observer); + + // Create and run query + Query query = qs.newQuery("SELECT * FROM " + region.getFullPath() + " where status = 'active'"); + query.execute(); + + // Verify index was used + assertTrue(observer.isIndexesUsed); + + // Get the first index entry in the PartitionedIndex bucketIndexes and delete the index from it (to simulate what happens when a bucket is moved) + Map.Entry> firstIndexEntry = index.getFirstBucketIndex(); + assertTrue(!firstIndexEntry.getValue().isEmpty()); + index.removeFromBucketIndexes(firstIndexEntry.getKey(), firstIndexEntry.getValue().iterator().next()); + + // Verify the index was removed from the entry and the entry was removed from the bucket indexes + assertTrue(firstIndexEntry.getValue().isEmpty()); + Map.Entry> nextFirstIndexEntry = index.getFirstBucketIndex(); + assertTrue(!nextFirstIndexEntry.getValue().isEmpty()); + + // Run query again + observer.reset(); + query.execute(); + + // Verify index was still used + assertTrue(observer.isIndexesUsed); + } + + class QueryObserverImpl extends QueryObserverAdapter + { + boolean isIndexesUsed = false; + + ArrayList indexesUsed = new ArrayList(); + + public void beforeIndexLookup(Index index, int oper, Object key) { + indexesUsed.add(index.getName()); + } + + public void afterIndexLookup(Collection results) { + if (results != null) { + isIndexesUsed = true; + } + } + + public void reset() { + this.isIndexesUsed = false; + this.indexesUsed.clear(); + } + } + + public class RangeIndexTestHook implements TestHook { + + int lastHook = -1; + @Override + public void hook(int spot) throws RuntimeException { + lastHook = spot; + CacheUtils.getCache().getLogger().fine("Inside RangeIndexTestHook for spot "+ spot); + if (spot == 1) { //LT size estimate + CacheUtils.getCache().getRegion("testRgn").clear(); + } else if (spot == 2) { //GT size estimate + CacheUtils.getCache().getRegion("testRgn").clear(); + } + } + + public boolean isHooked(int spot) { + return spot==lastHook; + } + } + static class MapKeyIndexData { + int id; + public Map maap = new HashMap(); + public List liist = new ArrayList(); + public MapKeyIndexData(int id) { + this.id = id; + } + public void addKeyValue(Object key, Object value) { + this.maap.put(key,value); + this.liist.add(value); + } + } + private class TestObject { + public Map testFields = new HashMap(); + TestObject(int i) { + testFields.put("string", "String Value" + i); + testFields.put("double", (double) i); + testFields.put("integer", i); + testFields.put("long", (long) i); + testFields.put("complex", new CompObject(i)); + } + public Map getTestFields() { + return testFields; + } + } + + private class CompObject implements Comparable { + int value; + CompObject(int i) { + value = i; + } + + + public int compareTo(Object o) { + if (o instanceof CompObject) { + CompObject other = (CompObject) o; + if (value > other.value) { + return 1; + } + else if (value == other.value){ + return 0; + } + else { + return -1; + } + } + throw new ClassCastException("Could not cast " + o.getClass().getName() + " to compObject"); + } + + } + +} diff --git a/gemfire-core/src/test/java/com/gemstone/gemfire/codeAnalysis/AnalyzeSerializablesJUnitTest.java b/gemfire-core/src/test/java/com/gemstone/gemfire/codeAnalysis/AnalyzeSerializablesJUnitTest.java new file mode 100644 index 000000000000..2e2dab2780f6 --- /dev/null +++ b/gemfire-core/src/test/java/com/gemstone/gemfire/codeAnalysis/AnalyzeSerializablesJUnitTest.java @@ -0,0 +1,324 @@ +/* + * 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 com.gemstone.gemfire.codeAnalysis; + +import static org.junit.Assert.fail; + +import java.io.BufferedReader; +import java.io.File; +import java.io.FileReader; +import java.util.ArrayList; +import java.util.Collections; +import java.util.HashMap; +import java.util.LinkedList; +import java.util.List; +import java.util.Map; + +import org.junit.AfterClass; +import org.junit.Assume; +import org.junit.Before; +import org.junit.BeforeClass; +import org.junit.Ignore; +import org.junit.Test; +import org.junit.experimental.categories.Category; + +import com.gemstone.gemfire.codeAnalysis.decode.CompiledClass; +import com.gemstone.gemfire.codeAnalysis.decode.CompiledField; +import com.gemstone.gemfire.codeAnalysis.decode.CompiledMethod; +import com.gemstone.gemfire.test.junit.categories.IntegrationTest; +import com.gemstone.gemfire.util.test.TestUtil; + +/** + * + */ +@Category(IntegrationTest.class) +public class AnalyzeSerializablesJUnitTest { + /** all loaded classes */ + protected static Map classes = new HashMap(); + private static boolean ClassesNotFound; + + public AnalyzeSerializablesJUnitTest() { + } + + @Before + public void loadClasses() throws Exception { + String version = System.getProperty("java.runtime.version"); + boolean jdk17 = version != null && version.startsWith("1.8"); + // sanctioned info is based on a 1.7 compiler + Assume.assumeTrue("AnalyzeSerializables requires a Java 7 but tests are running with v"+version, jdk17); + if (classes.size() > 0) { + return; + } + System.out.println("loadClasses starting"); + + List excludedClasses = loadExcludedClasses(new File(TestUtil.getResourcePath(AnalyzeSerializablesJUnitTest.class, "excludedClasses.txt"))); + List openBugs = loadOpenBugs(new File(TestUtil.getResourcePath(AnalyzeSerializablesJUnitTest.class, "openBugs.txt"))); + excludedClasses.addAll(openBugs); + + String cp = System.getProperty("java.class.path"); + System.out.println("java classpath is " + cp); + System.out.flush(); + String[] entries = cp.split(File.pathSeparator); + String buildDirName = + "gemfire-core"+File.separatorChar + +"build"+File.separatorChar + +"classes"+File.separatorChar + +"main"; + String buildDir = null; + + for (int i=0; i loadExcludedClasses(File exclusionsFile) throws Exception { + List excludedClasses = new LinkedList(); + FileReader fr = new FileReader(exclusionsFile); + BufferedReader br = new BufferedReader(fr); + try { + String line; + while ((line = br.readLine()) != null) { + line = line.trim(); + if (line.length() > 0 && !line.startsWith("#")) { + excludedClasses.add(line); + } + } + } finally { + fr.close(); + } + return excludedClasses; + } + + protected static List loadOpenBugs(File exclusionsFile) throws Exception { + List excludedClasses = new LinkedList(); + FileReader fr = new FileReader(exclusionsFile); + BufferedReader br = new BufferedReader(fr); + try { + String line; + // each line should have bug#,full-class-name + while ((line = br.readLine()) != null) { + line = line.trim(); + if (line.length() > 0 && !line.startsWith("#")) { + String[] split = line.split(","); + if (split.length != 2) { + fail("unable to load classes due to misformatted line in openBugs.txt: " + line); + } + excludedClasses.add(line.split(",")[1].trim()); + } + } + } finally { + fr.close(); + } + return excludedClasses; + } + + private static void removeExclusions(Map classes, List exclusions) { + for (String exclusion: exclusions) { + exclusion = exclusion.replace('.', '/'); + classes.remove(exclusion); + } + } + + + @Test + public void testDataSerializables() throws Exception { + System.out.println("testDataSerializables starting"); + if (ClassesNotFound) { + System.out.println("... test not run due to not being able to locate product class files"); + return; + } + String compareToFileName = TestUtil.getResourcePath(getClass(), "sanctionedDataSerializables.txt"); + + String storeInFileName = "actualDataSerializables.dat"; + File storeInFile = new File(storeInFileName); + if (storeInFile.exists() && !storeInFile.canWrite()) { + throw new RuntimeException("can't write " + storeInFileName); + } + List toDatas = findToDatasAndFromDatas(); + CompiledClassUtils.storeClassesAndMethods(toDatas, storeInFile); + + File compareToFile = new File(compareToFileName); + if (!compareToFile.exists()) { + throw new RuntimeException("can't find " + compareToFileName); + } + if (!compareToFile.canRead()) { + throw new RuntimeException("can't read " + compareToFileName); + } + + List goldRecord = CompiledClassUtils.loadClassesAndMethods(compareToFile); + Collections.sort(goldRecord); + + String diff = CompiledClassUtils.diffSortedClassesAndMethods(goldRecord, toDatas); + if (diff.length() > 0) { + System.out.println("++++++++++++++++++++++++++++++testDataSerializables found discrepencies++++++++++++++++++++++++++++++++++++"); + System.out.println(diff); + fail(diff+"\n\nIf the class is not persisted or sent over the wire add it to the excludedClasses.txt file in the " + + "\ncom/gemstone/gemfire/codeAnalysis directory. Otherwise if this doesn't " + + "\nbreak backward compatibility move the file actualDataSerializables.dat to the codeAnalysis " + + "\ntest directory and rename to sanctionedDataSerializables.txt"); + } + } + + @Test + public void testSerializables() throws Exception { + System.out.println("testSerializables starting"); + System.out.flush(); + if (ClassesNotFound) { + System.out.println("... test not run due to not being able to locate product class files"); + return; + } + String compareToFileName = TestUtil.getResourcePath(getClass(), "sanctionedSerializables.txt"); + File compareToFile = new File(compareToFileName); + + String storeInFileName = "actualSerializables.dat"; + File storeInFile = new File(storeInFileName); + if (storeInFile.exists() && !storeInFile.canWrite()) { + throw new RuntimeException("can't write " + storeInFileName); + } + + List serializables = findSerializables(); + reset(); + CompiledClassUtils.storeClassesAndVariables(serializables, storeInFile); + + + if (!compareToFile.exists()) { + throw new RuntimeException("can't find " + compareToFileName); + } + if (!compareToFile.canRead()) { + throw new RuntimeException("can't read " + compareToFileName); + } + List goldRecord = CompiledClassUtils.loadClassesAndVariables(compareToFile); + Collections.sort(goldRecord); + + String diff = CompiledClassUtils.diffSortedClassesAndVariables(goldRecord, serializables); + classes.clear(); + if (diff.length() > 0) { + System.out.println("++++++++++++++++++++++++++++++testSerializables found discrepencies++++++++++++++++++++++++++++++++++++"); + System.out.println(diff); + fail(diff+"\n\nIf the class is not persisted or sent over the wire add it to the excludedClasses.txt file in the " + + "\n/com/gemstone/gemfire/codeAnalysis/ directory. Otherwise if this doesn't " + + "\nbreak backward compatibility move the file actualSerializables.dat to the " + + "\ncodeAnalysis test directory and rename to sanctionedSerializables.txt"); + } + } + + /** + * load the classes from the given files and directories + * @param excludedClasses names of classes to exclude + */ + public static void loadClasses(String directory, boolean recursive, List excludedClasses) { + String[] filenames = new String[]{ directory }; + List classFiles = CompiledClassUtils.findClassFiles("", filenames, recursive); + Map newClasses = CompiledClassUtils.parseClassFiles(classFiles); + removeExclusions(newClasses, excludedClasses); + classes.putAll(newClasses); + } + + + public static void loadClassesFromBuild(File buildDir, List excludedClasses) { + Map newClasses = CompiledClassUtils.parseClassFilesInDir(buildDir); + removeExclusions(newClasses, excludedClasses); + classes.putAll(newClasses); + } + + /** + * load the classes from the given jar file + */ + public static void loadClasses(File jar, List excludedClasses) { + Map newClasses = CompiledClassUtils.parseClassFilesInJar(jar); + removeExclusions(newClasses, excludedClasses); + classes.putAll(newClasses); + } + + /** + * clears all loaded classes + */ + public void reset() { + classes.clear(); + } + + public List findToDatasAndFromDatas() { + List result = new ArrayList(); + for (Map.Entry dentry: classes.entrySet()) { + CompiledClass dclass = dentry.getValue(); + ClassAndMethods entry = null; + for (int i=0; i findSerializables() { + List result = new ArrayList(2000); + for (Map.Entry entry: classes.entrySet()) { + CompiledClass dclass = entry.getValue(); + System.out.println("processing class " + dclass.fullyQualifiedName()); + System.out.flush(); + if (!dclass.isInterface() && dclass.isSerializableAndNotDataSerializable()) { + ClassAndVariables cav = new ClassAndVariables(dclass); + for (int i=0; i afterCreateCallbacks = new ArrayList(); + private final List afterReuseCallbacks = new ArrayList(); + private final List beforeCloseCallbacks = new ArrayList(); + private final TestLifecycleListener listener = new TestLifecycleListener(this.afterCreateCallbacks, this.afterReuseCallbacks, this.beforeCloseCallbacks); + + @After + public void tearDown() throws Exception { + LifecycleListener.removeLifecycleListener(this.listener); + this.afterCreateCallbacks.clear(); + this.afterReuseCallbacks.clear(); + this.beforeCloseCallbacks.clear(); + SimpleMemoryAllocatorImpl.freeOffHeapMemory(); + } + + @Test + public void testAddRemoveListener() { + LifecycleListener.addLifecycleListener(this.listener); + LifecycleListener.removeLifecycleListener(this.listener); + + UnsafeMemoryChunk slab = new UnsafeMemoryChunk(1024); // 1k + SimpleMemoryAllocatorImpl ma = SimpleMemoryAllocatorImpl.create(new NullOutOfOffHeapMemoryListener(), new NullOffHeapMemoryStats(), + new UnsafeMemoryChunk[] { slab }); + + Assert.assertEquals(0, this.afterCreateCallbacks.size()); + Assert.assertEquals(0, this.afterReuseCallbacks.size()); + Assert.assertEquals(0, this.beforeCloseCallbacks.size()); + + ma.close(); + + Assert.assertEquals(0, this.afterCreateCallbacks.size()); + Assert.assertEquals(0, this.afterReuseCallbacks.size()); + Assert.assertEquals(0, this.beforeCloseCallbacks.size()); + + LifecycleListener.removeLifecycleListener(this.listener); + } + + @Test + public void testCallbacksAreCalledAfterCreate() { + LifecycleListener.addLifecycleListener(this.listener); + UnsafeMemoryChunk slab = new UnsafeMemoryChunk(1024); // 1k + SimpleMemoryAllocatorImpl ma = SimpleMemoryAllocatorImpl.create(new NullOutOfOffHeapMemoryListener(), new NullOffHeapMemoryStats(), + new UnsafeMemoryChunk[] { slab }); + + Assert.assertEquals(1, this.afterCreateCallbacks.size()); + Assert.assertEquals(0, this.afterReuseCallbacks.size()); + Assert.assertEquals(0, this.beforeCloseCallbacks.size()); + + closeAndFree(ma); + + Assert.assertEquals(1, this.afterCreateCallbacks.size()); + Assert.assertEquals(0, this.afterReuseCallbacks.size()); + Assert.assertEquals(1, this.beforeCloseCallbacks.size()); + + LifecycleListener.removeLifecycleListener(this.listener); + } + + @Test + public void testCallbacksAreCalledAfterReuse() { + + LifecycleListener.addLifecycleListener(this.listener); + + System.setProperty(SimpleMemoryAllocatorImpl.FREE_OFF_HEAP_MEMORY_PROPERTY, "false"); + + UnsafeMemoryChunk slab = new UnsafeMemoryChunk(1024); // 1k + SimpleMemoryAllocatorImpl ma = createAllocator(new NullOutOfOffHeapMemoryListener(), new NullOffHeapMemoryStats(), new UnsafeMemoryChunk[] { slab }); + + Assert.assertEquals(1, this.afterCreateCallbacks.size()); + Assert.assertEquals(0, this.afterReuseCallbacks.size()); + Assert.assertEquals(0, this.beforeCloseCallbacks.size()); + + ma.close(); + + Assert.assertEquals(1, this.afterCreateCallbacks.size()); + Assert.assertEquals(0, this.afterReuseCallbacks.size()); + Assert.assertEquals(1, this.beforeCloseCallbacks.size()); + + ma = createAllocator(new NullOutOfOffHeapMemoryListener(), new NullOffHeapMemoryStats(), null); + + Assert.assertEquals(1, this.afterCreateCallbacks.size()); + Assert.assertEquals(1, this.afterReuseCallbacks.size()); + Assert.assertEquals(1, this.beforeCloseCallbacks.size()); + + SimpleMemoryAllocatorImpl ma2 = createAllocator(new NullOutOfOffHeapMemoryListener(), new NullOffHeapMemoryStats(), new UnsafeMemoryChunk[] { slab }); + assertEquals(null, ma2); + + Assert.assertEquals(1, this.afterCreateCallbacks.size()); + Assert.assertEquals(1, this.afterReuseCallbacks.size()); + Assert.assertEquals(1, this.beforeCloseCallbacks.size()); + + ma.close(); + + Assert.assertEquals(1, this.afterCreateCallbacks.size()); + Assert.assertEquals(1, this.afterReuseCallbacks.size()); + Assert.assertEquals(2, this.beforeCloseCallbacks.size()); + } + + private SimpleMemoryAllocatorImpl createAllocator(OutOfOffHeapMemoryListener ooohml, OffHeapMemoryStats ohms, UnsafeMemoryChunk[] slab) { + try { + return SimpleMemoryAllocatorImpl.create(ooohml, ohms, slab); + } catch (IllegalStateException e) { + return null; + } + } + + private void closeAndFree(SimpleMemoryAllocatorImpl ma) { + System.setProperty(SimpleMemoryAllocatorImpl.FREE_OFF_HEAP_MEMORY_PROPERTY, "true"); + try { + ma.close(); + } finally { + System.clearProperty(SimpleMemoryAllocatorImpl.FREE_OFF_HEAP_MEMORY_PROPERTY); + } + } + + @Test + public void testCallbacksAreCalledAfterReuseWithFreeTrue() { + + LifecycleListener.addLifecycleListener(this.listener); + + UnsafeMemoryChunk slab = new UnsafeMemoryChunk(1024); // 1k + SimpleMemoryAllocatorImpl ma = SimpleMemoryAllocatorImpl.create(new NullOutOfOffHeapMemoryListener(), new NullOffHeapMemoryStats(), new UnsafeMemoryChunk[] { slab }); + + Assert.assertEquals(1, this.afterCreateCallbacks.size()); + Assert.assertEquals(0, this.afterReuseCallbacks.size()); + Assert.assertEquals(0, this.beforeCloseCallbacks.size()); + + closeAndFree(ma); + + Assert.assertEquals(1, this.afterCreateCallbacks.size()); + Assert.assertEquals(0, this.afterReuseCallbacks.size()); + Assert.assertEquals(1, this.beforeCloseCallbacks.size()); + + slab = new UnsafeMemoryChunk(1024); // 1k + SimpleMemoryAllocatorImpl ma2 = SimpleMemoryAllocatorImpl.create(new NullOutOfOffHeapMemoryListener(), new NullOffHeapMemoryStats(), new UnsafeMemoryChunk[] { slab }); + + Assert.assertEquals(2, this.afterCreateCallbacks.size()); + Assert.assertEquals(0, this.afterReuseCallbacks.size()); + Assert.assertEquals(1, this.beforeCloseCallbacks.size()); + + closeAndFree(ma); + + Assert.assertEquals(2, this.afterCreateCallbacks.size()); + Assert.assertEquals(0, this.afterReuseCallbacks.size()); + Assert.assertEquals(2, this.beforeCloseCallbacks.size()); + } + + static final class LifecycleListenerCallback { + private final SimpleMemoryAllocatorImpl allocator; + private final long timeStamp; + private final Throwable creationTime; + + LifecycleListenerCallback(SimpleMemoryAllocatorImpl allocator) { + this.allocator = allocator; + this.timeStamp = System.currentTimeMillis(); + this.creationTime = new Exception(); + } + } + + static class TestLifecycleListener implements LifecycleListener { + private final List afterCreateCallbacks; + private final List afterReuseCallbacks; + private final List beforeCloseCallbacks; + + TestLifecycleListener(List afterCreateCallbacks, List afterReuseCallbacks, + List beforeCloseCallbacks) { + this.afterCreateCallbacks = afterCreateCallbacks; + this.afterReuseCallbacks = afterReuseCallbacks; + this.beforeCloseCallbacks = beforeCloseCallbacks; + } + + @Override + public void afterCreate(SimpleMemoryAllocatorImpl allocator) { + this.afterCreateCallbacks.add(new LifecycleListenerCallback(allocator)); + } + + @Override + public void afterReuse(SimpleMemoryAllocatorImpl allocator) { + this.afterReuseCallbacks.add(new LifecycleListenerCallback(allocator)); + } + + @Override + public void beforeClose(SimpleMemoryAllocatorImpl allocator) { + this.beforeCloseCallbacks.add(new LifecycleListenerCallback(allocator)); + } + } +} diff --git a/gemfire-core/src/test/java/com/gemstone/gemfire/internal/offheap/OffHeapHelperJUnitTest.java b/gemfire-core/src/test/java/com/gemstone/gemfire/internal/offheap/OffHeapHelperJUnitTest.java new file mode 100644 index 000000000000..a8a58f9c2e68 --- /dev/null +++ b/gemfire-core/src/test/java/com/gemstone/gemfire/internal/offheap/OffHeapHelperJUnitTest.java @@ -0,0 +1,313 @@ +/* + * 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 com.gemstone.gemfire.internal.offheap; + +import static org.junit.Assert.*; +import static org.mockito.Mockito.mock; +import static org.hamcrest.CoreMatchers.*; + +import java.nio.ByteBuffer; + +import org.junit.After; +import org.junit.Before; +import org.junit.Test; +import org.junit.experimental.categories.Category; + +import com.gemstone.gemfire.LogWriter; +import com.gemstone.gemfire.internal.cache.EntryEventImpl; +import com.gemstone.gemfire.internal.cache.VMCachedDeserializable; +import com.gemstone.gemfire.test.junit.categories.UnitTest; + +/** + */ +@Category(UnitTest.class) +public class OffHeapHelperJUnitTest extends AbstractStoredObjectTestBase { + + private MemoryChunkWithRefCount storedObject = null; + private Object deserializedRegionEntryValue = null; + private byte[] serializedRegionEntryValue = null; + private MemoryAllocator ma; + + @Before + public void setUp() { + OutOfOffHeapMemoryListener ooohml = mock(OutOfOffHeapMemoryListener.class); + OffHeapMemoryStats stats = mock(OffHeapMemoryStats.class); + LogWriter lw = mock(LogWriter.class); + + ma = SimpleMemoryAllocatorImpl.create(ooohml, stats, lw, 3, OffHeapStorage.MIN_SLAB_SIZE * 3, + OffHeapStorage.MIN_SLAB_SIZE); + + } + + /** + * Extracted from JUnit setUp() to reduce test overhead for cases where + * offheap memory isn't needed. + */ + private void allocateOffHeapSerialized() { + Object regionEntryValue = getValue(); + storedObject = createValueAsSerializedStoredObject(regionEntryValue); + deserializedRegionEntryValue = storedObject.getValueAsDeserializedHeapObject(); + serializedRegionEntryValue = storedObject.getSerializedValue(); + } + + private void allocateOffHeapDeserialized() { + Object regionEntryValue = getValue(); + storedObject = createValueAsUnserializedStoredObject(regionEntryValue); + deserializedRegionEntryValue = storedObject.getValueAsDeserializedHeapObject(); + serializedRegionEntryValue = storedObject.getSerializedValue(); + } + + @After + public void tearDown() { + SimpleMemoryAllocatorImpl.freeOffHeapMemory(); + } + + @Override + public Object getValue() { + return Long.valueOf(Long.MAX_VALUE); + } + + @Override + public byte[] getValueAsByteArray() { + return convertValueToByteArray(getValue()); + } + + private byte[] convertValueToByteArray(Object value) { + return ByteBuffer.allocate(Long.SIZE / Byte.SIZE).putLong((Long) value).array(); + } + + @Override + public Object convertByteArrayToObject(byte[] valueInByteArray) { + return ByteBuffer.wrap(valueInByteArray).getLong(); + } + + @Override + public Object convertSerializedByteArrayToObject(byte[] valueInSerializedByteArray) { + return EntryEventImpl.deserialize(valueInSerializedByteArray); + } + + @Override + protected MemoryChunkWithRefCount createValueAsUnserializedStoredObject(Object value) { + byte[] valueInByteArray; + if (value instanceof Long) { + valueInByteArray = convertValueToByteArray(value); + } else { + valueInByteArray = (byte[]) value; + } + + boolean isSerialized = false; + boolean isCompressed = false; + + MemoryChunkWithRefCount createdObject = createChunk(valueInByteArray, isSerialized, isCompressed); + return createdObject; + } + + @Override + protected MemoryChunkWithRefCount createValueAsSerializedStoredObject(Object value) { + byte[] valueInSerializedByteArray = EntryEventImpl.serialize(value); + + boolean isSerialized = true; + boolean isCompressed = false; + + MemoryChunkWithRefCount createdObject = createChunk(valueInSerializedByteArray, isSerialized, isCompressed); + return createdObject; + } + + private GemFireChunk createChunk(byte[] v, boolean isSerialized, boolean isCompressed) { + GemFireChunk chunk = (GemFireChunk) ma.allocateAndInitialize(v, isSerialized, isCompressed, GemFireChunk.TYPE); + return chunk; + } + + @Test + public void getHeapFormOfSerializedStoredObjectReturnsDeserializedObject() { + allocateOffHeapSerialized(); + Object heapObject = OffHeapHelper.getHeapForm(storedObject); + assertThat("getHeapForm returns non-null object", heapObject, notNullValue()); + assertThat("Heap and off heap objects are different objects", heapObject, is(not(storedObject))); + assertThat("Deserialzed values of offHeap object and returned object are equal", heapObject, + is(equalTo(deserializedRegionEntryValue))); + } + + @Test + public void getHeapFormOfNonOffHeapObjectReturnsOriginal() { + Object testObject = getValue(); + Object heapObject = OffHeapHelper.getHeapForm(testObject); + assertNotNull(heapObject); + assertSame(testObject, heapObject); + } + + @Test + public void getHeapFormWithNullReturnsNull() { + Object testObject = null; + Object returnObject = OffHeapHelper.getHeapForm(testObject); + assertThat(returnObject, is(equalTo(null))); + } + + @Test + public void copyAndReleaseWithNullReturnsNull() { + Object testObject = null; + Object returnObject = OffHeapHelper.copyAndReleaseIfNeeded(testObject); + assertThat(returnObject, is(equalTo(null))); + } + + @Test + public void copyAndReleaseWithRetainedDeserializedObjectDecreasesRefCnt() { + allocateOffHeapDeserialized(); + assertTrue(storedObject.retain()); + assertThat("Retained chunk ref count", storedObject.getRefCount(), is(2)); + OffHeapHelper.copyAndReleaseIfNeeded(storedObject); + assertThat("Chunk ref count decreases", storedObject.getRefCount(), is(1)); + } + + @Test + public void copyAndReleaseWithNonRetainedObjectDecreasesRefCnt() { + allocateOffHeapDeserialized(); + // assertTrue(storedObject.retain()); + assertThat("Retained chunk ref count", storedObject.getRefCount(), is(1)); + OffHeapHelper.copyAndReleaseIfNeeded(storedObject); + assertThat("Chunk ref count decreases", storedObject.getRefCount(), is(0)); + } + + @Test + public void copyAndReleaseWithDeserializedReturnsValueOfOriginal() { + allocateOffHeapDeserialized(); + assertTrue(storedObject.retain()); + Object returnObject = OffHeapHelper.copyAndReleaseIfNeeded(storedObject); + assertThat(returnObject, is(equalTo(deserializedRegionEntryValue))); + } + + @Test + public void copyAndReleaseWithSerializedReturnsValueOfOriginal() { + allocateOffHeapSerialized(); + assertTrue(storedObject.retain()); + Object returnObject = ((VMCachedDeserializable) OffHeapHelper.copyAndReleaseIfNeeded(storedObject)) + .getSerializedValue(); + assertThat(returnObject, is(equalTo(serializedRegionEntryValue))); + } + + @Test + public void copyAndReleaseNonStoredObjectReturnsOriginal() { + Object testObject = getValue(); + Object returnObject = OffHeapHelper.copyAndReleaseIfNeeded(testObject); + assertThat(returnObject, is(testObject)); + } + + @Test + public void copyIfNeededWithNullReturnsNull() { + Object testObject = null; + Object returnObject = OffHeapHelper.copyAndReleaseIfNeeded(testObject); + assertThat(returnObject, is(equalTo(null))); + } + + @Test + public void copyIfNeededNonOffHeapReturnsOriginal() { + Object testObject = getValue(); + Object returnObject = OffHeapHelper.copyIfNeeded(testObject); + assertThat(returnObject, is(testObject)); + } + + @Test + public void copyIfNeededOffHeapSerializedReturnsValueOfOriginal() { + allocateOffHeapSerialized(); + Object returnObject = ((VMCachedDeserializable) OffHeapHelper.copyIfNeeded(storedObject)).getSerializedValue(); + assertThat(returnObject, is(equalTo(serializedRegionEntryValue))); + } + + @Test + public void copyIfNeededOffHeapDeserializedReturnsOriginal() { + allocateOffHeapDeserialized(); + Object returnObject = OffHeapHelper.copyIfNeeded(storedObject); + assertThat(returnObject, is(equalTo(deserializedRegionEntryValue))); + } + + @Test + public void copyIfNeededWithOffHeapDeserializedObjDoesNotRelease() { + allocateOffHeapDeserialized(); + int initialRefCountOfObject = storedObject.getRefCount(); + OffHeapHelper.copyIfNeeded(storedObject); + assertThat("Ref count after copy", storedObject.getRefCount(), is(initialRefCountOfObject)); + } + + @Test + public void copyIfNeededWithOffHeapSerializedObjDoesNotRelease() { + allocateOffHeapSerialized(); + int initialRefCountOfObject = storedObject.getRefCount(); + OffHeapHelper.copyIfNeeded(storedObject); + assertThat("Ref count after copy", storedObject.getRefCount(), is(initialRefCountOfObject)); + } + + @Test + public void releaseOfOffHeapDecrementsRefCount() { + allocateOffHeapSerialized(); + assertThat("Initial Ref Count", storedObject.getRefCount(), is(1)); + OffHeapHelper.release(storedObject); + assertThat("Ref Count Decremented", storedObject.getRefCount(), is(0)); + } + + @Test + public void releaseOfOffHeapReturnsTrue() { + allocateOffHeapSerialized(); + assertThat("Releasing OFfHeap object is true", OffHeapHelper.release(storedObject), is(true)); + } + + @Test + public void releaseOfNonOffHeapReturnsFalse() { + Object testObject = getValue(); + assertThat("Releasing OFfHeap object is true", OffHeapHelper.release(testObject), is(false)); + } + + @Test + public void releaseWithOutTrackingOfOffHeapDecrementsRefCount() { + allocateOffHeapSerialized(); + assertThat("Initial Ref Count", storedObject.getRefCount(), is(1)); + OffHeapHelper.releaseWithNoTracking(storedObject); + assertThat("Ref Count Decremented", storedObject.getRefCount(), is(0)); + } + + @Test + public void releaseWithoutTrackingOfOffHeapReturnsTrue() { + allocateOffHeapSerialized(); + assertThat("Releasing OFfHeap object is true", OffHeapHelper.releaseWithNoTracking(storedObject), is(true)); + } + + @Test + public void releaseWithoutTrackingOfNonOffHeapReturnsFalse() { + Object testObject = getValue(); + assertThat("Releasing OFfHeap object is true", OffHeapHelper.releaseWithNoTracking(testObject), is(false)); + } + + @Test + public void releaseAndTrackOwnerOfOffHeapDecrementsRefCount() { + allocateOffHeapSerialized(); + assertThat("Initial Ref Count", storedObject.getRefCount(), is(1)); + OffHeapHelper.releaseAndTrackOwner(storedObject, "owner"); + assertThat("Ref Count Decremented", storedObject.getRefCount(), is(0)); + } + + @Test + public void releaseAndTrackOwnerOfOffHeapReturnsTrue() { + allocateOffHeapSerialized(); + assertThat("Releasing OFfHeap object is true", OffHeapHelper.releaseAndTrackOwner(storedObject, "owner"), is(true)); + } + + @Test + public void releaseAndTrackOwnerOfNonOffHeapReturnsFalse() { + Object testObject = getValue(); + assertThat("Releasing OFfHeap object is true", OffHeapHelper.releaseAndTrackOwner(testObject, "owner"), is(false)); + } + +} diff --git a/gemfire-core/src/test/java/com/gemstone/gemfire/internal/offheap/OffHeapRegionBase.java b/gemfire-core/src/test/java/com/gemstone/gemfire/internal/offheap/OffHeapRegionBase.java new file mode 100644 index 000000000000..572bbca37750 --- /dev/null +++ b/gemfire-core/src/test/java/com/gemstone/gemfire/internal/offheap/OffHeapRegionBase.java @@ -0,0 +1,592 @@ +/* + * 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 com.gemstone.gemfire.internal.offheap; + +import static org.junit.Assert.assertEquals; +import static org.junit.Assert.assertFalse; +import static org.junit.Assert.assertNotNull; +import static org.junit.Assert.assertTrue; +import static org.junit.Assert.fail; + +import java.io.Serializable; +import java.util.Arrays; +import java.util.Properties; + +import org.junit.Test; + +import com.gemstone.gemfire.OutOfOffHeapMemoryException; +import com.gemstone.gemfire.cache.CacheFactory; +import com.gemstone.gemfire.cache.EntryEvent; +import com.gemstone.gemfire.cache.Region; +import com.gemstone.gemfire.cache.RegionShortcut; +import com.gemstone.gemfire.cache.util.CacheListenerAdapter; +import com.gemstone.gemfire.compression.Compressor; +import com.gemstone.gemfire.compression.SnappyCompressor; +import com.gemstone.gemfire.internal.cache.EntryEventImpl; +import com.gemstone.gemfire.internal.cache.GemFireCacheImpl; +import com.gemstone.gemfire.internal.offheap.annotations.OffHeapIdentifier; +import com.gemstone.gemfire.internal.offheap.annotations.Released; +import com.gemstone.gemfire.internal.offheap.annotations.Retained; +import com.gemstone.gemfire.pdx.PdxReader; +import com.gemstone.gemfire.pdx.PdxSerializable; +import com.gemstone.gemfire.pdx.PdxWriter; +import com.gemstone.gemfire.test.dunit.WaitCriterion; + +/** + * Basic test of regions that use off heap storage. + * Subclasses exist for the different types of offheap store. + * + * + */ +public abstract class OffHeapRegionBase { + + public abstract void configureOffHeapStorage(); + public abstract void unconfigureOffHeapStorage(); + public abstract int perObjectOverhead(); + + private GemFireCacheImpl createCache() { + return createCache(false); + } + private GemFireCacheImpl createCache(boolean isPersistent) { + configureOffHeapStorage(); + Properties props = new Properties(); + props.setProperty("locators", ""); + props.setProperty("mcast-port", "0"); + props.setProperty("off-heap-memory-size", getOffHeapMemorySize()); + GemFireCacheImpl result = (GemFireCacheImpl) new CacheFactory(props).setPdxPersistent(isPersistent).create(); + unconfigureOffHeapStorage(); + return result; + } + private void closeCache(GemFireCacheImpl gfc, boolean keepOffHeapAllocated) { + gfc.close(); + if (!keepOffHeapAllocated) { + SimpleMemoryAllocatorImpl.freeOffHeapMemory(); + } + // TODO cleanup default disk store files + } + + protected abstract String getOffHeapMemorySize(); + + @Test + public void testSizeAllocation() { + // prevent cache from closing in reaction to ooom + System.setProperty(OffHeapStorage.STAY_CONNECTED_ON_OUTOFOFFHEAPMEMORY_PROPERTY, "true"); + GemFireCacheImpl gfc = createCache(); + try { + MemoryAllocator ma = gfc.getOffHeapStore(); + assertNotNull(ma); + final long offHeapSize = ma.getFreeMemory(); + assertEquals(0, ma.getUsedMemory()); + MemoryChunk mc1 = ma.allocate(64, null); + assertEquals(64+perObjectOverhead(), ma.getUsedMemory()); + assertEquals(offHeapSize-(64+perObjectOverhead()), ma.getFreeMemory()); + mc1.release(); + assertEquals(offHeapSize, ma.getFreeMemory()); + assertEquals(0, ma.getUsedMemory()); + // do an allocation larger than the slab size + // TODO: currently the compact will product slabs bigger than the max slab size + // (see the todo comment on compact() in SimpleMemoryAllocator). + // So we request 20m here since that it the total size. + try { + ma.allocate(1024*1024*20, null); + fail("Expected an out of heap exception"); + } catch (OutOfOffHeapMemoryException expected) { + } + assertEquals(0, ma.getUsedMemory()); + assertFalse(gfc.isClosed()); + } finally { + System.clearProperty(OffHeapStorage.STAY_CONNECTED_ON_OUTOFOFFHEAPMEMORY_PROPERTY); + closeCache(gfc, false); + } + } + + public void keep_testOutOfOffHeapMemoryErrorClosesCache() { + // this test is redundant but may be useful + final GemFireCacheImpl gfc = createCache(); + try { + MemoryAllocator ma = gfc.getOffHeapStore(); + assertNotNull(ma); + final long offHeapSize = ma.getFreeMemory(); + assertEquals(0, ma.getUsedMemory()); + MemoryChunk mc1 = ma.allocate(64, null); + assertEquals(64+perObjectOverhead(), ma.getUsedMemory()); + assertEquals(offHeapSize-(64+perObjectOverhead()), ma.getFreeMemory()); + mc1.release(); + assertEquals(offHeapSize, ma.getFreeMemory()); + assertEquals(0, ma.getUsedMemory()); + // do an allocation larger than the slab size + try { + ma.allocate(1024*1024*10, null); + fail("Expected an out of heap exception"); + } catch (OutOfOffHeapMemoryException expected) { + // passed + } + assertEquals(0, ma.getUsedMemory()); + + final WaitCriterion waitForDisconnect = new WaitCriterion() { + public boolean done() { + return gfc.isClosed(); + } + public String description() { + return "Waiting for disconnect to complete"; + } + }; + com.gemstone.gemfire.test.dunit.Wait.waitForCriterion(waitForDisconnect, 10*1000, 100, true); + + assertTrue(gfc.isClosed()); + } finally { + closeCache(gfc, false); + } + } + + @Test + public void testByteArrayAllocation() { + GemFireCacheImpl gfc = createCache(); + try { + MemoryAllocator ma = gfc.getOffHeapStore(); + assertNotNull(ma); + final long offHeapSize = ma.getFreeMemory(); + assertEquals(0, ma.getUsedMemory()); + byte[] data = new byte[] {1,2,3,4,5,6,7,8}; + MemoryChunk mc1 = (MemoryChunk)ma.allocateAndInitialize(data, false, false, null); + assertEquals(data.length+perObjectOverhead(), ma.getUsedMemory()); + assertEquals(offHeapSize-(data.length+perObjectOverhead()), ma.getFreeMemory()); + byte[] data2 = new byte[data.length]; + mc1.readBytes(0, data2); + assertTrue(Arrays.equals(data, data2)); + mc1.release(); + assertEquals(offHeapSize, ma.getFreeMemory()); + assertEquals(0, ma.getUsedMemory()); + // try some small byte[] that don't need to be stored off heap. + data = new byte[] {1,2,3,4,5,6,7}; + StoredObject so1 = ma.allocateAndInitialize(data, false, false, null); + assertEquals(0, ma.getUsedMemory()); + assertEquals(offHeapSize, ma.getFreeMemory()); + data2 = new byte[data.length]; + data2 = (byte[])so1.getDeserializedForReading(); + assertTrue(Arrays.equals(data, data2)); + } finally { + closeCache(gfc, false); + } + } + + private void doRegionTest(final RegionShortcut rs, final String rName) { + doRegionTest(rs, rName, false/*compressed*/); + } + + @SuppressWarnings({ "rawtypes", "unchecked" }) + private void doRegionTest(final RegionShortcut rs, final String rName, boolean compressed) { + boolean isPersistent = rs == RegionShortcut.LOCAL_PERSISTENT || rs == RegionShortcut.REPLICATE_PERSISTENT || rs == RegionShortcut.PARTITION_PERSISTENT; + GemFireCacheImpl gfc = createCache(isPersistent); + Region r = null; + try { + gfc.setCopyOnRead(true); + final MemoryAllocator ma = gfc.getOffHeapStore(); + assertNotNull(ma); + assertEquals(0, ma.getUsedMemory()); + Compressor compressor = null; + if (compressed) { + compressor = SnappyCompressor.getDefaultInstance(); + } + r = gfc.createRegionFactory(rs).setOffHeap(true).setCompressor(compressor).create(rName); + assertEquals(true, r.isEmpty()); + assertEquals(0, ma.getUsedMemory()); + Object data = new Integer(123456789); + r.put("key1", data); + //System.out.println("After put of Integer value off heap used memory=" + ma.getUsedMemory()); + assertTrue(ma.getUsedMemory() == 0); + assertEquals(data, r.get("key1")); + r.invalidate("key1"); + assertEquals(0, ma.getUsedMemory()); + r.put("key1", data); + assertTrue(ma.getUsedMemory() == 0); + long usedBeforeUpdate = ma.getUsedMemory(); + r.put("key1", data); + assertEquals(usedBeforeUpdate, ma.getUsedMemory()); + assertEquals(data, r.get("key1")); + r.destroy("key1"); + assertEquals(0, ma.getUsedMemory()); + + data = new Long(0x007FFFFFL); + r.put("key1", data); + if (!compressed) { + assertTrue(ma.getUsedMemory() == 0); + } + assertEquals(data, r.get("key1")); + data = new Long(0xFF8000000L); + r.put("key1", data); + if (!compressed) { + assertTrue(ma.getUsedMemory() == 0); + } + assertEquals(data, r.get("key1")); + + + // now lets set data to something that will be stored offheap + data = new Long(Long.MAX_VALUE); + r.put("key1", data); + assertEquals(data, r.get("key1")); + //System.out.println("After put of Integer value off heap used memory=" + ma.getUsedMemory()); + assertTrue(ma.getUsedMemory() > 0); + data = new Long(Long.MIN_VALUE); + r.put("key1", data); + assertEquals(data, r.get("key1")); + //System.out.println("After put of Integer value off heap used memory=" + ma.getUsedMemory()); + assertTrue(ma.getUsedMemory() > 0); + r.invalidate("key1"); + assertEquals(0, ma.getUsedMemory()); + r.put("key1", data); + assertTrue(ma.getUsedMemory() > 0); + usedBeforeUpdate = ma.getUsedMemory(); + r.put("key1", data); + assertEquals(usedBeforeUpdate, ma.getUsedMemory()); + assertEquals(data, r.get("key1")); + r.destroy("key1"); + assertEquals(0, ma.getUsedMemory()); + + // confirm that byte[] do use off heap + { + byte[] originalBytes = new byte[1024]; + Object oldV = r.put("byteArray", originalBytes); + long startUsedMemory = ma.getUsedMemory(); + assertEquals(null, oldV); + byte[] readBytes = (byte[]) r.get("byteArray"); + if (originalBytes == readBytes) { + fail("Expected different byte[] identity"); + } + if (!Arrays.equals(readBytes, originalBytes)) { + fail("Expected byte array contents to be equal"); + } + assertEquals(startUsedMemory, ma.getUsedMemory()); + oldV = r.put("byteArray", originalBytes); + if (!compressed) { + assertEquals(null, oldV); // we default to old value being null for offheap + } + assertEquals(startUsedMemory, ma.getUsedMemory()); + + readBytes = (byte[])r.putIfAbsent("byteArray", originalBytes); + if (originalBytes == readBytes) { + fail("Expected different byte[] identity"); + } + if (!Arrays.equals(readBytes, originalBytes)) { + fail("Expected byte array contents to be equal"); + } + assertEquals(startUsedMemory, ma.getUsedMemory()); + if (!r.replace("byteArray", readBytes, originalBytes)) { + fail("Expected replace to happen"); + } + assertEquals(startUsedMemory, ma.getUsedMemory()); + byte[] otherBytes = new byte[1024]; + otherBytes[1023] = 1; + if (r.replace("byteArray", otherBytes, originalBytes)) { + fail("Expected replace to not happen"); + } + if (r.replace("byteArray", "bogus string", originalBytes)) { + fail("Expected replace to not happen"); + } + if (r.remove("byteArray", "bogus string")) { + fail("Expected remove to not happen"); + } + assertEquals(startUsedMemory, ma.getUsedMemory()); + + if (!r.remove("byteArray", originalBytes)) { + fail("Expected remove to happen"); + } + assertEquals(0, ma.getUsedMemory()); + oldV = r.putIfAbsent("byteArray", "string value"); + assertEquals(null, oldV); + assertEquals("string value", r.get("byteArray")); + if (r.replace("byteArray", "string valuE", originalBytes)) { + fail("Expected replace to not happen"); + } + if (!r.replace("byteArray", "string value", originalBytes)) { + fail("Expected replace to happen"); + } + oldV = r.destroy("byteArray"); // we default to old value being null for offheap + if (!compressed) { + assertEquals(null, oldV); + } + MyCacheListener listener = new MyCacheListener(); + r.getAttributesMutator().addCacheListener(listener); + try { + Object valueToReplace = "string value1"; + r.put("byteArray", valueToReplace); + assertEquals(null, listener.ohOldValue); + if (!compressed) { + assertEquals("string value1", listener.ohNewValue.getDeserializedForReading()); + valueToReplace = listener.ohNewValue; + } + if (!r.replace("byteArray", valueToReplace, "string value2")) { + fail("expected replace to happen"); + } + if (!compressed) { + assertEquals("string value2", listener.ohNewValue.getDeserializedForReading()); + assertEquals("string value1", listener.ohOldValue.getDeserializedForReading()); + } + // make sure that a custom equals/hashCode are not used when comparing values. + + } finally { + r.getAttributesMutator().removeCacheListener(listener); + } + } + assertTrue(ma.getUsedMemory() > 0); + { + Object key = "MyValueWithPartialEquals"; + MyValueWithPartialEquals v1 = new MyValueWithPartialEquals("s1"); + MyValueWithPartialEquals v2 = new MyValueWithPartialEquals("s2"); + MyValueWithPartialEquals v3 = new MyValueWithPartialEquals("s1"); + r.put(key, v1); + try { + if (r.replace(key, v2, "should not happen")) { + fail("v1 should not be equal to v2 on an offheap region"); + } + if (!r.replace(key, v3, "should happen")) { + fail("v1 should be equal to v3 on an offheap region"); + } + r.put(key, v1); + if (r.remove(key, v2)) { + fail("v1 should not be equal to v2 on an offheap region"); + } + if (!r.remove(key, v3)) { + fail("v1 should be equal to v3 on an offheap region"); + } + } finally { + r.remove(key); + } + } + { + Object key = "MyPdxWithPartialEquals"; + MyPdxWithPartialEquals v1 = new MyPdxWithPartialEquals("s", "1"); + MyPdxWithPartialEquals v2 = new MyPdxWithPartialEquals("s", "2"); + MyPdxWithPartialEquals v3 = new MyPdxWithPartialEquals("t", "1"); + r.put(key, v1); + try { + if (r.replace(key, v3, "should not happen")) { + fail("v1 should not be equal to v3 on an offheap region"); + } + if (!r.replace(key, v2, "should happen")) { + fail("v1 should be equal to v2 on an offheap region"); + } + r.put(key, v1); + if (r.remove(key, v3)) { + fail("v1 should not be equal to v3 on an offheap region"); + } + if (!r.remove(key, v2)) { + fail("v1 should be equal to v2 on an offheap region"); + } + } finally { + r.remove(key); + } + } + byte[] value = new byte[1024]; + /*while (value != null) */ { + r.put("byteArray", value); + } + r.remove("byteArray"); + assertEquals(0, ma.getUsedMemory()); + + r.put("key1", data); + assertTrue(ma.getUsedMemory() > 0); + r.invalidateRegion(); + assertEquals(0, ma.getUsedMemory()); + + r.put("key1", data); + assertTrue(ma.getUsedMemory() > 0); + try { + r.clear(); + assertEquals(0, ma.getUsedMemory()); + } catch (UnsupportedOperationException ok) { + } + + r.put("key1", data); + assertTrue(ma.getUsedMemory() > 0); + if (r.getAttributes().getDataPolicy().withPersistence()) { + r.put("key2", Integer.valueOf(1234567890)); + r.put("key3", new Long(0x007FFFFFL)); + r.put("key4", new Long(0xFF8000000L)); + assertEquals(4, r.size()); + r.close(); + assertEquals(0, ma.getUsedMemory()); + // simple test of recovery + r = gfc.createRegionFactory(rs).setOffHeap(true).create(rName); + assertEquals(4, r.size()); + assertEquals(data, r.get("key1")); + assertEquals(Integer.valueOf(1234567890), r.get("key2")); + assertEquals(new Long(0x007FFFFFL), r.get("key3")); + assertEquals(new Long(0xFF8000000L), r.get("key4")); + closeCache(gfc, true); + assertEquals(0, ma.getUsedMemory()); + gfc = createCache(); + if (ma != gfc.getOffHeapStore()) { + fail("identity of offHeapStore changed when cache was recreated"); + } + r = gfc.createRegionFactory(rs).setOffHeap(true).create(rName); + assertTrue(ma.getUsedMemory() > 0); + assertEquals(4, r.size()); + assertEquals(data, r.get("key1")); + assertEquals(Integer.valueOf(1234567890), r.get("key2")); + assertEquals(new Long(0x007FFFFFL), r.get("key3")); + assertEquals(new Long(0xFF8000000L), r.get("key4")); + } + + r.destroyRegion(); + assertEquals(0, ma.getUsedMemory()); + + } finally { + if (r != null && !r.isDestroyed()) { + r.destroyRegion(); + } + closeCache(gfc, false); + } + + } + + /** + * This class has an equals that does not compare all its bytes. + */ + private static class MyValueWithPartialEquals implements Serializable { + private static final long serialVersionUID = 1L; + private final String value; + public MyValueWithPartialEquals(String v) { + this.value = v; + } + @Override public boolean equals(Object other) { + if (other instanceof MyValueWithPartialEquals) { + MyValueWithPartialEquals o = (MyValueWithPartialEquals) other; + // just compare the first char + return this.value.charAt(0) == o.value.charAt(0); + } else { + return false; + } + } + } + /** + * This class has an equals that does not compare all its bytes. + */ + private static class MyPdxWithPartialEquals implements PdxSerializable { + private String base; + private String value; + public MyPdxWithPartialEquals(String b, String v) { + this.base = b; + this.value = v; + } + public MyPdxWithPartialEquals() { + } + @Override + public void toData(PdxWriter writer) { + writer.writeString("base", this.base); + writer.writeString("value", this.value); + writer.markIdentityField("base"); + } + @Override + public void fromData(PdxReader reader) { + this.base = reader.readString("base"); + this.value = reader.readString("value"); + } + } + + @SuppressWarnings("rawtypes") + private static class MyCacheListener extends CacheListenerAdapter { + @Retained(OffHeapIdentifier.TEST_OFF_HEAP_REGION_BASE_LISTENER) + public StoredObject ohOldValue; + @Retained(OffHeapIdentifier.TEST_OFF_HEAP_REGION_BASE_LISTENER) + public StoredObject ohNewValue; + + /** + * This method retains both ohOldValue and ohNewValue + */ + @Retained(OffHeapIdentifier.TEST_OFF_HEAP_REGION_BASE_LISTENER) + private void setEventData(EntryEvent e) { + close(); + EntryEventImpl event = (EntryEventImpl) e; + this.ohOldValue = event.getOffHeapOldValue(); + this.ohNewValue = event.getOffHeapNewValue(); + } + + @Override + public void afterCreate(EntryEvent e) { + setEventData(e); + } + + @Override + public void afterDestroy(EntryEvent e) { + setEventData(e); + } + + @Override + public void afterInvalidate(EntryEvent e) { + setEventData(e); + } + + @Override + public void afterUpdate(EntryEvent e) { + setEventData(e); + } + + @Released(OffHeapIdentifier.TEST_OFF_HEAP_REGION_BASE_LISTENER) + @Override + public void close() { + if (this.ohOldValue instanceof Chunk) { + ((Chunk)this.ohOldValue).release(); + } + if (this.ohNewValue instanceof Chunk) { + ((Chunk)this.ohNewValue).release(); + } + } + } + + @Test + public void testPR() { + doRegionTest(RegionShortcut.PARTITION, "pr1"); + } + @Test + public void testPRCompressed() { + doRegionTest(RegionShortcut.PARTITION, "pr2", true); + } + @Test + public void testReplicate() { + doRegionTest(RegionShortcut.REPLICATE, "rep1"); + } + @Test + public void testReplicateCompressed() { + doRegionTest(RegionShortcut.REPLICATE, "rep2", true); + } + @Test + public void testLocal() { + doRegionTest(RegionShortcut.LOCAL, "local1"); + } + @Test + public void testLocalCompressed() { + doRegionTest(RegionShortcut.LOCAL, "local2", true); + } + @Test + public void testLocalPersistent() { + doRegionTest(RegionShortcut.LOCAL_PERSISTENT, "localPersist1"); + } + @Test + public void testLocalPersistentCompressed() { + doRegionTest(RegionShortcut.LOCAL_PERSISTENT, "localPersist2", true); + } + @Test + public void testPRPersistent() { + doRegionTest(RegionShortcut.PARTITION_PERSISTENT, "prPersist1"); + } + @Test + public void testPRPersistentCompressed() { + doRegionTest(RegionShortcut.PARTITION_PERSISTENT, "prPersist2", true); + } + +} diff --git a/gemfire-core/src/test/java/com/gemstone/gemfire/internal/offheap/OffHeapValidationJUnitTest.java b/gemfire-core/src/test/java/com/gemstone/gemfire/internal/offheap/OffHeapValidationJUnitTest.java new file mode 100755 index 000000000000..117dbeb3c209 --- /dev/null +++ b/gemfire-core/src/test/java/com/gemstone/gemfire/internal/offheap/OffHeapValidationJUnitTest.java @@ -0,0 +1,539 @@ +/* + * 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 com.gemstone.gemfire.internal.offheap; + +import static org.junit.Assert.assertEquals; +import static org.junit.Assert.assertFalse; +import static org.junit.Assert.assertNotNull; +import static org.junit.Assert.assertNull; +import static org.junit.Assert.assertTrue; +import static org.junit.Assert.fail; + +import java.io.IOException; +import java.io.Serializable; +import java.sql.Timestamp; +import java.util.ArrayList; +import java.util.Arrays; +import java.util.Collection; +import java.util.Collections; +import java.util.Comparator; +import java.util.Date; +import java.util.HashMap; +import java.util.HashSet; +import java.util.Hashtable; +import java.util.IdentityHashMap; +import java.util.LinkedHashSet; +import java.util.LinkedList; +import java.util.List; +import java.util.Map; +import java.util.Properties; +import java.util.Stack; +import java.util.TreeMap; +import java.util.TreeSet; +import java.util.UUID; +import java.util.Vector; + +import org.junit.After; +import org.junit.Before; +import org.junit.Test; +import org.junit.experimental.categories.Category; + +import com.gemstone.gemfire.DataSerializer; +import com.gemstone.gemfire.cache.CacheFactory; +import com.gemstone.gemfire.cache.Region; +import com.gemstone.gemfire.cache.RegionShortcut; +import com.gemstone.gemfire.compression.SnappyCompressor; +import com.gemstone.gemfire.internal.HeapDataOutputStream; +import com.gemstone.gemfire.internal.Version; +import com.gemstone.gemfire.internal.cache.GemFireCacheImpl; +import com.gemstone.gemfire.internal.cache.LocalRegion; +import com.gemstone.gemfire.test.junit.categories.IntegrationTest; + +/** + * Basic integration tests for validating the off-heap implementation. + * + */ +@Category(IntegrationTest.class) +public class OffHeapValidationJUnitTest { + + private GemFireCacheImpl cache; + + @Before + public void setUp() throws Exception { + this.cache = createCache(); + } + + @After + public void tearDown() throws Exception { + closeCache(this.cache); + } + + protected GemFireCacheImpl createCache() { + Properties props = new Properties(); + props.setProperty("locators", ""); + props.setProperty("mcast-port", "0"); + props.setProperty("off-heap-memory-size", getOffHeapMemorySize()); + GemFireCacheImpl result = (GemFireCacheImpl) new CacheFactory(props).create(); + return result; + } + + protected void closeCache(GemFireCacheImpl gfc) { + gfc.close(); + } + + protected String getOffHeapMemorySize() { + return "2m"; + } + + protected RegionShortcut getRegionShortcut() { + return RegionShortcut.REPLICATE; + } + + protected String getRegionName() { + return "region1"; + } + + @Test + public void testMemoryInspection() throws IOException { + // validate initial state + MemoryAllocator allocator = this.cache.getOffHeapStore(); + assertNotNull(allocator); + MemoryInspector inspector = allocator.getMemoryInspector(); + assertNotNull(inspector); + inspector.createSnapshot(); + try { + MemoryBlock firstBlock = inspector.getFirstBlock(); + assertNotNull(firstBlock); + assertEquals(1024*1024*2, firstBlock.getBlockSize()); + assertEquals("N/A", firstBlock.getDataType()); + assertEquals(-1, firstBlock.getFreeListId()); + assertTrue(firstBlock.getMemoryAddress() > 0); + assertNull(firstBlock.getNextBlock()); + assertEquals(0, firstBlock.getRefCount()); + assertEquals(0, firstBlock.getSlabId()); + assertEquals(MemoryBlock.State.UNUSED, firstBlock.getState()); + assertFalse(firstBlock.isCompressed()); + assertFalse(firstBlock.isSerialized()); + } finally { + inspector.clearSnapshot(); + } + + // create off-heap region + Region region = this.cache.createRegionFactory(getRegionShortcut()).setOffHeap(true).create(getRegionName()); + Region compressedRegion = this.cache.createRegionFactory(getRegionShortcut()).setOffHeap(true).setCompressor(SnappyCompressor.getDefaultInstance()).create(getRegionName()+"Compressed"); + + // perform some ops + List expected = new ArrayList(); + + // Chunk.OFF_HEAP_HEADER_SIZE + 4 ? + + putString(region, expected); + putCompressedString(compressedRegion, expected); + putDate(region, expected); + putByteArray(region, expected); + putCompressedByteArray(compressedRegion, expected); + putByteArrayArray(region, expected); + putShortArray(region, expected); + putStringArray(region, expected); + putObjectArray(region, expected); + putArrayList(region, expected); + putLinkedList(region, expected); + putHashSet(region, expected); + putLinkedHashSet(region, expected); + putHashMap(region, expected); + putIdentityHashMap(region, expected); + putHashtable(region, expected); + putProperties(region, expected); + putVector(region, expected); + putStack(region, expected); + putTreeMap(region, expected); + putTreeSet(region, expected); + putClass(region, expected); + putUUID(region, expected); + putTimestamp(region, expected); + putSerializableClass(region, expected); + + // TODO: USER_DATA_SERIALIZABLE + + // TODO: PDX + + // TODO: PDX_ENUM + + // TODO: GEMFIRE_ENUM + + // TODO: PDX_INLINE_ENUM + + // validate inspection + inspector.createSnapshot(); + try { + MemoryBlock firstBlock = inspector.getFirstBlock(); + assertEquals(MemoryBlock.State.UNUSED, firstBlock.getState()); + + //System.out.println(((SimpleMemoryAllocatorImpl)inspector).getSnapshot()); + + // sort the ExpectedValues into the same order as the MemberBlocks from inspector + Collections.sort(expected, + new Comparator() { + @Override + public int compare(ExpectedValues o1, ExpectedValues o2) { + return Long.valueOf(o1.memoryAddress).compareTo(o2.memoryAddress); + } + }); + + int i = 0; + MemoryBlock block = firstBlock.getNextBlock(); + while (block != null) { + ExpectedValues values = expected.get(i); + assertEquals(i + ":" + values.dataType, values.blockSize, block.getBlockSize()); + assertEquals(i + ":" + values.dataType, values.dataType, block.getDataType()); + assertEquals(i + ":" + values.dataType, values.freeListId, block.getFreeListId()); + assertEquals(i + ":" + values.dataType, values.memoryAddress, block.getMemoryAddress()); + assertEquals(i + ":" + values.dataType, values.refCount, block.getRefCount()); + assertEquals(i + ":" + values.dataType, values.slabId, block.getSlabId()); + assertEquals(i + ":" + values.dataType, values.isCompressed, block.isCompressed()); + assertEquals(i + ":" + values.dataType, values.isSerialized, block.isSerialized()); + // compare block.getDataValue() but only for String types + if (values.dataType.equals("java.lang.String")) { + Object obj = block.getDataValue(); + assertNotNull(block.toString(), obj); + assertTrue(obj instanceof String); + assertEquals("this is a string", (String)obj); + } + if ((values.dataType.contains("byte [") && values.dataType.lastIndexOf('[') == values.dataType.indexOf('[')) || values.dataType.startsWith("compressed")) { + assertTrue("for dataType=" + values.dataType + " expected " + Arrays.toString((byte[])values.dataValue) + " but was " + Arrays.toString((byte[])block.getDataValue()), + Arrays.equals((byte[])values.dataValue, (byte[])block.getDataValue())); + } else if (values.dataType.contains("[")) { + // TODO: multiple dimension arrays or non-byte arrays + } else if (values.dataValue instanceof Collection) { + int diff = joint((Collection)values.dataValue, (Collection)block.getDataValue()); + assertEquals(i + ":" + values.dataType, 0, diff); + } else if (values.dataValue instanceof IdentityHashMap) { + // TODO + } else if (values.dataValue instanceof Map) { + int diff = joint((Map)values.dataValue, (Map)block.getDataValue()); + assertEquals(i + ":" + values.dataType, 0, diff); + } else { + assertEquals(i + ":" + values.dataType, values.dataValue, block.getDataValue()); + } + block = block.getNextBlock(); + i++; + } + assertEquals("All blocks: "+inspector.getAllBlocks(), expected.size(), i); + } finally { + inspector.clearSnapshot(); + } + + // perform more ops + + // validate more inspection + + } + + /** + * Returns -1 if c1 is missing an element in c2, 1 if c2 is missing an element + * in c1, or 0 is they contain the exact same elements. + * @throws NullPointerException if either c1 or c2 is null + */ + private static int joint(Collection c1, Collection c2) { + if (c1.size() < c2.size()) { + return -1; + } else if (c2.size() < c1.size()) { + return 1; + } + Collection c3 = new ArrayList(); + c3.addAll(c1); + c3.removeAll(c2); + if (c3.size() > 0) { + return -1; + } + c3.addAll(c2); + c3.removeAll(c1); + if (c3.size() > 0) { + return 1; + } + return 0; + } + + /** + * Returns -1 if m1 is missing a key in m2, 1 if m2 is missing a key + * in m1, or 0 is they contain the exact same keys. + * @throws NullPointerException if either c1 or c2 is null + */ + private static int joint(Map m1, Map m2) { + if (m1.size() < m2.size()) { + return -1; + } else if (m2.size() < m1.size()) { + return 1; + } + Collection c3 = new ArrayList(); + c3.addAll(m1.keySet()); + c3.removeAll(m2.keySet()); + if (c3.size() > 0) { + return -1; + } + c3.addAll(m2.keySet()); + c3.removeAll(m1.keySet()); + if (c3.size() > 0) { + return 1; + } + return 0; + } + + private long getMemoryAddress(Region region, String key) { + Object entry = ((LocalRegion) region).getRegionEntry(key)._getValue(); + assertTrue(entry instanceof Chunk); + long memoryAddress = ((Chunk)entry).getMemoryAddress(); + assertTrue(memoryAddress > 0); + return memoryAddress; + } + + private void putString(Region region, List expected) { + String key = "keyString"; + String value = "this is a string"; + region.put(key, value); + expected.add(new ExpectedValues(value, value.length()*2, "java.lang.String", -1, getMemoryAddress(region, key), 1, 0, false, true)); + } + + private void putCompressedString(Region region, List expected) throws IOException { + String key = "keyString"; + String value = "this is a string"; + region.put(key, value); + HeapDataOutputStream hdos = new HeapDataOutputStream(Version.CURRENT); + DataSerializer.writeObject(value, hdos); + byte[] uncompressedBytes = hdos.toByteArray(); + byte[] expectedValue = SnappyCompressor.getDefaultInstance().compress(uncompressedBytes); + expected.add(new ExpectedValues(expectedValue, 32, "compressed object of size " + expectedValue.length, -1, getMemoryAddress(region, key), 1, 0, true, true)); + } + + private void putDate(Region region, List expected) { + String key = "keyDate"; + Date value = new Date(); + region.put(key, value); + expected.add(new ExpectedValues(value, 24, "java.util.Date", -1, getMemoryAddress(region, key), 1, 0, false, true)); + } + + private void putByteArray(Region region, List expected) { + String key = "keyByteArray"; + byte[] value = new byte[10]; + region.put(key, value); + expected.add(new ExpectedValues(value, 24, "byte[10]", -1, getMemoryAddress(region, key), 1, 0, false, false)); + } + private void putCompressedByteArray(Region region, List expected) throws IOException { + String key = "keyByteArray"; + byte[] value = new byte[10]; + region.put(key, value); + byte[] expectedValue = SnappyCompressor.getDefaultInstance().compress(value); + expected.add(new ExpectedValues(expectedValue, 24, "compressed byte[" + expectedValue.length + "]", -1, getMemoryAddress(region, key), 1, 0, true, false)); + } + + private void putByteArrayArray(Region region, List expected) { + String key = "keyByteArrayArray"; + byte[][] value = new byte[10][10]; + region.put(key, value); + expected.add(new ExpectedValues(value, 120, "byte[][]", -1, getMemoryAddress(region, key), 1, 0, false, true)); + } + + private void putShortArray(Region region, List expected) { + String key = "keyShortArray("; + short[] value = new short[10]; + region.put(key, value); + expected.add(new ExpectedValues(value, 32, "short[]", -1, getMemoryAddress(region, key), 1, 0, false, true)); + } + + private void putStringArray(Region region, List expected) { + String key = "keyStringArray"; + String[] value = new String[10]; + region.put(key, value); + expected.add(new ExpectedValues(value, 24, "java.lang.String[]", -1, getMemoryAddress(region, key), 1, 0, false, true)); + } + + private void putObjectArray(Region region, List expected) { + String key = "keyObjectArray"; + Object[] value = new Object[10]; + region.put(key, value); + expected.add(new ExpectedValues(value, 40, "java.lang.Object[]", -1, getMemoryAddress(region, key), 1, 0, false, true)); + } + + private void putArrayList(Region region, List expected) { + String key = "keyArrayList"; + ArrayList value = new ArrayList(); + value.add("string 1"); + value.add("string 2"); + region.put(key, value); + expected.add(new ExpectedValues(value, 32, "java.util.ArrayList", -1, getMemoryAddress(region, key), 1, 0, false, true)); + } + + private void putLinkedList(Region region, List expected) { + String key = "keyLinkedList"; + LinkedList value = new LinkedList(); + value.add("string 1"); + value.add("string 2"); + region.put(key, value); + expected.add(new ExpectedValues(value, 32, "java.util.LinkedList", -1, getMemoryAddress(region, key), 1, 0, false, true)); + } + + private void putHashSet(Region region, List expected) { + String key = "keyHashSet"; + HashSet value = new HashSet(); + value.add("string 1"); + value.add("string 2"); + region.put(key, value); + expected.add(new ExpectedValues(value, 32, "java.util.HashSet", -1, getMemoryAddress(region, key), 1, 0, false, true)); + } + + private void putLinkedHashSet(Region region, List expected) { + String key = "keyLinkedHashSet"; + LinkedHashSet value = new LinkedHashSet(); + value.add("string 1"); + value.add("string 2"); + region.put(key, value); + expected.add(new ExpectedValues(value, 32, "java.util.LinkedHashSet", -1, getMemoryAddress(region, key), 1, 0, false, true)); + } + + private void putHashMap(Region region, List expected) { + String key = "keyHashMap"; + HashMap value = new HashMap(); + value.put("1", "string 1"); + value.put("2", "string 2"); + region.put(key, value); + expected.add(new ExpectedValues(value, 40, "java.util.HashMap", -1, getMemoryAddress(region, key), 1, 0, false, true)); + } + + private void putIdentityHashMap(Region region, List expected) { + String key = "keyIdentityHashMap"; + IdentityHashMap value = new IdentityHashMap(); + value.put("1", "string 1"); + value.put("2", "string 2"); + region.put(key, value); + expected.add(new ExpectedValues(value, 40, "java.util.IdentityHashMap", -1, getMemoryAddress(region, key), 1, 0, false, true)); + } + + private void putHashtable(Region region, List expected) { + String key = "keyHashtable"; + Hashtable value = new Hashtable(); + value.put("1", "string 1"); + value.put("2", "string 2"); + region.put(key, value); + expected.add(new ExpectedValues(value, 40, "java.util.Hashtable", -1, getMemoryAddress(region, key), 1, 0, false, true)); + } + + private void putProperties(Region region, List expected) { + String key = "keyProperties"; + Properties value = new Properties(); + value.put("1", "string 1"); + value.put("2", "string 2"); + region.put(key, value); + expected.add(new ExpectedValues(value, 40, "java.util.Properties", -1, getMemoryAddress(region, key), 1, 0, false, true)); + } + + private void putVector(Region region, List expected) { + String key = "keyVector"; + Vector value = new Vector(); + value.add("string 1"); + value.add("string 2"); + region.put(key, value); + expected.add(new ExpectedValues(value, 32, "java.util.Vector", -1, getMemoryAddress(region, key), 1, 0, false, true)); + } + + private void putStack(Region region, List expected) { + String key = "keyStack"; + Stack value = new Stack(); + value.add("string 1"); + value.add("string 2"); + region.put(key, value); + expected.add(new ExpectedValues(value, 32, "java.util.Stack", -1, getMemoryAddress(region, key), 1, 0, false, true)); + } + + private void putTreeMap(Region region, List expected) { + String key = "keyTreeMap"; + TreeMap value = new TreeMap(); + value.put("1", "string 1"); + value.put("2", "string 2"); + region.put(key, value); + expected.add(new ExpectedValues(value, 48, "java.util.TreeMap", -1, getMemoryAddress(region, key), 1, 0, false, true)); + } + + private void putTreeSet(Region region, List expected) { + String key = "keyTreeSet"; + TreeSet value = new TreeSet(); + value.add("string 1"); + value.add("string 2"); + region.put(key, value); + expected.add(new ExpectedValues(value, 40, "java.util.TreeSet", -1, getMemoryAddress(region, key), 1, 0, false, true)); + } + + private void putClass(Region region, List expected) { + String key = "keyClass"; + Class value = String.class; + region.put(key, value); + expected.add(new ExpectedValues(value, 32, "java.lang.Class", -1, getMemoryAddress(region, key), 1, 0, false, true)); + } + + private void putUUID(Region region, List expected) { + String key = "keyUUID"; + UUID value = UUID.randomUUID(); + region.put(key, value); + expected.add(new ExpectedValues(value, 32, "java.util.UUID", -1, getMemoryAddress(region, key), 1, 0, false, true)); + } + + private void putTimestamp(Region region, List expected) { + String key = "keyTimestamp"; + Timestamp value = new Timestamp(System.currentTimeMillis()); + region.put(key, value); + expected.add(new ExpectedValues(value, 24, "java.sql.Timestamp", -1, getMemoryAddress(region, key), 1, 0, false, true)); + } + + private void putSerializableClass(Region region, List expected) { + String key = "keySerializableClass"; + SerializableClass value = new SerializableClass(); + region.put(key, value); + expected.add(new ExpectedValues(value, 112, "java.io.Serializable:" + SerializableClass.class.getName(), -1, getMemoryAddress(region, key), 1, 0, false, true)); + } + + static class ExpectedValues { + final Object dataValue; + final int blockSize; + final String dataType; + final int freeListId; + final long memoryAddress; + final int refCount; + final int slabId; + final boolean isCompressed; + final boolean isSerialized; + ExpectedValues(Object dataValue, int blockSize, String dataType, int freeListId, long memoryAddress, int refCount, int slabId, boolean isCompressed, boolean isSerialized) { + this.dataValue = dataValue; + this.blockSize = blockSize; + this.dataType = dataType; + this.freeListId = freeListId; + this.memoryAddress = memoryAddress; + this.refCount = refCount; + this.slabId = slabId; + this.isCompressed = isCompressed; + this.isSerialized = isSerialized; + } + } + + @SuppressWarnings("serial") + public static class SerializableClass implements Serializable { + public boolean equals(Object obj) { + return obj instanceof SerializableClass; + } + public int hashCode() { + return 42; + } + } +} diff --git a/gemfire-core/src/test/java/com/gemstone/gemfire/internal/offheap/SimpleMemoryAllocatorFillPatternJUnitTest.java b/gemfire-core/src/test/java/com/gemstone/gemfire/internal/offheap/SimpleMemoryAllocatorFillPatternJUnitTest.java new file mode 100644 index 000000000000..59b3ed24d56e --- /dev/null +++ b/gemfire-core/src/test/java/com/gemstone/gemfire/internal/offheap/SimpleMemoryAllocatorFillPatternJUnitTest.java @@ -0,0 +1,182 @@ +/* + * 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 com.gemstone.gemfire.internal.offheap; + +import static org.junit.Assert.*; +import static com.googlecode.catchexception.CatchException.*; + +import org.junit.After; +import org.junit.Before; +import org.junit.Test; +import org.junit.experimental.categories.Category; + +import com.gemstone.gemfire.test.junit.categories.UnitTest; + +import junit.framework.TestCase; + +/** + * Tests fill pattern validation for the {@link SimpleMemoryAllocatorImpl}. + */ +@Category(UnitTest.class) +public class SimpleMemoryAllocatorFillPatternJUnitTest { + + /** Size of single test slab.*/ + private static final int SLAB_SIZE = 1024 * 1024 * 50; + + /** Canned data for write operations. */ + private static final byte[] WRITE_BYTES = new String("Some string data.").getBytes(); + + /** Chunk size for basic huge allocation test. */ + private static final int HUGE_CHUNK_SIZE = 1024 * 200; + + /** The number of chunks to allocate in order to force compaction. */ + private static final int COMPACTION_CHUNKS = 3; + + /** Our slab size divided in three (with some padding for safety). */ + private static final int COMPACTION_CHUNK_SIZE = (SLAB_SIZE / COMPACTION_CHUNKS) - 1024; + + /** This should force compaction when allocated. */ + private static final int FORCE_COMPACTION_CHUNK_SIZE = COMPACTION_CHUNK_SIZE * 2; + + /** Our test victim. */ + private SimpleMemoryAllocatorImpl allocator = null; + + /** Our test victim's memory slab. */ + private UnsafeMemoryChunk slab = null; + + /** + * Enables fill validation and creates the test victim. + */ + @Before + public void setUp() throws Exception { + System.setProperty("gemfire.validateOffHeapWithFill", "true"); + this.slab = new UnsafeMemoryChunk(SLAB_SIZE); + this.allocator = SimpleMemoryAllocatorImpl.create(new NullOutOfOffHeapMemoryListener(), new NullOffHeapMemoryStats(), new UnsafeMemoryChunk[]{this.slab}); + } + + /** + * Frees off heap memory. + */ + @After + public void tearDown() throws Exception { + SimpleMemoryAllocatorImpl.freeOffHeapMemory(); + System.clearProperty("gemfire.validateOffHeapWithFill"); + } + + /** + * This tests the fill pattern for a single tiny Chunk allocation. + * @throws Exception + */ + @Test + public void testFillPatternBasicForTinyAllocations() throws Exception { + doFillPatternBasic(1024); + } + + /** + * This tests the fill pattern for a single huge Chunk allocation. + * @throws Exception + */ + @Test + public void testFillPatternBasicForHugeAllocations() throws Exception { + doFillPatternBasic(HUGE_CHUNK_SIZE); + } + + private void doFillPatternBasic(final int chunkSize) { + /* + * Pull a chunk off the fragment. This will have no fill because + * it is a "fresh" chunk. + */ + Chunk chunk = (Chunk) this.allocator.allocate(chunkSize, null); + + /* + * Chunk should have valid fill from initial fragment allocation. + */ + chunk.validateFill(); + + // "Dirty" the chunk so the release has something to fill over + chunk.writeBytes(Chunk.MIN_CHUNK_SIZE + 1, WRITE_BYTES); + + // This should free the Chunk (ref count == 1) + chunk.release(); + + /* + * This chunk should have a fill because it was reused from the + * free list (assuming no fragmentation at this point...) + */ + chunk = (Chunk) this.allocator.allocate(chunkSize, null); + + // Make sure we have a fill this time + chunk.validateFill(); + + // Give the fill code something to write over during the release + chunk.writeBytes(Chunk.MIN_CHUNK_SIZE + 1, WRITE_BYTES); + chunk.release(); + + // Again, make sure the release implemented the fill + chunk.validateFill(); + + // "Dirty up" the free chunk + chunk.writeBytes(Chunk.MIN_CHUNK_SIZE + 1, WRITE_BYTES); + + catchException(chunk).validateFill(); + assertTrue(caughtException() instanceof IllegalStateException); + assertEquals("Fill pattern violated for chunk " + chunk.getMemoryAddress() + " with size " + chunk.getSize(), caughtException().getMessage()); + + } + + /** + * This tests that fill validation is working properly on newly created fragments after + * a compaction. + * @throws Exception + */ + @Test + public void testFillPatternAfterCompaction() throws Exception { + /* + * Stores our allocated memory. + */ + Chunk[] allocatedChunks = new Chunk[COMPACTION_CHUNKS]; + + /* + * Use up most of our memory + * Our memory looks like [ ][ ][ ] + */ + for(int i =0;i < allocatedChunks.length;++i) { + allocatedChunks[i] = (Chunk) this.allocator.allocate(COMPACTION_CHUNK_SIZE, null); + allocatedChunks[i].validateFill(); + } + + /* + * Release some of our allocated chunks. + */ + for(int i=0;i < 2;++i) { + allocatedChunks[i].release(); + allocatedChunks[i].validateFill(); + } + + /* + * Now, allocate another chunk that is slightly larger than one of + * our initial chunks. This should force a compaction causing our + * memory to look like [ ][ ]. + */ + Chunk slightlyLargerChunk = (Chunk) this.allocator.allocate(FORCE_COMPACTION_CHUNK_SIZE, null); + + /* + * Make sure the compacted memory has the fill validation. + */ + slightlyLargerChunk.validateFill(); + } +} diff --git a/gemfire-core/src/test/java/com/gemstone/gemfire/security/SecurityTestUtil.java b/gemfire-core/src/test/java/com/gemstone/gemfire/security/SecurityTestUtil.java new file mode 100644 index 000000000000..7fd6b99db738 --- /dev/null +++ b/gemfire-core/src/test/java/com/gemstone/gemfire/security/SecurityTestUtil.java @@ -0,0 +1,1874 @@ +package com.gemstone.gemfire.security; + +/* + * 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. + */ + + +import java.io.File; +import java.io.FileOutputStream; +import java.io.IOException; +import java.io.PrintStream; +import java.lang.reflect.Field; +import java.lang.reflect.Modifier; +import java.util.ArrayList; +import java.util.HashMap; +import java.util.Iterator; +import java.util.List; +import java.util.Map; +import java.util.Properties; +import java.util.Set; + +import javax.net.ServerSocketFactory; +import javax.net.SocketFactory; +import javax.net.ssl.KeyManager; +import javax.net.ssl.SSLContext; +import javax.net.ssl.SSLContextSpi; +import javax.net.ssl.SSLServerSocketFactory; +import javax.net.ssl.SSLSocketFactory; +import javax.net.ssl.TrustManager; + +import com.gemstone.gemfire.LogWriter; +import com.gemstone.gemfire.cache.AttributesFactory; +import com.gemstone.gemfire.cache.Cache; +import com.gemstone.gemfire.cache.CacheFactory; +import com.gemstone.gemfire.cache.DataPolicy; +import com.gemstone.gemfire.cache.DynamicRegionFactory; +import com.gemstone.gemfire.cache.Region; +import com.gemstone.gemfire.cache.RegionAttributes; +import com.gemstone.gemfire.cache.Scope; +import com.gemstone.gemfire.cache.client.NoAvailableServersException; +import com.gemstone.gemfire.cache.client.Pool; +import com.gemstone.gemfire.cache.client.PoolFactory; +import com.gemstone.gemfire.cache.client.PoolManager; +import com.gemstone.gemfire.cache.client.ServerConnectivityException; +import com.gemstone.gemfire.cache.client.ServerOperationException; +import com.gemstone.gemfire.cache.client.ServerRefusedConnectionException; +import com.gemstone.gemfire.cache.client.internal.PoolImpl; +import com.gemstone.gemfire.cache.client.internal.ProxyCache; +import com.gemstone.gemfire.cache.execute.Execution; +import com.gemstone.gemfire.cache.execute.Function; +import com.gemstone.gemfire.cache.execute.FunctionException; +import com.gemstone.gemfire.cache.execute.FunctionService; +import com.gemstone.gemfire.cache.query.Query; +import com.gemstone.gemfire.cache.query.QueryInvocationTargetException; +import com.gemstone.gemfire.cache.query.SelectResults; +import com.gemstone.gemfire.cache.server.CacheServer; +import com.gemstone.gemfire.cache30.ClientServerTestCase; +import com.gemstone.gemfire.distributed.DistributedSystem; +import com.gemstone.gemfire.distributed.Locator; +import com.gemstone.gemfire.distributed.internal.DistributionConfig; +import com.gemstone.gemfire.distributed.internal.InternalDistributedSystem; +import com.gemstone.gemfire.internal.AvailablePort; +import com.gemstone.gemfire.internal.logging.InternalLogWriter; +import com.gemstone.gemfire.internal.logging.PureLogWriter; +import com.gemstone.gemfire.internal.util.Callable; +import com.gemstone.gemfire.test.dunit.Assert; +import com.gemstone.gemfire.test.dunit.DistributedTestCase; +import com.gemstone.gemfire.test.dunit.DistributedTestUtils; +import com.gemstone.gemfire.test.dunit.NetworkUtils; +import com.gemstone.gemfire.test.dunit.Wait; +import com.gemstone.gemfire.test.dunit.WaitCriterion; + +/** + * Contains utility methods for setting up servers/clients for authentication + * and authorization tests. + * + * @since 5.5 + */ +public class SecurityTestUtil extends DistributedTestCase { + + public SecurityTestUtil(String name) { + super(name); + } + + private static Locator locator = null; + + private static Cache cache = null; + + private static Properties currentJavaProps = null; + + private static String locatorString = null; + + private static Integer mcastPort = null; + + public static final int NO_EXCEPTION = 0; + + public static final int AUTHREQ_EXCEPTION = 1; + + public static final int AUTHFAIL_EXCEPTION = 2; + + public static final int CONNREFUSED_EXCEPTION = 3; + + public static final int NOTAUTHZ_EXCEPTION = 4; + + public static final int OTHER_EXCEPTION = 5; + + public static final int NO_AVAILABLE_SERVERS = 6; + + // Indicates that AuthReqException may not necessarily be thrown + public static final int NOFORCE_AUTHREQ_EXCEPTION = 16; + + protected static final String regionName = "AuthRegion"; + + protected static final String[] keys = { "key1", "key2", "key3", "key4", + "key5", "key6", "key7", "key8" }; + + protected static final String[] values = { "value1", "value2", "value3", + "value4", "value5", "value6", "value7", "value8" }; + + protected static final String[] nvalues = { "nvalue1", "nvalue2", "nvalue3", + "nvalue4", "nvalue5", "nvalue6", "nvalue7", "nvalue8" }; + + static String[] expectedExceptions = null; + + private static Pool pool = null; + + private static boolean multiUserAuthMode = false; + + private static final int numberOfUsers = 1; + + static ProxyCache[] proxyCaches = new ProxyCache[numberOfUsers]; + + private static Region regionRef = null; + + public static void addExpectedExceptions(String[] expectedExceptions, + LogWriter logger) { + if (expectedExceptions != null) { + for (int index = 0; index < expectedExceptions.length; index++) { + logger.info("" + + expectedExceptions[index] + ""); + } + } + } + + public static void removeExpectedExceptions(String[] expectedExceptions, + LogWriter logger) { + if (expectedExceptions != null) { + for (int index = 0; index < expectedExceptions.length; index++) { + logger.info("" + + expectedExceptions[index] + ""); + } + } + } + + public static void setJavaProps(Properties javaProps) { + + removeJavaProperties(currentJavaProps); + addJavaProperties(javaProps); + currentJavaProps = javaProps; + } + + public DistributedSystem createSystem(Properties sysProps, Properties javaProps) { + + closeCache(); + clearStaticSSLContext(); + setJavaProps(javaProps); + + DistributedSystem dsys = getSystem(sysProps); + assertNotNull(dsys); + addExpectedExceptions(SecurityTestUtil.expectedExceptions, system + .getLogWriter()); + return dsys; + } + + void openCache() { + + assertNotNull(system); + assertTrue(system.isConnected()); + cache = CacheFactory.create(system); + assertNotNull(cache); + } + + private static void initClientDynamicRegionFactory(String poolName) { + + DynamicRegionFactory.get().open( + new DynamicRegionFactory.Config(null, poolName, false,true)); + } + + public static void initDynamicRegionFactory() { + + DynamicRegionFactory.get().open( + new DynamicRegionFactory.Config(null, null, false, true)); + } + + public static Integer getLocatorPort() { + + Integer locatorPort = new Integer(AvailablePort + .getRandomAvailablePort(AvailablePort.SOCKET)); + String addr = NetworkUtils.getIPLiteral(); + if (locatorString == null) { + locatorString = addr + "[" + locatorPort + ']'; + } + else { + locatorString += "," + addr + "[" + locatorPort + ']'; + } + return locatorPort; + } + + /** + * Note that this clears the string after returning for convenience in reusing + * for other tests. Hence it should normally be invoked only once for a test. + */ + public static String getLocatorString() { + + String locString = locatorString; + locatorString = null; + return locString; + } + + public static Properties concatProperties(Properties[] propsList) { + + Properties props = new Properties(); + for (int index = 0; index < propsList.length; ++index) { + if (propsList[index] != null) { + props.putAll(propsList[index]); + } + } + return props; + } + + public static void registerExpectedExceptions(String[] expectedExceptions) { + SecurityTestUtil.expectedExceptions = expectedExceptions; + } + + private static void addJavaProperties(Properties javaProps) { + + if (javaProps != null) { + Iterator iter = javaProps.entrySet().iterator(); + while (iter.hasNext()) { + Map.Entry entry = (Map.Entry)iter.next(); + System.setProperty((String)entry.getKey(), (String)entry.getValue()); + } + } + } + + private static void removeJavaProperties(Properties javaProps) { + + if (javaProps != null) { + Properties props = System.getProperties(); + Iterator iter = javaProps.keySet().iterator(); + while (iter.hasNext()) { + props.remove(iter.next()); + } + System.setProperties(props); + } + } + + public static Integer createCacheServer(Properties authProps, + Object javaProps, Integer dsPort, String locatorString, + Integer serverPort, Integer expectedResult) { + + return createCacheServer(authProps, javaProps, dsPort, locatorString, + serverPort, Boolean.FALSE, expectedResult); + } + + public static Integer createCacheServer(Properties authProps, + Object javaProps, Integer locatorPort, String locatorString, + Integer serverPort, Boolean setupDynamicRegionFactory, + Integer expectedResult) { + + if (authProps == null) { + authProps = new Properties(); + } + authProps.setProperty(DistributionConfig.MCAST_PORT_NAME, "0"); + if (locatorString != null && locatorString.length() > 0) { + authProps.setProperty(DistributionConfig.LOCATORS_NAME, locatorString); + if (locatorPort != null) { + authProps.setProperty(DistributionConfig.START_LOCATOR_NAME, + NetworkUtils.getIPLiteral() + "[" + locatorPort.toString() + ']'); + } + } else { + authProps.setProperty("locators", "localhost["+DistributedTestUtils.getDUnitLocatorPort()+"]"); + } + authProps.setProperty(DistributionConfig.SECURITY_LOG_LEVEL_NAME, "finest"); + com.gemstone.gemfire.test.dunit.LogWriterUtils.getLogWriter().info("Set the server properties to: " + authProps); + com.gemstone.gemfire.test.dunit.LogWriterUtils.getLogWriter().info("Set the java properties to: " + javaProps); + + SecurityTestUtil tmpInstance = new SecurityTestUtil("temp"); + try { + tmpInstance.createSystem(authProps, (Properties)javaProps); + if (expectedResult.intValue() != NO_EXCEPTION) { + fail("Expected a security exception when starting peer"); + } + } + catch (AuthenticationRequiredException ex) { + if (expectedResult.intValue() == AUTHREQ_EXCEPTION) { + com.gemstone.gemfire.test.dunit.LogWriterUtils.getLogWriter().info("Got expected exception when starting peer: " + ex); + return new Integer(0); + } + else { + Assert.fail("Got unexpected exception when starting peer", ex); + } + } + catch (AuthenticationFailedException ex) { + if (expectedResult.intValue() == AUTHFAIL_EXCEPTION) { + com.gemstone.gemfire.test.dunit.LogWriterUtils.getLogWriter().info("Got expected exception when starting peer: " + ex); + return new Integer(0); + } + else { + Assert.fail("Got unexpected exception when starting peer", ex); + } + } + catch (Exception ex) { + Assert.fail("Got unexpected exception when starting peer", ex); + } + + if (setupDynamicRegionFactory.booleanValue()) { + initDynamicRegionFactory(); + } + tmpInstance.openCache(); + AttributesFactory factory = new AttributesFactory(); + factory.setScope(Scope.DISTRIBUTED_ACK); + factory.setDataPolicy(DataPolicy.REPLICATE); + RegionAttributes attrs = factory.create(); + cache.createRegion(regionName, attrs); + int port; + if (serverPort == null || serverPort.intValue() <= 0) { + port = AvailablePort.getRandomAvailablePort(AvailablePort.SOCKET); + } + else { + port = serverPort.intValue(); + } + CacheServer server1 = cache.addCacheServer(); + server1.setPort(port); + server1.setNotifyBySubscription(true); + try { + server1.start(); + } + catch (Exception ex) { + Assert.fail("Got unexpected exception when starting CacheServer", ex); + } + return new Integer(server1.getPort()); + } + + public static void createCacheClient(String authInitModule, + Properties authProps, Properties javaProps, Integer[] ports, + Object numConnections, Integer expectedResult) { + createCacheClient(authInitModule, authProps, javaProps, ports, + numConnections, "false", expectedResult); + } + + public static void createCacheClient(String authInitModule, + Properties authProps, Properties javaProps, Integer[] ports, + Object numConnections, String multiUserMode, Integer expectedResult) { + createCacheClient(authInitModule, authProps, javaProps, ports, + (Integer)numConnections, Boolean.FALSE, multiUserMode, expectedResult); + } + + public static void createCacheClient(String authInitModule, + Properties authProps, Properties javaProps, Integer[] ports, + Integer numConnections, Boolean setupDynamicRegionFactory, + Integer expectedResult) { + createCacheClient(authInitModule, authProps, javaProps, ports, + numConnections, setupDynamicRegionFactory, "false", expectedResult); + } + + public static void createCacheClient(String authInitModule, + Properties authProps, Properties javaProps, Integer[] ports, + Integer numConnections, Boolean setupDynamicRegionFactory, + String multiUserMode, Integer expectedResult) { + createCacheClient(authInitModule, authProps, javaProps, ports, + numConnections, setupDynamicRegionFactory, multiUserMode, Boolean.TRUE, + expectedResult); + } + + public static void createCacheClient(String authInitModule, + Properties authProps, Properties javaProps, Integer[] ports, + Integer numConnections, Boolean setupDynamicRegionFactory, + String multiUserMode, Boolean subscriptionEnabled, + Integer expectedResult) { + + multiUserAuthMode = Boolean.valueOf(multiUserMode); + if (authProps == null) { + authProps = new Properties(); + } + authProps.setProperty(DistributionConfig.MCAST_PORT_NAME, "0"); + authProps.setProperty(DistributionConfig.LOCATORS_NAME, ""); + authProps.setProperty(DistributionConfig.SECURITY_LOG_LEVEL_NAME, "finest"); + // TODO (ashetkar) Add " && (!multiUserAuthMode)" below. + if (authInitModule != null) { + authProps.setProperty(DistributionConfig.SECURITY_CLIENT_AUTH_INIT_NAME, + authInitModule); + } + + SecurityTestUtil tmpInstance = new SecurityTestUtil("temp"); + tmpInstance.createSystem(authProps, javaProps); + AttributesFactory factory = new AttributesFactory(); + int[] portsI = new int[ports.length]; + for(int z=0;z= 0; i--) { + com.gemstone.gemfire.test.dunit.LogWriterUtils.getLogWriter().info("DESTROY: MultiUser# " + i); + doRegionDestroysP(Integer.valueOf(i), expectedResults[i]); + } + } + + public static void doMultiUserDestroys(Integer num, Integer numOfUsers, + Integer[] expectedResults) { + if (numOfUsers != expectedResults.length) { + fail("SecurityTestUtil.doMultiUserDestroys(): numOfUsers = " + numOfUsers + + ", but expected results " + expectedResults.length); + } + for (int i = 0; i < numOfUsers; i++) { + com.gemstone.gemfire.test.dunit.LogWriterUtils.getLogWriter().info("DESTROY: MultiUser# " + i); + doDestroysP(num, Integer.valueOf(i), expectedResults[i], false); + } + } + + public static void doMultiUserInvalidates(Integer num, Integer numOfUsers, + Integer[] expectedResults) { + if (numOfUsers != expectedResults.length) { + fail("SecurityTestUtil.doMultiUserInvalidates(): numOfUsers = " + numOfUsers + + ", but expected results " + expectedResults.length); + } + for (int i = 0; i < numOfUsers; i++) { + com.gemstone.gemfire.test.dunit.LogWriterUtils.getLogWriter().info("INVALIDATE: MultiUser# " + i); + doInvalidatesP(num, Integer.valueOf(i), expectedResults[i], false); + } + } + + public static void doMultiUserContainsKeys(Integer num, Integer numOfUsers, + Integer[] expectedResults, Boolean[] results) { + if (numOfUsers != expectedResults.length) { + fail("SecurityTestUtil.doMultiUserContainsKeys(): numOfUsers = " + numOfUsers + + ", but #expected results " + expectedResults.length); + } + if (numOfUsers != results.length) { + fail("SecurityTestUtil.doMultiUserContainsKeys(): numOfUsers = " + numOfUsers + + ", but #expected output " + results.length); + } + for (int i = 0; i < numOfUsers; i++) { + com.gemstone.gemfire.test.dunit.LogWriterUtils.getLogWriter().info("CONTAINS_KEY: MultiUser# " + i); + doContainsKeysP(num, Integer.valueOf(i), expectedResults[i], false, results[i]); + } + } + + public static void doMultiUserQueries(Integer numOfUsers, + Integer[] expectedResults, Integer valueSize) { + if (numOfUsers != expectedResults.length) { + fail("SecurityTestUtil.doMultiUserQueries(): numOfUsers = " + numOfUsers + + ", but #expected results " + expectedResults.length); + } + for (int i = 0; i < numOfUsers; i++) { + com.gemstone.gemfire.test.dunit.LogWriterUtils.getLogWriter().info("QUERY: MultiUser# " + i); + doQueriesP(Integer.valueOf(i), expectedResults[i], valueSize); + } + } + + public static void doMultiUserFE(Integer numOfUsers, Function function, + Integer[] expectedResults, Object[] results, Boolean isFailoverCase) { + if (numOfUsers != expectedResults.length) { + fail("SecurityTestUtil.doMultiUserFE(): numOfUsers = " + numOfUsers + + ", but #expected results " + expectedResults.length); + } + if (numOfUsers != results.length) { + fail("SecurityTestUtil.doMultiUserFE(): numOfUsers = " + numOfUsers + + ", but #expected output " + results.length); + } + for (int i = 0; i < numOfUsers; i++) { + com.gemstone.gemfire.test.dunit.LogWriterUtils.getLogWriter().info("FunctionExecute:onRegion MultiUser# " + i); + doFunctionExecuteP(Integer.valueOf(i), function, expectedResults[i], results[i], "region"); + } + for (int i = 0; i < numOfUsers; i++) { + com.gemstone.gemfire.test.dunit.LogWriterUtils.getLogWriter().info("FunctionExecute:onServer MultiUser# " + i); + doFunctionExecuteP(Integer.valueOf(i), function, expectedResults[i], results[i], "server"); + } + if (!isFailoverCase) { + for (int i = 0; i < numOfUsers; i++) { + com.gemstone.gemfire.test.dunit.LogWriterUtils.getLogWriter().info("FunctionExecute:onServers MultiUser# " + i); + doFunctionExecuteP(Integer.valueOf(i), function, expectedResults[i], + results[i], "servers"); + } + } + } + + public static void doMultiUserQueryExecute(Integer numOfUsers, + Integer[] expectedResults, Integer result) { + if (numOfUsers != expectedResults.length) { + fail("SecurityTestUtil.doMultiUserFE(): numOfUsers = " + numOfUsers + + ", but #expected results " + expectedResults.length); + } + for (int i = 0; i < numOfUsers; i++) { + com.gemstone.gemfire.test.dunit.LogWriterUtils.getLogWriter().info("QueryExecute: MultiUser# " + i); + doQueryExecuteP(Integer.valueOf(i), expectedResults[i], result); + } + } + + public static void doLocalGets(Integer num) { + + doLocalGetsP(num.intValue(), false); + } + + public static void doNPuts(Integer num) { + + doPutsP(num, new Integer(NO_EXCEPTION), true); + } + + public static void doNPuts(Integer num, Integer expectedResult) { + + doPutsP(num, expectedResult, true); + } + + public static void doNGets(Integer num) { + + doGetsP(num, new Integer(NO_EXCEPTION), true); + } + + public static void doNGets(Integer num, Integer expectedResult) { + + doGetsP(num, expectedResult, true); + } + + public static void doNLocalGets(Integer num) { + + doLocalGetsP(num.intValue(), true); + } + + public static void doSimpleGet(String expectedResult) { + if (regionRef != null) { + try { + regionRef.get("KEY"); + if (expectedResult != null && expectedResult.endsWith("Exception")) { + fail("Expected " + expectedResult + " but found none in doSimpleGet()"); + } + } catch (Exception e) { + if (!e.getClass().getSimpleName().endsWith(expectedResult)) { + fail("Expected " + expectedResult + " but found " + + e.getClass().getSimpleName() + " in doSimpleGet()"); + } else { + com.gemstone.gemfire.test.dunit.LogWriterUtils.getLogWriter().fine( + "Got expected " + e.getClass().getSimpleName() + + " in doSimpleGet()"); + } + } + } + } + + public static void doSimplePut(String expectedResult) { + if (regionRef != null) { + try { + regionRef.put("KEY", "VALUE"); + if (expectedResult != null && expectedResult.endsWith("Exception")) { + fail("Expected " + expectedResult + " but found none in doSimplePut()"); + } + } catch (Exception e) { + if (!e.getClass().getSimpleName().endsWith(expectedResult)) { + Assert.fail("Expected " + expectedResult + " but found " + + e.getClass().getSimpleName() + " in doSimplePut()", e); + } else { + com.gemstone.gemfire.test.dunit.LogWriterUtils.getLogWriter().fine( + "Got expected " + e.getClass().getSimpleName() + + " in doSimplePut()"); + } + } + } + } + // Deal with javax SSL properties + + private static void makeNullStaticField(Class cls) { + + Field[] fields = cls.getDeclaredFields(); + for (int index = 0; index < fields.length; ++index) { + Field field = fields[index]; + try { + if (Modifier.isStatic(field.getModifiers())) { + field.setAccessible(true); + if (field.getClass().equals(boolean.class)) { + field.setBoolean(null, false); + assertFalse(field.getBoolean(null)); + } + else if (cls.isInstance(field.get(null))) { + field.set(null, null); + assertNull(field.get(null)); + } + } + } + catch (IllegalAccessException ex) { + com.gemstone.gemfire.test.dunit.LogWriterUtils.getLogWriter() + .warning("Exception while clearing static SSL field.", ex); + } + catch (ClassCastException ex) { + com.gemstone.gemfire.test.dunit.LogWriterUtils.getLogWriter() + .warning("Exception while clearing static SSL field.", ex); + } + } + } + + private static void makeNullSSLFields(Object obj, Map fieldMap) { + + Iterator fieldIter = fieldMap.entrySet().iterator(); + while (fieldIter.hasNext()) { + Map.Entry entry = (Map.Entry)fieldIter.next(); + Field field = (Field)entry.getKey(); + Object fieldObj = entry.getValue(); + try { + field.setAccessible(true); + makeNullStaticField(fieldObj.getClass()); + field.set(obj, null); + assertNull(field.get(obj)); + } + catch (IllegalAccessException ex) { + com.gemstone.gemfire.test.dunit.LogWriterUtils.getLogWriter().warning("Exception while clearing SSL fields.", ex); + } + } + } + + private static HashMap getSSLFields(Object obj, Class[] classes) { + + HashMap resultFields = new HashMap(); + Field[] fields = obj.getClass().getDeclaredFields(); + for (int index = 0; index < fields.length; ++index) { + Field field = fields[index]; + try { + field.setAccessible(true); + Object fieldObj = field.get(obj); + boolean isInstance = false; + for (int classIndex = 0; classIndex < classes.length; ++classIndex) { + if ((isInstance = classes[classIndex].isInstance(fieldObj)) == true) { + break; + } + } + if (isInstance) { + resultFields.put(field, fieldObj); + } + } + catch (IllegalAccessException ex) { + com.gemstone.gemfire.test.dunit.LogWriterUtils.getLogWriter().warning("Exception while getting SSL fields.", ex); + } + } + return resultFields; + } + + // This is a hack using reflection to clear the static objects in JSSE since + // otherwise changing the javax.* store related properties has no effect + // during the course of running dunit suite unless the VMs are restarted. + public static void clearStaticSSLContext() { + + ServerSocketFactory defaultServerFact = SSLServerSocketFactory.getDefault(); + // Get the class of this and use reflection to blank out any static + // SSLContext objects inside + Map contextMap = getSSLFields(defaultServerFact, new Class[] { + SSLContext.class, SSLContextSpi.class }); + makeNullSSLFields(defaultServerFact, contextMap); + Iterator contextObjsIter = contextMap.values().iterator(); + while (contextObjsIter.hasNext()) { + Object contextObj = contextObjsIter.next(); + Map contextObjsMap = getSSLFields(contextObj, new Class[] { + TrustManager.class, KeyManager.class, TrustManager[].class, + KeyManager[].class }); + makeNullSSLFields(contextObj, contextObjsMap); + } + makeNullStaticField(SSLServerSocketFactory.class); + + // Do the same for normal SSL socket factory + SocketFactory defaultFact = SSLSocketFactory.getDefault(); + contextMap = getSSLFields(defaultFact, new Class[] { SSLContext.class, + SSLContextSpi.class }); + makeNullSSLFields(defaultFact, contextMap); + contextObjsIter = contextMap.values().iterator(); + while (contextObjsIter.hasNext()) { + Object contextObj = contextObjsIter.next(); + Map contextObjsMap = getSSLFields(contextObj, new Class[] { + TrustManager.class, KeyManager.class, TrustManager[].class, + KeyManager[].class }); + makeNullSSLFields(contextObj, contextObjsMap); + } + makeNullStaticField(SSLSocketFactory.class); + makeNullStaticField(SSLContext.class); + } + + private static LogWriter getLogger() { + + LogWriter logger = null; + DistributedSystem dsys = system; + if (dsys == null || !dsys.isConnected()) { + while ((dsys = InternalDistributedSystem.getAnyInstance()) != null + && !dsys.isConnected()) { + } + } + if (dsys != null && dsys.isConnected()) { + logger = dsys.getLogWriter(); + } + return logger; + } + + public static void closeCache() { + + LogWriter logger = getLogger(); + if (logger != null) { + removeExpectedExceptions(SecurityTestUtil.expectedExceptions, logger); + } + if (cache != null && !cache.isClosed()) { + DistributedSystem sys = cache.getDistributedSystem(); + cache.close(); + sys.disconnect(); + cache = null; + } + disconnectFromDS(); + } + + public static void closeCache(Boolean keepAlive) { + LogWriter logger = getLogger(); + if (logger != null) { + removeExpectedExceptions(SecurityTestUtil.expectedExceptions, logger); + } + if (cache != null && !cache.isClosed()) { + DistributedSystem sys = cache.getDistributedSystem(); + cache.close(keepAlive); + sys.disconnect(); + cache = null; + } + disconnectFromDS(); + } + +} diff --git a/gemfire-cq/src/test/java/com/gemstone/gemfire/codeAnalysis/AnalyzeCQSerializablesJUnitTest.java b/gemfire-cq/src/test/java/com/gemstone/gemfire/codeAnalysis/AnalyzeCQSerializablesJUnitTest.java new file mode 100755 index 000000000000..bad96a55409f --- /dev/null +++ b/gemfire-cq/src/test/java/com/gemstone/gemfire/codeAnalysis/AnalyzeCQSerializablesJUnitTest.java @@ -0,0 +1,78 @@ +/* + * 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 com.gemstone.gemfire.codeAnalysis; + +import static org.junit.Assert.fail; + +import java.io.File; +import java.util.List; + +import org.junit.Before; +import org.junit.experimental.categories.Category; + +import com.gemstone.gemfire.test.junit.categories.IntegrationTest; +import com.gemstone.gemfire.util.test.TestUtil; + +/** + * + */ +@Category(IntegrationTest.class) +public class AnalyzeCQSerializablesJUnitTest extends AnalyzeSerializablesJUnitTest { + + @Before + public void loadClasses() throws Exception { + if (classes.size() > 0) { + return; + } + System.out.println("loadClasses starting"); + List excludedClasses = loadExcludedClasses(new File(TestUtil.getResourcePath(AnalyzeCQSerializablesJUnitTest.class, "excludedClasses.txt"))); + List openBugs = loadOpenBugs(new File(TestUtil.getResourcePath(AnalyzeCQSerializablesJUnitTest.class, "openBugs.txt"))); + excludedClasses.addAll(openBugs); + + String cp = System.getProperty("java.class.path"); + System.out.println("java classpath is " + cp); + System.out.flush(); + String[] entries = cp.split(File.pathSeparator); + String buildDirName = + "gemfire-cq"+File.separatorChar + +"build"+File.separatorChar + +"classes"+File.separatorChar + +"main"; + String buildDir = null; + + for (int i=0; i" + "SELECT ALL * FROM /root/" + regions[0] + " p where p.ID > 0", + + // 1 - Test for "=" and "and". + "SELECT ALL * FROM /root/" + regions[0] + + " p where p.ID = 2 and p.status='active'", + + // 2 - Test for "<" and "and". + "SELECT ALL * FROM /root/" + regions[1] + + " p where p.ID < 5 and p.status='active'", + + // FOLLOWING CQS ARE NOT TESTED WITH VALUES; THEY ARE USED TO TEST PARSING + // LOGIC WITHIN CQ. + // 3 + "SELECT * FROM /root/" + regions[0] + " ;", + // 4 + "SELECT ALL * FROM /root/" + regions[0], + // 5 + "import com.gemstone.gemfire.cache.\"query\".data.Portfolio; " + + "SELECT ALL * FROM /root/" + regions[0] + " TYPE Portfolio", + // 6 + "import com.gemstone.gemfire.cache.\"query\".data.Portfolio; " + + "SELECT ALL * FROM /root/" + regions[0] + " p TYPE Portfolio", + // 7 + "SELECT ALL * FROM /root/" + regions[1] + + " p where p.ID < 5 and p.status='active';", + // 8 + "SELECT ALL * FROM /root/" + regions[0] + " ;", + // 9 + "SELECT ALL * FROM /root/" + regions[0] + " p where p.description = NULL", + // 10 + "SELECT ALL * FROM /root/" + regions[0] + + " p where p.ID > 0 and p.status='active'", }; + + /** + * @param name + * name of the test + */ + public CQListGIIDUnitTest(String name) { + super(name); + } + + /** + * Sets up the test. + */ + public void setUp() throws Exception { + super.setUp(); + + final Host host = Host.getHost(0); + serverVM0 = host.getVM(0); + serverVM1 = host.getVM(1); + clientVM1 = host.getVM(2); + clientVM2 = host.getVM(3); + + PORT1 = ((Integer)serverVM0.invoke(() -> CQListGIIDUnitTest.createServerCache( HARegionQueue.HA_EVICTION_POLICY_MEMORY ))).intValue(); + PORT2 = ((Integer)serverVM1.invoke(() -> CQListGIIDUnitTest.createServerCache( HARegionQueue.HA_EVICTION_POLICY_ENTRY ))).intValue(); + } + + /** + * Tears down the test. + */ + @Override + protected final void preTearDown() throws Exception { + serverVM0.invoke(() -> ConflationDUnitTest.unsetIsSlowStart()); + serverVM1.invoke(() -> ConflationDUnitTest.unsetIsSlowStart()); + closeCache(); + clientVM1.invoke(() -> CQListGIIDUnitTest.closeCache()); + clientVM2.invoke(() -> CQListGIIDUnitTest.closeCache()); + // then close the servers + serverVM0.invoke(() -> CQListGIIDUnitTest.closeCache()); + serverVM1.invoke(() -> CQListGIIDUnitTest.closeCache()); + disconnectAllFromDS(); + } + + public static Test suite() { + Class[] classes = new Class[] {com.gemstone.gemfire.internal.cache.ha.CQListGIIDUnitTest.class, + com.gemstone.gemfire.cache30.RegionReliabilityDistAckDUnitTest.class, + com.gemstone.gemfire.cache30.RegionReliabilityGlobalDUnitTest.class, + com.gemstone.gemfire.internal.cache.execute.PRClientServerFunctionExecutionNoAckDUnitTest.class, + com.gemstone.gemfire.internal.cache.execute.PRClientServerRegionFunctionExecutionDUnitTest.class, + com.gemstone.gemfire.internal.cache.execute.PRClientServerRegionFunctionExecutionNoSingleHopDUnitTest.class, + com.gemstone.gemfire.internal.cache.execute.PRClientServerRegionFunctionExecutionSelectorNoSingleHopDUnitTest.class, + com.gemstone.gemfire.internal.cache.execute.PRClientServerRegionFunctionExecutionSingleHopDUnitTest.class, + com.gemstone.gemfire.internal.cache.ha.HASlowReceiverDUnitTest.class}; + + return new TestSuite(classes); + } + + + private void createCache(Properties props) throws Exception { + DistributedSystem ds = getSystem(props); + ds.disconnect(); + ds = getSystem(props); + assertNotNull(ds); + cache = CacheFactory.create(ds); + assertNotNull(cache); + } + + public static Integer createServerCache() throws Exception { + return createServerCache(null); + } + + public static Integer createServerCache(String ePolicy) throws Exception { + return createServerCache(ePolicy, Integer.valueOf(1)); + } + + public static Integer createServerCache(String ePolicy, Integer cap) + throws Exception { + new CQListGIIDUnitTest("temp").createCache(new Properties()); + AttributesFactory factory = new AttributesFactory(); + factory.setScope(Scope.DISTRIBUTED_ACK); + factory.setDataPolicy(DataPolicy.REPLICATE); + RegionAttributes attrs = factory.create(); + // cache.createRegion(regionName, attrs); + createRegion(regions[0], "root", attrs); + createRegion(regions[1], "root", attrs); + Thread.sleep(2000); + logger = cache.getLogger(); + + int port = AvailablePort.getRandomAvailablePort(AvailablePort.SOCKET); + CacheServer server1 = cache.addCacheServer(); + server1.setPort(port); + server1.setNotifyBySubscription(true); + if (ePolicy != null) { + File overflowDirectory = new File("bsi_overflow_"+port); + overflowDirectory.mkdir(); + DiskStoreFactory dsf = cache.createDiskStoreFactory(); + File[] dirs1 = new File[] {overflowDirectory}; + + server1.getClientSubscriptionConfig().setEvictionPolicy(ePolicy); + server1.getClientSubscriptionConfig().setCapacity(cap.intValue()); + // specify diskstore for this server + server1.getClientSubscriptionConfig().setDiskStoreName(dsf.setDiskDirs(dirs1).create("bsi").getName()); + } + server1.start(); + Thread.sleep(2000); + return Integer.valueOf(server1.getPort()); + } + + public static Integer createOneMoreBridgeServer(Boolean notifyBySubscription) + throws Exception { + int port = AvailablePort.getRandomAvailablePort(AvailablePort.SOCKET); + CacheServer server1 = cache.addCacheServer(); + server1.setPort(port); + server1.setNotifyBySubscription(notifyBySubscription.booleanValue()); + server1.getClientSubscriptionConfig().setEvictionPolicy( + HARegionQueue.HA_EVICTION_POLICY_MEMORY); + // let this server to use default diskstore + server1.start(); + return Integer.valueOf(server1.getPort()); + } + + public static final Region createRegion(String name, String rootName, + RegionAttributes attrs) throws CacheException { + Region root = cache.getRegion(rootName); + if (root == null) { + // don't put listeners on root region + RegionAttributes rootAttrs = attrs; + AttributesFactory fac = new AttributesFactory(attrs); + ExpirationAttributes expiration = ExpirationAttributes.DEFAULT; + + // fac.setCacheListener(null); + fac.setCacheLoader(null); + fac.setCacheWriter(null); + fac.setPoolName(null); + fac.setPartitionAttributes(null); + fac.setRegionTimeToLive(expiration); + fac.setEntryTimeToLive(expiration); + fac.setRegionIdleTimeout(expiration); + fac.setEntryIdleTimeout(expiration); + rootAttrs = fac.create(); + root = cache.createRegion(rootName, rootAttrs); + } + + return createSubregion(root, name, attrs, null); + } + + /** + * A helper for creating a subregion, potentially using a package protected + * method to do so. + * @param root the parent region + * @param name the name of the subregion to create + * @param attrs the attributes used to create the subregion + * @param internalArgs if not null, then use the package protected creation mechanism + * @return the subregion whose parent is the provided root + * @throws CacheException + * @see Region#createSubregion(String, RegionAttributes) + * @see LocalRegion#createSubregion(String, RegionAttributes, InternalRegionArguments) + */ + public static Region createSubregion(Region root, String name, + RegionAttributes attrs, final InternalRegionArguments internalArgs) throws CacheException + { + if (internalArgs == null) { + return root.createSubregion(name, attrs); + } else { + try { + LocalRegion lr = (LocalRegion) root; + return lr.createSubregion(name, attrs, internalArgs); + } catch (IOException ioe) { + AssertionError assErr = new AssertionError("unexpected exception"); + assErr.initCause(ioe); + throw assErr; + } catch (ClassNotFoundException cnfe) { + AssertionError assErr = new AssertionError("unexpected exception"); + assErr.initCause(cnfe); + throw assErr; + } + } + } + + public static void createClientCache(Integer port1, Integer port2, + String rLevel) throws Exception { + createClientCache(port1, port2, Integer.valueOf(-1), rLevel, Boolean.FALSE); + } + + public static void createClientCache(Integer port1, Integer port2, + String rLevel, Boolean addListener) throws Exception { + createClientCache(port1, port2, Integer.valueOf(-1), rLevel, addListener); + } + + public static void createClientCache(Integer port1, Integer port2, + Integer port3, String rLevel) throws Exception { + createClientCache(port1, port2, port3, rLevel, Boolean.FALSE); + } + + public static void destroyClientPool() { + cache.getRegion("root").getSubregion(regions[0]).close(); + cache.getRegion("root").getSubregion(regions[1]).close(); + PoolManager.find("clientPool").destroy(); + } + + public static void createClientCache(Integer port1, Integer port2, + Integer port3, String rLevel, Boolean addListener) throws Exception { + CacheServerTestUtil.disableShufflingOfEndpoints(); + String host = NetworkUtils.getIPLiteral(); + + Properties props = new Properties(); + props.setProperty(DistributionConfig.MCAST_PORT_NAME, "0"); + props.setProperty(DistributionConfig.LOCATORS_NAME, ""); + new CQListGIIDUnitTest("temp").createCache(props); + + PoolFactory pf = PoolManager.createFactory(); + int endPointCount = 1; + pf.addServer(host, port1); + if (port2.intValue() != -1) { + pf.addServer(host, port2); + endPointCount++; + } + if (port3.intValue() != -1) { + pf.addServer(host, port3); + endPointCount++; + } + pf.setRetryAttempts(5); + pf.setReadTimeout(2500); + pf.setSocketBufferSize(32768); + pf.setPingInterval(1000); + pf.setMinConnections(endPointCount*2); + pf.setSubscriptionRedundancy(Integer.parseInt(rLevel)); + pf.setSubscriptionEnabled(true).create("clientPool"); + + try { + cache.getQueryService(); + } + catch (Exception cqe) { + Assert.fail("Failed to getCQService.", cqe); + } + + AttributesFactory factory = new AttributesFactory(); + factory.setScope(Scope.LOCAL); + factory.setPoolName("clientPool"); + + RegionAttributes attrs = factory.create(); + createRegion(regions[0], "root", attrs); + createRegion(regions[1], "root", attrs); + logger = cache.getLogger(); + } + + /* Register CQs */ + public static void createCQ(String cqName, String queryStr) { + com.gemstone.gemfire.test.dunit.LogWriterUtils.getLogWriter().info("### Create CQ. ###" + cqName); + // Get CQ Service. + QueryService cqService = null; + try { + cqService = cache.getQueryService(); + } + catch (Exception cqe) { + Assert.fail("Failed to getCQService.", cqe); + } + // Create CQ Attributes. + CqAttributesFactory cqf = new CqAttributesFactory(); + CqListener[] cqListeners = { new CqQueryTestListener(com.gemstone.gemfire.test.dunit.LogWriterUtils.getLogWriter()) }; + ((CqQueryTestListener)cqListeners[0]).cqName = cqName; + + cqf.initCqListeners(cqListeners); + CqAttributes cqa = cqf.create(); + + // Create CQ. + try { + CqQuery cq1 = cqService.newCq(cqName, queryStr, cqa); + assertTrue("newCq() state mismatch", cq1.getState().isStopped()); + } + catch (Exception ex) { + com.gemstone.gemfire.test.dunit.LogWriterUtils.getLogWriter().info("CqService is :" + cqService); + ex.printStackTrace(); + AssertionError err = new AssertionError("Failed to create CQ " + cqName + + " . "); + err.initCause(ex); + throw err; + } + } + + public static void executeCQ(String cqName, Boolean initialResults) { + com.gemstone.gemfire.test.dunit.LogWriterUtils.getLogWriter().info("### DEBUG EXECUTE CQ START ####"); + // Get CQ Service. + QueryService cqService = null; + CqQuery cq1 = null; + cqService = cache.getQueryService(); + + // Get CqQuery object. + try { + cq1 = cqService.getCq(cqName); + if (cq1 == null) { + com.gemstone.gemfire.test.dunit.LogWriterUtils.getLogWriter().info( + "Failed to get CqQuery object for CQ name: " + cqName); + Assert.fail("Failed to get CQ " + cqName, new Exception("Failed to get CQ " + + cqName)); + } + else { + com.gemstone.gemfire.test.dunit.LogWriterUtils.getLogWriter().info("Obtained CQ, CQ name: " + cq1.getName()); + assertTrue("newCq() state mismatch", cq1.getState().isStopped()); + } + } + catch (Exception ex) { + com.gemstone.gemfire.test.dunit.LogWriterUtils.getLogWriter().info("CqService is :" + cqService); + com.gemstone.gemfire.test.dunit.LogWriterUtils.getLogWriter().error(ex); + AssertionError err = new AssertionError("Failed to execute CQ " + cqName); + err.initCause(ex); + throw err; + } + + if (initialResults.booleanValue()) { + SelectResults cqResults = null; + + try { + cqResults = cq1.executeWithInitialResults(); + } + catch (Exception ex) { + com.gemstone.gemfire.test.dunit.LogWriterUtils.getLogWriter().info("CqService is :" + cqService); + ex.printStackTrace(); + AssertionError err = new AssertionError("Failed to execute CQ " + + cqName); + err.initCause(ex); + throw err; + } + com.gemstone.gemfire.test.dunit.LogWriterUtils.getLogWriter().info("initial result size = " + cqResults.size()); + assertTrue("executeWithInitialResults() state mismatch", cq1.getState() + .isRunning()); + // if (expectedResultsSize >= 0) { + // assertEquals("unexpected results size", expectedResultsSize, cqResults + // .size()); + // } + } + else { + + try { + cq1.execute(); + } + catch (Exception ex) { + com.gemstone.gemfire.test.dunit.LogWriterUtils.getLogWriter().info("CqService is :" + cqService); + ex.printStackTrace(); + AssertionError err = new AssertionError("Failed to execute CQ " + + cqName); + err.initCause(ex); + throw err; + } + assertTrue("execute() state mismatch", cq1.getState().isRunning()); + } + } + + public static void registerInterestListCQ(String regionName, int keySize) { + // Get CQ Service. + Region region = null; + try { + region = cache.getRegion("root").getSubregion(regionName); + region.getAttributesMutator().setCacheListener( + new CertifiableTestCacheListener(com.gemstone.gemfire.test.dunit.LogWriterUtils.getLogWriter())); + } + catch (Exception cqe) { + AssertionError err = new AssertionError("Failed to get Region."); + err.initCause(cqe); + throw err; + } + + try { + List list = new ArrayList(); + for (int i = 1; i <= keySize; i++) { + list.add(KEY + i); + } + region.registerInterest(list); + } + catch (Exception ex) { + AssertionError err = new AssertionError("Failed to Register InterestList"); + err.initCause(ex); + throw err; + } + } + + public static void waitForCreated(String cqName, String key) { + waitForEvent(0, cqName, key); + } + + public static void waitForEvent(int event, String cqName, String key) { + // Get CQ Service. + QueryService cqService = null; + try { + cqService = cache.getQueryService(); + } + catch (Exception cqe) { + cqe.printStackTrace(); + Assert.fail("Failed to getCQService.", cqe); + } + + CqQuery cQuery = cqService.getCq(cqName); + if (cQuery == null) { + Assert.fail("Failed to get CqQuery for CQ : " + cqName, new Exception( + "Failed to get CqQuery for CQ : " + cqName)); + } + + CqAttributes cqAttr = cQuery.getCqAttributes(); + CqListener[] cqListener = cqAttr.getCqListeners(); + CqQueryTestListener listener = (CqQueryTestListener)cqListener[0]; + + switch (event) { + case CREATE: + listener.waitForCreated(key); + break; + + case UPDATE: + listener.waitForUpdated(key); + break; + + case DESTROY: + listener.waitForDestroyed(key); + break; + + case INVALIDATE: + listener.waitForInvalidated(key); + break; + + case CLOSE: + listener.waitForClose(); + break; + + case REGION_CLEAR: + listener.waitForRegionClear(); + break; + + case REGION_INVALIDATE: + listener.waitForRegionInvalidate(); + break; + + } + } + + public static void registerInterestListAll() { + try { + Region r = cache.getRegion("/" + regionName); + assertNotNull(r); + r.registerInterest("ALL_KEYS"); + } + catch (Exception ex) { + Assert.fail("failed in registerInterestListAll", ex); + } + } + + public static void registerInterestList() { + try { + Region r = cache.getRegion("/" + regionName); + assertNotNull(r); + r.registerInterest("k1"); + r.registerInterest("k3"); + r.registerInterest("k5"); + } + catch (Exception ex) { + Assert.fail("failed while registering keys", ex); + } + } + + public static void putEntries(String rName, Integer num) { + try { + Region r = cache.getRegion("root").getSubregion(rName); + assertNotNull(r); + for (int i = 0; i < num.longValue(); i++) { + r.put(KEY + i, new Portfolio(i + 1)); + } + com.gemstone.gemfire.test.dunit.LogWriterUtils.getLogWriter().info( + "### Number of Entries in Region " + rName + ": " + r.keys().size()); + } + catch (Exception ex) { + Assert.fail("failed in putEntries()", ex); + } + } + + /** + * + * + * @throws Exception + */ + public void _testSpecificClientCQIsGIIedPart1() throws Exception { + Integer size = Integer.valueOf(10); + // slow start for dispatcher + serverVM0.invoke(() -> ConflationDUnitTest.setIsSlowStart( "30000" )); + serverVM1.invoke(() -> ConflationDUnitTest.setIsSlowStart( "30000" )); + + // createClientCache(Integer.valueOf(PORT1), Integer.valueOf(PORT2), "1"); + clientVM1.invoke(() -> CQListGIIDUnitTest.createClientCache( Integer.valueOf(PORT1), Integer.valueOf(PORT2), "1" )); + clientVM2.invoke(() -> CQListGIIDUnitTest.createClientCache( Integer.valueOf(PORT1), Integer.valueOf(PORT2), "0" )); + + clientVM1.invoke(() -> CQListGIIDUnitTest.createCQ( + "testSpecificClientCQIsGIIed_0", cqs[0] )); + clientVM1.invoke(() -> CQListGIIDUnitTest.executeCQ( + "testSpecificClientCQIsGIIed_0", Boolean.FALSE )); + clientVM2.invoke(() -> CQListGIIDUnitTest.createCQ( + "testSpecificClientCQIsGIIed_0", cqs[0] )); + clientVM2.invoke(() -> CQListGIIDUnitTest.executeCQ( + "testSpecificClientCQIsGIIed_0", Boolean.FALSE )); + + serverVM1.invoke(() -> CQListGIIDUnitTest.stopServer()); + + serverVM0.invoke(() -> CQListGIIDUnitTest.putEntries( + regions[0], size )); + + serverVM1.invoke(() -> CQListGIIDUnitTest.startServer()); + Thread.sleep(3000); // TODO: Find a better 'n reliable alternative + + serverVM0.invoke(() -> CQListGIIDUnitTest.VerifyCUMCQList( + size, Integer.valueOf(2) )); + serverVM1.invoke(() -> CQListGIIDUnitTest.VerifyCUMCQList( + size, Integer.valueOf(1) )); + serverVM0.invoke(() -> ConflationDUnitTest.unsetIsSlowStart()); + serverVM1.invoke(() -> ConflationDUnitTest.unsetIsSlowStart()); + } + + /** + * This test asserts that cq list of a client for an event is not lost if that + * client's queue has been GII'ed to a server where that event already + * existed. + * + * @throws Exception + */ + public void testClientCQNotLostAtGIIReceiver() throws Exception { + Integer size = Integer.valueOf(10); + VM serverVM2 = clientVM2; + + int port3 = ((Integer)serverVM2.invoke(() -> CQListGIIDUnitTest.createServerCache( HARegionQueue.HA_EVICTION_POLICY_MEMORY ))).intValue(); + + // slow start for dispatcher + serverVM0.invoke(() -> ConflationDUnitTest.setIsSlowStart( "45000" )); + + // createClientCache(Integer.valueOf(PORT1), Integer.valueOf(PORT2), "1"); + createClientCache(Integer.valueOf(PORT1), Integer.valueOf(PORT2), + Integer.valueOf(port3), "1"); + try { + clientVM1.invoke(() -> CQListGIIDUnitTest.createClientCache( Integer.valueOf(PORT1), Integer.valueOf(port3), + Integer.valueOf(PORT2), "1" )); + try { + createCQ("testSpecificClientCQIsGIIed_0", cqs[0]); + executeCQ("testSpecificClientCQIsGIIed_0", Boolean.FALSE); + clientVM1.invoke(() -> CQListGIIDUnitTest.createCQ( + "testSpecificClientCQIsGIIed_0", cqs[0] )); + clientVM1.invoke(() -> CQListGIIDUnitTest.executeCQ( + "testSpecificClientCQIsGIIed_0", Boolean.FALSE )); + + serverVM0.invoke(() -> CQListGIIDUnitTest.putEntries( + regions[0], size )); + + serverVM1.invoke(() -> CQListGIIDUnitTest.VerifyCUMCQList( + size, Integer.valueOf(1) )); + + serverVM2.invoke(() -> CQListGIIDUnitTest.stopServer()); + Thread.sleep(3000); // TODO: Find a better 'n reliable alternative + + serverVM0.invoke(() -> CQListGIIDUnitTest.VerifyCUMCQList( + size, Integer.valueOf(2) )); + serverVM1.invoke(() -> CQListGIIDUnitTest.VerifyCUMCQList( + size, Integer.valueOf(2) )); + } finally { + clientVM1.invoke(() -> CQListGIIDUnitTest.destroyClientPool()); + } + + } finally { + destroyClientPool(); + } + } + + public static void VerifyCUMCQList(Integer numOfKeys, Integer numOfClients) { + try { + Iterator iter = cache.getCacheServers().iterator(); + if (iter.hasNext()) { + CacheServerImpl server = (CacheServerImpl)iter.next(); + Map haContainer = server.getAcceptor().getCacheClientNotifier() + .getHaContainer(); + Object[] keys = haContainer.keySet().toArray(); + logger.fine("### numOfKeys :" + numOfKeys.intValue() + " keys.length : " + keys.length + + " haContainer size : " + haContainer.size()); + assertEquals(numOfKeys.intValue(), keys.length); + for (int i = 0; i < numOfKeys.intValue(); i++) { + logger.fine("i=: " + i); + ClientUpdateMessageImpl cum = (ClientUpdateMessageImpl)haContainer + .get(keys[i]); + assertNotNull(cum); + assertNotNull(cum.getClientCqs()); + assertEquals("This test may fail if the image provider gets an ack from client before providing image", + numOfClients.intValue(), cum.getClientCqs().size()); + } + } + } + catch (Exception e) { + Assert.fail("failed in VerifyCUMCQList()" + e, e); + } + } + + private static void stopOneBridgeServer(Integer port) { + try { + Iterator iter = cache.getCacheServers().iterator(); + if (iter.hasNext()) { + CacheServer server = (CacheServer)iter.next(); + if (server.getPort() == port.intValue()) { + server.stop(); + } + } + } + catch (Exception e) { + fail("failed in stopOneBridgeServer()" + e); + } + } + + public static void stopServer() { + try { + Iterator iter = cache.getCacheServers().iterator(); + if (iter.hasNext()) { + CacheServer server = (CacheServer)iter.next(); + server.stop(); + } + } + catch (Exception e) { + fail("failed in stopServer()" + e); + } + } + + public static void startServer() { + try { + Iterator iter = cache.getCacheServers().iterator(); + if (iter.hasNext()) { + CacheServer server = (CacheServer)iter.next(); + server.start(); + } + } + catch (Exception e) { + fail("failed in startServer()" + e); + } + } + + public static void waitTillMessagesAreDispatched(Integer port, Long waitLimit) { + try { + boolean dispatched = false; + Map haContainer = null; + haContainer = cache.getRegion(Region.SEPARATOR + + CacheServerImpl.generateNameForClientMsgsRegion(port.intValue())); + if (haContainer == null) { + Object[] servers = cache.getCacheServers().toArray(); + for (int i = 0; i < servers.length; i++) { + if (port.intValue() == ((CacheServerImpl)servers[i]).getPort()) { + haContainer = ((CacheServerImpl)servers[i]).getAcceptor() + .getCacheClientNotifier().getHaContainer(); + break; + } + } + } + long startTime = System.currentTimeMillis(); + while (waitLimit.longValue() > (System.currentTimeMillis() - startTime)) { + if (haContainer.size() == 0) { + dispatched = true; + break; + } + try { + Thread.sleep(50); + } + catch (InterruptedException ie) { + fail("interrupted"); + } + } + logger.fine("Exiting sleep, time elapsed was: " + + (System.currentTimeMillis() - startTime)); + if (!dispatched) { + throw new Exception( + "Test tuning issue: The HARegionQueue is not fully drained, so cannot continue the test."); + } + } + catch (Exception e) { + fail("failed in waitTillMessagesAreDispatched()" + e); + } + } + + public static void closeCache() { + if (cache != null && !cache.isClosed()) { + cache.close(); + cache.getDistributedSystem().disconnect(); + } + } + +} diff --git a/gemfire-wan/src/test/java/com/gemstone/gemfire/codeAnalysis/AnalyzeWANSerializablesJUnitTest.java b/gemfire-wan/src/test/java/com/gemstone/gemfire/codeAnalysis/AnalyzeWANSerializablesJUnitTest.java new file mode 100755 index 000000000000..9c4a75685bfa --- /dev/null +++ b/gemfire-wan/src/test/java/com/gemstone/gemfire/codeAnalysis/AnalyzeWANSerializablesJUnitTest.java @@ -0,0 +1,90 @@ +/* + * 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 com.gemstone.gemfire.codeAnalysis; + +import static org.junit.Assert.fail; + +import java.io.File; +import java.util.HashMap; +import java.util.List; +import java.util.Map; + +import org.junit.AfterClass; +import org.junit.Assume; +import org.junit.Before; +import org.junit.experimental.categories.Category; + +import com.gemstone.gemfire.codeAnalysis.decode.CompiledClass; +import com.gemstone.gemfire.test.junit.categories.IntegrationTest; +import com.gemstone.gemfire.util.test.TestUtil; + +/** + * + */ +@Category(IntegrationTest.class) +public class AnalyzeWANSerializablesJUnitTest extends AnalyzeSerializablesJUnitTest { + + @Before + public void loadClasses() throws Exception { + if (classes.size() > 0) { + return; + } + System.out.println("loadClasses starting"); + List excludedClasses = loadExcludedClasses(new File(TestUtil.getResourcePath(AnalyzeWANSerializablesJUnitTest.class, "excludedClasses.txt"))); + List openBugs = loadOpenBugs(new File(TestUtil.getResourcePath(AnalyzeWANSerializablesJUnitTest.class, "openBugs.txt"))); + excludedClasses.addAll(openBugs); + + String cp = System.getProperty("java.class.path"); + System.out.println("java classpath is " + cp); + System.out.flush(); + String[] entries = cp.split(File.pathSeparator); + String buildDirName = + "gemfire-wan"+File.separatorChar + +"build"+File.separatorChar + +"classes"+File.separatorChar + +"main"; + String buildDir = null; + + for (int i=0; iExperimentalJUnitTest. This is a class in an * Experimental package. * - * @author Kirk Lund * @see com.gemstone.gemfire.annotations.ExperimentalJUnitTest */ public class ClassInExperimentalPackage { diff --git a/geode-common/src/test/java/com/gemstone/gemfire/annotations/experimentalpackage/package-info.java b/geode-common/src/test/java/com/gemstone/gemfire/annotations/experimentalpackage/package-info.java index d723092a9abe..3db93ff38912 100755 --- a/geode-common/src/test/java/com/gemstone/gemfire/annotations/experimentalpackage/package-info.java +++ b/geode-common/src/test/java/com/gemstone/gemfire/annotations/experimentalpackage/package-info.java @@ -18,7 +18,6 @@ * Used by ExperimentalJUnitTest. This is an Experimental * package. * - * @author Kirk Lund * @see com.gemstone.gemfire.annotations.ExperimentalJUnitTest */ @Experimental("This is an experimental package") diff --git a/geode-common/src/test/java/com/gemstone/gemfire/experimental/nonexperimentalpackage/ClassInNonExperimentalPackage.java b/geode-common/src/test/java/com/gemstone/gemfire/experimental/nonexperimentalpackage/ClassInNonExperimentalPackage.java index 3fefc9c5a9e6..26499a611d4d 100755 --- a/geode-common/src/test/java/com/gemstone/gemfire/experimental/nonexperimentalpackage/ClassInNonExperimentalPackage.java +++ b/geode-common/src/test/java/com/gemstone/gemfire/experimental/nonexperimentalpackage/ClassInNonExperimentalPackage.java @@ -20,7 +20,6 @@ * Used by ExperimentalJUnitTest. This is a class in an * Experimental package. * - * @author Kirk Lund * @see com.gemstone.gemfire.annotations.ExperimentalJUnitTest */ public class ClassInNonExperimentalPackage { diff --git a/geode-common/src/test/java/com/gemstone/gemfire/experimental/nonexperimentalpackage/package-info.java b/geode-common/src/test/java/com/gemstone/gemfire/experimental/nonexperimentalpackage/package-info.java index a41fd36d9b08..8e76724d18e3 100755 --- a/geode-common/src/test/java/com/gemstone/gemfire/experimental/nonexperimentalpackage/package-info.java +++ b/geode-common/src/test/java/com/gemstone/gemfire/experimental/nonexperimentalpackage/package-info.java @@ -18,7 +18,6 @@ * Used by ExperimentalJUnitTest. This is a non-Experimental * package. * - * @author Kirk Lund * @see com.gemstone.gemfire.annotations.ExperimentalJUnitTest */ package com.gemstone.gemfire.experimental.nonexperimentalpackage; diff --git a/geode-core/src/jca/java/com/gemstone/gemfire/internal/ra/GFConnectionFactoryImpl.java b/geode-core/src/jca/java/com/gemstone/gemfire/internal/ra/GFConnectionFactoryImpl.java index d82adfce96ea..23343eab3baf 100644 --- a/geode-core/src/jca/java/com/gemstone/gemfire/internal/ra/GFConnectionFactoryImpl.java +++ b/geode-core/src/jca/java/com/gemstone/gemfire/internal/ra/GFConnectionFactoryImpl.java @@ -25,7 +25,6 @@ import com.gemstone.gemfire.ra.GFConnectionFactory; /** * - * @author asif * */ public class GFConnectionFactoryImpl implements GFConnectionFactory diff --git a/geode-core/src/jca/java/com/gemstone/gemfire/internal/ra/GFConnectionImpl.java b/geode-core/src/jca/java/com/gemstone/gemfire/internal/ra/GFConnectionImpl.java index fa439e5ab341..de684863ef37 100644 --- a/geode-core/src/jca/java/com/gemstone/gemfire/internal/ra/GFConnectionImpl.java +++ b/geode-core/src/jca/java/com/gemstone/gemfire/internal/ra/GFConnectionImpl.java @@ -25,7 +25,6 @@ /** * - * @author asif * */ public class GFConnectionImpl implements GFConnection diff --git a/geode-core/src/jca/java/com/gemstone/gemfire/internal/ra/spi/JCALocalTransaction.java b/geode-core/src/jca/java/com/gemstone/gemfire/internal/ra/spi/JCALocalTransaction.java index c3ff6d0d7f3f..19afdb2630bc 100644 --- a/geode-core/src/jca/java/com/gemstone/gemfire/internal/ra/spi/JCALocalTransaction.java +++ b/geode-core/src/jca/java/com/gemstone/gemfire/internal/ra/spi/JCALocalTransaction.java @@ -33,7 +33,6 @@ /** * - * @author asif * */ public class JCALocalTransaction implements LocalTransaction diff --git a/geode-core/src/jca/java/com/gemstone/gemfire/internal/ra/spi/JCAManagedConnection.java b/geode-core/src/jca/java/com/gemstone/gemfire/internal/ra/spi/JCAManagedConnection.java index c32c84355028..909e3f3ddb9a 100644 --- a/geode-core/src/jca/java/com/gemstone/gemfire/internal/ra/spi/JCAManagedConnection.java +++ b/geode-core/src/jca/java/com/gemstone/gemfire/internal/ra/spi/JCAManagedConnection.java @@ -44,7 +44,6 @@ /** * - * @author asif * */ public class JCAManagedConnection implements ManagedConnection diff --git a/geode-core/src/jca/java/com/gemstone/gemfire/internal/ra/spi/JCAManagedConnectionFactory.java b/geode-core/src/jca/java/com/gemstone/gemfire/internal/ra/spi/JCAManagedConnectionFactory.java index 6911e4ed450c..f1b114354009 100644 --- a/geode-core/src/jca/java/com/gemstone/gemfire/internal/ra/spi/JCAManagedConnectionFactory.java +++ b/geode-core/src/jca/java/com/gemstone/gemfire/internal/ra/spi/JCAManagedConnectionFactory.java @@ -29,7 +29,6 @@ import com.gemstone.gemfire.internal.ra.GFConnectionFactoryImpl; /** * - * @author asif * */ public class JCAManagedConnectionFactory implements ManagedConnectionFactory diff --git a/geode-core/src/jca/java/com/gemstone/gemfire/internal/ra/spi/JCAManagedConnectionMetaData.java b/geode-core/src/jca/java/com/gemstone/gemfire/internal/ra/spi/JCAManagedConnectionMetaData.java index fa238298a336..e21f33f97836 100644 --- a/geode-core/src/jca/java/com/gemstone/gemfire/internal/ra/spi/JCAManagedConnectionMetaData.java +++ b/geode-core/src/jca/java/com/gemstone/gemfire/internal/ra/spi/JCAManagedConnectionMetaData.java @@ -20,7 +20,6 @@ import javax.resource.spi.ManagedConnectionMetaData; /** * - * @author asif * */ public class JCAManagedConnectionMetaData implements ManagedConnectionMetaData diff --git a/geode-core/src/main/java/com/gemstone/gemfire/CancelCriterion.java b/geode-core/src/main/java/com/gemstone/gemfire/CancelCriterion.java index 175ebe32435e..b59dde560ca6 100644 --- a/geode-core/src/main/java/com/gemstone/gemfire/CancelCriterion.java +++ b/geode-core/src/main/java/com/gemstone/gemfire/CancelCriterion.java @@ -40,7 +40,6 @@ * } * * - * @author jpenney * @see CancelException * @since 5.1 */ diff --git a/geode-core/src/main/java/com/gemstone/gemfire/CancelException.java b/geode-core/src/main/java/com/gemstone/gemfire/CancelException.java index cbf2322a7301..53f12b58b9ce 100644 --- a/geode-core/src/main/java/com/gemstone/gemfire/CancelException.java +++ b/geode-core/src/main/java/com/gemstone/gemfire/CancelException.java @@ -25,7 +25,6 @@ * Abstract root class of all GemFire exceptions representing system * cancellation * - * @author jpenney * @since 6.0 */ public abstract class CancelException extends CacheRuntimeException { diff --git a/geode-core/src/main/java/com/gemstone/gemfire/CanonicalInstantiator.java b/geode-core/src/main/java/com/gemstone/gemfire/CanonicalInstantiator.java index e4a9182d8f3b..9f2e57c28b46 100644 --- a/geode-core/src/main/java/com/gemstone/gemfire/CanonicalInstantiator.java +++ b/geode-core/src/main/java/com/gemstone/gemfire/CanonicalInstantiator.java @@ -33,7 +33,6 @@ * Note that {@link DataSerializer#fromData} is always called on the instance * returned from newInstance(DataInput). * - * @author darrel * @since 5.1 */ public abstract class CanonicalInstantiator extends Instantiator { diff --git a/geode-core/src/main/java/com/gemstone/gemfire/CopyException.java b/geode-core/src/main/java/com/gemstone/gemfire/CopyException.java index e7387c1a9ebe..2f116a6d85e1 100644 --- a/geode-core/src/main/java/com/gemstone/gemfire/CopyException.java +++ b/geode-core/src/main/java/com/gemstone/gemfire/CopyException.java @@ -19,7 +19,6 @@ /** * Indicates a failure to copy an object. * - * @author Darrel Schneider * * * @see CopyHelper#copy diff --git a/geode-core/src/main/java/com/gemstone/gemfire/CopyHelper.java b/geode-core/src/main/java/com/gemstone/gemfire/CopyHelper.java index a34414f33e6d..66bc8f09221f 100644 --- a/geode-core/src/main/java/com/gemstone/gemfire/CopyHelper.java +++ b/geode-core/src/main/java/com/gemstone/gemfire/CopyHelper.java @@ -55,7 +55,6 @@ * @see com.gemstone.gemfire.cache.Cache#setCopyOnRead * @see com.gemstone.gemfire.cache.CacheTransactionManager * - * @author Mitch Thomas * @since 4.0 */ diff --git a/geode-core/src/main/java/com/gemstone/gemfire/DataSerializable.java b/geode-core/src/main/java/com/gemstone/gemfire/DataSerializable.java index 4bacef45f25a..be1aae0283de 100644 --- a/geode-core/src/main/java/com/gemstone/gemfire/DataSerializable.java +++ b/geode-core/src/main/java/com/gemstone/gemfire/DataSerializable.java @@ -80,7 +80,6 @@ * @see DataSerializer * @see Instantiator * - * @author David Whitlock * @since 3.5 */ public interface DataSerializable extends Serializable { diff --git a/geode-core/src/main/java/com/gemstone/gemfire/DataSerializer.java b/geode-core/src/main/java/com/gemstone/gemfire/DataSerializer.java index 3b15085f1fe5..0be00443aff1 100644 --- a/geode-core/src/main/java/com/gemstone/gemfire/DataSerializer.java +++ b/geode-core/src/main/java/com/gemstone/gemfire/DataSerializer.java @@ -185,7 +185,6 @@ public Object fromData(DataInput in) * @see #writeObject(Object, DataOutput) * @see #readObject * - * @author David Whitlock * @since 3.5 */ public abstract class DataSerializer { diff --git a/geode-core/src/main/java/com/gemstone/gemfire/GemFireException.java b/geode-core/src/main/java/com/gemstone/gemfire/GemFireException.java index 26361dd42ab3..c33494752734 100644 --- a/geode-core/src/main/java/com/gemstone/gemfire/GemFireException.java +++ b/geode-core/src/main/java/com/gemstone/gemfire/GemFireException.java @@ -25,7 +25,6 @@ * ought to be called GemFireRuntimeException; * however, the current name is retained for compatibility's sake. * - * @author David Whitlock * @see com.gemstone.gemfire.GemFireCheckedException * @see com.gemstone.gemfire.cache.CacheRuntimeException */ diff --git a/geode-core/src/main/java/com/gemstone/gemfire/GemFireIOException.java b/geode-core/src/main/java/com/gemstone/gemfire/GemFireIOException.java index 2e9996065a93..4e0c39964ed3 100644 --- a/geode-core/src/main/java/com/gemstone/gemfire/GemFireIOException.java +++ b/geode-core/src/main/java/com/gemstone/gemfire/GemFireIOException.java @@ -21,7 +21,6 @@ * A GemFireIOException is thrown when a * GemFire operation failure is caused by an IOException. * - * @author David Whitlock * */ public class GemFireIOException extends GemFireException { diff --git a/geode-core/src/main/java/com/gemstone/gemfire/GemFireRethrowable.java b/geode-core/src/main/java/com/gemstone/gemfire/GemFireRethrowable.java index 80c38040f138..5325a53f146b 100644 --- a/geode-core/src/main/java/com/gemstone/gemfire/GemFireRethrowable.java +++ b/geode-core/src/main/java/com/gemstone/gemfire/GemFireRethrowable.java @@ -25,7 +25,6 @@ *

Note: if user code catches this error (or its subclasses) then it must * be rethrown. * - * @author darrel * @since 5.7 */ public class GemFireRethrowable extends Error { diff --git a/geode-core/src/main/java/com/gemstone/gemfire/Instantiator.java b/geode-core/src/main/java/com/gemstone/gemfire/Instantiator.java index 63e742d97cb1..0a7fd362e5eb 100644 --- a/geode-core/src/main/java/com/gemstone/gemfire/Instantiator.java +++ b/geode-core/src/main/java/com/gemstone/gemfire/Instantiator.java @@ -142,7 +142,6 @@ public void fromData(DataInput in) * @see #register(Instantiator) * @see #newInstance * - * @author David Whitlock * @since 3.5 */ public abstract class Instantiator { diff --git a/geode-core/src/main/java/com/gemstone/gemfire/InternalGemFireError.java b/geode-core/src/main/java/com/gemstone/gemfire/InternalGemFireError.java index 4b98dec3c6f5..36762c997783 100644 --- a/geode-core/src/main/java/com/gemstone/gemfire/InternalGemFireError.java +++ b/geode-core/src/main/java/com/gemstone/gemfire/InternalGemFireError.java @@ -25,7 +25,6 @@ * This is similar to {@link AssertionError}, but these errors are always * enabled in a GemFire system. * - * @author jpenney * @since 5.5 * @see AssertionError */ diff --git a/geode-core/src/main/java/com/gemstone/gemfire/InternalGemFireException.java b/geode-core/src/main/java/com/gemstone/gemfire/InternalGemFireException.java index 16850bc984f4..8c1598be472f 100644 --- a/geode-core/src/main/java/com/gemstone/gemfire/InternalGemFireException.java +++ b/geode-core/src/main/java/com/gemstone/gemfire/InternalGemFireException.java @@ -23,7 +23,6 @@ * the user. The message often contains an operating system * error code. * - * @author David Whitlock * */ public class InternalGemFireException extends GemFireException { diff --git a/geode-core/src/main/java/com/gemstone/gemfire/LogWriter.java b/geode-core/src/main/java/com/gemstone/gemfire/LogWriter.java index af95207518b1..648b9fa7e219 100644 --- a/geode-core/src/main/java/com/gemstone/gemfire/LogWriter.java +++ b/geode-core/src/main/java/com/gemstone/gemfire/LogWriter.java @@ -86,7 +86,6 @@ * if messages at that level will currently be logged. The names * of these methods are of the form: levelEnabled. * - * @author darrel */ public interface LogWriter { diff --git a/geode-core/src/main/java/com/gemstone/gemfire/OutOfOffHeapMemoryException.java b/geode-core/src/main/java/com/gemstone/gemfire/OutOfOffHeapMemoryException.java index 424d1312644f..25d4b1674b56 100755 --- a/geode-core/src/main/java/com/gemstone/gemfire/OutOfOffHeapMemoryException.java +++ b/geode-core/src/main/java/com/gemstone/gemfire/OutOfOffHeapMemoryException.java @@ -21,7 +21,6 @@ * failed and the Cache will be closed to prevent it from losing distributed * consistency. * - * @author Kirk Lund */ public class OutOfOffHeapMemoryException extends CancelException { private static final long serialVersionUID = 4111959438738739010L; diff --git a/geode-core/src/main/java/com/gemstone/gemfire/SerializationException.java b/geode-core/src/main/java/com/gemstone/gemfire/SerializationException.java index fd8a450b058b..be5a1c51b3ab 100644 --- a/geode-core/src/main/java/com/gemstone/gemfire/SerializationException.java +++ b/geode-core/src/main/java/com/gemstone/gemfire/SerializationException.java @@ -20,7 +20,6 @@ /** * An exception indicating that a serialization or deserialization failed. - * @author darrel * @since 5.7 */ public class SerializationException extends GemFireIOException { diff --git a/geode-core/src/main/java/com/gemstone/gemfire/StatisticDescriptor.java b/geode-core/src/main/java/com/gemstone/gemfire/StatisticDescriptor.java index c658368406af..5f72c751f567 100644 --- a/geode-core/src/main/java/com/gemstone/gemfire/StatisticDescriptor.java +++ b/geode-core/src/main/java/com/gemstone/gemfire/StatisticDescriptor.java @@ -30,8 +30,6 @@ *

* StatisticDescriptors are naturally ordered by their name. * - * @author David Whitlock - * @author Darrel Schneider * * @since 3.0 */ diff --git a/geode-core/src/main/java/com/gemstone/gemfire/Statistics.java b/geode-core/src/main/java/com/gemstone/gemfire/Statistics.java index 97a679c30d48..bde0dfac47a5 100644 --- a/geode-core/src/main/java/com/gemstone/gemfire/Statistics.java +++ b/geode-core/src/main/java/com/gemstone/gemfire/Statistics.java @@ -46,8 +46,6 @@ * * @see Package introduction * - * @author David Whitlock - * @author Darrel Schneider * * @since 3.0 * diff --git a/geode-core/src/main/java/com/gemstone/gemfire/StatisticsFactory.java b/geode-core/src/main/java/com/gemstone/gemfire/StatisticsFactory.java index 57b5a11d5325..6726ced3c784 100644 --- a/geode-core/src/main/java/com/gemstone/gemfire/StatisticsFactory.java +++ b/geode-core/src/main/java/com/gemstone/gemfire/StatisticsFactory.java @@ -97,7 +97,6 @@ *

* @see Package introduction * - * @author Darrel Schneider * * @since 3.0 */ diff --git a/geode-core/src/main/java/com/gemstone/gemfire/StatisticsType.java b/geode-core/src/main/java/com/gemstone/gemfire/StatisticsType.java index a372e14549f5..95c955635fb9 100644 --- a/geode-core/src/main/java/com/gemstone/gemfire/StatisticsType.java +++ b/geode-core/src/main/java/com/gemstone/gemfire/StatisticsType.java @@ -28,7 +28,6 @@ * To get an instance of this interface use an instance of * {@link StatisticsFactory}. * - * @author Darrel Schneider * * @since 3.0 */ diff --git a/geode-core/src/main/java/com/gemstone/gemfire/StatisticsTypeFactory.java b/geode-core/src/main/java/com/gemstone/gemfire/StatisticsTypeFactory.java index fabe9b10c808..70473a6c809e 100644 --- a/geode-core/src/main/java/com/gemstone/gemfire/StatisticsTypeFactory.java +++ b/geode-core/src/main/java/com/gemstone/gemfire/StatisticsTypeFactory.java @@ -85,7 +85,6 @@ *

* @see Package introduction * - * @author Darrel Schneider * * @since 3.0 */ diff --git a/geode-core/src/main/java/com/gemstone/gemfire/SystemFailure.java b/geode-core/src/main/java/com/gemstone/gemfire/SystemFailure.java index 177506392149..af2a12895f3d 100644 --- a/geode-core/src/main/java/com/gemstone/gemfire/SystemFailure.java +++ b/geode-core/src/main/java/com/gemstone/gemfire/SystemFailure.java @@ -185,7 +185,6 @@ public void uncaughtException(Thread t, Throwable e) { ... } * - * @author jpenney * @since 5.1 */ @edu.umd.cs.findbugs.annotations.SuppressWarnings(value="DM_GC", justification="This class performs System.gc as last ditch effort during out-of-memory condition.") diff --git a/geode-core/src/main/java/com/gemstone/gemfire/ToDataException.java b/geode-core/src/main/java/com/gemstone/gemfire/ToDataException.java index 7618e3253892..386f1d5e5951 100644 --- a/geode-core/src/main/java/com/gemstone/gemfire/ToDataException.java +++ b/geode-core/src/main/java/com/gemstone/gemfire/ToDataException.java @@ -22,7 +22,6 @@ * {@link DataSerializer#toData} is called and returns false. * * @since 6.5 - * @author darrel */ public class ToDataException extends SerializationException { private static final long serialVersionUID = -2329606027453879918L; diff --git a/geode-core/src/main/java/com/gemstone/gemfire/admin/AdminConfig.java b/geode-core/src/main/java/com/gemstone/gemfire/admin/AdminConfig.java index f3405bde472e..fd54b2ebf303 100755 --- a/geode-core/src/main/java/com/gemstone/gemfire/admin/AdminConfig.java +++ b/geode-core/src/main/java/com/gemstone/gemfire/admin/AdminConfig.java @@ -40,7 +40,6 @@ * running *

  • Port=The port you are using to open the monitor port for * the instance - * @author dpark * @deprecated as of 7.0 use the management package instead */ public class AdminConfig diff --git a/geode-core/src/main/java/com/gemstone/gemfire/admin/AdminDistributedSystem.java b/geode-core/src/main/java/com/gemstone/gemfire/admin/AdminDistributedSystem.java index 7dd52204f376..95275c81d234 100755 --- a/geode-core/src/main/java/com/gemstone/gemfire/admin/AdminDistributedSystem.java +++ b/geode-core/src/main/java/com/gemstone/gemfire/admin/AdminDistributedSystem.java @@ -36,7 +36,6 @@ * * @see AdminDistributedSystemFactory * - * @author Kirk Lund * @since 3.5 * @deprecated as of 7.0 use the management package instead */ diff --git a/geode-core/src/main/java/com/gemstone/gemfire/admin/AdminDistributedSystemFactory.java b/geode-core/src/main/java/com/gemstone/gemfire/admin/AdminDistributedSystemFactory.java index 8c48e291da39..10a94dfbfd0b 100755 --- a/geode-core/src/main/java/com/gemstone/gemfire/admin/AdminDistributedSystemFactory.java +++ b/geode-core/src/main/java/com/gemstone/gemfire/admin/AdminDistributedSystemFactory.java @@ -32,7 +32,6 @@ /** * Factory for creating GemFire administration entities. * - * @author Kirk Lund * @since 3.5 * @deprecated as of 7.0 use the management package instead */ diff --git a/geode-core/src/main/java/com/gemstone/gemfire/admin/AdminException.java b/geode-core/src/main/java/com/gemstone/gemfire/admin/AdminException.java index 5dbe593eb6a9..61938620f836 100755 --- a/geode-core/src/main/java/com/gemstone/gemfire/admin/AdminException.java +++ b/geode-core/src/main/java/com/gemstone/gemfire/admin/AdminException.java @@ -23,7 +23,6 @@ * An AdminException is thrown when administration or monitoring * of GemFire fails. * - * @author Kirk Lund * @since 3.5 * * @deprecated as of 7.0 use the management package instead diff --git a/geode-core/src/main/java/com/gemstone/gemfire/admin/AdminXmlException.java b/geode-core/src/main/java/com/gemstone/gemfire/admin/AdminXmlException.java index 112f126bf896..2dda191f28dd 100644 --- a/geode-core/src/main/java/com/gemstone/gemfire/admin/AdminXmlException.java +++ b/geode-core/src/main/java/com/gemstone/gemfire/admin/AdminXmlException.java @@ -22,7 +22,6 @@ * * @see DistributedSystemConfig#getEntityConfigXMLFile * - * @author David Whitlock * @since 4.0 * @deprecated as of 7.0 use the management package instead */ diff --git a/geode-core/src/main/java/com/gemstone/gemfire/admin/Alert.java b/geode-core/src/main/java/com/gemstone/gemfire/admin/Alert.java index 7c34bf9dbd21..1266986bf6e6 100755 --- a/geode-core/src/main/java/com/gemstone/gemfire/admin/Alert.java +++ b/geode-core/src/main/java/com/gemstone/gemfire/admin/Alert.java @@ -21,7 +21,6 @@ * distributed system. It is similar to a {@linkplain * com.gemstone.gemfire.i18n.LogWriterI18n log message}. * - * @author Kirk Lund * @see AlertListener * @since 3.5 * @deprecated as of 7.0 use the management package instead diff --git a/geode-core/src/main/java/com/gemstone/gemfire/admin/AlertLevel.java b/geode-core/src/main/java/com/gemstone/gemfire/admin/AlertLevel.java index e3633a12bf5d..787701e5578b 100755 --- a/geode-core/src/main/java/com/gemstone/gemfire/admin/AlertLevel.java +++ b/geode-core/src/main/java/com/gemstone/gemfire/admin/AlertLevel.java @@ -23,7 +23,6 @@ * Type-safe enumeration for {@link com.gemstone.gemfire.admin.Alert * Alert} level. * - * @author Kirk Lund * @since 3.5 * @deprecated as of 7.0 use the management package instead */ diff --git a/geode-core/src/main/java/com/gemstone/gemfire/admin/BackupStatus.java b/geode-core/src/main/java/com/gemstone/gemfire/admin/BackupStatus.java index 547a759ebf2a..9f8d836ba7c2 100644 --- a/geode-core/src/main/java/com/gemstone/gemfire/admin/BackupStatus.java +++ b/geode-core/src/main/java/com/gemstone/gemfire/admin/BackupStatus.java @@ -26,7 +26,6 @@ * The status of a backup operation, returned by * {@link AdminDistributedSystem#backupAllMembers(java.io.File,java.io.File)}. * - * @author dsmith * @since 6.5 * @deprecated as of 7.0 use the management package instead */ diff --git a/geode-core/src/main/java/com/gemstone/gemfire/admin/CacheDoesNotExistException.java b/geode-core/src/main/java/com/gemstone/gemfire/admin/CacheDoesNotExistException.java index f5216daa0a80..70262ac96bf9 100644 --- a/geode-core/src/main/java/com/gemstone/gemfire/admin/CacheDoesNotExistException.java +++ b/geode-core/src/main/java/com/gemstone/gemfire/admin/CacheDoesNotExistException.java @@ -21,7 +21,6 @@ * An CacheDoesNotExistException is thrown when an attempt * is made to get a cache and one does not exist. * - * @author Darrel Schneider * @since 3.5 * @deprecated as of 7.0 use the management package instead */ diff --git a/geode-core/src/main/java/com/gemstone/gemfire/admin/CacheHealthConfig.java b/geode-core/src/main/java/com/gemstone/gemfire/admin/CacheHealthConfig.java index 363620986efd..da9547d45e82 100644 --- a/geode-core/src/main/java/com/gemstone/gemfire/admin/CacheHealthConfig.java +++ b/geode-core/src/main/java/com/gemstone/gemfire/admin/CacheHealthConfig.java @@ -62,7 +62,6 @@ * * * - * @author David Whitlock * * @since 3.5 * @deprecated as of 7.0 use the management package instead diff --git a/geode-core/src/main/java/com/gemstone/gemfire/admin/CacheServer.java b/geode-core/src/main/java/com/gemstone/gemfire/admin/CacheServer.java index 7cee2fa03ee2..180148a5a3fe 100644 --- a/geode-core/src/main/java/com/gemstone/gemfire/admin/CacheServer.java +++ b/geode-core/src/main/java/com/gemstone/gemfire/admin/CacheServer.java @@ -20,7 +20,6 @@ * A dedicated cache server VM that is managed by the administration * API. * - * @author David Whitlock * @since 4.0 * @deprecated as of 5.7 use {@link CacheVm} instead. */ diff --git a/geode-core/src/main/java/com/gemstone/gemfire/admin/CacheServerConfig.java b/geode-core/src/main/java/com/gemstone/gemfire/admin/CacheServerConfig.java index 87f2fee7235b..96a8bdbe466c 100644 --- a/geode-core/src/main/java/com/gemstone/gemfire/admin/CacheServerConfig.java +++ b/geode-core/src/main/java/com/gemstone/gemfire/admin/CacheServerConfig.java @@ -22,7 +22,6 @@ * * @see AdminDistributedSystem#addCacheServer() * - * @author David Whitlock * @since 4.0 * @deprecated as of 5.7 use {@link CacheVmConfig} instead. */ diff --git a/geode-core/src/main/java/com/gemstone/gemfire/admin/CacheVm.java b/geode-core/src/main/java/com/gemstone/gemfire/admin/CacheVm.java index 87a15a613991..5ce6786d7d3f 100755 --- a/geode-core/src/main/java/com/gemstone/gemfire/admin/CacheVm.java +++ b/geode-core/src/main/java/com/gemstone/gemfire/admin/CacheVm.java @@ -26,7 +26,6 @@ * {@link com.gemstone.gemfire.cache.server.CacheServer} * but is an instance of this interface. * - * @author darrel * @since 5.7 * @deprecated as of 7.0 use the management package instead */ diff --git a/geode-core/src/main/java/com/gemstone/gemfire/admin/CacheVmConfig.java b/geode-core/src/main/java/com/gemstone/gemfire/admin/CacheVmConfig.java index 4193ec543ff1..68956728a84f 100755 --- a/geode-core/src/main/java/com/gemstone/gemfire/admin/CacheVmConfig.java +++ b/geode-core/src/main/java/com/gemstone/gemfire/admin/CacheVmConfig.java @@ -22,7 +22,6 @@ * * @see AdminDistributedSystem#addCacheVm() * - * @author darrel * @since 5.7 * @deprecated as of 7.0 use the management package instead */ diff --git a/geode-core/src/main/java/com/gemstone/gemfire/admin/ConfigurationParameter.java b/geode-core/src/main/java/com/gemstone/gemfire/admin/ConfigurationParameter.java index ee423052665a..d1af87d2637a 100755 --- a/geode-core/src/main/java/com/gemstone/gemfire/admin/ConfigurationParameter.java +++ b/geode-core/src/main/java/com/gemstone/gemfire/admin/ConfigurationParameter.java @@ -20,7 +20,6 @@ /** * A single configuration parameter of a {@link SystemMember}. * - * @author Kirk Lund * @since 3.5 * * @deprecated as of 7.0 use the management package instead diff --git a/geode-core/src/main/java/com/gemstone/gemfire/admin/DistributedSystemConfig.java b/geode-core/src/main/java/com/gemstone/gemfire/admin/DistributedSystemConfig.java index 80e16b722ae2..83aa65dee07b 100755 --- a/geode-core/src/main/java/com/gemstone/gemfire/admin/DistributedSystemConfig.java +++ b/geode-core/src/main/java/com/gemstone/gemfire/admin/DistributedSystemConfig.java @@ -55,7 +55,6 @@ * DistributedSystemConfig object can be made by invoking * the {@link #clone} method. * - * @author Kirk Lund * @since 3.5 * @deprecated as of 7.0 use the management package instead */ diff --git a/geode-core/src/main/java/com/gemstone/gemfire/admin/DistributedSystemHealthConfig.java b/geode-core/src/main/java/com/gemstone/gemfire/admin/DistributedSystemHealthConfig.java index b7d4045a30ec..d838328b46a0 100644 --- a/geode-core/src/main/java/com/gemstone/gemfire/admin/DistributedSystemHealthConfig.java +++ b/geode-core/src/main/java/com/gemstone/gemfire/admin/DistributedSystemHealthConfig.java @@ -46,7 +46,6 @@ * * * - * @author David Whitlock * * @since 3.5 * @deprecated as of 7.0 use the management package instead diff --git a/geode-core/src/main/java/com/gemstone/gemfire/admin/DistributionLocator.java b/geode-core/src/main/java/com/gemstone/gemfire/admin/DistributionLocator.java index 721d846f9d23..1c841b29733e 100755 --- a/geode-core/src/main/java/com/gemstone/gemfire/admin/DistributionLocator.java +++ b/geode-core/src/main/java/com/gemstone/gemfire/admin/DistributionLocator.java @@ -25,7 +25,6 @@ * * @see DistributionLocatorConfig * - * @author Kirk Lund * @since 3.5 * @deprecated as of 7.0 use the management package instead */ diff --git a/geode-core/src/main/java/com/gemstone/gemfire/admin/DistributionLocatorConfig.java b/geode-core/src/main/java/com/gemstone/gemfire/admin/DistributionLocatorConfig.java index 46027bf46d34..e4bb2db86a3f 100644 --- a/geode-core/src/main/java/com/gemstone/gemfire/admin/DistributionLocatorConfig.java +++ b/geode-core/src/main/java/com/gemstone/gemfire/admin/DistributionLocatorConfig.java @@ -38,7 +38,6 @@ * @see AdminDistributedSystem#addDistributionLocator * @see com.gemstone.gemfire.distributed.Locator * - * @author David Whitlock * @since 4.0 * @deprecated as of 7.0 use the management package instead */ diff --git a/geode-core/src/main/java/com/gemstone/gemfire/admin/GemFireHealth.java b/geode-core/src/main/java/com/gemstone/gemfire/admin/GemFireHealth.java index ce8fd15c9ed2..6d3cb4476d96 100644 --- a/geode-core/src/main/java/com/gemstone/gemfire/admin/GemFireHealth.java +++ b/geode-core/src/main/java/com/gemstone/gemfire/admin/GemFireHealth.java @@ -40,7 +40,6 @@ * POOR_HEALTH, then the overall health is * POOR_HEALTH. * - * @author David Whitlock * * @since 3.5 * @deprecated as of 7.0 use the management package instead diff --git a/geode-core/src/main/java/com/gemstone/gemfire/admin/GemFireHealthConfig.java b/geode-core/src/main/java/com/gemstone/gemfire/admin/GemFireHealthConfig.java index f43774d7ac00..a5521dda8f7a 100644 --- a/geode-core/src/main/java/com/gemstone/gemfire/admin/GemFireHealthConfig.java +++ b/geode-core/src/main/java/com/gemstone/gemfire/admin/GemFireHealthConfig.java @@ -20,7 +20,6 @@ * Provides configuration information relating to all of the * components of a GemFire distributed system. * - * @author David Whitlock * * @since 3.5 * @deprecated as of 7.0 use the management package instead diff --git a/geode-core/src/main/java/com/gemstone/gemfire/admin/ManagedEntity.java b/geode-core/src/main/java/com/gemstone/gemfire/admin/ManagedEntity.java index d14d1d9cf55a..c0010e512857 100644 --- a/geode-core/src/main/java/com/gemstone/gemfire/admin/ManagedEntity.java +++ b/geode-core/src/main/java/com/gemstone/gemfire/admin/ManagedEntity.java @@ -21,7 +21,6 @@ * * @see ManagedEntityConfig * - * @author David Whitlock * @since 4.0 * @deprecated as of 7.0 use the management package instead */ diff --git a/geode-core/src/main/java/com/gemstone/gemfire/admin/ManagedEntityConfig.java b/geode-core/src/main/java/com/gemstone/gemfire/admin/ManagedEntityConfig.java index 8b57f2533fe4..aacc3d025061 100644 --- a/geode-core/src/main/java/com/gemstone/gemfire/admin/ManagedEntityConfig.java +++ b/geode-core/src/main/java/com/gemstone/gemfire/admin/ManagedEntityConfig.java @@ -25,7 +25,6 @@ * * @see ManagedEntity * - * @author David Whitlock * @since 4.0 * @deprecated as of 7.0 use the management package instead */ diff --git a/geode-core/src/main/java/com/gemstone/gemfire/admin/MemberHealthConfig.java b/geode-core/src/main/java/com/gemstone/gemfire/admin/MemberHealthConfig.java index 02de4d2ffcff..5f864bcf7113 100644 --- a/geode-core/src/main/java/com/gemstone/gemfire/admin/MemberHealthConfig.java +++ b/geode-core/src/main/java/com/gemstone/gemfire/admin/MemberHealthConfig.java @@ -45,7 +45,6 @@ * * * - * @author David Whitlock * * @since 3.5 * @deprecated as of 7.0 use the management package instead diff --git a/geode-core/src/main/java/com/gemstone/gemfire/admin/RegionSubRegionSnapshot.java b/geode-core/src/main/java/com/gemstone/gemfire/admin/RegionSubRegionSnapshot.java index 3a6fef8910c5..23f77ed0bc65 100644 --- a/geode-core/src/main/java/com/gemstone/gemfire/admin/RegionSubRegionSnapshot.java +++ b/geode-core/src/main/java/com/gemstone/gemfire/admin/RegionSubRegionSnapshot.java @@ -34,7 +34,6 @@ * Regions. This also provides the information about sub regions * This class is used by the monitoring tool. * - * @author Harsh Khanna * * @since 5.7 * @deprecated as of 7.0 use the management package instead diff --git a/geode-core/src/main/java/com/gemstone/gemfire/admin/RuntimeAdminException.java b/geode-core/src/main/java/com/gemstone/gemfire/admin/RuntimeAdminException.java index 8c27c7656217..44606fccd001 100755 --- a/geode-core/src/main/java/com/gemstone/gemfire/admin/RuntimeAdminException.java +++ b/geode-core/src/main/java/com/gemstone/gemfire/admin/RuntimeAdminException.java @@ -21,7 +21,6 @@ * A RuntimeAdminException is thrown when a runtime errors occurs * during administration or monitoring of GemFire. * - * @author Kirk Lund * @since 3.5 * * @deprecated as of 7.0 use the management package instead diff --git a/geode-core/src/main/java/com/gemstone/gemfire/admin/Statistic.java b/geode-core/src/main/java/com/gemstone/gemfire/admin/Statistic.java index 7d0afd803163..19cfb3f411fc 100755 --- a/geode-core/src/main/java/com/gemstone/gemfire/admin/Statistic.java +++ b/geode-core/src/main/java/com/gemstone/gemfire/admin/Statistic.java @@ -20,7 +20,6 @@ /** * Interface to represent a single statistic of a StatisticResource * - * @author Kirk Lund * @since 3.5 * * @deprecated as of 7.0 use the management package instead diff --git a/geode-core/src/main/java/com/gemstone/gemfire/admin/StatisticResource.java b/geode-core/src/main/java/com/gemstone/gemfire/admin/StatisticResource.java index 046b91b266d6..037fc4c4435d 100755 --- a/geode-core/src/main/java/com/gemstone/gemfire/admin/StatisticResource.java +++ b/geode-core/src/main/java/com/gemstone/gemfire/admin/StatisticResource.java @@ -21,7 +21,6 @@ * system member. A resource is comprised of one or many * Statistics. * - * @author Kirk Lund * @since 3.5 * * @deprecated as of 7.0 use the management package instead diff --git a/geode-core/src/main/java/com/gemstone/gemfire/admin/SystemMember.java b/geode-core/src/main/java/com/gemstone/gemfire/admin/SystemMember.java index 885744845d06..72db890a0fa8 100755 --- a/geode-core/src/main/java/com/gemstone/gemfire/admin/SystemMember.java +++ b/geode-core/src/main/java/com/gemstone/gemfire/admin/SystemMember.java @@ -23,7 +23,6 @@ /** * Administrative interface for monitoring a GemFire system member. * - * @author Kirk Lund * @since 3.5 * * @deprecated as of 7.0 use the management package instead diff --git a/geode-core/src/main/java/com/gemstone/gemfire/admin/SystemMemberBridgeServer.java b/geode-core/src/main/java/com/gemstone/gemfire/admin/SystemMemberBridgeServer.java index bedc77986a1c..eb4d715cf1ce 100644 --- a/geode-core/src/main/java/com/gemstone/gemfire/admin/SystemMemberBridgeServer.java +++ b/geode-core/src/main/java/com/gemstone/gemfire/admin/SystemMemberBridgeServer.java @@ -24,7 +24,6 @@ * * @see SystemMemberCache#addCacheServer * - * @author David Whitlock * @since 4.0 * @deprecated as of 5.7 use {@link SystemMemberCacheServer} instead. */ diff --git a/geode-core/src/main/java/com/gemstone/gemfire/admin/SystemMemberCache.java b/geode-core/src/main/java/com/gemstone/gemfire/admin/SystemMemberCache.java index 65a11e038882..654812d9bf41 100644 --- a/geode-core/src/main/java/com/gemstone/gemfire/admin/SystemMemberCache.java +++ b/geode-core/src/main/java/com/gemstone/gemfire/admin/SystemMemberCache.java @@ -22,7 +22,6 @@ * Administrative interface that represent's the {@link SystemMember}'s view * of its {@link com.gemstone.gemfire.cache.Cache}. * - * @author Darrel Schneider * @since 3.5 * @deprecated as of 7.0 use the management package instead */ diff --git a/geode-core/src/main/java/com/gemstone/gemfire/admin/SystemMemberCacheEvent.java b/geode-core/src/main/java/com/gemstone/gemfire/admin/SystemMemberCacheEvent.java index a67266f70281..527ba9bfc71c 100644 --- a/geode-core/src/main/java/com/gemstone/gemfire/admin/SystemMemberCacheEvent.java +++ b/geode-core/src/main/java/com/gemstone/gemfire/admin/SystemMemberCacheEvent.java @@ -22,7 +22,6 @@ * Instances of this are delivered to a {@link SystemMemberCacheListener} when a * a cache is created or closed. * - * @author Darrel Schneider * @since 5.0 * @deprecated as of 7.0 use the management package instead */ diff --git a/geode-core/src/main/java/com/gemstone/gemfire/admin/SystemMemberCacheListener.java b/geode-core/src/main/java/com/gemstone/gemfire/admin/SystemMemberCacheListener.java index 026c6213022c..416adca7b208 100644 --- a/geode-core/src/main/java/com/gemstone/gemfire/admin/SystemMemberCacheListener.java +++ b/geode-core/src/main/java/com/gemstone/gemfire/admin/SystemMemberCacheListener.java @@ -25,7 +25,6 @@ * @see AdminDistributedSystem#addCacheListener * @see AdminDistributedSystem#removeCacheListener * - * @author Darrel Schneider * @since 5.0 * @deprecated as of 7.0 use the management package instead */ diff --git a/geode-core/src/main/java/com/gemstone/gemfire/admin/SystemMemberCacheServer.java b/geode-core/src/main/java/com/gemstone/gemfire/admin/SystemMemberCacheServer.java index a93995290ade..0e3ab1231d0e 100755 --- a/geode-core/src/main/java/com/gemstone/gemfire/admin/SystemMemberCacheServer.java +++ b/geode-core/src/main/java/com/gemstone/gemfire/admin/SystemMemberCacheServer.java @@ -25,7 +25,6 @@ * * @see SystemMemberCache#addCacheServer * - * @author darrel * @since 5.7 * @deprecated as of 7.0 use the management package instead */ diff --git a/geode-core/src/main/java/com/gemstone/gemfire/admin/SystemMemberRegion.java b/geode-core/src/main/java/com/gemstone/gemfire/admin/SystemMemberRegion.java index 43e917b752ce..f76d3b9a628c 100644 --- a/geode-core/src/main/java/com/gemstone/gemfire/admin/SystemMemberRegion.java +++ b/geode-core/src/main/java/com/gemstone/gemfire/admin/SystemMemberRegion.java @@ -27,7 +27,6 @@ * SystemMemberRegion will throw {@link * RegionNotFoundException}. * - * @author Darrel Schneider * @since 3.5 * @deprecated as of 7.0 use the management package instead */ diff --git a/geode-core/src/main/java/com/gemstone/gemfire/admin/SystemMemberRegionEvent.java b/geode-core/src/main/java/com/gemstone/gemfire/admin/SystemMemberRegionEvent.java index 9f6eebd5ae3f..d6e19b2d242e 100644 --- a/geode-core/src/main/java/com/gemstone/gemfire/admin/SystemMemberRegionEvent.java +++ b/geode-core/src/main/java/com/gemstone/gemfire/admin/SystemMemberRegionEvent.java @@ -21,7 +21,6 @@ * Instances of this are delivered to a {@link SystemMemberCacheListener} when a * a region comes or goes. * - * @author Darrel Schneider * @since 5.0 * @deprecated as of 7.0 use the management package instead */ diff --git a/geode-core/src/main/java/com/gemstone/gemfire/admin/SystemMemberType.java b/geode-core/src/main/java/com/gemstone/gemfire/admin/SystemMemberType.java index a851e5a5f571..1dbb2061e853 100755 --- a/geode-core/src/main/java/com/gemstone/gemfire/admin/SystemMemberType.java +++ b/geode-core/src/main/java/com/gemstone/gemfire/admin/SystemMemberType.java @@ -21,7 +21,6 @@ /** * Type-safe definition for system members. * - * @author Kirk Lund * @since 3.5 * * @deprecated as of 7.0 use the management package instead diff --git a/geode-core/src/main/java/com/gemstone/gemfire/admin/SystemMembershipEvent.java b/geode-core/src/main/java/com/gemstone/gemfire/admin/SystemMembershipEvent.java index b90885381795..be710c9f99c5 100644 --- a/geode-core/src/main/java/com/gemstone/gemfire/admin/SystemMembershipEvent.java +++ b/geode-core/src/main/java/com/gemstone/gemfire/admin/SystemMembershipEvent.java @@ -22,7 +22,6 @@ * Instances of this are delivered to a {@link SystemMembershipListener} when a * member has joined or left the distributed system. * - * @author Darrel Schneider * @since 3.5 * @deprecated as of 7.0 use the management package instead */ diff --git a/geode-core/src/main/java/com/gemstone/gemfire/admin/SystemMembershipListener.java b/geode-core/src/main/java/com/gemstone/gemfire/admin/SystemMembershipListener.java index 5c2edaafdf11..3502baec4451 100644 --- a/geode-core/src/main/java/com/gemstone/gemfire/admin/SystemMembershipListener.java +++ b/geode-core/src/main/java/com/gemstone/gemfire/admin/SystemMembershipListener.java @@ -22,7 +22,6 @@ * * @see AdminDistributedSystem#addMembershipListener * - * @author David Whitlock * @since 3.5 * @deprecated as of 7.0 use the management package instead */ diff --git a/geode-core/src/main/java/com/gemstone/gemfire/admin/UnmodifiableConfigurationException.java b/geode-core/src/main/java/com/gemstone/gemfire/admin/UnmodifiableConfigurationException.java index 605577c02815..42175084f066 100755 --- a/geode-core/src/main/java/com/gemstone/gemfire/admin/UnmodifiableConfigurationException.java +++ b/geode-core/src/main/java/com/gemstone/gemfire/admin/UnmodifiableConfigurationException.java @@ -22,7 +22,6 @@ * is made to modify the value of an unmodifiable * {@link ConfigurationParameter}. * - * @author Kirk Lund * @since 3.5 * * @deprecated as of 7.0 use the management package instead diff --git a/geode-core/src/main/java/com/gemstone/gemfire/admin/internal/AbstractHealthEvaluator.java b/geode-core/src/main/java/com/gemstone/gemfire/admin/internal/AbstractHealthEvaluator.java index 337bc9ef9de5..87758fe17906 100644 --- a/geode-core/src/main/java/com/gemstone/gemfire/admin/internal/AbstractHealthEvaluator.java +++ b/geode-core/src/main/java/com/gemstone/gemfire/admin/internal/AbstractHealthEvaluator.java @@ -38,7 +38,6 @@ * only in member VMs. They are not Serializable and * aren't meant to be. * - * @author David Whitlock * * @since 3.5 * */ diff --git a/geode-core/src/main/java/com/gemstone/gemfire/admin/internal/AdminDistributedSystemImpl.java b/geode-core/src/main/java/com/gemstone/gemfire/admin/internal/AdminDistributedSystemImpl.java index 4e849360a801..21a9ae3c14b6 100755 --- a/geode-core/src/main/java/com/gemstone/gemfire/admin/internal/AdminDistributedSystemImpl.java +++ b/geode-core/src/main/java/com/gemstone/gemfire/admin/internal/AdminDistributedSystemImpl.java @@ -91,7 +91,6 @@ /** * Represents a GemFire distributed system for remote administration/management. * - * @author Kirk Lund * @since 3.5 */ public class AdminDistributedSystemImpl diff --git a/geode-core/src/main/java/com/gemstone/gemfire/admin/internal/BackupStatusImpl.java b/geode-core/src/main/java/com/gemstone/gemfire/admin/internal/BackupStatusImpl.java index aee056e54828..33faed00f7e7 100644 --- a/geode-core/src/main/java/com/gemstone/gemfire/admin/internal/BackupStatusImpl.java +++ b/geode-core/src/main/java/com/gemstone/gemfire/admin/internal/BackupStatusImpl.java @@ -27,7 +27,6 @@ /** * Holds the result of a backup operation. * - * @author dsmith * */ public class BackupStatusImpl implements BackupStatus, Serializable { diff --git a/geode-core/src/main/java/com/gemstone/gemfire/admin/internal/CacheHealthConfigImpl.java b/geode-core/src/main/java/com/gemstone/gemfire/admin/internal/CacheHealthConfigImpl.java index 127fe21efb1d..ed904ca04bee 100644 --- a/geode-core/src/main/java/com/gemstone/gemfire/admin/internal/CacheHealthConfigImpl.java +++ b/geode-core/src/main/java/com/gemstone/gemfire/admin/internal/CacheHealthConfigImpl.java @@ -21,7 +21,6 @@ /** * The implementation of CacheHealthConfig * - * @author David Whitlock * * @since 3.5 */ diff --git a/geode-core/src/main/java/com/gemstone/gemfire/admin/internal/CacheHealthEvaluator.java b/geode-core/src/main/java/com/gemstone/gemfire/admin/internal/CacheHealthEvaluator.java index 7df4b85b848d..4ba1b9c87266 100644 --- a/geode-core/src/main/java/com/gemstone/gemfire/admin/internal/CacheHealthEvaluator.java +++ b/geode-core/src/main/java/com/gemstone/gemfire/admin/internal/CacheHealthEvaluator.java @@ -38,7 +38,6 @@ * Cache instance according to the thresholds provided in * a {@link CacheHealthConfig}. * - * @author David Whitlock * * @since 3.5 */ diff --git a/geode-core/src/main/java/com/gemstone/gemfire/admin/internal/CacheServerConfigImpl.java b/geode-core/src/main/java/com/gemstone/gemfire/admin/internal/CacheServerConfigImpl.java index 1518f8b3186e..8f75a62a50a4 100644 --- a/geode-core/src/main/java/com/gemstone/gemfire/admin/internal/CacheServerConfigImpl.java +++ b/geode-core/src/main/java/com/gemstone/gemfire/admin/internal/CacheServerConfigImpl.java @@ -24,7 +24,6 @@ /** * An implementation of CacheVmConfig * - * @author David Whitlock * @since 4.0 */ public class CacheServerConfigImpl extends ManagedEntityConfigImpl diff --git a/geode-core/src/main/java/com/gemstone/gemfire/admin/internal/CacheServerImpl.java b/geode-core/src/main/java/com/gemstone/gemfire/admin/internal/CacheServerImpl.java index fd5fef3b68d7..400777c21643 100644 --- a/geode-core/src/main/java/com/gemstone/gemfire/admin/internal/CacheServerImpl.java +++ b/geode-core/src/main/java/com/gemstone/gemfire/admin/internal/CacheServerImpl.java @@ -26,7 +26,6 @@ /** * Implements the administrative interface to a cache server. * - * @author David Whitlock * @since 3.5 */ public class CacheServerImpl extends ManagedSystemMemberImpl diff --git a/geode-core/src/main/java/com/gemstone/gemfire/admin/internal/ConfigurationParameterImpl.java b/geode-core/src/main/java/com/gemstone/gemfire/admin/internal/ConfigurationParameterImpl.java index 909214c61a60..604fe719e7bf 100755 --- a/geode-core/src/main/java/com/gemstone/gemfire/admin/internal/ConfigurationParameterImpl.java +++ b/geode-core/src/main/java/com/gemstone/gemfire/admin/internal/ConfigurationParameterImpl.java @@ -30,7 +30,6 @@ /** * A single configuration parameter of a system member. * - * @author Kirk Lund * @since 3.5 * */ diff --git a/geode-core/src/main/java/com/gemstone/gemfire/admin/internal/ConfigurationParameterListener.java b/geode-core/src/main/java/com/gemstone/gemfire/admin/internal/ConfigurationParameterListener.java index 82e0d3cb80b9..a9d0c91bd8d2 100755 --- a/geode-core/src/main/java/com/gemstone/gemfire/admin/internal/ConfigurationParameterListener.java +++ b/geode-core/src/main/java/com/gemstone/gemfire/admin/internal/ConfigurationParameterListener.java @@ -25,7 +25,6 @@ * configuration changes made through * {@link ConfigurationParameterImpl#setValue}. * - * @author Kirk Lund * @since 3.5 * */ diff --git a/geode-core/src/main/java/com/gemstone/gemfire/admin/internal/DisabledManagedEntityController.java b/geode-core/src/main/java/com/gemstone/gemfire/admin/internal/DisabledManagedEntityController.java index b922078543e1..709af32ef62f 100755 --- a/geode-core/src/main/java/com/gemstone/gemfire/admin/internal/DisabledManagedEntityController.java +++ b/geode-core/src/main/java/com/gemstone/gemfire/admin/internal/DisabledManagedEntityController.java @@ -31,7 +31,6 @@ * in the classpath then the code uses DisabledManagedEntityController as a * place holder. * - * @author Kirk Lund */ class DisabledManagedEntityController implements ManagedEntityController { diff --git a/geode-core/src/main/java/com/gemstone/gemfire/admin/internal/DistributedSystemHealthConfigImpl.java b/geode-core/src/main/java/com/gemstone/gemfire/admin/internal/DistributedSystemHealthConfigImpl.java index 9ad5de48edc8..111fa6e4b27d 100644 --- a/geode-core/src/main/java/com/gemstone/gemfire/admin/internal/DistributedSystemHealthConfigImpl.java +++ b/geode-core/src/main/java/com/gemstone/gemfire/admin/internal/DistributedSystemHealthConfigImpl.java @@ -24,7 +24,6 @@ * Serializable and is not part of the {@link * GemFireHealthConfigImpl} class hierarchy. * - * @author David Whitlock * * @since 3.5 */ diff --git a/geode-core/src/main/java/com/gemstone/gemfire/admin/internal/DistributedSystemHealthEvaluator.java b/geode-core/src/main/java/com/gemstone/gemfire/admin/internal/DistributedSystemHealthEvaluator.java index 511edba19979..f657ea46a5c2 100644 --- a/geode-core/src/main/java/com/gemstone/gemfire/admin/internal/DistributedSystemHealthEvaluator.java +++ b/geode-core/src/main/java/com/gemstone/gemfire/admin/internal/DistributedSystemHealthEvaluator.java @@ -40,7 +40,6 @@ * DistributedSystemHealthEvaluator per distributed * system. * - * @author David Whitlock * * @since 3.5 * */ diff --git a/geode-core/src/main/java/com/gemstone/gemfire/admin/internal/DistributedSystemHealthMonitor.java b/geode-core/src/main/java/com/gemstone/gemfire/admin/internal/DistributedSystemHealthMonitor.java index e8ae4e877279..59b43db4d24e 100644 --- a/geode-core/src/main/java/com/gemstone/gemfire/admin/internal/DistributedSystemHealthMonitor.java +++ b/geode-core/src/main/java/com/gemstone/gemfire/admin/internal/DistributedSystemHealthMonitor.java @@ -59,7 +59,6 @@ * GemFireVM. Kind of hokey, but it beats a bunch of * special-case code. * - * @author David Whitlock * * @since 3.5 * */ diff --git a/geode-core/src/main/java/com/gemstone/gemfire/admin/internal/DistributionLocatorConfigImpl.java b/geode-core/src/main/java/com/gemstone/gemfire/admin/internal/DistributionLocatorConfigImpl.java index 4ee5b83f2cb9..592c6c7c5ac6 100644 --- a/geode-core/src/main/java/com/gemstone/gemfire/admin/internal/DistributionLocatorConfigImpl.java +++ b/geode-core/src/main/java/com/gemstone/gemfire/admin/internal/DistributionLocatorConfigImpl.java @@ -29,7 +29,6 @@ * Provides an implementation of * DistributionLocatorConfig. * - * @author David Whitlock * @since 4.0 */ public class DistributionLocatorConfigImpl diff --git a/geode-core/src/main/java/com/gemstone/gemfire/admin/internal/DistributionLocatorImpl.java b/geode-core/src/main/java/com/gemstone/gemfire/admin/internal/DistributionLocatorImpl.java index 545f9dedbec4..ba0816d395c9 100755 --- a/geode-core/src/main/java/com/gemstone/gemfire/admin/internal/DistributionLocatorImpl.java +++ b/geode-core/src/main/java/com/gemstone/gemfire/admin/internal/DistributionLocatorImpl.java @@ -41,7 +41,6 @@ /** * Default administrative implementation of a DistributionLocator. * - * @author Kirk Lund * @since 3.5 */ public class DistributionLocatorImpl diff --git a/geode-core/src/main/java/com/gemstone/gemfire/admin/internal/EnabledManagedEntityController.java b/geode-core/src/main/java/com/gemstone/gemfire/admin/internal/EnabledManagedEntityController.java index 8098455e588d..7618a95ed7d4 100755 --- a/geode-core/src/main/java/com/gemstone/gemfire/admin/internal/EnabledManagedEntityController.java +++ b/geode-core/src/main/java/com/gemstone/gemfire/admin/internal/EnabledManagedEntityController.java @@ -46,8 +46,6 @@ * This class is a refactoring of Systemcontroller, * RemoteCommand, and LocatorRemoteCommand. * - * @author David Whitlock - * @author Kirk Lund (original SystemController) * @since 4.0 */ class EnabledManagedEntityController implements ManagedEntityController { diff --git a/geode-core/src/main/java/com/gemstone/gemfire/admin/internal/FinishBackupRequest.java b/geode-core/src/main/java/com/gemstone/gemfire/admin/internal/FinishBackupRequest.java index 58577d606fb4..582ab62f7bd6 100644 --- a/geode-core/src/main/java/com/gemstone/gemfire/admin/internal/FinishBackupRequest.java +++ b/geode-core/src/main/java/com/gemstone/gemfire/admin/internal/FinishBackupRequest.java @@ -50,7 +50,6 @@ * A request send from an admin VM to all of the peers to indicate * that that should complete the backup operation. * - * @author dsmith * */ public class FinishBackupRequest extends CliLegacyMessage { diff --git a/geode-core/src/main/java/com/gemstone/gemfire/admin/internal/FinishBackupResponse.java b/geode-core/src/main/java/com/gemstone/gemfire/admin/internal/FinishBackupResponse.java index c741bb867fcf..eee89177bb86 100644 --- a/geode-core/src/main/java/com/gemstone/gemfire/admin/internal/FinishBackupResponse.java +++ b/geode-core/src/main/java/com/gemstone/gemfire/admin/internal/FinishBackupResponse.java @@ -31,7 +31,6 @@ * reply contains the persistent ids of the disk stores * that were backed up on this member. * - * @author dsmith * */ public class FinishBackupResponse extends AdminResponse { diff --git a/geode-core/src/main/java/com/gemstone/gemfire/admin/internal/FlushToDiskRequest.java b/geode-core/src/main/java/com/gemstone/gemfire/admin/internal/FlushToDiskRequest.java index 1ab3ef8f70a7..9c84820d7430 100644 --- a/geode-core/src/main/java/com/gemstone/gemfire/admin/internal/FlushToDiskRequest.java +++ b/geode-core/src/main/java/com/gemstone/gemfire/admin/internal/FlushToDiskRequest.java @@ -37,7 +37,6 @@ * the members will suspend bucket destroys to make sure * buckets aren't missed during the backup. * - * @author dsmith * */ public class FlushToDiskRequest extends CliLegacyMessage { diff --git a/geode-core/src/main/java/com/gemstone/gemfire/admin/internal/FlushToDiskResponse.java b/geode-core/src/main/java/com/gemstone/gemfire/admin/internal/FlushToDiskResponse.java index d3255d316791..050f4ac3b873 100644 --- a/geode-core/src/main/java/com/gemstone/gemfire/admin/internal/FlushToDiskResponse.java +++ b/geode-core/src/main/java/com/gemstone/gemfire/admin/internal/FlushToDiskResponse.java @@ -22,7 +22,6 @@ /** * The response to the {@link FlushToDiskRequest} * - * @author dsmith * */ public class FlushToDiskResponse extends AdminResponse { diff --git a/geode-core/src/main/java/com/gemstone/gemfire/admin/internal/GemFireHealthConfigImpl.java b/geode-core/src/main/java/com/gemstone/gemfire/admin/internal/GemFireHealthConfigImpl.java index 0a7ba025ee3d..ddef2e621cee 100644 --- a/geode-core/src/main/java/com/gemstone/gemfire/admin/internal/GemFireHealthConfigImpl.java +++ b/geode-core/src/main/java/com/gemstone/gemfire/admin/internal/GemFireHealthConfigImpl.java @@ -25,7 +25,6 @@ * The implementation of GemFireHealthConfig * * - * @author David Whitlock * * @since 3.5 */ diff --git a/geode-core/src/main/java/com/gemstone/gemfire/admin/internal/GemFireHealthEvaluator.java b/geode-core/src/main/java/com/gemstone/gemfire/admin/internal/GemFireHealthEvaluator.java index c11f93386367..da9611fd2ed0 100644 --- a/geode-core/src/main/java/com/gemstone/gemfire/admin/internal/GemFireHealthEvaluator.java +++ b/geode-core/src/main/java/com/gemstone/gemfire/admin/internal/GemFireHealthEvaluator.java @@ -42,7 +42,6 @@ * @see MemberHealthEvaluator * @see CacheHealthEvaluator * - * @author David Whitlock * * @since 3.5 */ diff --git a/geode-core/src/main/java/com/gemstone/gemfire/admin/internal/GemFireHealthImpl.java b/geode-core/src/main/java/com/gemstone/gemfire/admin/internal/GemFireHealthImpl.java index 2490a6dc411d..24684ebb8ec1 100644 --- a/geode-core/src/main/java/com/gemstone/gemfire/admin/internal/GemFireHealthImpl.java +++ b/geode-core/src/main/java/com/gemstone/gemfire/admin/internal/GemFireHealthImpl.java @@ -33,7 +33,6 @@ * GemFireHealthConfig}s to the remote member VM in which the health * is calcualted. * - * @author David Whitlock * * @since 3.5 */ diff --git a/geode-core/src/main/java/com/gemstone/gemfire/admin/internal/InetAddressUtil.java b/geode-core/src/main/java/com/gemstone/gemfire/admin/internal/InetAddressUtil.java index bfb46f5a6a9b..05089a7b3e00 100755 --- a/geode-core/src/main/java/com/gemstone/gemfire/admin/internal/InetAddressUtil.java +++ b/geode-core/src/main/java/com/gemstone/gemfire/admin/internal/InetAddressUtil.java @@ -34,7 +34,6 @@ * Provides static utilities for manipulating, validating, and converting * InetAddresses and host strings. * - * @author Kirk Lund * @since 3.5 */ public class InetAddressUtil { diff --git a/geode-core/src/main/java/com/gemstone/gemfire/admin/internal/InternalManagedEntity.java b/geode-core/src/main/java/com/gemstone/gemfire/admin/internal/InternalManagedEntity.java index d436c5e38393..fa602bc76e4d 100644 --- a/geode-core/src/main/java/com/gemstone/gemfire/admin/internal/InternalManagedEntity.java +++ b/geode-core/src/main/java/com/gemstone/gemfire/admin/internal/InternalManagedEntity.java @@ -25,7 +25,6 @@ * ManagedEntitys. This functionality is used by the * {@link ManagedEntityController} to manage the entity. * - * @author David Whitlock * @since 4.0 */ public interface InternalManagedEntity extends ManagedEntity { diff --git a/geode-core/src/main/java/com/gemstone/gemfire/admin/internal/ManagedEntityConfigImpl.java b/geode-core/src/main/java/com/gemstone/gemfire/admin/internal/ManagedEntityConfigImpl.java index c64d43da4795..af289d69295a 100644 --- a/geode-core/src/main/java/com/gemstone/gemfire/admin/internal/ManagedEntityConfigImpl.java +++ b/geode-core/src/main/java/com/gemstone/gemfire/admin/internal/ManagedEntityConfigImpl.java @@ -33,7 +33,6 @@ * It contains configuration state and behavior common to all managed * entities. * - * @author David Whitlock * @since 4.0 */ public abstract class ManagedEntityConfigImpl diff --git a/geode-core/src/main/java/com/gemstone/gemfire/admin/internal/ManagedEntityConfigXml.java b/geode-core/src/main/java/com/gemstone/gemfire/admin/internal/ManagedEntityConfigXml.java index 4bf14a379252..17c426385966 100644 --- a/geode-core/src/main/java/com/gemstone/gemfire/admin/internal/ManagedEntityConfigXml.java +++ b/geode-core/src/main/java/com/gemstone/gemfire/admin/internal/ManagedEntityConfigXml.java @@ -27,7 +27,6 @@ * com.gemstone.gemfire.admin.DistributedSystemConfig} and vice versa. * It provides helper methods and constants. * - * @author David Whitlock * @since 4.0 */ abstract class ManagedEntityConfigXml implements EntityResolver, ErrorHandler { diff --git a/geode-core/src/main/java/com/gemstone/gemfire/admin/internal/ManagedEntityConfigXmlGenerator.java b/geode-core/src/main/java/com/gemstone/gemfire/admin/internal/ManagedEntityConfigXmlGenerator.java index e881a54106df..36111f4008f1 100644 --- a/geode-core/src/main/java/com/gemstone/gemfire/admin/internal/ManagedEntityConfigXmlGenerator.java +++ b/geode-core/src/main/java/com/gemstone/gemfire/admin/internal/ManagedEntityConfigXmlGenerator.java @@ -35,7 +35,6 @@ * AdminDistributedSystem. This class is used mainly for * testing. * - * @author David Whitlock * @since 4.0 */ public class ManagedEntityConfigXmlGenerator diff --git a/geode-core/src/main/java/com/gemstone/gemfire/admin/internal/ManagedEntityConfigXmlParser.java b/geode-core/src/main/java/com/gemstone/gemfire/admin/internal/ManagedEntityConfigXmlParser.java index 3188d49b1450..12763246a2e0 100644 --- a/geode-core/src/main/java/com/gemstone/gemfire/admin/internal/ManagedEntityConfigXmlParser.java +++ b/geode-core/src/main/java/com/gemstone/gemfire/admin/internal/ManagedEntityConfigXmlParser.java @@ -31,7 +31,6 @@ * Parses an XML file and configures a {@link DistributedSystemConfig} * from it. * - * @author David Whitlock * @since 4.0 */ public class ManagedEntityConfigXmlParser diff --git a/geode-core/src/main/java/com/gemstone/gemfire/admin/internal/ManagedEntityController.java b/geode-core/src/main/java/com/gemstone/gemfire/admin/internal/ManagedEntityController.java index abe3e28ddc51..85193ef35bd3 100644 --- a/geode-core/src/main/java/com/gemstone/gemfire/admin/internal/ManagedEntityController.java +++ b/geode-core/src/main/java/com/gemstone/gemfire/admin/internal/ManagedEntityController.java @@ -24,7 +24,6 @@ * Defines the actual administration (starting, stopping, etc.) of * GemFire {@link ManagedEntity}s. * - * @author Kirk Lund */ interface ManagedEntityController { /** diff --git a/geode-core/src/main/java/com/gemstone/gemfire/admin/internal/ManagedEntityControllerFactory.java b/geode-core/src/main/java/com/gemstone/gemfire/admin/internal/ManagedEntityControllerFactory.java index 5b096877f242..c74583570d3e 100755 --- a/geode-core/src/main/java/com/gemstone/gemfire/admin/internal/ManagedEntityControllerFactory.java +++ b/geode-core/src/main/java/com/gemstone/gemfire/admin/internal/ManagedEntityControllerFactory.java @@ -28,7 +28,6 @@ * Creates ManagedEntityController for administration (starting, stopping, etc.) * of GemFire {@link ManagedEntity}s. * - * @author Kirk Lund */ public class ManagedEntityControllerFactory { diff --git a/geode-core/src/main/java/com/gemstone/gemfire/admin/internal/ManagedSystemMemberImpl.java b/geode-core/src/main/java/com/gemstone/gemfire/admin/internal/ManagedSystemMemberImpl.java index a58b6e4d7488..5828f5c67fad 100644 --- a/geode-core/src/main/java/com/gemstone/gemfire/admin/internal/ManagedSystemMemberImpl.java +++ b/geode-core/src/main/java/com/gemstone/gemfire/admin/internal/ManagedSystemMemberImpl.java @@ -30,7 +30,6 @@ * reflectively (for MBean operations) on instances of its * subclasses. * - * @author David Whitlock * @since 4.0 */ public abstract class ManagedSystemMemberImpl extends SystemMemberImpl diff --git a/geode-core/src/main/java/com/gemstone/gemfire/admin/internal/MemberHealthConfigImpl.java b/geode-core/src/main/java/com/gemstone/gemfire/admin/internal/MemberHealthConfigImpl.java index 7b395e153f69..3f15ebc15664 100644 --- a/geode-core/src/main/java/com/gemstone/gemfire/admin/internal/MemberHealthConfigImpl.java +++ b/geode-core/src/main/java/com/gemstone/gemfire/admin/internal/MemberHealthConfigImpl.java @@ -23,7 +23,6 @@ /** * The implementation of MemberHealthConfig * - * @author David Whitlock * * @since 3.5 */ diff --git a/geode-core/src/main/java/com/gemstone/gemfire/admin/internal/MemberHealthEvaluator.java b/geode-core/src/main/java/com/gemstone/gemfire/admin/internal/MemberHealthEvaluator.java index eb2334930961..31f3a3796de4 100644 --- a/geode-core/src/main/java/com/gemstone/gemfire/admin/internal/MemberHealthEvaluator.java +++ b/geode-core/src/main/java/com/gemstone/gemfire/admin/internal/MemberHealthEvaluator.java @@ -36,12 +36,10 @@ * @see ProcessStats * @see DMStats * - * @author David Whitlock * * @since 3.5 */ /** - * @author rdubey * */ class MemberHealthEvaluator extends AbstractHealthEvaluator { diff --git a/geode-core/src/main/java/com/gemstone/gemfire/admin/internal/PrepareBackupRequest.java b/geode-core/src/main/java/com/gemstone/gemfire/admin/internal/PrepareBackupRequest.java index 93733fee02ca..482dac889625 100644 --- a/geode-core/src/main/java/com/gemstone/gemfire/admin/internal/PrepareBackupRequest.java +++ b/geode-core/src/main/java/com/gemstone/gemfire/admin/internal/PrepareBackupRequest.java @@ -49,7 +49,6 @@ * the members will suspend bucket destroys to make sure * buckets aren't missed during the backup. * - * @author dsmith * */ public class PrepareBackupRequest extends CliLegacyMessage { diff --git a/geode-core/src/main/java/com/gemstone/gemfire/admin/internal/PrepareBackupResponse.java b/geode-core/src/main/java/com/gemstone/gemfire/admin/internal/PrepareBackupResponse.java index 92c1848c6e82..41f0b51965f2 100644 --- a/geode-core/src/main/java/com/gemstone/gemfire/admin/internal/PrepareBackupResponse.java +++ b/geode-core/src/main/java/com/gemstone/gemfire/admin/internal/PrepareBackupResponse.java @@ -29,7 +29,6 @@ /** * The response to the {@link PrepareBackupRequest} * - * @author dsmith * */ public class PrepareBackupResponse extends AdminResponse { diff --git a/geode-core/src/main/java/com/gemstone/gemfire/admin/internal/StatisticImpl.java b/geode-core/src/main/java/com/gemstone/gemfire/admin/internal/StatisticImpl.java index 7d1db84b89b4..e86f172092ca 100755 --- a/geode-core/src/main/java/com/gemstone/gemfire/admin/internal/StatisticImpl.java +++ b/geode-core/src/main/java/com/gemstone/gemfire/admin/internal/StatisticImpl.java @@ -22,7 +22,6 @@ /** * Implementation of a single statistic in a StatisticResource * - * @author Kirk Lund * @since 3.5 * */ diff --git a/geode-core/src/main/java/com/gemstone/gemfire/admin/internal/StatisticResourceImpl.java b/geode-core/src/main/java/com/gemstone/gemfire/admin/internal/StatisticResourceImpl.java index 78b6804250c4..91025862468f 100755 --- a/geode-core/src/main/java/com/gemstone/gemfire/admin/internal/StatisticResourceImpl.java +++ b/geode-core/src/main/java/com/gemstone/gemfire/admin/internal/StatisticResourceImpl.java @@ -32,7 +32,6 @@ /** * Provides monitoring of a statistic resource. * - * @author Kirk Lund * @since 3.5 */ public class StatisticResourceImpl diff --git a/geode-core/src/main/java/com/gemstone/gemfire/admin/internal/SystemMemberBridgeServerImpl.java b/geode-core/src/main/java/com/gemstone/gemfire/admin/internal/SystemMemberBridgeServerImpl.java index f38bd57d1a8c..99f1a02d55e8 100644 --- a/geode-core/src/main/java/com/gemstone/gemfire/admin/internal/SystemMemberBridgeServerImpl.java +++ b/geode-core/src/main/java/com/gemstone/gemfire/admin/internal/SystemMemberBridgeServerImpl.java @@ -29,7 +29,6 @@ /** * Implementation of an object used for managing cache servers. * - * @author David Whitlock * @since 4.0 */ public class SystemMemberBridgeServerImpl diff --git a/geode-core/src/main/java/com/gemstone/gemfire/admin/internal/SystemMemberCacheEventImpl.java b/geode-core/src/main/java/com/gemstone/gemfire/admin/internal/SystemMemberCacheEventImpl.java index 9b0ae26bb8f9..767119215ced 100644 --- a/geode-core/src/main/java/com/gemstone/gemfire/admin/internal/SystemMemberCacheEventImpl.java +++ b/geode-core/src/main/java/com/gemstone/gemfire/admin/internal/SystemMemberCacheEventImpl.java @@ -25,7 +25,6 @@ * Instances of this are delivered to a {@link SystemMemberCacheListener} when a * a cache is created or closed. * - * @author Darrel Schneider * @since 5.0 */ public class SystemMemberCacheEventImpl diff --git a/geode-core/src/main/java/com/gemstone/gemfire/admin/internal/SystemMemberCacheEventProcessor.java b/geode-core/src/main/java/com/gemstone/gemfire/admin/internal/SystemMemberCacheEventProcessor.java index 8dc19ae33061..4532e38f6502 100644 --- a/geode-core/src/main/java/com/gemstone/gemfire/admin/internal/SystemMemberCacheEventProcessor.java +++ b/geode-core/src/main/java/com/gemstone/gemfire/admin/internal/SystemMemberCacheEventProcessor.java @@ -40,7 +40,6 @@ /** * This class processes the message to be delivered to admin node. * [This needs to be redesigned and reimplemented... see 32887] - * @author Darrel Schneider * @since 5.0 */ public class SystemMemberCacheEventProcessor { diff --git a/geode-core/src/main/java/com/gemstone/gemfire/admin/internal/SystemMemberCacheImpl.java b/geode-core/src/main/java/com/gemstone/gemfire/admin/internal/SystemMemberCacheImpl.java index cc835def1137..aa77b667ce1b 100644 --- a/geode-core/src/main/java/com/gemstone/gemfire/admin/internal/SystemMemberCacheImpl.java +++ b/geode-core/src/main/java/com/gemstone/gemfire/admin/internal/SystemMemberCacheImpl.java @@ -28,7 +28,6 @@ /** * View of a GemFire system member's cache. * - * @author Darrel Schneider * @since 3.5 */ public class SystemMemberCacheImpl implements SystemMemberCache { diff --git a/geode-core/src/main/java/com/gemstone/gemfire/admin/internal/SystemMemberImpl.java b/geode-core/src/main/java/com/gemstone/gemfire/admin/internal/SystemMemberImpl.java index 17eec094dffc..7533a8a48c8e 100755 --- a/geode-core/src/main/java/com/gemstone/gemfire/admin/internal/SystemMemberImpl.java +++ b/geode-core/src/main/java/com/gemstone/gemfire/admin/internal/SystemMemberImpl.java @@ -52,7 +52,6 @@ /** * Member of a GemFire system. * - * @author Kirk Lund * @since 3.5 */ public class SystemMemberImpl diff --git a/geode-core/src/main/java/com/gemstone/gemfire/admin/internal/SystemMemberRegionEventImpl.java b/geode-core/src/main/java/com/gemstone/gemfire/admin/internal/SystemMemberRegionEventImpl.java index 313e82947b8e..fa0f9b7030a7 100644 --- a/geode-core/src/main/java/com/gemstone/gemfire/admin/internal/SystemMemberRegionEventImpl.java +++ b/geode-core/src/main/java/com/gemstone/gemfire/admin/internal/SystemMemberRegionEventImpl.java @@ -25,7 +25,6 @@ * Instances of this are delivered to a {@link SystemMemberCacheListener} when a * a region comes or goes. * - * @author Darrel Schneider * @since 5.0 */ public class SystemMemberRegionEventImpl diff --git a/geode-core/src/main/java/com/gemstone/gemfire/admin/internal/SystemMemberRegionImpl.java b/geode-core/src/main/java/com/gemstone/gemfire/admin/internal/SystemMemberRegionImpl.java index 9f8ad06e88d2..6c3bf0aab7bf 100644 --- a/geode-core/src/main/java/com/gemstone/gemfire/admin/internal/SystemMemberRegionImpl.java +++ b/geode-core/src/main/java/com/gemstone/gemfire/admin/internal/SystemMemberRegionImpl.java @@ -28,7 +28,6 @@ /** * View of a region in a GemFire system member's cache. * - * @author Darrel Schneider * @since 3.5 */ public class SystemMemberRegionImpl implements SystemMemberRegion { diff --git a/geode-core/src/main/java/com/gemstone/gemfire/admin/internal/SystemMembershipEventImpl.java b/geode-core/src/main/java/com/gemstone/gemfire/admin/internal/SystemMembershipEventImpl.java index e90f4d30ae8a..4d1cc3821da7 100644 --- a/geode-core/src/main/java/com/gemstone/gemfire/admin/internal/SystemMembershipEventImpl.java +++ b/geode-core/src/main/java/com/gemstone/gemfire/admin/internal/SystemMembershipEventImpl.java @@ -23,7 +23,6 @@ * An event delivered to a {@link SystemMembershipListener} when a * member has joined or left the distributed system. * - * @author Darrel Schneider * @since 5.0 */ public class SystemMembershipEventImpl implements SystemMembershipEvent { diff --git a/geode-core/src/main/java/com/gemstone/gemfire/admin/jmx/Agent.java b/geode-core/src/main/java/com/gemstone/gemfire/admin/jmx/Agent.java index f79e0c34eb5d..1723735bcd05 100644 --- a/geode-core/src/main/java/com/gemstone/gemfire/admin/jmx/Agent.java +++ b/geode-core/src/main/java/com/gemstone/gemfire/admin/jmx/Agent.java @@ -66,7 +66,6 @@ * @see AgentConfig * @see AgentFactory * - * @author David Whitlock * @since 4.0 * @deprecated as of 7.0 use the management package instead */ diff --git a/geode-core/src/main/java/com/gemstone/gemfire/admin/jmx/AgentConfig.java b/geode-core/src/main/java/com/gemstone/gemfire/admin/jmx/AgentConfig.java index ccfca39c2bf5..869a35282fdc 100644 --- a/geode-core/src/main/java/com/gemstone/gemfire/admin/jmx/AgentConfig.java +++ b/geode-core/src/main/java/com/gemstone/gemfire/admin/jmx/AgentConfig.java @@ -272,7 +272,6 @@ * * * - * @author David Whitlock * @since 4.0 * @deprecated as of 7.0 use the management package instead */ diff --git a/geode-core/src/main/java/com/gemstone/gemfire/admin/jmx/AgentFactory.java b/geode-core/src/main/java/com/gemstone/gemfire/admin/jmx/AgentFactory.java index 2c6b00253f5c..a0244bea5b53 100644 --- a/geode-core/src/main/java/com/gemstone/gemfire/admin/jmx/AgentFactory.java +++ b/geode-core/src/main/java/com/gemstone/gemfire/admin/jmx/AgentFactory.java @@ -24,7 +24,6 @@ /** * A factory class that creates JMX administration entities. * - * @author David Whitlock * @since 4.0 * @deprecated as of 7.0 use the management package instead */ diff --git a/geode-core/src/main/java/com/gemstone/gemfire/admin/jmx/internal/AdminDistributedSystemJmxImpl.java b/geode-core/src/main/java/com/gemstone/gemfire/admin/jmx/internal/AdminDistributedSystemJmxImpl.java index 19b0b04c56f6..a0ffef957855 100755 --- a/geode-core/src/main/java/com/gemstone/gemfire/admin/jmx/internal/AdminDistributedSystemJmxImpl.java +++ b/geode-core/src/main/java/com/gemstone/gemfire/admin/jmx/internal/AdminDistributedSystemJmxImpl.java @@ -101,7 +101,6 @@ * DistributedSystemImpl. Wrap all delegate calls w/ e.printStackTrace() since * the HttpAdaptor devours them (what to do w/ template methods then?) * - * @author Kirk Lund * @since 3.5 */ public class AdminDistributedSystemJmxImpl @@ -2295,7 +2294,6 @@ public void run() { *
  • Region Loss
  • * * - * @author abhishek */ class CacheAndRegionListenerImpl implements SystemMemberCacheListener { private AdminDistributedSystemJmxImpl adminDS; diff --git a/geode-core/src/main/java/com/gemstone/gemfire/admin/jmx/internal/AgentConfigImpl.java b/geode-core/src/main/java/com/gemstone/gemfire/admin/jmx/internal/AgentConfigImpl.java index 985c8c0f391b..e50e124f4f7b 100644 --- a/geode-core/src/main/java/com/gemstone/gemfire/admin/jmx/internal/AgentConfigImpl.java +++ b/geode-core/src/main/java/com/gemstone/gemfire/admin/jmx/internal/AgentConfigImpl.java @@ -46,8 +46,6 @@ *

    * Extends and implements DistributedSystemConfig. * - * @author Kirk Lund - * @author David Whitlock * @since 3.5 (in which it was named AgentConfig) */ public class AgentConfigImpl extends DistributedSystemConfigImpl diff --git a/geode-core/src/main/java/com/gemstone/gemfire/admin/jmx/internal/AgentImpl.java b/geode-core/src/main/java/com/gemstone/gemfire/admin/jmx/internal/AgentImpl.java index 4d1ad41c9677..0f12e3a923e2 100644 --- a/geode-core/src/main/java/com/gemstone/gemfire/admin/jmx/internal/AgentImpl.java +++ b/geode-core/src/main/java/com/gemstone/gemfire/admin/jmx/internal/AgentImpl.java @@ -78,8 +78,6 @@ * The GemFire JMX Agent provides the ability to administrate one GemFire * distributed system via JMX. * - * @author Kirk Lund - * @author David Whitlock * @since 3.5 */ public class AgentImpl @@ -1551,7 +1549,6 @@ private static String applyRFC2732(String hostname) { * Adapter class for NotificationListener that listens to notifications of type * javax.management.remote.JMXConnectionNotification * - * @author abhishek * @since 6.0 */ class ConnectionNotificationAdapter implements NotificationListener { @@ -1590,7 +1587,6 @@ public void handleNotification(Notification notification, Object handback) { * Filters out the notifications of the type JMXConnectionNotification.OPENED, * JMXConnectionNotification.CLOSED and JMXConnectionNotification.FAILED. * - * @author abhishek * @since 6.0 */ class ConnectionNotificationFilterImpl implements NotificationFilter { diff --git a/geode-core/src/main/java/com/gemstone/gemfire/admin/jmx/internal/AgentLauncher.java b/geode-core/src/main/java/com/gemstone/gemfire/admin/jmx/internal/AgentLauncher.java index 1109512d87ac..5d182590de86 100644 --- a/geode-core/src/main/java/com/gemstone/gemfire/admin/jmx/internal/AgentLauncher.java +++ b/geode-core/src/main/java/com/gemstone/gemfire/admin/jmx/internal/AgentLauncher.java @@ -58,7 +58,6 @@ * A command line utility inspired by the CacheServerLauncher that is responsible for administering * a stand-along GemFire JMX {@link Agent}. *

    - * @author David Whitlock * @since 3.5 */ public class AgentLauncher { diff --git a/geode-core/src/main/java/com/gemstone/gemfire/admin/jmx/internal/CacheServerJmxImpl.java b/geode-core/src/main/java/com/gemstone/gemfire/admin/jmx/internal/CacheServerJmxImpl.java index ceaafb726e9a..45e4ae24465b 100644 --- a/geode-core/src/main/java/com/gemstone/gemfire/admin/jmx/internal/CacheServerJmxImpl.java +++ b/geode-core/src/main/java/com/gemstone/gemfire/admin/jmx/internal/CacheServerJmxImpl.java @@ -54,7 +54,6 @@ * MBean representation of a {@link * com.gemstone.gemfire.admin.CacheVm}. * - * @author David Whitlock * @since 4.0 */ public class CacheServerJmxImpl extends CacheServerImpl diff --git a/geode-core/src/main/java/com/gemstone/gemfire/admin/jmx/internal/ConfigAttributeInfo.java b/geode-core/src/main/java/com/gemstone/gemfire/admin/jmx/internal/ConfigAttributeInfo.java index c613cf086c72..3075f76d5a79 100755 --- a/geode-core/src/main/java/com/gemstone/gemfire/admin/jmx/internal/ConfigAttributeInfo.java +++ b/geode-core/src/main/java/com/gemstone/gemfire/admin/jmx/internal/ConfigAttributeInfo.java @@ -29,7 +29,6 @@ * {@link javax.management.modelmbean.ModelMBeanAttributeInfo} descriptor's * targetObject value. * - * @author Kirk Lund * @since 3.5 * */ diff --git a/geode-core/src/main/java/com/gemstone/gemfire/admin/jmx/internal/ConfigurationParameterJmxImpl.java b/geode-core/src/main/java/com/gemstone/gemfire/admin/jmx/internal/ConfigurationParameterJmxImpl.java index d6177196ee38..84590db40661 100755 --- a/geode-core/src/main/java/com/gemstone/gemfire/admin/jmx/internal/ConfigurationParameterJmxImpl.java +++ b/geode-core/src/main/java/com/gemstone/gemfire/admin/jmx/internal/ConfigurationParameterJmxImpl.java @@ -38,7 +38,6 @@ * ConfigurationParameterImpl. Wrap all delegate calls w/ e.printStackTrace() * since the HttpAdaptor devours them * - * @author Kirk Lund * @since 3.5 * */ diff --git a/geode-core/src/main/java/com/gemstone/gemfire/admin/jmx/internal/DistributedSystemHealthConfigJmxImpl.java b/geode-core/src/main/java/com/gemstone/gemfire/admin/jmx/internal/DistributedSystemHealthConfigJmxImpl.java index 71e357830b6b..57b47c5fc4ef 100644 --- a/geode-core/src/main/java/com/gemstone/gemfire/admin/jmx/internal/DistributedSystemHealthConfigJmxImpl.java +++ b/geode-core/src/main/java/com/gemstone/gemfire/admin/jmx/internal/DistributedSystemHealthConfigJmxImpl.java @@ -31,7 +31,6 @@ * * @see GemFireHealthJmxImpl#createDistributedSystemHealthConfig * - * @author David Whitlock * * @since 3.5 */ diff --git a/geode-core/src/main/java/com/gemstone/gemfire/admin/jmx/internal/DistributionLocatorJmxImpl.java b/geode-core/src/main/java/com/gemstone/gemfire/admin/jmx/internal/DistributionLocatorJmxImpl.java index 1075d7f1aaf0..f264f217fb19 100755 --- a/geode-core/src/main/java/com/gemstone/gemfire/admin/jmx/internal/DistributionLocatorJmxImpl.java +++ b/geode-core/src/main/java/com/gemstone/gemfire/admin/jmx/internal/DistributionLocatorJmxImpl.java @@ -45,7 +45,6 @@ /** * Provides MBean support for managing a distribution locator. * - * @author Kirk Lund */ public class DistributionLocatorJmxImpl extends com.gemstone.gemfire.admin.internal.DistributionLocatorImpl diff --git a/geode-core/src/main/java/com/gemstone/gemfire/admin/jmx/internal/DynamicManagedBean.java b/geode-core/src/main/java/com/gemstone/gemfire/admin/jmx/internal/DynamicManagedBean.java index 30595c554765..e9872ad99356 100755 --- a/geode-core/src/main/java/com/gemstone/gemfire/admin/jmx/internal/DynamicManagedBean.java +++ b/geode-core/src/main/java/com/gemstone/gemfire/admin/jmx/internal/DynamicManagedBean.java @@ -29,7 +29,6 @@ * Extends ManagedBean to allow for dynamically creating new instances of * ManagedBean based on an existing instance of ManagedBean. * - * @author Kirk Lund * @since 5.0.1 */ public class DynamicManagedBean extends org.apache.commons.modeler.ManagedBean { diff --git a/geode-core/src/main/java/com/gemstone/gemfire/admin/jmx/internal/GemFireHealthConfigJmxImpl.java b/geode-core/src/main/java/com/gemstone/gemfire/admin/jmx/internal/GemFireHealthConfigJmxImpl.java index c05d4b8c69b7..97277e1c93b6 100644 --- a/geode-core/src/main/java/com/gemstone/gemfire/admin/jmx/internal/GemFireHealthConfigJmxImpl.java +++ b/geode-core/src/main/java/com/gemstone/gemfire/admin/jmx/internal/GemFireHealthConfigJmxImpl.java @@ -42,7 +42,6 @@ * * @see GemFireHealthJmxImpl#createDistributedSystemHealthConfig * - * @author David Whitlock * * @since 3.5 */ diff --git a/geode-core/src/main/java/com/gemstone/gemfire/admin/jmx/internal/GemFireHealthJmxImpl.java b/geode-core/src/main/java/com/gemstone/gemfire/admin/jmx/internal/GemFireHealthJmxImpl.java index 0bc659bb7dab..c6d8f273f915 100644 --- a/geode-core/src/main/java/com/gemstone/gemfire/admin/jmx/internal/GemFireHealthJmxImpl.java +++ b/geode-core/src/main/java/com/gemstone/gemfire/admin/jmx/internal/GemFireHealthJmxImpl.java @@ -41,7 +41,6 @@ * * @see AdminDistributedSystemJmxImpl#createGemFireHealth * - * @author David Whitlock * * @since 3.5 */ diff --git a/geode-core/src/main/java/com/gemstone/gemfire/admin/jmx/internal/GenerateMBeanHTML.java b/geode-core/src/main/java/com/gemstone/gemfire/admin/jmx/internal/GenerateMBeanHTML.java index 8fb433a21f00..ab68ea944e4c 100644 --- a/geode-core/src/main/java/com/gemstone/gemfire/admin/jmx/internal/GenerateMBeanHTML.java +++ b/geode-core/src/main/java/com/gemstone/gemfire/admin/jmx/internal/GenerateMBeanHTML.java @@ -31,7 +31,6 @@ * Jakarta Commons Modeler and generates an HTML file that documents * each MBean. * - * @author David Whitlock * @since 3.5 */ public class GenerateMBeanHTML extends DefaultHandler { diff --git a/geode-core/src/main/java/com/gemstone/gemfire/admin/jmx/internal/MBeanUtil.java b/geode-core/src/main/java/com/gemstone/gemfire/admin/jmx/internal/MBeanUtil.java index 3aebfee19ea4..7d9c17905ecb 100755 --- a/geode-core/src/main/java/com/gemstone/gemfire/admin/jmx/internal/MBeanUtil.java +++ b/geode-core/src/main/java/com/gemstone/gemfire/admin/jmx/internal/MBeanUtil.java @@ -55,7 +55,6 @@ * Common support for MBeans and {@link ManagedResource}s. Static loading of * this class creates the MBeanServer and Modeler Registry. * - * @author Kirk Lund * @since 3.5 * */ diff --git a/geode-core/src/main/java/com/gemstone/gemfire/admin/jmx/internal/MX4JModelMBean.java b/geode-core/src/main/java/com/gemstone/gemfire/admin/jmx/internal/MX4JModelMBean.java index 1add1ecc5691..599871b77fcb 100755 --- a/geode-core/src/main/java/com/gemstone/gemfire/admin/jmx/internal/MX4JModelMBean.java +++ b/geode-core/src/main/java/com/gemstone/gemfire/admin/jmx/internal/MX4JModelMBean.java @@ -77,7 +77,6 @@ import com.gemstone.gemfire.internal.i18n.LocalizedStrings; /** - * @author Simone Bordet * @version $Revision: 1.14 $ */ public class MX4JModelMBean implements ModelMBean, MBeanRegistration, NotificationEmitter diff --git a/geode-core/src/main/java/com/gemstone/gemfire/admin/jmx/internal/MX4JServerSocketFactory.java b/geode-core/src/main/java/com/gemstone/gemfire/admin/jmx/internal/MX4JServerSocketFactory.java index 09a7ac01eee4..7649b8050e9b 100644 --- a/geode-core/src/main/java/com/gemstone/gemfire/admin/jmx/internal/MX4JServerSocketFactory.java +++ b/geode-core/src/main/java/com/gemstone/gemfire/admin/jmx/internal/MX4JServerSocketFactory.java @@ -45,7 +45,6 @@ * * http://java.sun.com/j2se/1.4.2/docs/guide/security/jsse/JSSERefGuide.html * - * @author Kirk Lund * @since 3.5 (old name was SSLAdaptorServerSocketFactory) */ public class MX4JServerSocketFactory diff --git a/geode-core/src/main/java/com/gemstone/gemfire/admin/jmx/internal/MailManager.java b/geode-core/src/main/java/com/gemstone/gemfire/admin/jmx/internal/MailManager.java index 0a88722a3130..f6b912991626 100755 --- a/geode-core/src/main/java/com/gemstone/gemfire/admin/jmx/internal/MailManager.java +++ b/geode-core/src/main/java/com/gemstone/gemfire/admin/jmx/internal/MailManager.java @@ -40,7 +40,6 @@ * provides the way to add/remove email ids. Can be used to send email in case * of any alerts raised / warning / failure in gemfire. * - * @author Harsh Khanna * @since 5.1 */ public class MailManager { @@ -311,7 +310,6 @@ public String toString() { /** * Incorporating subject and message of email * - * @author Harsh Khanna * */ static private class EmailData { diff --git a/geode-core/src/main/java/com/gemstone/gemfire/admin/jmx/internal/ManagedResource.java b/geode-core/src/main/java/com/gemstone/gemfire/admin/jmx/internal/ManagedResource.java index f4bc27cbb18d..0df53b0cc57d 100755 --- a/geode-core/src/main/java/com/gemstone/gemfire/admin/jmx/internal/ManagedResource.java +++ b/geode-core/src/main/java/com/gemstone/gemfire/admin/jmx/internal/ManagedResource.java @@ -23,7 +23,6 @@ * Represents a component or resource that is managed by a * {@link javax.management.modelmbean.ModelMBean}. * - * @author Kirk Lund * @since 3.5 * */ diff --git a/geode-core/src/main/java/com/gemstone/gemfire/admin/jmx/internal/ManagedResourceType.java b/geode-core/src/main/java/com/gemstone/gemfire/admin/jmx/internal/ManagedResourceType.java index 654723ae333a..e547d46d4f5f 100755 --- a/geode-core/src/main/java/com/gemstone/gemfire/admin/jmx/internal/ManagedResourceType.java +++ b/geode-core/src/main/java/com/gemstone/gemfire/admin/jmx/internal/ManagedResourceType.java @@ -21,7 +21,6 @@ * ({@link #getClassTypeName}) must match the fully qualified class name listed * in the type descriptor in mbeans-descriptors.xml. * - * @author Kirk Lund * @since 3.5 * */ diff --git a/geode-core/src/main/java/com/gemstone/gemfire/admin/jmx/internal/MemberInfoWithStatsMBean.java b/geode-core/src/main/java/com/gemstone/gemfire/admin/jmx/internal/MemberInfoWithStatsMBean.java index 8e097b00bd2b..17091ed93f4e 100644 --- a/geode-core/src/main/java/com/gemstone/gemfire/admin/jmx/internal/MemberInfoWithStatsMBean.java +++ b/geode-core/src/main/java/com/gemstone/gemfire/admin/jmx/internal/MemberInfoWithStatsMBean.java @@ -80,7 +80,6 @@ * This MBean also acts as a Notification Hub for all the Notifications that are * defined for Admin Distributed System. * - * @author abhishek * * @since 6.5 */ @@ -1253,7 +1252,6 @@ public void removeNotificationListener(NotificationListener listener, * {@link NotificationBroadcasterSupport} only to have the functionality to send * notifications. * - * @author abhishek * * @since 6.5 */ diff --git a/geode-core/src/main/java/com/gemstone/gemfire/admin/jmx/internal/RMIRegistryService.java b/geode-core/src/main/java/com/gemstone/gemfire/admin/jmx/internal/RMIRegistryService.java index e93874713856..f9d6f87918a5 100644 --- a/geode-core/src/main/java/com/gemstone/gemfire/admin/jmx/internal/RMIRegistryService.java +++ b/geode-core/src/main/java/com/gemstone/gemfire/admin/jmx/internal/RMIRegistryService.java @@ -31,7 +31,6 @@ /** * This MBean is an implementation of {@link RMIRegistryServiceMBean}. * - * @author abhishek */ public class RMIRegistryService implements RMIRegistryServiceMBean { /* RMI Registry host */ @@ -199,7 +198,6 @@ public void unbind(String name) throws RemoteException, NotBoundException { /** * Custom implementation of the {@link RMIServerSocketFactory} * - * @author abhishek */ class RMIServerSocketFactoryImpl implements RMIServerSocketFactory { /* IP address to use for creating ServerSocket */ diff --git a/geode-core/src/main/java/com/gemstone/gemfire/admin/jmx/internal/RMIRegistryServiceMBean.java b/geode-core/src/main/java/com/gemstone/gemfire/admin/jmx/internal/RMIRegistryServiceMBean.java index 6420bdf4a7b0..d226bf137c14 100644 --- a/geode-core/src/main/java/com/gemstone/gemfire/admin/jmx/internal/RMIRegistryServiceMBean.java +++ b/geode-core/src/main/java/com/gemstone/gemfire/admin/jmx/internal/RMIRegistryServiceMBean.java @@ -27,7 +27,6 @@ * the RMI Registry should get bound to. * 2. Port property can not be changed once set. * - * @author abhishek */ public interface RMIRegistryServiceMBean { diff --git a/geode-core/src/main/java/com/gemstone/gemfire/admin/jmx/internal/RefreshNotificationType.java b/geode-core/src/main/java/com/gemstone/gemfire/admin/jmx/internal/RefreshNotificationType.java index 3b35b4630b4f..f10bccca4117 100755 --- a/geode-core/src/main/java/com/gemstone/gemfire/admin/jmx/internal/RefreshNotificationType.java +++ b/geode-core/src/main/java/com/gemstone/gemfire/admin/jmx/internal/RefreshNotificationType.java @@ -19,7 +19,6 @@ /** * Type-safe definition for refresh notifications. * - * @author Kirk Lund * @since 3.5 * */ diff --git a/geode-core/src/main/java/com/gemstone/gemfire/admin/jmx/internal/StatAlertNotification.java b/geode-core/src/main/java/com/gemstone/gemfire/admin/jmx/internal/StatAlertNotification.java index ad00f8e99708..b33972df4776 100644 --- a/geode-core/src/main/java/com/gemstone/gemfire/admin/jmx/internal/StatAlertNotification.java +++ b/geode-core/src/main/java/com/gemstone/gemfire/admin/jmx/internal/StatAlertNotification.java @@ -33,7 +33,6 @@ * * @see StatAlert raised and also Gemfire member id which raised the alert * - * @author abhishek * * @since 5.7 */ diff --git a/geode-core/src/main/java/com/gemstone/gemfire/admin/jmx/internal/StatAlertsAggregator.java b/geode-core/src/main/java/com/gemstone/gemfire/admin/jmx/internal/StatAlertsAggregator.java index 082c85f77a8d..94900f225832 100644 --- a/geode-core/src/main/java/com/gemstone/gemfire/admin/jmx/internal/StatAlertsAggregator.java +++ b/geode-core/src/main/java/com/gemstone/gemfire/admin/jmx/internal/StatAlertsAggregator.java @@ -31,7 +31,6 @@ *

  • Aggregate stats & make available for clients thro' JMXAgent * * - * @author abhishek */ public interface StatAlertsAggregator { diff --git a/geode-core/src/main/java/com/gemstone/gemfire/admin/jmx/internal/StatisticAttributeInfo.java b/geode-core/src/main/java/com/gemstone/gemfire/admin/jmx/internal/StatisticAttributeInfo.java index c3e8030a9523..aa977e55186b 100755 --- a/geode-core/src/main/java/com/gemstone/gemfire/admin/jmx/internal/StatisticAttributeInfo.java +++ b/geode-core/src/main/java/com/gemstone/gemfire/admin/jmx/internal/StatisticAttributeInfo.java @@ -29,7 +29,6 @@ * javax.management.modelmbean.ModelMBeanAttributeInfo} descriptor's * targetObject value. * - * @author Kirk Lund * @since 3.5 * */ diff --git a/geode-core/src/main/java/com/gemstone/gemfire/admin/jmx/internal/StatisticResourceJmxImpl.java b/geode-core/src/main/java/com/gemstone/gemfire/admin/jmx/internal/StatisticResourceJmxImpl.java index 9813bdb4c318..7a439d843c2d 100755 --- a/geode-core/src/main/java/com/gemstone/gemfire/admin/jmx/internal/StatisticResourceJmxImpl.java +++ b/geode-core/src/main/java/com/gemstone/gemfire/admin/jmx/internal/StatisticResourceJmxImpl.java @@ -36,7 +36,6 @@ /** * Provides MBean support for the monitoring of a statistic resource. * - * @author Kirk Lund * @since 3.5 * */ diff --git a/geode-core/src/main/java/com/gemstone/gemfire/admin/jmx/internal/SystemMemberBridgeServerJmxImpl.java b/geode-core/src/main/java/com/gemstone/gemfire/admin/jmx/internal/SystemMemberBridgeServerJmxImpl.java index e011459e54b3..ba5c6b2d6464 100644 --- a/geode-core/src/main/java/com/gemstone/gemfire/admin/jmx/internal/SystemMemberBridgeServerJmxImpl.java +++ b/geode-core/src/main/java/com/gemstone/gemfire/admin/jmx/internal/SystemMemberBridgeServerJmxImpl.java @@ -29,7 +29,6 @@ * MBean representation of a {@link * com.gemstone.gemfire.admin.SystemMemberBridgeServer}. * - * @author David Whitlock * @since 4.0 */ public class SystemMemberBridgeServerJmxImpl diff --git a/geode-core/src/main/java/com/gemstone/gemfire/admin/jmx/internal/SystemMemberCacheJmxImpl.java b/geode-core/src/main/java/com/gemstone/gemfire/admin/jmx/internal/SystemMemberCacheJmxImpl.java index 155c8a7a2233..88ba3db565b3 100644 --- a/geode-core/src/main/java/com/gemstone/gemfire/admin/jmx/internal/SystemMemberCacheJmxImpl.java +++ b/geode-core/src/main/java/com/gemstone/gemfire/admin/jmx/internal/SystemMemberCacheJmxImpl.java @@ -44,8 +44,6 @@ /** * MBean representation of {@link com.gemstone.gemfire.admin.SystemMemberCache}. * - * @author Darrel Schneider - * @author Kirk Lund * @since 3.5 */ public class SystemMemberCacheJmxImpl diff --git a/geode-core/src/main/java/com/gemstone/gemfire/admin/jmx/internal/SystemMemberJmx.java b/geode-core/src/main/java/com/gemstone/gemfire/admin/jmx/internal/SystemMemberJmx.java index 132aae1db8e6..9cf3ff6def2e 100644 --- a/geode-core/src/main/java/com/gemstone/gemfire/admin/jmx/internal/SystemMemberJmx.java +++ b/geode-core/src/main/java/com/gemstone/gemfire/admin/jmx/internal/SystemMemberJmx.java @@ -48,7 +48,6 @@ * Defines methods that all SystemMember MBeans should * implement. * - * @author David Whitlock * @since 4.0 */ public interface SystemMemberJmx diff --git a/geode-core/src/main/java/com/gemstone/gemfire/admin/jmx/internal/SystemMemberJmxImpl.java b/geode-core/src/main/java/com/gemstone/gemfire/admin/jmx/internal/SystemMemberJmxImpl.java index 03e19b3c5a62..176534854f89 100755 --- a/geode-core/src/main/java/com/gemstone/gemfire/admin/jmx/internal/SystemMemberJmxImpl.java +++ b/geode-core/src/main/java/com/gemstone/gemfire/admin/jmx/internal/SystemMemberJmxImpl.java @@ -57,7 +57,6 @@ * Wrap all delegate calls w/ e.printStackTrace() since the HttpAdaptor devours * them * - * @author Kirk Lund * @since 3.5 * */ diff --git a/geode-core/src/main/java/com/gemstone/gemfire/admin/jmx/internal/SystemMemberRegionJmxImpl.java b/geode-core/src/main/java/com/gemstone/gemfire/admin/jmx/internal/SystemMemberRegionJmxImpl.java index 3d1a28012283..c5879c0b6178 100644 --- a/geode-core/src/main/java/com/gemstone/gemfire/admin/jmx/internal/SystemMemberRegionJmxImpl.java +++ b/geode-core/src/main/java/com/gemstone/gemfire/admin/jmx/internal/SystemMemberRegionJmxImpl.java @@ -27,8 +27,6 @@ * MBean representation of {@link * com.gemstone.gemfire.admin.SystemMemberRegion}. * - * @author Darrel Schneider - * @author Kirk Lund * @since 3.5 */ public class SystemMemberRegionJmxImpl diff --git a/geode-core/src/main/java/com/gemstone/gemfire/cache/AttributesFactory.java b/geode-core/src/main/java/com/gemstone/gemfire/cache/AttributesFactory.java index 8c715dc199b9..df6a6a802555 100644 --- a/geode-core/src/main/java/com/gemstone/gemfire/cache/AttributesFactory.java +++ b/geode-core/src/main/java/com/gemstone/gemfire/cache/AttributesFactory.java @@ -361,7 +361,6 @@ * @see AttributesMutator * @see Region#createSubregion(String, RegionAttributes) * - * @author Eric Zoerner * @since 3.0 * @deprecated as of 6.5 use {@link Cache#createRegionFactory(RegionShortcut)} or {@link ClientCache#createClientRegionFactory(ClientRegionShortcut)} instead. */ diff --git a/geode-core/src/main/java/com/gemstone/gemfire/cache/AttributesMutator.java b/geode-core/src/main/java/com/gemstone/gemfire/cache/AttributesMutator.java index 1d365361de7e..eb46433979ea 100644 --- a/geode-core/src/main/java/com/gemstone/gemfire/cache/AttributesMutator.java +++ b/geode-core/src/main/java/com/gemstone/gemfire/cache/AttributesMutator.java @@ -28,7 +28,6 @@ *

    * The setter methods all return the previous value of the attribute. * - * @author Eric Zoerner * * * @see Region#getAttributesMutator diff --git a/geode-core/src/main/java/com/gemstone/gemfire/cache/Cache.java b/geode-core/src/main/java/com/gemstone/gemfire/cache/Cache.java index 6de86be082fa..03874b3ec04d 100644 --- a/geode-core/src/main/java/com/gemstone/gemfire/cache/Cache.java +++ b/geode-core/src/main/java/com/gemstone/gemfire/cache/Cache.java @@ -57,7 +57,6 @@ * *

    A cache can have multiple root regions, each with a different name. * - * @author Darrel Schneider * * @since 2.0 */ diff --git a/geode-core/src/main/java/com/gemstone/gemfire/cache/CacheCallback.java b/geode-core/src/main/java/com/gemstone/gemfire/cache/CacheCallback.java index 043a0c70110e..5a45bb81d454 100644 --- a/geode-core/src/main/java/com/gemstone/gemfire/cache/CacheCallback.java +++ b/geode-core/src/main/java/com/gemstone/gemfire/cache/CacheCallback.java @@ -21,7 +21,6 @@ * User-defined objects that can be plugged into caching to receive callback * notifications. * - * @author Eric Zoerner * * @since 3.0 */ diff --git a/geode-core/src/main/java/com/gemstone/gemfire/cache/CacheClosedException.java b/geode-core/src/main/java/com/gemstone/gemfire/cache/CacheClosedException.java index 3397b80506c6..e747299f36c0 100644 --- a/geode-core/src/main/java/com/gemstone/gemfire/cache/CacheClosedException.java +++ b/geode-core/src/main/java/com/gemstone/gemfire/cache/CacheClosedException.java @@ -24,7 +24,6 @@ * been closed. Can be thrown from almost any method related to regions or the * Cache after the cache has been closed. * - * @author Eric Zoerner * * * @see Cache diff --git a/geode-core/src/main/java/com/gemstone/gemfire/cache/CacheEvent.java b/geode-core/src/main/java/com/gemstone/gemfire/cache/CacheEvent.java index df9c9536ab09..d2edb20f1585 100644 --- a/geode-core/src/main/java/com/gemstone/gemfire/cache/CacheEvent.java +++ b/geode-core/src/main/java/com/gemstone/gemfire/cache/CacheEvent.java @@ -33,7 +33,6 @@ * * @see CacheListener * - * @author Eric Zoerner * * * @since 2.0 diff --git a/geode-core/src/main/java/com/gemstone/gemfire/cache/CacheException.java b/geode-core/src/main/java/com/gemstone/gemfire/cache/CacheException.java index d8bafdd2f485..84efa78cae9a 100644 --- a/geode-core/src/main/java/com/gemstone/gemfire/cache/CacheException.java +++ b/geode-core/src/main/java/com/gemstone/gemfire/cache/CacheException.java @@ -25,7 +25,6 @@ * subclasses of this class. This class is abstract and therefore only * subclasses are instantiated. * - * @author Eric Zoerner * * @since 2.0 */ diff --git a/geode-core/src/main/java/com/gemstone/gemfire/cache/CacheExistsException.java b/geode-core/src/main/java/com/gemstone/gemfire/cache/CacheExistsException.java index 49488c094ce1..982b2c4de530 100644 --- a/geode-core/src/main/java/com/gemstone/gemfire/cache/CacheExistsException.java +++ b/geode-core/src/main/java/com/gemstone/gemfire/cache/CacheExistsException.java @@ -20,7 +20,6 @@ /** Thrown when attempting to create a {@link Cache} if one already exists. * - * @author Darrel Schneider * * @see CacheFactory#create * @since 3.0 diff --git a/geode-core/src/main/java/com/gemstone/gemfire/cache/CacheFactory.java b/geode-core/src/main/java/com/gemstone/gemfire/cache/CacheFactory.java index fe7ce59695dd..bcb9f130f75d 100755 --- a/geode-core/src/main/java/com/gemstone/gemfire/cache/CacheFactory.java +++ b/geode-core/src/main/java/com/gemstone/gemfire/cache/CacheFactory.java @@ -74,7 +74,6 @@

    For a complete list of all region shortcuts see {@link RegionShortcut}. Applications that need to explicitly control the individual region attributes can do this declaratively in XML or using APIs. * - * @author Darrel Schneider * * * @since 3.0 diff --git a/geode-core/src/main/java/com/gemstone/gemfire/cache/CacheListener.java b/geode-core/src/main/java/com/gemstone/gemfire/cache/CacheListener.java index e7752c2d22d3..4c73bfc51fd0 100644 --- a/geode-core/src/main/java/com/gemstone/gemfire/cache/CacheListener.java +++ b/geode-core/src/main/java/com/gemstone/gemfire/cache/CacheListener.java @@ -59,7 +59,6 @@ * {@link Declarable} *

    * - * @author Eric Zoerner * * @see AttributesFactory#addCacheListener * @see AttributesFactory#initCacheListeners diff --git a/geode-core/src/main/java/com/gemstone/gemfire/cache/CacheLoader.java b/geode-core/src/main/java/com/gemstone/gemfire/cache/CacheLoader.java index d9b267a15895..cdcf20274bc2 100644 --- a/geode-core/src/main/java/com/gemstone/gemfire/cache/CacheLoader.java +++ b/geode-core/src/main/java/com/gemstone/gemfire/cache/CacheLoader.java @@ -28,7 +28,6 @@ * that will look for the value in a cache instance hosted by * another member of the distributed system.

    * - * @author Dave Monnie * * * @see AttributesFactory#setCacheLoader diff --git a/geode-core/src/main/java/com/gemstone/gemfire/cache/CacheLoaderException.java b/geode-core/src/main/java/com/gemstone/gemfire/cache/CacheLoaderException.java index 830cf1c95823..239f2e3a5684 100755 --- a/geode-core/src/main/java/com/gemstone/gemfire/cache/CacheLoaderException.java +++ b/geode-core/src/main/java/com/gemstone/gemfire/cache/CacheLoaderException.java @@ -21,7 +21,6 @@ * occurred when a CacheLoader was attempting to load a value. This * exception is propagated back to the caller of Region.get. * - * @author Eric Zoerner * * * @see com.gemstone.gemfire.cache.Region#get(Object) diff --git a/geode-core/src/main/java/com/gemstone/gemfire/cache/CacheRuntimeException.java b/geode-core/src/main/java/com/gemstone/gemfire/cache/CacheRuntimeException.java index 0607e695ef1a..f10c50b6c2e7 100644 --- a/geode-core/src/main/java/com/gemstone/gemfire/cache/CacheRuntimeException.java +++ b/geode-core/src/main/java/com/gemstone/gemfire/cache/CacheRuntimeException.java @@ -24,7 +24,6 @@ * subclass of this class. This class is abstract so only subclasses can be * instantiated * - * @author Eric Zoerner * * @since 3.0 */ diff --git a/geode-core/src/main/java/com/gemstone/gemfire/cache/CacheStatistics.java b/geode-core/src/main/java/com/gemstone/gemfire/cache/CacheStatistics.java index 2c409442e743..0e3027150a19 100644 --- a/geode-core/src/main/java/com/gemstone/gemfire/cache/CacheStatistics.java +++ b/geode-core/src/main/java/com/gemstone/gemfire/cache/CacheStatistics.java @@ -22,7 +22,6 @@ * for both region and entries. All of these methods may throw a * CacheClosedException, RegionDestroyedException or an EntryDestroyedException. * - * @author Eric Zoerner * * * @see Region#getStatistics diff --git a/geode-core/src/main/java/com/gemstone/gemfire/cache/CacheTransactionManager.java b/geode-core/src/main/java/com/gemstone/gemfire/cache/CacheTransactionManager.java index 1268ac57f5e6..df3b508a0bfb 100644 --- a/geode-core/src/main/java/com/gemstone/gemfire/cache/CacheTransactionManager.java +++ b/geode-core/src/main/java/com/gemstone/gemfire/cache/CacheTransactionManager.java @@ -95,7 +95,6 @@ * transaction must be colocated together on one data node. See the GemFire * Developer Guide for details on using transactions with Partitioned Regions. * - * @author Mitch Thomas * * @since 4.0 * diff --git a/geode-core/src/main/java/com/gemstone/gemfire/cache/CacheWriter.java b/geode-core/src/main/java/com/gemstone/gemfire/cache/CacheWriter.java index 80caeb7d745f..732d3626fe5a 100644 --- a/geode-core/src/main/java/com/gemstone/gemfire/cache/CacheWriter.java +++ b/geode-core/src/main/java/com/gemstone/gemfire/cache/CacheWriter.java @@ -38,7 +38,6 @@ * exception will be propagated to the initiator of the operation, regardless * of whether the initiator is in the same VM as the CacheWriter. * - * @author Eric Zoerner * * @see AttributesFactory#setCacheWriter * @see RegionAttributes#getCacheWriter diff --git a/geode-core/src/main/java/com/gemstone/gemfire/cache/CacheWriterException.java b/geode-core/src/main/java/com/gemstone/gemfire/cache/CacheWriterException.java index b1357fd27ae6..10fc63b9b791 100644 --- a/geode-core/src/main/java/com/gemstone/gemfire/cache/CacheWriterException.java +++ b/geode-core/src/main/java/com/gemstone/gemfire/cache/CacheWriterException.java @@ -22,7 +22,6 @@ * is propagated back to the caller that initiated modification of the * cache, even if the caller is not in the same cache VM. * - * @author Eric Zoerner * * @see CacheWriter * @see com.gemstone.gemfire.cache.Region#put(Object, Object) diff --git a/geode-core/src/main/java/com/gemstone/gemfire/cache/CacheXmlException.java b/geode-core/src/main/java/com/gemstone/gemfire/cache/CacheXmlException.java index a731d0b5f6ee..51aa103812ff 100644 --- a/geode-core/src/main/java/com/gemstone/gemfire/cache/CacheXmlException.java +++ b/geode-core/src/main/java/com/gemstone/gemfire/cache/CacheXmlException.java @@ -24,7 +24,6 @@ * * @see CacheFactory#create * - * @author David Whitlock * * @since 3.0 */ diff --git a/geode-core/src/main/java/com/gemstone/gemfire/cache/ClientSession.java b/geode-core/src/main/java/com/gemstone/gemfire/cache/ClientSession.java index 34ebeec31f7f..1ebccee87a76 100755 --- a/geode-core/src/main/java/com/gemstone/gemfire/cache/ClientSession.java +++ b/geode-core/src/main/java/com/gemstone/gemfire/cache/ClientSession.java @@ -35,7 +35,6 @@ * clientSession.registerInterest(event.getRegion().getFullPath(), event.getKey(), InterestResultPolicy.KEYS_VALUES, true); * * - * @author Barry Oglesby * @since 6.0 * @see com.gemstone.gemfire.cache.server.CacheServer#getClientSession(String) * getClientSession diff --git a/geode-core/src/main/java/com/gemstone/gemfire/cache/CommitConflictException.java b/geode-core/src/main/java/com/gemstone/gemfire/cache/CommitConflictException.java index bc19dfd6067f..c417ca4792d8 100644 --- a/geode-core/src/main/java/com/gemstone/gemfire/cache/CommitConflictException.java +++ b/geode-core/src/main/java/com/gemstone/gemfire/cache/CommitConflictException.java @@ -19,7 +19,6 @@ /** Thrown when a commit fails due to a write conflict. * - * @author Darrel Schneider * * @see CacheTransactionManager#commit * @since 4.0 diff --git a/geode-core/src/main/java/com/gemstone/gemfire/cache/CommitDistributionException.java b/geode-core/src/main/java/com/gemstone/gemfire/cache/CommitDistributionException.java index b818b3dc0267..4cca0d6d1070 100755 --- a/geode-core/src/main/java/com/gemstone/gemfire/cache/CommitDistributionException.java +++ b/geode-core/src/main/java/com/gemstone/gemfire/cache/CommitDistributionException.java @@ -30,7 +30,6 @@ * {@link MembershipAttributes#getRequiredRoles required roles} are provided * in each RegionDistributionException. * - * @author Kirk Lund * @since 5.0 */ public class CommitDistributionException extends TransactionException { diff --git a/geode-core/src/main/java/com/gemstone/gemfire/cache/CommitIncompleteException.java b/geode-core/src/main/java/com/gemstone/gemfire/cache/CommitIncompleteException.java index 334441a9c1bb..7a3d5dd07d51 100644 --- a/geode-core/src/main/java/com/gemstone/gemfire/cache/CommitIncompleteException.java +++ b/geode-core/src/main/java/com/gemstone/gemfire/cache/CommitIncompleteException.java @@ -18,7 +18,6 @@ /** * Thrown when a commit fails to complete due to errors - * @author Mitch Thomas * @since 5.7 */ public class CommitIncompleteException extends TransactionException { diff --git a/geode-core/src/main/java/com/gemstone/gemfire/cache/CustomEvictionAttributes.java b/geode-core/src/main/java/com/gemstone/gemfire/cache/CustomEvictionAttributes.java index cf5a1f156e7b..c2bc41b93e45 100644 --- a/geode-core/src/main/java/com/gemstone/gemfire/cache/CustomEvictionAttributes.java +++ b/geode-core/src/main/java/com/gemstone/gemfire/cache/CustomEvictionAttributes.java @@ -20,7 +20,6 @@ * Custom eviction attributes including {@link EvictionCriteria} and evictor * start time and frequency, if any. * - * @author swale * @since gfxd 1.0 */ public abstract class CustomEvictionAttributes { diff --git a/geode-core/src/main/java/com/gemstone/gemfire/cache/CustomExpiry.java b/geode-core/src/main/java/com/gemstone/gemfire/cache/CustomExpiry.java index 1594d0003581..94b73c064c9f 100644 --- a/geode-core/src/main/java/com/gemstone/gemfire/cache/CustomExpiry.java +++ b/geode-core/src/main/java/com/gemstone/gemfire/cache/CustomExpiry.java @@ -23,7 +23,6 @@ *

    Note that if you wish to refer to an implementation of this interface in XML, * the implementation must also implement the Declarable interface. * - * @author jpenney * */ public interface CustomExpiry extends CacheCallback { diff --git a/geode-core/src/main/java/com/gemstone/gemfire/cache/DataPolicy.java b/geode-core/src/main/java/com/gemstone/gemfire/cache/DataPolicy.java index defb144a4215..1e87c0f164e7 100644 --- a/geode-core/src/main/java/com/gemstone/gemfire/cache/DataPolicy.java +++ b/geode-core/src/main/java/com/gemstone/gemfire/cache/DataPolicy.java @@ -34,7 +34,6 @@ *

  • HDFS_PARTITION in addition to PARTITION also causes data to be stored to HDFS. The region initialization may use the data stored on HDFS. * * - * @author Darrel Schneider * * * @see AttributesFactory#setDataPolicy diff --git a/geode-core/src/main/java/com/gemstone/gemfire/cache/Declarable.java b/geode-core/src/main/java/com/gemstone/gemfire/cache/Declarable.java index 1eff14b722bf..94dda3b5f97f 100644 --- a/geode-core/src/main/java/com/gemstone/gemfire/cache/Declarable.java +++ b/geode-core/src/main/java/com/gemstone/gemfire/cache/Declarable.java @@ -53,7 +53,6 @@ * * See package introduction. * - * @author Darrel Schneider * * * @since 2.0 diff --git a/geode-core/src/main/java/com/gemstone/gemfire/cache/DiskAccessException.java b/geode-core/src/main/java/com/gemstone/gemfire/cache/DiskAccessException.java index c60580d1c7b6..f174ec25d030 100644 --- a/geode-core/src/main/java/com/gemstone/gemfire/cache/DiskAccessException.java +++ b/geode-core/src/main/java/com/gemstone/gemfire/cache/DiskAccessException.java @@ -21,7 +21,6 @@ /** * Indicates that an IOException during a disk region operation. * - * @author Darrel Schneider * * * @since 3.2 diff --git a/geode-core/src/main/java/com/gemstone/gemfire/cache/DiskStore.java b/geode-core/src/main/java/com/gemstone/gemfire/cache/DiskStore.java index 9c6b2c16d7d3..40586b22feac 100644 --- a/geode-core/src/main/java/com/gemstone/gemfire/cache/DiskStore.java +++ b/geode-core/src/main/java/com/gemstone/gemfire/cache/DiskStore.java @@ -30,7 +30,6 @@ * *

    Existing DiskStore instances can be found using {@link Cache#findDiskStore(String)} * - * @author Gester * @since 6.5 * */ diff --git a/geode-core/src/main/java/com/gemstone/gemfire/cache/DiskStoreFactory.java b/geode-core/src/main/java/com/gemstone/gemfire/cache/DiskStoreFactory.java index 9065c01a02ac..17254e4cc063 100755 --- a/geode-core/src/main/java/com/gemstone/gemfire/cache/DiskStoreFactory.java +++ b/geode-core/src/main/java/com/gemstone/gemfire/cache/DiskStoreFactory.java @@ -27,7 +27,6 @@ * To use this factory configure it with the set methods and then * call {@link #create} to produce a disk store instance. * - * @author Gester * @since 6.5 */ public interface DiskStoreFactory diff --git a/geode-core/src/main/java/com/gemstone/gemfire/cache/DiskWriteAttributes.java b/geode-core/src/main/java/com/gemstone/gemfire/cache/DiskWriteAttributes.java index 47e2f0f256fe..9e4c49923dd8 100644 --- a/geode-core/src/main/java/com/gemstone/gemfire/cache/DiskWriteAttributes.java +++ b/geode-core/src/main/java/com/gemstone/gemfire/cache/DiskWriteAttributes.java @@ -25,8 +25,6 @@ * @see RegionAttributes#getDiskWriteAttributes * @see Region#writeToDisk * - * @author David Whitlock - * @author Mitul Bid * * @since 3.2 * @deprecated as of 6.5 use {@link DiskStore} instead diff --git a/geode-core/src/main/java/com/gemstone/gemfire/cache/DiskWriteAttributesFactory.java b/geode-core/src/main/java/com/gemstone/gemfire/cache/DiskWriteAttributesFactory.java index 6da83a6a8eda..3fae4d9b22b7 100755 --- a/geode-core/src/main/java/com/gemstone/gemfire/cache/DiskWriteAttributesFactory.java +++ b/geode-core/src/main/java/com/gemstone/gemfire/cache/DiskWriteAttributesFactory.java @@ -25,8 +25,6 @@ /** * Factory for getting DiskWriteAttribute objects * - * @author Mitul Bid - * @author Asif * @since 5.1 * @deprecated as of 6.5 use {@link DiskStoreFactory} instead */ diff --git a/geode-core/src/main/java/com/gemstone/gemfire/cache/DuplicatePrimaryPartitionException.java b/geode-core/src/main/java/com/gemstone/gemfire/cache/DuplicatePrimaryPartitionException.java index cc617f4e7799..233b88a093ee 100644 --- a/geode-core/src/main/java/com/gemstone/gemfire/cache/DuplicatePrimaryPartitionException.java +++ b/geode-core/src/main/java/com/gemstone/gemfire/cache/DuplicatePrimaryPartitionException.java @@ -23,7 +23,6 @@ * partitions * * @since 6.6 - * @author kbachhhav */ public class DuplicatePrimaryPartitionException extends GemFireException { diff --git a/geode-core/src/main/java/com/gemstone/gemfire/cache/DynamicRegionFactory.java b/geode-core/src/main/java/com/gemstone/gemfire/cache/DynamicRegionFactory.java index c60951ef21bc..3321e872cc80 100644 --- a/geode-core/src/main/java/com/gemstone/gemfire/cache/DynamicRegionFactory.java +++ b/geode-core/src/main/java/com/gemstone/gemfire/cache/DynamicRegionFactory.java @@ -126,9 +126,6 @@ * not directly access this Region; instead use the methods on this factory. * * @since 4.3 - * @author Gideon Low - * @author Darrel Schneider - * @author Bruce Schuchardt * */ @SuppressWarnings("deprecation") diff --git a/geode-core/src/main/java/com/gemstone/gemfire/cache/DynamicRegionListener.java b/geode-core/src/main/java/com/gemstone/gemfire/cache/DynamicRegionListener.java index f770dbe521c0..18e49a302749 100644 --- a/geode-core/src/main/java/com/gemstone/gemfire/cache/DynamicRegionListener.java +++ b/geode-core/src/main/java/com/gemstone/gemfire/cache/DynamicRegionListener.java @@ -30,7 +30,6 @@ *

    * See {@link DynamicRegionFactory} * - * @author Gideon Low * @since 4.3 */ public interface DynamicRegionListener { diff --git a/geode-core/src/main/java/com/gemstone/gemfire/cache/EntryDestroyedException.java b/geode-core/src/main/java/com/gemstone/gemfire/cache/EntryDestroyedException.java index 7bc915858a99..6164bcb65e48 100644 --- a/geode-core/src/main/java/com/gemstone/gemfire/cache/EntryDestroyedException.java +++ b/geode-core/src/main/java/com/gemstone/gemfire/cache/EntryDestroyedException.java @@ -18,7 +18,6 @@ /** * Indicates that a method was invoked on an entry that has been destroyed. * - * @author Eric Zoerner * * * @see Region.Entry diff --git a/geode-core/src/main/java/com/gemstone/gemfire/cache/EntryEvent.java b/geode-core/src/main/java/com/gemstone/gemfire/cache/EntryEvent.java index ae6b07c9b4a0..60c53a0738ac 100644 --- a/geode-core/src/main/java/com/gemstone/gemfire/cache/EntryEvent.java +++ b/geode-core/src/main/java/com/gemstone/gemfire/cache/EntryEvent.java @@ -30,7 +30,6 @@ * Attempts to access off-heap data from this event after it has expired will result in an * IllegalStateException. * - * @author Eric Zoerner * * * @see CacheListener diff --git a/geode-core/src/main/java/com/gemstone/gemfire/cache/EntryExistsException.java b/geode-core/src/main/java/com/gemstone/gemfire/cache/EntryExistsException.java index 81a93d33fdd5..574d9b2ffb58 100644 --- a/geode-core/src/main/java/com/gemstone/gemfire/cache/EntryExistsException.java +++ b/geode-core/src/main/java/com/gemstone/gemfire/cache/EntryExistsException.java @@ -19,7 +19,6 @@ /** Thrown when attempting to create a Region.Entry that already * exists in the Region. - * @author Eric Zoerner * * @see com.gemstone.gemfire.cache.Region#create(Object, Object) * @see Region.Entry diff --git a/geode-core/src/main/java/com/gemstone/gemfire/cache/EntryNotFoundException.java b/geode-core/src/main/java/com/gemstone/gemfire/cache/EntryNotFoundException.java index 23ffd21605ca..2a6a33676174 100644 --- a/geode-core/src/main/java/com/gemstone/gemfire/cache/EntryNotFoundException.java +++ b/geode-core/src/main/java/com/gemstone/gemfire/cache/EntryNotFoundException.java @@ -21,7 +21,6 @@ * doesn't exist in the Region. This exception is not * thrown by {@link com.gemstone.gemfire.cache.Region#get(Object)} or {@link Region#getEntry}. * - * @author Eric Zoerner * * * @see com.gemstone.gemfire.cache.Region#invalidate(Object) diff --git a/geode-core/src/main/java/com/gemstone/gemfire/cache/EntryOperation.java b/geode-core/src/main/java/com/gemstone/gemfire/cache/EntryOperation.java index 10680f1ce32f..6e8bb4cc39fb 100755 --- a/geode-core/src/main/java/com/gemstone/gemfire/cache/EntryOperation.java +++ b/geode-core/src/main/java/com/gemstone/gemfire/cache/EntryOperation.java @@ -21,8 +21,6 @@ * Gemfire Context passed to PartitionResolver to compute the * data location * - * @author Yogesh Mahajan - * @author Mitch Thomas * * @see PartitionResolver * @since 6.0 diff --git a/geode-core/src/main/java/com/gemstone/gemfire/cache/EvictionAction.java b/geode-core/src/main/java/com/gemstone/gemfire/cache/EvictionAction.java index 6f1fc010b564..b6957a9fdfd0 100644 --- a/geode-core/src/main/java/com/gemstone/gemfire/cache/EvictionAction.java +++ b/geode-core/src/main/java/com/gemstone/gemfire/cache/EvictionAction.java @@ -19,7 +19,6 @@ import javax.print.attribute.EnumSyntax; /** * The action that an {@link com.gemstone.gemfire.cache.EvictionAlgorithm} takes. - * @author Mitch Thomas * @since 5.0 * @see com.gemstone.gemfire.cache.EvictionAlgorithm * @see com.gemstone.gemfire.internal.cache.EvictionAttributesImpl diff --git a/geode-core/src/main/java/com/gemstone/gemfire/cache/EvictionAlgorithm.java b/geode-core/src/main/java/com/gemstone/gemfire/cache/EvictionAlgorithm.java index 42d73aa2bf8b..391143129e57 100644 --- a/geode-core/src/main/java/com/gemstone/gemfire/cache/EvictionAlgorithm.java +++ b/geode-core/src/main/java/com/gemstone/gemfire/cache/EvictionAlgorithm.java @@ -20,7 +20,6 @@ /** The algorithm used to determine when to perform an {@link com.gemstone.gemfire.cache.EvictionAction} * - * @author Mitch Thomas * @since 5.0 * @see com.gemstone.gemfire.cache.EvictionAction * @see com.gemstone.gemfire.internal.cache.EvictionAttributesImpl diff --git a/geode-core/src/main/java/com/gemstone/gemfire/cache/EvictionAttributes.java b/geode-core/src/main/java/com/gemstone/gemfire/cache/EvictionAttributes.java index bc7e39f580de..cc286e8e446b 100644 --- a/geode-core/src/main/java/com/gemstone/gemfire/cache/EvictionAttributes.java +++ b/geode-core/src/main/java/com/gemstone/gemfire/cache/EvictionAttributes.java @@ -28,7 +28,6 @@ * com.gemstone.gemfire.cache.EvictionAction}. Once a Region is created with an eviction controller, it can * not be removed, however it can be changed through an {@link com.gemstone.gemfire.cache.EvictionAttributesMutator}. * - * @author Mitch Thomas * @see com.gemstone.gemfire.cache.AttributesFactory#setEvictionAttributes(EvictionAttributes) * @see com.gemstone.gemfire.cache.AttributesMutator * @since 5.0 diff --git a/geode-core/src/main/java/com/gemstone/gemfire/cache/EvictionAttributesMutator.java b/geode-core/src/main/java/com/gemstone/gemfire/cache/EvictionAttributesMutator.java index cc496447bacc..77dcab74679d 100644 --- a/geode-core/src/main/java/com/gemstone/gemfire/cache/EvictionAttributesMutator.java +++ b/geode-core/src/main/java/com/gemstone/gemfire/cache/EvictionAttributesMutator.java @@ -22,7 +22,6 @@ * The EvictionAttributesMutator allows changes to be made to a * {@link com.gemstone.gemfire.cache.EvictionAttributes}. It is returned * by {@link com.gemstone.gemfire.cache.AttributesMutator#getEvictionAttributesMutator()} - * @author Mitch Thomas * @since 5.0 */ public interface EvictionAttributesMutator diff --git a/geode-core/src/main/java/com/gemstone/gemfire/cache/EvictionCriteria.java b/geode-core/src/main/java/com/gemstone/gemfire/cache/EvictionCriteria.java index 38bc8ce1a35f..8df201c047e6 100644 --- a/geode-core/src/main/java/com/gemstone/gemfire/cache/EvictionCriteria.java +++ b/geode-core/src/main/java/com/gemstone/gemfire/cache/EvictionCriteria.java @@ -25,7 +25,6 @@ * task that will get the keys to be evicted using this and then destroy from * the region to which this is attached. * - * @author swale * @since gfxd 1.0 */ public interface EvictionCriteria { diff --git a/geode-core/src/main/java/com/gemstone/gemfire/cache/ExpirationAction.java b/geode-core/src/main/java/com/gemstone/gemfire/cache/ExpirationAction.java index 6753e0dd7ae2..f16820ba92ef 100644 --- a/geode-core/src/main/java/com/gemstone/gemfire/cache/ExpirationAction.java +++ b/geode-core/src/main/java/com/gemstone/gemfire/cache/ExpirationAction.java @@ -23,7 +23,6 @@ /** * Enumerated type for expiration actions. * - * @author Eric Zoerner * * * @see ExpirationAttributes diff --git a/geode-core/src/main/java/com/gemstone/gemfire/cache/ExpirationAttributes.java b/geode-core/src/main/java/com/gemstone/gemfire/cache/ExpirationAttributes.java index 71e20ce106e8..1c463f78911f 100644 --- a/geode-core/src/main/java/com/gemstone/gemfire/cache/ExpirationAttributes.java +++ b/geode-core/src/main/java/com/gemstone/gemfire/cache/ExpirationAttributes.java @@ -30,7 +30,6 @@ * action is not specified, it defaults to ExpirationAction.INVALIDATE. * If the timeout is not specified, it defaults to zero (which means to never timeout). * - * @author Eric Zoerner * * * @see AttributesFactory diff --git a/geode-core/src/main/java/com/gemstone/gemfire/cache/FailedSynchronizationException.java b/geode-core/src/main/java/com/gemstone/gemfire/cache/FailedSynchronizationException.java index 4842324fcabd..ee22889d2817 100644 --- a/geode-core/src/main/java/com/gemstone/gemfire/cache/FailedSynchronizationException.java +++ b/geode-core/src/main/java/com/gemstone/gemfire/cache/FailedSynchronizationException.java @@ -27,7 +27,6 @@ * javax.transaction.Status#STATUS_MARKED_ROLLBACK * status. * - * @author Mitch Thomas * * @see UserTransaction#setRollbackOnly * @see Transaction#registerSynchronization diff --git a/geode-core/src/main/java/com/gemstone/gemfire/cache/FixedPartitionAttributes.java b/geode-core/src/main/java/com/gemstone/gemfire/cache/FixedPartitionAttributes.java index 04e82e6b7758..69bbfc769ea4 100644 --- a/geode-core/src/main/java/com/gemstone/gemfire/cache/FixedPartitionAttributes.java +++ b/geode-core/src/main/java/com/gemstone/gemfire/cache/FixedPartitionAttributes.java @@ -31,7 +31,6 @@ * @see com.gemstone.gemfire.cache.PartitionAttributes * @see com.gemstone.gemfire.cache.PartitionAttributesFactory * - * @author kbachhav * @since 6.6 */ diff --git a/geode-core/src/main/java/com/gemstone/gemfire/cache/FixedPartitionResolver.java b/geode-core/src/main/java/com/gemstone/gemfire/cache/FixedPartitionResolver.java index 8b77e5ecd776..9450856149ef 100644 --- a/geode-core/src/main/java/com/gemstone/gemfire/cache/FixedPartitionResolver.java +++ b/geode-core/src/main/java/com/gemstone/gemfire/cache/FixedPartitionResolver.java @@ -54,7 +54,6 @@ *   }
    * * @see PartitionResolver - * @author kbachhav * @since 6.6 * * diff --git a/geode-core/src/main/java/com/gemstone/gemfire/cache/GatewayException.java b/geode-core/src/main/java/com/gemstone/gemfire/cache/GatewayException.java index 7274f320cdb0..93bc723d68dc 100755 --- a/geode-core/src/main/java/com/gemstone/gemfire/cache/GatewayException.java +++ b/geode-core/src/main/java/com/gemstone/gemfire/cache/GatewayException.java @@ -20,7 +20,6 @@ /** * An exception thrown by a Gateway. * - * @author Barry Oglesby * * @since 4.2 */ diff --git a/geode-core/src/main/java/com/gemstone/gemfire/cache/GemFireCache.java b/geode-core/src/main/java/com/gemstone/gemfire/cache/GemFireCache.java index 9425706339a8..96a8ce6de538 100644 --- a/geode-core/src/main/java/com/gemstone/gemfire/cache/GemFireCache.java +++ b/geode-core/src/main/java/com/gemstone/gemfire/cache/GemFireCache.java @@ -43,7 +43,6 @@ * * * @since 6.5 - * @author darrel */ public interface GemFireCache extends RegionService { /** Returns the name of this cache. diff --git a/geode-core/src/main/java/com/gemstone/gemfire/cache/InterestPolicy.java b/geode-core/src/main/java/com/gemstone/gemfire/cache/InterestPolicy.java index 0114e3bbb947..dbe73379017d 100644 --- a/geode-core/src/main/java/com/gemstone/gemfire/cache/InterestPolicy.java +++ b/geode-core/src/main/java/com/gemstone/gemfire/cache/InterestPolicy.java @@ -24,7 +24,6 @@ * The interest policy specifies what data a subscriber is interested in having * in it's region. * - * @author Darrel Schneider * * * @see SubscriptionAttributes diff --git a/geode-core/src/main/java/com/gemstone/gemfire/cache/InterestRegistrationEvent.java b/geode-core/src/main/java/com/gemstone/gemfire/cache/InterestRegistrationEvent.java index b54cf7a76750..df0c4ffa7465 100755 --- a/geode-core/src/main/java/com/gemstone/gemfire/cache/InterestRegistrationEvent.java +++ b/geode-core/src/main/java/com/gemstone/gemfire/cache/InterestRegistrationEvent.java @@ -25,7 +25,6 @@ * Interface InterestRegistrationEvent encapsulated interest * event information like region and keys of interest. * - * @author Barry Oglesby * @since 6.0 */ public interface InterestRegistrationEvent { diff --git a/geode-core/src/main/java/com/gemstone/gemfire/cache/InterestRegistrationListener.java b/geode-core/src/main/java/com/gemstone/gemfire/cache/InterestRegistrationListener.java index 7f52c32d6805..714be3ffcd3c 100755 --- a/geode-core/src/main/java/com/gemstone/gemfire/cache/InterestRegistrationListener.java +++ b/geode-core/src/main/java/com/gemstone/gemfire/cache/InterestRegistrationListener.java @@ -59,7 +59,6 @@ *} * * - * @author Barry Oglesby * * @since 6.0 * diff --git a/geode-core/src/main/java/com/gemstone/gemfire/cache/InterestResultPolicy.java b/geode-core/src/main/java/com/gemstone/gemfire/cache/InterestResultPolicy.java index 47910811f6d8..abfdc8b45ffd 100755 --- a/geode-core/src/main/java/com/gemstone/gemfire/cache/InterestResultPolicy.java +++ b/geode-core/src/main/java/com/gemstone/gemfire/cache/InterestResultPolicy.java @@ -27,7 +27,6 @@ * register interest result. The result of a call to Region.registerInterest * can be the keys and current values, just the keys or nothing. * - * @author Barry Oglesby * * @see com.gemstone.gemfire.cache.Region#registerInterest(Object) * @see com.gemstone.gemfire.cache.Region#registerInterestRegex(String) diff --git a/geode-core/src/main/java/com/gemstone/gemfire/cache/LoaderHelper.java b/geode-core/src/main/java/com/gemstone/gemfire/cache/LoaderHelper.java index a4e082fc080a..79dabe3e53a3 100644 --- a/geode-core/src/main/java/com/gemstone/gemfire/cache/LoaderHelper.java +++ b/geode-core/src/main/java/com/gemstone/gemfire/cache/LoaderHelper.java @@ -22,7 +22,6 @@ * is only valid within the {@link CacheLoader#load(LoaderHelper) load} * method. * - * @author Dave Monnie * * @see CacheLoader#load(LoaderHelper) load * @since 2.0 diff --git a/geode-core/src/main/java/com/gemstone/gemfire/cache/LossAction.java b/geode-core/src/main/java/com/gemstone/gemfire/cache/LossAction.java index c6adcd7edc18..08372df60c20 100755 --- a/geode-core/src/main/java/com/gemstone/gemfire/cache/LossAction.java +++ b/geode-core/src/main/java/com/gemstone/gemfire/cache/LossAction.java @@ -28,7 +28,6 @@ * The LossAction is specified when configuring a region's * {@link com.gemstone.gemfire.cache.MembershipAttributes}. * - * @author Kirk Lund * @since 5.0 */ public class LossAction implements Serializable { diff --git a/geode-core/src/main/java/com/gemstone/gemfire/cache/LowMemoryException.java b/geode-core/src/main/java/com/gemstone/gemfire/cache/LowMemoryException.java index 2fbbbd2bf4af..e2f37482d0dd 100644 --- a/geode-core/src/main/java/com/gemstone/gemfire/cache/LowMemoryException.java +++ b/geode-core/src/main/java/com/gemstone/gemfire/cache/LowMemoryException.java @@ -31,7 +31,6 @@ * @see ResourceManager#setCriticalHeapPercentage(float) * @see Region#put(Object, Object) * - * @author sbawaska * @since 6.0 */ public class LowMemoryException extends ResourceException { diff --git a/geode-core/src/main/java/com/gemstone/gemfire/cache/MembershipAttributes.java b/geode-core/src/main/java/com/gemstone/gemfire/cache/MembershipAttributes.java index 7f4e47c337a5..dd0e91a8f7ec 100755 --- a/geode-core/src/main/java/com/gemstone/gemfire/cache/MembershipAttributes.java +++ b/geode-core/src/main/java/com/gemstone/gemfire/cache/MembershipAttributes.java @@ -45,7 +45,6 @@ * required roles are specified. These attributes are immutable after the * Region has been created.

    * - * @author Kirk Lund * @since 5.0 */ public class MembershipAttributes implements DataSerializable, Externalizable { diff --git a/geode-core/src/main/java/com/gemstone/gemfire/cache/MirrorType.java b/geode-core/src/main/java/com/gemstone/gemfire/cache/MirrorType.java index ec16a2fe7b91..a49995821102 100644 --- a/geode-core/src/main/java/com/gemstone/gemfire/cache/MirrorType.java +++ b/geode-core/src/main/java/com/gemstone/gemfire/cache/MirrorType.java @@ -22,7 +22,6 @@ /** * Enumerated type for region mirroring. * - * @author Eric Zoerner * * * @see AttributesFactory#setMirrorType diff --git a/geode-core/src/main/java/com/gemstone/gemfire/cache/NoQueueServersAvailableException.java b/geode-core/src/main/java/com/gemstone/gemfire/cache/NoQueueServersAvailableException.java index 1d3a42380096..c63605cdf416 100644 --- a/geode-core/src/main/java/com/gemstone/gemfire/cache/NoQueueServersAvailableException.java +++ b/geode-core/src/main/java/com/gemstone/gemfire/cache/NoQueueServersAvailableException.java @@ -22,7 +22,6 @@ * Indicates that this client cannot contact any queue servers and * therefore cannot perform operations that require a queue, such as * registering interest. - * @author dsmith * @since 5.7 */ public class NoQueueServersAvailableException extends ServerConnectivityException { diff --git a/geode-core/src/main/java/com/gemstone/gemfire/cache/NoSubscriptionServersAvailableException.java b/geode-core/src/main/java/com/gemstone/gemfire/cache/NoSubscriptionServersAvailableException.java index ab49b17d8f30..9ececa0d9218 100644 --- a/geode-core/src/main/java/com/gemstone/gemfire/cache/NoSubscriptionServersAvailableException.java +++ b/geode-core/src/main/java/com/gemstone/gemfire/cache/NoSubscriptionServersAvailableException.java @@ -22,7 +22,6 @@ * Indicates that this client cannot contact any servers and * therefore cannot perform operations that require subscriptions, such as * registering interest. - * @author dsmith * @since 5.7 */ public class NoSubscriptionServersAvailableException extends ServerConnectivityException { diff --git a/geode-core/src/main/java/com/gemstone/gemfire/cache/Operation.java b/geode-core/src/main/java/com/gemstone/gemfire/cache/Operation.java index 9b5919dd3176..7a6385538992 100644 --- a/geode-core/src/main/java/com/gemstone/gemfire/cache/Operation.java +++ b/geode-core/src/main/java/com/gemstone/gemfire/cache/Operation.java @@ -25,7 +25,6 @@ * Enumerated type for an event operation. * This class describes the operation that generated the event. * - * @author Darrel Schneider * * * @see CacheEvent#getOperation diff --git a/geode-core/src/main/java/com/gemstone/gemfire/cache/OperationAbortedException.java b/geode-core/src/main/java/com/gemstone/gemfire/cache/OperationAbortedException.java index 9fe252994e9b..f74763af4db9 100644 --- a/geode-core/src/main/java/com/gemstone/gemfire/cache/OperationAbortedException.java +++ b/geode-core/src/main/java/com/gemstone/gemfire/cache/OperationAbortedException.java @@ -21,7 +21,6 @@ * would have otherwise affected the cache has been aborted. * Only subclasses are instantiated. * - * @author Eric Zoerner * * * @since 3.0 diff --git a/geode-core/src/main/java/com/gemstone/gemfire/cache/PartitionAttributes.java b/geode-core/src/main/java/com/gemstone/gemfire/cache/PartitionAttributes.java index fafd0841933a..ef6315f038fa 100644 --- a/geode-core/src/main/java/com/gemstone/gemfire/cache/PartitionAttributes.java +++ b/geode-core/src/main/java/com/gemstone/gemfire/cache/PartitionAttributes.java @@ -37,7 +37,6 @@ * * Also see {@link com.gemstone.gemfire.cache.DataPolicy#PARTITION}. * - * @author rreja * @since 5.0 * */ diff --git a/geode-core/src/main/java/com/gemstone/gemfire/cache/PartitionAttributesFactory.java b/geode-core/src/main/java/com/gemstone/gemfire/cache/PartitionAttributesFactory.java index 41b534da8489..1e35739b4ea2 100644 --- a/geode-core/src/main/java/com/gemstone/gemfire/cache/PartitionAttributesFactory.java +++ b/geode-core/src/main/java/com/gemstone/gemfire/cache/PartitionAttributesFactory.java @@ -68,8 +68,6 @@ * * @see com.gemstone.gemfire.cache.PartitionAttributes * @see com.gemstone.gemfire.cache.AttributesFactory#setPartitionAttributes(PartitionAttributes) - * @author rreja - * @author bruce * @since 5.0 */ public class PartitionAttributesFactory diff --git a/geode-core/src/main/java/com/gemstone/gemfire/cache/PartitionResolver.java b/geode-core/src/main/java/com/gemstone/gemfire/cache/PartitionResolver.java index 3cccb9a2ffb3..ec4e82194f9f 100755 --- a/geode-core/src/main/java/com/gemstone/gemfire/cache/PartitionResolver.java +++ b/geode-core/src/main/java/com/gemstone/gemfire/cache/PartitionResolver.java @@ -56,8 +56,6 @@ * guaranteed to be colocated. *

    * - * @author Yogesh Mahajan - * @author Mitch Thomas * * @since 6.0 */ diff --git a/geode-core/src/main/java/com/gemstone/gemfire/cache/PartitionedRegionDistributionException.java b/geode-core/src/main/java/com/gemstone/gemfire/cache/PartitionedRegionDistributionException.java index 908ff40aec44..dff7872f8231 100644 --- a/geode-core/src/main/java/com/gemstone/gemfire/cache/PartitionedRegionDistributionException.java +++ b/geode-core/src/main/java/com/gemstone/gemfire/cache/PartitionedRegionDistributionException.java @@ -21,7 +21,6 @@ * after multiple attempts. * * @since 5.1 - * @author Mitch Thomas */ public class PartitionedRegionDistributionException extends CacheRuntimeException diff --git a/geode-core/src/main/java/com/gemstone/gemfire/cache/RegionAccessException.java b/geode-core/src/main/java/com/gemstone/gemfire/cache/RegionAccessException.java index 9eaca042aae2..899bf4ef2d9a 100755 --- a/geode-core/src/main/java/com/gemstone/gemfire/cache/RegionAccessException.java +++ b/geode-core/src/main/java/com/gemstone/gemfire/cache/RegionAccessException.java @@ -28,7 +28,6 @@ * {@link MembershipAttributes} have been configured with {@link * LossAction#NO_ACCESS} or {@link LossAction#LIMITED_ACCESS}. * - * @author Kirk Lund * @since 5.0 */ public class RegionAccessException extends RegionRoleException { diff --git a/geode-core/src/main/java/com/gemstone/gemfire/cache/RegionAttributes.java b/geode-core/src/main/java/com/gemstone/gemfire/cache/RegionAttributes.java index c36a9c50cbaf..4ab576acb98b 100644 --- a/geode-core/src/main/java/com/gemstone/gemfire/cache/RegionAttributes.java +++ b/geode-core/src/main/java/com/gemstone/gemfire/cache/RegionAttributes.java @@ -36,7 +36,6 @@ * *

    Note that the RegionAttributes are not distributed with the region. * - * @author Eric Zoerner * * @see AttributesFactory * @see AttributesMutator diff --git a/geode-core/src/main/java/com/gemstone/gemfire/cache/RegionDestroyedException.java b/geode-core/src/main/java/com/gemstone/gemfire/cache/RegionDestroyedException.java index 2eb03186b8d4..25c6d23572ee 100644 --- a/geode-core/src/main/java/com/gemstone/gemfire/cache/RegionDestroyedException.java +++ b/geode-core/src/main/java/com/gemstone/gemfire/cache/RegionDestroyedException.java @@ -20,7 +20,6 @@ * Indicates that the region has been destroyed. Further operations * on the region object are not allowed. * - * @author Eric Zoerner * * @since 2.0 */ diff --git a/geode-core/src/main/java/com/gemstone/gemfire/cache/RegionDistributionException.java b/geode-core/src/main/java/com/gemstone/gemfire/cache/RegionDistributionException.java index 36dd4f4b7927..b30cd2cf6173 100755 --- a/geode-core/src/main/java/com/gemstone/gemfire/cache/RegionDistributionException.java +++ b/geode-core/src/main/java/com/gemstone/gemfire/cache/RegionDistributionException.java @@ -31,7 +31,6 @@ * may be caused by one or more required roles not acknowledging receipt of * the message. * - * @author Kirk Lund * @since 5.0 */ public class RegionDistributionException extends RegionRoleException { diff --git a/geode-core/src/main/java/com/gemstone/gemfire/cache/RegionEvent.java b/geode-core/src/main/java/com/gemstone/gemfire/cache/RegionEvent.java index f7c56bda1991..d15ee891805b 100644 --- a/geode-core/src/main/java/com/gemstone/gemfire/cache/RegionEvent.java +++ b/geode-core/src/main/java/com/gemstone/gemfire/cache/RegionEvent.java @@ -21,7 +21,6 @@ * its identity and the circumstances of the event. * This is passed in to CacheListener and CacheWriter. * - * @author Eric Zoerner * * * @see CacheListener diff --git a/geode-core/src/main/java/com/gemstone/gemfire/cache/RegionExistsException.java b/geode-core/src/main/java/com/gemstone/gemfire/cache/RegionExistsException.java index a215ca60307e..a4ced6fb9916 100644 --- a/geode-core/src/main/java/com/gemstone/gemfire/cache/RegionExistsException.java +++ b/geode-core/src/main/java/com/gemstone/gemfire/cache/RegionExistsException.java @@ -21,7 +21,6 @@ * Indicates that the requested region already exists when a region is * being created. * - * @author Eric Zoerner * * * @see Region#createSubregion diff --git a/geode-core/src/main/java/com/gemstone/gemfire/cache/RegionFactory.java b/geode-core/src/main/java/com/gemstone/gemfire/cache/RegionFactory.java index 214e878f7a5d..a83aa2010f25 100644 --- a/geode-core/src/main/java/com/gemstone/gemfire/cache/RegionFactory.java +++ b/geode-core/src/main/java/com/gemstone/gemfire/cache/RegionFactory.java @@ -57,7 +57,6 @@ .create("partition"); * - * @author Mitch Thomas * @since 5.0 */ diff --git a/geode-core/src/main/java/com/gemstone/gemfire/cache/RegionMembershipListener.java b/geode-core/src/main/java/com/gemstone/gemfire/cache/RegionMembershipListener.java index b55a2e871113..60f01cf6694b 100644 --- a/geode-core/src/main/java/com/gemstone/gemfire/cache/RegionMembershipListener.java +++ b/geode-core/src/main/java/com/gemstone/gemfire/cache/RegionMembershipListener.java @@ -25,7 +25,6 @@ * Instead of implementing this interface it is recommended that you extend * the {@link com.gemstone.gemfire.cache.util.RegionMembershipListenerAdapter} class. * - * @author Darrel Schneider * * * @see AttributesFactory#addCacheListener diff --git a/geode-core/src/main/java/com/gemstone/gemfire/cache/RegionReinitializedException.java b/geode-core/src/main/java/com/gemstone/gemfire/cache/RegionReinitializedException.java index 3c79a980cd44..029576c09a40 100644 --- a/geode-core/src/main/java/com/gemstone/gemfire/cache/RegionReinitializedException.java +++ b/geode-core/src/main/java/com/gemstone/gemfire/cache/RegionReinitializedException.java @@ -22,7 +22,6 @@ * A new reference must be acquired from the Cache the region's parent * region. * - * @author Eric Zoerner * * @since 4.0 */ diff --git a/geode-core/src/main/java/com/gemstone/gemfire/cache/RegionRoleException.java b/geode-core/src/main/java/com/gemstone/gemfire/cache/RegionRoleException.java index 31a0c41a653e..1864415dfeb5 100755 --- a/geode-core/src/main/java/com/gemstone/gemfire/cache/RegionRoleException.java +++ b/geode-core/src/main/java/com/gemstone/gemfire/cache/RegionRoleException.java @@ -21,7 +21,6 @@ * Reliability for a Region is defined by its * {@link MembershipAttributes}. * - * @author Kirk Lund * @since 5.0 */ public abstract class RegionRoleException extends RoleException { diff --git a/geode-core/src/main/java/com/gemstone/gemfire/cache/RegionRoleListener.java b/geode-core/src/main/java/com/gemstone/gemfire/cache/RegionRoleListener.java index 7775bcb5540e..e633396244e3 100755 --- a/geode-core/src/main/java/com/gemstone/gemfire/cache/RegionRoleListener.java +++ b/geode-core/src/main/java/com/gemstone/gemfire/cache/RegionRoleListener.java @@ -25,7 +25,6 @@ * the {@link com.gemstone.gemfire.cache.util.RegionRoleListenerAdapter} * class. * - * @author Kirk Lund * * @see AttributesFactory#setCacheListener * @see RegionAttributes#getCacheListener diff --git a/geode-core/src/main/java/com/gemstone/gemfire/cache/RegionService.java b/geode-core/src/main/java/com/gemstone/gemfire/cache/RegionService.java index a7916beb46da..2afdd0ec6da6 100644 --- a/geode-core/src/main/java/com/gemstone/gemfire/cache/RegionService.java +++ b/geode-core/src/main/java/com/gemstone/gemfire/cache/RegionService.java @@ -46,7 +46,6 @@ *

    * * @since 6.5 - * @author darrel */ public interface RegionService extends AutoCloseable { /** diff --git a/geode-core/src/main/java/com/gemstone/gemfire/cache/RegionShortcut.java b/geode-core/src/main/java/com/gemstone/gemfire/cache/RegionShortcut.java index 3289659268a9..6aae635e4b4a 100644 --- a/geode-core/src/main/java/com/gemstone/gemfire/cache/RegionShortcut.java +++ b/geode-core/src/main/java/com/gemstone/gemfire/cache/RegionShortcut.java @@ -25,7 +25,6 @@ * the refid attribute on a region element or region-attributes element to the * string of each value. * @since 6.5 - * @author darrel */ public enum RegionShortcut { /** diff --git a/geode-core/src/main/java/com/gemstone/gemfire/cache/RemoteTransactionException.java b/geode-core/src/main/java/com/gemstone/gemfire/cache/RemoteTransactionException.java index 62ef60cebdd6..bdfea226c479 100755 --- a/geode-core/src/main/java/com/gemstone/gemfire/cache/RemoteTransactionException.java +++ b/geode-core/src/main/java/com/gemstone/gemfire/cache/RemoteTransactionException.java @@ -24,7 +24,6 @@ * is hosted on a member that is not * the initiator of the transaction. * - * @author gregp * @since 6.5 * @deprecated as of 6.6 exceptions from a remote node are no longer wrapped in this exception. Instead of this, {@link TransactionDataNodeHasDepartedException} is thrown. */ diff --git a/geode-core/src/main/java/com/gemstone/gemfire/cache/RequiredRoles.java b/geode-core/src/main/java/com/gemstone/gemfire/cache/RequiredRoles.java index 40b87da5cdec..035f62c89db3 100755 --- a/geode-core/src/main/java/com/gemstone/gemfire/cache/RequiredRoles.java +++ b/geode-core/src/main/java/com/gemstone/gemfire/cache/RequiredRoles.java @@ -36,7 +36,6 @@ * specific Region created. In this case the Role is * considered to be absent for that Region. * - * @author Kirk Lund * @see com.gemstone.gemfire.distributed.Role * @since 5.0 */ diff --git a/geode-core/src/main/java/com/gemstone/gemfire/cache/ResourceException.java b/geode-core/src/main/java/com/gemstone/gemfire/cache/ResourceException.java index a22a65882d4e..53983f05961a 100644 --- a/geode-core/src/main/java/com/gemstone/gemfire/cache/ResourceException.java +++ b/geode-core/src/main/java/com/gemstone/gemfire/cache/ResourceException.java @@ -21,7 +21,6 @@ * A Generic exception to indicate that a resource exception has occurred. * This class is abstract so that only subclasses can be instantiated. * - * @author sbawaska * @since 6.0 */ public abstract class ResourceException extends CacheRuntimeException { diff --git a/geode-core/src/main/java/com/gemstone/gemfire/cache/ResumptionAction.java b/geode-core/src/main/java/com/gemstone/gemfire/cache/ResumptionAction.java index b708831dc861..a3fbf57efc89 100755 --- a/geode-core/src/main/java/com/gemstone/gemfire/cache/ResumptionAction.java +++ b/geode-core/src/main/java/com/gemstone/gemfire/cache/ResumptionAction.java @@ -27,7 +27,6 @@ * The ResumptionAction is specified when configuring a region's * {@link com.gemstone.gemfire.cache.MembershipAttributes}. * - * @author Kirk Lund * @since 5.0 */ public class ResumptionAction implements java.io.Serializable { diff --git a/geode-core/src/main/java/com/gemstone/gemfire/cache/RoleEvent.java b/geode-core/src/main/java/com/gemstone/gemfire/cache/RoleEvent.java index c5c683ce1092..b38835e3d04a 100755 --- a/geode-core/src/main/java/com/gemstone/gemfire/cache/RoleEvent.java +++ b/geode-core/src/main/java/com/gemstone/gemfire/cache/RoleEvent.java @@ -24,7 +24,6 @@ * including its identity and the circumstances of the event. This is * passed in to {@link RegionRoleListener}. * - * @author Kirk Lund * @see RegionRoleListener * @since 5.0 */ diff --git a/geode-core/src/main/java/com/gemstone/gemfire/cache/RoleException.java b/geode-core/src/main/java/com/gemstone/gemfire/cache/RoleException.java index 52af104bc25c..088f504fa909 100755 --- a/geode-core/src/main/java/com/gemstone/gemfire/cache/RoleException.java +++ b/geode-core/src/main/java/com/gemstone/gemfire/cache/RoleException.java @@ -22,7 +22,6 @@ * Region regions} that have been configured with required roles using * {@link MembershipAttributes}. * - * @author Kirk Lund * @since 5.0 */ public abstract class RoleException extends CacheRuntimeException { diff --git a/geode-core/src/main/java/com/gemstone/gemfire/cache/Scope.java b/geode-core/src/main/java/com/gemstone/gemfire/cache/Scope.java index 8ada23e9dd13..1affd0b7223b 100644 --- a/geode-core/src/main/java/com/gemstone/gemfire/cache/Scope.java +++ b/geode-core/src/main/java/com/gemstone/gemfire/cache/Scope.java @@ -25,7 +25,6 @@ /** * Enumerated type for region distribution scope. * - * @author Eric Zoerner * * * @see RegionAttributes#getScope diff --git a/geode-core/src/main/java/com/gemstone/gemfire/cache/SerializedCacheValue.java b/geode-core/src/main/java/com/gemstone/gemfire/cache/SerializedCacheValue.java index a65d4a3fd670..e12076ead263 100755 --- a/geode-core/src/main/java/com/gemstone/gemfire/cache/SerializedCacheValue.java +++ b/geode-core/src/main/java/com/gemstone/gemfire/cache/SerializedCacheValue.java @@ -32,7 +32,6 @@ * Attempts to access off-heap data from this event after it has expired will result in an * IllegalStateException. * - * @author Barry Oglesby * @since 5.5 */ public interface SerializedCacheValue { diff --git a/geode-core/src/main/java/com/gemstone/gemfire/cache/StatisticsDisabledException.java b/geode-core/src/main/java/com/gemstone/gemfire/cache/StatisticsDisabledException.java index f98577fd9759..f135b87944ec 100644 --- a/geode-core/src/main/java/com/gemstone/gemfire/cache/StatisticsDisabledException.java +++ b/geode-core/src/main/java/com/gemstone/gemfire/cache/StatisticsDisabledException.java @@ -21,7 +21,6 @@ * Thrown if statistics are requested when statistics are disabled on the * region. * - * @author Eric Zoerner * * * @see AttributesFactory#setStatisticsEnabled diff --git a/geode-core/src/main/java/com/gemstone/gemfire/cache/SubscriptionAttributes.java b/geode-core/src/main/java/com/gemstone/gemfire/cache/SubscriptionAttributes.java index 07731ee920a8..2fb218b583ad 100644 --- a/geode-core/src/main/java/com/gemstone/gemfire/cache/SubscriptionAttributes.java +++ b/geode-core/src/main/java/com/gemstone/gemfire/cache/SubscriptionAttributes.java @@ -26,7 +26,6 @@ *

    The {@link InterestPolicy} defines what remote operation's data/event * are of interest to this cache's region.

    * - * @author Darrel * @since 5.0 */ public class SubscriptionAttributes implements DataSerializable, Externalizable { diff --git a/geode-core/src/main/java/com/gemstone/gemfire/cache/SynchronizationCommitConflictException.java b/geode-core/src/main/java/com/gemstone/gemfire/cache/SynchronizationCommitConflictException.java index d8a5a763c785..1870ddc80a6e 100644 --- a/geode-core/src/main/java/com/gemstone/gemfire/cache/SynchronizationCommitConflictException.java +++ b/geode-core/src/main/java/com/gemstone/gemfire/cache/SynchronizationCommitConflictException.java @@ -19,7 +19,6 @@ /** Thrown when a commit operation of a JTA enlisted cache transaction fails * - * @author Mitch Thomas * * @see javax.transaction.UserTransaction#commit * @since 4.0 diff --git a/geode-core/src/main/java/com/gemstone/gemfire/cache/TimeoutException.java b/geode-core/src/main/java/com/gemstone/gemfire/cache/TimeoutException.java index 53c252ac09eb..0cdb912f24ce 100644 --- a/geode-core/src/main/java/com/gemstone/gemfire/cache/TimeoutException.java +++ b/geode-core/src/main/java/com/gemstone/gemfire/cache/TimeoutException.java @@ -20,7 +20,6 @@ /** Thrown if a netSearch times out without getting a response back from a cache, * or when attempting to acquire a distributed lock. * - * @author Eric Zoerner * * * @see LoaderHelper#netSearch diff --git a/geode-core/src/main/java/com/gemstone/gemfire/cache/TransactionDataNodeHasDepartedException.java b/geode-core/src/main/java/com/gemstone/gemfire/cache/TransactionDataNodeHasDepartedException.java index 6606c1313bd0..f977694294c9 100755 --- a/geode-core/src/main/java/com/gemstone/gemfire/cache/TransactionDataNodeHasDepartedException.java +++ b/geode-core/src/main/java/com/gemstone/gemfire/cache/TransactionDataNodeHasDepartedException.java @@ -25,7 +25,6 @@ * is hosted on a member that is not * the initiator of the transaction. * - * @author gregp * @since 6.5 */ public class TransactionDataNodeHasDepartedException extends TransactionException { diff --git a/geode-core/src/main/java/com/gemstone/gemfire/cache/TransactionDataNotColocatedException.java b/geode-core/src/main/java/com/gemstone/gemfire/cache/TransactionDataNotColocatedException.java index e8be5b2cdf48..63535d7f1c62 100755 --- a/geode-core/src/main/java/com/gemstone/gemfire/cache/TransactionDataNotColocatedException.java +++ b/geode-core/src/main/java/com/gemstone/gemfire/cache/TransactionDataNotColocatedException.java @@ -29,7 +29,6 @@ * is usually colocated. This is because data can be moved from one node to another * during the time between the original transactional operations and the commit. * - * @author gregp * @since 6.5 */ public class TransactionDataNotColocatedException extends TransactionException { diff --git a/geode-core/src/main/java/com/gemstone/gemfire/cache/TransactionDataRebalancedException.java b/geode-core/src/main/java/com/gemstone/gemfire/cache/TransactionDataRebalancedException.java index a2ec32641238..65b6a18f4797 100644 --- a/geode-core/src/main/java/com/gemstone/gemfire/cache/TransactionDataRebalancedException.java +++ b/geode-core/src/main/java/com/gemstone/gemfire/cache/TransactionDataRebalancedException.java @@ -25,7 +25,6 @@ *

    This exception only occurs when a transaction * involves partitioned regions. * - * @author gregp * @since 6.6 */ public class TransactionDataRebalancedException extends TransactionException { diff --git a/geode-core/src/main/java/com/gemstone/gemfire/cache/TransactionEvent.java b/geode-core/src/main/java/com/gemstone/gemfire/cache/TransactionEvent.java index 99dd6e04cc8a..e9cc4ee677c1 100644 --- a/geode-core/src/main/java/com/gemstone/gemfire/cache/TransactionEvent.java +++ b/geode-core/src/main/java/com/gemstone/gemfire/cache/TransactionEvent.java @@ -45,7 +45,6 @@ *

    The {@link EntryEvent} instances always return null * as their {@link CacheEvent#getCallbackArgument callback argument}. * - * @author Mitch Thomas * * @see TransactionListener * @see EntryEvent diff --git a/geode-core/src/main/java/com/gemstone/gemfire/cache/TransactionException.java b/geode-core/src/main/java/com/gemstone/gemfire/cache/TransactionException.java index 62a4e0a0682f..12128041dae2 100644 --- a/geode-core/src/main/java/com/gemstone/gemfire/cache/TransactionException.java +++ b/geode-core/src/main/java/com/gemstone/gemfire/cache/TransactionException.java @@ -19,7 +19,6 @@ /** * This is the superclass for all Exceptions that may be thrown * by a GemFire transaction. - * @author sbawaska * @since 6.5 */ public class TransactionException extends CacheException { diff --git a/geode-core/src/main/java/com/gemstone/gemfire/cache/TransactionId.java b/geode-core/src/main/java/com/gemstone/gemfire/cache/TransactionId.java index eb1de7a52a76..f05ab7ea2a19 100644 --- a/geode-core/src/main/java/com/gemstone/gemfire/cache/TransactionId.java +++ b/geode-core/src/main/java/com/gemstone/gemfire/cache/TransactionId.java @@ -22,7 +22,6 @@ /** The TransactionId interface is a "marker" interface that * represents a unique GemFire transaction. * - * @author Mitch Thomas * * @since 4.0 * diff --git a/geode-core/src/main/java/com/gemstone/gemfire/cache/TransactionInDoubtException.java b/geode-core/src/main/java/com/gemstone/gemfire/cache/TransactionInDoubtException.java index b397f03c6969..49adffd02762 100644 --- a/geode-core/src/main/java/com/gemstone/gemfire/cache/TransactionInDoubtException.java +++ b/geode-core/src/main/java/com/gemstone/gemfire/cache/TransactionInDoubtException.java @@ -19,7 +19,6 @@ /** * This Exception is thrown in presence of node failures, when GemFire cannot * know with certainty about the outcome of the transaction. - * @author sbawaska * @since 6.5 */ public class TransactionInDoubtException extends TransactionException { diff --git a/geode-core/src/main/java/com/gemstone/gemfire/cache/TransactionListener.java b/geode-core/src/main/java/com/gemstone/gemfire/cache/TransactionListener.java index b79c16f64df7..0ce2f62ff0ad 100644 --- a/geode-core/src/main/java/com/gemstone/gemfire/cache/TransactionListener.java +++ b/geode-core/src/main/java/com/gemstone/gemfire/cache/TransactionListener.java @@ -33,7 +33,6 @@ * *

    Rollback and failed commit operations are local. * - * @author Darrel Schneider * * @see CacheTransactionManager#setListener * @see CacheTransactionManager#getListener diff --git a/geode-core/src/main/java/com/gemstone/gemfire/cache/TransactionWriterException.java b/geode-core/src/main/java/com/gemstone/gemfire/cache/TransactionWriterException.java index f067f1fa765b..efee741544af 100755 --- a/geode-core/src/main/java/com/gemstone/gemfire/cache/TransactionWriterException.java +++ b/geode-core/src/main/java/com/gemstone/gemfire/cache/TransactionWriterException.java @@ -24,7 +24,6 @@ * signal that the current transaction should be aborted. * * @see TransactionWriter#beforeCommit - * @author gregp * @since 6.5 * */ diff --git a/geode-core/src/main/java/com/gemstone/gemfire/cache/UnsupportedOperationInTransactionException.java b/geode-core/src/main/java/com/gemstone/gemfire/cache/UnsupportedOperationInTransactionException.java index c680d591eb8f..a91b822a8563 100755 --- a/geode-core/src/main/java/com/gemstone/gemfire/cache/UnsupportedOperationInTransactionException.java +++ b/geode-core/src/main/java/com/gemstone/gemfire/cache/UnsupportedOperationInTransactionException.java @@ -20,7 +20,6 @@ * Indicates that an attempt was mode to invoke an operation that is not * allowed in a transaction. * - * @author gregp * @since 6.5 */ public class UnsupportedOperationInTransactionException extends diff --git a/geode-core/src/main/java/com/gemstone/gemfire/cache/asyncqueue/AsyncEvent.java b/geode-core/src/main/java/com/gemstone/gemfire/cache/asyncqueue/AsyncEvent.java index ebca6d9c4b4f..054c50bcf797 100644 --- a/geode-core/src/main/java/com/gemstone/gemfire/cache/asyncqueue/AsyncEvent.java +++ b/geode-core/src/main/java/com/gemstone/gemfire/cache/asyncqueue/AsyncEvent.java @@ -22,7 +22,6 @@ /** * Represents Cache events delivered to AsyncEventListener. * - * @author pdeole * @since 7.0 */ public interface AsyncEvent extends GatewayQueueEvent{ diff --git a/geode-core/src/main/java/com/gemstone/gemfire/cache/asyncqueue/AsyncEventListener.java b/geode-core/src/main/java/com/gemstone/gemfire/cache/asyncqueue/AsyncEventListener.java index adf605eae582..db4902554dc9 100644 --- a/geode-core/src/main/java/com/gemstone/gemfire/cache/asyncqueue/AsyncEventListener.java +++ b/geode-core/src/main/java/com/gemstone/gemfire/cache/asyncqueue/AsyncEventListener.java @@ -56,7 +56,6 @@ * } * * - * @author pdeole * @since 7.0 */ public interface AsyncEventListener extends CacheCallback { diff --git a/geode-core/src/main/java/com/gemstone/gemfire/cache/asyncqueue/AsyncEventQueue.java b/geode-core/src/main/java/com/gemstone/gemfire/cache/asyncqueue/AsyncEventQueue.java index 230c7eb026e1..a2b8b0f62333 100644 --- a/geode-core/src/main/java/com/gemstone/gemfire/cache/asyncqueue/AsyncEventQueue.java +++ b/geode-core/src/main/java/com/gemstone/gemfire/cache/asyncqueue/AsyncEventQueue.java @@ -26,7 +26,6 @@ * Interface of AsyncEventQueue. * This represents the channel over which the events are delivered to the AsyncEventListener. * - * @author pdeole * @since 7.0 */ public interface AsyncEventQueue { diff --git a/geode-core/src/main/java/com/gemstone/gemfire/cache/asyncqueue/AsyncEventQueueFactory.java b/geode-core/src/main/java/com/gemstone/gemfire/cache/asyncqueue/AsyncEventQueueFactory.java index 0aeaf6f8d0d5..3e30b3847c2c 100644 --- a/geode-core/src/main/java/com/gemstone/gemfire/cache/asyncqueue/AsyncEventQueueFactory.java +++ b/geode-core/src/main/java/com/gemstone/gemfire/cache/asyncqueue/AsyncEventQueueFactory.java @@ -45,7 +45,6 @@ AsyncEventQueue asyncQueue = factory.create(asyncQueueId, asyncEventListener); * - * @author pdeole * @since 7.0 */ public interface AsyncEventQueueFactory { diff --git a/geode-core/src/main/java/com/gemstone/gemfire/cache/client/AllConnectionsInUseException.java b/geode-core/src/main/java/com/gemstone/gemfire/cache/client/AllConnectionsInUseException.java index 4368d2984819..b397327b0e9e 100644 --- a/geode-core/src/main/java/com/gemstone/gemfire/cache/client/AllConnectionsInUseException.java +++ b/geode-core/src/main/java/com/gemstone/gemfire/cache/client/AllConnectionsInUseException.java @@ -20,7 +20,6 @@ /** * Indicates that the connection pool is at its maximum size and * all connections are in use. - * @author dsmith * @since 5.7 */ public class AllConnectionsInUseException extends ServerConnectivityException { diff --git a/geode-core/src/main/java/com/gemstone/gemfire/cache/client/ClientCache.java b/geode-core/src/main/java/com/gemstone/gemfire/cache/client/ClientCache.java index f17545d505de..707575d02198 100644 --- a/geode-core/src/main/java/com/gemstone/gemfire/cache/client/ClientCache.java +++ b/geode-core/src/main/java/com/gemstone/gemfire/cache/client/ClientCache.java @@ -48,7 +48,6 @@ * regions on the server. *

    More pools can be created using {@link PoolManager} or by declaring them in cache.xml. * @since 6.5 - * @author darrel */ public interface ClientCache extends GemFireCache { /** diff --git a/geode-core/src/main/java/com/gemstone/gemfire/cache/client/ClientCacheFactory.java b/geode-core/src/main/java/com/gemstone/gemfire/cache/client/ClientCacheFactory.java index adb1c6761a37..99e11a0e8f04 100644 --- a/geode-core/src/main/java/com/gemstone/gemfire/cache/client/ClientCacheFactory.java +++ b/geode-core/src/main/java/com/gemstone/gemfire/cache/client/ClientCacheFactory.java @@ -115,7 +115,6 @@ Region r = c.createClientRegionFactory("MYAPP_CACHING_PROXY_MEM_LRU").create("customers"); * @since 6.5 - * @author darrel */ public class ClientCacheFactory { diff --git a/geode-core/src/main/java/com/gemstone/gemfire/cache/client/ClientNotReadyException.java b/geode-core/src/main/java/com/gemstone/gemfire/cache/client/ClientNotReadyException.java index db9a8597eb18..0ad9036f7c08 100755 --- a/geode-core/src/main/java/com/gemstone/gemfire/cache/client/ClientNotReadyException.java +++ b/geode-core/src/main/java/com/gemstone/gemfire/cache/client/ClientNotReadyException.java @@ -25,7 +25,6 @@ * method, but failed. *

    This exception was moved from the util package in 5.7. * - * @author darrel * * @since 5.7 * @deprecated as of 6.5 this exception is no longer thrown by GemFire so any code that catches it should be removed. diff --git a/geode-core/src/main/java/com/gemstone/gemfire/cache/client/ClientRegionFactory.java b/geode-core/src/main/java/com/gemstone/gemfire/cache/client/ClientRegionFactory.java index 4a5621dbb923..9c7fae07ce2e 100644 --- a/geode-core/src/main/java/com/gemstone/gemfire/cache/client/ClientRegionFactory.java +++ b/geode-core/src/main/java/com/gemstone/gemfire/cache/client/ClientRegionFactory.java @@ -60,7 +60,6 @@ * myListener).create("customers"); * * - * @author darrel * @since 6.5 */ diff --git a/geode-core/src/main/java/com/gemstone/gemfire/cache/client/ClientRegionShortcut.java b/geode-core/src/main/java/com/gemstone/gemfire/cache/client/ClientRegionShortcut.java index a3eb0b809563..3b7c3bf81932 100644 --- a/geode-core/src/main/java/com/gemstone/gemfire/cache/client/ClientRegionShortcut.java +++ b/geode-core/src/main/java/com/gemstone/gemfire/cache/client/ClientRegionShortcut.java @@ -27,7 +27,6 @@ * the refid attribute on a region element or region-attributes element to the * string of each value. * @since 6.5 - * @author darrel */ public enum ClientRegionShortcut { /** diff --git a/geode-core/src/main/java/com/gemstone/gemfire/cache/client/NoAvailableLocatorsException.java b/geode-core/src/main/java/com/gemstone/gemfire/cache/client/NoAvailableLocatorsException.java index 90227619b2d5..4157777eb4aa 100644 --- a/geode-core/src/main/java/com/gemstone/gemfire/cache/client/NoAvailableLocatorsException.java +++ b/geode-core/src/main/java/com/gemstone/gemfire/cache/client/NoAvailableLocatorsException.java @@ -19,7 +19,6 @@ /** * An exception indicating that there are no active locators available to connect to. - * @author dsmith * @since 5.7 */ public class NoAvailableLocatorsException extends ServerConnectivityException { diff --git a/geode-core/src/main/java/com/gemstone/gemfire/cache/client/NoAvailableServersException.java b/geode-core/src/main/java/com/gemstone/gemfire/cache/client/NoAvailableServersException.java index c3fb6a29b547..e848921ef77f 100644 --- a/geode-core/src/main/java/com/gemstone/gemfire/cache/client/NoAvailableServersException.java +++ b/geode-core/src/main/java/com/gemstone/gemfire/cache/client/NoAvailableServersException.java @@ -19,7 +19,6 @@ /** * An exception indicating that there are no active servers available to connect to. - * @author dsmith * @since 5.7 */ public class NoAvailableServersException extends ServerConnectivityException { diff --git a/geode-core/src/main/java/com/gemstone/gemfire/cache/client/Pool.java b/geode-core/src/main/java/com/gemstone/gemfire/cache/client/Pool.java index a6471aa2ec0f..233f833b8d0d 100644 --- a/geode-core/src/main/java/com/gemstone/gemfire/cache/client/Pool.java +++ b/geode-core/src/main/java/com/gemstone/gemfire/cache/client/Pool.java @@ -45,7 +45,6 @@ * on the client regions that will use this pool by calling * {@link RegionFactory#setPoolName}. * - * @author darrel * @since 5.7 * */ diff --git a/geode-core/src/main/java/com/gemstone/gemfire/cache/client/PoolFactory.java b/geode-core/src/main/java/com/gemstone/gemfire/cache/client/PoolFactory.java index 06d5e4c14a03..0d89da28473b 100644 --- a/geode-core/src/main/java/com/gemstone/gemfire/cache/client/PoolFactory.java +++ b/geode-core/src/main/java/com/gemstone/gemfire/cache/client/PoolFactory.java @@ -54,7 +54,6 @@ *

  • {@link Region#registerInterestRegex(String, InterestResultPolicy, boolean)} * * - * @author darrel * @since 5.7 */ public interface PoolFactory { diff --git a/geode-core/src/main/java/com/gemstone/gemfire/cache/client/PoolManager.java b/geode-core/src/main/java/com/gemstone/gemfire/cache/client/PoolManager.java index 953a3675d81f..cf1078015d5e 100644 --- a/geode-core/src/main/java/com/gemstone/gemfire/cache/client/PoolManager.java +++ b/geode-core/src/main/java/com/gemstone/gemfire/cache/client/PoolManager.java @@ -31,7 +31,6 @@ *

    * To get rid of all created pool call {@link #close()}. * - * @author darrel * @since 5.7 * */ diff --git a/geode-core/src/main/java/com/gemstone/gemfire/cache/client/ServerConnectivityException.java b/geode-core/src/main/java/com/gemstone/gemfire/cache/client/ServerConnectivityException.java index 0bbad4d1e7e3..c41ae863f3b1 100644 --- a/geode-core/src/main/java/com/gemstone/gemfire/cache/client/ServerConnectivityException.java +++ b/geode-core/src/main/java/com/gemstone/gemfire/cache/client/ServerConnectivityException.java @@ -22,7 +22,6 @@ * A generic exception indicating that a failure has happened while communicating * with a gemfire server. Subclasses of this exception provide more detail * on specific failures. - * @author dsmith * @since 5.7 */ public class ServerConnectivityException extends GemFireException { diff --git a/geode-core/src/main/java/com/gemstone/gemfire/cache/client/ServerOperationException.java b/geode-core/src/main/java/com/gemstone/gemfire/cache/client/ServerOperationException.java index 79ba2a1fa3bf..72271c21100a 100644 --- a/geode-core/src/main/java/com/gemstone/gemfire/cache/client/ServerOperationException.java +++ b/geode-core/src/main/java/com/gemstone/gemfire/cache/client/ServerOperationException.java @@ -21,7 +21,6 @@ /** * An exception indicating that a failure has happened on the server * while processing an operation that was sent to it by a client. - * @author darrel * @since 5.7 */ public class ServerOperationException extends ServerConnectivityException { diff --git a/geode-core/src/main/java/com/gemstone/gemfire/cache/client/ServerRefusedConnectionException.java b/geode-core/src/main/java/com/gemstone/gemfire/cache/client/ServerRefusedConnectionException.java index 935a08dc9ff6..4746371956f1 100755 --- a/geode-core/src/main/java/com/gemstone/gemfire/cache/client/ServerRefusedConnectionException.java +++ b/geode-core/src/main/java/com/gemstone/gemfire/cache/client/ServerRefusedConnectionException.java @@ -23,7 +23,6 @@ * A ServerRefusedConnectionException indicates a client attempted * to connect to a server, but the handshake was rejected. * - * @author darrel * * @since 5.7 */ diff --git a/geode-core/src/main/java/com/gemstone/gemfire/cache/client/SubscriptionNotEnabledException.java b/geode-core/src/main/java/com/gemstone/gemfire/cache/client/SubscriptionNotEnabledException.java index 68bb14fccb33..c9ea06bce038 100644 --- a/geode-core/src/main/java/com/gemstone/gemfire/cache/client/SubscriptionNotEnabledException.java +++ b/geode-core/src/main/java/com/gemstone/gemfire/cache/client/SubscriptionNotEnabledException.java @@ -23,7 +23,6 @@ * An exception indicating that client subscriptions are not enabled on this client, but * the client is trying to perform an operation that requires a client subscription, * such as {@link Region#registerInterest(Object)}. - * @author dsmith * @since 5.7 */ public class SubscriptionNotEnabledException extends ServerConnectivityException { diff --git a/geode-core/src/main/java/com/gemstone/gemfire/cache/client/internal/AddPDXEnumOp.java b/geode-core/src/main/java/com/gemstone/gemfire/cache/client/internal/AddPDXEnumOp.java index ff2bf1c9f8ec..8b522f1690bc 100644 --- a/geode-core/src/main/java/com/gemstone/gemfire/cache/client/internal/AddPDXEnumOp.java +++ b/geode-core/src/main/java/com/gemstone/gemfire/cache/client/internal/AddPDXEnumOp.java @@ -22,7 +22,6 @@ /** * Push a PDX Enum id to other servers. - * @author darrel * @since 6.6.2 */ public class AddPDXEnumOp { diff --git a/geode-core/src/main/java/com/gemstone/gemfire/cache/client/internal/AddPDXTypeOp.java b/geode-core/src/main/java/com/gemstone/gemfire/cache/client/internal/AddPDXTypeOp.java index 9fbc674a7a03..9c3e8e1be11a 100644 --- a/geode-core/src/main/java/com/gemstone/gemfire/cache/client/internal/AddPDXTypeOp.java +++ b/geode-core/src/main/java/com/gemstone/gemfire/cache/client/internal/AddPDXTypeOp.java @@ -22,7 +22,6 @@ /** * Add a PdxType to a server. - * @author dsmith * @since 6.6 */ public class AddPDXTypeOp { diff --git a/geode-core/src/main/java/com/gemstone/gemfire/cache/client/internal/AuthenticateUserOp.java b/geode-core/src/main/java/com/gemstone/gemfire/cache/client/internal/AuthenticateUserOp.java index b03c7b966952..54957a2fbc18 100644 --- a/geode-core/src/main/java/com/gemstone/gemfire/cache/client/internal/AuthenticateUserOp.java +++ b/geode-core/src/main/java/com/gemstone/gemfire/cache/client/internal/AuthenticateUserOp.java @@ -56,7 +56,6 @@ * before the user attempts to perform an op whose * {@link AbstractOp#needsUserId()} returns true. * - * @author ashetkar * @see PutUserCredentials * @see ProxyCache * @since 6.5 diff --git a/geode-core/src/main/java/com/gemstone/gemfire/cache/client/internal/AutoConnectionSourceImpl.java b/geode-core/src/main/java/com/gemstone/gemfire/cache/client/internal/AutoConnectionSourceImpl.java index 6fe1c6b7e156..880d456e14c9 100644 --- a/geode-core/src/main/java/com/gemstone/gemfire/cache/client/internal/AutoConnectionSourceImpl.java +++ b/geode-core/src/main/java/com/gemstone/gemfire/cache/client/internal/AutoConnectionSourceImpl.java @@ -59,7 +59,6 @@ /** * A connection source which uses locators to find * the least loaded server. - * @author dsmith * @since 5.7 * */ diff --git a/geode-core/src/main/java/com/gemstone/gemfire/cache/client/internal/CacheServerLoadMessage.java b/geode-core/src/main/java/com/gemstone/gemfire/cache/client/internal/CacheServerLoadMessage.java index 697fb644638a..b7bff08d8316 100644 --- a/geode-core/src/main/java/com/gemstone/gemfire/cache/client/internal/CacheServerLoadMessage.java +++ b/geode-core/src/main/java/com/gemstone/gemfire/cache/client/internal/CacheServerLoadMessage.java @@ -37,7 +37,6 @@ * with new load information from the server. * Also includes the id of any clients whose estimate is no * longer needed on the server-locator. - * @author dsmith * @since 5.7 * */ diff --git a/geode-core/src/main/java/com/gemstone/gemfire/cache/client/internal/ClearOp.java b/geode-core/src/main/java/com/gemstone/gemfire/cache/client/internal/ClearOp.java index 3ab6885aca65..c8fb08f59c1c 100644 --- a/geode-core/src/main/java/com/gemstone/gemfire/cache/client/internal/ClearOp.java +++ b/geode-core/src/main/java/com/gemstone/gemfire/cache/client/internal/ClearOp.java @@ -22,7 +22,6 @@ /** * Does a region clear (or create) on a server - * @author darrel * @since 5.7 */ public class ClearOp { diff --git a/geode-core/src/main/java/com/gemstone/gemfire/cache/client/internal/ClientMetadataService.java b/geode-core/src/main/java/com/gemstone/gemfire/cache/client/internal/ClientMetadataService.java index 8371e725fda4..ed2670802cf1 100755 --- a/geode-core/src/main/java/com/gemstone/gemfire/cache/client/internal/ClientMetadataService.java +++ b/geode-core/src/main/java/com/gemstone/gemfire/cache/client/internal/ClientMetadataService.java @@ -51,8 +51,6 @@ * Client operations will consult this service to identify the server locations * on which the data for the client operation is residing * - * @author Suranjan Kumar - * @author Yogesh Mahajan * * @since 6.5 * diff --git a/geode-core/src/main/java/com/gemstone/gemfire/cache/client/internal/ClientPartitionAdvisor.java b/geode-core/src/main/java/com/gemstone/gemfire/cache/client/internal/ClientPartitionAdvisor.java index 71bfcce89e74..65b7575396bb 100755 --- a/geode-core/src/main/java/com/gemstone/gemfire/cache/client/internal/ClientPartitionAdvisor.java +++ b/geode-core/src/main/java/com/gemstone/gemfire/cache/client/internal/ClientPartitionAdvisor.java @@ -42,8 +42,6 @@ /** * Stores the information such as partition attributes and meta data details * - * @author Suranjan Kumar - * @author Yogesh Mahajan * * @since 6.5 * diff --git a/geode-core/src/main/java/com/gemstone/gemfire/cache/client/internal/ClientRegionFactoryImpl.java b/geode-core/src/main/java/com/gemstone/gemfire/cache/client/internal/ClientRegionFactoryImpl.java index 08cc34d94578..942b82924360 100644 --- a/geode-core/src/main/java/com/gemstone/gemfire/cache/client/internal/ClientRegionFactoryImpl.java +++ b/geode-core/src/main/java/com/gemstone/gemfire/cache/client/internal/ClientRegionFactoryImpl.java @@ -38,7 +38,6 @@ /** * The distributed system will always default to a loner on a client. * - * @author darrel * @since 6.5 */ diff --git a/geode-core/src/main/java/com/gemstone/gemfire/cache/client/internal/ClientUpdater.java b/geode-core/src/main/java/com/gemstone/gemfire/cache/client/internal/ClientUpdater.java index 5ce432e95233..93b02c4ac847 100644 --- a/geode-core/src/main/java/com/gemstone/gemfire/cache/client/internal/ClientUpdater.java +++ b/geode-core/src/main/java/com/gemstone/gemfire/cache/client/internal/ClientUpdater.java @@ -17,7 +17,6 @@ package com.gemstone.gemfire.cache.client.internal; /** - * @author dsmith * */ public interface ClientUpdater { diff --git a/geode-core/src/main/java/com/gemstone/gemfire/cache/client/internal/CloseConnectionOp.java b/geode-core/src/main/java/com/gemstone/gemfire/cache/client/internal/CloseConnectionOp.java index 7de38fe897c8..cbfa3a6035f2 100644 --- a/geode-core/src/main/java/com/gemstone/gemfire/cache/client/internal/CloseConnectionOp.java +++ b/geode-core/src/main/java/com/gemstone/gemfire/cache/client/internal/CloseConnectionOp.java @@ -21,7 +21,6 @@ /** * Tell a server that a connection is being closed - * @author darrel * @since 5.7 */ public class CloseConnectionOp { diff --git a/geode-core/src/main/java/com/gemstone/gemfire/cache/client/internal/CommitOp.java b/geode-core/src/main/java/com/gemstone/gemfire/cache/client/internal/CommitOp.java index c9c6dd7a6c3d..9ae684e9c115 100644 --- a/geode-core/src/main/java/com/gemstone/gemfire/cache/client/internal/CommitOp.java +++ b/geode-core/src/main/java/com/gemstone/gemfire/cache/client/internal/CommitOp.java @@ -22,7 +22,6 @@ /** * Does a commit on a server - * @author gregp * @since 6.6 */ public class CommitOp { diff --git a/geode-core/src/main/java/com/gemstone/gemfire/cache/client/internal/Connection.java b/geode-core/src/main/java/com/gemstone/gemfire/cache/client/internal/Connection.java index 3dc32047e62e..583c171c1bd7 100644 --- a/geode-core/src/main/java/com/gemstone/gemfire/cache/client/internal/Connection.java +++ b/geode-core/src/main/java/com/gemstone/gemfire/cache/client/internal/Connection.java @@ -28,7 +28,6 @@ /** * Represents a connection from a client to a server. * Instances are created, kept, and used by {@link PoolImpl}. - * @author darrel * @since 5.7 */ public interface Connection { diff --git a/geode-core/src/main/java/com/gemstone/gemfire/cache/client/internal/ConnectionFactory.java b/geode-core/src/main/java/com/gemstone/gemfire/cache/client/internal/ConnectionFactory.java index 164b866aafcf..62bbb36433e4 100644 --- a/geode-core/src/main/java/com/gemstone/gemfire/cache/client/internal/ConnectionFactory.java +++ b/geode-core/src/main/java/com/gemstone/gemfire/cache/client/internal/ConnectionFactory.java @@ -23,7 +23,6 @@ /** * A factory for creating new connections. - * @author dsmith * @since 5.7 * */ diff --git a/geode-core/src/main/java/com/gemstone/gemfire/cache/client/internal/ConnectionFactoryImpl.java b/geode-core/src/main/java/com/gemstone/gemfire/cache/client/internal/ConnectionFactoryImpl.java index 0a0ea66179a8..005b65a37545 100644 --- a/geode-core/src/main/java/com/gemstone/gemfire/cache/client/internal/ConnectionFactoryImpl.java +++ b/geode-core/src/main/java/com/gemstone/gemfire/cache/client/internal/ConnectionFactoryImpl.java @@ -45,7 +45,6 @@ /** * Creates connections, using a connection source to determine * which server to connect to. - * @author dsmith * @since 5.7 * */ diff --git a/geode-core/src/main/java/com/gemstone/gemfire/cache/client/internal/ConnectionImpl.java b/geode-core/src/main/java/com/gemstone/gemfire/cache/client/internal/ConnectionImpl.java index c2289acbc83f..5016d67a7162 100644 --- a/geode-core/src/main/java/com/gemstone/gemfire/cache/client/internal/ConnectionImpl.java +++ b/geode-core/src/main/java/com/gemstone/gemfire/cache/client/internal/ConnectionImpl.java @@ -56,7 +56,6 @@ * The execute method of this class is synchronized to * prevent two ops from using the client to server connection * at the same time. - * @author dsmith * @since 5.7 * */ diff --git a/geode-core/src/main/java/com/gemstone/gemfire/cache/client/internal/ConnectionSource.java b/geode-core/src/main/java/com/gemstone/gemfire/cache/client/internal/ConnectionSource.java index 72b0658c8da3..b88e01acd5db 100644 --- a/geode-core/src/main/java/com/gemstone/gemfire/cache/client/internal/ConnectionSource.java +++ b/geode-core/src/main/java/com/gemstone/gemfire/cache/client/internal/ConnectionSource.java @@ -26,7 +26,6 @@ /** * A source for discovering servers and finding the least loaded * server to connect to. - * @author dsmith * @since 5.7 * */ diff --git a/geode-core/src/main/java/com/gemstone/gemfire/cache/client/internal/ConnectionStats.java b/geode-core/src/main/java/com/gemstone/gemfire/cache/client/internal/ConnectionStats.java index cab5f0cc1748..7f15d478d826 100644 --- a/geode-core/src/main/java/com/gemstone/gemfire/cache/client/internal/ConnectionStats.java +++ b/geode-core/src/main/java/com/gemstone/gemfire/cache/client/internal/ConnectionStats.java @@ -28,7 +28,6 @@ /** * Stats for a client to server {@link Connection} - * @author darrel * @since 5.7 */ public class ConnectionStats implements MessageStats { diff --git a/geode-core/src/main/java/com/gemstone/gemfire/cache/client/internal/ContainsKeyOp.java b/geode-core/src/main/java/com/gemstone/gemfire/cache/client/internal/ContainsKeyOp.java index 2f0af0db33a9..b75c7a370a92 100644 --- a/geode-core/src/main/java/com/gemstone/gemfire/cache/client/internal/ContainsKeyOp.java +++ b/geode-core/src/main/java/com/gemstone/gemfire/cache/client/internal/ContainsKeyOp.java @@ -21,7 +21,6 @@ /** * Does a region containsKey on a server - * @author darrel * @since 5.7 */ public class ContainsKeyOp { diff --git a/geode-core/src/main/java/com/gemstone/gemfire/cache/client/internal/DestroyOp.java b/geode-core/src/main/java/com/gemstone/gemfire/cache/client/internal/DestroyOp.java index 46ebf444a3da..6a3840a3f92a 100644 --- a/geode-core/src/main/java/com/gemstone/gemfire/cache/client/internal/DestroyOp.java +++ b/geode-core/src/main/java/com/gemstone/gemfire/cache/client/internal/DestroyOp.java @@ -37,7 +37,6 @@ /** * Does a region destroy on a server - * @author darrel * @since 5.7 */ public class DestroyOp { diff --git a/geode-core/src/main/java/com/gemstone/gemfire/cache/client/internal/DestroyRegionOp.java b/geode-core/src/main/java/com/gemstone/gemfire/cache/client/internal/DestroyRegionOp.java index 745740d103cd..6c51c07e6f62 100644 --- a/geode-core/src/main/java/com/gemstone/gemfire/cache/client/internal/DestroyRegionOp.java +++ b/geode-core/src/main/java/com/gemstone/gemfire/cache/client/internal/DestroyRegionOp.java @@ -22,7 +22,6 @@ /** * Does a region destroyRegion (or create) on a server - * @author darrel * @since 5.7 */ public class DestroyRegionOp { diff --git a/geode-core/src/main/java/com/gemstone/gemfire/cache/client/internal/Endpoint.java b/geode-core/src/main/java/com/gemstone/gemfire/cache/client/internal/Endpoint.java index b4d54444d455..9fe6c517f9a0 100644 --- a/geode-core/src/main/java/com/gemstone/gemfire/cache/client/internal/Endpoint.java +++ b/geode-core/src/main/java/com/gemstone/gemfire/cache/client/internal/Endpoint.java @@ -25,7 +25,6 @@ /** * Represents a server. Keeps track of information about the specific server - * @author dsmith * @since 5.7 * */ diff --git a/geode-core/src/main/java/com/gemstone/gemfire/cache/client/internal/EndpointManager.java b/geode-core/src/main/java/com/gemstone/gemfire/cache/client/internal/EndpointManager.java index bd9d995ea4f5..9d886704ff43 100644 --- a/geode-core/src/main/java/com/gemstone/gemfire/cache/client/internal/EndpointManager.java +++ b/geode-core/src/main/java/com/gemstone/gemfire/cache/client/internal/EndpointManager.java @@ -27,7 +27,6 @@ * listeners that will be notified about when endpoints are created * or died. For example the connection manager registers a listener * to be notified if a server dies and closes all of it's connections. - * @author dsmith * */ public interface EndpointManager { diff --git a/geode-core/src/main/java/com/gemstone/gemfire/cache/client/internal/EndpointManagerImpl.java b/geode-core/src/main/java/com/gemstone/gemfire/cache/client/internal/EndpointManagerImpl.java index 853ab36db389..8b4e08a3ba80 100644 --- a/geode-core/src/main/java/com/gemstone/gemfire/cache/client/internal/EndpointManagerImpl.java +++ b/geode-core/src/main/java/com/gemstone/gemfire/cache/client/internal/EndpointManagerImpl.java @@ -38,7 +38,6 @@ import com.gemstone.gemfire.internal.logging.LogService; /** - * @author dsmith * */ public class EndpointManagerImpl implements EndpointManager { diff --git a/geode-core/src/main/java/com/gemstone/gemfire/cache/client/internal/ExecutablePool.java b/geode-core/src/main/java/com/gemstone/gemfire/cache/client/internal/ExecutablePool.java index d556802f57f8..8480b911e3e3 100644 --- a/geode-core/src/main/java/com/gemstone/gemfire/cache/client/internal/ExecutablePool.java +++ b/geode-core/src/main/java/com/gemstone/gemfire/cache/client/internal/ExecutablePool.java @@ -23,7 +23,6 @@ /** * Provides methods to execute AbstractOp instances on a client pool. - * @author darrel * @since 5.7 */ public interface ExecutablePool { diff --git a/geode-core/src/main/java/com/gemstone/gemfire/cache/client/internal/ExecuteFunctionNoAckOp.java b/geode-core/src/main/java/com/gemstone/gemfire/cache/client/internal/ExecuteFunctionNoAckOp.java index 581efbac2b52..52e03e50f004 100755 --- a/geode-core/src/main/java/com/gemstone/gemfire/cache/client/internal/ExecuteFunctionNoAckOp.java +++ b/geode-core/src/main/java/com/gemstone/gemfire/cache/client/internal/ExecuteFunctionNoAckOp.java @@ -39,7 +39,6 @@ /** * Does a Execution of function on server (possibly without region/cache) * It does not get the resulf from the server (follows Fire&Forget approch) - * @author Suranjan Kumar * @since 5.8Beta */ public class ExecuteFunctionNoAckOp { diff --git a/geode-core/src/main/java/com/gemstone/gemfire/cache/client/internal/ExecuteFunctionOp.java b/geode-core/src/main/java/com/gemstone/gemfire/cache/client/internal/ExecuteFunctionOp.java index 59a4a32843bf..682efd3eec05 100755 --- a/geode-core/src/main/java/com/gemstone/gemfire/cache/client/internal/ExecuteFunctionOp.java +++ b/geode-core/src/main/java/com/gemstone/gemfire/cache/client/internal/ExecuteFunctionOp.java @@ -48,7 +48,6 @@ /** * Executes the function on server (possibly without region/cache).
    * Also gets the result back from the server - * @author Suranjan Kumar * @since 5.8 */ diff --git a/geode-core/src/main/java/com/gemstone/gemfire/cache/client/internal/ExecuteRegionFunctionNoAckOp.java b/geode-core/src/main/java/com/gemstone/gemfire/cache/client/internal/ExecuteRegionFunctionNoAckOp.java index f37b37ccb8d6..2e03659bc9ef 100755 --- a/geode-core/src/main/java/com/gemstone/gemfire/cache/client/internal/ExecuteRegionFunctionNoAckOp.java +++ b/geode-core/src/main/java/com/gemstone/gemfire/cache/client/internal/ExecuteRegionFunctionNoAckOp.java @@ -37,7 +37,6 @@ /** * Does a Execution of function on server region * It does not get the resul from the server (follows Fire&Forget approch) - * @author Kishor Bachhav * @since 5.8Beta */ public class ExecuteRegionFunctionNoAckOp { diff --git a/geode-core/src/main/java/com/gemstone/gemfire/cache/client/internal/ExecuteRegionFunctionOp.java b/geode-core/src/main/java/com/gemstone/gemfire/cache/client/internal/ExecuteRegionFunctionOp.java index 57c4b9248c0a..64921908c91b 100755 --- a/geode-core/src/main/java/com/gemstone/gemfire/cache/client/internal/ExecuteRegionFunctionOp.java +++ b/geode-core/src/main/java/com/gemstone/gemfire/cache/client/internal/ExecuteRegionFunctionOp.java @@ -48,7 +48,6 @@ /** * Does a Execution of function on server region.
    * It alos gets result from the server - * @author Kishor Bachhav * @since 5.8Beta */ public class ExecuteRegionFunctionOp { diff --git a/geode-core/src/main/java/com/gemstone/gemfire/cache/client/internal/ExecuteRegionFunctionSingleHopOp.java b/geode-core/src/main/java/com/gemstone/gemfire/cache/client/internal/ExecuteRegionFunctionSingleHopOp.java index 6dfdab80f3dd..73c23248c9ae 100644 --- a/geode-core/src/main/java/com/gemstone/gemfire/cache/client/internal/ExecuteRegionFunctionSingleHopOp.java +++ b/geode-core/src/main/java/com/gemstone/gemfire/cache/client/internal/ExecuteRegionFunctionSingleHopOp.java @@ -48,7 +48,6 @@ import com.gemstone.gemfire.internal.logging.LogService; /** - * @author skumar * @since 6.5 */ public class ExecuteRegionFunctionSingleHopOp { diff --git a/geode-core/src/main/java/com/gemstone/gemfire/cache/client/internal/ExplicitConnectionSourceImpl.java b/geode-core/src/main/java/com/gemstone/gemfire/cache/client/internal/ExplicitConnectionSourceImpl.java index 356b394719cd..2f93dab3d73a 100644 --- a/geode-core/src/main/java/com/gemstone/gemfire/cache/client/internal/ExplicitConnectionSourceImpl.java +++ b/geode-core/src/main/java/com/gemstone/gemfire/cache/client/internal/ExplicitConnectionSourceImpl.java @@ -34,7 +34,6 @@ /** * A connection source where the list of endpoints is specified explicitly. - * @author dsmith * @since 5.7 * * TODO - the UnusedServerMonitor basically will force the pool to diff --git a/geode-core/src/main/java/com/gemstone/gemfire/cache/client/internal/GetAllOp.java b/geode-core/src/main/java/com/gemstone/gemfire/cache/client/internal/GetAllOp.java index 96f9f3f66778..e88d9a2a1cb5 100644 --- a/geode-core/src/main/java/com/gemstone/gemfire/cache/client/internal/GetAllOp.java +++ b/geode-core/src/main/java/com/gemstone/gemfire/cache/client/internal/GetAllOp.java @@ -39,7 +39,6 @@ /** * Does a region getAll on a server - * @author darrel * @since 5.7 */ public class GetAllOp { diff --git a/geode-core/src/main/java/com/gemstone/gemfire/cache/client/internal/GetClientPRMetaDataOp.java b/geode-core/src/main/java/com/gemstone/gemfire/cache/client/internal/GetClientPRMetaDataOp.java index 8bae6fffc551..3902b88effaa 100755 --- a/geode-core/src/main/java/com/gemstone/gemfire/cache/client/internal/GetClientPRMetaDataOp.java +++ b/geode-core/src/main/java/com/gemstone/gemfire/cache/client/internal/GetClientPRMetaDataOp.java @@ -34,8 +34,6 @@ * Retrieves {@link ClientPartitionAdvisor} for the specified PartitionedRegion from * one of the servers * - * @author Suranjan Kumar - * @author Yogesh Mahajan * * @since 6.5 */ diff --git a/geode-core/src/main/java/com/gemstone/gemfire/cache/client/internal/GetClientPartitionAttributesOp.java b/geode-core/src/main/java/com/gemstone/gemfire/cache/client/internal/GetClientPartitionAttributesOp.java index e1a8870e3bda..f12603812d2b 100755 --- a/geode-core/src/main/java/com/gemstone/gemfire/cache/client/internal/GetClientPartitionAttributesOp.java +++ b/geode-core/src/main/java/com/gemstone/gemfire/cache/client/internal/GetClientPartitionAttributesOp.java @@ -34,8 +34,6 @@ * Retrieves {@link ClientPartitionAdvisor} related information for the * specified PartitionedRegion from one of the servers * - * @author Suranjan Kumar - * @author Yogesh Mahajan * * @since 6.5 * diff --git a/geode-core/src/main/java/com/gemstone/gemfire/cache/client/internal/GetEntryOp.java b/geode-core/src/main/java/com/gemstone/gemfire/cache/client/internal/GetEntryOp.java index 9f9ab129d3c6..6630614935a0 100644 --- a/geode-core/src/main/java/com/gemstone/gemfire/cache/client/internal/GetEntryOp.java +++ b/geode-core/src/main/java/com/gemstone/gemfire/cache/client/internal/GetEntryOp.java @@ -23,7 +23,6 @@ /** * does getEntry on the server - * @author sbawaska */ public class GetEntryOp { diff --git a/geode-core/src/main/java/com/gemstone/gemfire/cache/client/internal/GetOp.java b/geode-core/src/main/java/com/gemstone/gemfire/cache/client/internal/GetOp.java index 9b3777a395a0..2e3134fb78e5 100644 --- a/geode-core/src/main/java/com/gemstone/gemfire/cache/client/internal/GetOp.java +++ b/geode-core/src/main/java/com/gemstone/gemfire/cache/client/internal/GetOp.java @@ -38,7 +38,6 @@ /** * Does a region get on a server - * @author darrel * @since 5.7 */ public class GetOp { diff --git a/geode-core/src/main/java/com/gemstone/gemfire/cache/client/internal/GetPDXEnumByIdOp.java b/geode-core/src/main/java/com/gemstone/gemfire/cache/client/internal/GetPDXEnumByIdOp.java index 1e22d81ec7d5..43cf970d2b86 100644 --- a/geode-core/src/main/java/com/gemstone/gemfire/cache/client/internal/GetPDXEnumByIdOp.java +++ b/geode-core/src/main/java/com/gemstone/gemfire/cache/client/internal/GetPDXEnumByIdOp.java @@ -22,7 +22,6 @@ /** * Retrieve the PDXType, given an integer PDX id, from a server. - * @author darrel * @since 6.6.2 */ public class GetPDXEnumByIdOp { diff --git a/geode-core/src/main/java/com/gemstone/gemfire/cache/client/internal/GetPDXEnumsOp.java b/geode-core/src/main/java/com/gemstone/gemfire/cache/client/internal/GetPDXEnumsOp.java index 0590cafa5ee9..d678235c4a79 100644 --- a/geode-core/src/main/java/com/gemstone/gemfire/cache/client/internal/GetPDXEnumsOp.java +++ b/geode-core/src/main/java/com/gemstone/gemfire/cache/client/internal/GetPDXEnumsOp.java @@ -28,7 +28,6 @@ /** * Retrieve all known PDX types. * - * @author bakera * @since 7.0 */ public class GetPDXEnumsOp { diff --git a/geode-core/src/main/java/com/gemstone/gemfire/cache/client/internal/GetPDXIdForEnumOp.java b/geode-core/src/main/java/com/gemstone/gemfire/cache/client/internal/GetPDXIdForEnumOp.java index bac2e8063ad3..681f852f4841 100644 --- a/geode-core/src/main/java/com/gemstone/gemfire/cache/client/internal/GetPDXIdForEnumOp.java +++ b/geode-core/src/main/java/com/gemstone/gemfire/cache/client/internal/GetPDXIdForEnumOp.java @@ -25,7 +25,6 @@ /** * Retrieve the PDXType, given an integer PDX id, from a server. - * @author darrel * @since 6.6.2 */ public class GetPDXIdForEnumOp { diff --git a/geode-core/src/main/java/com/gemstone/gemfire/cache/client/internal/GetPDXIdForTypeOp.java b/geode-core/src/main/java/com/gemstone/gemfire/cache/client/internal/GetPDXIdForTypeOp.java index 1b71f71d03c0..9586d39bdd23 100644 --- a/geode-core/src/main/java/com/gemstone/gemfire/cache/client/internal/GetPDXIdForTypeOp.java +++ b/geode-core/src/main/java/com/gemstone/gemfire/cache/client/internal/GetPDXIdForTypeOp.java @@ -25,7 +25,6 @@ /** * Retrieve the PDXType, given an integer PDX id, from a server. - * @author dsmith * @since 6.6 */ public class GetPDXIdForTypeOp { diff --git a/geode-core/src/main/java/com/gemstone/gemfire/cache/client/internal/GetPDXTypeByIdOp.java b/geode-core/src/main/java/com/gemstone/gemfire/cache/client/internal/GetPDXTypeByIdOp.java index 1d9bd2d58fec..488206cacf6e 100644 --- a/geode-core/src/main/java/com/gemstone/gemfire/cache/client/internal/GetPDXTypeByIdOp.java +++ b/geode-core/src/main/java/com/gemstone/gemfire/cache/client/internal/GetPDXTypeByIdOp.java @@ -22,7 +22,6 @@ /** * Retrieve the PDXType, given an integer PDX id, from a server. - * @author dsmith * @since 6.6 */ public class GetPDXTypeByIdOp { diff --git a/geode-core/src/main/java/com/gemstone/gemfire/cache/client/internal/GetPDXTypesOp.java b/geode-core/src/main/java/com/gemstone/gemfire/cache/client/internal/GetPDXTypesOp.java index 262cb9a5c2c1..ea7472c41a57 100644 --- a/geode-core/src/main/java/com/gemstone/gemfire/cache/client/internal/GetPDXTypesOp.java +++ b/geode-core/src/main/java/com/gemstone/gemfire/cache/client/internal/GetPDXTypesOp.java @@ -28,7 +28,6 @@ /** * Retrieve all known PDX types. * - * @author bakera * @since 7.0 */ public class GetPDXTypesOp { diff --git a/geode-core/src/main/java/com/gemstone/gemfire/cache/client/internal/InstantiatorRecoveryListener.java b/geode-core/src/main/java/com/gemstone/gemfire/cache/client/internal/InstantiatorRecoveryListener.java index eb2daec7cee9..16f7e6087537 100644 --- a/geode-core/src/main/java/com/gemstone/gemfire/cache/client/internal/InstantiatorRecoveryListener.java +++ b/geode-core/src/main/java/com/gemstone/gemfire/cache/client/internal/InstantiatorRecoveryListener.java @@ -43,7 +43,6 @@ * instantiators. As it is, the window is not very large. * * - * @author dsmith * */ public class InstantiatorRecoveryListener extends EndpointManager.EndpointListenerAdapter { diff --git a/geode-core/src/main/java/com/gemstone/gemfire/cache/client/internal/InternalPool.java b/geode-core/src/main/java/com/gemstone/gemfire/cache/client/internal/InternalPool.java index 8b5e027ccce7..fcb0ae8358a1 100644 --- a/geode-core/src/main/java/com/gemstone/gemfire/cache/client/internal/InternalPool.java +++ b/geode-core/src/main/java/com/gemstone/gemfire/cache/client/internal/InternalPool.java @@ -27,7 +27,6 @@ * The contract between a connection source and a connection pool. * Provides methods for the connection source to access the cache * and update the list of endpoints on the connection pool. - * @author dsmith * @since 5.7 * */ diff --git a/geode-core/src/main/java/com/gemstone/gemfire/cache/client/internal/InvalidateOp.java b/geode-core/src/main/java/com/gemstone/gemfire/cache/client/internal/InvalidateOp.java index ea5caf336da7..88b9f9d911c4 100644 --- a/geode-core/src/main/java/com/gemstone/gemfire/cache/client/internal/InvalidateOp.java +++ b/geode-core/src/main/java/com/gemstone/gemfire/cache/client/internal/InvalidateOp.java @@ -27,7 +27,6 @@ /** * Does a region invalidate on a server - * @author gregp * @since 6.6 */ public class InvalidateOp { diff --git a/geode-core/src/main/java/com/gemstone/gemfire/cache/client/internal/KeySetOp.java b/geode-core/src/main/java/com/gemstone/gemfire/cache/client/internal/KeySetOp.java index b97e0035c964..42f7072df846 100644 --- a/geode-core/src/main/java/com/gemstone/gemfire/cache/client/internal/KeySetOp.java +++ b/geode-core/src/main/java/com/gemstone/gemfire/cache/client/internal/KeySetOp.java @@ -30,7 +30,6 @@ /** * Does a region keySet on a server - * @author darrel * @since 5.7 */ public class KeySetOp { diff --git a/geode-core/src/main/java/com/gemstone/gemfire/cache/client/internal/LiveServerPinger.java b/geode-core/src/main/java/com/gemstone/gemfire/cache/client/internal/LiveServerPinger.java index 629a6130be17..1ab09dafd780 100644 --- a/geode-core/src/main/java/com/gemstone/gemfire/cache/client/internal/LiveServerPinger.java +++ b/geode-core/src/main/java/com/gemstone/gemfire/cache/client/internal/LiveServerPinger.java @@ -33,7 +33,6 @@ * Responsible for pinging live * servers to make sure they * are still alive. - * @author dsmith * */ public class LiveServerPinger extends EndpointListenerAdapter { diff --git a/geode-core/src/main/java/com/gemstone/gemfire/cache/client/internal/LocatorDiscoveryCallback.java b/geode-core/src/main/java/com/gemstone/gemfire/cache/client/internal/LocatorDiscoveryCallback.java index 76eff7d457bc..554aff3aa882 100644 --- a/geode-core/src/main/java/com/gemstone/gemfire/cache/client/internal/LocatorDiscoveryCallback.java +++ b/geode-core/src/main/java/com/gemstone/gemfire/cache/client/internal/LocatorDiscoveryCallback.java @@ -21,7 +21,6 @@ /** * A callback to receive notifications about locator discovery. Currently * only used internally. - * @author dsmith * @since 5.7 */ public interface LocatorDiscoveryCallback { diff --git a/geode-core/src/main/java/com/gemstone/gemfire/cache/client/internal/LocatorDiscoveryCallbackAdapter.java b/geode-core/src/main/java/com/gemstone/gemfire/cache/client/internal/LocatorDiscoveryCallbackAdapter.java index 8a11c5e740e2..4aae855c63e4 100644 --- a/geode-core/src/main/java/com/gemstone/gemfire/cache/client/internal/LocatorDiscoveryCallbackAdapter.java +++ b/geode-core/src/main/java/com/gemstone/gemfire/cache/client/internal/LocatorDiscoveryCallbackAdapter.java @@ -20,7 +20,6 @@ /** * A locator discovery callback that does nothing. - * @author dsmith * @since 5.7 * */ diff --git a/geode-core/src/main/java/com/gemstone/gemfire/cache/client/internal/MakePrimaryOp.java b/geode-core/src/main/java/com/gemstone/gemfire/cache/client/internal/MakePrimaryOp.java index 27d80b1b8b58..b8c47670e8d6 100644 --- a/geode-core/src/main/java/com/gemstone/gemfire/cache/client/internal/MakePrimaryOp.java +++ b/geode-core/src/main/java/com/gemstone/gemfire/cache/client/internal/MakePrimaryOp.java @@ -21,7 +21,6 @@ /** * Tell a server to become the primary host of a server-to-client queue - * @author darrel * @since 5.7 */ public class MakePrimaryOp { diff --git a/geode-core/src/main/java/com/gemstone/gemfire/cache/client/internal/Op.java b/geode-core/src/main/java/com/gemstone/gemfire/cache/client/internal/Op.java index e3707390e942..19af3de9b058 100644 --- a/geode-core/src/main/java/com/gemstone/gemfire/cache/client/internal/Op.java +++ b/geode-core/src/main/java/com/gemstone/gemfire/cache/client/internal/Op.java @@ -20,7 +20,6 @@ * An operation to perform on a server. Used by * {@link ExecutablePool} to attempt the operation on * multiple servers until the retryAttempts is exceeded. - * @author dsmith * @since 5.7 * */ diff --git a/geode-core/src/main/java/com/gemstone/gemfire/cache/client/internal/PdxRegistryRecoveryListener.java b/geode-core/src/main/java/com/gemstone/gemfire/cache/client/internal/PdxRegistryRecoveryListener.java index 7417573f7d38..e8b62a1f4498 100644 --- a/geode-core/src/main/java/com/gemstone/gemfire/cache/client/internal/PdxRegistryRecoveryListener.java +++ b/geode-core/src/main/java/com/gemstone/gemfire/cache/client/internal/PdxRegistryRecoveryListener.java @@ -39,7 +39,6 @@ * registry was lost at the server side in the interval. * * - * @author dsmith * */ public class PdxRegistryRecoveryListener extends EndpointManager.EndpointListenerAdapter { diff --git a/geode-core/src/main/java/com/gemstone/gemfire/cache/client/internal/PingOp.java b/geode-core/src/main/java/com/gemstone/gemfire/cache/client/internal/PingOp.java index e70d50acc53e..f5a6d975af4a 100644 --- a/geode-core/src/main/java/com/gemstone/gemfire/cache/client/internal/PingOp.java +++ b/geode-core/src/main/java/com/gemstone/gemfire/cache/client/internal/PingOp.java @@ -23,7 +23,6 @@ /** * Ping a server to see if it is still alive. - * @author darrel * @since 5.7 */ public class PingOp { diff --git a/geode-core/src/main/java/com/gemstone/gemfire/cache/client/internal/PoolImpl.java b/geode-core/src/main/java/com/gemstone/gemfire/cache/client/internal/PoolImpl.java index 8aa5ce21e67f..ce6235be3991 100644 --- a/geode-core/src/main/java/com/gemstone/gemfire/cache/client/internal/PoolImpl.java +++ b/geode-core/src/main/java/com/gemstone/gemfire/cache/client/internal/PoolImpl.java @@ -75,7 +75,6 @@ * Manages the client side of client to server connections * and client queues. * - * @author dsmith * @since 5.7 */ public class PoolImpl implements InternalPool { diff --git a/geode-core/src/main/java/com/gemstone/gemfire/cache/client/internal/PrimaryAckOp.java b/geode-core/src/main/java/com/gemstone/gemfire/cache/client/internal/PrimaryAckOp.java index 4ee680a4efde..3614ac2182c4 100644 --- a/geode-core/src/main/java/com/gemstone/gemfire/cache/client/internal/PrimaryAckOp.java +++ b/geode-core/src/main/java/com/gemstone/gemfire/cache/client/internal/PrimaryAckOp.java @@ -25,7 +25,6 @@ /** * Send the primary server acknowledgement on the events this client * has received and processed from it. - * @author darrel * @since 5.7 */ public class PrimaryAckOp { diff --git a/geode-core/src/main/java/com/gemstone/gemfire/cache/client/internal/PutAllOp.java b/geode-core/src/main/java/com/gemstone/gemfire/cache/client/internal/PutAllOp.java index e81cd0c244af..41f772ade0d7 100644 --- a/geode-core/src/main/java/com/gemstone/gemfire/cache/client/internal/PutAllOp.java +++ b/geode-core/src/main/java/com/gemstone/gemfire/cache/client/internal/PutAllOp.java @@ -49,7 +49,6 @@ /** * Does a region putAll on a server - * @author darrel * @since 5.7 */ public class PutAllOp { diff --git a/geode-core/src/main/java/com/gemstone/gemfire/cache/client/internal/PutOp.java b/geode-core/src/main/java/com/gemstone/gemfire/cache/client/internal/PutOp.java index ef4c9d327817..58c82f1a8b3d 100644 --- a/geode-core/src/main/java/com/gemstone/gemfire/cache/client/internal/PutOp.java +++ b/geode-core/src/main/java/com/gemstone/gemfire/cache/client/internal/PutOp.java @@ -43,7 +43,6 @@ /** * Does a region put (or create) on a server - * @author darrel * @since 5.7 */ public class PutOp { diff --git a/geode-core/src/main/java/com/gemstone/gemfire/cache/client/internal/QueryOp.java b/geode-core/src/main/java/com/gemstone/gemfire/cache/client/internal/QueryOp.java index 6c62bcbe6587..fb45d087d1df 100644 --- a/geode-core/src/main/java/com/gemstone/gemfire/cache/client/internal/QueryOp.java +++ b/geode-core/src/main/java/com/gemstone/gemfire/cache/client/internal/QueryOp.java @@ -35,7 +35,6 @@ /** * Does a region query on a server - * @author darrel * @since 5.7 */ public class QueryOp { diff --git a/geode-core/src/main/java/com/gemstone/gemfire/cache/client/internal/QueueConnectionImpl.java b/geode-core/src/main/java/com/gemstone/gemfire/cache/client/internal/QueueConnectionImpl.java index ca45bcb6f7a8..40cf58b40932 100644 --- a/geode-core/src/main/java/com/gemstone/gemfire/cache/client/internal/QueueConnectionImpl.java +++ b/geode-core/src/main/java/com/gemstone/gemfire/cache/client/internal/QueueConnectionImpl.java @@ -39,7 +39,6 @@ * * The clientToServerConnection should not * be used outside of this class. - * @author dsmith * */ public class QueueConnectionImpl implements Connection { diff --git a/geode-core/src/main/java/com/gemstone/gemfire/cache/client/internal/QueueManager.java b/geode-core/src/main/java/com/gemstone/gemfire/cache/client/internal/QueueManager.java index a90fb511eb8b..f13e2c01ea5d 100644 --- a/geode-core/src/main/java/com/gemstone/gemfire/cache/client/internal/QueueManager.java +++ b/geode-core/src/main/java/com/gemstone/gemfire/cache/client/internal/QueueManager.java @@ -23,7 +23,6 @@ import com.gemstone.gemfire.internal.logging.InternalLogWriter; /** - * @author dsmith * @since 5.7 * */ diff --git a/geode-core/src/main/java/com/gemstone/gemfire/cache/client/internal/QueueManagerImpl.java b/geode-core/src/main/java/com/gemstone/gemfire/cache/client/internal/QueueManagerImpl.java index 68cb68fad1ce..7c9b187c6bc7 100644 --- a/geode-core/src/main/java/com/gemstone/gemfire/cache/client/internal/QueueManagerImpl.java +++ b/geode-core/src/main/java/com/gemstone/gemfire/cache/client/internal/QueueManagerImpl.java @@ -76,7 +76,6 @@ * Manages Client Queues. Responsible for creating callback connections and * satisfying redundancy requirements. * - * @author dsmith * @since 5.7 * */ @@ -1234,7 +1233,6 @@ protected void recoverAllInterestTypes(final Connection recoveredConnection, * A comparator which sorts queue elements in the order of primary first * redundant with smallest queue size ... redundant with largest queue size * - * @author dsmith * */ protected static class QSizeComparator implements java.util.Comparator { diff --git a/geode-core/src/main/java/com/gemstone/gemfire/cache/client/internal/QueueStateImpl.java b/geode-core/src/main/java/com/gemstone/gemfire/cache/client/internal/QueueStateImpl.java index e3be18e9d59b..7ba790e2f916 100755 --- a/geode-core/src/main/java/com/gemstone/gemfire/cache/client/internal/QueueStateImpl.java +++ b/geode-core/src/main/java/com/gemstone/gemfire/cache/client/internal/QueueStateImpl.java @@ -226,9 +226,6 @@ public void start(ScheduledExecutorService timer, int interval) { * send an ack. 2)It will expire the entries which have exceeded the specified * expiry time and for which ack has been alerady sent. * - * @author darrel - * @author Mitul Bid - * @author Suyog Bhokare * @since 5.1 * */ @@ -375,7 +372,6 @@ void sendPeriodicAck() { * A class to store sequenceId and the creation time of the object to be used * for expiring the entry * - * @author Mitul Bid * @since 5.1 * */ diff --git a/geode-core/src/main/java/com/gemstone/gemfire/cache/client/internal/ReadyForEventsOp.java b/geode-core/src/main/java/com/gemstone/gemfire/cache/client/internal/ReadyForEventsOp.java index d2631fc76d94..71ecdfe62e18 100644 --- a/geode-core/src/main/java/com/gemstone/gemfire/cache/client/internal/ReadyForEventsOp.java +++ b/geode-core/src/main/java/com/gemstone/gemfire/cache/client/internal/ReadyForEventsOp.java @@ -22,7 +22,6 @@ /** * Tells the server we are ready to receive server-to-client events * from durable subscriptions. - * @author darrel * @since 5.7 */ public class ReadyForEventsOp { diff --git a/geode-core/src/main/java/com/gemstone/gemfire/cache/client/internal/RegisterInstantiatorsOp.java b/geode-core/src/main/java/com/gemstone/gemfire/cache/client/internal/RegisterInstantiatorsOp.java index 0d5a1376efef..45229d513b35 100644 --- a/geode-core/src/main/java/com/gemstone/gemfire/cache/client/internal/RegisterInstantiatorsOp.java +++ b/geode-core/src/main/java/com/gemstone/gemfire/cache/client/internal/RegisterInstantiatorsOp.java @@ -30,7 +30,6 @@ /** * Register a bunch of instantiators on a server - * @author darrel * @since 5.7 */ public class RegisterInstantiatorsOp { diff --git a/geode-core/src/main/java/com/gemstone/gemfire/cache/client/internal/RegisterInterestListOp.java b/geode-core/src/main/java/com/gemstone/gemfire/cache/client/internal/RegisterInterestListOp.java index 268a61c44ab5..fc9bed1de357 100644 --- a/geode-core/src/main/java/com/gemstone/gemfire/cache/client/internal/RegisterInterestListOp.java +++ b/geode-core/src/main/java/com/gemstone/gemfire/cache/client/internal/RegisterInterestListOp.java @@ -25,7 +25,6 @@ /** * Does a region registerInterestList on a server - * @author darrel * @since 5.7 */ public class RegisterInterestListOp { diff --git a/geode-core/src/main/java/com/gemstone/gemfire/cache/client/internal/RegisterInterestOp.java b/geode-core/src/main/java/com/gemstone/gemfire/cache/client/internal/RegisterInterestOp.java index e4453ddc195b..78f77b1a1878 100644 --- a/geode-core/src/main/java/com/gemstone/gemfire/cache/client/internal/RegisterInterestOp.java +++ b/geode-core/src/main/java/com/gemstone/gemfire/cache/client/internal/RegisterInterestOp.java @@ -34,7 +34,6 @@ import java.util.List; /** * Does a region registerInterest on a server - * @author darrel * @since 5.7 */ public class RegisterInterestOp { diff --git a/geode-core/src/main/java/com/gemstone/gemfire/cache/client/internal/RegisterInterestTracker.java b/geode-core/src/main/java/com/gemstone/gemfire/cache/client/internal/RegisterInterestTracker.java index 946f28f51344..328d3dfeb91f 100644 --- a/geode-core/src/main/java/com/gemstone/gemfire/cache/client/internal/RegisterInterestTracker.java +++ b/geode-core/src/main/java/com/gemstone/gemfire/cache/client/internal/RegisterInterestTracker.java @@ -37,7 +37,6 @@ /** * Used to keep track of what interest a client has registered. * This code was extracted from the old ConnectionProxyImpl. - * @author darrel * @since 5.7 */ public class RegisterInterestTracker { @@ -335,7 +334,6 @@ private RegionInterestEntry readRegionInterests(String regionName, * a client fails over to another server and does register interest based on * this Data structure * - * @author Yogesh Mahajan * @since 5.5 * */ @@ -394,7 +392,6 @@ static protected class FailoverInterestList { /** * Description of the interests of a particular region. * - * @author jpenney * */ static public class RegionInterestEntry diff --git a/geode-core/src/main/java/com/gemstone/gemfire/cache/client/internal/RemoveAllOp.java b/geode-core/src/main/java/com/gemstone/gemfire/cache/client/internal/RemoveAllOp.java index 87af9c203cde..6ba19326ca70 100644 --- a/geode-core/src/main/java/com/gemstone/gemfire/cache/client/internal/RemoveAllOp.java +++ b/geode-core/src/main/java/com/gemstone/gemfire/cache/client/internal/RemoveAllOp.java @@ -46,7 +46,6 @@ /** * Does a region removeAll on a server - * @author darrel * @since 8.1 */ public class RemoveAllOp { diff --git a/geode-core/src/main/java/com/gemstone/gemfire/cache/client/internal/RollbackOp.java b/geode-core/src/main/java/com/gemstone/gemfire/cache/client/internal/RollbackOp.java index 6f01b966f817..6d60b1baa155 100644 --- a/geode-core/src/main/java/com/gemstone/gemfire/cache/client/internal/RollbackOp.java +++ b/geode-core/src/main/java/com/gemstone/gemfire/cache/client/internal/RollbackOp.java @@ -22,7 +22,6 @@ /** * Does a Rollback on the server * @since 6.6 - * @author sbawaska */ public class RollbackOp { diff --git a/geode-core/src/main/java/com/gemstone/gemfire/cache/client/internal/ServerBlackList.java b/geode-core/src/main/java/com/gemstone/gemfire/cache/client/internal/ServerBlackList.java index 2c8189fc8bde..c6e8b75333f6 100644 --- a/geode-core/src/main/java/com/gemstone/gemfire/cache/client/internal/ServerBlackList.java +++ b/geode-core/src/main/java/com/gemstone/gemfire/cache/client/internal/ServerBlackList.java @@ -47,7 +47,6 @@ * the time is expired, the server comes off the blacklist, but the next * failure will put the server back on the list for a longer period of time. * - * @author dsmith * */ public class ServerBlackList { diff --git a/geode-core/src/main/java/com/gemstone/gemfire/cache/client/internal/ServerProxy.java b/geode-core/src/main/java/com/gemstone/gemfire/cache/client/internal/ServerProxy.java index 186354173c5a..8717bd02a735 100644 --- a/geode-core/src/main/java/com/gemstone/gemfire/cache/client/internal/ServerProxy.java +++ b/geode-core/src/main/java/com/gemstone/gemfire/cache/client/internal/ServerProxy.java @@ -23,7 +23,6 @@ /** * Used to send operations from a client to a server. - * @author darrel * @since 5.7 */ public class ServerProxy { diff --git a/geode-core/src/main/java/com/gemstone/gemfire/cache/client/internal/ServerRegionProxy.java b/geode-core/src/main/java/com/gemstone/gemfire/cache/client/internal/ServerRegionProxy.java index 5d8a595e338a..40f240f3f876 100644 --- a/geode-core/src/main/java/com/gemstone/gemfire/cache/client/internal/ServerRegionProxy.java +++ b/geode-core/src/main/java/com/gemstone/gemfire/cache/client/internal/ServerRegionProxy.java @@ -58,7 +58,6 @@ /** * Used to send region operations from a client to a server - * @author darrel * @since 5.7 */ @SuppressWarnings("deprecation") diff --git a/geode-core/src/main/java/com/gemstone/gemfire/cache/client/internal/SingleHopOperationCallable.java b/geode-core/src/main/java/com/gemstone/gemfire/cache/client/internal/SingleHopOperationCallable.java index d8bb5e89017e..6047a5011347 100644 --- a/geode-core/src/main/java/com/gemstone/gemfire/cache/client/internal/SingleHopOperationCallable.java +++ b/geode-core/src/main/java/com/gemstone/gemfire/cache/client/internal/SingleHopOperationCallable.java @@ -24,7 +24,6 @@ import com.gemstone.gemfire.distributed.internal.ServerLocation; /** * - * @author ymahajan * */ public class SingleHopOperationCallable implements Callable { diff --git a/geode-core/src/main/java/com/gemstone/gemfire/cache/client/internal/SizeOp.java b/geode-core/src/main/java/com/gemstone/gemfire/cache/client/internal/SizeOp.java index 42cc225960ff..64ef40c6a6eb 100644 --- a/geode-core/src/main/java/com/gemstone/gemfire/cache/client/internal/SizeOp.java +++ b/geode-core/src/main/java/com/gemstone/gemfire/cache/client/internal/SizeOp.java @@ -21,7 +21,6 @@ /** * Does a region size on a server - * @author gregp * @since 6.6 */ public class SizeOp { diff --git a/geode-core/src/main/java/com/gemstone/gemfire/cache/client/internal/TXFailoverOp.java b/geode-core/src/main/java/com/gemstone/gemfire/cache/client/internal/TXFailoverOp.java index 64ee66ee61eb..cc91cece3e1b 100644 --- a/geode-core/src/main/java/com/gemstone/gemfire/cache/client/internal/TXFailoverOp.java +++ b/geode-core/src/main/java/com/gemstone/gemfire/cache/client/internal/TXFailoverOp.java @@ -23,7 +23,6 @@ * Indicates to the server that a transaction is * failing over to this server. The server then * performs the necessary bootstrapping for the tx. - * @author sbawaska * @since 6.6 */ public class TXFailoverOp { diff --git a/geode-core/src/main/java/com/gemstone/gemfire/cache/client/internal/TXSynchronizationOp.java b/geode-core/src/main/java/com/gemstone/gemfire/cache/client/internal/TXSynchronizationOp.java index 34ecf4d05c49..ee348a8dfcfd 100644 --- a/geode-core/src/main/java/com/gemstone/gemfire/cache/client/internal/TXSynchronizationOp.java +++ b/geode-core/src/main/java/com/gemstone/gemfire/cache/client/internal/TXSynchronizationOp.java @@ -31,7 +31,6 @@ * TXSynchronizationOp sends JTA beforeCompletion and afterCompletion * messages to the server pool. * - * @author bruce * */ public class TXSynchronizationOp { diff --git a/geode-core/src/main/java/com/gemstone/gemfire/cache/client/internal/UnregisterInterestListOp.java b/geode-core/src/main/java/com/gemstone/gemfire/cache/client/internal/UnregisterInterestListOp.java index da5fe4e68534..5d247f1690dc 100644 --- a/geode-core/src/main/java/com/gemstone/gemfire/cache/client/internal/UnregisterInterestListOp.java +++ b/geode-core/src/main/java/com/gemstone/gemfire/cache/client/internal/UnregisterInterestListOp.java @@ -24,7 +24,6 @@ /** * Does a region unregisterInterestList on a server - * @author darrel * @since 5.7 */ public class UnregisterInterestListOp { diff --git a/geode-core/src/main/java/com/gemstone/gemfire/cache/client/internal/UnregisterInterestOp.java b/geode-core/src/main/java/com/gemstone/gemfire/cache/client/internal/UnregisterInterestOp.java index a0f3a9b400cc..510d719331c4 100644 --- a/geode-core/src/main/java/com/gemstone/gemfire/cache/client/internal/UnregisterInterestOp.java +++ b/geode-core/src/main/java/com/gemstone/gemfire/cache/client/internal/UnregisterInterestOp.java @@ -22,7 +22,6 @@ /** * Does a region unregisterInterest on a server - * @author darrel * @since 5.7 */ public class UnregisterInterestOp { diff --git a/geode-core/src/main/java/com/gemstone/gemfire/cache/client/internal/locator/ClientConnectionRequest.java b/geode-core/src/main/java/com/gemstone/gemfire/cache/client/internal/locator/ClientConnectionRequest.java index 8524369ed3a1..dee109ea3a9b 100644 --- a/geode-core/src/main/java/com/gemstone/gemfire/cache/client/internal/locator/ClientConnectionRequest.java +++ b/geode-core/src/main/java/com/gemstone/gemfire/cache/client/internal/locator/ClientConnectionRequest.java @@ -26,7 +26,6 @@ /** * A request from a client to the locator asking for a * server to connect to for client to server traffic. - * @author dsmith * */ public class ClientConnectionRequest extends ServerLocationRequest { diff --git a/geode-core/src/main/java/com/gemstone/gemfire/cache/client/internal/locator/ClientConnectionResponse.java b/geode-core/src/main/java/com/gemstone/gemfire/cache/client/internal/locator/ClientConnectionResponse.java index e19348007c9d..18d40378f7d8 100644 --- a/geode-core/src/main/java/com/gemstone/gemfire/cache/client/internal/locator/ClientConnectionResponse.java +++ b/geode-core/src/main/java/com/gemstone/gemfire/cache/client/internal/locator/ClientConnectionResponse.java @@ -27,7 +27,6 @@ /** * A response from a locator to a client * Indicating which server to connect to for client to server traffic. - * @author dsmith * */ public class ClientConnectionResponse extends ServerLocationResponse { diff --git a/geode-core/src/main/java/com/gemstone/gemfire/cache/client/internal/locator/ClientReplacementRequest.java b/geode-core/src/main/java/com/gemstone/gemfire/cache/client/internal/locator/ClientReplacementRequest.java index beec1ded4e9f..5a2ba7fdadac 100644 --- a/geode-core/src/main/java/com/gemstone/gemfire/cache/client/internal/locator/ClientReplacementRequest.java +++ b/geode-core/src/main/java/com/gemstone/gemfire/cache/client/internal/locator/ClientReplacementRequest.java @@ -28,7 +28,6 @@ /** * A request from a client to the locator asking for a * server to connect to for client to server traffic. - * @author dsmith * */ public class ClientReplacementRequest extends ClientConnectionRequest { diff --git a/geode-core/src/main/java/com/gemstone/gemfire/cache/client/internal/locator/GetAllServersRequest.java b/geode-core/src/main/java/com/gemstone/gemfire/cache/client/internal/locator/GetAllServersRequest.java index 2e83621152e4..858675d75bbb 100644 --- a/geode-core/src/main/java/com/gemstone/gemfire/cache/client/internal/locator/GetAllServersRequest.java +++ b/geode-core/src/main/java/com/gemstone/gemfire/cache/client/internal/locator/GetAllServersRequest.java @@ -23,7 +23,6 @@ import com.gemstone.gemfire.internal.DataSerializableFixedID; /** * - * @author ymahajan * */ diff --git a/geode-core/src/main/java/com/gemstone/gemfire/cache/client/internal/locator/GetAllServersResponse.java b/geode-core/src/main/java/com/gemstone/gemfire/cache/client/internal/locator/GetAllServersResponse.java index 6bd27dab7512..b50ab4a702bb 100644 --- a/geode-core/src/main/java/com/gemstone/gemfire/cache/client/internal/locator/GetAllServersResponse.java +++ b/geode-core/src/main/java/com/gemstone/gemfire/cache/client/internal/locator/GetAllServersResponse.java @@ -27,7 +27,6 @@ import com.gemstone.gemfire.internal.DataSerializableFixedID; /** * - * @author ymahajan * */ public class GetAllServersResponse extends ServerLocationResponse { diff --git a/geode-core/src/main/java/com/gemstone/gemfire/cache/client/internal/locator/LocatorListRequest.java b/geode-core/src/main/java/com/gemstone/gemfire/cache/client/internal/locator/LocatorListRequest.java index 254a1e9d1473..21280476af56 100644 --- a/geode-core/src/main/java/com/gemstone/gemfire/cache/client/internal/locator/LocatorListRequest.java +++ b/geode-core/src/main/java/com/gemstone/gemfire/cache/client/internal/locator/LocatorListRequest.java @@ -20,7 +20,6 @@ /** - * @author dsmith * */ public class LocatorListRequest extends ServerLocationRequest { diff --git a/geode-core/src/main/java/com/gemstone/gemfire/cache/client/internal/locator/LocatorListResponse.java b/geode-core/src/main/java/com/gemstone/gemfire/cache/client/internal/locator/LocatorListResponse.java index a9ab821d9a96..3e02eb327c3c 100644 --- a/geode-core/src/main/java/com/gemstone/gemfire/cache/client/internal/locator/LocatorListResponse.java +++ b/geode-core/src/main/java/com/gemstone/gemfire/cache/client/internal/locator/LocatorListResponse.java @@ -24,7 +24,6 @@ import com.gemstone.gemfire.internal.DataSerializableFixedID; /** - * @author dsmith * */ public class LocatorListResponse extends ServerLocationResponse { diff --git a/geode-core/src/main/java/com/gemstone/gemfire/cache/client/internal/locator/LocatorStatusRequest.java b/geode-core/src/main/java/com/gemstone/gemfire/cache/client/internal/locator/LocatorStatusRequest.java index 8bd40bd83957..31098901787b 100644 --- a/geode-core/src/main/java/com/gemstone/gemfire/cache/client/internal/locator/LocatorStatusRequest.java +++ b/geode-core/src/main/java/com/gemstone/gemfire/cache/client/internal/locator/LocatorStatusRequest.java @@ -22,7 +22,6 @@ /** * The LocatorStatusRequest class... *

    - * @author John Blum * @see com.gemstone.gemfire.cache.client.internal.locator.ServerLocationRequest * @see com.gemstone.gemfire.internal.DataSerializableFixedID * @since 7.0 diff --git a/geode-core/src/main/java/com/gemstone/gemfire/cache/client/internal/locator/LocatorStatusResponse.java b/geode-core/src/main/java/com/gemstone/gemfire/cache/client/internal/locator/LocatorStatusResponse.java index d7d207424373..ecb82d7743ce 100644 --- a/geode-core/src/main/java/com/gemstone/gemfire/cache/client/internal/locator/LocatorStatusResponse.java +++ b/geode-core/src/main/java/com/gemstone/gemfire/cache/client/internal/locator/LocatorStatusResponse.java @@ -36,7 +36,6 @@ /** * The LocatorStatusResponse class... *

    - * @author John Blum * @see com.gemstone.gemfire.cache.client.internal.locator.ServerLocationResponse * @since 7.0 */ diff --git a/geode-core/src/main/java/com/gemstone/gemfire/cache/client/internal/locator/QueueConnectionRequest.java b/geode-core/src/main/java/com/gemstone/gemfire/cache/client/internal/locator/QueueConnectionRequest.java index 217b040ee776..cbbfe91e5626 100644 --- a/geode-core/src/main/java/com/gemstone/gemfire/cache/client/internal/locator/QueueConnectionRequest.java +++ b/geode-core/src/main/java/com/gemstone/gemfire/cache/client/internal/locator/QueueConnectionRequest.java @@ -29,8 +29,6 @@ * A request from a client to locator asking for a server * to host a queue. If the durable client Id is specified, the locator * will attempt to discover a pre-existing queue. - * @author dsmith - * @author gregp * */ public class QueueConnectionRequest extends ServerLocationRequest { diff --git a/geode-core/src/main/java/com/gemstone/gemfire/cache/client/internal/locator/QueueConnectionResponse.java b/geode-core/src/main/java/com/gemstone/gemfire/cache/client/internal/locator/QueueConnectionResponse.java index 1c5da6e66a63..ed368834d0da 100644 --- a/geode-core/src/main/java/com/gemstone/gemfire/cache/client/internal/locator/QueueConnectionResponse.java +++ b/geode-core/src/main/java/com/gemstone/gemfire/cache/client/internal/locator/QueueConnectionResponse.java @@ -28,7 +28,6 @@ * A response from locator to client indicating the servers * to use to host the clients queue. The servers already * contain the queue if the durableQueueFound flag is true. - * @author dsmith * */ public class QueueConnectionResponse extends ServerLocationResponse { diff --git a/geode-core/src/main/java/com/gemstone/gemfire/cache/client/internal/locator/SerializationHelper.java b/geode-core/src/main/java/com/gemstone/gemfire/cache/client/internal/locator/SerializationHelper.java index c7c85eaec4ce..fbcdcf6dfb1f 100644 --- a/geode-core/src/main/java/com/gemstone/gemfire/cache/client/internal/locator/SerializationHelper.java +++ b/geode-core/src/main/java/com/gemstone/gemfire/cache/client/internal/locator/SerializationHelper.java @@ -31,7 +31,6 @@ import com.gemstone.gemfire.internal.cache.BucketServerLocation66; /** - * @author dsmith * */ public class SerializationHelper { diff --git a/geode-core/src/main/java/com/gemstone/gemfire/cache/client/internal/locator/ServerLocationRequest.java b/geode-core/src/main/java/com/gemstone/gemfire/cache/client/internal/locator/ServerLocationRequest.java index 19f6ddf289b2..8c963b76a0f7 100644 --- a/geode-core/src/main/java/com/gemstone/gemfire/cache/client/internal/locator/ServerLocationRequest.java +++ b/geode-core/src/main/java/com/gemstone/gemfire/cache/client/internal/locator/ServerLocationRequest.java @@ -25,7 +25,6 @@ import com.gemstone.gemfire.internal.Version; /** - * @author dsmith * */ public abstract class ServerLocationRequest implements DataSerializableFixedID { diff --git a/geode-core/src/main/java/com/gemstone/gemfire/cache/client/internal/locator/ServerLocationResponse.java b/geode-core/src/main/java/com/gemstone/gemfire/cache/client/internal/locator/ServerLocationResponse.java index a762d57e72bf..23047ceb18cb 100644 --- a/geode-core/src/main/java/com/gemstone/gemfire/cache/client/internal/locator/ServerLocationResponse.java +++ b/geode-core/src/main/java/com/gemstone/gemfire/cache/client/internal/locator/ServerLocationResponse.java @@ -20,7 +20,6 @@ import com.gemstone.gemfire.internal.Version; /** - * @author dsmith * */ public abstract class ServerLocationResponse implements DataSerializableFixedID { diff --git a/geode-core/src/main/java/com/gemstone/gemfire/cache/client/internal/locator/wan/LocatorMembershipListener.java b/geode-core/src/main/java/com/gemstone/gemfire/cache/client/internal/locator/wan/LocatorMembershipListener.java index 4e85431a4094..3bb0a1c41157 100644 --- a/geode-core/src/main/java/com/gemstone/gemfire/cache/client/internal/locator/wan/LocatorMembershipListener.java +++ b/geode-core/src/main/java/com/gemstone/gemfire/cache/client/internal/locator/wan/LocatorMembershipListener.java @@ -28,7 +28,6 @@ * locator metadata about the new locator so that they can update their remote * locator metadata. * - * @author kbachhav * */ public interface LocatorMembershipListener { diff --git a/geode-core/src/main/java/com/gemstone/gemfire/cache/client/internal/pooling/ConnectionDestroyedException.java b/geode-core/src/main/java/com/gemstone/gemfire/cache/client/internal/pooling/ConnectionDestroyedException.java index 6d096bf723d8..12e1959d4f34 100644 --- a/geode-core/src/main/java/com/gemstone/gemfire/cache/client/internal/pooling/ConnectionDestroyedException.java +++ b/geode-core/src/main/java/com/gemstone/gemfire/cache/client/internal/pooling/ConnectionDestroyedException.java @@ -22,7 +22,6 @@ * Indicates that the current connection has already been destroyed. * This exception should not propagate all the way back to the * user, but is a signal to retry an attempt. - * @author dsmith * */ public class ConnectionDestroyedException extends GemFireException { diff --git a/geode-core/src/main/java/com/gemstone/gemfire/cache/client/internal/pooling/ConnectionManager.java b/geode-core/src/main/java/com/gemstone/gemfire/cache/client/internal/pooling/ConnectionManager.java index 0f10b34d998e..4f0e152e2288 100644 --- a/geode-core/src/main/java/com/gemstone/gemfire/cache/client/internal/pooling/ConnectionManager.java +++ b/geode-core/src/main/java/com/gemstone/gemfire/cache/client/internal/pooling/ConnectionManager.java @@ -28,7 +28,6 @@ * A pool for managing client to server connections. This interface * allows connections to be checked out and checked in, and keeps * the number of connections within the min and max boundaries. - * @author dsmith * @since 5.7 * */ diff --git a/geode-core/src/main/java/com/gemstone/gemfire/cache/client/internal/pooling/ConnectionManagerImpl.java b/geode-core/src/main/java/com/gemstone/gemfire/cache/client/internal/pooling/ConnectionManagerImpl.java index d31ff3c00426..0ee36dfcf2a1 100644 --- a/geode-core/src/main/java/com/gemstone/gemfire/cache/client/internal/pooling/ConnectionManagerImpl.java +++ b/geode-core/src/main/java/com/gemstone/gemfire/cache/client/internal/pooling/ConnectionManagerImpl.java @@ -65,7 +65,6 @@ /** * Manages client to server connections for the connection pool. This class contains * all of the pooling logic to checkout/checkin connections. - * @author dsmith * * @since 5.7 * diff --git a/geode-core/src/main/java/com/gemstone/gemfire/cache/client/internal/pooling/PooledConnection.java b/geode-core/src/main/java/com/gemstone/gemfire/cache/client/internal/pooling/PooledConnection.java index 672c81770b58..d1531d1857fb 100644 --- a/geode-core/src/main/java/com/gemstone/gemfire/cache/client/internal/pooling/PooledConnection.java +++ b/geode-core/src/main/java/com/gemstone/gemfire/cache/client/internal/pooling/PooledConnection.java @@ -35,7 +35,6 @@ /** * A connection managed by the connection manager. Keeps track * of the current state of the connection. - * @author dsmith * @since 5.7 * */ diff --git a/geode-core/src/main/java/com/gemstone/gemfire/cache/execute/EmtpyRegionFunctionException.java b/geode-core/src/main/java/com/gemstone/gemfire/cache/execute/EmtpyRegionFunctionException.java index b645ccb0a1a4..6aff9ebd21b3 100644 --- a/geode-core/src/main/java/com/gemstone/gemfire/cache/execute/EmtpyRegionFunctionException.java +++ b/geode-core/src/main/java/com/gemstone/gemfire/cache/execute/EmtpyRegionFunctionException.java @@ -21,7 +21,6 @@ /** * Exception to indicate that Region is empty for data aware functions. * - * @author skumar * @since 6.5 * */ diff --git a/geode-core/src/main/java/com/gemstone/gemfire/cache/execute/Execution.java b/geode-core/src/main/java/com/gemstone/gemfire/cache/execute/Execution.java index 6e2c19031dca..19bfe79ef43e 100755 --- a/geode-core/src/main/java/com/gemstone/gemfire/cache/execute/Execution.java +++ b/geode-core/src/main/java/com/gemstone/gemfire/cache/execute/Execution.java @@ -27,8 +27,6 @@ * take place. *

    This interface is implemented by GemFire. To obtain an instance of it use {@link FunctionService}. * - * @author Yogesh Mahajan - * @author Mitch Thomas * * @since 6.0 * diff --git a/geode-core/src/main/java/com/gemstone/gemfire/cache/execute/Function.java b/geode-core/src/main/java/com/gemstone/gemfire/cache/execute/Function.java index 2669765e3469..2e4e0660f124 100755 --- a/geode-core/src/main/java/com/gemstone/gemfire/cache/execute/Function.java +++ b/geode-core/src/main/java/com/gemstone/gemfire/cache/execute/Function.java @@ -32,8 +32,6 @@ * @see FunctionAdapter * @see FunctionService * - * @author Yogesh Mahajan - * @author Mitch Thomas * * @since 6.0 */ diff --git a/geode-core/src/main/java/com/gemstone/gemfire/cache/execute/FunctionAdapter.java b/geode-core/src/main/java/com/gemstone/gemfire/cache/execute/FunctionAdapter.java index 5bc2c1bea0d3..c4cfeed909c8 100755 --- a/geode-core/src/main/java/com/gemstone/gemfire/cache/execute/FunctionAdapter.java +++ b/geode-core/src/main/java/com/gemstone/gemfire/cache/execute/FunctionAdapter.java @@ -30,7 +30,6 @@ * *

    * - * @author Yogesh Mahajan * @since 6.0 * @see Function * diff --git a/geode-core/src/main/java/com/gemstone/gemfire/cache/execute/FunctionContext.java b/geode-core/src/main/java/com/gemstone/gemfire/cache/execute/FunctionContext.java index c1b4e914e3ce..932f345d7960 100755 --- a/geode-core/src/main/java/com/gemstone/gemfire/cache/execute/FunctionContext.java +++ b/geode-core/src/main/java/com/gemstone/gemfire/cache/execute/FunctionContext.java @@ -27,8 +27,6 @@ *

    This interface is implemented by GemFire. Instances of it will be passed * in to {@link Function#execute(FunctionContext)}. * - * @author Yogesh Mahajan - * @author Mitch Thomas * * @since 6.0 * diff --git a/geode-core/src/main/java/com/gemstone/gemfire/cache/execute/FunctionException.java b/geode-core/src/main/java/com/gemstone/gemfire/cache/execute/FunctionException.java index 7b7edf3eca24..e55b99f5e2f7 100755 --- a/geode-core/src/main/java/com/gemstone/gemfire/cache/execute/FunctionException.java +++ b/geode-core/src/main/java/com/gemstone/gemfire/cache/execute/FunctionException.java @@ -41,8 +41,6 @@ *

    The exception string provides details on the cause of failure. *

    * - * @author Yogesh Mahajan - * @author Mitch Thomas * * @since 6.0 * @see FunctionService diff --git a/geode-core/src/main/java/com/gemstone/gemfire/cache/execute/FunctionInvocationTargetException.java b/geode-core/src/main/java/com/gemstone/gemfire/cache/execute/FunctionInvocationTargetException.java index 9003ade908da..f95a86daa5f6 100755 --- a/geode-core/src/main/java/com/gemstone/gemfire/cache/execute/FunctionInvocationTargetException.java +++ b/geode-core/src/main/java/com/gemstone/gemfire/cache/execute/FunctionInvocationTargetException.java @@ -24,7 +24,6 @@ * Function needs to be re-executed if the * {@link FunctionException#getCause()} is FunctionInvocationTargetException. * - * @author Yogesh Mahajan * @since 6.0 * */ diff --git a/geode-core/src/main/java/com/gemstone/gemfire/cache/execute/FunctionService.java b/geode-core/src/main/java/com/gemstone/gemfire/cache/execute/FunctionService.java index e0132f05302d..bb547b0824c1 100755 --- a/geode-core/src/main/java/com/gemstone/gemfire/cache/execute/FunctionService.java +++ b/geode-core/src/main/java/com/gemstone/gemfire/cache/execute/FunctionService.java @@ -39,7 +39,6 @@ * generically to peers in a {@link DistributedSystem} or servers in a {@link Pool}. *

    * - * @author Yogesh Mahajan * @since 6.0 */ public final class FunctionService { diff --git a/geode-core/src/main/java/com/gemstone/gemfire/cache/execute/RegionFunctionContext.java b/geode-core/src/main/java/com/gemstone/gemfire/cache/execute/RegionFunctionContext.java index 88214fcca860..ea6078a856d1 100755 --- a/geode-core/src/main/java/com/gemstone/gemfire/cache/execute/RegionFunctionContext.java +++ b/geode-core/src/main/java/com/gemstone/gemfire/cache/execute/RegionFunctionContext.java @@ -36,8 +36,6 @@ * {@linkplain PartitionAttributesFactory#setColocatedWith(String) colocated} data references. *

    * - * @author Yogesh Mahajan - * @author Mitch Thomas * * @since 6.0 * diff --git a/geode-core/src/main/java/com/gemstone/gemfire/cache/execute/ResultCollector.java b/geode-core/src/main/java/com/gemstone/gemfire/cache/execute/ResultCollector.java index ef14e0f52cf1..3d2c4772528e 100755 --- a/geode-core/src/main/java/com/gemstone/gemfire/cache/execute/ResultCollector.java +++ b/geode-core/src/main/java/com/gemstone/gemfire/cache/execute/ResultCollector.java @@ -59,7 +59,6 @@ * results in Arraylist. There is no need to provide a synchronization mechanism * in the user implementations of ResultCollector * - * @author Yogesh Mahajan * @since 6.0 * */ diff --git a/geode-core/src/main/java/com/gemstone/gemfire/cache/execute/ResultSender.java b/geode-core/src/main/java/com/gemstone/gemfire/cache/execute/ResultSender.java index 8e701f7ed189..85f2928308e6 100755 --- a/geode-core/src/main/java/com/gemstone/gemfire/cache/execute/ResultSender.java +++ b/geode-core/src/main/java/com/gemstone/gemfire/cache/execute/ResultSender.java @@ -45,8 +45,6 @@ *
    * * - * @author Mitch Thomas - * @author Yogesh Mahajan * * @since 6.0 * diff --git a/geode-core/src/main/java/com/gemstone/gemfire/cache/execute/internal/FunctionServiceManager.java b/geode-core/src/main/java/com/gemstone/gemfire/cache/execute/internal/FunctionServiceManager.java index 30c92883b2ac..2e7630752723 100644 --- a/geode-core/src/main/java/com/gemstone/gemfire/cache/execute/internal/FunctionServiceManager.java +++ b/geode-core/src/main/java/com/gemstone/gemfire/cache/execute/internal/FunctionServiceManager.java @@ -66,7 +66,6 @@ * While {@link FunctionService} is a customer facing interface to this functionality, all of the work is done here. In * addition, internal only functionality is exposed in this class. * - * @author Yogesh Mahajan * @since 7.0 */ public final class FunctionServiceManager { diff --git a/geode-core/src/main/java/com/gemstone/gemfire/cache/hdfs/HDFSIOException.java b/geode-core/src/main/java/com/gemstone/gemfire/cache/hdfs/HDFSIOException.java index 6c98cd412986..d9b6179fa037 100644 --- a/geode-core/src/main/java/com/gemstone/gemfire/cache/hdfs/HDFSIOException.java +++ b/geode-core/src/main/java/com/gemstone/gemfire/cache/hdfs/HDFSIOException.java @@ -26,7 +26,6 @@ * the HDFS file system. This error may indicate a failure of the HDFS * system. * - * @author dsmith * * @since 7.5 * diff --git a/geode-core/src/main/java/com/gemstone/gemfire/cache/hdfs/HDFSStore.java b/geode-core/src/main/java/com/gemstone/gemfire/cache/hdfs/HDFSStore.java index b9f1329e8e6f..45ba370034c6 100644 --- a/geode-core/src/main/java/com/gemstone/gemfire/cache/hdfs/HDFSStore.java +++ b/geode-core/src/main/java/com/gemstone/gemfire/cache/hdfs/HDFSStore.java @@ -34,8 +34,6 @@ *

    * Instances of this interface are created using {@link HDFSStoreFactory#create} * - * @author Hemant Bhanawat - * @author Ashvin Agrawal */ public interface HDFSStore { diff --git a/geode-core/src/main/java/com/gemstone/gemfire/cache/hdfs/HDFSStoreFactory.java b/geode-core/src/main/java/com/gemstone/gemfire/cache/hdfs/HDFSStoreFactory.java index 2856e9fad68a..0d80a67354f6 100644 --- a/geode-core/src/main/java/com/gemstone/gemfire/cache/hdfs/HDFSStoreFactory.java +++ b/geode-core/src/main/java/com/gemstone/gemfire/cache/hdfs/HDFSStoreFactory.java @@ -30,8 +30,6 @@ *

  • call {@link #create} to produce a HDFSStore instance. * * - * @author Hemant Bhanawat - * @author Ashvin Agrawal */ public interface HDFSStoreFactory { diff --git a/geode-core/src/main/java/com/gemstone/gemfire/cache/hdfs/HDFSStoreMutator.java b/geode-core/src/main/java/com/gemstone/gemfire/cache/hdfs/HDFSStoreMutator.java index f1ae46b5d2b6..d98c9cdb187f 100644 --- a/geode-core/src/main/java/com/gemstone/gemfire/cache/hdfs/HDFSStoreMutator.java +++ b/geode-core/src/main/java/com/gemstone/gemfire/cache/hdfs/HDFSStoreMutator.java @@ -23,7 +23,6 @@ * {@link HDFSStore#createHdfsStoreMutator} and applied using * {@link HDFSStore#alter} * - * @author ashvina */ public interface HDFSStoreMutator { /** diff --git a/geode-core/src/main/java/com/gemstone/gemfire/cache/hdfs/StoreExistsException.java b/geode-core/src/main/java/com/gemstone/gemfire/cache/hdfs/StoreExistsException.java index 74abbf6232e8..de21b2322cc4 100644 --- a/geode-core/src/main/java/com/gemstone/gemfire/cache/hdfs/StoreExistsException.java +++ b/geode-core/src/main/java/com/gemstone/gemfire/cache/hdfs/StoreExistsException.java @@ -22,7 +22,6 @@ /** * Thrown when attempting to create a {@link HDFSStore} if one already exists. * - * @author Ashvin Agrawal */ public class StoreExistsException extends CacheException { private static final long serialVersionUID = 1L; diff --git a/geode-core/src/main/java/com/gemstone/gemfire/cache/hdfs/internal/FailureTracker.java b/geode-core/src/main/java/com/gemstone/gemfire/cache/hdfs/internal/FailureTracker.java index c05545479d63..789d49765f4e 100644 --- a/geode-core/src/main/java/com/gemstone/gemfire/cache/hdfs/internal/FailureTracker.java +++ b/geode-core/src/main/java/com/gemstone/gemfire/cache/hdfs/internal/FailureTracker.java @@ -24,7 +24,6 @@ /** * Class for tracking failures and backing off if necessary. - * @author dsmith * */ public class FailureTracker extends ThreadLocal { diff --git a/geode-core/src/main/java/com/gemstone/gemfire/cache/hdfs/internal/FlushObserver.java b/geode-core/src/main/java/com/gemstone/gemfire/cache/hdfs/internal/FlushObserver.java index 0725c59815fc..f69b3dc3b778 100644 --- a/geode-core/src/main/java/com/gemstone/gemfire/cache/hdfs/internal/FlushObserver.java +++ b/geode-core/src/main/java/com/gemstone/gemfire/cache/hdfs/internal/FlushObserver.java @@ -21,7 +21,6 @@ /** * Observes and reacts to flush events. * - * @author bakera */ public interface FlushObserver { public interface AsyncFlushResult { diff --git a/geode-core/src/main/java/com/gemstone/gemfire/cache/hdfs/internal/HDFSBucketRegionQueue.java b/geode-core/src/main/java/com/gemstone/gemfire/cache/hdfs/internal/HDFSBucketRegionQueue.java index 20511dbccc49..9127e4dbc3ed 100644 --- a/geode-core/src/main/java/com/gemstone/gemfire/cache/hdfs/internal/HDFSBucketRegionQueue.java +++ b/geode-core/src/main/java/com/gemstone/gemfire/cache/hdfs/internal/HDFSBucketRegionQueue.java @@ -67,7 +67,6 @@ /** * This class holds the sorted list required for HDFS. * - * @author Hemant Bhanawat * */ public class HDFSBucketRegionQueue extends AbstractBucketRegionQueue { diff --git a/geode-core/src/main/java/com/gemstone/gemfire/cache/hdfs/internal/HDFSEventListener.java b/geode-core/src/main/java/com/gemstone/gemfire/cache/hdfs/internal/HDFSEventListener.java index 76d3d20fc949..607650f30d44 100644 --- a/geode-core/src/main/java/com/gemstone/gemfire/cache/hdfs/internal/HDFSEventListener.java +++ b/geode-core/src/main/java/com/gemstone/gemfire/cache/hdfs/internal/HDFSEventListener.java @@ -40,7 +40,6 @@ /** * Listener that persists events to HDFS * - * @author Hemant Bhanawat */ public class HDFSEventListener implements AsyncEventListener { private final LogWriterI18n logger; diff --git a/geode-core/src/main/java/com/gemstone/gemfire/cache/hdfs/internal/HDFSEventQueueFilter.java b/geode-core/src/main/java/com/gemstone/gemfire/cache/hdfs/internal/HDFSEventQueueFilter.java index 6ab10dc78dac..0860e752dec9 100644 --- a/geode-core/src/main/java/com/gemstone/gemfire/cache/hdfs/internal/HDFSEventQueueFilter.java +++ b/geode-core/src/main/java/com/gemstone/gemfire/cache/hdfs/internal/HDFSEventQueueFilter.java @@ -24,7 +24,6 @@ /** * Current use of this class is limited to ignoring the Bulk DML operations. * - * @author hemantb * */ public class HDFSEventQueueFilter implements GatewayEventFilter{ diff --git a/geode-core/src/main/java/com/gemstone/gemfire/cache/hdfs/internal/HDFSGatewayEventImpl.java b/geode-core/src/main/java/com/gemstone/gemfire/cache/hdfs/internal/HDFSGatewayEventImpl.java index 3219760bc31a..db99e7eb9b10 100644 --- a/geode-core/src/main/java/com/gemstone/gemfire/cache/hdfs/internal/HDFSGatewayEventImpl.java +++ b/geode-core/src/main/java/com/gemstone/gemfire/cache/hdfs/internal/HDFSGatewayEventImpl.java @@ -39,7 +39,6 @@ /** * Gateway event extended for HDFS functionality * - * @author Hemant Bhanawat */ public class HDFSGatewayEventImpl extends GatewaySenderEventImpl { diff --git a/geode-core/src/main/java/com/gemstone/gemfire/cache/hdfs/internal/HDFSIntegrationUtil.java b/geode-core/src/main/java/com/gemstone/gemfire/cache/hdfs/internal/HDFSIntegrationUtil.java index f1735ecea4aa..740a607d48dd 100644 --- a/geode-core/src/main/java/com/gemstone/gemfire/cache/hdfs/internal/HDFSIntegrationUtil.java +++ b/geode-core/src/main/java/com/gemstone/gemfire/cache/hdfs/internal/HDFSIntegrationUtil.java @@ -32,7 +32,6 @@ /** * Contains utility functions * - * @author Hemant Bhanawat * */ public class HDFSIntegrationUtil { diff --git a/geode-core/src/main/java/com/gemstone/gemfire/cache/hdfs/internal/HDFSParallelGatewaySenderQueue.java b/geode-core/src/main/java/com/gemstone/gemfire/cache/hdfs/internal/HDFSParallelGatewaySenderQueue.java index 87e8ce4b7fe8..1e6a0343ca97 100644 --- a/geode-core/src/main/java/com/gemstone/gemfire/cache/hdfs/internal/HDFSParallelGatewaySenderQueue.java +++ b/geode-core/src/main/java/com/gemstone/gemfire/cache/hdfs/internal/HDFSParallelGatewaySenderQueue.java @@ -40,7 +40,6 @@ /** * Parallel Gateway Sender Queue extended for HDFS functionality * - * @author Hemant Bhanawat */ public class HDFSParallelGatewaySenderQueue extends ParallelGatewaySenderQueue { @@ -437,7 +436,6 @@ public HDFSBucketRegionQueue getBucketRegionQueue(PartitionedRegion region, * other put threads and peek thread that would hamper the put latency. * Peek thread cannot do it because if the event insert rate is too high * the list size can go way beyond what its size. - * @author hemantb * */ class RollSortedListsTimerTask extends SystemTimerTask { diff --git a/geode-core/src/main/java/com/gemstone/gemfire/cache/hdfs/internal/HDFSStoreConfigHolder.java b/geode-core/src/main/java/com/gemstone/gemfire/cache/hdfs/internal/HDFSStoreConfigHolder.java index 5e398a59dcce..16d3d8776232 100644 --- a/geode-core/src/main/java/com/gemstone/gemfire/cache/hdfs/internal/HDFSStoreConfigHolder.java +++ b/geode-core/src/main/java/com/gemstone/gemfire/cache/hdfs/internal/HDFSStoreConfigHolder.java @@ -38,7 +38,6 @@ * set calls and copy constructor calls this class. Moreover this config holder * can be entirely replaced to support alter config * - * @author ashvina */ public class HDFSStoreConfigHolder implements HDFSStore, HDFSStoreFactory ,Serializable { private String name = null; diff --git a/geode-core/src/main/java/com/gemstone/gemfire/cache/hdfs/internal/HDFSStoreCreation.java b/geode-core/src/main/java/com/gemstone/gemfire/cache/hdfs/internal/HDFSStoreCreation.java index f6343b0e2f73..9ecc5e37871d 100644 --- a/geode-core/src/main/java/com/gemstone/gemfire/cache/hdfs/internal/HDFSStoreCreation.java +++ b/geode-core/src/main/java/com/gemstone/gemfire/cache/hdfs/internal/HDFSStoreCreation.java @@ -24,7 +24,6 @@ import com.gemstone.gemfire.internal.i18n.LocalizedStrings; /** - * @author ashvina */ public class HDFSStoreCreation implements HDFSStoreFactory { protected HDFSStoreConfigHolder configHolder; diff --git a/geode-core/src/main/java/com/gemstone/gemfire/cache/hdfs/internal/HDFSStoreFactoryImpl.java b/geode-core/src/main/java/com/gemstone/gemfire/cache/hdfs/internal/HDFSStoreFactoryImpl.java index f516a943b39c..749f01ce0414 100644 --- a/geode-core/src/main/java/com/gemstone/gemfire/cache/hdfs/internal/HDFSStoreFactoryImpl.java +++ b/geode-core/src/main/java/com/gemstone/gemfire/cache/hdfs/internal/HDFSStoreFactoryImpl.java @@ -27,7 +27,6 @@ /** * Implementation of HDFSStoreFactory * - * @author Hemant Bhanawat */ public class HDFSStoreFactoryImpl extends HDFSStoreCreation { public static final String DEFAULT_ASYNC_QUEUE_ID_FOR_HDFS= "HDFS_QUEUE"; diff --git a/geode-core/src/main/java/com/gemstone/gemfire/cache/hdfs/internal/HDFSStoreImpl.java b/geode-core/src/main/java/com/gemstone/gemfire/cache/hdfs/internal/HDFSStoreImpl.java index caa557039f0f..b5d56b67059e 100644 --- a/geode-core/src/main/java/com/gemstone/gemfire/cache/hdfs/internal/HDFSStoreImpl.java +++ b/geode-core/src/main/java/com/gemstone/gemfire/cache/hdfs/internal/HDFSStoreImpl.java @@ -62,7 +62,6 @@ /** * Represents a HDFS based persistent store for region data. * - * @author Ashvin Agrawal */ public class HDFSStoreImpl implements HDFSStore { diff --git a/geode-core/src/main/java/com/gemstone/gemfire/cache/hdfs/internal/HDFSWriteOnlyStoreEventListener.java b/geode-core/src/main/java/com/gemstone/gemfire/cache/hdfs/internal/HDFSWriteOnlyStoreEventListener.java index b3bd582e1776..0298523ee9a2 100644 --- a/geode-core/src/main/java/com/gemstone/gemfire/cache/hdfs/internal/HDFSWriteOnlyStoreEventListener.java +++ b/geode-core/src/main/java/com/gemstone/gemfire/cache/hdfs/internal/HDFSWriteOnlyStoreEventListener.java @@ -41,7 +41,6 @@ /** * Listener that persists events to a write only HDFS store * - * @author Hemant Bhanawat */ public class HDFSWriteOnlyStoreEventListener implements AsyncEventListener { diff --git a/geode-core/src/main/java/com/gemstone/gemfire/cache/hdfs/internal/HoplogListenerForRegion.java b/geode-core/src/main/java/com/gemstone/gemfire/cache/hdfs/internal/HoplogListenerForRegion.java index b17fed4b88d4..c7ba23f4a7c1 100644 --- a/geode-core/src/main/java/com/gemstone/gemfire/cache/hdfs/internal/HoplogListenerForRegion.java +++ b/geode-core/src/main/java/com/gemstone/gemfire/cache/hdfs/internal/HoplogListenerForRegion.java @@ -29,7 +29,6 @@ * Objects of this class needs to be created for every region. These objects * listen to the oplog events and take appropriate action. * - * @author Hemant Bhanawat */ public class HoplogListenerForRegion implements HoplogListener { diff --git a/geode-core/src/main/java/com/gemstone/gemfire/cache/hdfs/internal/PersistedEventImpl.java b/geode-core/src/main/java/com/gemstone/gemfire/cache/hdfs/internal/PersistedEventImpl.java index f6a7c8c1c7b7..82e2bf98f9f5 100644 --- a/geode-core/src/main/java/com/gemstone/gemfire/cache/hdfs/internal/PersistedEventImpl.java +++ b/geode-core/src/main/java/com/gemstone/gemfire/cache/hdfs/internal/PersistedEventImpl.java @@ -40,7 +40,6 @@ * queue, which need to hold the region key. * * - * @author Hemant Bhanawat */ public abstract class PersistedEventImpl { protected Operation op = Operation.UPDATE; diff --git a/geode-core/src/main/java/com/gemstone/gemfire/cache/hdfs/internal/SignalledFlushObserver.java b/geode-core/src/main/java/com/gemstone/gemfire/cache/hdfs/internal/SignalledFlushObserver.java index 956dd2c2d7e5..b97bdb716bda 100644 --- a/geode-core/src/main/java/com/gemstone/gemfire/cache/hdfs/internal/SignalledFlushObserver.java +++ b/geode-core/src/main/java/com/gemstone/gemfire/cache/hdfs/internal/SignalledFlushObserver.java @@ -26,7 +26,6 @@ /** * Tracks flushes using a queue of latches. * - * @author bakera */ public class SignalledFlushObserver implements FlushObserver { private static class FlushLatch extends CountDownLatch { diff --git a/geode-core/src/main/java/com/gemstone/gemfire/cache/hdfs/internal/SortedHDFSQueuePersistedEvent.java b/geode-core/src/main/java/com/gemstone/gemfire/cache/hdfs/internal/SortedHDFSQueuePersistedEvent.java index f8c5753ee9ee..c725ce598239 100644 --- a/geode-core/src/main/java/com/gemstone/gemfire/cache/hdfs/internal/SortedHDFSQueuePersistedEvent.java +++ b/geode-core/src/main/java/com/gemstone/gemfire/cache/hdfs/internal/SortedHDFSQueuePersistedEvent.java @@ -32,7 +32,6 @@ * temporarily to copy the data from the HDFSGatewayEventImpl to the persisted * record in the file. * - * @author dsmith * */ public class SortedHDFSQueuePersistedEvent extends SortedHoplogPersistedEvent implements QueuedPersistentEvent { diff --git a/geode-core/src/main/java/com/gemstone/gemfire/cache/hdfs/internal/SortedHoplogPersistedEvent.java b/geode-core/src/main/java/com/gemstone/gemfire/cache/hdfs/internal/SortedHoplogPersistedEvent.java index 03a435c3dd91..e8be7b82f00e 100644 --- a/geode-core/src/main/java/com/gemstone/gemfire/cache/hdfs/internal/SortedHoplogPersistedEvent.java +++ b/geode-core/src/main/java/com/gemstone/gemfire/cache/hdfs/internal/SortedHoplogPersistedEvent.java @@ -32,7 +32,6 @@ * This class should only be serialized by directly calling toData, * which is why it does not implement DataSerializable * - * @author dsmith */ public class SortedHoplogPersistedEvent extends PersistedEventImpl { /** version tag for concurrency checks */ diff --git a/geode-core/src/main/java/com/gemstone/gemfire/cache/hdfs/internal/UnsortedHDFSQueuePersistedEvent.java b/geode-core/src/main/java/com/gemstone/gemfire/cache/hdfs/internal/UnsortedHDFSQueuePersistedEvent.java index e9fcac6da5bc..93d596b20aaa 100644 --- a/geode-core/src/main/java/com/gemstone/gemfire/cache/hdfs/internal/UnsortedHDFSQueuePersistedEvent.java +++ b/geode-core/src/main/java/com/gemstone/gemfire/cache/hdfs/internal/UnsortedHDFSQueuePersistedEvent.java @@ -29,7 +29,6 @@ * temporarily to copy the data from the HDFSGatewayEventImpl to the persisted * record in the file. * - * @author dsmith * */ public class UnsortedHDFSQueuePersistedEvent extends UnsortedHoplogPersistedEvent implements QueuedPersistentEvent { diff --git a/geode-core/src/main/java/com/gemstone/gemfire/cache/hdfs/internal/UnsortedHoplogPersistedEvent.java b/geode-core/src/main/java/com/gemstone/gemfire/cache/hdfs/internal/UnsortedHoplogPersistedEvent.java index f071d5bb6421..9b9a04d6a9c6 100644 --- a/geode-core/src/main/java/com/gemstone/gemfire/cache/hdfs/internal/UnsortedHoplogPersistedEvent.java +++ b/geode-core/src/main/java/com/gemstone/gemfire/cache/hdfs/internal/UnsortedHoplogPersistedEvent.java @@ -32,7 +32,6 @@ * This class should only be serialized by calling toData directly, which * is why it does not implement DataSerializable. * - * @author dsmith * */ public class UnsortedHoplogPersistedEvent extends PersistedEventImpl { diff --git a/geode-core/src/main/java/com/gemstone/gemfire/cache/hdfs/internal/hoplog/CloseTmpHoplogsTimerTask.java b/geode-core/src/main/java/com/gemstone/gemfire/cache/hdfs/internal/hoplog/CloseTmpHoplogsTimerTask.java index 3d7844915c96..3f67de8005c7 100644 --- a/geode-core/src/main/java/com/gemstone/gemfire/cache/hdfs/internal/hoplog/CloseTmpHoplogsTimerTask.java +++ b/geode-core/src/main/java/com/gemstone/gemfire/cache/hdfs/internal/hoplog/CloseTmpHoplogsTimerTask.java @@ -37,7 +37,6 @@ * It also has got an extra responsibility of fixing the file sizes of the files * that weren't closed properly last time. * - * @author hemantb * */ class CloseTmpHoplogsTimerTask extends SystemTimerTask { diff --git a/geode-core/src/main/java/com/gemstone/gemfire/cache/hdfs/internal/hoplog/CompactionStatus.java b/geode-core/src/main/java/com/gemstone/gemfire/cache/hdfs/internal/hoplog/CompactionStatus.java index 6860d45e4037..55d8f87a72f6 100644 --- a/geode-core/src/main/java/com/gemstone/gemfire/cache/hdfs/internal/hoplog/CompactionStatus.java +++ b/geode-core/src/main/java/com/gemstone/gemfire/cache/hdfs/internal/hoplog/CompactionStatus.java @@ -26,7 +26,6 @@ /** * Status of the compaction task reported in the future * - * @author sbawaska */ public class CompactionStatus implements VersionedDataSerializable { /**MergeGemXDHDFSToGFE check and verify serializationversions **/ diff --git a/geode-core/src/main/java/com/gemstone/gemfire/cache/hdfs/internal/hoplog/FlushStatus.java b/geode-core/src/main/java/com/gemstone/gemfire/cache/hdfs/internal/hoplog/FlushStatus.java index 8fbfe92d6210..84bededfb69e 100644 --- a/geode-core/src/main/java/com/gemstone/gemfire/cache/hdfs/internal/hoplog/FlushStatus.java +++ b/geode-core/src/main/java/com/gemstone/gemfire/cache/hdfs/internal/hoplog/FlushStatus.java @@ -26,7 +26,6 @@ /** * Reports the result of a flush request. * - * @author bakera */ public class FlushStatus implements VersionedDataSerializable { private static Version[] serializationVersions = new Version[]{ Version.GFE_81 }; diff --git a/geode-core/src/main/java/com/gemstone/gemfire/cache/hdfs/internal/hoplog/HDFSFlushQueueArgs.java b/geode-core/src/main/java/com/gemstone/gemfire/cache/hdfs/internal/hoplog/HDFSFlushQueueArgs.java index aca711cb7af2..36e171bf8790 100644 --- a/geode-core/src/main/java/com/gemstone/gemfire/cache/hdfs/internal/hoplog/HDFSFlushQueueArgs.java +++ b/geode-core/src/main/java/com/gemstone/gemfire/cache/hdfs/internal/hoplog/HDFSFlushQueueArgs.java @@ -29,7 +29,6 @@ /** * Defines the arguments to the flush queue request. * - * @author bakera */ @SuppressWarnings("serial") public class HDFSFlushQueueArgs implements VersionedDataSerializable { diff --git a/geode-core/src/main/java/com/gemstone/gemfire/cache/hdfs/internal/hoplog/HDFSForceCompactionArgs.java b/geode-core/src/main/java/com/gemstone/gemfire/cache/hdfs/internal/hoplog/HDFSForceCompactionArgs.java index fb5188ddbd64..ec0f9ffd949b 100644 --- a/geode-core/src/main/java/com/gemstone/gemfire/cache/hdfs/internal/hoplog/HDFSForceCompactionArgs.java +++ b/geode-core/src/main/java/com/gemstone/gemfire/cache/hdfs/internal/hoplog/HDFSForceCompactionArgs.java @@ -29,7 +29,6 @@ /** * Arguments passed to the HDFSForceCompactionFunction * - * @author sbawaska */ @SuppressWarnings("serial") public class HDFSForceCompactionArgs implements VersionedDataSerializable { diff --git a/geode-core/src/main/java/com/gemstone/gemfire/cache/hdfs/internal/hoplog/HDFSForceCompactionFunction.java b/geode-core/src/main/java/com/gemstone/gemfire/cache/hdfs/internal/hoplog/HDFSForceCompactionFunction.java index 5222c0f7cdae..d26ac1b1caf7 100644 --- a/geode-core/src/main/java/com/gemstone/gemfire/cache/hdfs/internal/hoplog/HDFSForceCompactionFunction.java +++ b/geode-core/src/main/java/com/gemstone/gemfire/cache/hdfs/internal/hoplog/HDFSForceCompactionFunction.java @@ -37,7 +37,6 @@ * Function responsible for forcing a compaction on all members * of the system * - * @author sbawaska */ @SuppressWarnings("serial") public class HDFSForceCompactionFunction implements Function, InternalEntity { diff --git a/geode-core/src/main/java/com/gemstone/gemfire/cache/hdfs/internal/hoplog/HDFSForceCompactionResultCollector.java b/geode-core/src/main/java/com/gemstone/gemfire/cache/hdfs/internal/hoplog/HDFSForceCompactionResultCollector.java index 5e81b1392a00..ee5e4aa9e8e0 100644 --- a/geode-core/src/main/java/com/gemstone/gemfire/cache/hdfs/internal/hoplog/HDFSForceCompactionResultCollector.java +++ b/geode-core/src/main/java/com/gemstone/gemfire/cache/hdfs/internal/hoplog/HDFSForceCompactionResultCollector.java @@ -31,7 +31,6 @@ /** * - * @author sbawaska */ public class HDFSForceCompactionResultCollector implements LocalResultCollector> { diff --git a/geode-core/src/main/java/com/gemstone/gemfire/cache/hdfs/internal/hoplog/HDFSLastCompactionTimeFunction.java b/geode-core/src/main/java/com/gemstone/gemfire/cache/hdfs/internal/hoplog/HDFSLastCompactionTimeFunction.java index fe789c2a41cb..789fe4ddb428 100644 --- a/geode-core/src/main/java/com/gemstone/gemfire/cache/hdfs/internal/hoplog/HDFSLastCompactionTimeFunction.java +++ b/geode-core/src/main/java/com/gemstone/gemfire/cache/hdfs/internal/hoplog/HDFSLastCompactionTimeFunction.java @@ -26,7 +26,6 @@ * Function that returns the oldest timestamp among all the major * compacted buckets on the members * - * @author sbawaska */ @SuppressWarnings("serial") public class HDFSLastCompactionTimeFunction extends FunctionAdapter implements InternalEntity{ diff --git a/geode-core/src/main/java/com/gemstone/gemfire/cache/hdfs/internal/hoplog/HDFSStoreDirector.java b/geode-core/src/main/java/com/gemstone/gemfire/cache/hdfs/internal/hoplog/HDFSStoreDirector.java index 32c310f8ec98..880ef3e92203 100644 --- a/geode-core/src/main/java/com/gemstone/gemfire/cache/hdfs/internal/hoplog/HDFSStoreDirector.java +++ b/geode-core/src/main/java/com/gemstone/gemfire/cache/hdfs/internal/hoplog/HDFSStoreDirector.java @@ -27,7 +27,6 @@ /** * HDFSStoreDirector is created for managing all instances of HDFSStoreImpl. * - * @author Hemant Bhanawat */ public final class HDFSStoreDirector { private final ConcurrentHashMap storeMap = new ConcurrentHashMap(); diff --git a/geode-core/src/main/java/com/gemstone/gemfire/cache/hdfs/internal/hoplog/HDFSUnsortedHoplogOrganizer.java b/geode-core/src/main/java/com/gemstone/gemfire/cache/hdfs/internal/hoplog/HDFSUnsortedHoplogOrganizer.java index 59e08803ac51..cbb35cb3046a 100644 --- a/geode-core/src/main/java/com/gemstone/gemfire/cache/hdfs/internal/hoplog/HDFSUnsortedHoplogOrganizer.java +++ b/geode-core/src/main/java/com/gemstone/gemfire/cache/hdfs/internal/hoplog/HDFSUnsortedHoplogOrganizer.java @@ -46,7 +46,6 @@ * Manages unsorted Hoplog files for a bucket (Streaming Ingest option). An instance per bucket * will exist in each PR * - * @author hemantb * */ public class HDFSUnsortedHoplogOrganizer extends AbstractHoplogOrganizer { diff --git a/geode-core/src/main/java/com/gemstone/gemfire/cache/hdfs/internal/hoplog/HdfsSortedOplogOrganizer.java b/geode-core/src/main/java/com/gemstone/gemfire/cache/hdfs/internal/hoplog/HdfsSortedOplogOrganizer.java index 61b925b0440c..e8abb3853b65 100644 --- a/geode-core/src/main/java/com/gemstone/gemfire/cache/hdfs/internal/hoplog/HdfsSortedOplogOrganizer.java +++ b/geode-core/src/main/java/com/gemstone/gemfire/cache/hdfs/internal/hoplog/HdfsSortedOplogOrganizer.java @@ -80,7 +80,6 @@ * Manages sorted oplog files for a bucket. An instance per bucket will exist in * each PR * - * @author ashvina */ public class HdfsSortedOplogOrganizer extends AbstractHoplogOrganizer { public static final int AVG_NUM_KEYS_PER_INDEX_BLOCK = 200; @@ -1533,7 +1532,6 @@ Float computeGain(int from, int to, List> targets) { * will not face race condition. Read and scan operations on the bucket will * be affected. So reference counter is incremented for each read and scan. * - * @author ashvina */ private class HoplogReadersController implements HoplogReaderActivityListener { private Integer maxOpenFilesLimit; @@ -1970,7 +1968,6 @@ public void close() { * This utility class is used to filter temporary hoplogs in a bucket * directory * - * @author ashvina */ private static class TmpFilePathFilter implements PathFilter { @Override diff --git a/geode-core/src/main/java/com/gemstone/gemfire/cache/hdfs/internal/hoplog/Hoplog.java b/geode-core/src/main/java/com/gemstone/gemfire/cache/hdfs/internal/hoplog/Hoplog.java index a5030ae88b0c..e6227493cb1f 100644 --- a/geode-core/src/main/java/com/gemstone/gemfire/cache/hdfs/internal/hoplog/Hoplog.java +++ b/geode-core/src/main/java/com/gemstone/gemfire/cache/hdfs/internal/hoplog/Hoplog.java @@ -130,7 +130,6 @@ public interface HoplogReader extends HoplogSetReader { /** * Provides hoplog's reader's activity related events to owners * - * @author ashvina */ public interface HoplogReaderActivityListener { /** diff --git a/geode-core/src/main/java/com/gemstone/gemfire/cache/hdfs/internal/hoplog/HoplogConfig.java b/geode-core/src/main/java/com/gemstone/gemfire/cache/hdfs/internal/hoplog/HoplogConfig.java index f1e7dea95bdc..7b8415e2e3d3 100644 --- a/geode-core/src/main/java/com/gemstone/gemfire/cache/hdfs/internal/hoplog/HoplogConfig.java +++ b/geode-core/src/main/java/com/gemstone/gemfire/cache/hdfs/internal/hoplog/HoplogConfig.java @@ -21,7 +21,6 @@ * This interface defines all the hoplog configuration related constants. One * location simplifies searching for a constant * - * @author ashvina */ public interface HoplogConfig { // max number of open files per bucket. by default each region has 113 diff --git a/geode-core/src/main/java/com/gemstone/gemfire/cache/hdfs/internal/hoplog/SequenceFileHoplog.java b/geode-core/src/main/java/com/gemstone/gemfire/cache/hdfs/internal/hoplog/SequenceFileHoplog.java index fbb8f1409156..a2926ff0fef2 100644 --- a/geode-core/src/main/java/com/gemstone/gemfire/cache/hdfs/internal/hoplog/SequenceFileHoplog.java +++ b/geode-core/src/main/java/com/gemstone/gemfire/cache/hdfs/internal/hoplog/SequenceFileHoplog.java @@ -46,7 +46,6 @@ /** * Implements Sequence file based {@link Hoplog} * - * @author hemantb * */ public class SequenceFileHoplog extends AbstractHoplog{ diff --git a/geode-core/src/main/java/com/gemstone/gemfire/cache/hdfs/internal/hoplog/mapred/GFOutputFormat.java b/geode-core/src/main/java/com/gemstone/gemfire/cache/hdfs/internal/hoplog/mapred/GFOutputFormat.java index 864c608c5bec..1494e9faffb6 100644 --- a/geode-core/src/main/java/com/gemstone/gemfire/cache/hdfs/internal/hoplog/mapred/GFOutputFormat.java +++ b/geode-core/src/main/java/com/gemstone/gemfire/cache/hdfs/internal/hoplog/mapred/GFOutputFormat.java @@ -33,7 +33,6 @@ * Output format for gemfire. The records provided to writers created by this * output format are PUT in a live gemfire cluster. * - * @author ashvina */ public class GFOutputFormat extends com.gemstone.gemfire.cache.hdfs.internal.hoplog.mapreduce.GFOutputFormat diff --git a/geode-core/src/main/java/com/gemstone/gemfire/cache/hdfs/internal/hoplog/mapreduce/GFOutputFormat.java b/geode-core/src/main/java/com/gemstone/gemfire/cache/hdfs/internal/hoplog/mapreduce/GFOutputFormat.java index d5d045fc7bed..3be2ab0b31f4 100644 --- a/geode-core/src/main/java/com/gemstone/gemfire/cache/hdfs/internal/hoplog/mapreduce/GFOutputFormat.java +++ b/geode-core/src/main/java/com/gemstone/gemfire/cache/hdfs/internal/hoplog/mapreduce/GFOutputFormat.java @@ -41,7 +41,6 @@ * Output format for gemfire. The records provided to writers created by this * output format are PUT in a live gemfire cluster. * - * @author ashvina */ public class GFOutputFormat extends OutputFormat { public static final String REGION = "mapreduce.output.gfoutputformat.outputregion"; diff --git a/geode-core/src/main/java/com/gemstone/gemfire/cache/hdfs/internal/hoplog/mapreduce/HDFSSplitIterator.java b/geode-core/src/main/java/com/gemstone/gemfire/cache/hdfs/internal/hoplog/mapreduce/HDFSSplitIterator.java index 6b421e2da19e..869ad0ded6d0 100644 --- a/geode-core/src/main/java/com/gemstone/gemfire/cache/hdfs/internal/hoplog/mapreduce/HDFSSplitIterator.java +++ b/geode-core/src/main/java/com/gemstone/gemfire/cache/hdfs/internal/hoplog/mapreduce/HDFSSplitIterator.java @@ -39,7 +39,6 @@ * Iterates over the records in part of a hoplog. This iterator * is passed from the map reduce job into the gemfirexd LanguageConnectionContext * for gemfirexd to use as the iterator during the map phase. - * @author dsmith * */ public abstract class HDFSSplitIterator { diff --git a/geode-core/src/main/java/com/gemstone/gemfire/cache/hdfs/internal/hoplog/mapreduce/HoplogUtil.java b/geode-core/src/main/java/com/gemstone/gemfire/cache/hdfs/internal/hoplog/mapreduce/HoplogUtil.java index b70e65c0ce8b..c4c0d1c23f0f 100644 --- a/geode-core/src/main/java/com/gemstone/gemfire/cache/hdfs/internal/hoplog/mapreduce/HoplogUtil.java +++ b/geode-core/src/main/java/com/gemstone/gemfire/cache/hdfs/internal/hoplog/mapreduce/HoplogUtil.java @@ -364,7 +364,6 @@ private HoplogUtil() { * This class creates MR splits from hoplog files. This class leverages * CombineFileInputFormat to create locality, node and rack, aware splits * - * @author ashvina */ public static class HoplogOptimizedSplitter extends CombineFileInputFormat { private Collection hoplogs; diff --git a/geode-core/src/main/java/com/gemstone/gemfire/cache/hdfs/internal/hoplog/mapreduce/RWSplitIterator.java b/geode-core/src/main/java/com/gemstone/gemfire/cache/hdfs/internal/hoplog/mapreduce/RWSplitIterator.java index 68e09561c18b..23dd8406cec8 100644 --- a/geode-core/src/main/java/com/gemstone/gemfire/cache/hdfs/internal/hoplog/mapreduce/RWSplitIterator.java +++ b/geode-core/src/main/java/com/gemstone/gemfire/cache/hdfs/internal/hoplog/mapreduce/RWSplitIterator.java @@ -29,7 +29,6 @@ /** * An iterator that iterates over a split in a read/write hoplog - * @author dsmith */ public class RWSplitIterator extends HDFSSplitIterator { diff --git a/geode-core/src/main/java/com/gemstone/gemfire/cache/hdfs/internal/hoplog/mapreduce/StreamSplitIterator.java b/geode-core/src/main/java/com/gemstone/gemfire/cache/hdfs/internal/hoplog/mapreduce/StreamSplitIterator.java index f4c259983fb8..bfb2deb840e3 100644 --- a/geode-core/src/main/java/com/gemstone/gemfire/cache/hdfs/internal/hoplog/mapreduce/StreamSplitIterator.java +++ b/geode-core/src/main/java/com/gemstone/gemfire/cache/hdfs/internal/hoplog/mapreduce/StreamSplitIterator.java @@ -28,7 +28,6 @@ /** * An iterator that iterates over a split in a sequential hoplog. - * @author dsmith */ public class StreamSplitIterator extends HDFSSplitIterator { diff --git a/geode-core/src/main/java/com/gemstone/gemfire/cache/operations/CloseCQOperationContext.java b/geode-core/src/main/java/com/gemstone/gemfire/cache/operations/CloseCQOperationContext.java index 875ca5242f6b..3a29981d0712 100644 --- a/geode-core/src/main/java/com/gemstone/gemfire/cache/operations/CloseCQOperationContext.java +++ b/geode-core/src/main/java/com/gemstone/gemfire/cache/operations/CloseCQOperationContext.java @@ -23,7 +23,6 @@ * Encapsulates a {@link com.gemstone.gemfire.cache.operations.OperationContext.OperationCode#CLOSE_CQ} operation for the pre-operation * case. * - * @author Sumedh Wale * @since 5.5 */ public class CloseCQOperationContext extends ExecuteCQOperationContext { diff --git a/geode-core/src/main/java/com/gemstone/gemfire/cache/operations/DestroyOperationContext.java b/geode-core/src/main/java/com/gemstone/gemfire/cache/operations/DestroyOperationContext.java index 12db4bc5247b..48ae9e519ecb 100644 --- a/geode-core/src/main/java/com/gemstone/gemfire/cache/operations/DestroyOperationContext.java +++ b/geode-core/src/main/java/com/gemstone/gemfire/cache/operations/DestroyOperationContext.java @@ -22,7 +22,6 @@ * Encapsulates a {@link com.gemstone.gemfire.cache.operations.OperationContext.OperationCode#DESTROY} region operation having the key * object for both the pre-operation case and for post-operation updates. * - * @author Sumedh Wale * @since 5.5 */ public class DestroyOperationContext extends KeyOperationContext { diff --git a/geode-core/src/main/java/com/gemstone/gemfire/cache/operations/ExecuteCQOperationContext.java b/geode-core/src/main/java/com/gemstone/gemfire/cache/operations/ExecuteCQOperationContext.java index 1fd437ea73d5..b4a07648726d 100644 --- a/geode-core/src/main/java/com/gemstone/gemfire/cache/operations/ExecuteCQOperationContext.java +++ b/geode-core/src/main/java/com/gemstone/gemfire/cache/operations/ExecuteCQOperationContext.java @@ -23,7 +23,6 @@ * Encapsulates a continuous query registeration operation for both the * pre-operation and post-operation cases. * - * @author Sumedh Wale * @since 5.5 */ public class ExecuteCQOperationContext extends QueryOperationContext { diff --git a/geode-core/src/main/java/com/gemstone/gemfire/cache/operations/ExecuteFunctionOperationContext.java b/geode-core/src/main/java/com/gemstone/gemfire/cache/operations/ExecuteFunctionOperationContext.java index 37385b9ca4f8..e6bd455c0faa 100755 --- a/geode-core/src/main/java/com/gemstone/gemfire/cache/operations/ExecuteFunctionOperationContext.java +++ b/geode-core/src/main/java/com/gemstone/gemfire/cache/operations/ExecuteFunctionOperationContext.java @@ -22,7 +22,6 @@ /** * OperationContext for Function execution operation. This is for the pre-operation case * - * @author Yogesh Mahajan * @since 6.0 * */ diff --git a/geode-core/src/main/java/com/gemstone/gemfire/cache/operations/GetDurableCQsOperationContext.java b/geode-core/src/main/java/com/gemstone/gemfire/cache/operations/GetDurableCQsOperationContext.java index a836fa1cf4f5..a8de1a95e4ae 100755 --- a/geode-core/src/main/java/com/gemstone/gemfire/cache/operations/GetDurableCQsOperationContext.java +++ b/geode-core/src/main/java/com/gemstone/gemfire/cache/operations/GetDurableCQsOperationContext.java @@ -24,7 +24,6 @@ * Encapsulates a {@link com.gemstone.gemfire.cache.operations.OperationContext.OperationCode#GET_DURABLE_CQS} operation for the pre-operation * case. * - * @author jhuynh * @since 7.0 */ public class GetDurableCQsOperationContext extends OperationContext { diff --git a/geode-core/src/main/java/com/gemstone/gemfire/cache/operations/GetOperationContext.java b/geode-core/src/main/java/com/gemstone/gemfire/cache/operations/GetOperationContext.java index ae4cf13bbd6e..43b9e3aab0a2 100644 --- a/geode-core/src/main/java/com/gemstone/gemfire/cache/operations/GetOperationContext.java +++ b/geode-core/src/main/java/com/gemstone/gemfire/cache/operations/GetOperationContext.java @@ -23,7 +23,6 @@ * object for the pre-operation case and both key, value objects for the * post-operation case. * - * @author Sumedh Wale * @since 5.5 */ public class GetOperationContext extends KeyValueOperationContext { diff --git a/geode-core/src/main/java/com/gemstone/gemfire/cache/operations/InterestOperationContext.java b/geode-core/src/main/java/com/gemstone/gemfire/cache/operations/InterestOperationContext.java index 41d7b6cff8fa..79632551bd73 100644 --- a/geode-core/src/main/java/com/gemstone/gemfire/cache/operations/InterestOperationContext.java +++ b/geode-core/src/main/java/com/gemstone/gemfire/cache/operations/InterestOperationContext.java @@ -21,7 +21,6 @@ /** * Encapsulates registration/unregistration of interest in a region. * - * @author Sumedh Wale * @since 5.5 */ public abstract class InterestOperationContext extends OperationContext { diff --git a/geode-core/src/main/java/com/gemstone/gemfire/cache/operations/InterestType.java b/geode-core/src/main/java/com/gemstone/gemfire/cache/operations/InterestType.java index 7a2725dec36f..aaa46278f13f 100644 --- a/geode-core/src/main/java/com/gemstone/gemfire/cache/operations/InterestType.java +++ b/geode-core/src/main/java/com/gemstone/gemfire/cache/operations/InterestType.java @@ -20,7 +20,6 @@ /** * Enumeration for various interest types supported by GemFire. * - * @author Sumedh Wale * @since 5.5 */ public final class InterestType { diff --git a/geode-core/src/main/java/com/gemstone/gemfire/cache/operations/InvalidateOperationContext.java b/geode-core/src/main/java/com/gemstone/gemfire/cache/operations/InvalidateOperationContext.java index cd8fb1ec6955..75b0c3754e31 100644 --- a/geode-core/src/main/java/com/gemstone/gemfire/cache/operations/InvalidateOperationContext.java +++ b/geode-core/src/main/java/com/gemstone/gemfire/cache/operations/InvalidateOperationContext.java @@ -22,7 +22,6 @@ * Encapsulates a {@link com.gemstone.gemfire.cache.operations.OperationContext.OperationCode#INVALIDATE} region operation having the key * object for both the pre-operation case and for post-operation updates. * - * @author Kumar Neeraj * @since 5.5 */ public class InvalidateOperationContext extends KeyOperationContext { diff --git a/geode-core/src/main/java/com/gemstone/gemfire/cache/operations/KeyOperationContext.java b/geode-core/src/main/java/com/gemstone/gemfire/cache/operations/KeyOperationContext.java index fc4dc62eaa67..71430afff5ee 100644 --- a/geode-core/src/main/java/com/gemstone/gemfire/cache/operations/KeyOperationContext.java +++ b/geode-core/src/main/java/com/gemstone/gemfire/cache/operations/KeyOperationContext.java @@ -24,7 +24,6 @@ * {@link com.gemstone.gemfire.cache.operations.OperationContext.OperationCode#DESTROY} * and {@link com.gemstone.gemfire.cache.operations.OperationContext.OperationCode#CONTAINS_KEY}. * - * @author Sumedh Wale * @since 5.5 */ public abstract class KeyOperationContext extends OperationContext { diff --git a/geode-core/src/main/java/com/gemstone/gemfire/cache/operations/KeySetOperationContext.java b/geode-core/src/main/java/com/gemstone/gemfire/cache/operations/KeySetOperationContext.java index 89c611375b14..5c0eeb91f033 100644 --- a/geode-core/src/main/java/com/gemstone/gemfire/cache/operations/KeySetOperationContext.java +++ b/geode-core/src/main/java/com/gemstone/gemfire/cache/operations/KeySetOperationContext.java @@ -26,7 +26,6 @@ * Encapsulates a {@link com.gemstone.gemfire.cache.operations.OperationContext.OperationCode#KEY_SET} operation for both the * pre-operation and post-operation cases. * - * @author Sumedh Wale * @since 5.5 */ public class KeySetOperationContext extends OperationContext { diff --git a/geode-core/src/main/java/com/gemstone/gemfire/cache/operations/KeyValueOperationContext.java b/geode-core/src/main/java/com/gemstone/gemfire/cache/operations/KeyValueOperationContext.java index f8722351d0a9..7f7ab8c404ce 100644 --- a/geode-core/src/main/java/com/gemstone/gemfire/cache/operations/KeyValueOperationContext.java +++ b/geode-core/src/main/java/com/gemstone/gemfire/cache/operations/KeyValueOperationContext.java @@ -26,7 +26,6 @@ * Encapsulates a region operation that requires both key and serialized value * for the pre-operation and post-operation cases. * - * @author Sumedh Wale * @since 5.5 */ public abstract class KeyValueOperationContext extends KeyOperationContext { diff --git a/geode-core/src/main/java/com/gemstone/gemfire/cache/operations/OperationContext.java b/geode-core/src/main/java/com/gemstone/gemfire/cache/operations/OperationContext.java index 5cae85dd0cb6..9482d6b4f8de 100644 --- a/geode-core/src/main/java/com/gemstone/gemfire/cache/operations/OperationContext.java +++ b/geode-core/src/main/java/com/gemstone/gemfire/cache/operations/OperationContext.java @@ -32,7 +32,6 @@ * * Implementations of this interface are not expected to be thread-safe. * - * @author Sumedh Wale * @since 5.5 */ public abstract class OperationContext { @@ -41,7 +40,6 @@ public abstract class OperationContext { * Enumeration for various cache operations. Implementations for each of the * supported operation listed here are provided. * - * @author Sumedh Wale * @since 5.5 */ public static final class OperationCode { diff --git a/geode-core/src/main/java/com/gemstone/gemfire/cache/operations/PutAllOperationContext.java b/geode-core/src/main/java/com/gemstone/gemfire/cache/operations/PutAllOperationContext.java index b05216be9268..fbdd96446383 100644 --- a/geode-core/src/main/java/com/gemstone/gemfire/cache/operations/PutAllOperationContext.java +++ b/geode-core/src/main/java/com/gemstone/gemfire/cache/operations/PutAllOperationContext.java @@ -36,7 +36,6 @@ * Encapsulates a {@link com.gemstone.gemfire.cache.operations.OperationContext.OperationCode#PUTALL} operation for both the * pre-operation and post-operation cases. * - * @author Gester Zhou * @since 5.7 */ public class PutAllOperationContext extends OperationContext { @@ -148,7 +147,6 @@ public void setCallbackArg(Object callbackArg) { * It was added to fix bug 51604. * It also make sure that customers do not see Token.INVALID and * CachedDeserializable to fix bug 51625. - * @author dschneider */ private static class UpdateOnlyMap implements Map, Serializable { private static final long serialVersionUID = -1034234728574286014L; diff --git a/geode-core/src/main/java/com/gemstone/gemfire/cache/operations/PutOperationContext.java b/geode-core/src/main/java/com/gemstone/gemfire/cache/operations/PutOperationContext.java index d97f0a0d747b..867c25617d96 100644 --- a/geode-core/src/main/java/com/gemstone/gemfire/cache/operations/PutOperationContext.java +++ b/geode-core/src/main/java/com/gemstone/gemfire/cache/operations/PutOperationContext.java @@ -24,7 +24,6 @@ * and value objects for for both the pre-operation case and for post-operation * updates. * - * @author Sumedh Wale * @since 5.5 */ public class PutOperationContext extends KeyValueOperationContext { diff --git a/geode-core/src/main/java/com/gemstone/gemfire/cache/operations/QueryOperationContext.java b/geode-core/src/main/java/com/gemstone/gemfire/cache/operations/QueryOperationContext.java index 2d098c523824..f9711b7e64bf 100644 --- a/geode-core/src/main/java/com/gemstone/gemfire/cache/operations/QueryOperationContext.java +++ b/geode-core/src/main/java/com/gemstone/gemfire/cache/operations/QueryOperationContext.java @@ -25,7 +25,6 @@ * Encapsulates a cache query operation for both the pre-operation and * post-operation cases. * - * @author Sumedh Wale * @since 5.5 */ public class QueryOperationContext extends OperationContext { diff --git a/geode-core/src/main/java/com/gemstone/gemfire/cache/operations/RegionClearOperationContext.java b/geode-core/src/main/java/com/gemstone/gemfire/cache/operations/RegionClearOperationContext.java index 0fb1c940a41b..370ec6e87d67 100644 --- a/geode-core/src/main/java/com/gemstone/gemfire/cache/operations/RegionClearOperationContext.java +++ b/geode-core/src/main/java/com/gemstone/gemfire/cache/operations/RegionClearOperationContext.java @@ -22,7 +22,6 @@ * Encapsulates a {@link com.gemstone.gemfire.cache.operations.OperationContext.OperationCode#REGION_CLEAR} operation for both the * pre-operation and post-operation cases. * - * @author Sumedh Wale * @since 5.5 */ public class RegionClearOperationContext extends RegionOperationContext { diff --git a/geode-core/src/main/java/com/gemstone/gemfire/cache/operations/RegionCreateOperationContext.java b/geode-core/src/main/java/com/gemstone/gemfire/cache/operations/RegionCreateOperationContext.java index 5c0f297f3e32..430ed084c4f5 100644 --- a/geode-core/src/main/java/com/gemstone/gemfire/cache/operations/RegionCreateOperationContext.java +++ b/geode-core/src/main/java/com/gemstone/gemfire/cache/operations/RegionCreateOperationContext.java @@ -21,7 +21,6 @@ * Encapsulates a {@link com.gemstone.gemfire.cache.operations.OperationContext.OperationCode#REGION_CREATE} operation for both the * pre-operation and post-operation cases. * - * @author Sumedh Wale * @since 5.5 */ public class RegionCreateOperationContext extends OperationContext { diff --git a/geode-core/src/main/java/com/gemstone/gemfire/cache/operations/RegionDestroyOperationContext.java b/geode-core/src/main/java/com/gemstone/gemfire/cache/operations/RegionDestroyOperationContext.java index d9d9f27278f1..d4693d04d88d 100644 --- a/geode-core/src/main/java/com/gemstone/gemfire/cache/operations/RegionDestroyOperationContext.java +++ b/geode-core/src/main/java/com/gemstone/gemfire/cache/operations/RegionDestroyOperationContext.java @@ -22,7 +22,6 @@ * Encapsulates a {@link com.gemstone.gemfire.cache.operations.OperationContext.OperationCode#REGION_DESTROY} operation for both the * pre-operation and post-operation cases. * - * @author Sumedh Wale * @since 5.5 */ public class RegionDestroyOperationContext extends RegionOperationContext { diff --git a/geode-core/src/main/java/com/gemstone/gemfire/cache/operations/RegionOperationContext.java b/geode-core/src/main/java/com/gemstone/gemfire/cache/operations/RegionOperationContext.java index a959e12988b7..ba199c6f8453 100644 --- a/geode-core/src/main/java/com/gemstone/gemfire/cache/operations/RegionOperationContext.java +++ b/geode-core/src/main/java/com/gemstone/gemfire/cache/operations/RegionOperationContext.java @@ -24,7 +24,6 @@ * {@link com.gemstone.gemfire.cache.operations.OperationContext.OperationCode#REGION_CLEAR} * and {@link com.gemstone.gemfire.cache.operations.OperationContext.OperationCode#REGION_DESTROY}. * - * @author Sumedh Wale * @since 5.5 */ public abstract class RegionOperationContext extends OperationContext { diff --git a/geode-core/src/main/java/com/gemstone/gemfire/cache/operations/RegisterInterestOperationContext.java b/geode-core/src/main/java/com/gemstone/gemfire/cache/operations/RegisterInterestOperationContext.java index 60055a828317..4189c31c85b0 100644 --- a/geode-core/src/main/java/com/gemstone/gemfire/cache/operations/RegisterInterestOperationContext.java +++ b/geode-core/src/main/java/com/gemstone/gemfire/cache/operations/RegisterInterestOperationContext.java @@ -23,7 +23,6 @@ * Encapsulates a {@link com.gemstone.gemfire.cache.operations.OperationContext.OperationCode#REGISTER_INTEREST} region operation for * the pre-operation case. * - * @author Sumedh Wale * @since 5.5 */ public class RegisterInterestOperationContext extends InterestOperationContext { diff --git a/geode-core/src/main/java/com/gemstone/gemfire/cache/operations/RemoveAllOperationContext.java b/geode-core/src/main/java/com/gemstone/gemfire/cache/operations/RemoveAllOperationContext.java index fa68cceb385e..ebc3694d50ab 100644 --- a/geode-core/src/main/java/com/gemstone/gemfire/cache/operations/RemoveAllOperationContext.java +++ b/geode-core/src/main/java/com/gemstone/gemfire/cache/operations/RemoveAllOperationContext.java @@ -26,7 +26,6 @@ * Encapsulates a {@link com.gemstone.gemfire.cache.operations.OperationContext.OperationCode#REMOVEALL} operation for both the * pre-operation and post-operation cases. * - * @author Darrel Schneider * @since 8.1 */ public class RemoveAllOperationContext extends OperationContext { diff --git a/geode-core/src/main/java/com/gemstone/gemfire/cache/operations/StopCQOperationContext.java b/geode-core/src/main/java/com/gemstone/gemfire/cache/operations/StopCQOperationContext.java index 6b24f6c2f4a1..1c28f75aa4d1 100644 --- a/geode-core/src/main/java/com/gemstone/gemfire/cache/operations/StopCQOperationContext.java +++ b/geode-core/src/main/java/com/gemstone/gemfire/cache/operations/StopCQOperationContext.java @@ -24,7 +24,6 @@ * Encapsulates a {@link com.gemstone.gemfire.cache.operations.OperationContext.OperationCode#STOP_CQ} operation for the pre-operation * case. * - * @author Sumedh Wale * @since 5.5 */ public class StopCQOperationContext extends ExecuteCQOperationContext { diff --git a/geode-core/src/main/java/com/gemstone/gemfire/cache/operations/UnregisterInterestOperationContext.java b/geode-core/src/main/java/com/gemstone/gemfire/cache/operations/UnregisterInterestOperationContext.java index fb89fa7a6c7a..078066e2575a 100644 --- a/geode-core/src/main/java/com/gemstone/gemfire/cache/operations/UnregisterInterestOperationContext.java +++ b/geode-core/src/main/java/com/gemstone/gemfire/cache/operations/UnregisterInterestOperationContext.java @@ -22,7 +22,6 @@ * Encapsulates a {@link com.gemstone.gemfire.cache.operations.OperationContext.OperationCode#UNREGISTER_INTEREST} region operation for * the pre-operation case. * - * @author Sumedh Wale * @since 5.5 */ public class UnregisterInterestOperationContext extends InterestOperationContext { diff --git a/geode-core/src/main/java/com/gemstone/gemfire/cache/partition/PartitionListener.java b/geode-core/src/main/java/com/gemstone/gemfire/cache/partition/PartitionListener.java index 8e9296fa80d6..e5cd2d7e86a4 100644 --- a/geode-core/src/main/java/com/gemstone/gemfire/cache/partition/PartitionListener.java +++ b/geode-core/src/main/java/com/gemstone/gemfire/cache/partition/PartitionListener.java @@ -78,7 +78,6 @@ * * Note : Please contact support@gemstone.com before using these APIs * - * @author Yogesh Mahajan * @since 6.5 * */ diff --git a/geode-core/src/main/java/com/gemstone/gemfire/cache/partition/PartitionListenerAdapter.java b/geode-core/src/main/java/com/gemstone/gemfire/cache/partition/PartitionListenerAdapter.java index b95065671a26..b706dadeb620 100644 --- a/geode-core/src/main/java/com/gemstone/gemfire/cache/partition/PartitionListenerAdapter.java +++ b/geode-core/src/main/java/com/gemstone/gemfire/cache/partition/PartitionListenerAdapter.java @@ -30,7 +30,6 @@ * Note : Please request help on the Geode developer mailing list * (dev@geode.incubator.apache.org) before using these APIs. * - * @author Barry Oglesby * * @since 6.6.2 */ diff --git a/geode-core/src/main/java/com/gemstone/gemfire/cache/partition/PartitionNotAvailableException.java b/geode-core/src/main/java/com/gemstone/gemfire/cache/partition/PartitionNotAvailableException.java index 96f7ee9bc201..5a737fde1ee9 100644 --- a/geode-core/src/main/java/com/gemstone/gemfire/cache/partition/PartitionNotAvailableException.java +++ b/geode-core/src/main/java/com/gemstone/gemfire/cache/partition/PartitionNotAvailableException.java @@ -22,7 +22,6 @@ * This exception is thrown when for the given fixed partition, datastore * (local-max-memory > 0) is not available. * - * @author kbachhhav * @since 6.6 */ diff --git a/geode-core/src/main/java/com/gemstone/gemfire/cache/partition/PartitionRegionHelper.java b/geode-core/src/main/java/com/gemstone/gemfire/cache/partition/PartitionRegionHelper.java index 8306c2c4696f..b40e02c01368 100644 --- a/geode-core/src/main/java/com/gemstone/gemfire/cache/partition/PartitionRegionHelper.java +++ b/geode-core/src/main/java/com/gemstone/gemfire/cache/partition/PartitionRegionHelper.java @@ -69,8 +69,6 @@ * // ... * * - * @author Mitch Thomas - * @author Yogesh Mahajan * * @since 6.0 * @see FunctionService#onRegion(Region) diff --git a/geode-core/src/main/java/com/gemstone/gemfire/cache/persistence/ConflictingPersistentDataException.java b/geode-core/src/main/java/com/gemstone/gemfire/cache/persistence/ConflictingPersistentDataException.java index c08d46cc20e6..f9fa1b0b1a2e 100644 --- a/geode-core/src/main/java/com/gemstone/gemfire/cache/persistence/ConflictingPersistentDataException.java +++ b/geode-core/src/main/java/com/gemstone/gemfire/cache/persistence/ConflictingPersistentDataException.java @@ -29,7 +29,6 @@ * persistent files are completely different. In that case, gemfire throws this * exception rather than discarding one of the sets of persistent files. * - * @author dsmith * @since 6.5 */ public class ConflictingPersistentDataException extends GemFireException { diff --git a/geode-core/src/main/java/com/gemstone/gemfire/cache/persistence/PartitionOfflineException.java b/geode-core/src/main/java/com/gemstone/gemfire/cache/persistence/PartitionOfflineException.java index f9882e11eb1a..c1ba16a020c1 100644 --- a/geode-core/src/main/java/com/gemstone/gemfire/cache/persistence/PartitionOfflineException.java +++ b/geode-core/src/main/java/com/gemstone/gemfire/cache/persistence/PartitionOfflineException.java @@ -36,7 +36,6 @@ * the region (such as a put), it is possible that the change was actually * persisted to disk before the member went offline. * - * @author dsmith * @since 6.5 * */ diff --git a/geode-core/src/main/java/com/gemstone/gemfire/cache/persistence/PersistentID.java b/geode-core/src/main/java/com/gemstone/gemfire/cache/persistence/PersistentID.java index 4d10a8ce49d0..900dda4a5a77 100644 --- a/geode-core/src/main/java/com/gemstone/gemfire/cache/persistence/PersistentID.java +++ b/geode-core/src/main/java/com/gemstone/gemfire/cache/persistence/PersistentID.java @@ -35,7 +35,6 @@ * members are waiting for. See * {@link AdminDistributedSystem#getMissingPersistentMembers()} * - * @author dsmith * @since 6.5 * */ diff --git a/geode-core/src/main/java/com/gemstone/gemfire/cache/persistence/PersistentReplicatesOfflineException.java b/geode-core/src/main/java/com/gemstone/gemfire/cache/persistence/PersistentReplicatesOfflineException.java index 13a3883438a6..4fcf911a52bd 100644 --- a/geode-core/src/main/java/com/gemstone/gemfire/cache/persistence/PersistentReplicatesOfflineException.java +++ b/geode-core/src/main/java/com/gemstone/gemfire/cache/persistence/PersistentReplicatesOfflineException.java @@ -25,7 +25,6 @@ * If you see this exception you should restart members that are * configured for hosting persistent replicates. * - * @author sbawaska * @since 7.0 */ public class PersistentReplicatesOfflineException extends GemFireException { diff --git a/geode-core/src/main/java/com/gemstone/gemfire/cache/persistence/RevokeFailedException.java b/geode-core/src/main/java/com/gemstone/gemfire/cache/persistence/RevokeFailedException.java index 06c17a3f595f..a1d25760ea52 100644 --- a/geode-core/src/main/java/com/gemstone/gemfire/cache/persistence/RevokeFailedException.java +++ b/geode-core/src/main/java/com/gemstone/gemfire/cache/persistence/RevokeFailedException.java @@ -23,7 +23,6 @@ * with that persistent ID is currently running. You can only revoke * members which is not running. * - * @author dsmith * @since 6.6.2 */ public class RevokeFailedException extends GemFireException { diff --git a/geode-core/src/main/java/com/gemstone/gemfire/cache/persistence/RevokedPersistentDataException.java b/geode-core/src/main/java/com/gemstone/gemfire/cache/persistence/RevokedPersistentDataException.java index 0397ba92856f..305bc66db9f3 100644 --- a/geode-core/src/main/java/com/gemstone/gemfire/cache/persistence/RevokedPersistentDataException.java +++ b/geode-core/src/main/java/com/gemstone/gemfire/cache/persistence/RevokedPersistentDataException.java @@ -30,7 +30,6 @@ * persistent files are removed. See * {@link AdminDistributedSystem#revokePersistentMember(java.net.InetAddress, String)} * - * @author dsmith * @since 7.0 */ public class RevokedPersistentDataException extends GemFireException { diff --git a/geode-core/src/main/java/com/gemstone/gemfire/cache/query/Aggregator.java b/geode-core/src/main/java/com/gemstone/gemfire/cache/query/Aggregator.java index c906378fb1a9..6991e537bc97 100644 --- a/geode-core/src/main/java/com/gemstone/gemfire/cache/query/Aggregator.java +++ b/geode-core/src/main/java/com/gemstone/gemfire/cache/query/Aggregator.java @@ -21,7 +21,6 @@ * result. In addition to the methods in the interface, implementing classes * must have a 0-arg public constructor. * - * @author ashahid * */ public interface Aggregator { diff --git a/geode-core/src/main/java/com/gemstone/gemfire/cache/query/AmbiguousNameException.java b/geode-core/src/main/java/com/gemstone/gemfire/cache/query/AmbiguousNameException.java index 57077176e26e..9995b56a3c58 100644 --- a/geode-core/src/main/java/com/gemstone/gemfire/cache/query/AmbiguousNameException.java +++ b/geode-core/src/main/java/com/gemstone/gemfire/cache/query/AmbiguousNameException.java @@ -21,7 +21,6 @@ * more than one object in scope or if there is more than one maximally specific * overridden method in a class. * - * @author Eric Zoerner * @since 4.0 */ diff --git a/geode-core/src/main/java/com/gemstone/gemfire/cache/query/CqAttributes.java b/geode-core/src/main/java/com/gemstone/gemfire/cache/query/CqAttributes.java index 41b556bd61f1..aaffb3fec4d7 100644 --- a/geode-core/src/main/java/com/gemstone/gemfire/cache/query/CqAttributes.java +++ b/geode-core/src/main/java/com/gemstone/gemfire/cache/query/CqAttributes.java @@ -24,7 +24,6 @@ * * For compatibility rules and default values, see {@link CqAttributesFactory}. * - * @author Anil * @since 5.5 */ diff --git a/geode-core/src/main/java/com/gemstone/gemfire/cache/query/CqAttributesFactory.java b/geode-core/src/main/java/com/gemstone/gemfire/cache/query/CqAttributesFactory.java index 3a1dae1c5869..71988d54eedf 100644 --- a/geode-core/src/main/java/com/gemstone/gemfire/cache/query/CqAttributesFactory.java +++ b/geode-core/src/main/java/com/gemstone/gemfire/cache/query/CqAttributesFactory.java @@ -45,7 +45,6 @@ * * @see CqAttributes * - * @author Anil * @since 5.5 */ public class CqAttributesFactory { diff --git a/geode-core/src/main/java/com/gemstone/gemfire/cache/query/CqAttributesMutator.java b/geode-core/src/main/java/com/gemstone/gemfire/cache/query/CqAttributesMutator.java index e72f18956ecf..d065e7627a13 100644 --- a/geode-core/src/main/java/com/gemstone/gemfire/cache/query/CqAttributesMutator.java +++ b/geode-core/src/main/java/com/gemstone/gemfire/cache/query/CqAttributesMutator.java @@ -22,7 +22,6 @@ * Each CqQuery has an CqAttributesMutator interface which supports modification * of certain CQ attributes after the CQ has been created. * - * @author anil * @since 5.5 */ public interface CqAttributesMutator { diff --git a/geode-core/src/main/java/com/gemstone/gemfire/cache/query/CqClosedException.java b/geode-core/src/main/java/com/gemstone/gemfire/cache/query/CqClosedException.java index a49d34c952dc..a1afc3016fd2 100755 --- a/geode-core/src/main/java/com/gemstone/gemfire/cache/query/CqClosedException.java +++ b/geode-core/src/main/java/com/gemstone/gemfire/cache/query/CqClosedException.java @@ -22,7 +22,6 @@ /** * Thrown if the CqQuery on which the operation performed is closed. * - * @author Anil * @since 5.5 */ diff --git a/geode-core/src/main/java/com/gemstone/gemfire/cache/query/CqEvent.java b/geode-core/src/main/java/com/gemstone/gemfire/cache/query/CqEvent.java index fd5a17971d14..41e5c80c8ab1 100644 --- a/geode-core/src/main/java/com/gemstone/gemfire/cache/query/CqEvent.java +++ b/geode-core/src/main/java/com/gemstone/gemfire/cache/query/CqEvent.java @@ -29,7 +29,6 @@ * event. * The CqEvent is not an extension of CacheEvent. * - * @author anil * @since 5.5 */ public interface CqEvent { diff --git a/geode-core/src/main/java/com/gemstone/gemfire/cache/query/CqException.java b/geode-core/src/main/java/com/gemstone/gemfire/cache/query/CqException.java index 5e30e5514d62..28265f936349 100755 --- a/geode-core/src/main/java/com/gemstone/gemfire/cache/query/CqException.java +++ b/geode-core/src/main/java/com/gemstone/gemfire/cache/query/CqException.java @@ -20,7 +20,6 @@ /** * Thrown during continuous query creation, execution time. * - * @author Anil * @since 5.5 */ diff --git a/geode-core/src/main/java/com/gemstone/gemfire/cache/query/CqExistsException.java b/geode-core/src/main/java/com/gemstone/gemfire/cache/query/CqExistsException.java index 0cca56738bc3..ba084366ae3e 100755 --- a/geode-core/src/main/java/com/gemstone/gemfire/cache/query/CqExistsException.java +++ b/geode-core/src/main/java/com/gemstone/gemfire/cache/query/CqExistsException.java @@ -19,7 +19,6 @@ /** * Thrown if a CQ by this name already exists on this client - * @author Anil * @since 5.5 */ diff --git a/geode-core/src/main/java/com/gemstone/gemfire/cache/query/CqListener.java b/geode-core/src/main/java/com/gemstone/gemfire/cache/query/CqListener.java index 30e5460f0c42..5dddcd220cbd 100644 --- a/geode-core/src/main/java/com/gemstone/gemfire/cache/query/CqListener.java +++ b/geode-core/src/main/java/com/gemstone/gemfire/cache/query/CqListener.java @@ -25,7 +25,6 @@ * is an event satisfied by the CQ and the other called when there is an * error during CQ processing. * - * @author Anil * @since 5.5 */ diff --git a/geode-core/src/main/java/com/gemstone/gemfire/cache/query/CqQuery.java b/geode-core/src/main/java/com/gemstone/gemfire/cache/query/CqQuery.java index b66597b46246..f7b694de1155 100644 --- a/geode-core/src/main/java/com/gemstone/gemfire/cache/query/CqQuery.java +++ b/geode-core/src/main/java/com/gemstone/gemfire/cache/query/CqQuery.java @@ -24,7 +24,6 @@ * The methods allow you to retrieve CQ related information, operate on CQ * like execute, stop, close and get the state of the CQ. * - * @author Rao Madduri * @since 5.5 */ diff --git a/geode-core/src/main/java/com/gemstone/gemfire/cache/query/CqResults.java b/geode-core/src/main/java/com/gemstone/gemfire/cache/query/CqResults.java index 2245eb36a9e5..2bd5c2b5d23c 100644 --- a/geode-core/src/main/java/com/gemstone/gemfire/cache/query/CqResults.java +++ b/geode-core/src/main/java/com/gemstone/gemfire/cache/query/CqResults.java @@ -44,7 +44,6 @@ * @see com.gemstone.gemfire.cache.query.Query#execute() * @see com.gemstone.gemfire.cache.query.CqQuery#executeWithInitialResults() * - * @author anil gingade * @since 6.5 */ public interface CqResults extends SelectResults { diff --git a/geode-core/src/main/java/com/gemstone/gemfire/cache/query/CqServiceStatistics.java b/geode-core/src/main/java/com/gemstone/gemfire/cache/query/CqServiceStatistics.java index 634c4da535c2..ccdc1a5fa8bb 100644 --- a/geode-core/src/main/java/com/gemstone/gemfire/cache/query/CqServiceStatistics.java +++ b/geode-core/src/main/java/com/gemstone/gemfire/cache/query/CqServiceStatistics.java @@ -22,7 +22,6 @@ * about the CQs of a client. * * @since 5.5 - * @author anil */ public interface CqServiceStatistics { diff --git a/geode-core/src/main/java/com/gemstone/gemfire/cache/query/CqState.java b/geode-core/src/main/java/com/gemstone/gemfire/cache/query/CqState.java index 3f58b6b1fc7f..fab057914efa 100644 --- a/geode-core/src/main/java/com/gemstone/gemfire/cache/query/CqState.java +++ b/geode-core/src/main/java/com/gemstone/gemfire/cache/query/CqState.java @@ -21,7 +21,6 @@ * This interface gives information on the state of a CqQuery. * It is provided by the getState method of the CqQuery instance. * - * @author anil * @since 5.5 */ diff --git a/geode-core/src/main/java/com/gemstone/gemfire/cache/query/CqStatistics.java b/geode-core/src/main/java/com/gemstone/gemfire/cache/query/CqStatistics.java index bf39aea18361..f6ccf44eccf7 100644 --- a/geode-core/src/main/java/com/gemstone/gemfire/cache/query/CqStatistics.java +++ b/geode-core/src/main/java/com/gemstone/gemfire/cache/query/CqStatistics.java @@ -22,7 +22,6 @@ * represented by the CqQuery object. * * @since 5.5 - * @author Anil */ public interface CqStatistics { diff --git a/geode-core/src/main/java/com/gemstone/gemfire/cache/query/CqStatusListener.java b/geode-core/src/main/java/com/gemstone/gemfire/cache/query/CqStatusListener.java index c1a58fabca51..9e86130a95c8 100644 --- a/geode-core/src/main/java/com/gemstone/gemfire/cache/query/CqStatusListener.java +++ b/geode-core/src/main/java/com/gemstone/gemfire/cache/query/CqStatusListener.java @@ -24,7 +24,6 @@ * the cq is disconnected * * - * @author jhuynh * @since 7.0 */ diff --git a/geode-core/src/main/java/com/gemstone/gemfire/cache/query/FunctionDomainException.java b/geode-core/src/main/java/com/gemstone/gemfire/cache/query/FunctionDomainException.java index d4867cec121f..8b220eadcf76 100644 --- a/geode-core/src/main/java/com/gemstone/gemfire/cache/query/FunctionDomainException.java +++ b/geode-core/src/main/java/com/gemstone/gemfire/cache/query/FunctionDomainException.java @@ -19,7 +19,6 @@ /** * Thrown if the domain of a function is not legal. * - * @author Eric Zoerner * @since 4.0 */ diff --git a/geode-core/src/main/java/com/gemstone/gemfire/cache/query/Index.java b/geode-core/src/main/java/com/gemstone/gemfire/cache/query/Index.java index 6adcca4bb058..7d13aec9aa88 100644 --- a/geode-core/src/main/java/com/gemstone/gemfire/cache/query/Index.java +++ b/geode-core/src/main/java/com/gemstone/gemfire/cache/query/Index.java @@ -46,7 +46,6 @@ * @see QueryService#createIndex(String, IndexType, String, String) * @see IndexType * - * @author Eric Zoerner * @since 4.0 */ public interface Index { diff --git a/geode-core/src/main/java/com/gemstone/gemfire/cache/query/IndexCreationException.java b/geode-core/src/main/java/com/gemstone/gemfire/cache/query/IndexCreationException.java index 4d95e7978131..75613e85dd86 100755 --- a/geode-core/src/main/java/com/gemstone/gemfire/cache/query/IndexCreationException.java +++ b/geode-core/src/main/java/com/gemstone/gemfire/cache/query/IndexCreationException.java @@ -18,7 +18,6 @@ /** * This class is used to represent any partitioned index creation exceptions. * - * @author rdubey */ public class IndexCreationException extends QueryException { diff --git a/geode-core/src/main/java/com/gemstone/gemfire/cache/query/IndexExistsException.java b/geode-core/src/main/java/com/gemstone/gemfire/cache/query/IndexExistsException.java index 2a714b6ae1bd..c8972cfc8935 100644 --- a/geode-core/src/main/java/com/gemstone/gemfire/cache/query/IndexExistsException.java +++ b/geode-core/src/main/java/com/gemstone/gemfire/cache/query/IndexExistsException.java @@ -26,7 +26,6 @@ * Thrown while creating the new index if there exists an Index with * the same definition as new index. * - * @author vaibhav * @since 4.0 */ diff --git a/geode-core/src/main/java/com/gemstone/gemfire/cache/query/IndexInvalidException.java b/geode-core/src/main/java/com/gemstone/gemfire/cache/query/IndexInvalidException.java index b1b953a596f9..d82c9cee2358 100644 --- a/geode-core/src/main/java/com/gemstone/gemfire/cache/query/IndexInvalidException.java +++ b/geode-core/src/main/java/com/gemstone/gemfire/cache/query/IndexInvalidException.java @@ -27,7 +27,6 @@ /** * Thrown if the index definition is not valid. * - * @author vaibhav * @since 4.0 */ diff --git a/geode-core/src/main/java/com/gemstone/gemfire/cache/query/IndexMaintenanceException.java b/geode-core/src/main/java/com/gemstone/gemfire/cache/query/IndexMaintenanceException.java index dee561986961..7a5329c03cc5 100644 --- a/geode-core/src/main/java/com/gemstone/gemfire/cache/query/IndexMaintenanceException.java +++ b/geode-core/src/main/java/com/gemstone/gemfire/cache/query/IndexMaintenanceException.java @@ -22,7 +22,6 @@ * Thrown if an error occurs while updating query indexes during * region modification. * - * @author Eric Zoerner * @since 4.0 */ public class IndexMaintenanceException extends CacheRuntimeException { diff --git a/geode-core/src/main/java/com/gemstone/gemfire/cache/query/IndexNameConflictException.java b/geode-core/src/main/java/com/gemstone/gemfire/cache/query/IndexNameConflictException.java index 3bad9f7d1596..6b37fd7da6d9 100644 --- a/geode-core/src/main/java/com/gemstone/gemfire/cache/query/IndexNameConflictException.java +++ b/geode-core/src/main/java/com/gemstone/gemfire/cache/query/IndexNameConflictException.java @@ -26,7 +26,6 @@ * Thrown while creating the new index if there exists an Index with * the same name as new index. * - * @author vaibhav * @since 4.0 */ diff --git a/geode-core/src/main/java/com/gemstone/gemfire/cache/query/IndexType.java b/geode-core/src/main/java/com/gemstone/gemfire/cache/query/IndexType.java index eb79d2ce5afd..ab04a0f51386 100644 --- a/geode-core/src/main/java/com/gemstone/gemfire/cache/query/IndexType.java +++ b/geode-core/src/main/java/com/gemstone/gemfire/cache/query/IndexType.java @@ -22,7 +22,6 @@ * * Enumerated type for types of {@linkplain Index indexes} * - * @author Eric Zoerner * @since 4.0 */ public class IndexType { diff --git a/geode-core/src/main/java/com/gemstone/gemfire/cache/query/NameNotFoundException.java b/geode-core/src/main/java/com/gemstone/gemfire/cache/query/NameNotFoundException.java index 91358039261d..1da09e47b84f 100644 --- a/geode-core/src/main/java/com/gemstone/gemfire/cache/query/NameNotFoundException.java +++ b/geode-core/src/main/java/com/gemstone/gemfire/cache/query/NameNotFoundException.java @@ -22,7 +22,6 @@ * Thrown when an attribute or method name could not be resolved during query * execution because no matching method or field could be found. * - * @author Eric Zoerner * @since 4.0 */ diff --git a/geode-core/src/main/java/com/gemstone/gemfire/cache/query/NameResolutionException.java b/geode-core/src/main/java/com/gemstone/gemfire/cache/query/NameResolutionException.java index bc0959a99162..492892ce164c 100644 --- a/geode-core/src/main/java/com/gemstone/gemfire/cache/query/NameResolutionException.java +++ b/geode-core/src/main/java/com/gemstone/gemfire/cache/query/NameResolutionException.java @@ -19,7 +19,6 @@ /** * Thrown if an attribute or method name in a query cannot be resolved. * - * @author Eric Zoerner * @since 4.0 */ diff --git a/geode-core/src/main/java/com/gemstone/gemfire/cache/query/ParameterCountInvalidException.java b/geode-core/src/main/java/com/gemstone/gemfire/cache/query/ParameterCountInvalidException.java index 140d6e0a7fec..990cdae58060 100644 --- a/geode-core/src/main/java/com/gemstone/gemfire/cache/query/ParameterCountInvalidException.java +++ b/geode-core/src/main/java/com/gemstone/gemfire/cache/query/ParameterCountInvalidException.java @@ -21,7 +21,6 @@ * Thrown when the number of bound paramters for a query does not match the * number of placeholders. * - * @author Eric Zoerner * @since 4.0 */ public class ParameterCountInvalidException extends QueryException { diff --git a/geode-core/src/main/java/com/gemstone/gemfire/cache/query/Query.java b/geode-core/src/main/java/com/gemstone/gemfire/cache/query/Query.java index 5057f14a9228..0329a7060764 100644 --- a/geode-core/src/main/java/com/gemstone/gemfire/cache/query/Query.java +++ b/geode-core/src/main/java/com/gemstone/gemfire/cache/query/Query.java @@ -27,7 +27,6 @@ * Interface for query objects. Supports execution of queries with optional * parameters. * - * @author Eric Zoerner * @since 4.0 */ diff --git a/geode-core/src/main/java/com/gemstone/gemfire/cache/query/QueryException.java b/geode-core/src/main/java/com/gemstone/gemfire/cache/query/QueryException.java index c69f238a60ef..a9638c74fd4c 100644 --- a/geode-core/src/main/java/com/gemstone/gemfire/cache/query/QueryException.java +++ b/geode-core/src/main/java/com/gemstone/gemfire/cache/query/QueryException.java @@ -22,7 +22,6 @@ /** * Thrown during by the query engine during parsing or execution. * Instances of subclasses are thrown for more specific exceptions. - * @author Eric Zoerner * @since 4.0 */ diff --git a/geode-core/src/main/java/com/gemstone/gemfire/cache/query/QueryExecutionLowMemoryException.java b/geode-core/src/main/java/com/gemstone/gemfire/cache/query/QueryExecutionLowMemoryException.java index d6ed2b2ab73c..ab33482546aa 100755 --- a/geode-core/src/main/java/com/gemstone/gemfire/cache/query/QueryExecutionLowMemoryException.java +++ b/geode-core/src/main/java/com/gemstone/gemfire/cache/query/QueryExecutionLowMemoryException.java @@ -28,7 +28,6 @@ * from sending out QueryExecutionLowMemoryExeceptions at the risk of * a query exhausting all memory. * - * @author jhuynh * @since 7.0 */ public class QueryExecutionLowMemoryException extends CacheRuntimeException { diff --git a/geode-core/src/main/java/com/gemstone/gemfire/cache/query/QueryExecutionTimeoutException.java b/geode-core/src/main/java/com/gemstone/gemfire/cache/query/QueryExecutionTimeoutException.java index b7f727fa8ba9..9f91b21e030b 100755 --- a/geode-core/src/main/java/com/gemstone/gemfire/cache/query/QueryExecutionTimeoutException.java +++ b/geode-core/src/main/java/com/gemstone/gemfire/cache/query/QueryExecutionTimeoutException.java @@ -23,7 +23,6 @@ * The Max query execution time is set using the system variable * gemfire.Cache.MAX_QUERY_EXECUTION_TIME. * - * @author agingade * @since 6.0 */ public class QueryExecutionTimeoutException extends CacheRuntimeException { diff --git a/geode-core/src/main/java/com/gemstone/gemfire/cache/query/QueryInvalidException.java b/geode-core/src/main/java/com/gemstone/gemfire/cache/query/QueryInvalidException.java index baef94a5dda3..b095973b28e3 100644 --- a/geode-core/src/main/java/com/gemstone/gemfire/cache/query/QueryInvalidException.java +++ b/geode-core/src/main/java/com/gemstone/gemfire/cache/query/QueryInvalidException.java @@ -21,7 +21,6 @@ /** * Thrown if the query language syntax is not valid. * - * @author Eric Zoerner * @since 4.0 */ diff --git a/geode-core/src/main/java/com/gemstone/gemfire/cache/query/QueryInvocationTargetException.java b/geode-core/src/main/java/com/gemstone/gemfire/cache/query/QueryInvocationTargetException.java index 3d739d7e583a..d27494a324ad 100644 --- a/geode-core/src/main/java/com/gemstone/gemfire/cache/query/QueryInvocationTargetException.java +++ b/geode-core/src/main/java/com/gemstone/gemfire/cache/query/QueryInvocationTargetException.java @@ -19,7 +19,6 @@ /** * Thrown if an exception is thrown when a method is invoked during query execution. * - * @author Eric Zoerner * @since 4.0 */ diff --git a/geode-core/src/main/java/com/gemstone/gemfire/cache/query/QueryService.java b/geode-core/src/main/java/com/gemstone/gemfire/cache/query/QueryService.java index 63d8cbf21e8d..3a98a436ba64 100644 --- a/geode-core/src/main/java/com/gemstone/gemfire/cache/query/QueryService.java +++ b/geode-core/src/main/java/com/gemstone/gemfire/cache/query/QueryService.java @@ -38,7 +38,6 @@ * using {@link Cache#getQueryService}. * * - * @author Eric Zoerner * @since 4.0 */ public interface QueryService { diff --git a/geode-core/src/main/java/com/gemstone/gemfire/cache/query/RegionNotFoundException.java b/geode-core/src/main/java/com/gemstone/gemfire/cache/query/RegionNotFoundException.java index 4ae94e36cc72..56a8fe3d61d3 100644 --- a/geode-core/src/main/java/com/gemstone/gemfire/cache/query/RegionNotFoundException.java +++ b/geode-core/src/main/java/com/gemstone/gemfire/cache/query/RegionNotFoundException.java @@ -19,7 +19,6 @@ /** * Thrown if a region referenced by name in a query cannot be found. * - * @author Eric Zoerner * @since 4.0 */ diff --git a/geode-core/src/main/java/com/gemstone/gemfire/cache/query/SelectResults.java b/geode-core/src/main/java/com/gemstone/gemfire/cache/query/SelectResults.java index abe79098c7a4..821d4a2ca549 100644 --- a/geode-core/src/main/java/com/gemstone/gemfire/cache/query/SelectResults.java +++ b/geode-core/src/main/java/com/gemstone/gemfire/cache/query/SelectResults.java @@ -62,7 +62,6 @@ * * @see com.gemstone.gemfire.cache.query.Query#execute() * - * @author Eric Zoerner * @since 4.0 */ public interface SelectResults extends Collection { diff --git a/geode-core/src/main/java/com/gemstone/gemfire/cache/query/Struct.java b/geode-core/src/main/java/com/gemstone/gemfire/cache/query/Struct.java index 26e2a9b34b93..a844e4f2ea74 100644 --- a/geode-core/src/main/java/com/gemstone/gemfire/cache/query/Struct.java +++ b/geode-core/src/main/java/com/gemstone/gemfire/cache/query/Struct.java @@ -29,7 +29,6 @@ * * @see SelectResults * - * @author Eric Zoerner * @since 4.0 */ public interface Struct { diff --git a/geode-core/src/main/java/com/gemstone/gemfire/cache/query/TypeMismatchException.java b/geode-core/src/main/java/com/gemstone/gemfire/cache/query/TypeMismatchException.java index 0bb14930871e..ca2c773c7394 100644 --- a/geode-core/src/main/java/com/gemstone/gemfire/cache/query/TypeMismatchException.java +++ b/geode-core/src/main/java/com/gemstone/gemfire/cache/query/TypeMismatchException.java @@ -19,7 +19,6 @@ /** * Thrown if type consistency is violated while a query is being executed. * - * @author Eric Zoerner * @since 4.0 */ diff --git a/geode-core/src/main/java/com/gemstone/gemfire/cache/query/internal/AbstractCompiledValue.java b/geode-core/src/main/java/com/gemstone/gemfire/cache/query/internal/AbstractCompiledValue.java index 4f4243e70daa..b6136dc7c377 100644 --- a/geode-core/src/main/java/com/gemstone/gemfire/cache/query/internal/AbstractCompiledValue.java +++ b/geode-core/src/main/java/com/gemstone/gemfire/cache/query/internal/AbstractCompiledValue.java @@ -28,8 +28,6 @@ * Class Description * * @version $Revision: 1.1 $ - * @author ericz - * @author asif */ public abstract class AbstractCompiledValue implements CompiledValue, Filter, OQLLexerTokenTypes { diff --git a/geode-core/src/main/java/com/gemstone/gemfire/cache/query/internal/AbstractGroupOrRangeJunction.java b/geode-core/src/main/java/com/gemstone/gemfire/cache/query/internal/AbstractGroupOrRangeJunction.java index 47a1d54b6b67..02bd9246727e 100644 --- a/geode-core/src/main/java/com/gemstone/gemfire/cache/query/internal/AbstractGroupOrRangeJunction.java +++ b/geode-core/src/main/java/com/gemstone/gemfire/cache/query/internal/AbstractGroupOrRangeJunction.java @@ -40,7 +40,6 @@ import com.gemstone.gemfire.internal.i18n.LocalizedStrings; /** - * @author asif * */ public abstract class AbstractGroupOrRangeJunction extends diff --git a/geode-core/src/main/java/com/gemstone/gemfire/cache/query/internal/AllGroupJunction.java b/geode-core/src/main/java/com/gemstone/gemfire/cache/query/internal/AllGroupJunction.java index d194a70ab6ca..7b64af793cb7 100644 --- a/geode-core/src/main/java/com/gemstone/gemfire/cache/query/internal/AllGroupJunction.java +++ b/geode-core/src/main/java/com/gemstone/gemfire/cache/query/internal/AllGroupJunction.java @@ -40,8 +40,6 @@ * more than one CompositeGroupJunction or a combination of one or more * GroupJunctions & one or more CompositeGroupJunctions * - * @author Asif - * @author kdeshpan */ public class AllGroupJunction extends AbstractCompiledValue implements Filter, OQLLexerTokenTypes { diff --git a/geode-core/src/main/java/com/gemstone/gemfire/cache/query/internal/AttributeDescriptor.java b/geode-core/src/main/java/com/gemstone/gemfire/cache/query/internal/AttributeDescriptor.java index b5ea4f336fed..701607569414 100644 --- a/geode-core/src/main/java/com/gemstone/gemfire/cache/query/internal/AttributeDescriptor.java +++ b/geode-core/src/main/java/com/gemstone/gemfire/cache/query/internal/AttributeDescriptor.java @@ -46,7 +46,6 @@ * Utility for managing an attribute * * @version $Revision: 1.1 $ - * @author ericz */ diff --git a/geode-core/src/main/java/com/gemstone/gemfire/cache/query/internal/Bag.java b/geode-core/src/main/java/com/gemstone/gemfire/cache/query/internal/Bag.java index 9369b69a36ae..7e88c1b600fe 100644 --- a/geode-core/src/main/java/com/gemstone/gemfire/cache/query/internal/Bag.java +++ b/geode-core/src/main/java/com/gemstone/gemfire/cache/query/internal/Bag.java @@ -53,8 +53,6 @@ * @see StructBag * @see SortedResultsBag * - * @author Eric Zoerner - * @author ashahid * @since 8.1 */ public abstract class Bag extends AbstractCollection implements @@ -681,7 +679,6 @@ public void remove() { } /** - * @author Asif * */ protected class LimitBagIterator extends Bag.BagIterator { diff --git a/geode-core/src/main/java/com/gemstone/gemfire/cache/query/internal/CompiledAggregateFunction.java b/geode-core/src/main/java/com/gemstone/gemfire/cache/query/internal/CompiledAggregateFunction.java index c17483c89483..87f29fa70581 100644 --- a/geode-core/src/main/java/com/gemstone/gemfire/cache/query/internal/CompiledAggregateFunction.java +++ b/geode-core/src/main/java/com/gemstone/gemfire/cache/query/internal/CompiledAggregateFunction.java @@ -41,7 +41,6 @@ /** * - * @author ashahid * */ public class CompiledAggregateFunction extends AbstractCompiledValue { diff --git a/geode-core/src/main/java/com/gemstone/gemfire/cache/query/internal/CompiledBindArgument.java b/geode-core/src/main/java/com/gemstone/gemfire/cache/query/internal/CompiledBindArgument.java index fadaf21e4224..3308cea59ae7 100644 --- a/geode-core/src/main/java/com/gemstone/gemfire/cache/query/internal/CompiledBindArgument.java +++ b/geode-core/src/main/java/com/gemstone/gemfire/cache/query/internal/CompiledBindArgument.java @@ -30,7 +30,6 @@ /** * Class Description * - * @author ezoerner */ diff --git a/geode-core/src/main/java/com/gemstone/gemfire/cache/query/internal/CompiledComparison.java b/geode-core/src/main/java/com/gemstone/gemfire/cache/query/internal/CompiledComparison.java index 9084351ec051..5c764e3dcaf9 100644 --- a/geode-core/src/main/java/com/gemstone/gemfire/cache/query/internal/CompiledComparison.java +++ b/geode-core/src/main/java/com/gemstone/gemfire/cache/query/internal/CompiledComparison.java @@ -45,8 +45,6 @@ /** * Comparison value: <, >, <=, >=, <>, = * - * @author ericz - * @author asif */ public class CompiledComparison extends AbstractCompiledValue implements Negatable, OQLLexerTokenTypes, Indexable { diff --git a/geode-core/src/main/java/com/gemstone/gemfire/cache/query/internal/CompiledConstruction.java b/geode-core/src/main/java/com/gemstone/gemfire/cache/query/internal/CompiledConstruction.java index d31f87e943f1..f2bdab7ac8d7 100644 --- a/geode-core/src/main/java/com/gemstone/gemfire/cache/query/internal/CompiledConstruction.java +++ b/geode-core/src/main/java/com/gemstone/gemfire/cache/query/internal/CompiledConstruction.java @@ -26,7 +26,6 @@ * Class Description * * @version $Revision: 1.1 $ - * @author ericz */ diff --git a/geode-core/src/main/java/com/gemstone/gemfire/cache/query/internal/CompiledFunction.java b/geode-core/src/main/java/com/gemstone/gemfire/cache/query/internal/CompiledFunction.java index dd8e605b80f3..1d76d865fa48 100644 --- a/geode-core/src/main/java/com/gemstone/gemfire/cache/query/internal/CompiledFunction.java +++ b/geode-core/src/main/java/com/gemstone/gemfire/cache/query/internal/CompiledFunction.java @@ -28,7 +28,6 @@ * Predefined functions * * @version $Revision: 1.1 $ - * @author ericz */ diff --git a/geode-core/src/main/java/com/gemstone/gemfire/cache/query/internal/CompiledGroupBySelect.java b/geode-core/src/main/java/com/gemstone/gemfire/cache/query/internal/CompiledGroupBySelect.java index fe679b9f3378..59e228f043d0 100644 --- a/geode-core/src/main/java/com/gemstone/gemfire/cache/query/internal/CompiledGroupBySelect.java +++ b/geode-core/src/main/java/com/gemstone/gemfire/cache/query/internal/CompiledGroupBySelect.java @@ -44,7 +44,6 @@ /** * - * @author ashahid * */ public class CompiledGroupBySelect extends CompiledSelect { diff --git a/geode-core/src/main/java/com/gemstone/gemfire/cache/query/internal/CompiledID.java b/geode-core/src/main/java/com/gemstone/gemfire/cache/query/internal/CompiledID.java index 4db50e8c2f22..2f12c20ced0a 100644 --- a/geode-core/src/main/java/com/gemstone/gemfire/cache/query/internal/CompiledID.java +++ b/geode-core/src/main/java/com/gemstone/gemfire/cache/query/internal/CompiledID.java @@ -26,7 +26,6 @@ * Class Description * * @version $Revision: 1.2 $ - * @author ericz */ diff --git a/geode-core/src/main/java/com/gemstone/gemfire/cache/query/internal/CompiledIn.java b/geode-core/src/main/java/com/gemstone/gemfire/cache/query/internal/CompiledIn.java index 342aeead5806..71f9704b0f22 100644 --- a/geode-core/src/main/java/com/gemstone/gemfire/cache/query/internal/CompiledIn.java +++ b/geode-core/src/main/java/com/gemstone/gemfire/cache/query/internal/CompiledIn.java @@ -56,7 +56,6 @@ * Class Description * * @version $Revision: 1.1 $ - * @author ericz */ diff --git a/geode-core/src/main/java/com/gemstone/gemfire/cache/query/internal/CompiledIndexOperation.java b/geode-core/src/main/java/com/gemstone/gemfire/cache/query/internal/CompiledIndexOperation.java index e586e303ac1a..fca7e83613b0 100644 --- a/geode-core/src/main/java/com/gemstone/gemfire/cache/query/internal/CompiledIndexOperation.java +++ b/geode-core/src/main/java/com/gemstone/gemfire/cache/query/internal/CompiledIndexOperation.java @@ -28,7 +28,6 @@ * Class Description * * @version $Revision: 1.1 $ - * @author ericz */ public class CompiledIndexOperation extends AbstractCompiledValue implements MapIndexable diff --git a/geode-core/src/main/java/com/gemstone/gemfire/cache/query/internal/CompiledIteratorDef.java b/geode-core/src/main/java/com/gemstone/gemfire/cache/query/internal/CompiledIteratorDef.java index ba3e18a346fb..9f2d06d8e0a0 100644 --- a/geode-core/src/main/java/com/gemstone/gemfire/cache/query/internal/CompiledIteratorDef.java +++ b/geode-core/src/main/java/com/gemstone/gemfire/cache/query/internal/CompiledIteratorDef.java @@ -29,7 +29,6 @@ import com.gemstone.gemfire.internal.logging.LogService; /** - * @author Eric Zoerner */ public class CompiledIteratorDef extends AbstractCompiledValue { private static final Logger logger = LogService.getLogger(); diff --git a/geode-core/src/main/java/com/gemstone/gemfire/cache/query/internal/CompiledJunction.java b/geode-core/src/main/java/com/gemstone/gemfire/cache/query/internal/CompiledJunction.java index 902aecd41dad..e238ca2a0e68 100644 --- a/geode-core/src/main/java/com/gemstone/gemfire/cache/query/internal/CompiledJunction.java +++ b/geode-core/src/main/java/com/gemstone/gemfire/cache/query/internal/CompiledJunction.java @@ -122,8 +122,6 @@ * * * @version $Revision: 1.2 $ - * @author ericz - * @author Asif */ public class CompiledJunction extends AbstractCompiledValue implements Negatable { diff --git a/geode-core/src/main/java/com/gemstone/gemfire/cache/query/internal/CompiledLike.java b/geode-core/src/main/java/com/gemstone/gemfire/cache/query/internal/CompiledLike.java index 95604569990f..d214f091a45f 100644 --- a/geode-core/src/main/java/com/gemstone/gemfire/cache/query/internal/CompiledLike.java +++ b/geode-core/src/main/java/com/gemstone/gemfire/cache/query/internal/CompiledLike.java @@ -36,7 +36,6 @@ /** * - * @author Asif * */ public class CompiledLike extends CompiledComparison diff --git a/geode-core/src/main/java/com/gemstone/gemfire/cache/query/internal/CompiledLiteral.java b/geode-core/src/main/java/com/gemstone/gemfire/cache/query/internal/CompiledLiteral.java index 936f4a512d61..f29d9d1508c2 100644 --- a/geode-core/src/main/java/com/gemstone/gemfire/cache/query/internal/CompiledLiteral.java +++ b/geode-core/src/main/java/com/gemstone/gemfire/cache/query/internal/CompiledLiteral.java @@ -26,7 +26,6 @@ * Class Description * * @version $Revision: 1.1 $ - * @author ericz */ diff --git a/geode-core/src/main/java/com/gemstone/gemfire/cache/query/internal/CompiledNegation.java b/geode-core/src/main/java/com/gemstone/gemfire/cache/query/internal/CompiledNegation.java index 7fd2c7ab6d2d..6d7e9b92ad97 100644 --- a/geode-core/src/main/java/com/gemstone/gemfire/cache/query/internal/CompiledNegation.java +++ b/geode-core/src/main/java/com/gemstone/gemfire/cache/query/internal/CompiledNegation.java @@ -27,7 +27,6 @@ * Class Description * * @version $Revision: 1.1 $ - * @author ericz */ diff --git a/geode-core/src/main/java/com/gemstone/gemfire/cache/query/internal/CompiledOperation.java b/geode-core/src/main/java/com/gemstone/gemfire/cache/query/internal/CompiledOperation.java index d9f0d6c53179..99126ea4ae4a 100644 --- a/geode-core/src/main/java/com/gemstone/gemfire/cache/query/internal/CompiledOperation.java +++ b/geode-core/src/main/java/com/gemstone/gemfire/cache/query/internal/CompiledOperation.java @@ -45,7 +45,6 @@ * Class Description * * @version $Revision: 1.1 $ - * @author ericz */ diff --git a/geode-core/src/main/java/com/gemstone/gemfire/cache/query/internal/CompiledPath.java b/geode-core/src/main/java/com/gemstone/gemfire/cache/query/internal/CompiledPath.java index 9fcc7dd9ad45..eb29d7cda347 100644 --- a/geode-core/src/main/java/com/gemstone/gemfire/cache/query/internal/CompiledPath.java +++ b/geode-core/src/main/java/com/gemstone/gemfire/cache/query/internal/CompiledPath.java @@ -29,7 +29,6 @@ * Represents an identifier that follows a dot operator. * * @version $Revision: 1.1 $ - * @author ericz */ diff --git a/geode-core/src/main/java/com/gemstone/gemfire/cache/query/internal/CompiledRegion.java b/geode-core/src/main/java/com/gemstone/gemfire/cache/query/internal/CompiledRegion.java index 7e0dd6fa71b6..aa51b5ee0a12 100644 --- a/geode-core/src/main/java/com/gemstone/gemfire/cache/query/internal/CompiledRegion.java +++ b/geode-core/src/main/java/com/gemstone/gemfire/cache/query/internal/CompiledRegion.java @@ -29,7 +29,6 @@ /** * Class Description * - * @author ericz */ diff --git a/geode-core/src/main/java/com/gemstone/gemfire/cache/query/internal/CompiledSelect.java b/geode-core/src/main/java/com/gemstone/gemfire/cache/query/internal/CompiledSelect.java index ec7c51e0c2b5..7c6de428f66e 100644 --- a/geode-core/src/main/java/com/gemstone/gemfire/cache/query/internal/CompiledSelect.java +++ b/geode-core/src/main/java/com/gemstone/gemfire/cache/query/internal/CompiledSelect.java @@ -55,8 +55,6 @@ * Class Description * * @version $Revision: 1.2 $ - * @author ericz - * @author asif */ public class CompiledSelect extends AbstractCompiledValue { diff --git a/geode-core/src/main/java/com/gemstone/gemfire/cache/query/internal/CompiledSortCriterion.java b/geode-core/src/main/java/com/gemstone/gemfire/cache/query/internal/CompiledSortCriterion.java index 2877068defa7..473e65b72e90 100644 --- a/geode-core/src/main/java/com/gemstone/gemfire/cache/query/internal/CompiledSortCriterion.java +++ b/geode-core/src/main/java/com/gemstone/gemfire/cache/query/internal/CompiledSortCriterion.java @@ -38,8 +38,6 @@ * This class represents a compiled form of sort criterian present in order by * clause * - * @author Yogesh Mahajan - * @author Asif */ public class CompiledSortCriterion extends AbstractCompiledValue { // Asif: criterion true indicates descending order diff --git a/geode-core/src/main/java/com/gemstone/gemfire/cache/query/internal/CompiledUnaryMinus.java b/geode-core/src/main/java/com/gemstone/gemfire/cache/query/internal/CompiledUnaryMinus.java index e05a427a0257..8d27418c2fde 100644 --- a/geode-core/src/main/java/com/gemstone/gemfire/cache/query/internal/CompiledUnaryMinus.java +++ b/geode-core/src/main/java/com/gemstone/gemfire/cache/query/internal/CompiledUnaryMinus.java @@ -26,7 +26,6 @@ import com.gemstone.gemfire.internal.i18n.LocalizedStrings; /** - * @author Yogesh Mahajan * */ public class CompiledUnaryMinus extends AbstractCompiledValue{ diff --git a/geode-core/src/main/java/com/gemstone/gemfire/cache/query/internal/CompiledUndefined.java b/geode-core/src/main/java/com/gemstone/gemfire/cache/query/internal/CompiledUndefined.java index 521faf2ba590..98f301ca7eda 100644 --- a/geode-core/src/main/java/com/gemstone/gemfire/cache/query/internal/CompiledUndefined.java +++ b/geode-core/src/main/java/com/gemstone/gemfire/cache/query/internal/CompiledUndefined.java @@ -31,8 +31,6 @@ * Predefined function for identity of the UNDEFINED literal * * @version $Revision: 1.2 $ - * @author ericz - * @author asif */ public class CompiledUndefined extends AbstractCompiledValue implements Negatable , Indexable { diff --git a/geode-core/src/main/java/com/gemstone/gemfire/cache/query/internal/CompiledValue.java b/geode-core/src/main/java/com/gemstone/gemfire/cache/query/internal/CompiledValue.java index 5e3503704eaa..7b5cf4bdc3fe 100644 --- a/geode-core/src/main/java/com/gemstone/gemfire/cache/query/internal/CompiledValue.java +++ b/geode-core/src/main/java/com/gemstone/gemfire/cache/query/internal/CompiledValue.java @@ -25,7 +25,6 @@ * Class Description * * @version $Revision: 1.1 $ - * @author ericz */ public interface CompiledValue { diff --git a/geode-core/src/main/java/com/gemstone/gemfire/cache/query/internal/CompositeGroupJunction.java b/geode-core/src/main/java/com/gemstone/gemfire/cache/query/internal/CompositeGroupJunction.java index 6725346658c3..d2f9469d1538 100644 --- a/geode-core/src/main/java/com/gemstone/gemfire/cache/query/internal/CompositeGroupJunction.java +++ b/geode-core/src/main/java/com/gemstone/gemfire/cache/query/internal/CompositeGroupJunction.java @@ -48,7 +48,6 @@ * multiple filter evaluatable equi join conditions of different regions as well * as their GroupJunctions if any. * - * @author asif * */ public class CompositeGroupJunction extends AbstractCompiledValue implements diff --git a/geode-core/src/main/java/com/gemstone/gemfire/cache/query/internal/CqEntry.java b/geode-core/src/main/java/com/gemstone/gemfire/cache/query/internal/CqEntry.java index 80ba0adce6cb..2b6aa63c3225 100644 --- a/geode-core/src/main/java/com/gemstone/gemfire/cache/query/internal/CqEntry.java +++ b/geode-core/src/main/java/com/gemstone/gemfire/cache/query/internal/CqEntry.java @@ -28,7 +28,6 @@ /** * This represents the CQ key value pair for the CQ query results. * - * @author anil * @since 6.5 */ diff --git a/geode-core/src/main/java/com/gemstone/gemfire/cache/query/internal/CqQueryVsdStats.java b/geode-core/src/main/java/com/gemstone/gemfire/cache/query/internal/CqQueryVsdStats.java index de9cc0b1e141..30af78d46c60 100644 --- a/geode-core/src/main/java/com/gemstone/gemfire/cache/query/internal/CqQueryVsdStats.java +++ b/geode-core/src/main/java/com/gemstone/gemfire/cache/query/internal/CqQueryVsdStats.java @@ -28,7 +28,6 @@ /** * This class tracks GemFire statistics related to a {@link com.gemstone.gemfire.cache.query.CqQuery}. * - * @author Rao Madduri * @since 5.5 */ public class CqQueryVsdStats diff --git a/geode-core/src/main/java/com/gemstone/gemfire/cache/query/internal/CqStateImpl.java b/geode-core/src/main/java/com/gemstone/gemfire/cache/query/internal/CqStateImpl.java index 39faf3a1620a..173ac3dc2f95 100755 --- a/geode-core/src/main/java/com/gemstone/gemfire/cache/query/internal/CqStateImpl.java +++ b/geode-core/src/main/java/com/gemstone/gemfire/cache/query/internal/CqStateImpl.java @@ -22,7 +22,6 @@ /** * Offers methods to get CQ state. * - * @author anil * @since 5.5 */ diff --git a/geode-core/src/main/java/com/gemstone/gemfire/cache/query/internal/CumulativeNonDistinctResults.java b/geode-core/src/main/java/com/gemstone/gemfire/cache/query/internal/CumulativeNonDistinctResults.java index 3735956f3f96..107da2d09a4b 100644 --- a/geode-core/src/main/java/com/gemstone/gemfire/cache/query/internal/CumulativeNonDistinctResults.java +++ b/geode-core/src/main/java/com/gemstone/gemfire/cache/query/internal/CumulativeNonDistinctResults.java @@ -49,7 +49,6 @@ * This is used as a wrapper over all the results of PR which are of non * distinct type * - * @author asif * */ public class CumulativeNonDistinctResults implements SelectResults, diff --git a/geode-core/src/main/java/com/gemstone/gemfire/cache/query/internal/DefaultQuery.java b/geode-core/src/main/java/com/gemstone/gemfire/cache/query/internal/DefaultQuery.java index eb6948cf4976..9e56e53979a3 100644 --- a/geode-core/src/main/java/com/gemstone/gemfire/cache/query/internal/DefaultQuery.java +++ b/geode-core/src/main/java/com/gemstone/gemfire/cache/query/internal/DefaultQuery.java @@ -65,7 +65,6 @@ /** * Thread-safe implementation of com.gemstone.persistence.query.Query * - * @author Eric Zoerner */ public class DefaultQuery implements Query { diff --git a/geode-core/src/main/java/com/gemstone/gemfire/cache/query/internal/DefaultQueryService.java b/geode-core/src/main/java/com/gemstone/gemfire/cache/query/internal/DefaultQueryService.java index 9e99831ba46d..392cb9de6a2c 100644 --- a/geode-core/src/main/java/com/gemstone/gemfire/cache/query/internal/DefaultQueryService.java +++ b/geode-core/src/main/java/com/gemstone/gemfire/cache/query/internal/DefaultQueryService.java @@ -76,8 +76,6 @@ import com.gemstone.gemfire.internal.logging.log4j.LocalizedMessage; /** - * @author Eric Zoerner - * @author Asif * @version $Revision: 1.2 $ */ public class DefaultQueryService implements QueryService { diff --git a/geode-core/src/main/java/com/gemstone/gemfire/cache/query/internal/ExecutionContext.java b/geode-core/src/main/java/com/gemstone/gemfire/cache/query/internal/ExecutionContext.java index f4df8e4765df..391c0283b92a 100644 --- a/geode-core/src/main/java/com/gemstone/gemfire/cache/query/internal/ExecutionContext.java +++ b/geode-core/src/main/java/com/gemstone/gemfire/cache/query/internal/ExecutionContext.java @@ -41,8 +41,6 @@ * * @see QueryExecutionContext for extended version of this ONLY for querying. * - * @author ericz - * @author Asif */ public class ExecutionContext { diff --git a/geode-core/src/main/java/com/gemstone/gemfire/cache/query/internal/Filter.java b/geode-core/src/main/java/com/gemstone/gemfire/cache/query/internal/Filter.java index b5043d3e8d5f..d6d50005b113 100644 --- a/geode-core/src/main/java/com/gemstone/gemfire/cache/query/internal/Filter.java +++ b/geode-core/src/main/java/com/gemstone/gemfire/cache/query/internal/Filter.java @@ -24,8 +24,6 @@ * Class Description * * @version $Revision: 1.1 $ - * @author ericz - * @author asif */ public interface Filter { diff --git a/geode-core/src/main/java/com/gemstone/gemfire/cache/query/internal/Functions.java b/geode-core/src/main/java/com/gemstone/gemfire/cache/query/internal/Functions.java index e9398fedee97..45f0902c4b6f 100644 --- a/geode-core/src/main/java/com/gemstone/gemfire/cache/query/internal/Functions.java +++ b/geode-core/src/main/java/com/gemstone/gemfire/cache/query/internal/Functions.java @@ -29,7 +29,6 @@ * Class Description * * @version $Revision: 1.1 $ - * @author ericz */ public class Functions diff --git a/geode-core/src/main/java/com/gemstone/gemfire/cache/query/internal/GroupJunction.java b/geode-core/src/main/java/com/gemstone/gemfire/cache/query/internal/GroupJunction.java index 69184362c215..353d48e07cb6 100644 --- a/geode-core/src/main/java/com/gemstone/gemfire/cache/query/internal/GroupJunction.java +++ b/geode-core/src/main/java/com/gemstone/gemfire/cache/query/internal/GroupJunction.java @@ -33,9 +33,6 @@ * conditions belonging to other group of iterators can be a part of * GroupJunction only if the complete expansion flag is true. * - * @author EricZ - * @author asif - * @author kdeshpan * * */ diff --git a/geode-core/src/main/java/com/gemstone/gemfire/cache/query/internal/HashingStrategy.java b/geode-core/src/main/java/com/gemstone/gemfire/cache/query/internal/HashingStrategy.java index 7cfa2af1156e..15c37f5790a7 100644 --- a/geode-core/src/main/java/com/gemstone/gemfire/cache/query/internal/HashingStrategy.java +++ b/geode-core/src/main/java/com/gemstone/gemfire/cache/query/internal/HashingStrategy.java @@ -26,7 +26,6 @@ * in a HashMap(OR HashSet) for calculation of hash-code for * custom objects and primitive types. * - * @author shobhit * @since 8.0 * */ diff --git a/geode-core/src/main/java/com/gemstone/gemfire/cache/query/internal/IndexTrackingQueryObserver.java b/geode-core/src/main/java/com/gemstone/gemfire/cache/query/internal/IndexTrackingQueryObserver.java index d190e7aa91c1..e92e7cae0072 100644 --- a/geode-core/src/main/java/com/gemstone/gemfire/cache/query/internal/IndexTrackingQueryObserver.java +++ b/geode-core/src/main/java/com/gemstone/gemfire/cache/query/internal/IndexTrackingQueryObserver.java @@ -38,7 +38,6 @@ * Verbose Index information * * @see DefaultQuery - * @author Eric Zoerner, Shobhit Agarwal */ public class IndexTrackingQueryObserver extends QueryObserverAdapter { @@ -155,7 +154,6 @@ public void setTestHook(TestHook testHook) { /** * This class contains information related to buckets and results found in * the index on those buckets. - * @author Shobhit Agarwal * */ public class IndexInfo{ diff --git a/geode-core/src/main/java/com/gemstone/gemfire/cache/query/internal/Indexable.java b/geode-core/src/main/java/com/gemstone/gemfire/cache/query/internal/Indexable.java index 2b868f406599..8405b864f9b9 100644 --- a/geode-core/src/main/java/com/gemstone/gemfire/cache/query/internal/Indexable.java +++ b/geode-core/src/main/java/com/gemstone/gemfire/cache/query/internal/Indexable.java @@ -25,7 +25,6 @@ * indicate that index can be created on such CompiledValues.It indicates that * they are filter evaluatable at the atomic level. * - * @author asif * */ public interface Indexable { diff --git a/geode-core/src/main/java/com/gemstone/gemfire/cache/query/internal/MethodDispatch.java b/geode-core/src/main/java/com/gemstone/gemfire/cache/query/internal/MethodDispatch.java index 701ce59e1b85..16a3e4223d20 100644 --- a/geode-core/src/main/java/com/gemstone/gemfire/cache/query/internal/MethodDispatch.java +++ b/geode-core/src/main/java/com/gemstone/gemfire/cache/query/internal/MethodDispatch.java @@ -29,7 +29,6 @@ /** * Utility class for mapping operations in the query language to Java methods * - * @author Eric Zoerner * @version $Revision: 1.1 $ */ diff --git a/geode-core/src/main/java/com/gemstone/gemfire/cache/query/internal/NWayMergeResults.java b/geode-core/src/main/java/com/gemstone/gemfire/cache/query/internal/NWayMergeResults.java index 8865ef168340..6be806ab223d 100644 --- a/geode-core/src/main/java/com/gemstone/gemfire/cache/query/internal/NWayMergeResults.java +++ b/geode-core/src/main/java/com/gemstone/gemfire/cache/query/internal/NWayMergeResults.java @@ -46,7 +46,6 @@ * The n - way merge results returns a sorted results on the cumulative sorted * results for partitioned region based query * - * @author asif * */ public class NWayMergeResults implements SelectResults, Ordered, diff --git a/geode-core/src/main/java/com/gemstone/gemfire/cache/query/internal/NullToken.java b/geode-core/src/main/java/com/gemstone/gemfire/cache/query/internal/NullToken.java index 24530245db93..ccf4540dde7c 100644 --- a/geode-core/src/main/java/com/gemstone/gemfire/cache/query/internal/NullToken.java +++ b/geode-core/src/main/java/com/gemstone/gemfire/cache/query/internal/NullToken.java @@ -27,7 +27,6 @@ /** * A Token representing null. - * @author Tejas Nomulwar * @since cedar * */ diff --git a/geode-core/src/main/java/com/gemstone/gemfire/cache/query/internal/ObjectIntHashMap.java b/geode-core/src/main/java/com/gemstone/gemfire/cache/query/internal/ObjectIntHashMap.java index 485ca2dda7ca..fee83a02ea17 100644 --- a/geode-core/src/main/java/com/gemstone/gemfire/cache/query/internal/ObjectIntHashMap.java +++ b/geode-core/src/main/java/com/gemstone/gemfire/cache/query/internal/ObjectIntHashMap.java @@ -115,12 +115,7 @@ * correctness: the fail-fast behavior of iterators should be used only to * detect bugs. * - * @author Doug Lea - * @author Josh Bloch - * @author Arthur van Hoff - * @author Neal Gafter * - * @author Shobhit Agarwal // GemFire Team * * @version %I%, %G% * @see Object#hashCode() diff --git a/geode-core/src/main/java/com/gemstone/gemfire/cache/query/internal/OrderByComparator.java b/geode-core/src/main/java/com/gemstone/gemfire/cache/query/internal/OrderByComparator.java index cd1954eaa2b9..a99a515be158 100644 --- a/geode-core/src/main/java/com/gemstone/gemfire/cache/query/internal/OrderByComparator.java +++ b/geode-core/src/main/java/com/gemstone/gemfire/cache/query/internal/OrderByComparator.java @@ -33,8 +33,6 @@ * A generic comparator class which compares two Object/StructImpl according to * their sort criterion specified in order by clause * - * @author yogesh - * @author asif */ public class OrderByComparator implements Comparator { private final ObjectType objType; diff --git a/geode-core/src/main/java/com/gemstone/gemfire/cache/query/internal/Ordered.java b/geode-core/src/main/java/com/gemstone/gemfire/cache/query/internal/Ordered.java index 2fc502e6fd89..b55de6ada504 100644 --- a/geode-core/src/main/java/com/gemstone/gemfire/cache/query/internal/Ordered.java +++ b/geode-core/src/main/java/com/gemstone/gemfire/cache/query/internal/Ordered.java @@ -30,7 +30,6 @@ * @see SortedResultSet * @see LinkedResultSet * @see LinkedStructSet - * @author ashahid * */ public interface Ordered { diff --git a/geode-core/src/main/java/com/gemstone/gemfire/cache/query/internal/OrganizedOperands.java b/geode-core/src/main/java/com/gemstone/gemfire/cache/query/internal/OrganizedOperands.java index 45091174e4ba..3b55cc38e0db 100644 --- a/geode-core/src/main/java/com/gemstone/gemfire/cache/query/internal/OrganizedOperands.java +++ b/geode-core/src/main/java/com/gemstone/gemfire/cache/query/internal/OrganizedOperands.java @@ -31,7 +31,6 @@ * iterateOperand refers to a single or group of conditions which are not filter * evaluatable. * - * @author asif * * */ diff --git a/geode-core/src/main/java/com/gemstone/gemfire/cache/query/internal/PathUtils.java b/geode-core/src/main/java/com/gemstone/gemfire/cache/query/internal/PathUtils.java index 04d442de84f1..70c6f7c343d8 100644 --- a/geode-core/src/main/java/com/gemstone/gemfire/cache/query/internal/PathUtils.java +++ b/geode-core/src/main/java/com/gemstone/gemfire/cache/query/internal/PathUtils.java @@ -35,7 +35,6 @@ * Class Description * * @version $Revision: 1.1 $ - * @author ericz */ public class PathUtils { diff --git a/geode-core/src/main/java/com/gemstone/gemfire/cache/query/internal/PlanInfo.java b/geode-core/src/main/java/com/gemstone/gemfire/cache/query/internal/PlanInfo.java index 3b02f0b50216..1beb07cf14bc 100644 --- a/geode-core/src/main/java/com/gemstone/gemfire/cache/query/internal/PlanInfo.java +++ b/geode-core/src/main/java/com/gemstone/gemfire/cache/query/internal/PlanInfo.java @@ -20,8 +20,6 @@ * Encapsulates evaluation info about compiled values * * @version $Revision: 1.1 $ - * @author ericz - * @author asif * @since 4.1 */ diff --git a/geode-core/src/main/java/com/gemstone/gemfire/cache/query/internal/QCompiler.java b/geode-core/src/main/java/com/gemstone/gemfire/cache/query/internal/QCompiler.java index eaba713aeb83..b43d0822610e 100644 --- a/geode-core/src/main/java/com/gemstone/gemfire/cache/query/internal/QCompiler.java +++ b/geode-core/src/main/java/com/gemstone/gemfire/cache/query/internal/QCompiler.java @@ -57,8 +57,6 @@ * Class Description * * @version $Revision: 1.1 $s - * @author ericz - * @author asif */ public class QCompiler implements OQLLexerTokenTypes { private static final Logger logger = LogService.getLogger(); diff --git a/geode-core/src/main/java/com/gemstone/gemfire/cache/query/internal/QRegion.java b/geode-core/src/main/java/com/gemstone/gemfire/cache/query/internal/QRegion.java index d1fd9fffdf83..4e98f3e4099c 100644 --- a/geode-core/src/main/java/com/gemstone/gemfire/cache/query/internal/QRegion.java +++ b/geode-core/src/main/java/com/gemstone/gemfire/cache/query/internal/QRegion.java @@ -28,8 +28,6 @@ import com.gemstone.gemfire.internal.i18n.LocalizedStrings; /** - * @author vaibhav - * @author ericz * @since 4.0 */ public class QRegion implements SelectResults { diff --git a/geode-core/src/main/java/com/gemstone/gemfire/cache/query/internal/QScope.java b/geode-core/src/main/java/com/gemstone/gemfire/cache/query/internal/QScope.java index bb998e2a2d3f..789d8c39bcc8 100644 --- a/geode-core/src/main/java/com/gemstone/gemfire/cache/query/internal/QScope.java +++ b/geode-core/src/main/java/com/gemstone/gemfire/cache/query/internal/QScope.java @@ -23,7 +23,6 @@ * scope, and can be known by zero or one identifier * * @version $Revision: 1.1 $ - * @author ericz * */ class QScope { diff --git a/geode-core/src/main/java/com/gemstone/gemfire/cache/query/internal/QueryExecutionCanceledException.java b/geode-core/src/main/java/com/gemstone/gemfire/cache/query/internal/QueryExecutionCanceledException.java index 9eb6f0daaa2c..8015a003830e 100644 --- a/geode-core/src/main/java/com/gemstone/gemfire/cache/query/internal/QueryExecutionCanceledException.java +++ b/geode-core/src/main/java/com/gemstone/gemfire/cache/query/internal/QueryExecutionCanceledException.java @@ -24,7 +24,6 @@ * Due to various threads using the method, access to the query object may not be available for certain threads * This exception is generically used and caught by DefaultQuery, which will then throw the appropriate exception - * @author jhuynh * @since 7.0 */ public class QueryExecutionCanceledException extends CacheRuntimeException { diff --git a/geode-core/src/main/java/com/gemstone/gemfire/cache/query/internal/QueryExecutionContext.java b/geode-core/src/main/java/com/gemstone/gemfire/cache/query/internal/QueryExecutionContext.java index 8f59145a9087..7c97ca8b41af 100644 --- a/geode-core/src/main/java/com/gemstone/gemfire/cache/query/internal/QueryExecutionContext.java +++ b/geode-core/src/main/java/com/gemstone/gemfire/cache/query/internal/QueryExecutionContext.java @@ -34,8 +34,6 @@ * is a bit heavt-weight context whose life is longer in JVM than * {@link ExecutionContext} which will be used ONLY for index updates. * - * @author shobhit - * @author jhuynh * @since 7.0 */ public class QueryExecutionContext extends ExecutionContext { diff --git a/geode-core/src/main/java/com/gemstone/gemfire/cache/query/internal/QueryExecutor.java b/geode-core/src/main/java/com/gemstone/gemfire/cache/query/internal/QueryExecutor.java index b23fcae0c9af..0b1a4654a126 100644 --- a/geode-core/src/main/java/com/gemstone/gemfire/cache/query/internal/QueryExecutor.java +++ b/geode-core/src/main/java/com/gemstone/gemfire/cache/query/internal/QueryExecutor.java @@ -27,7 +27,6 @@ * An interface allowing different Region implementations to support * querying. * - * @author Mitch Thomas * @since 5.5 */ public interface QueryExecutor { diff --git a/geode-core/src/main/java/com/gemstone/gemfire/cache/query/internal/QueryMonitor.java b/geode-core/src/main/java/com/gemstone/gemfire/cache/query/internal/QueryMonitor.java index 684357639850..2c6a0dd36b9f 100755 --- a/geode-core/src/main/java/com/gemstone/gemfire/cache/query/internal/QueryMonitor.java +++ b/geode-core/src/main/java/com/gemstone/gemfire/cache/query/internal/QueryMonitor.java @@ -45,7 +45,6 @@ * the max time. * * @since 6.0 - * @author agingade */ public class QueryMonitor implements Runnable { private static final Logger logger = LogService.getLogger(); @@ -306,7 +305,6 @@ public int getQueryMonitorThreadCount() { /** * Query Monitoring task, placed in the queue. - * @author agingade * */ private class QueryThreadTask { diff --git a/geode-core/src/main/java/com/gemstone/gemfire/cache/query/internal/QueryObserver.java b/geode-core/src/main/java/com/gemstone/gemfire/cache/query/internal/QueryObserver.java index ad0436d40873..f2658e298350 100644 --- a/geode-core/src/main/java/com/gemstone/gemfire/cache/query/internal/QueryObserver.java +++ b/geode-core/src/main/java/com/gemstone/gemfire/cache/query/internal/QueryObserver.java @@ -24,8 +24,6 @@ * events. See the documentation for class QueryObserverHolder for details. * * @version $Revision: 1.2 $ - * @author derekf - * @author asif */ public interface QueryObserver { diff --git a/geode-core/src/main/java/com/gemstone/gemfire/cache/query/internal/QueryObserverAdapter.java b/geode-core/src/main/java/com/gemstone/gemfire/cache/query/internal/QueryObserverAdapter.java index 41828f5ac518..574b3b82f531 100644 --- a/geode-core/src/main/java/com/gemstone/gemfire/cache/query/internal/QueryObserverAdapter.java +++ b/geode-core/src/main/java/com/gemstone/gemfire/cache/query/internal/QueryObserverAdapter.java @@ -26,7 +26,6 @@ * for details. * * @version $Revision: 1.2 $ - * @author derekf */ public class QueryObserverAdapter implements QueryObserver { diff --git a/geode-core/src/main/java/com/gemstone/gemfire/cache/query/internal/QueryObserverHolder.java b/geode-core/src/main/java/com/gemstone/gemfire/cache/query/internal/QueryObserverHolder.java index 5a21fcb0b444..b1c46754c8a0 100644 --- a/geode-core/src/main/java/com/gemstone/gemfire/cache/query/internal/QueryObserverHolder.java +++ b/geode-core/src/main/java/com/gemstone/gemfire/cache/query/internal/QueryObserverHolder.java @@ -41,7 +41,6 @@ * observer.stopMethod(arguments); } * * @version $Revision: 1.1 $ - * @author derekf */ public final class QueryObserverHolder { diff --git a/geode-core/src/main/java/com/gemstone/gemfire/cache/query/internal/QueryUtils.java b/geode-core/src/main/java/com/gemstone/gemfire/cache/query/internal/QueryUtils.java index e19318c0edf1..a385879bd03c 100644 --- a/geode-core/src/main/java/com/gemstone/gemfire/cache/query/internal/QueryUtils.java +++ b/geode-core/src/main/java/com/gemstone/gemfire/cache/query/internal/QueryUtils.java @@ -57,8 +57,6 @@ /** * - * @author Eric Zoerner - * @author Asif */ public class QueryUtils { private static final Logger logger = LogService.getLogger(); @@ -1775,7 +1773,6 @@ static List queryEquijoinConditionBucketIndexes(IndexInfo[] indxInfo, } /** * - * @author asif This is a helper class which provides information on how an * index data be used so as to make it compatible with the query. * */ @@ -2018,7 +2015,6 @@ public IndexConditioningHelper(IndexInfo indexInfo, ExecutionContext context, } /** * - * @author asif This is a helper class which contains informaion on how to * expand / cutdown index results for making it compatible with the * query. * diff --git a/geode-core/src/main/java/com/gemstone/gemfire/cache/query/internal/RangeJunction.java b/geode-core/src/main/java/com/gemstone/gemfire/cache/query/internal/RangeJunction.java index 0d9efa18c751..6397f744c215 100644 --- a/geode-core/src/main/java/com/gemstone/gemfire/cache/query/internal/RangeJunction.java +++ b/geode-core/src/main/java/com/gemstone/gemfire/cache/query/internal/RangeJunction.java @@ -50,7 +50,6 @@ * Junction, then it can possibly have a not null Iter Operand, so that it can * be evaluated along with the expansion/truncation of index result. * - * @author asif */ public class RangeJunction extends AbstractGroupOrRangeJunction { private final static int RANGE_SIZE_ESTIMATE = 3; @@ -768,7 +767,6 @@ static Index getIndex(Object o) { * apart from conditions having null or undefined as key). This class is also * extended by SingleCondnEvaluator and DoubleCondnRangeJunctionEvaluator * - * @author asif * */ private static class NotEqualConditionEvaluator extends AbstractCompiledValue @@ -957,7 +955,6 @@ public boolean isBetterFilter(Filter comparedTo, ExecutionContext context, int t * most specific inequality for the AND junction. Thus if something like a > 7 * and a >=6 , will be sufficiently represented by a > 7 * - * @author asif * */ private static class SingleCondnEvaluator extends NotEqualConditionEvaluator { @@ -1101,7 +1098,6 @@ public SelectResults auxFilterEvaluate(ExecutionContext context, * may be null ( if there is no 'NOT EQUAL' type condition satisfying the * bounded condition) * - * @author ashahid * */ private static class DoubleCondnRangeJunctionEvaluator extends diff --git a/geode-core/src/main/java/com/gemstone/gemfire/cache/query/internal/ResultsCollectionCopyOnReadWrapper.java b/geode-core/src/main/java/com/gemstone/gemfire/cache/query/internal/ResultsCollectionCopyOnReadWrapper.java index 771ccf4396f8..25b3129f67a5 100644 --- a/geode-core/src/main/java/com/gemstone/gemfire/cache/query/internal/ResultsCollectionCopyOnReadWrapper.java +++ b/geode-core/src/main/java/com/gemstone/gemfire/cache/query/internal/ResultsCollectionCopyOnReadWrapper.java @@ -44,7 +44,6 @@ * toSet, toList, toArray and toArray(Object[] a) will create new structures that will iterate through * the results using a SelectResultsCopyOnReadIterator. The new structures will then have a copy of the values. * - * @author jhuynh * @since 8.0 */ public class ResultsCollectionCopyOnReadWrapper implements SelectResults { diff --git a/geode-core/src/main/java/com/gemstone/gemfire/cache/query/internal/ResultsCollectionWrapper.java b/geode-core/src/main/java/com/gemstone/gemfire/cache/query/internal/ResultsCollectionWrapper.java index c3fcf1ab087e..7c01a9442961 100644 --- a/geode-core/src/main/java/com/gemstone/gemfire/cache/query/internal/ResultsCollectionWrapper.java +++ b/geode-core/src/main/java/com/gemstone/gemfire/cache/query/internal/ResultsCollectionWrapper.java @@ -36,8 +36,6 @@ * collection is a List; duplicates allowed unless base collection is a Set. * Defaults to modifiable unless set otherwise. * - * @author ericz - * @author asif * @since 4.0 */ public final class ResultsCollectionWrapper @@ -594,7 +592,6 @@ else if (this.base instanceof Set) { /** * - * @author Asif * */ class LimitIterator implements Iterator { diff --git a/geode-core/src/main/java/com/gemstone/gemfire/cache/query/internal/ResultsSet.java b/geode-core/src/main/java/com/gemstone/gemfire/cache/query/internal/ResultsSet.java index a7308394c361..bea9e5317711 100644 --- a/geode-core/src/main/java/com/gemstone/gemfire/cache/query/internal/ResultsSet.java +++ b/geode-core/src/main/java/com/gemstone/gemfire/cache/query/internal/ResultsSet.java @@ -37,7 +37,6 @@ * Implementation of SelectResults that extends HashSet * If the elements are Structs, then use a StructSet instead. * - * @author Eric Zoerner * @since 4.0 */ public final class ResultsSet extends HashSet implements SelectResults, diff --git a/geode-core/src/main/java/com/gemstone/gemfire/cache/query/internal/RuntimeIterator.java b/geode-core/src/main/java/com/gemstone/gemfire/cache/query/internal/RuntimeIterator.java index 0532af4bd281..1eb86918b70c 100644 --- a/geode-core/src/main/java/com/gemstone/gemfire/cache/query/internal/RuntimeIterator.java +++ b/geode-core/src/main/java/com/gemstone/gemfire/cache/query/internal/RuntimeIterator.java @@ -36,7 +36,6 @@ * * A RuntimeIterator can also be named or anonymous (name is null). * - * @author ericz */ public class RuntimeIterator extends AbstractCompiledValue { diff --git a/geode-core/src/main/java/com/gemstone/gemfire/cache/query/internal/SelectResultsComparator.java b/geode-core/src/main/java/com/gemstone/gemfire/cache/query/internal/SelectResultsComparator.java index a37b1346961d..c63e1b5cc918 100644 --- a/geode-core/src/main/java/com/gemstone/gemfire/cache/query/internal/SelectResultsComparator.java +++ b/geode-core/src/main/java/com/gemstone/gemfire/cache/query/internal/SelectResultsComparator.java @@ -26,7 +26,6 @@ * which will ensure that the intersection of the results for evaluation of AND * junction is optimum in performance. * - * @author ketan */ class SelectResultsComparator implements Comparator { diff --git a/geode-core/src/main/java/com/gemstone/gemfire/cache/query/internal/SortedResultSet.java b/geode-core/src/main/java/com/gemstone/gemfire/cache/query/internal/SortedResultSet.java index 4913df3b183c..0c31c45af3a3 100644 --- a/geode-core/src/main/java/com/gemstone/gemfire/cache/query/internal/SortedResultSet.java +++ b/geode-core/src/main/java/com/gemstone/gemfire/cache/query/internal/SortedResultSet.java @@ -32,7 +32,6 @@ * version of ResultSet used for order by clause If the elements are Structs, * then use SortedStructSet instead. * - * @author Yogesh Mahajan * @since 4.0 */ public final class SortedResultSet extends TreeSet implements SelectResults, Ordered, diff --git a/geode-core/src/main/java/com/gemstone/gemfire/cache/query/internal/SortedResultsBag.java b/geode-core/src/main/java/com/gemstone/gemfire/cache/query/internal/SortedResultsBag.java index 8704461294ab..4f6e225e2f44 100644 --- a/geode-core/src/main/java/com/gemstone/gemfire/cache/query/internal/SortedResultsBag.java +++ b/geode-core/src/main/java/com/gemstone/gemfire/cache/query/internal/SortedResultsBag.java @@ -35,7 +35,6 @@ * constructor used is the one which creates LinkedHashMap * This class is used to store ordered data of Structs too, obtained from index lookup * - * @author ashahid * * @param */ diff --git a/geode-core/src/main/java/com/gemstone/gemfire/cache/query/internal/SortedStructBag.java b/geode-core/src/main/java/com/gemstone/gemfire/cache/query/internal/SortedStructBag.java index f21d0a6d5ab2..f31824056e3c 100644 --- a/geode-core/src/main/java/com/gemstone/gemfire/cache/query/internal/SortedStructBag.java +++ b/geode-core/src/main/java/com/gemstone/gemfire/cache/query/internal/SortedStructBag.java @@ -34,7 +34,6 @@ /** * - * @author ashahid * */ public class SortedStructBag extends SortedResultsBag implements StructFields{ diff --git a/geode-core/src/main/java/com/gemstone/gemfire/cache/query/internal/SortedStructSet.java b/geode-core/src/main/java/com/gemstone/gemfire/cache/query/internal/SortedStructSet.java index 4b2bf0105a49..73f2109dc1a1 100644 --- a/geode-core/src/main/java/com/gemstone/gemfire/cache/query/internal/SortedStructSet.java +++ b/geode-core/src/main/java/com/gemstone/gemfire/cache/query/internal/SortedStructSet.java @@ -34,7 +34,6 @@ * The values in this set are stored as Object[] and get wrapped in Structs as * necessary. * - * @author Yogesh Mahajan * @since 4.0 */ public final class SortedStructSet extends TreeSet implements SelectResults, diff --git a/geode-core/src/main/java/com/gemstone/gemfire/cache/query/internal/StructBag.java b/geode-core/src/main/java/com/gemstone/gemfire/cache/query/internal/StructBag.java index 4e0f7c1d1cb5..81d46a543435 100644 --- a/geode-core/src/main/java/com/gemstone/gemfire/cache/query/internal/StructBag.java +++ b/geode-core/src/main/java/com/gemstone/gemfire/cache/query/internal/StructBag.java @@ -43,7 +43,6 @@ * The values in this set are stored as Object[] and get wrapped in Structs as * necessary. * - * @author Eric Zoerner * @since 5.1 */ public final class StructBag extends ResultsBag implements StructFields { diff --git a/geode-core/src/main/java/com/gemstone/gemfire/cache/query/internal/StructFields.java b/geode-core/src/main/java/com/gemstone/gemfire/cache/query/internal/StructFields.java index 2ce9ad760783..5aae91f74d97 100644 --- a/geode-core/src/main/java/com/gemstone/gemfire/cache/query/internal/StructFields.java +++ b/geode-core/src/main/java/com/gemstone/gemfire/cache/query/internal/StructFields.java @@ -29,7 +29,6 @@ * @see StructBag * @see SortedStructBag * - * @author ashahid * */ public interface StructFields { diff --git a/geode-core/src/main/java/com/gemstone/gemfire/cache/query/internal/StructImpl.java b/geode-core/src/main/java/com/gemstone/gemfire/cache/query/internal/StructImpl.java index a65d8503718e..5afb90d17419 100644 --- a/geode-core/src/main/java/com/gemstone/gemfire/cache/query/internal/StructImpl.java +++ b/geode-core/src/main/java/com/gemstone/gemfire/cache/query/internal/StructImpl.java @@ -31,7 +31,6 @@ /** * Implementation of Struct - * @author Eric Zoerner * @since 4.0 */ public class StructImpl diff --git a/geode-core/src/main/java/com/gemstone/gemfire/cache/query/internal/StructSet.java b/geode-core/src/main/java/com/gemstone/gemfire/cache/query/internal/StructSet.java index a6570529af63..9d95a98138d9 100644 --- a/geode-core/src/main/java/com/gemstone/gemfire/cache/query/internal/StructSet.java +++ b/geode-core/src/main/java/com/gemstone/gemfire/cache/query/internal/StructSet.java @@ -41,7 +41,6 @@ * The values in this set are stored as Object[] and get wrapped in Structs as * necessary. * - * @author Eric Zoerner * @since 4.0 */ public final class StructSet /*extends ObjectOpenCustomHashSet*/ implements Set, SelectResults, diff --git a/geode-core/src/main/java/com/gemstone/gemfire/cache/query/internal/Undefined.java b/geode-core/src/main/java/com/gemstone/gemfire/cache/query/internal/Undefined.java index 87d82399d2b2..e65c796048dd 100644 --- a/geode-core/src/main/java/com/gemstone/gemfire/cache/query/internal/Undefined.java +++ b/geode-core/src/main/java/com/gemstone/gemfire/cache/query/internal/Undefined.java @@ -30,7 +30,6 @@ * accesses address, then the result is not undefined, it is null. * * @version $Revision: 1.1 $ - * @author ericz * */ diff --git a/geode-core/src/main/java/com/gemstone/gemfire/cache/query/internal/aggregate/AbstractAggregator.java b/geode-core/src/main/java/com/gemstone/gemfire/cache/query/internal/aggregate/AbstractAggregator.java index ab90aaf6e9dc..0d56a3ac506b 100644 --- a/geode-core/src/main/java/com/gemstone/gemfire/cache/query/internal/aggregate/AbstractAggregator.java +++ b/geode-core/src/main/java/com/gemstone/gemfire/cache/query/internal/aggregate/AbstractAggregator.java @@ -21,7 +21,6 @@ /** * Abstract Aggregator class providing support for downcasting the result * - * @author ashahid * */ public abstract class AbstractAggregator implements Aggregator { diff --git a/geode-core/src/main/java/com/gemstone/gemfire/cache/query/internal/aggregate/Avg.java b/geode-core/src/main/java/com/gemstone/gemfire/cache/query/internal/aggregate/Avg.java index d76a8795c520..7a0f00a37c98 100644 --- a/geode-core/src/main/java/com/gemstone/gemfire/cache/query/internal/aggregate/Avg.java +++ b/geode-core/src/main/java/com/gemstone/gemfire/cache/query/internal/aggregate/Avg.java @@ -21,7 +21,6 @@ /** * Computes the non distinct average for replicated region based queries * - * @author ashahid * */ public class Avg extends Sum { diff --git a/geode-core/src/main/java/com/gemstone/gemfire/cache/query/internal/aggregate/AvgBucketNode.java b/geode-core/src/main/java/com/gemstone/gemfire/cache/query/internal/aggregate/AvgBucketNode.java index 0152c71ffbca..dae038e9f712 100644 --- a/geode-core/src/main/java/com/gemstone/gemfire/cache/query/internal/aggregate/AvgBucketNode.java +++ b/geode-core/src/main/java/com/gemstone/gemfire/cache/query/internal/aggregate/AvgBucketNode.java @@ -22,7 +22,6 @@ * The aggregator for compuing average which is used on the bucket node for * partitioned region based queries. * - * @author ashahid * */ public class AvgBucketNode extends Sum { diff --git a/geode-core/src/main/java/com/gemstone/gemfire/cache/query/internal/aggregate/AvgDistinct.java b/geode-core/src/main/java/com/gemstone/gemfire/cache/query/internal/aggregate/AvgDistinct.java index 2028d073938b..45487316d60e 100644 --- a/geode-core/src/main/java/com/gemstone/gemfire/cache/query/internal/aggregate/AvgDistinct.java +++ b/geode-core/src/main/java/com/gemstone/gemfire/cache/query/internal/aggregate/AvgDistinct.java @@ -21,7 +21,6 @@ /** * Computes the average of distinct values for replicated region based queries. * - * @author ashahid * */ public class AvgDistinct extends SumDistinct { diff --git a/geode-core/src/main/java/com/gemstone/gemfire/cache/query/internal/aggregate/AvgDistinctPRQueryNode.java b/geode-core/src/main/java/com/gemstone/gemfire/cache/query/internal/aggregate/AvgDistinctPRQueryNode.java index 984a359ac565..20d368d203ed 100644 --- a/geode-core/src/main/java/com/gemstone/gemfire/cache/query/internal/aggregate/AvgDistinctPRQueryNode.java +++ b/geode-core/src/main/java/com/gemstone/gemfire/cache/query/internal/aggregate/AvgDistinctPRQueryNode.java @@ -21,7 +21,6 @@ * based queries. This aggregator is initialized on the PR query node & acts on * the results obtained from bucket nodes. * - * @author ashahid * */ public class AvgDistinctPRQueryNode extends SumDistinctPRQueryNode { diff --git a/geode-core/src/main/java/com/gemstone/gemfire/cache/query/internal/aggregate/AvgPRQueryNode.java b/geode-core/src/main/java/com/gemstone/gemfire/cache/query/internal/aggregate/AvgPRQueryNode.java index dbec4e737cf1..f8929711c1ff 100644 --- a/geode-core/src/main/java/com/gemstone/gemfire/cache/query/internal/aggregate/AvgPRQueryNode.java +++ b/geode-core/src/main/java/com/gemstone/gemfire/cache/query/internal/aggregate/AvgPRQueryNode.java @@ -20,7 +20,6 @@ * Computes the final non distinct average for a partitioned region based query. * This aggregator is instantiated on the PR query node. * - * @author ashahid * */ public class AvgPRQueryNode extends Sum { diff --git a/geode-core/src/main/java/com/gemstone/gemfire/cache/query/internal/aggregate/Count.java b/geode-core/src/main/java/com/gemstone/gemfire/cache/query/internal/aggregate/Count.java index d491e0b97704..8992150b5863 100644 --- a/geode-core/src/main/java/com/gemstone/gemfire/cache/query/internal/aggregate/Count.java +++ b/geode-core/src/main/java/com/gemstone/gemfire/cache/query/internal/aggregate/Count.java @@ -23,7 +23,6 @@ * Computes the count of the non distinct rows for replicated & PR based * queries. * - * @author ashahid * */ public class Count implements Aggregator { diff --git a/geode-core/src/main/java/com/gemstone/gemfire/cache/query/internal/aggregate/CountDistinct.java b/geode-core/src/main/java/com/gemstone/gemfire/cache/query/internal/aggregate/CountDistinct.java index d93060fd67a2..c878a24bac71 100644 --- a/geode-core/src/main/java/com/gemstone/gemfire/cache/query/internal/aggregate/CountDistinct.java +++ b/geode-core/src/main/java/com/gemstone/gemfire/cache/query/internal/aggregate/CountDistinct.java @@ -20,7 +20,6 @@ * * Computes the count of the distinct rows for replicated region based queries. * - * @author ashahid */ public class CountDistinct extends DistinctAggregator { diff --git a/geode-core/src/main/java/com/gemstone/gemfire/cache/query/internal/aggregate/CountDistinctPRQueryNode.java b/geode-core/src/main/java/com/gemstone/gemfire/cache/query/internal/aggregate/CountDistinctPRQueryNode.java index 5559b5edc230..b2f88a7e7ed1 100644 --- a/geode-core/src/main/java/com/gemstone/gemfire/cache/query/internal/aggregate/CountDistinctPRQueryNode.java +++ b/geode-core/src/main/java/com/gemstone/gemfire/cache/query/internal/aggregate/CountDistinctPRQueryNode.java @@ -21,7 +21,6 @@ /** * Computes the count of the distinct rows on the PR query node. * - * @author ashahid * */ public class CountDistinctPRQueryNode extends DistinctAggregator { diff --git a/geode-core/src/main/java/com/gemstone/gemfire/cache/query/internal/aggregate/CountPRQueryNode.java b/geode-core/src/main/java/com/gemstone/gemfire/cache/query/internal/aggregate/CountPRQueryNode.java index 59c3816643f9..50eb07bf4fb1 100644 --- a/geode-core/src/main/java/com/gemstone/gemfire/cache/query/internal/aggregate/CountPRQueryNode.java +++ b/geode-core/src/main/java/com/gemstone/gemfire/cache/query/internal/aggregate/CountPRQueryNode.java @@ -21,7 +21,6 @@ /** * Computes the count of the rows on the PR query node * - * @author ashahid * */ public class CountPRQueryNode implements Aggregator { diff --git a/geode-core/src/main/java/com/gemstone/gemfire/cache/query/internal/aggregate/DistinctAggregator.java b/geode-core/src/main/java/com/gemstone/gemfire/cache/query/internal/aggregate/DistinctAggregator.java index c2f138045033..272089773bba 100644 --- a/geode-core/src/main/java/com/gemstone/gemfire/cache/query/internal/aggregate/DistinctAggregator.java +++ b/geode-core/src/main/java/com/gemstone/gemfire/cache/query/internal/aggregate/DistinctAggregator.java @@ -25,7 +25,6 @@ * The class used to hold the distinct values. This will get instantiated on the * bucket node as part of distinct queries for sum, count, average. * - * @author ashahid * */ public class DistinctAggregator extends AbstractAggregator { diff --git a/geode-core/src/main/java/com/gemstone/gemfire/cache/query/internal/aggregate/MaxMin.java b/geode-core/src/main/java/com/gemstone/gemfire/cache/query/internal/aggregate/MaxMin.java index b6d216a6075b..b643c9cc39d9 100644 --- a/geode-core/src/main/java/com/gemstone/gemfire/cache/query/internal/aggregate/MaxMin.java +++ b/geode-core/src/main/java/com/gemstone/gemfire/cache/query/internal/aggregate/MaxMin.java @@ -22,7 +22,6 @@ /** * Computes the Max or Min * - * @author ashahid * */ diff --git a/geode-core/src/main/java/com/gemstone/gemfire/cache/query/internal/aggregate/Sum.java b/geode-core/src/main/java/com/gemstone/gemfire/cache/query/internal/aggregate/Sum.java index 180ef865cb5d..96f80b8a53b9 100644 --- a/geode-core/src/main/java/com/gemstone/gemfire/cache/query/internal/aggregate/Sum.java +++ b/geode-core/src/main/java/com/gemstone/gemfire/cache/query/internal/aggregate/Sum.java @@ -21,7 +21,6 @@ /** * Computes the sum for replicated & PR based queries. * - * @author ashahid * */ public class Sum extends AbstractAggregator { diff --git a/geode-core/src/main/java/com/gemstone/gemfire/cache/query/internal/aggregate/SumDistinct.java b/geode-core/src/main/java/com/gemstone/gemfire/cache/query/internal/aggregate/SumDistinct.java index 49b1222974d2..57c2a9a5a6e8 100644 --- a/geode-core/src/main/java/com/gemstone/gemfire/cache/query/internal/aggregate/SumDistinct.java +++ b/geode-core/src/main/java/com/gemstone/gemfire/cache/query/internal/aggregate/SumDistinct.java @@ -18,7 +18,6 @@ /** * Computes the sum of distinct values for replicated region based queries. - * @author ashahid * */ public class SumDistinct extends DistinctAggregator { diff --git a/geode-core/src/main/java/com/gemstone/gemfire/cache/query/internal/aggregate/SumDistinctPRQueryNode.java b/geode-core/src/main/java/com/gemstone/gemfire/cache/query/internal/aggregate/SumDistinctPRQueryNode.java index d129ad68af8c..bee5df25d126 100644 --- a/geode-core/src/main/java/com/gemstone/gemfire/cache/query/internal/aggregate/SumDistinctPRQueryNode.java +++ b/geode-core/src/main/java/com/gemstone/gemfire/cache/query/internal/aggregate/SumDistinctPRQueryNode.java @@ -21,7 +21,6 @@ /** * Computes the sum of distinct values on the PR query node. * - * @author ashahid * */ public class SumDistinctPRQueryNode extends DistinctAggregator { diff --git a/geode-core/src/main/java/com/gemstone/gemfire/cache/query/internal/index/CompactRangeIndex.java b/geode-core/src/main/java/com/gemstone/gemfire/cache/query/internal/index/CompactRangeIndex.java index 1e44bb4f1cf3..de356996a3fb 100644 --- a/geode-core/src/main/java/com/gemstone/gemfire/cache/query/internal/index/CompactRangeIndex.java +++ b/geode-core/src/main/java/com/gemstone/gemfire/cache/query/internal/index/CompactRangeIndex.java @@ -83,7 +83,6 @@ * * Currently this implementation only supports an index on a region path. * - * @author Eric Zoerner * @since 6.0 */ public class CompactRangeIndex extends AbstractIndex { @@ -1171,8 +1170,6 @@ public String toString() { /** * - * @author vaibhav - * @author Asif */ class IMQEvaluator implements IndexedExpressionEvaluator { private Cache cache; diff --git a/geode-core/src/main/java/com/gemstone/gemfire/cache/query/internal/index/FunctionalIndexCreationHelper.java b/geode-core/src/main/java/com/gemstone/gemfire/cache/query/internal/index/FunctionalIndexCreationHelper.java index f7f1a94e34ac..60f1954f891d 100644 --- a/geode-core/src/main/java/com/gemstone/gemfire/cache/query/internal/index/FunctionalIndexCreationHelper.java +++ b/geode-core/src/main/java/com/gemstone/gemfire/cache/query/internal/index/FunctionalIndexCreationHelper.java @@ -57,8 +57,6 @@ import com.gemstone.gemfire.internal.i18n.LocalizedStrings; /** - * @author asif - * @author vaibhav * */ class FunctionalIndexCreationHelper extends IndexCreationHelper { diff --git a/geode-core/src/main/java/com/gemstone/gemfire/cache/query/internal/index/IMQException.java b/geode-core/src/main/java/com/gemstone/gemfire/cache/query/internal/index/IMQException.java index 35198aaa4720..e71666822410 100644 --- a/geode-core/src/main/java/com/gemstone/gemfire/cache/query/internal/index/IMQException.java +++ b/geode-core/src/main/java/com/gemstone/gemfire/cache/query/internal/index/IMQException.java @@ -26,7 +26,6 @@ /** * - * @author vaibhav */ public class IMQException extends QueryException { private static final long serialVersionUID = -5012914292321850775L; diff --git a/geode-core/src/main/java/com/gemstone/gemfire/cache/query/internal/index/IndexConcurrentHashSet.java b/geode-core/src/main/java/com/gemstone/gemfire/cache/query/internal/index/IndexConcurrentHashSet.java index b3992733f4fe..fdb42e62f36b 100644 --- a/geode-core/src/main/java/com/gemstone/gemfire/cache/query/internal/index/IndexConcurrentHashSet.java +++ b/geode-core/src/main/java/com/gemstone/gemfire/cache/query/internal/index/IndexConcurrentHashSet.java @@ -29,7 +29,6 @@ * for a query which can be approximate so it does NOT have to lock internal * segments for accurate count. * - * @author shobhit * @param * @since 7.0 */ diff --git a/geode-core/src/main/java/com/gemstone/gemfire/cache/query/internal/index/IndexCreationData.java b/geode-core/src/main/java/com/gemstone/gemfire/cache/query/internal/index/IndexCreationData.java index ac54678e3000..87d945a5e4e3 100644 --- a/geode-core/src/main/java/com/gemstone/gemfire/cache/query/internal/index/IndexCreationData.java +++ b/geode-core/src/main/java/com/gemstone/gemfire/cache/query/internal/index/IndexCreationData.java @@ -31,7 +31,6 @@ import com.gemstone.gemfire.internal.Version; /** - * @author asifs * * This class contains the information needed to create an index It will * contain the callback data between invocation diff --git a/geode-core/src/main/java/com/gemstone/gemfire/cache/query/internal/index/IndexCreationHelper.java b/geode-core/src/main/java/com/gemstone/gemfire/cache/query/internal/index/IndexCreationHelper.java index 9a10ef032a21..0ca43b5b939b 100644 --- a/geode-core/src/main/java/com/gemstone/gemfire/cache/query/internal/index/IndexCreationHelper.java +++ b/geode-core/src/main/java/com/gemstone/gemfire/cache/query/internal/index/IndexCreationHelper.java @@ -31,8 +31,6 @@ /** * - * @author vaibhav - * @author Asif */ public abstract class IndexCreationHelper { diff --git a/geode-core/src/main/java/com/gemstone/gemfire/cache/query/internal/index/IndexData.java b/geode-core/src/main/java/com/gemstone/gemfire/cache/query/internal/index/IndexData.java index 1cfb4e5f0ce9..85b39abb4513 100644 --- a/geode-core/src/main/java/com/gemstone/gemfire/cache/query/internal/index/IndexData.java +++ b/geode-core/src/main/java/com/gemstone/gemfire/cache/query/internal/index/IndexData.java @@ -18,7 +18,6 @@ /** * - * @author Asif * * Object of this class contains information of various attributes of Range * Index for a filter evaluatable condition , from the perspective of the query diff --git a/geode-core/src/main/java/com/gemstone/gemfire/cache/query/internal/index/IndexElemArray.java b/geode-core/src/main/java/com/gemstone/gemfire/cache/query/internal/index/IndexElemArray.java index de694a400b94..e6e29de3be73 100644 --- a/geode-core/src/main/java/com/gemstone/gemfire/cache/query/internal/index/IndexElemArray.java +++ b/geode-core/src/main/java/com/gemstone/gemfire/cache/query/internal/index/IndexElemArray.java @@ -25,7 +25,6 @@ * A wrapper around an object array for storing values in index data structure * with minimal set of operations supported and the maximum size of 128 elements * - * @author Tejas Nomulwar * @since 7.0 */ public class IndexElemArray implements Iterable, Collection { diff --git a/geode-core/src/main/java/com/gemstone/gemfire/cache/query/internal/index/IndexStore.java b/geode-core/src/main/java/com/gemstone/gemfire/cache/query/internal/index/IndexStore.java index 38811720174c..fa425cfa219f 100644 --- a/geode-core/src/main/java/com/gemstone/gemfire/cache/query/internal/index/IndexStore.java +++ b/geode-core/src/main/java/com/gemstone/gemfire/cache/query/internal/index/IndexStore.java @@ -23,8 +23,6 @@ /** * - * @author Tejas Nomulwar - * @author Jason Huynh * @since 8.0 */ public interface IndexStore { diff --git a/geode-core/src/main/java/com/gemstone/gemfire/cache/query/internal/index/IndexUtils.java b/geode-core/src/main/java/com/gemstone/gemfire/cache/query/internal/index/IndexUtils.java index 195c4419d526..ee1fb6bd5d11 100644 --- a/geode-core/src/main/java/com/gemstone/gemfire/cache/query/internal/index/IndexUtils.java +++ b/geode-core/src/main/java/com/gemstone/gemfire/cache/query/internal/index/IndexUtils.java @@ -34,7 +34,6 @@ import com.gemstone.gemfire.cache.query.internal.index.IndexManager.TestHook; /** - * @author vaibhav */ public class IndexUtils { diff --git a/geode-core/src/main/java/com/gemstone/gemfire/cache/query/internal/index/IndexedExpressionEvaluator.java b/geode-core/src/main/java/com/gemstone/gemfire/cache/query/internal/index/IndexedExpressionEvaluator.java index ee3de51225ba..a8e9ee4f21a8 100644 --- a/geode-core/src/main/java/com/gemstone/gemfire/cache/query/internal/index/IndexedExpressionEvaluator.java +++ b/geode-core/src/main/java/com/gemstone/gemfire/cache/query/internal/index/IndexedExpressionEvaluator.java @@ -29,7 +29,6 @@ /** * - * @author vaibhav */ public interface IndexedExpressionEvaluator { diff --git a/geode-core/src/main/java/com/gemstone/gemfire/cache/query/internal/index/MapIndexStore.java b/geode-core/src/main/java/com/gemstone/gemfire/cache/query/internal/index/MapIndexStore.java index fcf4d1dd3651..92b0632d2fff 100644 --- a/geode-core/src/main/java/com/gemstone/gemfire/cache/query/internal/index/MapIndexStore.java +++ b/geode-core/src/main/java/com/gemstone/gemfire/cache/query/internal/index/MapIndexStore.java @@ -35,7 +35,6 @@ /** * Implementation of IndexStorage that is backed by an IndexMap - * @author jhuynh * */ public class MapIndexStore implements IndexStore { @@ -274,7 +273,6 @@ public void close() { /** * A helper class that wraps and deserializes IndexEntry values for indexes - * @author jhuynh * */ private class MapIndexStoreEntry implements IndexStoreEntry { diff --git a/geode-core/src/main/java/com/gemstone/gemfire/cache/query/internal/index/MemoryIndexStore.java b/geode-core/src/main/java/com/gemstone/gemfire/cache/query/internal/index/MemoryIndexStore.java index 20a7a4f9955a..3f9a53832780 100644 --- a/geode-core/src/main/java/com/gemstone/gemfire/cache/query/internal/index/MemoryIndexStore.java +++ b/geode-core/src/main/java/com/gemstone/gemfire/cache/query/internal/index/MemoryIndexStore.java @@ -49,7 +49,6 @@ /** * The in-memory index storage * - * @author Tejas Nomulwar * @since 8.0 */ public class MemoryIndexStore implements IndexStore { diff --git a/geode-core/src/main/java/com/gemstone/gemfire/cache/query/internal/index/PartitionedIndex.java b/geode-core/src/main/java/com/gemstone/gemfire/cache/query/internal/index/PartitionedIndex.java index deea1427871d..255f79ab135f 100755 --- a/geode-core/src/main/java/com/gemstone/gemfire/cache/query/internal/index/PartitionedIndex.java +++ b/geode-core/src/main/java/com/gemstone/gemfire/cache/query/internal/index/PartitionedIndex.java @@ -51,7 +51,6 @@ * buckets. * * @since 5.1 - * @author Rahul Dubey */ public class PartitionedIndex extends AbstractIndex @@ -437,7 +436,6 @@ protected InternalIndexStatistics createExplicitStats(String indexName) { * Internal class for partitioned index statistics. Statistics are not * supported right now. * - * @author rdubey */ class PartitionedIndexStatistics extends InternalIndexStatistics { private IndexStats vsdStats; diff --git a/geode-core/src/main/java/com/gemstone/gemfire/cache/query/internal/index/PrimaryKeyIndex.java b/geode-core/src/main/java/com/gemstone/gemfire/cache/query/internal/index/PrimaryKeyIndex.java index 17799dce971c..718a2c400c14 100644 --- a/geode-core/src/main/java/com/gemstone/gemfire/cache/query/internal/index/PrimaryKeyIndex.java +++ b/geode-core/src/main/java/com/gemstone/gemfire/cache/query/internal/index/PrimaryKeyIndex.java @@ -55,7 +55,6 @@ /** * - * @author vaibhav */ public class PrimaryKeyIndex extends AbstractIndex { diff --git a/geode-core/src/main/java/com/gemstone/gemfire/cache/query/internal/index/RangeIndex.java b/geode-core/src/main/java/com/gemstone/gemfire/cache/query/internal/index/RangeIndex.java index 6e41f16444d6..cae20c4a07e8 100644 --- a/geode-core/src/main/java/com/gemstone/gemfire/cache/query/internal/index/RangeIndex.java +++ b/geode-core/src/main/java/com/gemstone/gemfire/cache/query/internal/index/RangeIndex.java @@ -62,8 +62,6 @@ import com.gemstone.gemfire.internal.i18n.LocalizedStrings; /** - * @author vaibhav - * @author asif */ public class RangeIndex extends AbstractIndex { diff --git a/geode-core/src/main/java/com/gemstone/gemfire/cache/query/internal/parse/ASTAggregateFunc.java b/geode-core/src/main/java/com/gemstone/gemfire/cache/query/internal/parse/ASTAggregateFunc.java index 66955994db79..8c989f921c73 100644 --- a/geode-core/src/main/java/com/gemstone/gemfire/cache/query/internal/parse/ASTAggregateFunc.java +++ b/geode-core/src/main/java/com/gemstone/gemfire/cache/query/internal/parse/ASTAggregateFunc.java @@ -24,7 +24,6 @@ /** * - * @author ashahid * */ public class ASTAggregateFunc extends GemFireAST { diff --git a/geode-core/src/main/java/com/gemstone/gemfire/cache/query/internal/parse/ASTCombination.java b/geode-core/src/main/java/com/gemstone/gemfire/cache/query/internal/parse/ASTCombination.java index d8032944a2e7..a4b4444c338c 100644 --- a/geode-core/src/main/java/com/gemstone/gemfire/cache/query/internal/parse/ASTCombination.java +++ b/geode-core/src/main/java/com/gemstone/gemfire/cache/query/internal/parse/ASTCombination.java @@ -23,7 +23,6 @@ /** * - * @author Eric Zoerner */ public class ASTCombination extends GemFireAST { private static final long serialVersionUID = -5390937242819850292L; diff --git a/geode-core/src/main/java/com/gemstone/gemfire/cache/query/internal/parse/ASTGroupBy.java b/geode-core/src/main/java/com/gemstone/gemfire/cache/query/internal/parse/ASTGroupBy.java index 0319ab51d446..6f4f6cd2d1aa 100644 --- a/geode-core/src/main/java/com/gemstone/gemfire/cache/query/internal/parse/ASTGroupBy.java +++ b/geode-core/src/main/java/com/gemstone/gemfire/cache/query/internal/parse/ASTGroupBy.java @@ -20,7 +20,6 @@ import com.gemstone.gemfire.cache.query.internal.QCompiler; /** * - * @author Yogesh Mahajan * */ public class ASTGroupBy extends GemFireAST { diff --git a/geode-core/src/main/java/com/gemstone/gemfire/cache/query/internal/parse/ASTHint.java b/geode-core/src/main/java/com/gemstone/gemfire/cache/query/internal/parse/ASTHint.java index 6a67b2f0ba19..6b283d0cd13b 100644 --- a/geode-core/src/main/java/com/gemstone/gemfire/cache/query/internal/parse/ASTHint.java +++ b/geode-core/src/main/java/com/gemstone/gemfire/cache/query/internal/parse/ASTHint.java @@ -24,7 +24,6 @@ import com.gemstone.gemfire.cache.query.internal.QCompiler; /** - * @author jhuynh * * @since 8.1 * diff --git a/geode-core/src/main/java/com/gemstone/gemfire/cache/query/internal/parse/ASTHintIdentifier.java b/geode-core/src/main/java/com/gemstone/gemfire/cache/query/internal/parse/ASTHintIdentifier.java index dbfe41a0fcc4..5587bb6c4ad9 100644 --- a/geode-core/src/main/java/com/gemstone/gemfire/cache/query/internal/parse/ASTHintIdentifier.java +++ b/geode-core/src/main/java/com/gemstone/gemfire/cache/query/internal/parse/ASTHintIdentifier.java @@ -24,7 +24,6 @@ import com.gemstone.gemfire.cache.query.internal.QCompiler; /** - * @author jhuynh * * @since 8.1 * diff --git a/geode-core/src/main/java/com/gemstone/gemfire/cache/query/internal/parse/ASTIteratorDef.java b/geode-core/src/main/java/com/gemstone/gemfire/cache/query/internal/parse/ASTIteratorDef.java index 711e275d75ed..e4a1e1968420 100644 --- a/geode-core/src/main/java/com/gemstone/gemfire/cache/query/internal/parse/ASTIteratorDef.java +++ b/geode-core/src/main/java/com/gemstone/gemfire/cache/query/internal/parse/ASTIteratorDef.java @@ -24,7 +24,6 @@ /** * - * @author Eric Zoerner */ public class ASTIteratorDef extends GemFireAST { private static final long serialVersionUID = -736956634497535951L; diff --git a/geode-core/src/main/java/com/gemstone/gemfire/cache/query/internal/parse/ASTLike.java b/geode-core/src/main/java/com/gemstone/gemfire/cache/query/internal/parse/ASTLike.java index ee92358136a0..075dfbccbb8f 100755 --- a/geode-core/src/main/java/com/gemstone/gemfire/cache/query/internal/parse/ASTLike.java +++ b/geode-core/src/main/java/com/gemstone/gemfire/cache/query/internal/parse/ASTLike.java @@ -24,7 +24,6 @@ import com.gemstone.gemfire.cache.query.internal.QCompiler; /** - * @author ashahid * */ public class ASTLike extends GemFireAST{ diff --git a/geode-core/src/main/java/com/gemstone/gemfire/cache/query/internal/parse/ASTLimit.java b/geode-core/src/main/java/com/gemstone/gemfire/cache/query/internal/parse/ASTLimit.java index 796c20de2780..ad36cee4bab2 100644 --- a/geode-core/src/main/java/com/gemstone/gemfire/cache/query/internal/parse/ASTLimit.java +++ b/geode-core/src/main/java/com/gemstone/gemfire/cache/query/internal/parse/ASTLimit.java @@ -21,7 +21,6 @@ /** * - * @author Asif Shahid */ public class ASTLimit extends GemFireAST { diff --git a/geode-core/src/main/java/com/gemstone/gemfire/cache/query/internal/parse/ASTOrderBy.java b/geode-core/src/main/java/com/gemstone/gemfire/cache/query/internal/parse/ASTOrderBy.java index c423ba9a2186..a0d1414d634d 100644 --- a/geode-core/src/main/java/com/gemstone/gemfire/cache/query/internal/parse/ASTOrderBy.java +++ b/geode-core/src/main/java/com/gemstone/gemfire/cache/query/internal/parse/ASTOrderBy.java @@ -20,7 +20,6 @@ import com.gemstone.gemfire.cache.query.internal.QCompiler; /** * - * @author Yogesh Mahajan * */ public class ASTOrderBy extends GemFireAST { diff --git a/geode-core/src/main/java/com/gemstone/gemfire/cache/query/internal/parse/ASTSortCriterion.java b/geode-core/src/main/java/com/gemstone/gemfire/cache/query/internal/parse/ASTSortCriterion.java index 46a573aa451c..ac4aa8dc805a 100644 --- a/geode-core/src/main/java/com/gemstone/gemfire/cache/query/internal/parse/ASTSortCriterion.java +++ b/geode-core/src/main/java/com/gemstone/gemfire/cache/query/internal/parse/ASTSortCriterion.java @@ -22,7 +22,6 @@ /** * - * @author Yogesh Mahajan */ public class ASTSortCriterion extends GemFireAST { private static final long serialVersionUID = -3654854374157753771L; diff --git a/geode-core/src/main/java/com/gemstone/gemfire/cache/query/internal/parse/ASTTrace.java b/geode-core/src/main/java/com/gemstone/gemfire/cache/query/internal/parse/ASTTrace.java index bf657a841ba3..6d523300b277 100644 --- a/geode-core/src/main/java/com/gemstone/gemfire/cache/query/internal/parse/ASTTrace.java +++ b/geode-core/src/main/java/com/gemstone/gemfire/cache/query/internal/parse/ASTTrace.java @@ -22,7 +22,6 @@ import com.gemstone.gemfire.cache.query.internal.QCompiler; /** - * @author shobhit * * @since 6.6.2 * diff --git a/geode-core/src/main/java/com/gemstone/gemfire/cache/query/internal/parse/ASTUnary.java b/geode-core/src/main/java/com/gemstone/gemfire/cache/query/internal/parse/ASTUnary.java index 909a92c853cb..32944fc62337 100644 --- a/geode-core/src/main/java/com/gemstone/gemfire/cache/query/internal/parse/ASTUnary.java +++ b/geode-core/src/main/java/com/gemstone/gemfire/cache/query/internal/parse/ASTUnary.java @@ -22,7 +22,6 @@ import com.gemstone.gemfire.cache.query.internal.Support; /** * - * @author Yogesh Mahajan * */ public class ASTUnary extends GemFireAST { diff --git a/geode-core/src/main/java/com/gemstone/gemfire/cache/query/internal/parse/ASTUnsupported.java b/geode-core/src/main/java/com/gemstone/gemfire/cache/query/internal/parse/ASTUnsupported.java index 1e0777ec0dde..ec3fa362c934 100644 --- a/geode-core/src/main/java/com/gemstone/gemfire/cache/query/internal/parse/ASTUnsupported.java +++ b/geode-core/src/main/java/com/gemstone/gemfire/cache/query/internal/parse/ASTUnsupported.java @@ -26,7 +26,6 @@ * because it is either data for another operation or is * a feature that is not yet supported by GemFire * - * @author Eric Zoerner */ public class ASTUnsupported extends GemFireAST { private static final long serialVersionUID = -1192307218047393827L; diff --git a/geode-core/src/main/java/com/gemstone/gemfire/cache/query/internal/parse/GemFireAST.java b/geode-core/src/main/java/com/gemstone/gemfire/cache/query/internal/parse/GemFireAST.java index 6ab06b59fd46..efe01da462a5 100644 --- a/geode-core/src/main/java/com/gemstone/gemfire/cache/query/internal/parse/GemFireAST.java +++ b/geode-core/src/main/java/com/gemstone/gemfire/cache/query/internal/parse/GemFireAST.java @@ -24,7 +24,6 @@ /** * - * @author Eric Zoerner */ public class GemFireAST extends CommonAST { private static final long serialVersionUID = 779964802274305208L; diff --git a/geode-core/src/main/java/com/gemstone/gemfire/cache/query/internal/parse/UtilParser.java b/geode-core/src/main/java/com/gemstone/gemfire/cache/query/internal/parse/UtilParser.java index 352f62234614..2b63f02fd257 100644 --- a/geode-core/src/main/java/com/gemstone/gemfire/cache/query/internal/parse/UtilParser.java +++ b/geode-core/src/main/java/com/gemstone/gemfire/cache/query/internal/parse/UtilParser.java @@ -29,7 +29,6 @@ /** * - * @author ericz */ public class UtilParser extends LLkParser { diff --git a/geode-core/src/main/java/com/gemstone/gemfire/cache/query/internal/types/CollectionTypeImpl.java b/geode-core/src/main/java/com/gemstone/gemfire/cache/query/internal/types/CollectionTypeImpl.java index 4a1d192455c6..682ae95ce783 100644 --- a/geode-core/src/main/java/com/gemstone/gemfire/cache/query/internal/types/CollectionTypeImpl.java +++ b/geode-core/src/main/java/com/gemstone/gemfire/cache/query/internal/types/CollectionTypeImpl.java @@ -34,7 +34,6 @@ /** * Implementation of CollectionType - * @author Eric Zoerner * @since 4.0 */ public class CollectionTypeImpl extends ObjectTypeImpl implements CollectionType { diff --git a/geode-core/src/main/java/com/gemstone/gemfire/cache/query/internal/types/ExtendedNumericComparator.java b/geode-core/src/main/java/com/gemstone/gemfire/cache/query/internal/types/ExtendedNumericComparator.java index c96daa11111b..649a8c26ce36 100755 --- a/geode-core/src/main/java/com/gemstone/gemfire/cache/query/internal/types/ExtendedNumericComparator.java +++ b/geode-core/src/main/java/com/gemstone/gemfire/cache/query/internal/types/ExtendedNumericComparator.java @@ -25,7 +25,6 @@ /** * A general comparator that will let us compare different numeric types for equality * - * @author jhuynh */ public class ExtendedNumericComparator extends NumericComparator implements Comparator { diff --git a/geode-core/src/main/java/com/gemstone/gemfire/cache/query/internal/types/MapTypeImpl.java b/geode-core/src/main/java/com/gemstone/gemfire/cache/query/internal/types/MapTypeImpl.java index a8bf6f788ce3..988810437e10 100644 --- a/geode-core/src/main/java/com/gemstone/gemfire/cache/query/internal/types/MapTypeImpl.java +++ b/geode-core/src/main/java/com/gemstone/gemfire/cache/query/internal/types/MapTypeImpl.java @@ -24,7 +24,6 @@ /** * Implementation of CollectionType - * @author Eric Zoerner * @since 4.0 */ public final class MapTypeImpl extends CollectionTypeImpl diff --git a/geode-core/src/main/java/com/gemstone/gemfire/cache/query/internal/types/NumericComparator.java b/geode-core/src/main/java/com/gemstone/gemfire/cache/query/internal/types/NumericComparator.java index 16ab7f276a2c..a09313c926f3 100644 --- a/geode-core/src/main/java/com/gemstone/gemfire/cache/query/internal/types/NumericComparator.java +++ b/geode-core/src/main/java/com/gemstone/gemfire/cache/query/internal/types/NumericComparator.java @@ -24,7 +24,6 @@ * Comparator for mixed comparisons between numbers. * * @version $Revision: 1.1 $ - * @author ericz */ diff --git a/geode-core/src/main/java/com/gemstone/gemfire/cache/query/internal/types/ObjectTypeImpl.java b/geode-core/src/main/java/com/gemstone/gemfire/cache/query/internal/types/ObjectTypeImpl.java index 39ae8968fe7f..b41da46cd76c 100644 --- a/geode-core/src/main/java/com/gemstone/gemfire/cache/query/internal/types/ObjectTypeImpl.java +++ b/geode-core/src/main/java/com/gemstone/gemfire/cache/query/internal/types/ObjectTypeImpl.java @@ -30,7 +30,6 @@ /** * Implementation of ObjectType - * @author Eric Zoerner * @since 4.0 */ public class ObjectTypeImpl implements ObjectType, DataSerializableFixedID { diff --git a/geode-core/src/main/java/com/gemstone/gemfire/cache/query/internal/types/StructTypeImpl.java b/geode-core/src/main/java/com/gemstone/gemfire/cache/query/internal/types/StructTypeImpl.java index 046c9d44a88b..dfa9cc09ab9a 100644 --- a/geode-core/src/main/java/com/gemstone/gemfire/cache/query/internal/types/StructTypeImpl.java +++ b/geode-core/src/main/java/com/gemstone/gemfire/cache/query/internal/types/StructTypeImpl.java @@ -31,7 +31,6 @@ /** * Implementation of StructType - * @author Eric Zoerner * @since 4.0 */ public final class StructTypeImpl extends ObjectTypeImpl implements StructType { diff --git a/geode-core/src/main/java/com/gemstone/gemfire/cache/query/internal/types/TemporalComparator.java b/geode-core/src/main/java/com/gemstone/gemfire/cache/query/internal/types/TemporalComparator.java index f54f1e8d1057..0bbba7f30d20 100644 --- a/geode-core/src/main/java/com/gemstone/gemfire/cache/query/internal/types/TemporalComparator.java +++ b/geode-core/src/main/java/com/gemstone/gemfire/cache/query/internal/types/TemporalComparator.java @@ -25,7 +25,6 @@ * java.util.Date, java.sql.Date, java.sql.Time, and java.sql.Timestamp. * * @version $Revision: 1.1 $ - * @author ericz */ diff --git a/geode-core/src/main/java/com/gemstone/gemfire/cache/query/internal/types/TypeUtils.java b/geode-core/src/main/java/com/gemstone/gemfire/cache/query/internal/types/TypeUtils.java index b88d1534c1cf..14c798f0335a 100644 --- a/geode-core/src/main/java/com/gemstone/gemfire/cache/query/internal/types/TypeUtils.java +++ b/geode-core/src/main/java/com/gemstone/gemfire/cache/query/internal/types/TypeUtils.java @@ -43,7 +43,6 @@ * testing and cloning query literals. * * @version $Revision: 1.1 $ - * @author ericz */ public class TypeUtils implements OQLLexerTokenTypes diff --git a/geode-core/src/main/java/com/gemstone/gemfire/cache/query/internal/utils/LimitIterator.java b/geode-core/src/main/java/com/gemstone/gemfire/cache/query/internal/utils/LimitIterator.java index 7ea843ced588..af9e88d4bc71 100644 --- a/geode-core/src/main/java/com/gemstone/gemfire/cache/query/internal/utils/LimitIterator.java +++ b/geode-core/src/main/java/com/gemstone/gemfire/cache/query/internal/utils/LimitIterator.java @@ -21,7 +21,6 @@ /** * Utility Iterator which provides limit functionality on a given iterator - * @author asif * * @param */ diff --git a/geode-core/src/main/java/com/gemstone/gemfire/cache/query/types/CollectionType.java b/geode-core/src/main/java/com/gemstone/gemfire/cache/query/types/CollectionType.java index 8dea02bfb158..2d865ce27936 100644 --- a/geode-core/src/main/java/com/gemstone/gemfire/cache/query/types/CollectionType.java +++ b/geode-core/src/main/java/com/gemstone/gemfire/cache/query/types/CollectionType.java @@ -22,7 +22,6 @@ * objects. * * @since 4.0 - * @author Eric Zoerner */ public interface CollectionType extends ObjectType { diff --git a/geode-core/src/main/java/com/gemstone/gemfire/cache/query/types/MapType.java b/geode-core/src/main/java/com/gemstone/gemfire/cache/query/types/MapType.java index 7b6d670d2c60..2a3770bd255a 100644 --- a/geode-core/src/main/java/com/gemstone/gemfire/cache/query/types/MapType.java +++ b/geode-core/src/main/java/com/gemstone/gemfire/cache/query/types/MapType.java @@ -24,7 +24,6 @@ * of the values is obtained from the getElementType method. * * @since 4.0 - * @author Eric Zoerner */ public interface MapType extends CollectionType { diff --git a/geode-core/src/main/java/com/gemstone/gemfire/cache/query/types/ObjectType.java b/geode-core/src/main/java/com/gemstone/gemfire/cache/query/types/ObjectType.java index 174bdc72340f..62241d162625 100644 --- a/geode-core/src/main/java/com/gemstone/gemfire/cache/query/types/ObjectType.java +++ b/geode-core/src/main/java/com/gemstone/gemfire/cache/query/types/ObjectType.java @@ -33,7 +33,6 @@ * @see MapType * * @since 4.0 - * @author Eric Zoerner */ public interface ObjectType extends DataSerializable { diff --git a/geode-core/src/main/java/com/gemstone/gemfire/cache/query/types/StructType.java b/geode-core/src/main/java/com/gemstone/gemfire/cache/query/types/StructType.java index d4e73042b374..6a5202d4390d 100644 --- a/geode-core/src/main/java/com/gemstone/gemfire/cache/query/types/StructType.java +++ b/geode-core/src/main/java/com/gemstone/gemfire/cache/query/types/StructType.java @@ -22,7 +22,6 @@ * Describes the field names and types for each field in a {@link * com.gemstone.gemfire.cache.query.Struct}. * - * @author Eric Zoerner * @since 4.0 */ public interface StructType extends ObjectType { diff --git a/geode-core/src/main/java/com/gemstone/gemfire/cache/server/ClientSubscriptionConfig.java b/geode-core/src/main/java/com/gemstone/gemfire/cache/server/ClientSubscriptionConfig.java index 17efc52594d1..d3439678c5f5 100755 --- a/geode-core/src/main/java/com/gemstone/gemfire/cache/server/ClientSubscriptionConfig.java +++ b/geode-core/src/main/java/com/gemstone/gemfire/cache/server/ClientSubscriptionConfig.java @@ -64,7 +64,6 @@ * * * @since 5.7 - * @author aingle */ public interface ClientSubscriptionConfig { diff --git a/geode-core/src/main/java/com/gemstone/gemfire/cache/server/ServerLoad.java b/geode-core/src/main/java/com/gemstone/gemfire/cache/server/ServerLoad.java index 6df503f19b2a..01acaa54f53d 100644 --- a/geode-core/src/main/java/com/gemstone/gemfire/cache/server/ServerLoad.java +++ b/geode-core/src/main/java/com/gemstone/gemfire/cache/server/ServerLoad.java @@ -39,7 +39,6 @@ * load + loadPerConnection*numAdditionalConnections. * * - * @author dsmith * @since 5.7 * */ diff --git a/geode-core/src/main/java/com/gemstone/gemfire/cache/server/ServerLoadProbe.java b/geode-core/src/main/java/com/gemstone/gemfire/cache/server/ServerLoadProbe.java index d0a63c11364a..539c862a9a3d 100644 --- a/geode-core/src/main/java/com/gemstone/gemfire/cache/server/ServerLoadProbe.java +++ b/geode-core/src/main/java/com/gemstone/gemfire/cache/server/ServerLoadProbe.java @@ -49,7 +49,6 @@ * be called once for each cache server. *

    * - * @author dsmith * @since 5.7 * */ diff --git a/geode-core/src/main/java/com/gemstone/gemfire/cache/server/ServerLoadProbeAdapter.java b/geode-core/src/main/java/com/gemstone/gemfire/cache/server/ServerLoadProbeAdapter.java index 89e68491b4e9..b9c5cac144a7 100644 --- a/geode-core/src/main/java/com/gemstone/gemfire/cache/server/ServerLoadProbeAdapter.java +++ b/geode-core/src/main/java/com/gemstone/gemfire/cache/server/ServerLoadProbeAdapter.java @@ -23,7 +23,6 @@ * class and only override the methods for the events of interest. * * @since 5.7 - * @author dsmith * */ public abstract class ServerLoadProbeAdapter implements ServerLoadProbe { diff --git a/geode-core/src/main/java/com/gemstone/gemfire/cache/server/ServerMetrics.java b/geode-core/src/main/java/com/gemstone/gemfire/cache/server/ServerMetrics.java index affbfe05dec5..1db5bc52a6ef 100644 --- a/geode-core/src/main/java/com/gemstone/gemfire/cache/server/ServerMetrics.java +++ b/geode-core/src/main/java/com/gemstone/gemfire/cache/server/ServerMetrics.java @@ -21,7 +21,6 @@ * Metrics about the resource usage for a cache server. * These metrics are provided to the {@link ServerLoadProbe} for * use in calculating the load on the server. - * @author dsmith * @since 5.7 * */ diff --git a/geode-core/src/main/java/com/gemstone/gemfire/cache/server/internal/ConnectionCountProbe.java b/geode-core/src/main/java/com/gemstone/gemfire/cache/server/internal/ConnectionCountProbe.java index 227905c62dae..20a33574a79b 100644 --- a/geode-core/src/main/java/com/gemstone/gemfire/cache/server/internal/ConnectionCountProbe.java +++ b/geode-core/src/main/java/com/gemstone/gemfire/cache/server/internal/ConnectionCountProbe.java @@ -43,7 +43,6 @@ * hosted by this bridge server. * * - * @author dsmith * @since 5.7 */ public class ConnectionCountProbe extends ServerLoadProbeAdapter implements diff --git a/geode-core/src/main/java/com/gemstone/gemfire/cache/server/internal/LoadMonitor.java b/geode-core/src/main/java/com/gemstone/gemfire/cache/server/internal/LoadMonitor.java index ab69d7c2a234..2ba0dbe95157 100644 --- a/geode-core/src/main/java/com/gemstone/gemfire/cache/server/internal/LoadMonitor.java +++ b/geode-core/src/main/java/com/gemstone/gemfire/cache/server/internal/LoadMonitor.java @@ -41,7 +41,6 @@ * A class which monitors the load on a bridge server and * periodically sends updates to the locator. * - * @author dsmith * @since 5.7 * */ diff --git a/geode-core/src/main/java/com/gemstone/gemfire/cache/server/internal/ServerMetricsImpl.java b/geode-core/src/main/java/com/gemstone/gemfire/cache/server/internal/ServerMetricsImpl.java index 90712ee4bc4a..f7eb6d431bdc 100644 --- a/geode-core/src/main/java/com/gemstone/gemfire/cache/server/internal/ServerMetricsImpl.java +++ b/geode-core/src/main/java/com/gemstone/gemfire/cache/server/internal/ServerMetricsImpl.java @@ -22,7 +22,6 @@ /** * Metrics describing the load on a bridge server. - * @author dsmith * @since 5.7 * */ diff --git a/geode-core/src/main/java/com/gemstone/gemfire/cache/snapshot/CacheSnapshotService.java b/geode-core/src/main/java/com/gemstone/gemfire/cache/snapshot/CacheSnapshotService.java index e11652e690eb..989ce9a52428 100644 --- a/geode-core/src/main/java/com/gemstone/gemfire/cache/snapshot/CacheSnapshotService.java +++ b/geode-core/src/main/java/com/gemstone/gemfire/cache/snapshot/CacheSnapshotService.java @@ -65,7 +65,6 @@ * @see Cache#getSnapshotService() * @see SnapshotOptions * - * @author bakera * @since 7.0 */ public interface CacheSnapshotService { diff --git a/geode-core/src/main/java/com/gemstone/gemfire/cache/snapshot/RegionSnapshotService.java b/geode-core/src/main/java/com/gemstone/gemfire/cache/snapshot/RegionSnapshotService.java index 9b034027c573..30bac7bb5d2a 100644 --- a/geode-core/src/main/java/com/gemstone/gemfire/cache/snapshot/RegionSnapshotService.java +++ b/geode-core/src/main/java/com/gemstone/gemfire/cache/snapshot/RegionSnapshotService.java @@ -66,7 +66,6 @@ * @see Region#getSnapshotService() * @see SnapshotOptions * - * @author bakera * @since 7.0 */ public interface RegionSnapshotService { diff --git a/geode-core/src/main/java/com/gemstone/gemfire/cache/snapshot/SnapshotFilter.java b/geode-core/src/main/java/com/gemstone/gemfire/cache/snapshot/SnapshotFilter.java index 815df371b090..2c9c5d619663 100644 --- a/geode-core/src/main/java/com/gemstone/gemfire/cache/snapshot/SnapshotFilter.java +++ b/geode-core/src/main/java/com/gemstone/gemfire/cache/snapshot/SnapshotFilter.java @@ -28,7 +28,6 @@ * @see CacheSnapshotService * @see RegionSnapshotService * - * @author bakera * @since 7.0 */ public interface SnapshotFilter extends Serializable { diff --git a/geode-core/src/main/java/com/gemstone/gemfire/cache/snapshot/SnapshotIterator.java b/geode-core/src/main/java/com/gemstone/gemfire/cache/snapshot/SnapshotIterator.java index 498609f9ca7d..12b96606afa9 100644 --- a/geode-core/src/main/java/com/gemstone/gemfire/cache/snapshot/SnapshotIterator.java +++ b/geode-core/src/main/java/com/gemstone/gemfire/cache/snapshot/SnapshotIterator.java @@ -29,7 +29,6 @@ * * @see SnapshotReader * - * @author bakera * @since 7.0 */ public interface SnapshotIterator { diff --git a/geode-core/src/main/java/com/gemstone/gemfire/cache/snapshot/SnapshotOptions.java b/geode-core/src/main/java/com/gemstone/gemfire/cache/snapshot/SnapshotOptions.java index 63b52bdbd9b5..ff8d7d3306ca 100644 --- a/geode-core/src/main/java/com/gemstone/gemfire/cache/snapshot/SnapshotOptions.java +++ b/geode-core/src/main/java/com/gemstone/gemfire/cache/snapshot/SnapshotOptions.java @@ -30,7 +30,6 @@ * @param the cache entry value type * * @since 7.0 - * @author bakera */ public interface SnapshotOptions extends Serializable { /** diff --git a/geode-core/src/main/java/com/gemstone/gemfire/cache/snapshot/SnapshotReader.java b/geode-core/src/main/java/com/gemstone/gemfire/cache/snapshot/SnapshotReader.java index 0b25b8ba4ebd..e909fac3654e 100644 --- a/geode-core/src/main/java/com/gemstone/gemfire/cache/snapshot/SnapshotReader.java +++ b/geode-core/src/main/java/com/gemstone/gemfire/cache/snapshot/SnapshotReader.java @@ -27,7 +27,6 @@ /** * Provides utilities for reading cache data. * - * @author bakera * @since 7.0 */ public class SnapshotReader { diff --git a/geode-core/src/main/java/com/gemstone/gemfire/cache/util/CacheListenerAdapter.java b/geode-core/src/main/java/com/gemstone/gemfire/cache/util/CacheListenerAdapter.java index e8630789472d..3b70604edf1c 100644 --- a/geode-core/src/main/java/com/gemstone/gemfire/cache/util/CacheListenerAdapter.java +++ b/geode-core/src/main/java/com/gemstone/gemfire/cache/util/CacheListenerAdapter.java @@ -29,7 +29,6 @@ *

    Subclasses declared in a Cache XML file, it must also implement {@link Declarable} *

    * - * @author Eric Zoerner * * @since 3.0 */ diff --git a/geode-core/src/main/java/com/gemstone/gemfire/cache/util/CacheWriterAdapter.java b/geode-core/src/main/java/com/gemstone/gemfire/cache/util/CacheWriterAdapter.java index 5225ef1aaf06..940cb3dca3fb 100644 --- a/geode-core/src/main/java/com/gemstone/gemfire/cache/util/CacheWriterAdapter.java +++ b/geode-core/src/main/java/com/gemstone/gemfire/cache/util/CacheWriterAdapter.java @@ -27,7 +27,6 @@ * with empty implementations. Applications can subclass this class and * only override the methods for the events of interest. * - * @author Eric Zoerner * * @since 3.0 */ diff --git a/geode-core/src/main/java/com/gemstone/gemfire/cache/util/CqListenerAdapter.java b/geode-core/src/main/java/com/gemstone/gemfire/cache/util/CqListenerAdapter.java index c638cad4c76c..4325af9b5360 100755 --- a/geode-core/src/main/java/com/gemstone/gemfire/cache/util/CqListenerAdapter.java +++ b/geode-core/src/main/java/com/gemstone/gemfire/cache/util/CqListenerAdapter.java @@ -23,7 +23,6 @@ * with empty implementations. Applications can subclass this class and only * override the methods of interest. * - * @author anil * @since 5.1 */ diff --git a/geode-core/src/main/java/com/gemstone/gemfire/cache/util/Gateway.java b/geode-core/src/main/java/com/gemstone/gemfire/cache/util/Gateway.java index 9fa1219cf3f9..3f6e9e587161 100644 --- a/geode-core/src/main/java/com/gemstone/gemfire/cache/util/Gateway.java +++ b/geode-core/src/main/java/com/gemstone/gemfire/cache/util/Gateway.java @@ -22,7 +22,6 @@ * rolling upgrade support when GatewaySenderProfile update request comes from or sent to old member. * Old member uses Gateway$OrderPolicy while latest members uses GatewaySender#OrderPolicy * - * @author kbachhav * @since 9.0 * */ diff --git a/geode-core/src/main/java/com/gemstone/gemfire/cache/util/GatewayConflictHelper.java b/geode-core/src/main/java/com/gemstone/gemfire/cache/util/GatewayConflictHelper.java index 744b0c5478fd..2f47d952e5c4 100644 --- a/geode-core/src/main/java/com/gemstone/gemfire/cache/util/GatewayConflictHelper.java +++ b/geode-core/src/main/java/com/gemstone/gemfire/cache/util/GatewayConflictHelper.java @@ -21,7 +21,6 @@ * do with an event received from another distributed system that is going to overwrite * the current cache state. * @since 7.0 - * @author Bruce Schuchardt */ public interface GatewayConflictHelper { /** disallow the event */ diff --git a/geode-core/src/main/java/com/gemstone/gemfire/cache/util/GatewayConflictResolver.java b/geode-core/src/main/java/com/gemstone/gemfire/cache/util/GatewayConflictResolver.java index 22b66b8c092e..35acd6e35759 100644 --- a/geode-core/src/main/java/com/gemstone/gemfire/cache/util/GatewayConflictResolver.java +++ b/geode-core/src/main/java/com/gemstone/gemfire/cache/util/GatewayConflictResolver.java @@ -26,7 +26,6 @@ * that is attempting to modify the entry. It is not invoked if the event has the same * distributed system ID as the event that last changed the entry. * @since 7.0 - * @author Bruce Schuchardt */ public interface GatewayConflictResolver { /** diff --git a/geode-core/src/main/java/com/gemstone/gemfire/cache/util/GatewayEvent.java b/geode-core/src/main/java/com/gemstone/gemfire/cache/util/GatewayEvent.java index 015bccab4a37..a97dd4db257a 100755 --- a/geode-core/src/main/java/com/gemstone/gemfire/cache/util/GatewayEvent.java +++ b/geode-core/src/main/java/com/gemstone/gemfire/cache/util/GatewayEvent.java @@ -24,7 +24,6 @@ * Interface GatewayEvent represents Cache events * delivered to Gateways. * - * @author Barry Oglesby * @since 5.1 * * @deprecated as of GemFire 8.0. Use {@link com.gemstone.gemfire.cache.wan.GatewayQueueEvent} instead diff --git a/geode-core/src/main/java/com/gemstone/gemfire/cache/util/ObjectSizer.java b/geode-core/src/main/java/com/gemstone/gemfire/cache/util/ObjectSizer.java index 4f2cec2b4aae..d13ccdcb5ade 100755 --- a/geode-core/src/main/java/com/gemstone/gemfire/cache/util/ObjectSizer.java +++ b/geode-core/src/main/java/com/gemstone/gemfire/cache/util/ObjectSizer.java @@ -31,8 +31,6 @@ * to use a faster or more accurate method of sizing than provided by the default * object sizer, which is {#link {@link #SIZE_CLASS_ONCE} * - * @author Sudhir Menon - * @author Dan Smith * * @since 3.0 */ diff --git a/geode-core/src/main/java/com/gemstone/gemfire/cache/util/ObjectSizerImpl.java b/geode-core/src/main/java/com/gemstone/gemfire/cache/util/ObjectSizerImpl.java index c506755b7d57..8fbd0e8e9ce6 100755 --- a/geode-core/src/main/java/com/gemstone/gemfire/cache/util/ObjectSizerImpl.java +++ b/geode-core/src/main/java/com/gemstone/gemfire/cache/util/ObjectSizerImpl.java @@ -23,7 +23,6 @@ * This implementation is slow and may cause throughput numbers to drop if used on * complex objects. * - * @author Sudhir Menon * * @deprecated use {@link ObjectSizer#DEFAULT} instead. */ diff --git a/geode-core/src/main/java/com/gemstone/gemfire/cache/util/RegionMembershipListenerAdapter.java b/geode-core/src/main/java/com/gemstone/gemfire/cache/util/RegionMembershipListenerAdapter.java index b9589b896335..e9cf60c24782 100644 --- a/geode-core/src/main/java/com/gemstone/gemfire/cache/util/RegionMembershipListenerAdapter.java +++ b/geode-core/src/main/java/com/gemstone/gemfire/cache/util/RegionMembershipListenerAdapter.java @@ -26,7 +26,6 @@ * with empty implementations. Applications can subclass this class and only * override the methods for the events of interest. * - * @author Darrel Schneider * * @since 5.0 */ diff --git a/geode-core/src/main/java/com/gemstone/gemfire/cache/util/RegionRoleListenerAdapter.java b/geode-core/src/main/java/com/gemstone/gemfire/cache/util/RegionRoleListenerAdapter.java index b83962309aef..f4dd795c2561 100755 --- a/geode-core/src/main/java/com/gemstone/gemfire/cache/util/RegionRoleListenerAdapter.java +++ b/geode-core/src/main/java/com/gemstone/gemfire/cache/util/RegionRoleListenerAdapter.java @@ -25,7 +25,6 @@ * Applications can subclass this class and only override the methods for * the events of interest. * - * @author Kirk Lund * @since 5.0 */ public abstract class RegionRoleListenerAdapter diff --git a/geode-core/src/main/java/com/gemstone/gemfire/cache/util/TimestampedEntryEvent.java b/geode-core/src/main/java/com/gemstone/gemfire/cache/util/TimestampedEntryEvent.java index 59c348af47f5..6b6c9645295d 100644 --- a/geode-core/src/main/java/com/gemstone/gemfire/cache/util/TimestampedEntryEvent.java +++ b/geode-core/src/main/java/com/gemstone/gemfire/cache/util/TimestampedEntryEvent.java @@ -23,7 +23,6 @@ * of the system that caused the change. It also has this information for the * previous change to the entry. * @since 7.0 - * @author Bruce Schuchardt */ public interface TimestampedEntryEvent extends com.gemstone.gemfire.cache.EntryEvent { // note that this interface inherits the following methods, among others: diff --git a/geode-core/src/main/java/com/gemstone/gemfire/cache/util/TransactionListenerAdapter.java b/geode-core/src/main/java/com/gemstone/gemfire/cache/util/TransactionListenerAdapter.java index c27cebc5e309..7b8574f78059 100644 --- a/geode-core/src/main/java/com/gemstone/gemfire/cache/util/TransactionListenerAdapter.java +++ b/geode-core/src/main/java/com/gemstone/gemfire/cache/util/TransactionListenerAdapter.java @@ -24,7 +24,6 @@ * with empty implementations. Applications can subclass this class and only * override the methods for the events of interest. * - * @author Darrel Schneider * * @since 5.0 */ diff --git a/geode-core/src/main/java/com/gemstone/gemfire/cache/wan/GatewayEventFilter.java b/geode-core/src/main/java/com/gemstone/gemfire/cache/wan/GatewayEventFilter.java index 7d67179bccd3..447a015decdb 100644 --- a/geode-core/src/main/java/com/gemstone/gemfire/cache/wan/GatewayEventFilter.java +++ b/geode-core/src/main/java/com/gemstone/gemfire/cache/wan/GatewayEventFilter.java @@ -22,8 +22,6 @@ * Callback for users to filter out events before dispatching to remote * distributed system * - * @author Suranjan Kumar - * @author Yogesh Mahajan * * @since 7.0 */ diff --git a/geode-core/src/main/java/com/gemstone/gemfire/cache/wan/GatewayQueueEvent.java b/geode-core/src/main/java/com/gemstone/gemfire/cache/wan/GatewayQueueEvent.java index 48f2a45f77d5..c0df6ddc1a97 100644 --- a/geode-core/src/main/java/com/gemstone/gemfire/cache/wan/GatewayQueueEvent.java +++ b/geode-core/src/main/java/com/gemstone/gemfire/cache/wan/GatewayQueueEvent.java @@ -24,7 +24,6 @@ * Represents Cache events going through * GatewaySenders. * - * @author Pushkar Deole * * @since 7.0 */ diff --git a/geode-core/src/main/java/com/gemstone/gemfire/cache/wan/GatewayReceiver.java b/geode-core/src/main/java/com/gemstone/gemfire/cache/wan/GatewayReceiver.java index 7b1e08d9ff77..49602e53d4cd 100644 --- a/geode-core/src/main/java/com/gemstone/gemfire/cache/wan/GatewayReceiver.java +++ b/geode-core/src/main/java/com/gemstone/gemfire/cache/wan/GatewayReceiver.java @@ -28,7 +28,6 @@ * events originating in distributed-systems that has a * GatewaySender connected to this distributed-system. * - * @author Suranjan Kumar * */ public interface GatewayReceiver { diff --git a/geode-core/src/main/java/com/gemstone/gemfire/cache/wan/GatewayReceiverFactory.java b/geode-core/src/main/java/com/gemstone/gemfire/cache/wan/GatewayReceiverFactory.java index 458dd5017233..7010eb474223 100644 --- a/geode-core/src/main/java/com/gemstone/gemfire/cache/wan/GatewayReceiverFactory.java +++ b/geode-core/src/main/java/com/gemstone/gemfire/cache/wan/GatewayReceiverFactory.java @@ -18,8 +18,6 @@ package com.gemstone.gemfire.cache.wan; /** - * @author Suranjan Kumar - * @author Yogesh Mahajan * * @since 7.0 */ diff --git a/geode-core/src/main/java/com/gemstone/gemfire/cache/wan/GatewaySender.java b/geode-core/src/main/java/com/gemstone/gemfire/cache/wan/GatewaySender.java index 39ed59707661..74efd5158ece 100644 --- a/geode-core/src/main/java/com/gemstone/gemfire/cache/wan/GatewaySender.java +++ b/geode-core/src/main/java/com/gemstone/gemfire/cache/wan/GatewaySender.java @@ -20,9 +20,6 @@ /** * - * @author Suranjan Kumar - * @author Yogesh Mahajan - * @author Kishor Bachhav * * @since 7.0 */ diff --git a/geode-core/src/main/java/com/gemstone/gemfire/cache/wan/GatewaySenderFactory.java b/geode-core/src/main/java/com/gemstone/gemfire/cache/wan/GatewaySenderFactory.java index d3a641bd4652..f336de4954ff 100644 --- a/geode-core/src/main/java/com/gemstone/gemfire/cache/wan/GatewaySenderFactory.java +++ b/geode-core/src/main/java/com/gemstone/gemfire/cache/wan/GatewaySenderFactory.java @@ -22,9 +22,6 @@ /** * Factory to create SerialGatewaySender * - * @author Suranjan Kumar - * @author Yogesh Mahajan - * @author Kishor Bachhav * * @since 7.0 * @see GatewaySender diff --git a/geode-core/src/main/java/com/gemstone/gemfire/compression/CompressionException.java b/geode-core/src/main/java/com/gemstone/gemfire/compression/CompressionException.java index 5ea85e905d44..0e3c26b4b57d 100644 --- a/geode-core/src/main/java/com/gemstone/gemfire/compression/CompressionException.java +++ b/geode-core/src/main/java/com/gemstone/gemfire/compression/CompressionException.java @@ -23,7 +23,6 @@ * Wraps specific compression errors for {@link Compressor * compressors}. * - * @author rholmes */ public class CompressionException extends GemFireException { diff --git a/geode-core/src/main/java/com/gemstone/gemfire/compression/Compressor.java b/geode-core/src/main/java/com/gemstone/gemfire/compression/Compressor.java index 166505659ba7..ee062200fd27 100644 --- a/geode-core/src/main/java/com/gemstone/gemfire/compression/Compressor.java +++ b/geode-core/src/main/java/com/gemstone/gemfire/compression/Compressor.java @@ -20,7 +20,6 @@ /** * Interface for a compression codec. * - * @author rholmes */ public interface Compressor { diff --git a/geode-core/src/main/java/com/gemstone/gemfire/compression/SnappyCompressor.java b/geode-core/src/main/java/com/gemstone/gemfire/compression/SnappyCompressor.java index a2575111c938..43978f9d4e29 100644 --- a/geode-core/src/main/java/com/gemstone/gemfire/compression/SnappyCompressor.java +++ b/geode-core/src/main/java/com/gemstone/gemfire/compression/SnappyCompressor.java @@ -30,9 +30,6 @@ * An implementation of {@link Compressor} for Google's Snappy compression * codec. Utilizes the xerial java-snappy wrapper. * - * @author rholmes - * @author David Hoots - * @author Kirk Lund * @since 8.0 */ public final class SnappyCompressor implements Compressor, Serializable { diff --git a/geode-core/src/main/java/com/gemstone/gemfire/distributed/AbstractLauncher.java b/geode-core/src/main/java/com/gemstone/gemfire/distributed/AbstractLauncher.java index 205f50113fb8..3e0b4dee2cf6 100644 --- a/geode-core/src/main/java/com/gemstone/gemfire/distributed/AbstractLauncher.java +++ b/geode-core/src/main/java/com/gemstone/gemfire/distributed/AbstractLauncher.java @@ -60,7 +60,6 @@ * The AbstractLauncher class is a base class for implementing various launchers to construct and run different GemFire * processes, like Cache Servers, Locators, Managers, HTTP servers and so on. * - * @author John Blum * @see java.lang.Comparable * @see java.lang.Runnable * @see com.gemstone.gemfire.lang.Identifiable diff --git a/geode-core/src/main/java/com/gemstone/gemfire/distributed/ClientSocketFactory.java b/geode-core/src/main/java/com/gemstone/gemfire/distributed/ClientSocketFactory.java index 8b9d7f8c4922..7b3bc1226121 100755 --- a/geode-core/src/main/java/com/gemstone/gemfire/distributed/ClientSocketFactory.java +++ b/geode-core/src/main/java/com/gemstone/gemfire/distributed/ClientSocketFactory.java @@ -26,7 +26,6 @@ * full name of your factory implementation, and GemFire will use your * factory to manufacture sockets when it connects to server caches. * - * @author Barry Oglesby * * @since 6.5 * diff --git a/geode-core/src/main/java/com/gemstone/gemfire/distributed/DistributedMember.java b/geode-core/src/main/java/com/gemstone/gemfire/distributed/DistributedMember.java index 3bf398168a97..3b0dc1993a1b 100755 --- a/geode-core/src/main/java/com/gemstone/gemfire/distributed/DistributedMember.java +++ b/geode-core/src/main/java/com/gemstone/gemfire/distributed/DistributedMember.java @@ -24,7 +24,6 @@ * system. A process becomes a member by calling {@link * DistributedSystem#connect}. * - * @author Kirk Lund * @since 5.0 */ public interface DistributedMember extends Comparable { diff --git a/geode-core/src/main/java/com/gemstone/gemfire/distributed/DistributedSystem.java b/geode-core/src/main/java/com/gemstone/gemfire/distributed/DistributedSystem.java index c09d618afd5b..0eb011508d4d 100644 --- a/geode-core/src/main/java/com/gemstone/gemfire/distributed/DistributedSystem.java +++ b/geode-core/src/main/java/com/gemstone/gemfire/distributed/DistributedSystem.java @@ -1478,8 +1478,6 @@ *
    Since: 8.0
    * * - * @author Darrel Schneider - * @author Bruce Schuchardt * * @since 3.0 */ diff --git a/geode-core/src/main/java/com/gemstone/gemfire/distributed/Locator.java b/geode-core/src/main/java/com/gemstone/gemfire/distributed/Locator.java index fbc918f54737..80a0248d81bf 100644 --- a/geode-core/src/main/java/com/gemstone/gemfire/distributed/Locator.java +++ b/geode-core/src/main/java/com/gemstone/gemfire/distributed/Locator.java @@ -64,7 +64,6 @@ * *

    * - * @author Bruce Schuchardt * @since 4.0 */ public abstract class Locator { diff --git a/geode-core/src/main/java/com/gemstone/gemfire/distributed/LocatorLauncher.java b/geode-core/src/main/java/com/gemstone/gemfire/distributed/LocatorLauncher.java index b0be89f74eb2..d790f325e2da 100644 --- a/geode-core/src/main/java/com/gemstone/gemfire/distributed/LocatorLauncher.java +++ b/geode-core/src/main/java/com/gemstone/gemfire/distributed/LocatorLauncher.java @@ -76,8 +76,6 @@ /** * The LocatorLauncher class is a launcher for a GemFire Locator. * - * @author John Blum - * @author Kirk Lund * @see com.gemstone.gemfire.distributed.AbstractLauncher * @see com.gemstone.gemfire.distributed.ServerLauncher * @since 7.0 diff --git a/geode-core/src/main/java/com/gemstone/gemfire/distributed/LockNotHeldException.java b/geode-core/src/main/java/com/gemstone/gemfire/distributed/LockNotHeldException.java index 7308aec91c72..6e8b34afd9b3 100755 --- a/geode-core/src/main/java/com/gemstone/gemfire/distributed/LockNotHeldException.java +++ b/geode-core/src/main/java/com/gemstone/gemfire/distributed/LockNotHeldException.java @@ -21,7 +21,6 @@ * A LockNotHeldException is thrown when attempting * unlock a lock that is not held by the thread performing the unlock. * - * @author Kirk Lund * @since 4.0 */ public class LockNotHeldException extends IllegalStateException { diff --git a/geode-core/src/main/java/com/gemstone/gemfire/distributed/LockServiceDestroyedException.java b/geode-core/src/main/java/com/gemstone/gemfire/distributed/LockServiceDestroyedException.java index 03e552a9f52e..e6b0038189fb 100755 --- a/geode-core/src/main/java/com/gemstone/gemfire/distributed/LockServiceDestroyedException.java +++ b/geode-core/src/main/java/com/gemstone/gemfire/distributed/LockServiceDestroyedException.java @@ -21,7 +21,6 @@ * A LockServiceDestroyedException is thrown when attempting * use a distributed lock service that has been destroyed. * - * @author Kirk Lund * @since 4.0 */ public class LockServiceDestroyedException extends IllegalStateException { diff --git a/geode-core/src/main/java/com/gemstone/gemfire/distributed/Role.java b/geode-core/src/main/java/com/gemstone/gemfire/distributed/Role.java index b88e5b61786d..cc3b941ce8e7 100755 --- a/geode-core/src/main/java/com/gemstone/gemfire/distributed/Role.java +++ b/geode-core/src/main/java/com/gemstone/gemfire/distributed/Role.java @@ -24,7 +24,6 @@ * Roles are specified when * connecting to the {@link DistributedSystem}. * - * @author Kirk Lund * @since 5.0 */ public interface Role extends Comparable { diff --git a/geode-core/src/main/java/com/gemstone/gemfire/distributed/ServerLauncher.java b/geode-core/src/main/java/com/gemstone/gemfire/distributed/ServerLauncher.java index f13bb732c6fa..a654d19aa04a 100755 --- a/geode-core/src/main/java/com/gemstone/gemfire/distributed/ServerLauncher.java +++ b/geode-core/src/main/java/com/gemstone/gemfire/distributed/ServerLauncher.java @@ -91,8 +91,6 @@ * The ServerLauncher class is a launcher class with main method to start a GemFire Server (implying a GemFire Cache * Server process). * - * @author John Blum - * @author Kirk Lund * @see com.gemstone.gemfire.distributed.AbstractLauncher * @see com.gemstone.gemfire.distributed.LocatorLauncher * @since 7.0 diff --git a/geode-core/src/main/java/com/gemstone/gemfire/distributed/internal/AbstractDistributionConfig.java b/geode-core/src/main/java/com/gemstone/gemfire/distributed/internal/AbstractDistributionConfig.java index 0c099fd2f3c8..c742005fdbce 100644 --- a/geode-core/src/main/java/com/gemstone/gemfire/distributed/internal/AbstractDistributionConfig.java +++ b/geode-core/src/main/java/com/gemstone/gemfire/distributed/internal/AbstractDistributionConfig.java @@ -41,7 +41,6 @@ * DistributionConfigImpl#DistributionConfigImpl(DistributionConfig) * copy constructor}. * - * @author Darrel Schneider * */ @SuppressWarnings("deprecation") diff --git a/geode-core/src/main/java/com/gemstone/gemfire/distributed/internal/AtomicLongWithTerminalState.java b/geode-core/src/main/java/com/gemstone/gemfire/distributed/internal/AtomicLongWithTerminalState.java index 564cf05ddd33..ce8ccf220573 100644 --- a/geode-core/src/main/java/com/gemstone/gemfire/distributed/internal/AtomicLongWithTerminalState.java +++ b/geode-core/src/main/java/com/gemstone/gemfire/distributed/internal/AtomicLongWithTerminalState.java @@ -25,7 +25,6 @@ * become the special value accidentally. For example, a long that can never go * negative with normal use could have a terminal state of Long.MIN_VALUE * - * @author dsmith * @since 6.0 */ public class AtomicLongWithTerminalState extends AtomicLong { diff --git a/geode-core/src/main/java/com/gemstone/gemfire/distributed/internal/CollectingReplyProcessor.java b/geode-core/src/main/java/com/gemstone/gemfire/distributed/internal/CollectingReplyProcessor.java index 5375026b0e60..2a7347bf6970 100644 --- a/geode-core/src/main/java/com/gemstone/gemfire/distributed/internal/CollectingReplyProcessor.java +++ b/geode-core/src/main/java/com/gemstone/gemfire/distributed/internal/CollectingReplyProcessor.java @@ -27,7 +27,6 @@ * This reply processor collects all of the exceptions/results from the * ReplyMessages it receives * - * @author bruces * */ public class CollectingReplyProcessor extends ReplyProcessor21 { diff --git a/geode-core/src/main/java/com/gemstone/gemfire/distributed/internal/DM.java b/geode-core/src/main/java/com/gemstone/gemfire/distributed/internal/DM.java index 776a55217b87..405b16950a41 100644 --- a/geode-core/src/main/java/com/gemstone/gemfire/distributed/internal/DM.java +++ b/geode-core/src/main/java/com/gemstone/gemfire/distributed/internal/DM.java @@ -37,7 +37,6 @@ * This interface defines the services provided by any class that * is a distribution manager. * - * @author Darrel Schneider * * */ diff --git a/geode-core/src/main/java/com/gemstone/gemfire/distributed/internal/DMStats.java b/geode-core/src/main/java/com/gemstone/gemfire/distributed/internal/DMStats.java index 6091b8307468..1251c26b922a 100644 --- a/geode-core/src/main/java/com/gemstone/gemfire/distributed/internal/DMStats.java +++ b/geode-core/src/main/java/com/gemstone/gemfire/distributed/internal/DMStats.java @@ -19,7 +19,6 @@ /** * Defines the interface used to access and modify DM statistics. * - * @author Darrel Schneider * */ public interface DMStats { diff --git a/geode-core/src/main/java/com/gemstone/gemfire/distributed/internal/DSClock.java b/geode-core/src/main/java/com/gemstone/gemfire/distributed/internal/DSClock.java index 8160ea8de737..0e69e374a5df 100644 --- a/geode-core/src/main/java/com/gemstone/gemfire/distributed/internal/DSClock.java +++ b/geode-core/src/main/java/com/gemstone/gemfire/distributed/internal/DSClock.java @@ -36,7 +36,6 @@ * * Clock adjustments can be turned off with gemfire.disable-distributed-clock * - * @author bschuchardt */ public class DSClock { @@ -235,7 +234,6 @@ public long getStopTime() { * new one is < old one. Because then we need to slow down the cache time * aggressively. * - * @author shobhit * */ private class CacheTimeTask extends SystemTimerTask { diff --git a/geode-core/src/main/java/com/gemstone/gemfire/distributed/internal/DirectReplyProcessor.java b/geode-core/src/main/java/com/gemstone/gemfire/distributed/internal/DirectReplyProcessor.java index a8f61d9d5abe..fa06c4e9ebd2 100644 --- a/geode-core/src/main/java/com/gemstone/gemfire/distributed/internal/DirectReplyProcessor.java +++ b/geode-core/src/main/java/com/gemstone/gemfire/distributed/internal/DirectReplyProcessor.java @@ -25,7 +25,6 @@ /** * A reply processor optimized for direct ack responses (It skips synchronization, * doesn't register with the processor keeper, etc.) - * @author dsmith * */ public class DirectReplyProcessor extends ReplyProcessor21 { diff --git a/geode-core/src/main/java/com/gemstone/gemfire/distributed/internal/DistributionAdvisee.java b/geode-core/src/main/java/com/gemstone/gemfire/distributed/internal/DistributionAdvisee.java index 5c36885a14eb..d57cdc72eea5 100644 --- a/geode-core/src/main/java/com/gemstone/gemfire/distributed/internal/DistributionAdvisee.java +++ b/geode-core/src/main/java/com/gemstone/gemfire/distributed/internal/DistributionAdvisee.java @@ -23,7 +23,6 @@ /** * Resource which uses a {@link DistributionAdvisor}. - * @author darrel * @since 5.7 */ public interface DistributionAdvisee { diff --git a/geode-core/src/main/java/com/gemstone/gemfire/distributed/internal/DistributionAdvisor.java b/geode-core/src/main/java/com/gemstone/gemfire/distributed/internal/DistributionAdvisor.java index 538fa96fb5b5..fc280f1d8285 100644 --- a/geode-core/src/main/java/com/gemstone/gemfire/distributed/internal/DistributionAdvisor.java +++ b/geode-core/src/main/java/com/gemstone/gemfire/distributed/internal/DistributionAdvisor.java @@ -71,7 +71,6 @@ * kept to a minimum as the number of instances grows across a growing number * of members in the distributed system. * - * @author Eric Zoerner * * @since 3.0 */ diff --git a/geode-core/src/main/java/com/gemstone/gemfire/distributed/internal/DistributionConfig.java b/geode-core/src/main/java/com/gemstone/gemfire/distributed/internal/DistributionConfig.java index 3af8c1551759..c1a96eafb4e2 100644 --- a/geode-core/src/main/java/com/gemstone/gemfire/distributed/internal/DistributionConfig.java +++ b/geode-core/src/main/java/com/gemstone/gemfire/distributed/internal/DistributionConfig.java @@ -44,8 +44,6 @@ * * @see com.gemstone.gemfire.internal.Config * - * @author David Whitlock - * @author Darrel Schneider * * @since 2.1 */ diff --git a/geode-core/src/main/java/com/gemstone/gemfire/distributed/internal/DistributionConfigImpl.java b/geode-core/src/main/java/com/gemstone/gemfire/distributed/internal/DistributionConfigImpl.java index fc2fca7d5cda..8ebbb7a96b99 100644 --- a/geode-core/src/main/java/com/gemstone/gemfire/distributed/internal/DistributionConfigImpl.java +++ b/geode-core/src/main/java/com/gemstone/gemfire/distributed/internal/DistributionConfigImpl.java @@ -46,9 +46,6 @@ * * @see InternalDistributedSystem * - * @author David Whitlock - * @author Darrel Schneider - * @author Bruce Schuchardt * * @since 2.1 */ diff --git a/geode-core/src/main/java/com/gemstone/gemfire/distributed/internal/DistributionMessage.java b/geode-core/src/main/java/com/gemstone/gemfire/distributed/internal/DistributionMessage.java index 80ae4c0a4dee..bb36b8023b05 100644 --- a/geode-core/src/main/java/com/gemstone/gemfire/distributed/internal/DistributionMessage.java +++ b/geode-core/src/main/java/com/gemstone/gemfire/distributed/internal/DistributionMessage.java @@ -57,7 +57,6 @@ * To customize the sequentialness/thread requirements of a message, extend * DistributionMessage and implement getExecutor().

    * - * @author David Whitlock * */ public abstract class DistributionMessage diff --git a/geode-core/src/main/java/com/gemstone/gemfire/distributed/internal/DistributionMessageObserver.java b/geode-core/src/main/java/com/gemstone/gemfire/distributed/internal/DistributionMessageObserver.java index b1ba2e6bd258..3b4161c51758 100644 --- a/geode-core/src/main/java/com/gemstone/gemfire/distributed/internal/DistributionMessageObserver.java +++ b/geode-core/src/main/java/com/gemstone/gemfire/distributed/internal/DistributionMessageObserver.java @@ -21,7 +21,6 @@ * This class is a test hook to intercept DistributionMessages in the * VM receiving the message. * - * @author dsmith * */ public abstract class DistributionMessageObserver { diff --git a/geode-core/src/main/java/com/gemstone/gemfire/distributed/internal/DistributionStats.java b/geode-core/src/main/java/com/gemstone/gemfire/distributed/internal/DistributionStats.java index 6750a5408b82..75c77ada83f7 100644 --- a/geode-core/src/main/java/com/gemstone/gemfire/distributed/internal/DistributionStats.java +++ b/geode-core/src/main/java/com/gemstone/gemfire/distributed/internal/DistributionStats.java @@ -34,8 +34,6 @@ * This class maintains statistics in GemFire about the distribution * manager and distribution in general. * - * @author Darrel Schneider - * @author Bruce Schuchardt * */ public class DistributionStats implements DMStats { diff --git a/geode-core/src/main/java/com/gemstone/gemfire/distributed/internal/FlowControlParams.java b/geode-core/src/main/java/com/gemstone/gemfire/distributed/internal/FlowControlParams.java index db9da8d3cbb4..3d9d8c22b7fb 100644 --- a/geode-core/src/main/java/com/gemstone/gemfire/distributed/internal/FlowControlParams.java +++ b/geode-core/src/main/java/com/gemstone/gemfire/distributed/internal/FlowControlParams.java @@ -26,7 +26,6 @@ The byteAllowance and rechargeBlockMs settings are used in hashcode calculations, and should not be changed if the hashcode of a FlowControlParams needs to remain invariant. @since 5.0 - @author Bruce Schuchardt */ public class FlowControlParams implements java.io.Serializable { diff --git a/geode-core/src/main/java/com/gemstone/gemfire/distributed/internal/FunctionExecutionPooledExecutor.java b/geode-core/src/main/java/com/gemstone/gemfire/distributed/internal/FunctionExecutionPooledExecutor.java index 71ca26b49498..92adb7abc9a1 100644 --- a/geode-core/src/main/java/com/gemstone/gemfire/distributed/internal/FunctionExecutionPooledExecutor.java +++ b/geode-core/src/main/java/com/gemstone/gemfire/distributed/internal/FunctionExecutionPooledExecutor.java @@ -51,7 +51,6 @@ * for function execution. This was not done for the 8.0 release because * of code freeze. * - * @author darrel * */ public class FunctionExecutionPooledExecutor extends ThreadPoolExecutor { diff --git a/geode-core/src/main/java/com/gemstone/gemfire/distributed/internal/HealthMonitor.java b/geode-core/src/main/java/com/gemstone/gemfire/distributed/internal/HealthMonitor.java index f0d09b0adb7e..2ef5b9f356f2 100644 --- a/geode-core/src/main/java/com/gemstone/gemfire/distributed/internal/HealthMonitor.java +++ b/geode-core/src/main/java/com/gemstone/gemfire/distributed/internal/HealthMonitor.java @@ -21,7 +21,6 @@ /** * Represents a thread that monitor the health of the vm it lives in. - * @author Darrel Schneider * @since 3.5 */ public interface HealthMonitor { diff --git a/geode-core/src/main/java/com/gemstone/gemfire/distributed/internal/HealthMonitorImpl.java b/geode-core/src/main/java/com/gemstone/gemfire/distributed/internal/HealthMonitorImpl.java index c3be6e8e8200..38692dc39ede 100644 --- a/geode-core/src/main/java/com/gemstone/gemfire/distributed/internal/HealthMonitorImpl.java +++ b/geode-core/src/main/java/com/gemstone/gemfire/distributed/internal/HealthMonitorImpl.java @@ -31,7 +31,6 @@ /** * Implements a thread that monitors the health of the vm it lives in. - * @author Darrel Schneider * @since 3.5 */ public class HealthMonitorImpl implements HealthMonitor, Runnable { diff --git a/geode-core/src/main/java/com/gemstone/gemfire/distributed/internal/HighPriorityAckedMessage.java b/geode-core/src/main/java/com/gemstone/gemfire/distributed/internal/HighPriorityAckedMessage.java index 66bd9bb8b748..c5590d1a3630 100755 --- a/geode-core/src/main/java/com/gemstone/gemfire/distributed/internal/HighPriorityAckedMessage.java +++ b/geode-core/src/main/java/com/gemstone/gemfire/distributed/internal/HighPriorityAckedMessage.java @@ -44,7 +44,6 @@ * messages have been received and applied to the cache. Their reply messages * may not necessarily have been sent back or processed (if they have any). * - * @author bruce * @since 5.1 */ public final class HighPriorityAckedMessage extends HighPriorityDistributionMessage implements MessageWithReply { diff --git a/geode-core/src/main/java/com/gemstone/gemfire/distributed/internal/HighPriorityDistributionMessage.java b/geode-core/src/main/java/com/gemstone/gemfire/distributed/internal/HighPriorityDistributionMessage.java index 222788ef073d..d13927a17017 100644 --- a/geode-core/src/main/java/com/gemstone/gemfire/distributed/internal/HighPriorityDistributionMessage.java +++ b/geode-core/src/main/java/com/gemstone/gemfire/distributed/internal/HighPriorityDistributionMessage.java @@ -19,7 +19,6 @@ /** * - * @author Eric Zoerner */ public abstract class HighPriorityDistributionMessage extends DistributionMessage { diff --git a/geode-core/src/main/java/com/gemstone/gemfire/distributed/internal/InternalDistributedSystem.java b/geode-core/src/main/java/com/gemstone/gemfire/distributed/internal/InternalDistributedSystem.java index a19369942ba6..382fae99e5ea 100644 --- a/geode-core/src/main/java/com/gemstone/gemfire/distributed/internal/InternalDistributedSystem.java +++ b/geode-core/src/main/java/com/gemstone/gemfire/distributed/internal/InternalDistributedSystem.java @@ -112,7 +112,6 @@ * The concrete implementation of {@link DistributedSystem} that * provides internal-only functionality. * - * @author David Whitlock * @since 3.0 * */ @@ -843,7 +842,6 @@ public boolean isConnected() { /** * This class defers to the DM. If we don't have a DM, we're dead. - * @author jpenney */ protected class Stopper extends CancelCriterion { @Override @@ -2362,7 +2360,6 @@ public interface ReconnectListener { /** * A listener that gets invoked after this connection to the * distributed system is disconnected - * @author jpenney * */ public interface ShutdownListener extends DisconnectListener { @@ -3071,7 +3068,6 @@ public void stopReconnecting() { * Fortify will complain about. *

    * - * @author Kirk Lund */ public static interface CreationStackGenerator { public Throwable generateCreationStack(final DistributionConfig config); diff --git a/geode-core/src/main/java/com/gemstone/gemfire/distributed/internal/InternalLocator.java b/geode-core/src/main/java/com/gemstone/gemfire/distributed/internal/InternalLocator.java index b81732b73e54..eb97e1e19f5f 100644 --- a/geode-core/src/main/java/com/gemstone/gemfire/distributed/internal/InternalLocator.java +++ b/geode-core/src/main/java/com/gemstone/gemfire/distributed/internal/InternalLocator.java @@ -106,7 +106,6 @@ * locator.startPeerLocation(); * locator.startDistributeSystem(); * - * @author David Whitlock * @since 4.0 */ public class InternalLocator extends Locator implements ConnectListener { @@ -1235,7 +1234,6 @@ public ServerLocator getServerLocatorAdvisee() { /****** * - * @author bansods * */ class FetchSharedConfigStatus implements Callable { diff --git a/geode-core/src/main/java/com/gemstone/gemfire/distributed/internal/LocatorLoadSnapshot.java b/geode-core/src/main/java/com/gemstone/gemfire/distributed/internal/LocatorLoadSnapshot.java index 87c8c1be8f1f..f563c13d8068 100644 --- a/geode-core/src/main/java/com/gemstone/gemfire/distributed/internal/LocatorLoadSnapshot.java +++ b/geode-core/src/main/java/com/gemstone/gemfire/distributed/internal/LocatorLoadSnapshot.java @@ -42,7 +42,6 @@ /** * A data structure used to hold load information for a locator * - * @author dsmith * @since 5.7 * */ diff --git a/geode-core/src/main/java/com/gemstone/gemfire/distributed/internal/LocatorStats.java b/geode-core/src/main/java/com/gemstone/gemfire/distributed/internal/LocatorStats.java index ee625fce1a46..d42a2b45a438 100644 --- a/geode-core/src/main/java/com/gemstone/gemfire/distributed/internal/LocatorStats.java +++ b/geode-core/src/main/java/com/gemstone/gemfire/distributed/internal/LocatorStats.java @@ -28,7 +28,6 @@ /** * This class maintains statistics for the locator - * @author dsmith * @since 5.7 */ public class LocatorStats { diff --git a/geode-core/src/main/java/com/gemstone/gemfire/distributed/internal/LonerDistributionManager.java b/geode-core/src/main/java/com/gemstone/gemfire/distributed/internal/LonerDistributionManager.java index c9580281298f..41e9f8582e52 100644 --- a/geode-core/src/main/java/com/gemstone/gemfire/distributed/internal/LonerDistributionManager.java +++ b/geode-core/src/main/java/com/gemstone/gemfire/distributed/internal/LonerDistributionManager.java @@ -57,7 +57,6 @@ * A LonerDistributionManager is a dm that never communicates * with anyone else. * - * @author Darrel * * * @since 3.5 diff --git a/geode-core/src/main/java/com/gemstone/gemfire/distributed/internal/MessageWithReply.java b/geode-core/src/main/java/com/gemstone/gemfire/distributed/internal/MessageWithReply.java index 92a99e1f15fe..d83dc151f475 100644 --- a/geode-core/src/main/java/com/gemstone/gemfire/distributed/internal/MessageWithReply.java +++ b/geode-core/src/main/java/com/gemstone/gemfire/distributed/internal/MessageWithReply.java @@ -23,7 +23,6 @@ * require a reply. Messages that do not implement this interface can * be sent asynchronously through the transport layer. * - * @author David Whitlock * * @since 3.0 */ diff --git a/geode-core/src/main/java/com/gemstone/gemfire/distributed/internal/OverflowQueueWithDMStats.java b/geode-core/src/main/java/com/gemstone/gemfire/distributed/internal/OverflowQueueWithDMStats.java index 40d9d6268b2c..03b7f6491824 100644 --- a/geode-core/src/main/java/com/gemstone/gemfire/distributed/internal/OverflowQueueWithDMStats.java +++ b/geode-core/src/main/java/com/gemstone/gemfire/distributed/internal/OverflowQueueWithDMStats.java @@ -24,7 +24,6 @@ /** * A LinkedBlockingQueue that supports stats. * Named OverflowQueue for historical reasons. - * @author darrel * */ public class OverflowQueueWithDMStats extends LinkedBlockingQueue { diff --git a/geode-core/src/main/java/com/gemstone/gemfire/distributed/internal/PoolStatHelper.java b/geode-core/src/main/java/com/gemstone/gemfire/distributed/internal/PoolStatHelper.java index 15956ec8f5ea..130b6dfb2076 100644 --- a/geode-core/src/main/java/com/gemstone/gemfire/distributed/internal/PoolStatHelper.java +++ b/geode-core/src/main/java/com/gemstone/gemfire/distributed/internal/PoolStatHelper.java @@ -21,7 +21,6 @@ * Used to implement statistics on a pool. * The implementation will call these methods at to proper time. * - * @author Darrel Schneider * * @since 3.5 */ diff --git a/geode-core/src/main/java/com/gemstone/gemfire/distributed/internal/PooledExecutorWithDMStats.java b/geode-core/src/main/java/com/gemstone/gemfire/distributed/internal/PooledExecutorWithDMStats.java index 003a68c37d95..0a9f9eca2b4c 100644 --- a/geode-core/src/main/java/com/gemstone/gemfire/distributed/internal/PooledExecutorWithDMStats.java +++ b/geode-core/src/main/java/com/gemstone/gemfire/distributed/internal/PooledExecutorWithDMStats.java @@ -31,7 +31,6 @@ /** * A ThreadPoolExecutor with stat support. - * @author darrel * */ public class PooledExecutorWithDMStats extends ThreadPoolExecutor { diff --git a/geode-core/src/main/java/com/gemstone/gemfire/distributed/internal/ProductUseLog.java b/geode-core/src/main/java/com/gemstone/gemfire/distributed/internal/ProductUseLog.java index 95d538c0a015..043ddc13cd5b 100644 --- a/geode-core/src/main/java/com/gemstone/gemfire/distributed/internal/ProductUseLog.java +++ b/geode-core/src/main/java/com/gemstone/gemfire/distributed/internal/ProductUseLog.java @@ -38,7 +38,6 @@ * default and can be adjusted with the system property gemfire.max_product_use_file_size, * though the size is not allowed to be less than 1mb. * - * @author Bruce Schuchardt * @since 2013 */ public final class ProductUseLog implements MembershipListener { diff --git a/geode-core/src/main/java/com/gemstone/gemfire/distributed/internal/ProfileListener.java b/geode-core/src/main/java/com/gemstone/gemfire/distributed/internal/ProfileListener.java index 7528e9ac07bf..5797f84fd50f 100644 --- a/geode-core/src/main/java/com/gemstone/gemfire/distributed/internal/ProfileListener.java +++ b/geode-core/src/main/java/com/gemstone/gemfire/distributed/internal/ProfileListener.java @@ -23,7 +23,6 @@ * can be registered with a DistributionAdvisor. * * These methods are called while the monitor is held on the DistributionAdvisor. - * @author dsmith * */ public interface ProfileListener { diff --git a/geode-core/src/main/java/com/gemstone/gemfire/distributed/internal/QueueStatHelper.java b/geode-core/src/main/java/com/gemstone/gemfire/distributed/internal/QueueStatHelper.java index 7e6d41f2c327..32b9467b11ed 100644 --- a/geode-core/src/main/java/com/gemstone/gemfire/distributed/internal/QueueStatHelper.java +++ b/geode-core/src/main/java/com/gemstone/gemfire/distributed/internal/QueueStatHelper.java @@ -21,7 +21,6 @@ * Used to implement statistics on a queue. * The implementation will call these methods at to proper time. * - * @author Darrel Schneider * * @since 3.5 */ diff --git a/geode-core/src/main/java/com/gemstone/gemfire/distributed/internal/ReliableReplyException.java b/geode-core/src/main/java/com/gemstone/gemfire/distributed/internal/ReliableReplyException.java index 9bc6798ff201..272dbe8ffd8d 100644 --- a/geode-core/src/main/java/com/gemstone/gemfire/distributed/internal/ReliableReplyException.java +++ b/geode-core/src/main/java/com/gemstone/gemfire/distributed/internal/ReliableReplyException.java @@ -22,7 +22,6 @@ /** * thrown by {@linkplain ReliableReplyProcessor21} when a message has not been delivered * to at least one member in the original recipient list. - * @author sbawaska */ public class ReliableReplyException extends ReplyException { private static final long serialVersionUID = 472566058783450438L; diff --git a/geode-core/src/main/java/com/gemstone/gemfire/distributed/internal/ReliableReplyProcessor21.java b/geode-core/src/main/java/com/gemstone/gemfire/distributed/internal/ReliableReplyProcessor21.java index 215d91fe0887..42953a4bada5 100755 --- a/geode-core/src/main/java/com/gemstone/gemfire/distributed/internal/ReliableReplyProcessor21.java +++ b/geode-core/src/main/java/com/gemstone/gemfire/distributed/internal/ReliableReplyProcessor21.java @@ -25,7 +25,6 @@ * This is a reply processor which tracks departed members in order for * reliable messaging to determine which recipients departed before replying. * - * @author Kirk Lund * @since 5.0 */ public class ReliableReplyProcessor21 extends ReplyProcessor21 { diff --git a/geode-core/src/main/java/com/gemstone/gemfire/distributed/internal/ReplyException.java b/geode-core/src/main/java/com/gemstone/gemfire/distributed/internal/ReplyException.java index 8f4607d87518..322cae57422e 100644 --- a/geode-core/src/main/java/com/gemstone/gemfire/distributed/internal/ReplyException.java +++ b/geode-core/src/main/java/com/gemstone/gemfire/distributed/internal/ReplyException.java @@ -26,7 +26,6 @@ /** * Exception thrown when a DistributionMessage is processed to be propagated * back to the sender of the message. - * @author Eric Zoerner * */ public class ReplyException extends GemFireException { diff --git a/geode-core/src/main/java/com/gemstone/gemfire/distributed/internal/ReplyMessage.java b/geode-core/src/main/java/com/gemstone/gemfire/distributed/internal/ReplyMessage.java index 96ca5ef09175..bc5e1a437957 100644 --- a/geode-core/src/main/java/com/gemstone/gemfire/distributed/internal/ReplyMessage.java +++ b/geode-core/src/main/java/com/gemstone/gemfire/distributed/internal/ReplyMessage.java @@ -38,7 +38,6 @@ * MessageWithReply} because it is sent in reply to another * message. * - * @author ericz * */ public class ReplyMessage extends HighPriorityDistributionMessage { diff --git a/geode-core/src/main/java/com/gemstone/gemfire/distributed/internal/ReplyProcessor21.java b/geode-core/src/main/java/com/gemstone/gemfire/distributed/internal/ReplyProcessor21.java index 02dd1027316b..e5e8cbfb9ab7 100644 --- a/geode-core/src/main/java/com/gemstone/gemfire/distributed/internal/ReplyProcessor21.java +++ b/geode-core/src/main/java/com/gemstone/gemfire/distributed/internal/ReplyProcessor21.java @@ -78,7 +78,6 @@ * * @see MessageWithReply * - * @author David Whitlock * * @since 2.1 */ diff --git a/geode-core/src/main/java/com/gemstone/gemfire/distributed/internal/ReplySender.java b/geode-core/src/main/java/com/gemstone/gemfire/distributed/internal/ReplySender.java index 84da79cd27c6..c177a4bcc5e3 100644 --- a/geode-core/src/main/java/com/gemstone/gemfire/distributed/internal/ReplySender.java +++ b/geode-core/src/main/java/com/gemstone/gemfire/distributed/internal/ReplySender.java @@ -29,7 +29,6 @@ * * The reply sender may be the distribution manager itself, or it may send * the reply directly back on the same socket the message as received on. - * @author dsmith * */ public interface ReplySender { diff --git a/geode-core/src/main/java/com/gemstone/gemfire/distributed/internal/ResourceEvent.java b/geode-core/src/main/java/com/gemstone/gemfire/distributed/internal/ResourceEvent.java index a7f84ac6a6ed..2250bf4eb3bf 100644 --- a/geode-core/src/main/java/com/gemstone/gemfire/distributed/internal/ResourceEvent.java +++ b/geode-core/src/main/java/com/gemstone/gemfire/distributed/internal/ResourceEvent.java @@ -18,7 +18,6 @@ /** * GemFire Resource Events - * @author rishim * */ public enum ResourceEvent { diff --git a/geode-core/src/main/java/com/gemstone/gemfire/distributed/internal/ResourceEventsListener.java b/geode-core/src/main/java/com/gemstone/gemfire/distributed/internal/ResourceEventsListener.java index 279201637d97..bd2895b37be3 100644 --- a/geode-core/src/main/java/com/gemstone/gemfire/distributed/internal/ResourceEventsListener.java +++ b/geode-core/src/main/java/com/gemstone/gemfire/distributed/internal/ResourceEventsListener.java @@ -19,7 +19,6 @@ /** * Internal interface to be implemented to catch various resource events * - * @author rishim * */ public interface ResourceEventsListener { diff --git a/geode-core/src/main/java/com/gemstone/gemfire/distributed/internal/RuntimeDistributionConfigImpl.java b/geode-core/src/main/java/com/gemstone/gemfire/distributed/internal/RuntimeDistributionConfigImpl.java index f2e3a62ee96c..31ee6986f14e 100644 --- a/geode-core/src/main/java/com/gemstone/gemfire/distributed/internal/RuntimeDistributionConfigImpl.java +++ b/geode-core/src/main/java/com/gemstone/gemfire/distributed/internal/RuntimeDistributionConfigImpl.java @@ -35,7 +35,6 @@ * then those calls should come through setAttributeObject and it will * set the attSourceMap to the correct source after these methods return. * - * @author Darrel Schneider * * @since 3.0 */ diff --git a/geode-core/src/main/java/com/gemstone/gemfire/distributed/internal/ServerLocation.java b/geode-core/src/main/java/com/gemstone/gemfire/distributed/internal/ServerLocation.java index 45ead8b8e42a..0e7430cebfc3 100644 --- a/geode-core/src/main/java/com/gemstone/gemfire/distributed/internal/ServerLocation.java +++ b/geode-core/src/main/java/com/gemstone/gemfire/distributed/internal/ServerLocation.java @@ -31,7 +31,6 @@ * preferable to InetSocketAddress because it doesn't do * any name resolution. * - * @author dsmith * */ public class ServerLocation implements DataSerializable, Comparable { diff --git a/geode-core/src/main/java/com/gemstone/gemfire/distributed/internal/ServerLocator.java b/geode-core/src/main/java/com/gemstone/gemfire/distributed/internal/ServerLocator.java index 644bf63d5bcf..f2927146dbac 100644 --- a/geode-core/src/main/java/com/gemstone/gemfire/distributed/internal/ServerLocator.java +++ b/geode-core/src/main/java/com/gemstone/gemfire/distributed/internal/ServerLocator.java @@ -65,7 +65,6 @@ /** * - * @author dsmith * @since 5.7 */ public class ServerLocator implements TcpHandler, DistributionAdvisee { diff --git a/geode-core/src/main/java/com/gemstone/gemfire/distributed/internal/SharedConfiguration.java b/geode-core/src/main/java/com/gemstone/gemfire/distributed/internal/SharedConfiguration.java index 30a1da78975a..38dd5dab4088 100644 --- a/geode-core/src/main/java/com/gemstone/gemfire/distributed/internal/SharedConfiguration.java +++ b/geode-core/src/main/java/com/gemstone/gemfire/distributed/internal/SharedConfiguration.java @@ -86,7 +86,6 @@ /********* * - * @author bansods * */ @SuppressWarnings("deprecation") diff --git a/geode-core/src/main/java/com/gemstone/gemfire/distributed/internal/Sizeable.java b/geode-core/src/main/java/com/gemstone/gemfire/distributed/internal/Sizeable.java index 1d21f64416bb..7a653744822e 100644 --- a/geode-core/src/main/java/com/gemstone/gemfire/distributed/internal/Sizeable.java +++ b/geode-core/src/main/java/com/gemstone/gemfire/distributed/internal/Sizeable.java @@ -18,7 +18,6 @@ /** Sizeable objects have a getSize() method that returns the approximate size of the object. - @author Bruce Schuchardt @since 5.0 */ diff --git a/geode-core/src/main/java/com/gemstone/gemfire/distributed/internal/SizeableRunnable.java b/geode-core/src/main/java/com/gemstone/gemfire/distributed/internal/SizeableRunnable.java index aa2f34fb6711..57a33bc4e35e 100644 --- a/geode-core/src/main/java/com/gemstone/gemfire/distributed/internal/SizeableRunnable.java +++ b/geode-core/src/main/java/com/gemstone/gemfire/distributed/internal/SizeableRunnable.java @@ -23,7 +23,6 @@ Instances/subclasses must provide the run() method to complete the Runnable interface.

    - @author Bruce Schuchardt @since 5.0 */ diff --git a/geode-core/src/main/java/com/gemstone/gemfire/distributed/internal/StartupMessageData.java b/geode-core/src/main/java/com/gemstone/gemfire/distributed/internal/StartupMessageData.java index caa96d65e6b8..060ba76e9398 100755 --- a/geode-core/src/main/java/com/gemstone/gemfire/distributed/internal/StartupMessageData.java +++ b/geode-core/src/main/java/com/gemstone/gemfire/distributed/internal/StartupMessageData.java @@ -37,7 +37,6 @@ * backwards compatibility. All new fields added should be written to allow * for version compatibility. * - * @author Kirk Lund * @since 7.0 */ class StartupMessageData { diff --git a/geode-core/src/main/java/com/gemstone/gemfire/distributed/internal/StartupResponseWithVersionMessage.java b/geode-core/src/main/java/com/gemstone/gemfire/distributed/internal/StartupResponseWithVersionMessage.java index 940ba1a8c199..26a7f54c3128 100644 --- a/geode-core/src/main/java/com/gemstone/gemfire/distributed/internal/StartupResponseWithVersionMessage.java +++ b/geode-core/src/main/java/com/gemstone/gemfire/distributed/internal/StartupResponseWithVersionMessage.java @@ -31,7 +31,6 @@ import com.gemstone.gemfire.internal.logging.LogService; /** - * @author xzhou * @since 6.6.2 */ public class StartupResponseWithVersionMessage extends StartupResponseMessage { diff --git a/geode-core/src/main/java/com/gemstone/gemfire/distributed/internal/ThrottledMemQueueStatHelper.java b/geode-core/src/main/java/com/gemstone/gemfire/distributed/internal/ThrottledMemQueueStatHelper.java index 93560ec1689d..a59a299d0ac9 100644 --- a/geode-core/src/main/java/com/gemstone/gemfire/distributed/internal/ThrottledMemQueueStatHelper.java +++ b/geode-core/src/main/java/com/gemstone/gemfire/distributed/internal/ThrottledMemQueueStatHelper.java @@ -21,7 +21,6 @@ * Used to implement statistics on a throttled queue. * The implementation will call these methods at to proper time. * - * @author Bruce Schuchardt * * @since 5.0 */ diff --git a/geode-core/src/main/java/com/gemstone/gemfire/distributed/internal/ThrottledQueueStatHelper.java b/geode-core/src/main/java/com/gemstone/gemfire/distributed/internal/ThrottledQueueStatHelper.java index a64e04ed0097..03698b8d227b 100644 --- a/geode-core/src/main/java/com/gemstone/gemfire/distributed/internal/ThrottledQueueStatHelper.java +++ b/geode-core/src/main/java/com/gemstone/gemfire/distributed/internal/ThrottledQueueStatHelper.java @@ -21,7 +21,6 @@ * Used to implement statistics on a throttled queue. * The implementation will call these methods at to proper time. * - * @author Darrel Schneider * * @since 3.5 */ diff --git a/geode-core/src/main/java/com/gemstone/gemfire/distributed/internal/ThrottlingMemLinkedQueueWithDMStats.java b/geode-core/src/main/java/com/gemstone/gemfire/distributed/internal/ThrottlingMemLinkedQueueWithDMStats.java index cca3b16fe26c..7423bb9fcbc2 100644 --- a/geode-core/src/main/java/com/gemstone/gemfire/distributed/internal/ThrottlingMemLinkedQueueWithDMStats.java +++ b/geode-core/src/main/java/com/gemstone/gemfire/distributed/internal/ThrottlingMemLinkedQueueWithDMStats.java @@ -37,7 +37,6 @@ * * @since 3.0 * - * @author bruce */ public class ThrottlingMemLinkedQueueWithDMStats extends OverflowQueueWithDMStats { diff --git a/geode-core/src/main/java/com/gemstone/gemfire/distributed/internal/WaitForViewInstallation.java b/geode-core/src/main/java/com/gemstone/gemfire/distributed/internal/WaitForViewInstallation.java index 6cd091205546..5b0bc61be57c 100644 --- a/geode-core/src/main/java/com/gemstone/gemfire/distributed/internal/WaitForViewInstallation.java +++ b/geode-core/src/main/java/com/gemstone/gemfire/distributed/internal/WaitForViewInstallation.java @@ -29,7 +29,6 @@ import com.gemstone.gemfire.internal.logging.LogService; /** - * @author bruces * */ public class WaitForViewInstallation extends HighPriorityDistributionMessage diff --git a/geode-core/src/main/java/com/gemstone/gemfire/distributed/internal/deadlock/DLockDependencyMonitor.java b/geode-core/src/main/java/com/gemstone/gemfire/distributed/internal/deadlock/DLockDependencyMonitor.java index d3f4db4ceb5d..02e5b6a7ff25 100644 --- a/geode-core/src/main/java/com/gemstone/gemfire/distributed/internal/deadlock/DLockDependencyMonitor.java +++ b/geode-core/src/main/java/com/gemstone/gemfire/distributed/internal/deadlock/DLockDependencyMonitor.java @@ -29,7 +29,6 @@ /** * Report dependencies on dlocks that exist in theis VM. * - * @author dsmith * */ public class DLockDependencyMonitor implements DependencyMonitor { diff --git a/geode-core/src/main/java/com/gemstone/gemfire/distributed/internal/deadlock/DeadlockDetector.java b/geode-core/src/main/java/com/gemstone/gemfire/distributed/internal/deadlock/DeadlockDetector.java index edcbcb8d46c1..23513d666dbf 100644 --- a/geode-core/src/main/java/com/gemstone/gemfire/distributed/internal/deadlock/DeadlockDetector.java +++ b/geode-core/src/main/java/com/gemstone/gemfire/distributed/internal/deadlock/DeadlockDetector.java @@ -53,7 +53,6 @@ * This class also has a main() method that can read serialized DependencyGraphs * from multiple JVMs, merge them and perform various analysis on them. * - * @author dsmith * */ public class DeadlockDetector { diff --git a/geode-core/src/main/java/com/gemstone/gemfire/distributed/internal/deadlock/Dependency.java b/geode-core/src/main/java/com/gemstone/gemfire/distributed/internal/deadlock/Dependency.java index c035846ebf20..362300fb1493 100644 --- a/geode-core/src/main/java/com/gemstone/gemfire/distributed/internal/deadlock/Dependency.java +++ b/geode-core/src/main/java/com/gemstone/gemfire/distributed/internal/deadlock/Dependency.java @@ -25,7 +25,6 @@ * An example of a dependency is a Thread that is blocking on a lock, or a lock * that is held by a thread. * - * @author dsmith * */ public class Dependency implements Serializable { diff --git a/geode-core/src/main/java/com/gemstone/gemfire/distributed/internal/deadlock/DependencyGraph.java b/geode-core/src/main/java/com/gemstone/gemfire/distributed/internal/deadlock/DependencyGraph.java index cac47f9eed8b..0c67bb8ad823 100644 --- a/geode-core/src/main/java/com/gemstone/gemfire/distributed/internal/deadlock/DependencyGraph.java +++ b/geode-core/src/main/java/com/gemstone/gemfire/distributed/internal/deadlock/DependencyGraph.java @@ -38,8 +38,6 @@ * graph. * * - * @author dsmith - * @author bschuchardt * */ public class DependencyGraph implements Serializable { diff --git a/geode-core/src/main/java/com/gemstone/gemfire/distributed/internal/deadlock/DependencyMonitor.java b/geode-core/src/main/java/com/gemstone/gemfire/distributed/internal/deadlock/DependencyMonitor.java index b58477e4778f..6a40596f3956 100644 --- a/geode-core/src/main/java/com/gemstone/gemfire/distributed/internal/deadlock/DependencyMonitor.java +++ b/geode-core/src/main/java/com/gemstone/gemfire/distributed/internal/deadlock/DependencyMonitor.java @@ -25,7 +25,6 @@ * this interface should register themselves with the dependency monitor using * the {@link DependencyMonitorManager#addMonitor(DependencyMonitor)} method. * - * @author dsmith */ public interface DependencyMonitor { /** diff --git a/geode-core/src/main/java/com/gemstone/gemfire/distributed/internal/deadlock/DependencyMonitorManager.java b/geode-core/src/main/java/com/gemstone/gemfire/distributed/internal/deadlock/DependencyMonitorManager.java index e48c5afe9f69..cbd3a8c1fdc0 100644 --- a/geode-core/src/main/java/com/gemstone/gemfire/distributed/internal/deadlock/DependencyMonitorManager.java +++ b/geode-core/src/main/java/com/gemstone/gemfire/distributed/internal/deadlock/DependencyMonitorManager.java @@ -35,7 +35,6 @@ * {@link DeadlockDetector} will be able to query them for dependencies when finding * deadlocks. * - * @author dsmith * */ public class DependencyMonitorManager { diff --git a/geode-core/src/main/java/com/gemstone/gemfire/distributed/internal/deadlock/GemFireDeadlockDetector.java b/geode-core/src/main/java/com/gemstone/gemfire/distributed/internal/deadlock/GemFireDeadlockDetector.java index 739807a7fedd..a972ed683aa7 100644 --- a/geode-core/src/main/java/com/gemstone/gemfire/distributed/internal/deadlock/GemFireDeadlockDetector.java +++ b/geode-core/src/main/java/com/gemstone/gemfire/distributed/internal/deadlock/GemFireDeadlockDetector.java @@ -40,7 +40,6 @@ * {@link DeadlockDetector} class to determine if any deadlocks exist within * those dependencies. * - * @author dsmith * */ public class GemFireDeadlockDetector { diff --git a/geode-core/src/main/java/com/gemstone/gemfire/distributed/internal/deadlock/LocalLockInfo.java b/geode-core/src/main/java/com/gemstone/gemfire/distributed/internal/deadlock/LocalLockInfo.java index e061e4c82f8a..67c02f9d03eb 100644 --- a/geode-core/src/main/java/com/gemstone/gemfire/distributed/internal/deadlock/LocalLockInfo.java +++ b/geode-core/src/main/java/com/gemstone/gemfire/distributed/internal/deadlock/LocalLockInfo.java @@ -27,7 +27,6 @@ * class. It also holds a locality field to identify the VM * where the lock is held. * - * @author dsmith * */ class LocalLockInfo implements Serializable { diff --git a/geode-core/src/main/java/com/gemstone/gemfire/distributed/internal/deadlock/LocalThread.java b/geode-core/src/main/java/com/gemstone/gemfire/distributed/internal/deadlock/LocalThread.java index c2c7f1078e6a..628034635f1e 100644 --- a/geode-core/src/main/java/com/gemstone/gemfire/distributed/internal/deadlock/LocalThread.java +++ b/geode-core/src/main/java/com/gemstone/gemfire/distributed/internal/deadlock/LocalThread.java @@ -25,7 +25,6 @@ * class. It also holds a locality field to identify the VM * where the thread exists. * -* @author dsmith * */ public class LocalThread implements Serializable, ThreadReference { diff --git a/geode-core/src/main/java/com/gemstone/gemfire/distributed/internal/deadlock/MessageDependencyMonitor.java b/geode-core/src/main/java/com/gemstone/gemfire/distributed/internal/deadlock/MessageDependencyMonitor.java index a73fa4f62fb9..fe590aa1f12e 100644 --- a/geode-core/src/main/java/com/gemstone/gemfire/distributed/internal/deadlock/MessageDependencyMonitor.java +++ b/geode-core/src/main/java/com/gemstone/gemfire/distributed/internal/deadlock/MessageDependencyMonitor.java @@ -34,7 +34,6 @@ * processor thread is waiting for. * * This will allow us to programatically discover deadlocks. - * @author dsmith * */ public class MessageDependencyMonitor implements DependencyMonitor { diff --git a/geode-core/src/main/java/com/gemstone/gemfire/distributed/internal/deadlock/ThreadReference.java b/geode-core/src/main/java/com/gemstone/gemfire/distributed/internal/deadlock/ThreadReference.java index 8e5b3b190790..815834d2b6e5 100644 --- a/geode-core/src/main/java/com/gemstone/gemfire/distributed/internal/deadlock/ThreadReference.java +++ b/geode-core/src/main/java/com/gemstone/gemfire/distributed/internal/deadlock/ThreadReference.java @@ -21,7 +21,6 @@ /** * A marker interface for thread identifiers returned from * {@link DeadlockDetector#getThreadReference(String, Thread)} - * @author dsmith */ public interface ThreadReference extends Serializable { diff --git a/geode-core/src/main/java/com/gemstone/gemfire/distributed/internal/deadlock/UnsafeThreadLocal.java b/geode-core/src/main/java/com/gemstone/gemfire/distributed/internal/deadlock/UnsafeThreadLocal.java index 7a6f07f474ae..9d99aa8dcb7a 100644 --- a/geode-core/src/main/java/com/gemstone/gemfire/distributed/internal/deadlock/UnsafeThreadLocal.java +++ b/geode-core/src/main/java/com/gemstone/gemfire/distributed/internal/deadlock/UnsafeThreadLocal.java @@ -26,7 +26,6 @@ * tool I think it's good enough, and this class provides a very low overhead * way for us to record what thread holds a particular resource. * - * @author dsmith * */ public class UnsafeThreadLocal extends ThreadLocal { diff --git a/geode-core/src/main/java/com/gemstone/gemfire/distributed/internal/direct/DirectChannel.java b/geode-core/src/main/java/com/gemstone/gemfire/distributed/internal/direct/DirectChannel.java index 06b40b828ce2..2196ec208746 100644 --- a/geode-core/src/main/java/com/gemstone/gemfire/distributed/internal/direct/DirectChannel.java +++ b/geode-core/src/main/java/com/gemstone/gemfire/distributed/internal/direct/DirectChannel.java @@ -70,8 +70,6 @@ import com.gemstone.gemfire.internal.util.concurrent.ReentrantSemaphore; /** - * @author Bruce Schuchardt - * @author Darrel Schneider * DirectChannel is used to interact directly with other Direct servers to * distribute GemFire messages to other nodes. It is held by a * com.gemstone.gemfire.internal.cache.distribution.DistributionChannel, diff --git a/geode-core/src/main/java/com/gemstone/gemfire/distributed/internal/locks/Collaboration.java b/geode-core/src/main/java/com/gemstone/gemfire/distributed/internal/locks/Collaboration.java index e332d928b584..cb36fd944438 100755 --- a/geode-core/src/main/java/com/gemstone/gemfire/distributed/internal/locks/Collaboration.java +++ b/geode-core/src/main/java/com/gemstone/gemfire/distributed/internal/locks/Collaboration.java @@ -41,7 +41,6 @@ * Threads that want to change the topic will wait until the current topic * has been released. * - * @author Kirk Lund */ public class Collaboration { diff --git a/geode-core/src/main/java/com/gemstone/gemfire/distributed/internal/locks/DLockBatch.java b/geode-core/src/main/java/com/gemstone/gemfire/distributed/internal/locks/DLockBatch.java index d14572ec5037..832f94962b29 100755 --- a/geode-core/src/main/java/com/gemstone/gemfire/distributed/internal/locks/DLockBatch.java +++ b/geode-core/src/main/java/com/gemstone/gemfire/distributed/internal/locks/DLockBatch.java @@ -23,7 +23,6 @@ /** * Collection of distributed locks to be processed as a batch. * - * @author Kirk Lund */ public interface DLockBatch { diff --git a/geode-core/src/main/java/com/gemstone/gemfire/distributed/internal/locks/DLockBatchId.java b/geode-core/src/main/java/com/gemstone/gemfire/distributed/internal/locks/DLockBatchId.java index 044f6cccac64..e3a789280f12 100644 --- a/geode-core/src/main/java/com/gemstone/gemfire/distributed/internal/locks/DLockBatchId.java +++ b/geode-core/src/main/java/com/gemstone/gemfire/distributed/internal/locks/DLockBatchId.java @@ -22,7 +22,6 @@ /** * Identifies a {@link DLockBatch}. - * @author Kirk Lund */ public interface DLockBatchId extends DataSerializable { /** Gets the lock grantor id that granted this lock */ diff --git a/geode-core/src/main/java/com/gemstone/gemfire/distributed/internal/locks/DLockGrantor.java b/geode-core/src/main/java/com/gemstone/gemfire/distributed/internal/locks/DLockGrantor.java index cf63f57deaaf..969335a4e7eb 100755 --- a/geode-core/src/main/java/com/gemstone/gemfire/distributed/internal/locks/DLockGrantor.java +++ b/geode-core/src/main/java/com/gemstone/gemfire/distributed/internal/locks/DLockGrantor.java @@ -59,8 +59,6 @@ *

    * ReadWriteLocks are not currently handled by grantor recovery or transfer. * - * @author Kirk Lund - * @author Darrel Schneider */ @SuppressWarnings("unchecked") public class DLockGrantor { diff --git a/geode-core/src/main/java/com/gemstone/gemfire/distributed/internal/locks/DLockLessorDepartureHandler.java b/geode-core/src/main/java/com/gemstone/gemfire/distributed/internal/locks/DLockLessorDepartureHandler.java index c7d1ee297721..5909e246f10d 100755 --- a/geode-core/src/main/java/com/gemstone/gemfire/distributed/internal/locks/DLockLessorDepartureHandler.java +++ b/geode-core/src/main/java/com/gemstone/gemfire/distributed/internal/locks/DLockLessorDepartureHandler.java @@ -25,7 +25,6 @@ * Implementation is optional and will be called from * DLockGrantor.handlehandleDepartureOf(Serializable) * - * @author Kirk Lund */ public interface DLockLessorDepartureHandler { diff --git a/geode-core/src/main/java/com/gemstone/gemfire/distributed/internal/locks/DLockQueryProcessor.java b/geode-core/src/main/java/com/gemstone/gemfire/distributed/internal/locks/DLockQueryProcessor.java index 589fc7358af4..7ac74b49b7ba 100755 --- a/geode-core/src/main/java/com/gemstone/gemfire/distributed/internal/locks/DLockQueryProcessor.java +++ b/geode-core/src/main/java/com/gemstone/gemfire/distributed/internal/locks/DLockQueryProcessor.java @@ -43,7 +43,6 @@ /** * Queries the grantor for current leasing information of a lock. * - * @author Kirk Lund */ public class DLockQueryProcessor extends ReplyProcessor21 { private static final Logger logger = LogService.getLogger(); diff --git a/geode-core/src/main/java/com/gemstone/gemfire/distributed/internal/locks/DLockRecoverGrantorProcessor.java b/geode-core/src/main/java/com/gemstone/gemfire/distributed/internal/locks/DLockRecoverGrantorProcessor.java index 1549723f1ba6..5f283c6cece7 100755 --- a/geode-core/src/main/java/com/gemstone/gemfire/distributed/internal/locks/DLockRecoverGrantorProcessor.java +++ b/geode-core/src/main/java/com/gemstone/gemfire/distributed/internal/locks/DLockRecoverGrantorProcessor.java @@ -48,7 +48,6 @@ * DLockRecoverGrantorMessage is sent out by the new lock grantor * and all members reply with details on held and pending locks. * - * @author Kirk Lund */ public class DLockRecoverGrantorProcessor extends ReplyProcessor21 { private static final Logger logger = LogService.getLogger(); diff --git a/geode-core/src/main/java/com/gemstone/gemfire/distributed/internal/locks/DLockReleaseProcessor.java b/geode-core/src/main/java/com/gemstone/gemfire/distributed/internal/locks/DLockReleaseProcessor.java index 248e00fdc3c3..d94a82cdf567 100755 --- a/geode-core/src/main/java/com/gemstone/gemfire/distributed/internal/locks/DLockReleaseProcessor.java +++ b/geode-core/src/main/java/com/gemstone/gemfire/distributed/internal/locks/DLockReleaseProcessor.java @@ -42,7 +42,6 @@ /** * Synchronously releases a lock. * - * @author Kirk Lund */ public class DLockReleaseProcessor extends ReplyProcessor21 { diff --git a/geode-core/src/main/java/com/gemstone/gemfire/distributed/internal/locks/DLockRemoteToken.java b/geode-core/src/main/java/com/gemstone/gemfire/distributed/internal/locks/DLockRemoteToken.java index ab497de41a49..783a65ea8464 100755 --- a/geode-core/src/main/java/com/gemstone/gemfire/distributed/internal/locks/DLockRemoteToken.java +++ b/geode-core/src/main/java/com/gemstone/gemfire/distributed/internal/locks/DLockRemoteToken.java @@ -32,7 +32,6 @@ * grantor. All currently held locks are represented as DLockRemoteTokens * and provided in response to a DLockRecoverGrantorMessage. * - * @author Kirk Lund */ public class DLockRemoteToken implements DataSerializableFixedID { diff --git a/geode-core/src/main/java/com/gemstone/gemfire/distributed/internal/locks/DLockRequestProcessor.java b/geode-core/src/main/java/com/gemstone/gemfire/distributed/internal/locks/DLockRequestProcessor.java index 7e756da62aaa..7d3484010edc 100755 --- a/geode-core/src/main/java/com/gemstone/gemfire/distributed/internal/locks/DLockRequestProcessor.java +++ b/geode-core/src/main/java/com/gemstone/gemfire/distributed/internal/locks/DLockRequestProcessor.java @@ -54,7 +54,6 @@ * When the lock grantor grants or times out the request, a * DLockResponseMessage is finally sent back to the waiting client. * - * @author Kirk Lund */ public class DLockRequestProcessor extends ReplyProcessor21 { private static final Logger logger = LogService.getLogger(); diff --git a/geode-core/src/main/java/com/gemstone/gemfire/distributed/internal/locks/DLockService.java b/geode-core/src/main/java/com/gemstone/gemfire/distributed/internal/locks/DLockService.java index 626d85e362f8..610944e71a1b 100644 --- a/geode-core/src/main/java/com/gemstone/gemfire/distributed/internal/locks/DLockService.java +++ b/geode-core/src/main/java/com/gemstone/gemfire/distributed/internal/locks/DLockService.java @@ -64,8 +64,6 @@ /** * Implements the distributed locking service with distributed lock grantors. * - * @author Dave Monnie - * @author Kirk Lund */ public class DLockService extends DistributedLockService { diff --git a/geode-core/src/main/java/com/gemstone/gemfire/distributed/internal/locks/DLockStats.java b/geode-core/src/main/java/com/gemstone/gemfire/distributed/internal/locks/DLockStats.java index 0c6109b0e42d..ebdc83e99ab2 100755 --- a/geode-core/src/main/java/com/gemstone/gemfire/distributed/internal/locks/DLockStats.java +++ b/geode-core/src/main/java/com/gemstone/gemfire/distributed/internal/locks/DLockStats.java @@ -25,7 +25,6 @@ * This class maintains statistics in GemFire about the distributed lock * service. * - * @author Kirk Lund * */ public class DLockStats implements DistributedLockStats { diff --git a/geode-core/src/main/java/com/gemstone/gemfire/distributed/internal/locks/DLockToken.java b/geode-core/src/main/java/com/gemstone/gemfire/distributed/internal/locks/DLockToken.java index 34c0d6c0e071..301b04740652 100644 --- a/geode-core/src/main/java/com/gemstone/gemfire/distributed/internal/locks/DLockToken.java +++ b/geode-core/src/main/java/com/gemstone/gemfire/distributed/internal/locks/DLockToken.java @@ -35,8 +35,6 @@ * name is currently locked, and which distribution manager and thread owns * the lock. * - * @author Dave Monnie - * @author Kirk Lund */ public class DLockToken { private static final Logger logger = LogService.getLogger(); diff --git a/geode-core/src/main/java/com/gemstone/gemfire/distributed/internal/locks/DeposeGrantorProcessor.java b/geode-core/src/main/java/com/gemstone/gemfire/distributed/internal/locks/DeposeGrantorProcessor.java index 8af6d80c2c49..9e507a70ab18 100644 --- a/geode-core/src/main/java/com/gemstone/gemfire/distributed/internal/locks/DeposeGrantorProcessor.java +++ b/geode-core/src/main/java/com/gemstone/gemfire/distributed/internal/locks/DeposeGrantorProcessor.java @@ -40,8 +40,6 @@ * Processor waits for ack before completing. * * @since 4.0 - * @author Darrel Schneider - * @author Kirk Lund (renamed from ExpectTransferProcessor) */ public class DeposeGrantorProcessor extends ReplyProcessor21 { diff --git a/geode-core/src/main/java/com/gemstone/gemfire/distributed/internal/locks/DistributedLockStats.java b/geode-core/src/main/java/com/gemstone/gemfire/distributed/internal/locks/DistributedLockStats.java index 267b9ab7731b..9a8b8a61626d 100755 --- a/geode-core/src/main/java/com/gemstone/gemfire/distributed/internal/locks/DistributedLockStats.java +++ b/geode-core/src/main/java/com/gemstone/gemfire/distributed/internal/locks/DistributedLockStats.java @@ -22,7 +22,6 @@ /** * Defines the interface used to access and modify distributed lock statistics. * - * @author Kirk Lund * */ public interface DistributedLockStats { diff --git a/geode-core/src/main/java/com/gemstone/gemfire/distributed/internal/locks/DistributedMemberLock.java b/geode-core/src/main/java/com/gemstone/gemfire/distributed/internal/locks/DistributedMemberLock.java index b490b9f74e30..cacf9b9b1909 100755 --- a/geode-core/src/main/java/com/gemstone/gemfire/distributed/internal/locks/DistributedMemberLock.java +++ b/geode-core/src/main/java/com/gemstone/gemfire/distributed/internal/locks/DistributedMemberLock.java @@ -42,7 +42,6 @@ * com.gemstone.gemfire.distributed.DistributedLockService} and may throw * LockNotHeldException or LockServiceDestroyedException. * - * @author Kirk Lund * @since 5.1 */ public final class DistributedMemberLock implements Lock { @@ -53,7 +52,6 @@ public final class DistributedMemberLock implements Lock { /** * Defines the behavior when attempting to reenter a held lock. * - * @author Kirk Lund */ public enum LockReentryPolicy { /** Allows lock reentry */ diff --git a/geode-core/src/main/java/com/gemstone/gemfire/distributed/internal/locks/DummyDLockStats.java b/geode-core/src/main/java/com/gemstone/gemfire/distributed/internal/locks/DummyDLockStats.java index 1d22f2a1699a..0c8e2e6227c0 100755 --- a/geode-core/src/main/java/com/gemstone/gemfire/distributed/internal/locks/DummyDLockStats.java +++ b/geode-core/src/main/java/com/gemstone/gemfire/distributed/internal/locks/DummyDLockStats.java @@ -23,7 +23,6 @@ * Empty implementation of DistributedLockStats used when there is * currently no connection to the distributed system. * - * @author Kirk Lund */ public class DummyDLockStats implements DistributedLockStats { diff --git a/geode-core/src/main/java/com/gemstone/gemfire/distributed/internal/locks/ElderInitProcessor.java b/geode-core/src/main/java/com/gemstone/gemfire/distributed/internal/locks/ElderInitProcessor.java index 9e4c81b6b74a..e799f796e2de 100644 --- a/geode-core/src/main/java/com/gemstone/gemfire/distributed/internal/locks/ElderInitProcessor.java +++ b/geode-core/src/main/java/com/gemstone/gemfire/distributed/internal/locks/ElderInitProcessor.java @@ -49,7 +49,6 @@ * a message to every existing member to discover what services they have. * * @since 4.0 - * @author Darrel Schneider */ public class ElderInitProcessor extends ReplyProcessor21 { private static final Logger logger = LogService.getLogger(); diff --git a/geode-core/src/main/java/com/gemstone/gemfire/distributed/internal/locks/ElderState.java b/geode-core/src/main/java/com/gemstone/gemfire/distributed/internal/locks/ElderState.java index ab8196ed8d5a..245bc602d7b6 100644 --- a/geode-core/src/main/java/com/gemstone/gemfire/distributed/internal/locks/ElderState.java +++ b/geode-core/src/main/java/com/gemstone/gemfire/distributed/internal/locks/ElderState.java @@ -35,7 +35,6 @@ * Keeps track of all the information kept by the elder. * * @since 4.0 - * @author Darrel Schneider */ public class ElderState { private static final Logger logger = LogService.getLogger(); diff --git a/geode-core/src/main/java/com/gemstone/gemfire/distributed/internal/locks/GrantorInfo.java b/geode-core/src/main/java/com/gemstone/gemfire/distributed/internal/locks/GrantorInfo.java index 169763e0cd1a..f3cc9477338f 100644 --- a/geode-core/src/main/java/com/gemstone/gemfire/distributed/internal/locks/GrantorInfo.java +++ b/geode-core/src/main/java/com/gemstone/gemfire/distributed/internal/locks/GrantorInfo.java @@ -23,7 +23,6 @@ * Used to provide information on a grantor request made to the elder. * * @since 4.0 - * @author Darrel Schneider */ public class GrantorInfo { private final InternalDistributedMember id; diff --git a/geode-core/src/main/java/com/gemstone/gemfire/distributed/internal/locks/GrantorRequestProcessor.java b/geode-core/src/main/java/com/gemstone/gemfire/distributed/internal/locks/GrantorRequestProcessor.java index 8a3e8a3c7c7a..6b64616122cf 100644 --- a/geode-core/src/main/java/com/gemstone/gemfire/distributed/internal/locks/GrantorRequestProcessor.java +++ b/geode-core/src/main/java/com/gemstone/gemfire/distributed/internal/locks/GrantorRequestProcessor.java @@ -49,7 +49,6 @@ * grantor of a dlock service. * * @since 4.0 - * @author Darrel Schneider */ public class GrantorRequestProcessor extends ReplyProcessor21 { private static final Logger logger = LogService.getLogger(); @@ -77,7 +76,6 @@ public class GrantorRequestProcessor extends ReplyProcessor21 { * Encapsulates the context necessary for processing a given grantor request * for a given InternalDistributedSystem * - * @author jpenney */ public static class GrantorRequestContext { /** diff --git a/geode-core/src/main/java/com/gemstone/gemfire/distributed/internal/locks/LockGrantorDestroyedException.java b/geode-core/src/main/java/com/gemstone/gemfire/distributed/internal/locks/LockGrantorDestroyedException.java index 4f5a50a00778..f0843d0cbd1e 100755 --- a/geode-core/src/main/java/com/gemstone/gemfire/distributed/internal/locks/LockGrantorDestroyedException.java +++ b/geode-core/src/main/java/com/gemstone/gemfire/distributed/internal/locks/LockGrantorDestroyedException.java @@ -21,7 +21,6 @@ * A LockGrantorDestroyedException is thrown when attempting * use a distributed lock grantor that has been destroyed. * - * @author Kirk Lund * @since 4.0 */ public class LockGrantorDestroyedException extends IllegalStateException { diff --git a/geode-core/src/main/java/com/gemstone/gemfire/distributed/internal/locks/LockGrantorId.java b/geode-core/src/main/java/com/gemstone/gemfire/distributed/internal/locks/LockGrantorId.java index 20ab12c235f2..b0a438b162f4 100755 --- a/geode-core/src/main/java/com/gemstone/gemfire/distributed/internal/locks/LockGrantorId.java +++ b/geode-core/src/main/java/com/gemstone/gemfire/distributed/internal/locks/LockGrantorId.java @@ -23,7 +23,6 @@ /** * Identifies specific lock grantor member and version. * - * @author Kirk Lund * @since 5.1 */ public class LockGrantorId { diff --git a/geode-core/src/main/java/com/gemstone/gemfire/distributed/internal/locks/NonGrantorDestroyedProcessor.java b/geode-core/src/main/java/com/gemstone/gemfire/distributed/internal/locks/NonGrantorDestroyedProcessor.java index 781b68467113..8fbbd8a1e970 100755 --- a/geode-core/src/main/java/com/gemstone/gemfire/distributed/internal/locks/NonGrantorDestroyedProcessor.java +++ b/geode-core/src/main/java/com/gemstone/gemfire/distributed/internal/locks/NonGrantorDestroyedProcessor.java @@ -47,7 +47,6 @@ * by the calling member. * * @since 4.0 - * @author Kirk Lund */ public class NonGrantorDestroyedProcessor extends ReplyProcessor21 { private static final Logger logger = LogService.getLogger(); diff --git a/geode-core/src/main/java/com/gemstone/gemfire/distributed/internal/membership/InternalRole.java b/geode-core/src/main/java/com/gemstone/gemfire/distributed/internal/membership/InternalRole.java index 20cebc4846f4..45cd7a4da739 100755 --- a/geode-core/src/main/java/com/gemstone/gemfire/distributed/internal/membership/InternalRole.java +++ b/geode-core/src/main/java/com/gemstone/gemfire/distributed/internal/membership/InternalRole.java @@ -41,7 +41,6 @@ * and {@link com.gemstone.gemfire.cache.RegionDistributionException * RegionDistributionException} for examples on how to do this.

    * - * @author Kirk Lund * @since 5.0 */ public class InternalRole implements Role { diff --git a/geode-core/src/main/java/com/gemstone/gemfire/distributed/internal/membership/MemberAttributes.java b/geode-core/src/main/java/com/gemstone/gemfire/distributed/internal/membership/MemberAttributes.java index 2d4d9806862e..10148e0b43ec 100755 --- a/geode-core/src/main/java/com/gemstone/gemfire/distributed/internal/membership/MemberAttributes.java +++ b/geode-core/src/main/java/com/gemstone/gemfire/distributed/internal/membership/MemberAttributes.java @@ -26,7 +26,6 @@ * The attributes of a distributed member. This is largely deprecated as * GMSMember holds all of this information. * - * @author Kirk Lund * @since 5.0 */ public class MemberAttributes { diff --git a/geode-core/src/main/java/com/gemstone/gemfire/distributed/internal/membership/MemberFactory.java b/geode-core/src/main/java/com/gemstone/gemfire/distributed/internal/membership/MemberFactory.java index 250a9a38c7c1..c2223f89fcde 100644 --- a/geode-core/src/main/java/com/gemstone/gemfire/distributed/internal/membership/MemberFactory.java +++ b/geode-core/src/main/java/com/gemstone/gemfire/distributed/internal/membership/MemberFactory.java @@ -31,7 +31,6 @@ * TODO: need to implement a real factory implementation based on gemfire.properties * * @see com.gemstone.gemfire.distributed.internal.membership.NetMember - * @author D. Jason Penney */ public class MemberFactory { diff --git a/geode-core/src/main/java/com/gemstone/gemfire/distributed/internal/membership/MemberServices.java b/geode-core/src/main/java/com/gemstone/gemfire/distributed/internal/membership/MemberServices.java index e1484c9f3052..a1240f4fa15f 100755 --- a/geode-core/src/main/java/com/gemstone/gemfire/distributed/internal/membership/MemberServices.java +++ b/geode-core/src/main/java/com/gemstone/gemfire/distributed/internal/membership/MemberServices.java @@ -30,7 +30,6 @@ * This is the SPI for a provider of membership services. * * @see com.gemstone.gemfire.distributed.internal.membership.NetMember - * @author D. Jason Penney */ public interface MemberServices { diff --git a/geode-core/src/main/java/com/gemstone/gemfire/distributed/internal/membership/MembershipManager.java b/geode-core/src/main/java/com/gemstone/gemfire/distributed/internal/membership/MembershipManager.java index 7416eface189..eee823cdc05c 100755 --- a/geode-core/src/main/java/com/gemstone/gemfire/distributed/internal/membership/MembershipManager.java +++ b/geode-core/src/main/java/com/gemstone/gemfire/distributed/internal/membership/MembershipManager.java @@ -35,7 +35,6 @@ * Note that it is imperative to send a new manager a postConnect message * after instantiation. * - * @author jpenney * */ public interface MembershipManager { diff --git a/geode-core/src/main/java/com/gemstone/gemfire/distributed/internal/membership/MembershipTestHook.java b/geode-core/src/main/java/com/gemstone/gemfire/distributed/internal/membership/MembershipTestHook.java index 6de2e71a73f5..a6209eee8804 100644 --- a/geode-core/src/main/java/com/gemstone/gemfire/distributed/internal/membership/MembershipTestHook.java +++ b/geode-core/src/main/java/com/gemstone/gemfire/distributed/internal/membership/MembershipTestHook.java @@ -22,7 +22,6 @@ /** * Test hook for hydra test development * - * @author bruce * */ public interface MembershipTestHook diff --git a/geode-core/src/main/java/com/gemstone/gemfire/distributed/internal/membership/NetMember.java b/geode-core/src/main/java/com/gemstone/gemfire/distributed/internal/membership/NetMember.java index 128f96c56bcb..43f3cf173e3c 100755 --- a/geode-core/src/main/java/com/gemstone/gemfire/distributed/internal/membership/NetMember.java +++ b/geode-core/src/main/java/com/gemstone/gemfire/distributed/internal/membership/NetMember.java @@ -27,7 +27,6 @@ * This is the SPI for the basic element of membership provided in the * GemFire system. * - * @author jpenney * */ public interface NetMember extends Comparable diff --git a/geode-core/src/main/java/com/gemstone/gemfire/distributed/internal/membership/QuorumChecker.java b/geode-core/src/main/java/com/gemstone/gemfire/distributed/internal/membership/QuorumChecker.java index 32e68d581815..41106a3c450d 100644 --- a/geode-core/src/main/java/com/gemstone/gemfire/distributed/internal/membership/QuorumChecker.java +++ b/geode-core/src/main/java/com/gemstone/gemfire/distributed/internal/membership/QuorumChecker.java @@ -22,7 +22,6 @@ * to probe the network to see if there is a quorum of members * that can be contacted. * - * @author bschuchardt * */ public interface QuorumChecker { diff --git a/geode-core/src/main/java/com/gemstone/gemfire/distributed/internal/membership/gms/messenger/AddressManager.java b/geode-core/src/main/java/com/gemstone/gemfire/distributed/internal/membership/gms/messenger/AddressManager.java index 11690441a821..06cd37017025 100755 --- a/geode-core/src/main/java/com/gemstone/gemfire/distributed/internal/membership/gms/messenger/AddressManager.java +++ b/geode-core/src/main/java/com/gemstone/gemfire/distributed/internal/membership/gms/messenger/AddressManager.java @@ -38,7 +38,6 @@ * one of these, so we need to maintain a mapping between logical and physical * addresses. * - * @author bschuchardt * */ public class AddressManager extends Protocol { diff --git a/geode-core/src/main/java/com/gemstone/gemfire/distributed/internal/membership/gms/messenger/StatRecorder.java b/geode-core/src/main/java/com/gemstone/gemfire/distributed/internal/membership/gms/messenger/StatRecorder.java index 85065b7152d2..e29d71eb1c87 100755 --- a/geode-core/src/main/java/com/gemstone/gemfire/distributed/internal/membership/gms/messenger/StatRecorder.java +++ b/geode-core/src/main/java/com/gemstone/gemfire/distributed/internal/membership/gms/messenger/StatRecorder.java @@ -36,7 +36,6 @@ * JGroups doesn't capture quite the stats we want so this protocol is * inserted into the stack to gather the missing ones. * - * @author bschuchardt * */ public class StatRecorder extends Protocol { diff --git a/geode-core/src/main/java/com/gemstone/gemfire/distributed/internal/membership/gms/mgr/LocalViewMessage.java b/geode-core/src/main/java/com/gemstone/gemfire/distributed/internal/membership/gms/mgr/LocalViewMessage.java index ce5ef4e7e1a5..2bf6daf069f1 100755 --- a/geode-core/src/main/java/com/gemstone/gemfire/distributed/internal/membership/gms/mgr/LocalViewMessage.java +++ b/geode-core/src/main/java/com/gemstone/gemfire/distributed/internal/membership/gms/mgr/LocalViewMessage.java @@ -31,7 +31,6 @@ in an orderly manner. It is intended to be queued with serially executed messages so that the view takes effect at the proper time. - @author Bruce Schuchardt */ public final class LocalViewMessage extends SerialDistributionMessage diff --git a/geode-core/src/main/java/com/gemstone/gemfire/distributed/internal/streaming/StreamingOperation.java b/geode-core/src/main/java/com/gemstone/gemfire/distributed/internal/streaming/StreamingOperation.java index ead3c7fe7a2a..69e8a943f26c 100644 --- a/geode-core/src/main/java/com/gemstone/gemfire/distributed/internal/streaming/StreamingOperation.java +++ b/geode-core/src/main/java/com/gemstone/gemfire/distributed/internal/streaming/StreamingOperation.java @@ -65,7 +65,6 @@ * recipient requesting a potentially large amount of data and receiving the reply * with data chunked into several messages. * - * @author Eric Zoerner */ public abstract class StreamingOperation { private static final Logger logger = LogService.getLogger(); diff --git a/geode-core/src/main/java/com/gemstone/gemfire/distributed/internal/tcpserver/InfoRequest.java b/geode-core/src/main/java/com/gemstone/gemfire/distributed/internal/tcpserver/InfoRequest.java index e8ce0e97cc50..d0476300ef25 100644 --- a/geode-core/src/main/java/com/gemstone/gemfire/distributed/internal/tcpserver/InfoRequest.java +++ b/geode-core/src/main/java/com/gemstone/gemfire/distributed/internal/tcpserver/InfoRequest.java @@ -26,7 +26,6 @@ /** * A request to the TCP server to provide information * about the server - * @author dsmith * @since 5.7 * */ diff --git a/geode-core/src/main/java/com/gemstone/gemfire/distributed/internal/tcpserver/InfoResponse.java b/geode-core/src/main/java/com/gemstone/gemfire/distributed/internal/tcpserver/InfoResponse.java index 7a2f89376177..26572f2a447f 100644 --- a/geode-core/src/main/java/com/gemstone/gemfire/distributed/internal/tcpserver/InfoResponse.java +++ b/geode-core/src/main/java/com/gemstone/gemfire/distributed/internal/tcpserver/InfoResponse.java @@ -27,7 +27,6 @@ /** * A response from the TCP server with information * about the server - * @author dsmith * @since 5.7 */ public class InfoResponse implements DataSerializable { diff --git a/geode-core/src/main/java/com/gemstone/gemfire/distributed/internal/tcpserver/ShutdownRequest.java b/geode-core/src/main/java/com/gemstone/gemfire/distributed/internal/tcpserver/ShutdownRequest.java index b7d7c3488aeb..863c003002be 100644 --- a/geode-core/src/main/java/com/gemstone/gemfire/distributed/internal/tcpserver/ShutdownRequest.java +++ b/geode-core/src/main/java/com/gemstone/gemfire/distributed/internal/tcpserver/ShutdownRequest.java @@ -25,7 +25,6 @@ /** * A request to the TCP server to shutdown - * @author dsmith * @since 5.7 */ public class ShutdownRequest implements DataSerializable { diff --git a/geode-core/src/main/java/com/gemstone/gemfire/distributed/internal/tcpserver/ShutdownResponse.java b/geode-core/src/main/java/com/gemstone/gemfire/distributed/internal/tcpserver/ShutdownResponse.java index 4255816bd10d..ead6f43d27d5 100644 --- a/geode-core/src/main/java/com/gemstone/gemfire/distributed/internal/tcpserver/ShutdownResponse.java +++ b/geode-core/src/main/java/com/gemstone/gemfire/distributed/internal/tcpserver/ShutdownResponse.java @@ -26,7 +26,6 @@ /** * A response from the TCP server that it received * the shutdown request - * @author dsmith * @since 5.7 */ public class ShutdownResponse implements DataSerializable { diff --git a/geode-core/src/main/java/com/gemstone/gemfire/distributed/internal/tcpserver/TcpClient.java b/geode-core/src/main/java/com/gemstone/gemfire/distributed/internal/tcpserver/TcpClient.java index dfcb78ce5cab..25f6c67b8795 100644 --- a/geode-core/src/main/java/com/gemstone/gemfire/distributed/internal/tcpserver/TcpClient.java +++ b/geode-core/src/main/java/com/gemstone/gemfire/distributed/internal/tcpserver/TcpClient.java @@ -43,7 +43,6 @@ * * TODO - refactor this to support keep-alive connections to the server. requestToServer * probably shouldn't a static method. - * @author dsmith * @since 5.7 * */ diff --git a/geode-core/src/main/java/com/gemstone/gemfire/distributed/internal/tcpserver/TcpHandler.java b/geode-core/src/main/java/com/gemstone/gemfire/distributed/internal/tcpserver/TcpHandler.java index 7718535257f9..3b330bc56a43 100644 --- a/geode-core/src/main/java/com/gemstone/gemfire/distributed/internal/tcpserver/TcpHandler.java +++ b/geode-core/src/main/java/com/gemstone/gemfire/distributed/internal/tcpserver/TcpHandler.java @@ -24,7 +24,6 @@ /** * A handler which responds to messages for the {@link TcpServer} - * @author dsmith * @since 5.7 */ public interface TcpHandler { diff --git a/geode-core/src/main/java/com/gemstone/gemfire/distributed/internal/tcpserver/TcpServer.java b/geode-core/src/main/java/com/gemstone/gemfire/distributed/internal/tcpserver/TcpServer.java index e5ad416bf33a..8f1d26d608e9 100644 --- a/geode-core/src/main/java/com/gemstone/gemfire/distributed/internal/tcpserver/TcpServer.java +++ b/geode-core/src/main/java/com/gemstone/gemfire/distributed/internal/tcpserver/TcpServer.java @@ -69,7 +69,6 @@ * This code was factored out of GossipServer.java to allow multiple handlers to * share the same gossip server port. * - * @author dsmith * @since 5.7 * */ diff --git a/geode-core/src/main/java/com/gemstone/gemfire/distributed/internal/tcpserver/VersionRequest.java b/geode-core/src/main/java/com/gemstone/gemfire/distributed/internal/tcpserver/VersionRequest.java index c055d01b8204..60a1a4ea7cb8 100644 --- a/geode-core/src/main/java/com/gemstone/gemfire/distributed/internal/tcpserver/VersionRequest.java +++ b/geode-core/src/main/java/com/gemstone/gemfire/distributed/internal/tcpserver/VersionRequest.java @@ -23,7 +23,6 @@ import java.io.IOException; /** - * @author shobhit * @since 7.1 */ public class VersionRequest implements DataSerializable { diff --git a/geode-core/src/main/java/com/gemstone/gemfire/distributed/internal/tcpserver/VersionResponse.java b/geode-core/src/main/java/com/gemstone/gemfire/distributed/internal/tcpserver/VersionResponse.java index 44356a7671e3..e709e1ad0170 100644 --- a/geode-core/src/main/java/com/gemstone/gemfire/distributed/internal/tcpserver/VersionResponse.java +++ b/geode-core/src/main/java/com/gemstone/gemfire/distributed/internal/tcpserver/VersionResponse.java @@ -25,7 +25,6 @@ /** * Get GemFire version of the member running TcpServer. - * @author shobhit * @since 7.1 */ public class VersionResponse implements DataSerializable { diff --git a/geode-core/src/main/java/com/gemstone/gemfire/distributed/internal/unsafe/RegisterSignalHandlerSupport.java b/geode-core/src/main/java/com/gemstone/gemfire/distributed/internal/unsafe/RegisterSignalHandlerSupport.java index 565c1ac23bf5..cdd680e02866 100644 --- a/geode-core/src/main/java/com/gemstone/gemfire/distributed/internal/unsafe/RegisterSignalHandlerSupport.java +++ b/geode-core/src/main/java/com/gemstone/gemfire/distributed/internal/unsafe/RegisterSignalHandlerSupport.java @@ -20,7 +20,6 @@ /** * The RegisterSignalHandlerSupport class is an ugly hack! *

    - * @author John Blum * @since 7.0 */ public abstract class RegisterSignalHandlerSupport { diff --git a/geode-core/src/main/java/com/gemstone/gemfire/i18n/LogWriterI18n.java b/geode-core/src/main/java/com/gemstone/gemfire/i18n/LogWriterI18n.java index 62519f2ea750..303929e687ad 100644 --- a/geode-core/src/main/java/com/gemstone/gemfire/i18n/LogWriterI18n.java +++ b/geode-core/src/main/java/com/gemstone/gemfire/i18n/LogWriterI18n.java @@ -85,7 +85,6 @@ * if messages at that level will currently be logged. The names * of these methods are of the form: levelEnabled. * - * @author kbanks */ public interface LogWriterI18n { /** diff --git a/geode-core/src/main/java/com/gemstone/gemfire/i18n/StringId.java b/geode-core/src/main/java/com/gemstone/gemfire/i18n/StringId.java index a2f720bc37e1..20b63b051a91 100755 --- a/geode-core/src/main/java/com/gemstone/gemfire/i18n/StringId.java +++ b/geode-core/src/main/java/com/gemstone/gemfire/i18n/StringId.java @@ -25,7 +25,6 @@ /** * This class forms the basis of the i18n strategy. Its primary function is to * be used as a key to be passed to an instance of StringIdResourceBundle. - * @author kbanks * @since 6.0 */ public class StringId { diff --git a/geode-core/src/main/java/com/gemstone/gemfire/internal/AbstractStatisticsFactory.java b/geode-core/src/main/java/com/gemstone/gemfire/internal/AbstractStatisticsFactory.java index 3da3ce287a8f..8b4d47b2c4c6 100755 --- a/geode-core/src/main/java/com/gemstone/gemfire/internal/AbstractStatisticsFactory.java +++ b/geode-core/src/main/java/com/gemstone/gemfire/internal/AbstractStatisticsFactory.java @@ -34,8 +34,6 @@ * It can be used in contexts that do not have the GemFire product * or in vm's that do not have a distributed system nor a gemfire connection. * - * @author Darrel Schneider - * @author Kirk Lund * @since 7.0 */ public abstract class AbstractStatisticsFactory diff --git a/geode-core/src/main/java/com/gemstone/gemfire/internal/AvailablePort.java b/geode-core/src/main/java/com/gemstone/gemfire/internal/AvailablePort.java index 7bec09b84d7f..9417d7a71f50 100644 --- a/geode-core/src/main/java/com/gemstone/gemfire/internal/AvailablePort.java +++ b/geode-core/src/main/java/com/gemstone/gemfire/internal/AvailablePort.java @@ -465,7 +465,6 @@ public static int getRandomAvailablePortInRange(int rangeBase, int rangeTop, int /** * This class will keep an allocated port allocated until it is used. * This makes the window smaller that can cause bug 46690 - * @author darrel * */ public static class Keeper { diff --git a/geode-core/src/main/java/com/gemstone/gemfire/internal/ByteArrayDataInput.java b/geode-core/src/main/java/com/gemstone/gemfire/internal/ByteArrayDataInput.java index a8aedea36850..7615dac3715b 100644 --- a/geode-core/src/main/java/com/gemstone/gemfire/internal/ByteArrayDataInput.java +++ b/geode-core/src/main/java/com/gemstone/gemfire/internal/ByteArrayDataInput.java @@ -31,7 +31,6 @@ * also implements {@link VersionedDataStream} for a stream coming from a * different product version. * - * @author swale * @since 7.1 */ public class ByteArrayDataInput extends InputStream implements DataInput, diff --git a/geode-core/src/main/java/com/gemstone/gemfire/internal/ByteBufferOutputStream.java b/geode-core/src/main/java/com/gemstone/gemfire/internal/ByteBufferOutputStream.java index 800eaafce556..efcc5109963b 100644 --- a/geode-core/src/main/java/com/gemstone/gemfire/internal/ByteBufferOutputStream.java +++ b/geode-core/src/main/java/com/gemstone/gemfire/internal/ByteBufferOutputStream.java @@ -20,7 +20,6 @@ import java.nio.*; /** An OutputStream that wraps to a ByteBuffer - * @author Darrel * @since 3.5 */ diff --git a/geode-core/src/main/java/com/gemstone/gemfire/internal/ByteBufferWriter.java b/geode-core/src/main/java/com/gemstone/gemfire/internal/ByteBufferWriter.java index 3ae09b678703..81fd0d228707 100644 --- a/geode-core/src/main/java/com/gemstone/gemfire/internal/ByteBufferWriter.java +++ b/geode-core/src/main/java/com/gemstone/gemfire/internal/ByteBufferWriter.java @@ -21,7 +21,6 @@ /** * Used by a couple of our classes to say they can have * a ByteBuffer written to them. - * @author dschneider */ public interface ByteBufferWriter { /** diff --git a/geode-core/src/main/java/com/gemstone/gemfire/internal/ClassPathLoader.java b/geode-core/src/main/java/com/gemstone/gemfire/internal/ClassPathLoader.java index 3a301852d477..1cb2332030fc 100755 --- a/geode-core/src/main/java/com/gemstone/gemfire/internal/ClassPathLoader.java +++ b/geode-core/src/main/java/com/gemstone/gemfire/internal/ClassPathLoader.java @@ -62,7 +62,6 @@ * in either a {@link java.lang.SecurityException SecurityException} or a null, then that class loader is quietly * skipped. Duplicate class loaders will be skipped. * - * @author Kirk Lund * @since 6.5.1.4 */ public final class ClassPathLoader { diff --git a/geode-core/src/main/java/com/gemstone/gemfire/internal/ConfigSource.java b/geode-core/src/main/java/com/gemstone/gemfire/internal/ConfigSource.java index 6991b3b4b5bd..72db147b6761 100644 --- a/geode-core/src/main/java/com/gemstone/gemfire/internal/ConfigSource.java +++ b/geode-core/src/main/java/com/gemstone/gemfire/internal/ConfigSource.java @@ -21,7 +21,6 @@ /** * Describes where the value of a configuration attribute came from. * - * @author darrel * @since 7.0 */ public class ConfigSource implements Serializable { diff --git a/geode-core/src/main/java/com/gemstone/gemfire/internal/ConnectionWatcher.java b/geode-core/src/main/java/com/gemstone/gemfire/internal/ConnectionWatcher.java index 57892450533a..75d1aebe2b81 100755 --- a/geode-core/src/main/java/com/gemstone/gemfire/internal/ConnectionWatcher.java +++ b/geode-core/src/main/java/com/gemstone/gemfire/internal/ConnectionWatcher.java @@ -22,7 +22,6 @@ * ConnectionWatcher is used to observe tcp/ip connection formation in SockCreator * implementations. * - * @author bschuchardt * */ public interface ConnectionWatcher { diff --git a/geode-core/src/main/java/com/gemstone/gemfire/internal/CopyOnWriteHashSet.java b/geode-core/src/main/java/com/gemstone/gemfire/internal/CopyOnWriteHashSet.java index 35a5e43f8193..38697fc47f9d 100644 --- a/geode-core/src/main/java/com/gemstone/gemfire/internal/CopyOnWriteHashSet.java +++ b/geode-core/src/main/java/com/gemstone/gemfire/internal/CopyOnWriteHashSet.java @@ -36,7 +36,6 @@ * Also, this class provides a getSnapshot method, which should * be used for any thing that needs an unchanging snapshot of this * this (For example, any serialization of this class should use getSnapshot). - * @author dsmith * */ public class CopyOnWriteHashSet implements Set, Serializable { diff --git a/geode-core/src/main/java/com/gemstone/gemfire/internal/DSCODE.java b/geode-core/src/main/java/com/gemstone/gemfire/internal/DSCODE.java index 5583e680725c..8d91c6b7e616 100644 --- a/geode-core/src/main/java/com/gemstone/gemfire/internal/DSCODE.java +++ b/geode-core/src/main/java/com/gemstone/gemfire/internal/DSCODE.java @@ -24,7 +24,6 @@ * It is basically an Enum and could be changed to one once we drop 1.4. * The allowed range of these codes is -128..127 inclusive (i.e. byte). * - * @author Darrel Schneider * @since 5.7 */ public interface DSCODE { diff --git a/geode-core/src/main/java/com/gemstone/gemfire/internal/DSFIDFactory.java b/geode-core/src/main/java/com/gemstone/gemfire/internal/DSFIDFactory.java index b77dfdb4e255..99782a449abd 100644 --- a/geode-core/src/main/java/com/gemstone/gemfire/internal/DSFIDFactory.java +++ b/geode-core/src/main/java/com/gemstone/gemfire/internal/DSFIDFactory.java @@ -427,7 +427,6 @@ * Note that this class implements DataSerializableFixedID to inherit constants but * is not actually an instance of this interface. * - * @author Darrel Schneider * @since 5.7 */ public final class DSFIDFactory implements DataSerializableFixedID { diff --git a/geode-core/src/main/java/com/gemstone/gemfire/internal/DataSerializableFixedID.java b/geode-core/src/main/java/com/gemstone/gemfire/internal/DataSerializableFixedID.java index 7b263bfb6342..3acd5691509e 100644 --- a/geode-core/src/main/java/com/gemstone/gemfire/internal/DataSerializableFixedID.java +++ b/geode-core/src/main/java/com/gemstone/gemfire/internal/DataSerializableFixedID.java @@ -58,7 +58,6 @@ * * @see DataSerializer * - * @author Darrel Schneider * @since 5.7 */ public interface DataSerializableFixedID extends SerializationVersions { diff --git a/geode-core/src/main/java/com/gemstone/gemfire/internal/DummyStatisticsImpl.java b/geode-core/src/main/java/com/gemstone/gemfire/internal/DummyStatisticsImpl.java index 5c228d392908..2d4462e45d83 100644 --- a/geode-core/src/main/java/com/gemstone/gemfire/internal/DummyStatisticsImpl.java +++ b/geode-core/src/main/java/com/gemstone/gemfire/internal/DummyStatisticsImpl.java @@ -24,7 +24,6 @@ * * @see Package introduction * - * @author Darrel Schneider * * @since 3.0 * diff --git a/geode-core/src/main/java/com/gemstone/gemfire/internal/ExternalizableDSFID.java b/geode-core/src/main/java/com/gemstone/gemfire/internal/ExternalizableDSFID.java index 246218f75a6a..47aef9984566 100644 --- a/geode-core/src/main/java/com/gemstone/gemfire/internal/ExternalizableDSFID.java +++ b/geode-core/src/main/java/com/gemstone/gemfire/internal/ExternalizableDSFID.java @@ -23,7 +23,6 @@ * addition to being DataSerializableFixedID. *

    Note: subclasses must also provide a zero-arg constructor * - * @author Darrel Schneider * @since 5.7 */ public abstract class ExternalizableDSFID diff --git a/geode-core/src/main/java/com/gemstone/gemfire/internal/FileUtil.java b/geode-core/src/main/java/com/gemstone/gemfire/internal/FileUtil.java index b06b5031dc94..c27e1dce8d07 100644 --- a/geode-core/src/main/java/com/gemstone/gemfire/internal/FileUtil.java +++ b/geode-core/src/main/java/com/gemstone/gemfire/internal/FileUtil.java @@ -35,7 +35,6 @@ * TODO A lot of this functionality is probably duplicating apache commons io, * maybe we should switch to that. * - * @author dsmith * */ public class FileUtil { diff --git a/geode-core/src/main/java/com/gemstone/gemfire/internal/GemFireStatSampler.java b/geode-core/src/main/java/com/gemstone/gemfire/internal/GemFireStatSampler.java index bc6aec3bcd27..b63c4d287b91 100644 --- a/geode-core/src/main/java/com/gemstone/gemfire/internal/GemFireStatSampler.java +++ b/geode-core/src/main/java/com/gemstone/gemfire/internal/GemFireStatSampler.java @@ -42,9 +42,6 @@ *

    * The StatisticsManager is implemented by DistributedSystem. * - * @author Darrel Schneider - * @author Kirk Lund - * @author Swapnil Bawaskar */ public final class GemFireStatSampler extends HostStatSampler { diff --git a/geode-core/src/main/java/com/gemstone/gemfire/internal/GemFireUtilLauncher.java b/geode-core/src/main/java/com/gemstone/gemfire/internal/GemFireUtilLauncher.java index 914da30097ad..fa19049a8f2e 100644 --- a/geode-core/src/main/java/com/gemstone/gemfire/internal/GemFireUtilLauncher.java +++ b/geode-core/src/main/java/com/gemstone/gemfire/internal/GemFireUtilLauncher.java @@ -42,7 +42,6 @@ * Usage: * notYetWritenScript * - * @author kbanks * @since 6.0 */ public class GemFireUtilLauncher { diff --git a/geode-core/src/main/java/com/gemstone/gemfire/internal/GfeConsoleReaderFactory.java b/geode-core/src/main/java/com/gemstone/gemfire/internal/GfeConsoleReaderFactory.java index 26fe9f17a4f2..202277e40d3c 100644 --- a/geode-core/src/main/java/com/gemstone/gemfire/internal/GfeConsoleReaderFactory.java +++ b/geode-core/src/main/java/com/gemstone/gemfire/internal/GfeConsoleReaderFactory.java @@ -30,7 +30,6 @@ * System.console() * * - * @author Abhishek Chaudhari * @since 7.0.1 */ public class GfeConsoleReaderFactory { diff --git a/geode-core/src/main/java/com/gemstone/gemfire/internal/HeapDataOutputStream.java b/geode-core/src/main/java/com/gemstone/gemfire/internal/HeapDataOutputStream.java index 546462fd686d..bfbf4491414d 100644 --- a/geode-core/src/main/java/com/gemstone/gemfire/internal/HeapDataOutputStream.java +++ b/geode-core/src/main/java/com/gemstone/gemfire/internal/HeapDataOutputStream.java @@ -40,12 +40,10 @@ * It is always better to use this class instead ByteArrayOutputStream. *

    This class is not thread safe * - * @author Darrel * @since 5.0.2 * * * - * @author Eric Zoerner * Added boolean flag that when turned on will throw an exception instead of allocating a new * buffer. The exception is a BufferOverflowException thrown from expand, and will restore * the position to the point at which the flag was set with the disallowExpansion method. diff --git a/geode-core/src/main/java/com/gemstone/gemfire/internal/HostStatSampler.java b/geode-core/src/main/java/com/gemstone/gemfire/internal/HostStatSampler.java index a4fc8374dd3e..d1d6801b6ca4 100644 --- a/geode-core/src/main/java/com/gemstone/gemfire/internal/HostStatSampler.java +++ b/geode-core/src/main/java/com/gemstone/gemfire/internal/HostStatSampler.java @@ -40,8 +40,6 @@ * HostStatSampler implements a thread which will monitor, sample, and archive * statistics. It only has the common functionality that any sampler needs. - * @author Darrel Schneider - * @author Kirk Lund */ public abstract class HostStatSampler implements Runnable, StatisticsSampler, StatArchiveHandlerConfig { diff --git a/geode-core/src/main/java/com/gemstone/gemfire/internal/InsufficientDiskSpaceException.java b/geode-core/src/main/java/com/gemstone/gemfire/internal/InsufficientDiskSpaceException.java index efda50d141e7..be87c8b8acac 100644 --- a/geode-core/src/main/java/com/gemstone/gemfire/internal/InsufficientDiskSpaceException.java +++ b/geode-core/src/main/java/com/gemstone/gemfire/internal/InsufficientDiskSpaceException.java @@ -25,7 +25,6 @@ import com.gemstone.gemfire.internal.Sendable; /** - * @author kneeraj * @since gfxd 1.0.1 */ public class InsufficientDiskSpaceException extends DiskAccessException implements Sendable { diff --git a/geode-core/src/main/java/com/gemstone/gemfire/internal/InternalDataSerializer.java b/geode-core/src/main/java/com/gemstone/gemfire/internal/InternalDataSerializer.java index b92d1e9939a2..bff592b5ac8d 100644 --- a/geode-core/src/main/java/com/gemstone/gemfire/internal/InternalDataSerializer.java +++ b/geode-core/src/main/java/com/gemstone/gemfire/internal/InternalDataSerializer.java @@ -124,7 +124,6 @@ * distribution messaging (and shared memory management) needed to * support data serialization. * - * @author David Whitlock * @since 3.5 */ public abstract class InternalDataSerializer extends DataSerializer implements DSCODE { @@ -146,7 +145,6 @@ public static ConcurrentHashMap getClassesToSerializers( private static final String serializationVersionTxt = System.getProperty("gemfire.serializationVersion"); /** * Any time new serialization format is added then a new enum needs to be added here. - * @author darrel * @since 6.6.2 */ private static enum SERIALIZATION_VERSION { @@ -3818,7 +3816,6 @@ public final Object fromData(DataInput in) throws IOException, ClassNotFoundExce } /** * Just like a WellKnownDS but its type is compatible with PDX. - * @author darrel * */ protected static abstract class WellKnownPdxDS extends WellKnownDS { diff --git a/geode-core/src/main/java/com/gemstone/gemfire/internal/InternalEntity.java b/geode-core/src/main/java/com/gemstone/gemfire/internal/InternalEntity.java index cf2c6f7cc172..3c1baa70ad33 100644 --- a/geode-core/src/main/java/com/gemstone/gemfire/internal/InternalEntity.java +++ b/geode-core/src/main/java/com/gemstone/gemfire/internal/InternalEntity.java @@ -21,7 +21,6 @@ * would typically be stored. For example, registering functions for internal use. When determining what to do, or how * to display these objects, other classes may use this interface as a filter to eliminate internal objects. * - * @author David Hoots * @since 7.0 * */ diff --git a/geode-core/src/main/java/com/gemstone/gemfire/internal/InternalInstantiator.java b/geode-core/src/main/java/com/gemstone/gemfire/internal/InternalInstantiator.java index 48c2e88e3939..9b28eb4871b6 100644 --- a/geode-core/src/main/java/com/gemstone/gemfire/internal/InternalInstantiator.java +++ b/geode-core/src/main/java/com/gemstone/gemfire/internal/InternalInstantiator.java @@ -54,7 +54,6 @@ * Contains the implementation of {@link com.gemstone.gemfire.Instantiator} * registration and distribution messaging (and shared memory management). * - * @author David Whitlock * @since 3.5 */ public class InternalInstantiator { @@ -977,7 +976,6 @@ public String toString() { * distributed cache of a new Instantiator being * registered. * - * @author Yogesh Mahajan * * @since 5.0 */ diff --git a/geode-core/src/main/java/com/gemstone/gemfire/internal/InternalStatisticsDisabledException.java b/geode-core/src/main/java/com/gemstone/gemfire/internal/InternalStatisticsDisabledException.java index 4329d66867c2..9147965c39ab 100644 --- a/geode-core/src/main/java/com/gemstone/gemfire/internal/InternalStatisticsDisabledException.java +++ b/geode-core/src/main/java/com/gemstone/gemfire/internal/InternalStatisticsDisabledException.java @@ -23,7 +23,6 @@ * Thrown if statistics are requested when statistics are disabled on the * region. * - * @author Eric Zoerner * * * @see com.gemstone.gemfire.cache.AttributesFactory#setStatisticsEnabled(boolean) diff --git a/geode-core/src/main/java/com/gemstone/gemfire/internal/JarClassLoader.java b/geode-core/src/main/java/com/gemstone/gemfire/internal/JarClassLoader.java index 4573d053830c..13138e73e724 100644 --- a/geode-core/src/main/java/com/gemstone/gemfire/internal/JarClassLoader.java +++ b/geode-core/src/main/java/com/gemstone/gemfire/internal/JarClassLoader.java @@ -58,7 +58,6 @@ /** * ClassLoader for a single JAR file. * - * @author David Hoots * @since 7.0 */ public class JarClassLoader extends ClassLoader { @@ -670,7 +669,6 @@ public String toString() { * that the lock will be obtained in all cases (it's reentrant), and then the channel position will be modified by * both instances causing arbitrary values being returned from the read() method. * - * @author David Hoots * @since 7.0 */ private class ChannelInputStream extends InputStream { diff --git a/geode-core/src/main/java/com/gemstone/gemfire/internal/LocalStatListener.java b/geode-core/src/main/java/com/gemstone/gemfire/internal/LocalStatListener.java index 361b8e610b60..c46bc2f4382f 100644 --- a/geode-core/src/main/java/com/gemstone/gemfire/internal/LocalStatListener.java +++ b/geode-core/src/main/java/com/gemstone/gemfire/internal/LocalStatListener.java @@ -27,7 +27,6 @@ * sampler.addLocalStatListener(l, stats, statName); * * - * @author sbawaska * */ public interface LocalStatListener { diff --git a/geode-core/src/main/java/com/gemstone/gemfire/internal/LocalStatisticsFactory.java b/geode-core/src/main/java/com/gemstone/gemfire/internal/LocalStatisticsFactory.java index e645d94f0717..6f8315a0fd71 100644 --- a/geode-core/src/main/java/com/gemstone/gemfire/internal/LocalStatisticsFactory.java +++ b/geode-core/src/main/java/com/gemstone/gemfire/internal/LocalStatisticsFactory.java @@ -32,8 +32,6 @@ * It can be used in contexts that do not have the GemFire product * or in vm's that do not have a distributed system nor a gemfire connection. * - * @author Darrel Schneider - * @author Kirk Lund */ public class LocalStatisticsFactory extends AbstractStatisticsFactory implements StatisticsFactory, StatisticsManager { diff --git a/geode-core/src/main/java/com/gemstone/gemfire/internal/LocalStatisticsImpl.java b/geode-core/src/main/java/com/gemstone/gemfire/internal/LocalStatisticsImpl.java index a6b7e4269912..99957f2f884a 100644 --- a/geode-core/src/main/java/com/gemstone/gemfire/internal/LocalStatisticsImpl.java +++ b/geode-core/src/main/java/com/gemstone/gemfire/internal/LocalStatisticsImpl.java @@ -26,7 +26,6 @@ * * @see Package introduction * - * @author Darrel Schneider * * @since 3.0 * diff --git a/geode-core/src/main/java/com/gemstone/gemfire/internal/ManagerInfo.java b/geode-core/src/main/java/com/gemstone/gemfire/internal/ManagerInfo.java index 4fd542c34764..ed18275bf0a7 100644 --- a/geode-core/src/main/java/com/gemstone/gemfire/internal/ManagerInfo.java +++ b/geode-core/src/main/java/com/gemstone/gemfire/internal/ManagerInfo.java @@ -28,7 +28,6 @@ * in its SystemAdmin manager VM's main thread. *

    For internal use only. * - * @author darrel * */ public class ManagerInfo implements DataSerializable { diff --git a/geode-core/src/main/java/com/gemstone/gemfire/internal/MigrationClient.java b/geode-core/src/main/java/com/gemstone/gemfire/internal/MigrationClient.java index 76e5cd670f17..105aca1bba53 100755 --- a/geode-core/src/main/java/com/gemstone/gemfire/internal/MigrationClient.java +++ b/geode-core/src/main/java/com/gemstone/gemfire/internal/MigrationClient.java @@ -57,7 +57,6 @@ * entries are transfered from the server to the client, they are then * stored in new files in these directories. * - * @author bruce * @since 6.0.1 * */ diff --git a/geode-core/src/main/java/com/gemstone/gemfire/internal/NanoTimer.java b/geode-core/src/main/java/com/gemstone/gemfire/internal/NanoTimer.java index 6c1e285299bc..110c53dd2d88 100644 --- a/geode-core/src/main/java/com/gemstone/gemfire/internal/NanoTimer.java +++ b/geode-core/src/main/java/com/gemstone/gemfire/internal/NanoTimer.java @@ -40,8 +40,6 @@ void example() { } * * - * @author Darrel Schneider - * @author Kirk Lund */ public final class NanoTimer { diff --git a/geode-core/src/main/java/com/gemstone/gemfire/internal/NullDataOutputStream.java b/geode-core/src/main/java/com/gemstone/gemfire/internal/NullDataOutputStream.java index ce0a548ab7cc..6e7784b514e5 100644 --- a/geode-core/src/main/java/com/gemstone/gemfire/internal/NullDataOutputStream.java +++ b/geode-core/src/main/java/com/gemstone/gemfire/internal/NullDataOutputStream.java @@ -25,7 +25,6 @@ * consuming any memory. *

    This class is not thread safe * - * @author Darrel * @since 5.0.2 * */ diff --git a/geode-core/src/main/java/com/gemstone/gemfire/internal/OSProcess.java b/geode-core/src/main/java/com/gemstone/gemfire/internal/OSProcess.java index 857095c94d42..afe2445fb350 100644 --- a/geode-core/src/main/java/com/gemstone/gemfire/internal/OSProcess.java +++ b/geode-core/src/main/java/com/gemstone/gemfire/internal/OSProcess.java @@ -51,7 +51,6 @@ * Use exec to create a new process by executing a command. * Use kill to kill a process. * - * @author darrel * */ public class OSProcess { diff --git a/geode-core/src/main/java/com/gemstone/gemfire/internal/ObjIdConcurrentMap.java b/geode-core/src/main/java/com/gemstone/gemfire/internal/ObjIdConcurrentMap.java index 11aecb8dfb96..a0eee99b3703 100644 --- a/geode-core/src/main/java/com/gemstone/gemfire/internal/ObjIdConcurrentMap.java +++ b/geode-core/src/main/java/com/gemstone/gemfire/internal/ObjIdConcurrentMap.java @@ -84,7 +84,6 @@ * Java Collections Framework. * * @since 1.5 - * @author Doug Lea * @param the type of mapped values * * Keys on this map are a primitive "int". diff --git a/geode-core/src/main/java/com/gemstone/gemfire/internal/ObjToByteArraySerializer.java b/geode-core/src/main/java/com/gemstone/gemfire/internal/ObjToByteArraySerializer.java index 1dd8f11c2566..f97a5c1b3179 100644 --- a/geode-core/src/main/java/com/gemstone/gemfire/internal/ObjToByteArraySerializer.java +++ b/geode-core/src/main/java/com/gemstone/gemfire/internal/ObjToByteArraySerializer.java @@ -22,7 +22,6 @@ /** ObjToByteArraySerializer allows an object to be serialized as a byte array * so that the other side sees a byte array arrive. * - * @author Darrel * @since 5.0.2 * */ diff --git a/geode-core/src/main/java/com/gemstone/gemfire/internal/OneTaskOnlyExecutor.java b/geode-core/src/main/java/com/gemstone/gemfire/internal/OneTaskOnlyExecutor.java index a51a5870dd9a..2ddc2ae69558 100644 --- a/geode-core/src/main/java/com/gemstone/gemfire/internal/OneTaskOnlyExecutor.java +++ b/geode-core/src/main/java/com/gemstone/gemfire/internal/OneTaskOnlyExecutor.java @@ -44,7 +44,6 @@ * the currently queued task will be canceled and the new task will be submitted to the queue * with the new time. * - * @author dsmith * @since 6.0 */ @SuppressWarnings("synthetic-access") diff --git a/geode-core/src/main/java/com/gemstone/gemfire/internal/OsStatisticsFactory.java b/geode-core/src/main/java/com/gemstone/gemfire/internal/OsStatisticsFactory.java index 38fca688ad26..ed7900646231 100644 --- a/geode-core/src/main/java/com/gemstone/gemfire/internal/OsStatisticsFactory.java +++ b/geode-core/src/main/java/com/gemstone/gemfire/internal/OsStatisticsFactory.java @@ -28,7 +28,6 @@ *

    * @see Package introduction * - * @author Darrel Schneider * * @since 3.0 */ diff --git a/geode-core/src/main/java/com/gemstone/gemfire/internal/PdxSerializerObject.java b/geode-core/src/main/java/com/gemstone/gemfire/internal/PdxSerializerObject.java index b562883c56ff..4f5998c81575 100644 --- a/geode-core/src/main/java/com/gemstone/gemfire/internal/PdxSerializerObject.java +++ b/geode-core/src/main/java/com/gemstone/gemfire/internal/PdxSerializerObject.java @@ -25,7 +25,6 @@ * package. * See {@link InternalDataSerializer#writePdx(java.io.DataOutput, com.gemstone.gemfire.internal.cache.GemFireCacheImpl, Object, com.gemstone.gemfire.pdx.PdxSerializer)} * - * @author dsmith * */ public interface PdxSerializerObject { diff --git a/geode-core/src/main/java/com/gemstone/gemfire/internal/ProcessOutputReader.java b/geode-core/src/main/java/com/gemstone/gemfire/internal/ProcessOutputReader.java index 7a6d3e4811f1..240a62d41ffd 100644 --- a/geode-core/src/main/java/com/gemstone/gemfire/internal/ProcessOutputReader.java +++ b/geode-core/src/main/java/com/gemstone/gemfire/internal/ProcessOutputReader.java @@ -28,7 +28,6 @@ * does not return until all output from the process has been * read and the process has exited. * - * @author darrel * */ public class ProcessOutputReader { diff --git a/geode-core/src/main/java/com/gemstone/gemfire/internal/ProcessStats.java b/geode-core/src/main/java/com/gemstone/gemfire/internal/ProcessStats.java index 54e4a3be7157..4fd1986dccf0 100644 --- a/geode-core/src/main/java/com/gemstone/gemfire/internal/ProcessStats.java +++ b/geode-core/src/main/java/com/gemstone/gemfire/internal/ProcessStats.java @@ -22,7 +22,6 @@ * Abstracts the process statistics that are common on all platforms. * This is necessary for monitoring the health of GemFire components. * - * @author David Whitlock * * @since 3.5 * */ diff --git a/geode-core/src/main/java/com/gemstone/gemfire/internal/ScheduledThreadPoolExecutorWithKeepAlive.java b/geode-core/src/main/java/com/gemstone/gemfire/internal/ScheduledThreadPoolExecutorWithKeepAlive.java index 37e4c3eedb50..4bebe8998789 100644 --- a/geode-core/src/main/java/com/gemstone/gemfire/internal/ScheduledThreadPoolExecutorWithKeepAlive.java +++ b/geode-core/src/main/java/com/gemstone/gemfire/internal/ScheduledThreadPoolExecutorWithKeepAlive.java @@ -40,7 +40,6 @@ * ScheduledThreadPoolExecutor in that case. This class with throw an exception * if you try to configure it with one thread. * - * @author dsmith * */ @SuppressWarnings("synthetic-access") @@ -204,7 +203,6 @@ public void setExecuteExistingDelayedTasksAfterShutdownPolicy(boolean b) { * A Runnable which we put in the timer which * simply hands off the contain task for execution * in the thread pool when the timer fires. - * @author dsmith * */ private class HandOffTask implements Runnable { @@ -228,7 +226,6 @@ public void run() { * The future returned by the schedule* methods on this class. This future * will not return a value until the task has actually executed in the thread pool, * but it allows us to cancel associated timer task. - * @author dsmith * */ private static class DelegatingScheduledFuture extends FutureTask implements ScheduledFuture { @@ -292,7 +289,6 @@ public int hashCode() { /** A RejectedExecutionHandler which causes the caller to block until * there is space in the queue for the task. - * @author dsmith */ protected static class BlockCallerPolicy implements RejectedExecutionHandler { public void rejectedExecution(Runnable r, ThreadPoolExecutor executor) { diff --git a/geode-core/src/main/java/com/gemstone/gemfire/internal/Sendable.java b/geode-core/src/main/java/com/gemstone/gemfire/internal/Sendable.java index 89df3da9528d..e4542e7ce8ce 100644 --- a/geode-core/src/main/java/com/gemstone/gemfire/internal/Sendable.java +++ b/geode-core/src/main/java/com/gemstone/gemfire/internal/Sendable.java @@ -25,7 +25,6 @@ * Note that you are responsible for sending all the bytes that represent your instance, * even bytes describing your class name if those are required. * - * @author darrel * @since 6.6 */ public interface Sendable { diff --git a/geode-core/src/main/java/com/gemstone/gemfire/internal/SerializationVersions.java b/geode-core/src/main/java/com/gemstone/gemfire/internal/SerializationVersions.java index 4b3ba81dcf57..12d98986375f 100644 --- a/geode-core/src/main/java/com/gemstone/gemfire/internal/SerializationVersions.java +++ b/geode-core/src/main/java/com/gemstone/gemfire/internal/SerializationVersions.java @@ -21,7 +21,6 @@ * VersionedDataSerializable in order to furnish version information * to the serialization infrastructure for backward compatibility * - * @author bruces */ public interface SerializationVersions { diff --git a/geode-core/src/main/java/com/gemstone/gemfire/internal/SetUtils.java b/geode-core/src/main/java/com/gemstone/gemfire/internal/SetUtils.java index 2d70140eccbb..0f4829207632 100644 --- a/geode-core/src/main/java/com/gemstone/gemfire/internal/SetUtils.java +++ b/geode-core/src/main/java/com/gemstone/gemfire/internal/SetUtils.java @@ -22,7 +22,6 @@ /** * Utility methods for managing and using Sets - * @author Mitch Thomas * @since gemfire59poc * */ diff --git a/geode-core/src/main/java/com/gemstone/gemfire/internal/SimpleStatSampler.java b/geode-core/src/main/java/com/gemstone/gemfire/internal/SimpleStatSampler.java index f79a285e3df6..b3cc56bf8af7 100644 --- a/geode-core/src/main/java/com/gemstone/gemfire/internal/SimpleStatSampler.java +++ b/geode-core/src/main/java/com/gemstone/gemfire/internal/SimpleStatSampler.java @@ -34,8 +34,6 @@ * The StatisticsManager may be implemented by LocalStatisticsFactory and does * not require a GemFire connection. - * @author Darrel Schneider - * @author Kirk Lund */ public class SimpleStatSampler extends HostStatSampler { diff --git a/geode-core/src/main/java/com/gemstone/gemfire/internal/SmHelper.java b/geode-core/src/main/java/com/gemstone/gemfire/internal/SmHelper.java index 2746266001bd..8cad2e09c646 100644 --- a/geode-core/src/main/java/com/gemstone/gemfire/internal/SmHelper.java +++ b/geode-core/src/main/java/com/gemstone/gemfire/internal/SmHelper.java @@ -26,7 +26,6 @@ /** * This class defines general native utils. * - * @author Darrel Schneider * */ public class SmHelper { diff --git a/geode-core/src/main/java/com/gemstone/gemfire/internal/StatArchiveWriter.java b/geode-core/src/main/java/com/gemstone/gemfire/internal/StatArchiveWriter.java index 562cce34de85..ffbed3eb67ef 100644 --- a/geode-core/src/main/java/com/gemstone/gemfire/internal/StatArchiveWriter.java +++ b/geode-core/src/main/java/com/gemstone/gemfire/internal/StatArchiveWriter.java @@ -51,8 +51,6 @@ * StatArchiveWriter provides APIs to write statistic snapshots to an archive * file. * - * @author Darrel Schneider - * @author Kirk Lund */ public class StatArchiveWriter implements StatArchiveFormat, SampleHandler { diff --git a/geode-core/src/main/java/com/gemstone/gemfire/internal/StatisticDescriptorImpl.java b/geode-core/src/main/java/com/gemstone/gemfire/internal/StatisticDescriptorImpl.java index d5f083a396bb..f00b30f270a7 100644 --- a/geode-core/src/main/java/com/gemstone/gemfire/internal/StatisticDescriptorImpl.java +++ b/geode-core/src/main/java/com/gemstone/gemfire/internal/StatisticDescriptorImpl.java @@ -26,8 +26,6 @@ * * @see Statistics * - * @author David Whitlock - * @author Darrel Schneider * * @since 3.0 */ diff --git a/geode-core/src/main/java/com/gemstone/gemfire/internal/StatisticsImpl.java b/geode-core/src/main/java/com/gemstone/gemfire/internal/StatisticsImpl.java index 2de737450808..a75491686153 100644 --- a/geode-core/src/main/java/com/gemstone/gemfire/internal/StatisticsImpl.java +++ b/geode-core/src/main/java/com/gemstone/gemfire/internal/StatisticsImpl.java @@ -38,8 +38,6 @@ * * @see Package introduction * - * @author David Whitlock - * @author Darrel Schneider * * @since 3.0 */ diff --git a/geode-core/src/main/java/com/gemstone/gemfire/internal/StatisticsManager.java b/geode-core/src/main/java/com/gemstone/gemfire/internal/StatisticsManager.java index 2b2705d8d9cb..c33d163c5341 100644 --- a/geode-core/src/main/java/com/gemstone/gemfire/internal/StatisticsManager.java +++ b/geode-core/src/main/java/com/gemstone/gemfire/internal/StatisticsManager.java @@ -27,7 +27,6 @@ * for its Statistics instances. This is an internal implementation * specific interface. * - * @author Darrel Schneider * */ public interface StatisticsManager extends StatisticsFactory { diff --git a/geode-core/src/main/java/com/gemstone/gemfire/internal/StatisticsTypeFactoryImpl.java b/geode-core/src/main/java/com/gemstone/gemfire/internal/StatisticsTypeFactoryImpl.java index 6844d6cbf5a3..7f2e48fa8208 100644 --- a/geode-core/src/main/java/com/gemstone/gemfire/internal/StatisticsTypeFactoryImpl.java +++ b/geode-core/src/main/java/com/gemstone/gemfire/internal/StatisticsTypeFactoryImpl.java @@ -29,7 +29,6 @@ * * @see Package introduction * - * @author Darrel Schneider * * @since 3.0 * diff --git a/geode-core/src/main/java/com/gemstone/gemfire/internal/StatisticsTypeImpl.java b/geode-core/src/main/java/com/gemstone/gemfire/internal/StatisticsTypeImpl.java index 1ddb03aa585d..8046a1b8c5dc 100644 --- a/geode-core/src/main/java/com/gemstone/gemfire/internal/StatisticsTypeImpl.java +++ b/geode-core/src/main/java/com/gemstone/gemfire/internal/StatisticsTypeImpl.java @@ -28,8 +28,6 @@ * * @see Statistics * - * @author David Whitlock - * @author Darrel Schneider * * @since 3.0 */ diff --git a/geode-core/src/main/java/com/gemstone/gemfire/internal/SystemAdmin.java b/geode-core/src/main/java/com/gemstone/gemfire/internal/SystemAdmin.java index a57d2cb23fd5..515b27dcf0ff 100644 --- a/geode-core/src/main/java/com/gemstone/gemfire/internal/SystemAdmin.java +++ b/geode-core/src/main/java/com/gemstone/gemfire/internal/SystemAdmin.java @@ -1271,7 +1271,6 @@ public void statistics(File directory, List archiveNames, /** * Represents a list of ResourceInst that have been combined together. * Note the most common case is for this class to only own a single ResourceInst. - * @author darrel * */ @SuppressWarnings("serial") diff --git a/geode-core/src/main/java/com/gemstone/gemfire/internal/SystemFailureTestHook.java b/geode-core/src/main/java/com/gemstone/gemfire/internal/SystemFailureTestHook.java index 85cc8f53a8b8..6475f0d674e3 100644 --- a/geode-core/src/main/java/com/gemstone/gemfire/internal/SystemFailureTestHook.java +++ b/geode-core/src/main/java/com/gemstone/gemfire/internal/SystemFailureTestHook.java @@ -20,7 +20,6 @@ * Allows tests to expect certain exceptions without the SystemFailure watchdog getting upset. * See bug 46988. * - * @author darrel * @since 7.0.1 */ public class SystemFailureTestHook { diff --git a/geode-core/src/main/java/com/gemstone/gemfire/internal/SystemTimer.java b/geode-core/src/main/java/com/gemstone/gemfire/internal/SystemTimer.java index e9e4aa528a26..e46ad90cb427 100644 --- a/geode-core/src/main/java/com/gemstone/gemfire/internal/SystemTimer.java +++ b/geode-core/src/main/java/com/gemstone/gemfire/internal/SystemTimer.java @@ -42,7 +42,6 @@ * * @see Timer * @see TimerTask - * @author jpenney * * TODO -- with Java 1.5, this will be a template type so that the swarm's * class can be specified. @@ -423,7 +422,6 @@ public void cancel() { * Cover class to track behavior of scheduled tasks * * @see TimerTask - * @author jpenney */ public abstract static class SystemTimerTask extends TimerTask { protected static final Logger logger = LogService.getLogger(); diff --git a/geode-core/src/main/java/com/gemstone/gemfire/internal/UniqueIdGenerator.java b/geode-core/src/main/java/com/gemstone/gemfire/internal/UniqueIdGenerator.java index 36506b7eca17..977d7f813b73 100644 --- a/geode-core/src/main/java/com/gemstone/gemfire/internal/UniqueIdGenerator.java +++ b/geode-core/src/main/java/com/gemstone/gemfire/internal/UniqueIdGenerator.java @@ -28,7 +28,6 @@ *

    * Instances of this class are thread safe. * - * @author Darrel * @since 5.0.2 */ diff --git a/geode-core/src/main/java/com/gemstone/gemfire/internal/VersionedDataInputStream.java b/geode-core/src/main/java/com/gemstone/gemfire/internal/VersionedDataInputStream.java index 6dc733dd6758..12d3956f68aa 100644 --- a/geode-core/src/main/java/com/gemstone/gemfire/internal/VersionedDataInputStream.java +++ b/geode-core/src/main/java/com/gemstone/gemfire/internal/VersionedDataInputStream.java @@ -26,7 +26,6 @@ * {@link VersionedDataStream} for a stream coming from a different product * version. * - * @author swale * @since 7.1 */ public final class VersionedDataInputStream extends DataInputStream implements diff --git a/geode-core/src/main/java/com/gemstone/gemfire/internal/VersionedDataOutputStream.java b/geode-core/src/main/java/com/gemstone/gemfire/internal/VersionedDataOutputStream.java index 740f9899a150..a664b43cea64 100644 --- a/geode-core/src/main/java/com/gemstone/gemfire/internal/VersionedDataOutputStream.java +++ b/geode-core/src/main/java/com/gemstone/gemfire/internal/VersionedDataOutputStream.java @@ -24,7 +24,6 @@ * An extension of {@link DataOutputStream} that implements * {@link VersionedDataStream}. * - * @author swale * @since 7.1 */ public final class VersionedDataOutputStream extends DataOutputStream implements diff --git a/geode-core/src/main/java/com/gemstone/gemfire/internal/VersionedDataSerializable.java b/geode-core/src/main/java/com/gemstone/gemfire/internal/VersionedDataSerializable.java index e39f1366f44a..30479e1cea5a 100644 --- a/geode-core/src/main/java/com/gemstone/gemfire/internal/VersionedDataSerializable.java +++ b/geode-core/src/main/java/com/gemstone/gemfire/internal/VersionedDataSerializable.java @@ -25,7 +25,6 @@ * use the corresponding toDataPreXXX/fromDataPreXXX methods when serializing * for a particular version of the product. * - * @author bruces * */ public interface VersionedDataSerializable extends DataSerializable, SerializationVersions { diff --git a/geode-core/src/main/java/com/gemstone/gemfire/internal/VersionedDataStream.java b/geode-core/src/main/java/com/gemstone/gemfire/internal/VersionedDataStream.java index 9d06d77b90ff..a2711ffee9e7 100644 --- a/geode-core/src/main/java/com/gemstone/gemfire/internal/VersionedDataStream.java +++ b/geode-core/src/main/java/com/gemstone/gemfire/internal/VersionedDataStream.java @@ -36,7 +36,6 @@ * {@link InternalDataSerializer#getVersionForDataStream} methods) and deal with * serialization with previous {@link Version}s appropriately. * - * @author swale * @since 7.1 */ public interface VersionedDataStream { diff --git a/geode-core/src/main/java/com/gemstone/gemfire/internal/VersionedObjectInput.java b/geode-core/src/main/java/com/gemstone/gemfire/internal/VersionedObjectInput.java index d0b6aa0f0184..0ac5dc8cec72 100644 --- a/geode-core/src/main/java/com/gemstone/gemfire/internal/VersionedObjectInput.java +++ b/geode-core/src/main/java/com/gemstone/gemfire/internal/VersionedObjectInput.java @@ -25,7 +25,6 @@ * {@link VersionedDataStream} wrapping given {@link ObjectInput} for a stream * coming from a different product version. * - * @author swale * @since 7.1 */ public final class VersionedObjectInput implements ObjectInput, diff --git a/geode-core/src/main/java/com/gemstone/gemfire/internal/VersionedObjectOutput.java b/geode-core/src/main/java/com/gemstone/gemfire/internal/VersionedObjectOutput.java index e0afab8d2ca3..06ca44ad03fe 100644 --- a/geode-core/src/main/java/com/gemstone/gemfire/internal/VersionedObjectOutput.java +++ b/geode-core/src/main/java/com/gemstone/gemfire/internal/VersionedObjectOutput.java @@ -25,7 +25,6 @@ * {@link VersionedDataStream} wrapping given {@link ObjectOutput} for a stream * directed to a different product version. * - * @author swale * @since 7.1 */ public final class VersionedObjectOutput implements ObjectOutput, diff --git a/geode-core/src/main/java/com/gemstone/gemfire/internal/admin/AdminBridgeServer.java b/geode-core/src/main/java/com/gemstone/gemfire/internal/admin/AdminBridgeServer.java index 02fbf1f0d553..86b6769db01d 100644 --- a/geode-core/src/main/java/com/gemstone/gemfire/internal/admin/AdminBridgeServer.java +++ b/geode-core/src/main/java/com/gemstone/gemfire/internal/admin/AdminBridgeServer.java @@ -22,7 +22,6 @@ * A representation of CacheServer that is used for * administration. * - * @author David Whitlock * @since 4.0 */ public interface AdminBridgeServer extends CacheServer { diff --git a/geode-core/src/main/java/com/gemstone/gemfire/internal/admin/CacheInfo.java b/geode-core/src/main/java/com/gemstone/gemfire/internal/admin/CacheInfo.java index c652d93e2bd9..5c023ec9f9ae 100644 --- a/geode-core/src/main/java/com/gemstone/gemfire/internal/admin/CacheInfo.java +++ b/geode-core/src/main/java/com/gemstone/gemfire/internal/admin/CacheInfo.java @@ -20,7 +20,6 @@ /** * Describes a cache from a GemFireVM's point of view. * - * @author Darrel Schneider * @since 3.5 */ public interface CacheInfo { diff --git a/geode-core/src/main/java/com/gemstone/gemfire/internal/admin/ClientHealthMonitoringRegion.java b/geode-core/src/main/java/com/gemstone/gemfire/internal/admin/ClientHealthMonitoringRegion.java index 9ddce3a2f7f1..21fc2faf1741 100644 --- a/geode-core/src/main/java/com/gemstone/gemfire/internal/admin/ClientHealthMonitoringRegion.java +++ b/geode-core/src/main/java/com/gemstone/gemfire/internal/admin/ClientHealthMonitoringRegion.java @@ -32,8 +32,6 @@ * This is an admin (meta) region used by the client health monitoring service * to publish the client health details to the cache-server. * - * @author hkhanna - * @author Hrishi */ public class ClientHealthMonitoringRegion { diff --git a/geode-core/src/main/java/com/gemstone/gemfire/internal/admin/ClientMembershipMessage.java b/geode-core/src/main/java/com/gemstone/gemfire/internal/admin/ClientMembershipMessage.java index cc39d286ddd2..87b1d68e2297 100644 --- a/geode-core/src/main/java/com/gemstone/gemfire/internal/admin/ClientMembershipMessage.java +++ b/geode-core/src/main/java/com/gemstone/gemfire/internal/admin/ClientMembershipMessage.java @@ -30,7 +30,6 @@ * A PooledDistributionMessage for notifying admin members about changes in * Client Membership received through BridgeMembership * - * @author abhishek */ public class ClientMembershipMessage extends PooledDistributionMessage { public static final int JOINED = 0; diff --git a/geode-core/src/main/java/com/gemstone/gemfire/internal/admin/ClientStatsManager.java b/geode-core/src/main/java/com/gemstone/gemfire/internal/admin/ClientStatsManager.java index a91f544bda83..20f6dbf46638 100644 --- a/geode-core/src/main/java/com/gemstone/gemfire/internal/admin/ClientStatsManager.java +++ b/geode-core/src/main/java/com/gemstone/gemfire/internal/admin/ClientStatsManager.java @@ -41,7 +41,6 @@ /** * This class publishes the client statistics using the admin region. * - * @author Hrishi */ public class ClientStatsManager { diff --git a/geode-core/src/main/java/com/gemstone/gemfire/internal/admin/GemFireVM.java b/geode-core/src/main/java/com/gemstone/gemfire/internal/admin/GemFireVM.java index d591dd19e3ff..e51b964cfb2a 100644 --- a/geode-core/src/main/java/com/gemstone/gemfire/internal/admin/GemFireVM.java +++ b/geode-core/src/main/java/com/gemstone/gemfire/internal/admin/GemFireVM.java @@ -35,8 +35,6 @@ /** * Represents one java vm connected to a GemFire distributed system * - * @author Darrel Schneider - * @author Kirk Lund */ public interface GemFireVM { diff --git a/geode-core/src/main/java/com/gemstone/gemfire/internal/admin/GfManagerAgentFactory.java b/geode-core/src/main/java/com/gemstone/gemfire/internal/admin/GfManagerAgentFactory.java index 8423486b7eda..f836cce6405b 100644 --- a/geode-core/src/main/java/com/gemstone/gemfire/internal/admin/GfManagerAgentFactory.java +++ b/geode-core/src/main/java/com/gemstone/gemfire/internal/admin/GfManagerAgentFactory.java @@ -23,9 +23,6 @@ * A factory for GfManagerAgent instances. This is the main entry * point for the admin API. * - * @author Pete Matern - * @author Darrel Schneider - * @author Kirk Lund * */ public class GfManagerAgentFactory { diff --git a/geode-core/src/main/java/com/gemstone/gemfire/internal/admin/HealthListener.java b/geode-core/src/main/java/com/gemstone/gemfire/internal/admin/HealthListener.java index 7d462137155e..e92b16fa2862 100644 --- a/geode-core/src/main/java/com/gemstone/gemfire/internal/admin/HealthListener.java +++ b/geode-core/src/main/java/com/gemstone/gemfire/internal/admin/HealthListener.java @@ -25,7 +25,6 @@ * * @see com.gemstone.gemfire.admin.GemFireHealthConfig * - * @author Darrel Schneider * @since 3.5 */ public interface HealthListener { diff --git a/geode-core/src/main/java/com/gemstone/gemfire/internal/admin/SSLConfig.java b/geode-core/src/main/java/com/gemstone/gemfire/internal/admin/SSLConfig.java index e283d091db54..6553727d0591 100755 --- a/geode-core/src/main/java/com/gemstone/gemfire/internal/admin/SSLConfig.java +++ b/geode-core/src/main/java/com/gemstone/gemfire/internal/admin/SSLConfig.java @@ -24,7 +24,6 @@ /** * The SSL configuration settings for a GemFire distributed system. * - * @author Kirk Lund * */ public class SSLConfig { diff --git a/geode-core/src/main/java/com/gemstone/gemfire/internal/admin/Stat.java b/geode-core/src/main/java/com/gemstone/gemfire/internal/admin/Stat.java index 48af3d6eb40f..7853b71863d4 100644 --- a/geode-core/src/main/java/com/gemstone/gemfire/internal/admin/Stat.java +++ b/geode-core/src/main/java/com/gemstone/gemfire/internal/admin/Stat.java @@ -20,8 +20,6 @@ /** * Interface to represent a single statistic of a StatResource * - * @author Darrel Schneider - * @author Kirk Lund */ public interface Stat extends GfObject { diff --git a/geode-core/src/main/java/com/gemstone/gemfire/internal/admin/StatAlert.java b/geode-core/src/main/java/com/gemstone/gemfire/internal/admin/StatAlert.java index 57e1baa24820..8fb752d0377c 100644 --- a/geode-core/src/main/java/com/gemstone/gemfire/internal/admin/StatAlert.java +++ b/geode-core/src/main/java/com/gemstone/gemfire/internal/admin/StatAlert.java @@ -25,7 +25,6 @@ * AlertDefinition for which this alert being raised * & the value of the statistic. * - * @author Hrishi */ public class StatAlert implements Serializable { diff --git a/geode-core/src/main/java/com/gemstone/gemfire/internal/admin/StatAlertDefinition.java b/geode-core/src/main/java/com/gemstone/gemfire/internal/admin/StatAlertDefinition.java index 64fe4b511960..4abba9eaa36f 100644 --- a/geode-core/src/main/java/com/gemstone/gemfire/internal/admin/StatAlertDefinition.java +++ b/geode-core/src/main/java/com/gemstone/gemfire/internal/admin/StatAlertDefinition.java @@ -23,7 +23,6 @@ /** * Base interface that supports a StatAlertDefinition * - * @author hgadre */ public interface StatAlertDefinition extends DataSerializable { /** diff --git a/geode-core/src/main/java/com/gemstone/gemfire/internal/admin/StatAlertsManager.java b/geode-core/src/main/java/com/gemstone/gemfire/internal/admin/StatAlertsManager.java index 97b1dd9c4f58..2834f042493f 100644 --- a/geode-core/src/main/java/com/gemstone/gemfire/internal/admin/StatAlertsManager.java +++ b/geode-core/src/main/java/com/gemstone/gemfire/internal/admin/StatAlertsManager.java @@ -55,7 +55,6 @@ * @see StatAlertDefinition * @see StatAlert * - * @author mjha * * @since 5.7 */ @@ -345,7 +344,6 @@ protected synchronized void close() { /** * Timer task to send all the alerts raised to {@link StatAlertsAggregator} * - * @author mjha */ class EvaluateAlertDefnsTask extends SystemTimerTask { /** diff --git a/geode-core/src/main/java/com/gemstone/gemfire/internal/admin/StatResource.java b/geode-core/src/main/java/com/gemstone/gemfire/internal/admin/StatResource.java index 98fb85a40e79..dc36ce7f1d89 100644 --- a/geode-core/src/main/java/com/gemstone/gemfire/internal/admin/StatResource.java +++ b/geode-core/src/main/java/com/gemstone/gemfire/internal/admin/StatResource.java @@ -22,8 +22,6 @@ /** * Interface to represent one statistic resource * - * @author Darrel Schneider - * @author Kirk Lund */ public interface StatResource extends GfObject { diff --git a/geode-core/src/main/java/com/gemstone/gemfire/internal/admin/remote/AdminMultipleReplyProcessor.java b/geode-core/src/main/java/com/gemstone/gemfire/internal/admin/remote/AdminMultipleReplyProcessor.java index d3b997708ad2..cb56f27e248a 100644 --- a/geode-core/src/main/java/com/gemstone/gemfire/internal/admin/remote/AdminMultipleReplyProcessor.java +++ b/geode-core/src/main/java/com/gemstone/gemfire/internal/admin/remote/AdminMultipleReplyProcessor.java @@ -34,7 +34,6 @@ * and I don't want to mess with all of the admin code right now. We * need this class to handle failures from admin messages that expect * replies from multiple members. - * @author dsmith * */ public class AdminMultipleReplyProcessor extends ReplyProcessor21 { diff --git a/geode-core/src/main/java/com/gemstone/gemfire/internal/admin/remote/AdminReplyProcessor.java b/geode-core/src/main/java/com/gemstone/gemfire/internal/admin/remote/AdminReplyProcessor.java index 18286b5a7f44..2b7ea34a8072 100755 --- a/geode-core/src/main/java/com/gemstone/gemfire/internal/admin/remote/AdminReplyProcessor.java +++ b/geode-core/src/main/java/com/gemstone/gemfire/internal/admin/remote/AdminReplyProcessor.java @@ -33,7 +33,6 @@ * An AdminReplyProcessor can be {@linkplain #cancel * cancelled}. * - * @author David Whitlock * @since 4.0 */ class AdminReplyProcessor extends ReplyProcessor21 { diff --git a/geode-core/src/main/java/com/gemstone/gemfire/internal/admin/remote/AlertLevelChangeMessage.java b/geode-core/src/main/java/com/gemstone/gemfire/internal/admin/remote/AlertLevelChangeMessage.java index d7b6fc96552c..ee1809200d2a 100644 --- a/geode-core/src/main/java/com/gemstone/gemfire/internal/admin/remote/AlertLevelChangeMessage.java +++ b/geode-core/src/main/java/com/gemstone/gemfire/internal/admin/remote/AlertLevelChangeMessage.java @@ -37,7 +37,6 @@ * * @see AlertLevel * - * @author David Whitlock * @since 3.5 */ public final class AlertLevelChangeMessage extends SerialDistributionMessage { diff --git a/geode-core/src/main/java/com/gemstone/gemfire/internal/admin/remote/AlertsNotificationMessage.java b/geode-core/src/main/java/com/gemstone/gemfire/internal/admin/remote/AlertsNotificationMessage.java index ead843f1fab2..cd18f3bdc529 100755 --- a/geode-core/src/main/java/com/gemstone/gemfire/internal/admin/remote/AlertsNotificationMessage.java +++ b/geode-core/src/main/java/com/gemstone/gemfire/internal/admin/remote/AlertsNotificationMessage.java @@ -31,7 +31,6 @@ * Distribution message to be sent to alert aggregator * {@link StatAlertsAggregator} It wraps alert objects{@link StatAlert} * - * @author mjha * @since 5.7 */ public class AlertsNotificationMessage extends PooledDistributionMessage { diff --git a/geode-core/src/main/java/com/gemstone/gemfire/internal/admin/remote/BridgeServerRequest.java b/geode-core/src/main/java/com/gemstone/gemfire/internal/admin/remote/BridgeServerRequest.java index 02b78e646a76..6aabe6b5fa02 100644 --- a/geode-core/src/main/java/com/gemstone/gemfire/internal/admin/remote/BridgeServerRequest.java +++ b/geode-core/src/main/java/com/gemstone/gemfire/internal/admin/remote/BridgeServerRequest.java @@ -27,7 +27,6 @@ * A message that is sent to a VM that hosts a cache to perform an * administrative operation on one of its bridge servers. * - * @author David Whitlock * @since 4.0 */ public final class BridgeServerRequest extends AdminRequest { diff --git a/geode-core/src/main/java/com/gemstone/gemfire/internal/admin/remote/BridgeServerResponse.java b/geode-core/src/main/java/com/gemstone/gemfire/internal/admin/remote/BridgeServerResponse.java index 51979cb87e8f..02045009c09e 100644 --- a/geode-core/src/main/java/com/gemstone/gemfire/internal/admin/remote/BridgeServerResponse.java +++ b/geode-core/src/main/java/com/gemstone/gemfire/internal/admin/remote/BridgeServerResponse.java @@ -31,7 +31,6 @@ * BridgeServerResponse}. It perform an operation on a bridge server * and returns the result to the sender. * - * @author David Whitlock * @since 4.0 */ public final class BridgeServerResponse extends AdminResponse { diff --git a/geode-core/src/main/java/com/gemstone/gemfire/internal/admin/remote/ChangeRefreshIntervalMessage.java b/geode-core/src/main/java/com/gemstone/gemfire/internal/admin/remote/ChangeRefreshIntervalMessage.java index b1e092bb943c..9f1ed6569669 100755 --- a/geode-core/src/main/java/com/gemstone/gemfire/internal/admin/remote/ChangeRefreshIntervalMessage.java +++ b/geode-core/src/main/java/com/gemstone/gemfire/internal/admin/remote/ChangeRefreshIntervalMessage.java @@ -30,7 +30,6 @@ * * @see StatAlertsManager * - * @author mjha * @since 5.7 */ public class ChangeRefreshIntervalMessage extends PooledDistributionMessage { diff --git a/geode-core/src/main/java/com/gemstone/gemfire/internal/admin/remote/CliLegacyMessage.java b/geode-core/src/main/java/com/gemstone/gemfire/internal/admin/remote/CliLegacyMessage.java index f279b41eb29a..2018d71822b8 100644 --- a/geode-core/src/main/java/com/gemstone/gemfire/internal/admin/remote/CliLegacyMessage.java +++ b/geode-core/src/main/java/com/gemstone/gemfire/internal/admin/remote/CliLegacyMessage.java @@ -31,7 +31,6 @@ * gemfire messages do. This is a extension of AdminRequest so that old * admin messages which are still used as part of the new CLI still log the * message. - * @author dsmith * */ public abstract class CliLegacyMessage extends AdminRequest { diff --git a/geode-core/src/main/java/com/gemstone/gemfire/internal/admin/remote/ClientHealthStats.java b/geode-core/src/main/java/com/gemstone/gemfire/internal/admin/remote/ClientHealthStats.java index 43b5b2191baa..64d56326a614 100644 --- a/geode-core/src/main/java/com/gemstone/gemfire/internal/admin/remote/ClientHealthStats.java +++ b/geode-core/src/main/java/com/gemstone/gemfire/internal/admin/remote/ClientHealthStats.java @@ -32,7 +32,6 @@ /** * Bean class act as container for client stats * - * @author Harsh Khanna */ public class ClientHealthStats implements DataSerializableFixedID, Serializable { diff --git a/geode-core/src/main/java/com/gemstone/gemfire/internal/admin/remote/CompactRequest.java b/geode-core/src/main/java/com/gemstone/gemfire/internal/admin/remote/CompactRequest.java index a2141ccf0b8c..fdbaaa81eacf 100644 --- a/geode-core/src/main/java/com/gemstone/gemfire/internal/admin/remote/CompactRequest.java +++ b/geode-core/src/main/java/com/gemstone/gemfire/internal/admin/remote/CompactRequest.java @@ -40,7 +40,6 @@ /** * An instruction to all members with cache that they should * compact their disk stores. - * @author dsmith * */ public class CompactRequest extends CliLegacyMessage { diff --git a/geode-core/src/main/java/com/gemstone/gemfire/internal/admin/remote/CompactResponse.java b/geode-core/src/main/java/com/gemstone/gemfire/internal/admin/remote/CompactResponse.java index 68fd03b131cd..9115d2c0afab 100644 --- a/geode-core/src/main/java/com/gemstone/gemfire/internal/admin/remote/CompactResponse.java +++ b/geode-core/src/main/java/com/gemstone/gemfire/internal/admin/remote/CompactResponse.java @@ -26,7 +26,6 @@ import com.gemstone.gemfire.distributed.internal.membership.InternalDistributedMember; /** - * @author dsmith * */ public class CompactResponse extends AdminResponse { diff --git a/geode-core/src/main/java/com/gemstone/gemfire/internal/admin/remote/DistributionLocatorId.java b/geode-core/src/main/java/com/gemstone/gemfire/internal/admin/remote/DistributionLocatorId.java index b58898f60db0..b42e6aa86ae4 100644 --- a/geode-core/src/main/java/com/gemstone/gemfire/internal/admin/remote/DistributionLocatorId.java +++ b/geode-core/src/main/java/com/gemstone/gemfire/internal/admin/remote/DistributionLocatorId.java @@ -34,9 +34,6 @@ * Identifies the host, port, and bindAddress a distribution locator is * listening on. * - * @author Darrel Schneider - * @author Pete Matern - * @author Kirk Lund * */ public class DistributionLocatorId implements java.io.Serializable { diff --git a/geode-core/src/main/java/com/gemstone/gemfire/internal/admin/remote/FetchStatsResponse.java b/geode-core/src/main/java/com/gemstone/gemfire/internal/admin/remote/FetchStatsResponse.java index 22003d133a0b..193285764cf6 100644 --- a/geode-core/src/main/java/com/gemstone/gemfire/internal/admin/remote/FetchStatsResponse.java +++ b/geode-core/src/main/java/com/gemstone/gemfire/internal/admin/remote/FetchStatsResponse.java @@ -34,8 +34,6 @@ * Provides a response of remote statistic resources for a * FetchStatsRequest * - * @author Darrel Schneider - * @author Kirk Lund */ public final class FetchStatsResponse extends AdminResponse { diff --git a/geode-core/src/main/java/com/gemstone/gemfire/internal/admin/remote/MissingPersistentIDsRequest.java b/geode-core/src/main/java/com/gemstone/gemfire/internal/admin/remote/MissingPersistentIDsRequest.java index db92473520a0..07244640975a 100644 --- a/geode-core/src/main/java/com/gemstone/gemfire/internal/admin/remote/MissingPersistentIDsRequest.java +++ b/geode-core/src/main/java/com/gemstone/gemfire/internal/admin/remote/MissingPersistentIDsRequest.java @@ -40,7 +40,6 @@ /** * A request to all members for any persistent members that * they are waiting for. - * @author dsmith * TODO prpersist - This extends AdminRequest, but it doesn't * work with most of the admin paradigm, which is a request response * to a single member. Maybe we need to a new base class. diff --git a/geode-core/src/main/java/com/gemstone/gemfire/internal/admin/remote/MissingPersistentIDsResponse.java b/geode-core/src/main/java/com/gemstone/gemfire/internal/admin/remote/MissingPersistentIDsResponse.java index 13f7d28355ae..bb5875371c69 100644 --- a/geode-core/src/main/java/com/gemstone/gemfire/internal/admin/remote/MissingPersistentIDsResponse.java +++ b/geode-core/src/main/java/com/gemstone/gemfire/internal/admin/remote/MissingPersistentIDsResponse.java @@ -32,7 +32,6 @@ /** * The MissingPersistentIdResonse we return 662 peers. This response * includes this list of ids that we have locally. - * @author dsmith * */ public class MissingPersistentIDsResponse extends AdminResponse { diff --git a/geode-core/src/main/java/com/gemstone/gemfire/internal/admin/remote/PrepareRevokePersistentIDRequest.java b/geode-core/src/main/java/com/gemstone/gemfire/internal/admin/remote/PrepareRevokePersistentIDRequest.java index 3ec3e0dd4821..414bc5920b5b 100644 --- a/geode-core/src/main/java/com/gemstone/gemfire/internal/admin/remote/PrepareRevokePersistentIDRequest.java +++ b/geode-core/src/main/java/com/gemstone/gemfire/internal/admin/remote/PrepareRevokePersistentIDRequest.java @@ -35,7 +35,6 @@ /** * An instruction to all members that they should forget * about the persistent member described by this pattern. - * @author dsmith * TODO prpersist - This extends AdminRequest, but it doesn't * work with most of the admin paradigm, which is a request response * to a single member. Maybe we need to a new base class. diff --git a/geode-core/src/main/java/com/gemstone/gemfire/internal/admin/remote/RefreshMemberSnapshotRequest.java b/geode-core/src/main/java/com/gemstone/gemfire/internal/admin/remote/RefreshMemberSnapshotRequest.java index 3c405b8e733d..3d2ecd51f925 100644 --- a/geode-core/src/main/java/com/gemstone/gemfire/internal/admin/remote/RefreshMemberSnapshotRequest.java +++ b/geode-core/src/main/java/com/gemstone/gemfire/internal/admin/remote/RefreshMemberSnapshotRequest.java @@ -24,7 +24,6 @@ * A message that is sent to a particular distribution manager to get its * current {@link com.gemstone.gemfire.admin.GemFireMemberStatus} * - * @author Harsh Khanna */ public class RefreshMemberSnapshotRequest extends AdminRequest { /** diff --git a/geode-core/src/main/java/com/gemstone/gemfire/internal/admin/remote/RefreshMemberSnapshotResponse.java b/geode-core/src/main/java/com/gemstone/gemfire/internal/admin/remote/RefreshMemberSnapshotResponse.java index 3e7a8884400a..f77dd0f1a7bd 100644 --- a/geode-core/src/main/java/com/gemstone/gemfire/internal/admin/remote/RefreshMemberSnapshotResponse.java +++ b/geode-core/src/main/java/com/gemstone/gemfire/internal/admin/remote/RefreshMemberSnapshotResponse.java @@ -33,7 +33,6 @@ * A message that is sent to a particular distribution manager to get its * current {@link com.gemstone.gemfire.admin.GemFireMemberStatus}. * - * @author Harsh Khanna */ public class RefreshMemberSnapshotResponse extends AdminResponse { // instance variables diff --git a/geode-core/src/main/java/com/gemstone/gemfire/internal/admin/remote/RegionSubRegionSizeRequest.java b/geode-core/src/main/java/com/gemstone/gemfire/internal/admin/remote/RegionSubRegionSizeRequest.java index 54f6ee6bf93d..b238d01146e0 100644 --- a/geode-core/src/main/java/com/gemstone/gemfire/internal/admin/remote/RegionSubRegionSizeRequest.java +++ b/geode-core/src/main/java/com/gemstone/gemfire/internal/admin/remote/RegionSubRegionSizeRequest.java @@ -25,7 +25,6 @@ /** * Admin request to transfer region info for a member * - * @author Harsh Khanna */ public class RegionSubRegionSizeRequest extends AdminRequest implements Cancellable { diff --git a/geode-core/src/main/java/com/gemstone/gemfire/internal/admin/remote/RegionSubRegionsSizeResponse.java b/geode-core/src/main/java/com/gemstone/gemfire/internal/admin/remote/RegionSubRegionsSizeResponse.java index d8e956a2066b..31264047468a 100644 --- a/geode-core/src/main/java/com/gemstone/gemfire/internal/admin/remote/RegionSubRegionsSizeResponse.java +++ b/geode-core/src/main/java/com/gemstone/gemfire/internal/admin/remote/RegionSubRegionsSizeResponse.java @@ -37,7 +37,6 @@ /** * Admin response carrying region info for a member * - * @author Harsh Khanna */ public class RegionSubRegionsSizeResponse extends AdminResponse implements Cancellable { diff --git a/geode-core/src/main/java/com/gemstone/gemfire/internal/admin/remote/RemoteBridgeServer.java b/geode-core/src/main/java/com/gemstone/gemfire/internal/admin/remote/RemoteBridgeServer.java index 0758f023e519..e5727f1b4308 100644 --- a/geode-core/src/main/java/com/gemstone/gemfire/internal/admin/remote/RemoteBridgeServer.java +++ b/geode-core/src/main/java/com/gemstone/gemfire/internal/admin/remote/RemoteBridgeServer.java @@ -45,7 +45,6 @@ * that is passed between administration VMs and VMs that host caches * with bridge servers. * - * @author David Whitlock * @since 4.0 */ public class RemoteBridgeServer diff --git a/geode-core/src/main/java/com/gemstone/gemfire/internal/admin/remote/RemoteGemFireVM.java b/geode-core/src/main/java/com/gemstone/gemfire/internal/admin/remote/RemoteGemFireVM.java index 02fc0aa42274..9fbef6a70163 100644 --- a/geode-core/src/main/java/com/gemstone/gemfire/internal/admin/remote/RemoteGemFireVM.java +++ b/geode-core/src/main/java/com/gemstone/gemfire/internal/admin/remote/RemoteGemFireVM.java @@ -56,8 +56,6 @@ * Provides access to a remote gemfire VM for purposes of gathering statistics * and other info specific to that VM. * - * @author Darrel Schneider - * @author Kirk Lund */ public abstract class RemoteGemFireVM implements GemFireVM { diff --git a/geode-core/src/main/java/com/gemstone/gemfire/internal/admin/remote/RemoteGfManagerAgent.java b/geode-core/src/main/java/com/gemstone/gemfire/internal/admin/remote/RemoteGfManagerAgent.java index 6a31b50510c6..c8ba64d6c80f 100644 --- a/geode-core/src/main/java/com/gemstone/gemfire/internal/admin/remote/RemoteGfManagerAgent.java +++ b/geode-core/src/main/java/com/gemstone/gemfire/internal/admin/remote/RemoteGfManagerAgent.java @@ -79,9 +79,6 @@ * {@link JoinLeaveListener}s as well suport for collecting and * collating the pieces of a {@linkplain CacheCollector cache * snapshot}. - * @author Darrel Schneider - * @author Pete Matern - * @author Kirk Lund */ public // Note that since we export the instances in a public list, diff --git a/geode-core/src/main/java/com/gemstone/gemfire/internal/admin/remote/RemoteTransportConfig.java b/geode-core/src/main/java/com/gemstone/gemfire/internal/admin/remote/RemoteTransportConfig.java index 6b24857464a9..77f335b3505c 100644 --- a/geode-core/src/main/java/com/gemstone/gemfire/internal/admin/remote/RemoteTransportConfig.java +++ b/geode-core/src/main/java/com/gemstone/gemfire/internal/admin/remote/RemoteTransportConfig.java @@ -32,10 +32,6 @@ /** * Tranport config for RemoteGfManagerAgent. * - * @author Darrel Schneider - * @author Pete Matern - * @author David Whitlock - * @author Kirk Lund * */ public class RemoteTransportConfig implements TransportConfig { diff --git a/geode-core/src/main/java/com/gemstone/gemfire/internal/admin/remote/RevokePersistentIDRequest.java b/geode-core/src/main/java/com/gemstone/gemfire/internal/admin/remote/RevokePersistentIDRequest.java index 75d83b4640cf..88fd7cecb847 100644 --- a/geode-core/src/main/java/com/gemstone/gemfire/internal/admin/remote/RevokePersistentIDRequest.java +++ b/geode-core/src/main/java/com/gemstone/gemfire/internal/admin/remote/RevokePersistentIDRequest.java @@ -33,7 +33,6 @@ /** * An instruction to all members that they should forget * about the persistent member described by this pattern. - * @author dsmith * TODO prpersist - This extends AdminRequest, but it doesn't * work with most of the admin paradigm, which is a request response * to a single member. Maybe we need to a new base class. diff --git a/geode-core/src/main/java/com/gemstone/gemfire/internal/admin/remote/RevokePersistentIDResponse.java b/geode-core/src/main/java/com/gemstone/gemfire/internal/admin/remote/RevokePersistentIDResponse.java index 31b7f8a3455c..ed6ae27ca867 100644 --- a/geode-core/src/main/java/com/gemstone/gemfire/internal/admin/remote/RevokePersistentIDResponse.java +++ b/geode-core/src/main/java/com/gemstone/gemfire/internal/admin/remote/RevokePersistentIDResponse.java @@ -19,7 +19,6 @@ import com.gemstone.gemfire.distributed.internal.membership.InternalDistributedMember; /** - * @author dsmith * */ public class RevokePersistentIDResponse extends AdminResponse { diff --git a/geode-core/src/main/java/com/gemstone/gemfire/internal/admin/remote/ShutdownAllGatewayHubsRequest.java b/geode-core/src/main/java/com/gemstone/gemfire/internal/admin/remote/ShutdownAllGatewayHubsRequest.java index d84540214116..76b94bf6b301 100644 --- a/geode-core/src/main/java/com/gemstone/gemfire/internal/admin/remote/ShutdownAllGatewayHubsRequest.java +++ b/geode-core/src/main/java/com/gemstone/gemfire/internal/admin/remote/ShutdownAllGatewayHubsRequest.java @@ -33,7 +33,6 @@ * should be removed but it it there for rolling upgrade support when request * come from old version member to shut down hubs. * - * @author kbachhav * @since 9.0 * */ diff --git a/geode-core/src/main/java/com/gemstone/gemfire/internal/admin/remote/ShutdownAllRequest.java b/geode-core/src/main/java/com/gemstone/gemfire/internal/admin/remote/ShutdownAllRequest.java index ffe1ddfe148f..4d5e3ac81932 100644 --- a/geode-core/src/main/java/com/gemstone/gemfire/internal/admin/remote/ShutdownAllRequest.java +++ b/geode-core/src/main/java/com/gemstone/gemfire/internal/admin/remote/ShutdownAllRequest.java @@ -46,7 +46,6 @@ /** * An instruction to all members with cache that their PR should gracefully * close and disconnect DS - * @author xzhou * */ public class ShutdownAllRequest extends AdminRequest { diff --git a/geode-core/src/main/java/com/gemstone/gemfire/internal/admin/remote/ShutdownAllResponse.java b/geode-core/src/main/java/com/gemstone/gemfire/internal/admin/remote/ShutdownAllResponse.java index ad36a9ae0651..2111b7f8ebd7 100644 --- a/geode-core/src/main/java/com/gemstone/gemfire/internal/admin/remote/ShutdownAllResponse.java +++ b/geode-core/src/main/java/com/gemstone/gemfire/internal/admin/remote/ShutdownAllResponse.java @@ -23,7 +23,6 @@ import java.io.IOException; /** - * @author xzhou * */ public class ShutdownAllResponse extends AdminResponse { diff --git a/geode-core/src/main/java/com/gemstone/gemfire/internal/admin/remote/StatAlertsManagerAssignMessage.java b/geode-core/src/main/java/com/gemstone/gemfire/internal/admin/remote/StatAlertsManagerAssignMessage.java index fce20fd48407..871d3ec4bfc2 100755 --- a/geode-core/src/main/java/com/gemstone/gemfire/internal/admin/remote/StatAlertsManagerAssignMessage.java +++ b/geode-core/src/main/java/com/gemstone/gemfire/internal/admin/remote/StatAlertsManagerAssignMessage.java @@ -30,7 +30,6 @@ * This class represents a request object to set an alert manager for the newly * joined member. * - * @author abhishek * @since 5.7 */ public class StatAlertsManagerAssignMessage extends PooledDistributionMessage { diff --git a/geode-core/src/main/java/com/gemstone/gemfire/internal/admin/remote/UpdateAlertDefinitionMessage.java b/geode-core/src/main/java/com/gemstone/gemfire/internal/admin/remote/UpdateAlertDefinitionMessage.java index 88dcbe76620f..cfd18b6ff43e 100755 --- a/geode-core/src/main/java/com/gemstone/gemfire/internal/admin/remote/UpdateAlertDefinitionMessage.java +++ b/geode-core/src/main/java/com/gemstone/gemfire/internal/admin/remote/UpdateAlertDefinitionMessage.java @@ -31,7 +31,6 @@ * {@link StatAlertDefinition} to member's alert manager * {@link StatAlertsManager} * - * @author mjha */ public class UpdateAlertDefinitionMessage extends PooledDistributionMessage { diff --git a/geode-core/src/main/java/com/gemstone/gemfire/internal/admin/statalerts/BaseDecoratorImpl.java b/geode-core/src/main/java/com/gemstone/gemfire/internal/admin/statalerts/BaseDecoratorImpl.java index c085abe2c94e..e74762fa01f4 100755 --- a/geode-core/src/main/java/com/gemstone/gemfire/internal/admin/statalerts/BaseDecoratorImpl.java +++ b/geode-core/src/main/java/com/gemstone/gemfire/internal/admin/statalerts/BaseDecoratorImpl.java @@ -33,7 +33,6 @@ * @see GaugeThresholdDecoratorImpl * @see NumberThresholdDecoratorImpl * - * @author hgadre */ public abstract class BaseDecoratorImpl implements StatAlertDefinition { diff --git a/geode-core/src/main/java/com/gemstone/gemfire/internal/admin/statalerts/DummyStatisticInfoImpl.java b/geode-core/src/main/java/com/gemstone/gemfire/internal/admin/statalerts/DummyStatisticInfoImpl.java index 6a92220ae206..6e4d5f3e9c87 100755 --- a/geode-core/src/main/java/com/gemstone/gemfire/internal/admin/statalerts/DummyStatisticInfoImpl.java +++ b/geode-core/src/main/java/com/gemstone/gemfire/internal/admin/statalerts/DummyStatisticInfoImpl.java @@ -36,7 +36,6 @@ * on server side , {@link StatAlertsManager} create instance of * {@link StatisticInfoImpl} class with help of this class instance * - * @author hgadre */ public class DummyStatisticInfoImpl implements StatisticInfo { private static final long serialVersionUID = -5456779525795868187L; diff --git a/geode-core/src/main/java/com/gemstone/gemfire/internal/admin/statalerts/FunctionDecoratorImpl.java b/geode-core/src/main/java/com/gemstone/gemfire/internal/admin/statalerts/FunctionDecoratorImpl.java index 655ab8b25dc4..41d837aa6c52 100644 --- a/geode-core/src/main/java/com/gemstone/gemfire/internal/admin/statalerts/FunctionDecoratorImpl.java +++ b/geode-core/src/main/java/com/gemstone/gemfire/internal/admin/statalerts/FunctionDecoratorImpl.java @@ -30,7 +30,6 @@ * Function to be applied on all the statistic Threshold is valid for value * evaluated by function * - * @author Harsh Khanna */ public final class FunctionDecoratorImpl extends BaseDecoratorImpl { private static final long serialVersionUID = -4857857489413081553L; diff --git a/geode-core/src/main/java/com/gemstone/gemfire/internal/admin/statalerts/FunctionHelper.java b/geode-core/src/main/java/com/gemstone/gemfire/internal/admin/statalerts/FunctionHelper.java index 74d52ea4c628..759f7fba0705 100644 --- a/geode-core/src/main/java/com/gemstone/gemfire/internal/admin/statalerts/FunctionHelper.java +++ b/geode-core/src/main/java/com/gemstone/gemfire/internal/admin/statalerts/FunctionHelper.java @@ -29,7 +29,6 @@ * This class also keeps a registry of all the functions which are supported, * which should be used during creation of alert definition. * - * @author Hrishi */ public class FunctionHelper { diff --git a/geode-core/src/main/java/com/gemstone/gemfire/internal/admin/statalerts/GaugeThresholdDecoratorImpl.java b/geode-core/src/main/java/com/gemstone/gemfire/internal/admin/statalerts/GaugeThresholdDecoratorImpl.java index 75b4665d93f1..c33db67ab268 100755 --- a/geode-core/src/main/java/com/gemstone/gemfire/internal/admin/statalerts/GaugeThresholdDecoratorImpl.java +++ b/geode-core/src/main/java/com/gemstone/gemfire/internal/admin/statalerts/GaugeThresholdDecoratorImpl.java @@ -31,7 +31,6 @@ * Implementation of {@link StatAlertDefinition}, represents threshold as data * range * - * @author hgadre */ public final class GaugeThresholdDecoratorImpl extends BaseDecoratorImpl implements DataSerializableFixedID { diff --git a/geode-core/src/main/java/com/gemstone/gemfire/internal/admin/statalerts/MultiAttrDefinitionImpl.java b/geode-core/src/main/java/com/gemstone/gemfire/internal/admin/statalerts/MultiAttrDefinitionImpl.java index f493e0a0a7bd..f8f9740e6659 100755 --- a/geode-core/src/main/java/com/gemstone/gemfire/internal/admin/statalerts/MultiAttrDefinitionImpl.java +++ b/geode-core/src/main/java/com/gemstone/gemfire/internal/admin/statalerts/MultiAttrDefinitionImpl.java @@ -32,7 +32,6 @@ * Implementation of {@link StatAlertDefinition} This provides the definition * for multiple statistic * - * @author hgadre */ public final class MultiAttrDefinitionImpl implements StatAlertDefinition { private static final long serialVersionUID = 2508805676076940969L; diff --git a/geode-core/src/main/java/com/gemstone/gemfire/internal/admin/statalerts/NumberThresholdDecoratorImpl.java b/geode-core/src/main/java/com/gemstone/gemfire/internal/admin/statalerts/NumberThresholdDecoratorImpl.java index 23d65448542d..67db490b016a 100755 --- a/geode-core/src/main/java/com/gemstone/gemfire/internal/admin/statalerts/NumberThresholdDecoratorImpl.java +++ b/geode-core/src/main/java/com/gemstone/gemfire/internal/admin/statalerts/NumberThresholdDecoratorImpl.java @@ -31,7 +31,6 @@ * Implementation of {@link StatAlertDefinition}, represents threshold as * number * - * @author hgadre */ public final class NumberThresholdDecoratorImpl extends BaseDecoratorImpl implements DataSerializableFixedID { diff --git a/geode-core/src/main/java/com/gemstone/gemfire/internal/admin/statalerts/SingleAttrDefinitionImpl.java b/geode-core/src/main/java/com/gemstone/gemfire/internal/admin/statalerts/SingleAttrDefinitionImpl.java index d49da74509e9..e79b9441ff52 100755 --- a/geode-core/src/main/java/com/gemstone/gemfire/internal/admin/statalerts/SingleAttrDefinitionImpl.java +++ b/geode-core/src/main/java/com/gemstone/gemfire/internal/admin/statalerts/SingleAttrDefinitionImpl.java @@ -31,7 +31,6 @@ * Implementation of {@link StatAlertDefinition} This provides the definition * for single statistic * - * @author hgadre */ public final class SingleAttrDefinitionImpl implements StatAlertDefinition { private static final long serialVersionUID = 3292417185742697896L; diff --git a/geode-core/src/main/java/com/gemstone/gemfire/internal/admin/statalerts/StatisticInfo.java b/geode-core/src/main/java/com/gemstone/gemfire/internal/admin/statalerts/StatisticInfo.java index c8b1ec5be633..d07e6c2eb383 100755 --- a/geode-core/src/main/java/com/gemstone/gemfire/internal/admin/statalerts/StatisticInfo.java +++ b/geode-core/src/main/java/com/gemstone/gemfire/internal/admin/statalerts/StatisticInfo.java @@ -25,7 +25,6 @@ /** * Provides informations of the statistic * - * @author hgadre * */ public interface StatisticInfo extends DataSerializable { diff --git a/geode-core/src/main/java/com/gemstone/gemfire/internal/admin/statalerts/StatisticInfoImpl.java b/geode-core/src/main/java/com/gemstone/gemfire/internal/admin/statalerts/StatisticInfoImpl.java index c6e2ef447e89..41c1bc0af2a2 100755 --- a/geode-core/src/main/java/com/gemstone/gemfire/internal/admin/statalerts/StatisticInfoImpl.java +++ b/geode-core/src/main/java/com/gemstone/gemfire/internal/admin/statalerts/StatisticInfoImpl.java @@ -31,7 +31,6 @@ * Implemetation of {@link StatisticInfo}, provides all the information * {@link Statistic} * - * @author hgadre * */ public class StatisticInfoImpl implements StatisticInfo { diff --git a/geode-core/src/main/java/com/gemstone/gemfire/internal/cache/AbstractCacheServer.java b/geode-core/src/main/java/com/gemstone/gemfire/internal/cache/AbstractCacheServer.java index 827430b1900f..4f4edfc852fa 100644 --- a/geode-core/src/main/java/com/gemstone/gemfire/internal/cache/AbstractCacheServer.java +++ b/geode-core/src/main/java/com/gemstone/gemfire/internal/cache/AbstractCacheServer.java @@ -38,7 +38,6 @@ * Abstract class that contains common code that all true implementations * of {@link CacheServer} can use. * - * @author darrel * @since 5.7 */ public abstract class AbstractCacheServer implements CacheServer { diff --git a/geode-core/src/main/java/com/gemstone/gemfire/internal/cache/AbstractDiskLRURegionEntry.java b/geode-core/src/main/java/com/gemstone/gemfire/internal/cache/AbstractDiskLRURegionEntry.java index c60f05b670dc..dfd40569fb54 100644 --- a/geode-core/src/main/java/com/gemstone/gemfire/internal/cache/AbstractDiskLRURegionEntry.java +++ b/geode-core/src/main/java/com/gemstone/gemfire/internal/cache/AbstractDiskLRURegionEntry.java @@ -26,7 +26,6 @@ * * @since 3.5.1 * - * @author Darrel Schneider * */ public abstract class AbstractDiskLRURegionEntry diff --git a/geode-core/src/main/java/com/gemstone/gemfire/internal/cache/AbstractDiskRegion.java b/geode-core/src/main/java/com/gemstone/gemfire/internal/cache/AbstractDiskRegion.java index 4fa247112b1a..d74afb3d3a51 100644 --- a/geode-core/src/main/java/com/gemstone/gemfire/internal/cache/AbstractDiskRegion.java +++ b/geode-core/src/main/java/com/gemstone/gemfire/internal/cache/AbstractDiskRegion.java @@ -49,7 +49,6 @@ /** * Code shared by both DiskRegion and RecoveredDiskRegion. * - * @author Darrel Schneider * * @since prPersistSprint2 */ diff --git a/geode-core/src/main/java/com/gemstone/gemfire/internal/cache/AbstractDiskRegionEntry.java b/geode-core/src/main/java/com/gemstone/gemfire/internal/cache/AbstractDiskRegionEntry.java index 165aad3489dc..b65b7addc4d5 100644 --- a/geode-core/src/main/java/com/gemstone/gemfire/internal/cache/AbstractDiskRegionEntry.java +++ b/geode-core/src/main/java/com/gemstone/gemfire/internal/cache/AbstractDiskRegionEntry.java @@ -22,7 +22,6 @@ import com.gemstone.gemfire.internal.offheap.annotations.Retained; /** * - * @author sbawaska * */ public abstract class AbstractDiskRegionEntry diff --git a/geode-core/src/main/java/com/gemstone/gemfire/internal/cache/AbstractLRURegionEntry.java b/geode-core/src/main/java/com/gemstone/gemfire/internal/cache/AbstractLRURegionEntry.java index 36a00e10110c..aa5656d152c1 100644 --- a/geode-core/src/main/java/com/gemstone/gemfire/internal/cache/AbstractLRURegionEntry.java +++ b/geode-core/src/main/java/com/gemstone/gemfire/internal/cache/AbstractLRURegionEntry.java @@ -26,7 +26,6 @@ * * @since 3.5.1 * - * @author Darrel Schneider * */ public abstract class AbstractLRURegionEntry diff --git a/geode-core/src/main/java/com/gemstone/gemfire/internal/cache/AbstractLRURegionMap.java b/geode-core/src/main/java/com/gemstone/gemfire/internal/cache/AbstractLRURegionMap.java index 03ad8d4aef50..a19ee66c70d6 100644 --- a/geode-core/src/main/java/com/gemstone/gemfire/internal/cache/AbstractLRURegionMap.java +++ b/geode-core/src/main/java/com/gemstone/gemfire/internal/cache/AbstractLRURegionMap.java @@ -52,7 +52,6 @@ * * @since 3.5.1 * - * @author Darrel Schneider * */ public abstract class AbstractLRURegionMap extends AbstractRegionMap { diff --git a/geode-core/src/main/java/com/gemstone/gemfire/internal/cache/AbstractOplogDiskRegionEntry.java b/geode-core/src/main/java/com/gemstone/gemfire/internal/cache/AbstractOplogDiskRegionEntry.java index b020fe48da3b..371c49cebdf7 100644 --- a/geode-core/src/main/java/com/gemstone/gemfire/internal/cache/AbstractOplogDiskRegionEntry.java +++ b/geode-core/src/main/java/com/gemstone/gemfire/internal/cache/AbstractOplogDiskRegionEntry.java @@ -30,7 +30,6 @@ * * @since 3.5.1 * - * @author Darrel Schneider * */ public abstract class AbstractOplogDiskRegionEntry diff --git a/geode-core/src/main/java/com/gemstone/gemfire/internal/cache/AbstractRegion.java b/geode-core/src/main/java/com/gemstone/gemfire/internal/cache/AbstractRegion.java index 4711f80ea233..c7627a54609d 100644 --- a/geode-core/src/main/java/com/gemstone/gemfire/internal/cache/AbstractRegion.java +++ b/geode-core/src/main/java/com/gemstone/gemfire/internal/cache/AbstractRegion.java @@ -106,7 +106,6 @@ * Takes care of RegionAttributes, AttributesMutator, and some no-brainer method * implementations. * - * @author Eric Zoerner */ @SuppressWarnings("deprecation") public abstract class AbstractRegion implements Region, RegionAttributes, diff --git a/geode-core/src/main/java/com/gemstone/gemfire/internal/cache/AbstractUpdateOperation.java b/geode-core/src/main/java/com/gemstone/gemfire/internal/cache/AbstractUpdateOperation.java index 3ac006b197fa..59a669baca7c 100644 --- a/geode-core/src/main/java/com/gemstone/gemfire/internal/cache/AbstractUpdateOperation.java +++ b/geode-core/src/main/java/com/gemstone/gemfire/internal/cache/AbstractUpdateOperation.java @@ -48,7 +48,6 @@ /** * Common code for both UpdateOperation and DistributedPutAllOperation. * - * @author Darrel Schneider */ public abstract class AbstractUpdateOperation extends DistributedCacheOperation { private static final Logger logger = LogService.getLogger(); diff --git a/geode-core/src/main/java/com/gemstone/gemfire/internal/cache/AcceptHelper.java b/geode-core/src/main/java/com/gemstone/gemfire/internal/cache/AcceptHelper.java index 00ab5586f399..7675619ae390 100755 --- a/geode-core/src/main/java/com/gemstone/gemfire/internal/cache/AcceptHelper.java +++ b/geode-core/src/main/java/com/gemstone/gemfire/internal/cache/AcceptHelper.java @@ -19,7 +19,6 @@ /** - * @author Sudhir Menon * * * Helper class that holds values needed by the search optimizer to do its work. diff --git a/geode-core/src/main/java/com/gemstone/gemfire/internal/cache/BackupLock.java b/geode-core/src/main/java/com/gemstone/gemfire/internal/cache/BackupLock.java index 3d34d0612215..f304135c3e3b 100644 --- a/geode-core/src/main/java/com/gemstone/gemfire/internal/cache/BackupLock.java +++ b/geode-core/src/main/java/com/gemstone/gemfire/internal/cache/BackupLock.java @@ -30,7 +30,6 @@ * and in the second phase we actually do the backup. During * the second phase we need to reenter the lock and release * it with a different thread. - * @author dsmith * */ public class BackupLock extends ReentrantLock { diff --git a/geode-core/src/main/java/com/gemstone/gemfire/internal/cache/BucketAdvisor.java b/geode-core/src/main/java/com/gemstone/gemfire/internal/cache/BucketAdvisor.java index a6649c357848..3038059d5a9e 100644 --- a/geode-core/src/main/java/com/gemstone/gemfire/internal/cache/BucketAdvisor.java +++ b/geode-core/src/main/java/com/gemstone/gemfire/internal/cache/BucketAdvisor.java @@ -74,7 +74,6 @@ * BucketRegions}. The BucketAdvisor is owned by a {@link * ProxyBucketRegion} and may outlive a BucketRegion. * - * @author Kirk Lund */ @SuppressWarnings("synthetic-access") public class BucketAdvisor extends CacheDistributionAdvisor { @@ -2600,7 +2599,6 @@ public boolean equals(Object obj) { * Handles the actual volunteering to become primary bucket. Ensures that * only one thread is ever volunteering at one time. * - * @author Kirk Lund */ class VolunteeringDelegate { /** diff --git a/geode-core/src/main/java/com/gemstone/gemfire/internal/cache/BucketDump.java b/geode-core/src/main/java/com/gemstone/gemfire/internal/cache/BucketDump.java index df58ee3267d0..22bab885131a 100644 --- a/geode-core/src/main/java/com/gemstone/gemfire/internal/cache/BucketDump.java +++ b/geode-core/src/main/java/com/gemstone/gemfire/internal/cache/BucketDump.java @@ -30,7 +30,6 @@ * compare them. It may contain the region version vector for the bucket as well * as all of the entries. * - * @author dsmith * */ public class BucketDump { diff --git a/geode-core/src/main/java/com/gemstone/gemfire/internal/cache/BucketNotFoundException.java b/geode-core/src/main/java/com/gemstone/gemfire/internal/cache/BucketNotFoundException.java index 0593a49e099b..2881e1fcfcfc 100755 --- a/geode-core/src/main/java/com/gemstone/gemfire/internal/cache/BucketNotFoundException.java +++ b/geode-core/src/main/java/com/gemstone/gemfire/internal/cache/BucketNotFoundException.java @@ -23,7 +23,6 @@ * A version of ForceReattemptException that should be used when the * target bucket can't be found. * - * @author bruce schuchardt * */ public class BucketNotFoundException extends ForceReattemptException { diff --git a/geode-core/src/main/java/com/gemstone/gemfire/internal/cache/BucketPersistenceAdvisor.java b/geode-core/src/main/java/com/gemstone/gemfire/internal/cache/BucketPersistenceAdvisor.java index 39b4f12f94d1..8c821ad66069 100644 --- a/geode-core/src/main/java/com/gemstone/gemfire/internal/cache/BucketPersistenceAdvisor.java +++ b/geode-core/src/main/java/com/gemstone/gemfire/internal/cache/BucketPersistenceAdvisor.java @@ -46,7 +46,6 @@ import com.gemstone.gemfire.internal.util.TransformUtils; /** - * @author dsmith * */ public class BucketPersistenceAdvisor extends PersistenceAdvisorImpl { diff --git a/geode-core/src/main/java/com/gemstone/gemfire/internal/cache/BucketRegion.java b/geode-core/src/main/java/com/gemstone/gemfire/internal/cache/BucketRegion.java index 69f61c4c77d7..923cee79707a 100644 --- a/geode-core/src/main/java/com/gemstone/gemfire/internal/cache/BucketRegion.java +++ b/geode-core/src/main/java/com/gemstone/gemfire/internal/cache/BucketRegion.java @@ -109,7 +109,6 @@ * Primary election for a BucketRegion can be found in the * {@link com.gemstone.gemfire.internal.cache.BucketAdvisor} class * - * @author Mitch Thomas * @since 5.1 * */ diff --git a/geode-core/src/main/java/com/gemstone/gemfire/internal/cache/BucketRegionEvictior.java b/geode-core/src/main/java/com/gemstone/gemfire/internal/cache/BucketRegionEvictior.java index b46517efa262..497d526d46d8 100755 --- a/geode-core/src/main/java/com/gemstone/gemfire/internal/cache/BucketRegionEvictior.java +++ b/geode-core/src/main/java/com/gemstone/gemfire/internal/cache/BucketRegionEvictior.java @@ -24,8 +24,6 @@ * Takes delta to be evicted and tries to evict the least no of LRU entry which * would make evictedBytes more than or equal to the delta * - * @author Suranjan Kumar - * @author Amardeep Rajpal * @since 6.0 * */ diff --git a/geode-core/src/main/java/com/gemstone/gemfire/internal/cache/BucketRegionQueue.java b/geode-core/src/main/java/com/gemstone/gemfire/internal/cache/BucketRegionQueue.java index f7eaf2b9e0ce..6b76c31c8b51 100644 --- a/geode-core/src/main/java/com/gemstone/gemfire/internal/cache/BucketRegionQueue.java +++ b/geode-core/src/main/java/com/gemstone/gemfire/internal/cache/BucketRegionQueue.java @@ -55,7 +55,6 @@ import com.gemstone.gemfire.internal.offheap.OffHeapRegionEntryHelper; /** - * @author Suranjan Kumar * */ public class BucketRegionQueue extends AbstractBucketRegionQueue { diff --git a/geode-core/src/main/java/com/gemstone/gemfire/internal/cache/BucketServerLocation.java b/geode-core/src/main/java/com/gemstone/gemfire/internal/cache/BucketServerLocation.java index 5fe6b46d8ccd..46c6a3863639 100755 --- a/geode-core/src/main/java/com/gemstone/gemfire/internal/cache/BucketServerLocation.java +++ b/geode-core/src/main/java/com/gemstone/gemfire/internal/cache/BucketServerLocation.java @@ -26,8 +26,6 @@ /** * Represents the {@link ServerLocation} of a {@link BucketRegion} * - * @author Suranjan Kumar - * @author Yogesh Mahajan * * @since 6.5 */ diff --git a/geode-core/src/main/java/com/gemstone/gemfire/internal/cache/BucketServerLocation66.java b/geode-core/src/main/java/com/gemstone/gemfire/internal/cache/BucketServerLocation66.java index b6810e72d9a8..73d9da0e24a6 100644 --- a/geode-core/src/main/java/com/gemstone/gemfire/internal/cache/BucketServerLocation66.java +++ b/geode-core/src/main/java/com/gemstone/gemfire/internal/cache/BucketServerLocation66.java @@ -26,8 +26,6 @@ /** * Represents the {@link ServerLocation} of a {@link BucketRegion} * - * @author Suranjan Kumar - * @author Yogesh Mahajan * * @since 6.5 */ diff --git a/geode-core/src/main/java/com/gemstone/gemfire/internal/cache/CacheClientStatus.java b/geode-core/src/main/java/com/gemstone/gemfire/internal/cache/CacheClientStatus.java index 7c7354667b1e..d57ec3825dd5 100755 --- a/geode-core/src/main/java/com/gemstone/gemfire/internal/cache/CacheClientStatus.java +++ b/geode-core/src/main/java/com/gemstone/gemfire/internal/cache/CacheClientStatus.java @@ -25,7 +25,6 @@ * Class CacheClientStatus provides status about a client * from the server's perspective. This class is used by the monitoring tool. * - * @author Barry Oglesby * * @since 4.3 */ diff --git a/geode-core/src/main/java/com/gemstone/gemfire/internal/cache/CacheConfig.java b/geode-core/src/main/java/com/gemstone/gemfire/internal/cache/CacheConfig.java index c5e22a70b2f7..991d143f11f7 100644 --- a/geode-core/src/main/java/com/gemstone/gemfire/internal/cache/CacheConfig.java +++ b/geode-core/src/main/java/com/gemstone/gemfire/internal/cache/CacheConfig.java @@ -28,7 +28,6 @@ * This is helper class used by CacheFactory to pass the cache configuration * values to cache creation code. * - * @author agingade * @since 6.6 */ public class CacheConfig { diff --git a/geode-core/src/main/java/com/gemstone/gemfire/internal/cache/CacheDistributionAdvisee.java b/geode-core/src/main/java/com/gemstone/gemfire/internal/cache/CacheDistributionAdvisee.java index f015241eb053..7b13f21e082c 100755 --- a/geode-core/src/main/java/com/gemstone/gemfire/internal/cache/CacheDistributionAdvisee.java +++ b/geode-core/src/main/java/com/gemstone/gemfire/internal/cache/CacheDistributionAdvisee.java @@ -24,7 +24,6 @@ /** * Distributed cache object (typically a Region) which uses * a {@link CacheDistributionAdvisor}. - * @author Kirk Lund * @since 5.1 */ public interface CacheDistributionAdvisee extends DistributionAdvisee { diff --git a/geode-core/src/main/java/com/gemstone/gemfire/internal/cache/CacheDistributionAdvisor.java b/geode-core/src/main/java/com/gemstone/gemfire/internal/cache/CacheDistributionAdvisor.java index 13e45991f6a4..6f673c73c96a 100644 --- a/geode-core/src/main/java/com/gemstone/gemfire/internal/cache/CacheDistributionAdvisor.java +++ b/geode-core/src/main/java/com/gemstone/gemfire/internal/cache/CacheDistributionAdvisor.java @@ -58,7 +58,6 @@ /** * Adds bookkeeping info and cache-specific behavior to DistributionAdvisor. * Adds bit-encoded flags in addition to object info. - * @author Eric Zoerner * */ @SuppressWarnings("deprecation") diff --git a/geode-core/src/main/java/com/gemstone/gemfire/internal/cache/CacheLifecycleListener.java b/geode-core/src/main/java/com/gemstone/gemfire/internal/cache/CacheLifecycleListener.java index 097afe678def..e21f3bc84fba 100755 --- a/geode-core/src/main/java/com/gemstone/gemfire/internal/cache/CacheLifecycleListener.java +++ b/geode-core/src/main/java/com/gemstone/gemfire/internal/cache/CacheLifecycleListener.java @@ -20,7 +20,6 @@ * Defines callbacks that are invoked when a GemFireCache is * created or closed. * - * @author Kirk Lund * @see GemFireCacheImpl#addCacheLifecycleListener(CacheLifecycleListener) * @see GemFireCacheImpl#removeCacheLifecycleListener(CacheLifecycleListener) */ diff --git a/geode-core/src/main/java/com/gemstone/gemfire/internal/cache/CacheObserver.java b/geode-core/src/main/java/com/gemstone/gemfire/internal/cache/CacheObserver.java index e74760c1dc80..ae3a40bbba11 100644 --- a/geode-core/src/main/java/com/gemstone/gemfire/internal/cache/CacheObserver.java +++ b/geode-core/src/main/java/com/gemstone/gemfire/internal/cache/CacheObserver.java @@ -26,7 +26,6 @@ * the callback is issed only if the boolean ISSUE_CALLBACKS_TO_CACHE_OBSERVER * present in com.gemstone.gemfire.internal.cache.LocalRegion is made true * - * @author Asif */ public interface CacheObserver { diff --git a/geode-core/src/main/java/com/gemstone/gemfire/internal/cache/CacheObserverAdapter.java b/geode-core/src/main/java/com/gemstone/gemfire/internal/cache/CacheObserverAdapter.java index ef667390277d..e6ac989ee669 100644 --- a/geode-core/src/main/java/com/gemstone/gemfire/internal/cache/CacheObserverAdapter.java +++ b/geode-core/src/main/java/com/gemstone/gemfire/internal/cache/CacheObserverAdapter.java @@ -27,7 +27,6 @@ * ISSUE_CALLBACKS_TO_CACHE_OBSERVER present in * com.gemstone.gemfire.internal.cache.LocalRegion is made true * - * @author ashahid */ public class CacheObserverAdapter implements CacheObserver { diff --git a/geode-core/src/main/java/com/gemstone/gemfire/internal/cache/CacheObserverHolder.java b/geode-core/src/main/java/com/gemstone/gemfire/internal/cache/CacheObserverHolder.java index 17a273efd808..8bc77f819ead 100644 --- a/geode-core/src/main/java/com/gemstone/gemfire/internal/cache/CacheObserverHolder.java +++ b/geode-core/src/main/java/com/gemstone/gemfire/internal/cache/CacheObserverHolder.java @@ -47,7 +47,6 @@ * observer.startMethod(arguments); doSomething(); } finally { * observer.stopMethod(arguments); } * - * @author ashahid */ public class CacheObserverHolder { diff --git a/geode-core/src/main/java/com/gemstone/gemfire/internal/cache/CacheServerAdvisor.java b/geode-core/src/main/java/com/gemstone/gemfire/internal/cache/CacheServerAdvisor.java index ef1460549e65..74325e7eec04 100644 --- a/geode-core/src/main/java/com/gemstone/gemfire/internal/cache/CacheServerAdvisor.java +++ b/geode-core/src/main/java/com/gemstone/gemfire/internal/cache/CacheServerAdvisor.java @@ -34,7 +34,6 @@ /** * Used to give advice to a cache server. * Cache server currently need to know about controller's - * @author darrel * */ public class CacheServerAdvisor extends GridAdvisor { diff --git a/geode-core/src/main/java/com/gemstone/gemfire/internal/cache/CacheServerImpl.java b/geode-core/src/main/java/com/gemstone/gemfire/internal/cache/CacheServerImpl.java index 000120b5d2c6..edc44d38bbc1 100644 --- a/geode-core/src/main/java/com/gemstone/gemfire/internal/cache/CacheServerImpl.java +++ b/geode-core/src/main/java/com/gemstone/gemfire/internal/cache/CacheServerImpl.java @@ -79,7 +79,6 @@ * An implementation of the CacheServer interface that delegates * most of the heavy lifting to an {@link Acceptor}. * - * @author David Whitlock * @since 4.0 */ @SuppressWarnings("deprecation") diff --git a/geode-core/src/main/java/com/gemstone/gemfire/internal/cache/CacheServerLauncher.java b/geode-core/src/main/java/com/gemstone/gemfire/internal/cache/CacheServerLauncher.java index c5de84b993c3..d4c19ce6e0d4 100755 --- a/geode-core/src/main/java/com/gemstone/gemfire/internal/cache/CacheServerLauncher.java +++ b/geode-core/src/main/java/com/gemstone/gemfire/internal/cache/CacheServerLauncher.java @@ -58,10 +58,6 @@ /** * Launcher program to start a cache server. * - * @author Sudhir Menon - * @author Barry Oglesby - * @author David Whitlock - * @author John Blum * * @since 2.0.2 */ diff --git a/geode-core/src/main/java/com/gemstone/gemfire/internal/cache/CacheStatisticsImpl.java b/geode-core/src/main/java/com/gemstone/gemfire/internal/cache/CacheStatisticsImpl.java index 009901480b46..9fd56c7d95b4 100644 --- a/geode-core/src/main/java/com/gemstone/gemfire/internal/cache/CacheStatisticsImpl.java +++ b/geode-core/src/main/java/com/gemstone/gemfire/internal/cache/CacheStatisticsImpl.java @@ -25,7 +25,6 @@ /** * - * @author Eric Zoerner * */ class CacheStatisticsImpl implements CacheStatistics { diff --git a/geode-core/src/main/java/com/gemstone/gemfire/internal/cache/CachedDeserializable.java b/geode-core/src/main/java/com/gemstone/gemfire/internal/cache/CachedDeserializable.java index 04fa51551ad3..0db4d2ee966c 100644 --- a/geode-core/src/main/java/com/gemstone/gemfire/internal/cache/CachedDeserializable.java +++ b/geode-core/src/main/java/com/gemstone/gemfire/internal/cache/CachedDeserializable.java @@ -30,7 +30,6 @@ * Provides protocol for getting the deserialized value from a potentially * encapsulated object. * - * @author Eric Zoerner * */ public interface CachedDeserializable extends Sizeable diff --git a/geode-core/src/main/java/com/gemstone/gemfire/internal/cache/CachedDeserializableFactory.java b/geode-core/src/main/java/com/gemstone/gemfire/internal/cache/CachedDeserializableFactory.java index 9120e37264dc..ae7dd38688a2 100644 --- a/geode-core/src/main/java/com/gemstone/gemfire/internal/cache/CachedDeserializableFactory.java +++ b/geode-core/src/main/java/com/gemstone/gemfire/internal/cache/CachedDeserializableFactory.java @@ -30,7 +30,6 @@ /** * Produces instances that implement CachedDeserializable. - * @author Darrel * @since 5.0.2 * */ diff --git a/geode-core/src/main/java/com/gemstone/gemfire/internal/cache/ClientRegionEventImpl.java b/geode-core/src/main/java/com/gemstone/gemfire/internal/cache/ClientRegionEventImpl.java index a48287e110d2..9392ee919408 100755 --- a/geode-core/src/main/java/com/gemstone/gemfire/internal/cache/ClientRegionEventImpl.java +++ b/geode-core/src/main/java/com/gemstone/gemfire/internal/cache/ClientRegionEventImpl.java @@ -32,7 +32,6 @@ * region event with the client's * host and port for notification purposes. * - * @author Girish Thombare * * @since 5.1 */ diff --git a/geode-core/src/main/java/com/gemstone/gemfire/internal/cache/ClientServerObserver.java b/geode-core/src/main/java/com/gemstone/gemfire/internal/cache/ClientServerObserver.java index 3aaa70c40339..f53b2620d619 100755 --- a/geode-core/src/main/java/com/gemstone/gemfire/internal/cache/ClientServerObserver.java +++ b/geode-core/src/main/java/com/gemstone/gemfire/internal/cache/ClientServerObserver.java @@ -24,7 +24,6 @@ * client/server events. * See the documentation for class ClientServerObserverHolder for details. * - * @author Yogesh Mahajan * @since 5.1 * */ diff --git a/geode-core/src/main/java/com/gemstone/gemfire/internal/cache/ClientServerObserverAdapter.java b/geode-core/src/main/java/com/gemstone/gemfire/internal/cache/ClientServerObserverAdapter.java index 0ca7e4c7b084..95b5c4d586ac 100755 --- a/geode-core/src/main/java/com/gemstone/gemfire/internal/cache/ClientServerObserverAdapter.java +++ b/geode-core/src/main/java/com/gemstone/gemfire/internal/cache/ClientServerObserverAdapter.java @@ -24,7 +24,6 @@ * interface ClientServerObserver. See the documentation for class * ClientServerObserverHolder for details. * - * @author Yogesh Mahajan * @since 5.1 */ public class ClientServerObserverAdapter implements ClientServerObserver diff --git a/geode-core/src/main/java/com/gemstone/gemfire/internal/cache/ClientServerObserverHolder.java b/geode-core/src/main/java/com/gemstone/gemfire/internal/cache/ClientServerObserverHolder.java index c3f24f952e16..efdce2740ed2 100755 --- a/geode-core/src/main/java/com/gemstone/gemfire/internal/cache/ClientServerObserverHolder.java +++ b/geode-core/src/main/java/com/gemstone/gemfire/internal/cache/ClientServerObserverHolder.java @@ -24,7 +24,6 @@ * needed, this member variable should point to an object with 'do-nothing' * methods, such as ClientServerObserverAdapter. * - * @author Yogesh Mahajan * @since 5.1 */ public class ClientServerObserverHolder diff --git a/geode-core/src/main/java/com/gemstone/gemfire/internal/cache/ClientSubscriptionConfigImpl.java b/geode-core/src/main/java/com/gemstone/gemfire/internal/cache/ClientSubscriptionConfigImpl.java index 4d58f2b0c30f..a44677ac3b1f 100755 --- a/geode-core/src/main/java/com/gemstone/gemfire/internal/cache/ClientSubscriptionConfigImpl.java +++ b/geode-core/src/main/java/com/gemstone/gemfire/internal/cache/ClientSubscriptionConfigImpl.java @@ -24,7 +24,6 @@ /** * * Configuration parameters for client subscription - * @author aingle */ public class ClientSubscriptionConfigImpl implements ClientSubscriptionConfig { diff --git a/geode-core/src/main/java/com/gemstone/gemfire/internal/cache/CloseCacheMessage.java b/geode-core/src/main/java/com/gemstone/gemfire/internal/cache/CloseCacheMessage.java index edd4db203f32..5067d92ec516 100644 --- a/geode-core/src/main/java/com/gemstone/gemfire/internal/cache/CloseCacheMessage.java +++ b/geode-core/src/main/java/com/gemstone/gemfire/internal/cache/CloseCacheMessage.java @@ -33,7 +33,6 @@ /** * - * @author Eric Zoerner * */ diff --git a/geode-core/src/main/java/com/gemstone/gemfire/internal/cache/ColocationHelper.java b/geode-core/src/main/java/com/gemstone/gemfire/internal/cache/ColocationHelper.java index 8893f5e9f5b4..1441144008e8 100755 --- a/geode-core/src/main/java/com/gemstone/gemfire/internal/cache/ColocationHelper.java +++ b/geode-core/src/main/java/com/gemstone/gemfire/internal/cache/ColocationHelper.java @@ -50,8 +50,6 @@ * An utility class to retrieve colocated regions in a colocation hierarchy in * various scenarios * - * @author Yogesh Mahajan - * @author Kishor Bachhav * * @since 6.0 */ diff --git a/geode-core/src/main/java/com/gemstone/gemfire/internal/cache/CommitReplyException.java b/geode-core/src/main/java/com/gemstone/gemfire/internal/cache/CommitReplyException.java index fab776aac2b7..8cf9665271c8 100755 --- a/geode-core/src/main/java/com/gemstone/gemfire/internal/cache/CommitReplyException.java +++ b/geode-core/src/main/java/com/gemstone/gemfire/internal/cache/CommitReplyException.java @@ -22,7 +22,6 @@ /** * Contains exceptions generated when attempting to process a commit operation. * - * @author Kirk Lund * @since 5.0 */ public class CommitReplyException extends ReplyException { diff --git a/geode-core/src/main/java/com/gemstone/gemfire/internal/cache/CompactableOplog.java b/geode-core/src/main/java/com/gemstone/gemfire/internal/cache/CompactableOplog.java index 869667be082d..697214d824c1 100644 --- a/geode-core/src/main/java/com/gemstone/gemfire/internal/cache/CompactableOplog.java +++ b/geode-core/src/main/java/com/gemstone/gemfire/internal/cache/CompactableOplog.java @@ -23,7 +23,6 @@ * Contract that must be implemented by oplogs so that * they can be compacted. * - * @author Darrel Schneider * * @since 6.5 */ diff --git a/geode-core/src/main/java/com/gemstone/gemfire/internal/cache/Conflatable.java b/geode-core/src/main/java/com/gemstone/gemfire/internal/cache/Conflatable.java index da0bca591aa3..7178bc7f5e40 100755 --- a/geode-core/src/main/java/com/gemstone/gemfire/internal/cache/Conflatable.java +++ b/geode-core/src/main/java/com/gemstone/gemfire/internal/cache/Conflatable.java @@ -24,7 +24,6 @@ * notification mechanism to conflate messages being sent from the server to the * client. * - * @author Barry Oglesby * * @since 4.2 */ diff --git a/geode-core/src/main/java/com/gemstone/gemfire/internal/cache/ControllerAdvisor.java b/geode-core/src/main/java/com/gemstone/gemfire/internal/cache/ControllerAdvisor.java index 27c7a7b762e6..ab03d8c5316b 100644 --- a/geode-core/src/main/java/com/gemstone/gemfire/internal/cache/ControllerAdvisor.java +++ b/geode-core/src/main/java/com/gemstone/gemfire/internal/cache/ControllerAdvisor.java @@ -32,7 +32,6 @@ /** * Used to give advise to a connection controller. * Bridge server currently need to know about controller's - * @author darrel * */ public class ControllerAdvisor extends GridAdvisor { diff --git a/geode-core/src/main/java/com/gemstone/gemfire/internal/cache/CountingDataInputStream.java b/geode-core/src/main/java/com/gemstone/gemfire/internal/cache/CountingDataInputStream.java index 4f1be3afa84b..36fc75297c1e 100644 --- a/geode-core/src/main/java/com/gemstone/gemfire/internal/cache/CountingDataInputStream.java +++ b/geode-core/src/main/java/com/gemstone/gemfire/internal/cache/CountingDataInputStream.java @@ -21,7 +21,6 @@ /** * A data input stream that counts the bytes it plans on reading. * - * @author Darrel Schneider * * @since prPersistSprint2 */ diff --git a/geode-core/src/main/java/com/gemstone/gemfire/internal/cache/CreateRegionProcessor.java b/geode-core/src/main/java/com/gemstone/gemfire/internal/cache/CreateRegionProcessor.java index bfd287efbc77..d063a54efe15 100644 --- a/geode-core/src/main/java/com/gemstone/gemfire/internal/cache/CreateRegionProcessor.java +++ b/geode-core/src/main/java/com/gemstone/gemfire/internal/cache/CreateRegionProcessor.java @@ -64,7 +64,6 @@ * represents creation of * a {@link CacheDistributionAdvisee}. Name remains CreateRegion to avoid * merge conflicts. - * @author Eric Zoerner */ public class CreateRegionProcessor implements ProfileExchangeProcessor { private static final Logger logger = LogService.getLogger(); diff --git a/geode-core/src/main/java/com/gemstone/gemfire/internal/cache/CustomEntryExpiryTask.java b/geode-core/src/main/java/com/gemstone/gemfire/internal/cache/CustomEntryExpiryTask.java index b73c0b0cd385..d7382bdb9ca6 100644 --- a/geode-core/src/main/java/com/gemstone/gemfire/internal/cache/CustomEntryExpiryTask.java +++ b/geode-core/src/main/java/com/gemstone/gemfire/internal/cache/CustomEntryExpiryTask.java @@ -22,7 +22,6 @@ * Remembers the expiration attributes returned from * the customer's CustomExpiry callback, if any. * - * @author dschneider * @since 8.0 * */ diff --git a/geode-core/src/main/java/com/gemstone/gemfire/internal/cache/CustomEvictionAttributesImpl.java b/geode-core/src/main/java/com/gemstone/gemfire/internal/cache/CustomEvictionAttributesImpl.java index 88a0e722a0cc..0c82f970ed17 100644 --- a/geode-core/src/main/java/com/gemstone/gemfire/internal/cache/CustomEvictionAttributesImpl.java +++ b/geode-core/src/main/java/com/gemstone/gemfire/internal/cache/CustomEvictionAttributesImpl.java @@ -23,7 +23,6 @@ /** * Concrete instance of {@link CustomEvictionAttributes}. * - * @author swale * @since gfxd 1.0 */ public final class CustomEvictionAttributesImpl extends diff --git a/geode-core/src/main/java/com/gemstone/gemfire/internal/cache/DataLocationException.java b/geode-core/src/main/java/com/gemstone/gemfire/internal/cache/DataLocationException.java index 108a92c04f34..fc9876244101 100644 --- a/geode-core/src/main/java/com/gemstone/gemfire/internal/cache/DataLocationException.java +++ b/geode-core/src/main/java/com/gemstone/gemfire/internal/cache/DataLocationException.java @@ -23,7 +23,6 @@ * when our assumption about where the data lives is incorrect. * @see ForceReattemptException * @see PrimaryBucketException - * @author sbawaska */ public abstract class DataLocationException extends GemFireCheckedException { public DataLocationException() { diff --git a/geode-core/src/main/java/com/gemstone/gemfire/internal/cache/DestroyOperation.java b/geode-core/src/main/java/com/gemstone/gemfire/internal/cache/DestroyOperation.java index c60bad5b5d95..b0ac963e4a2b 100644 --- a/geode-core/src/main/java/com/gemstone/gemfire/internal/cache/DestroyOperation.java +++ b/geode-core/src/main/java/com/gemstone/gemfire/internal/cache/DestroyOperation.java @@ -38,7 +38,6 @@ /** * Handles distribution messaging for destroying an entry in a region. * - * @author Eric Zoerner * */ public class DestroyOperation extends DistributedCacheOperation diff --git a/geode-core/src/main/java/com/gemstone/gemfire/internal/cache/DestroyPartitionedRegionMessage.java b/geode-core/src/main/java/com/gemstone/gemfire/internal/cache/DestroyPartitionedRegionMessage.java index 45e04d50e366..97159928aa37 100755 --- a/geode-core/src/main/java/com/gemstone/gemfire/internal/cache/DestroyPartitionedRegionMessage.java +++ b/geode-core/src/main/java/com/gemstone/gemfire/internal/cache/DestroyPartitionedRegionMessage.java @@ -58,7 +58,6 @@ * A standard {@link ReplyMessage} is used to send the reply, however any exception that it carries * is ignored, preventing interuption after sending this message. * - * @author Mitch Thomas * @since 5.0 */ public final class DestroyPartitionedRegionMessage extends PartitionMessage @@ -226,7 +225,6 @@ public void toData(DataOutput out) throws IOException /** * The response on which to wait for all the replies. This response ignores any exceptions received from the "far side" * - * @author Mitch Thomas * @since 5.0 */ static public class DestroyPartitionedRegionResponse extends ReplyProcessor21 diff --git a/geode-core/src/main/java/com/gemstone/gemfire/internal/cache/DestroyRegionOperation.java b/geode-core/src/main/java/com/gemstone/gemfire/internal/cache/DestroyRegionOperation.java index b1536d5d3673..2cb83eac4b31 100644 --- a/geode-core/src/main/java/com/gemstone/gemfire/internal/cache/DestroyRegionOperation.java +++ b/geode-core/src/main/java/com/gemstone/gemfire/internal/cache/DestroyRegionOperation.java @@ -54,7 +54,6 @@ /** * - * @author Eric Zoerner */ public class DestroyRegionOperation extends DistributedCacheOperation { diff --git a/geode-core/src/main/java/com/gemstone/gemfire/internal/cache/DestroyedEntry.java b/geode-core/src/main/java/com/gemstone/gemfire/internal/cache/DestroyedEntry.java index f7113cfc87da..c5533a12827e 100644 --- a/geode-core/src/main/java/com/gemstone/gemfire/internal/cache/DestroyedEntry.java +++ b/geode-core/src/main/java/com/gemstone/gemfire/internal/cache/DestroyedEntry.java @@ -25,7 +25,6 @@ * instead of null. All methods throw {@link EntryDestroyedException} except for * {@link #isDestroyed()}. * - * @author bakera */ public class DestroyedEntry implements Region.Entry { private final String msg; diff --git a/geode-core/src/main/java/com/gemstone/gemfire/internal/cache/DirectReplyMessage.java b/geode-core/src/main/java/com/gemstone/gemfire/internal/cache/DirectReplyMessage.java index b464873f3312..a5e6d8503ecc 100644 --- a/geode-core/src/main/java/com/gemstone/gemfire/internal/cache/DirectReplyMessage.java +++ b/geode-core/src/main/java/com/gemstone/gemfire/internal/cache/DirectReplyMessage.java @@ -23,7 +23,6 @@ * A message that can reply directly to the sender * * - * @author dsmith * */ public interface DirectReplyMessage { diff --git a/geode-core/src/main/java/com/gemstone/gemfire/internal/cache/DirectoryHolder.java b/geode-core/src/main/java/com/gemstone/gemfire/internal/cache/DirectoryHolder.java index 8bc4722acc9b..dfdf984e7415 100755 --- a/geode-core/src/main/java/com/gemstone/gemfire/internal/cache/DirectoryHolder.java +++ b/geode-core/src/main/java/com/gemstone/gemfire/internal/cache/DirectoryHolder.java @@ -25,7 +25,6 @@ * A holder for a disk Directory. Used for maintaining the available space and * updating disk statistics * - * @author Mitul * @since 5.1 * */ diff --git a/geode-core/src/main/java/com/gemstone/gemfire/internal/cache/DiskDirectoryStats.java b/geode-core/src/main/java/com/gemstone/gemfire/internal/cache/DiskDirectoryStats.java index 93957e968f08..5aeec3873bd9 100644 --- a/geode-core/src/main/java/com/gemstone/gemfire/internal/cache/DiskDirectoryStats.java +++ b/geode-core/src/main/java/com/gemstone/gemfire/internal/cache/DiskDirectoryStats.java @@ -24,7 +24,6 @@ /** * GemFire statistics about Disk Directories * - * @author Darrel Schneider * * @since 3.2 */ diff --git a/geode-core/src/main/java/com/gemstone/gemfire/internal/cache/DiskId.java b/geode-core/src/main/java/com/gemstone/gemfire/internal/cache/DiskId.java index eddfc05b4757..dd916af7f7cd 100755 --- a/geode-core/src/main/java/com/gemstone/gemfire/internal/cache/DiskId.java +++ b/geode-core/src/main/java/com/gemstone/gemfire/internal/cache/DiskId.java @@ -30,9 +30,6 @@ *

  • Userbits of the value * * - * @author Mitul Bid - * @author Asif - * @author Suyog * @since 5.1 */ @@ -358,7 +355,6 @@ static boolean isInstanceofOverflowOnlyWithLongOffset(DiskId diskId) { * Inner class implementation of DiskId which stores offset in oplog as 'int' * field. * - * @author dpatel * */ protected static abstract class IntOplogOffsetDiskId extends DiskId @@ -393,7 +389,6 @@ void setOffsetInOplog(long offsetInOplog) { * Inner class implementation of DiskId which stores offset in oplog as 'long' * field. * - * @author dpatel * */ protected static abstract class LongOplogOffsetDiskId extends DiskId diff --git a/geode-core/src/main/java/com/gemstone/gemfire/internal/cache/DiskInitFile.java b/geode-core/src/main/java/com/gemstone/gemfire/internal/cache/DiskInitFile.java index f903743363d0..7e2333e779db 100644 --- a/geode-core/src/main/java/com/gemstone/gemfire/internal/cache/DiskInitFile.java +++ b/geode-core/src/main/java/com/gemstone/gemfire/internal/cache/DiskInitFile.java @@ -86,7 +86,6 @@ /** * Does all the IF file work for a DiskStoreImpl. * - * @author Darrel Schneider * * @since prPersistSprint1 */ @@ -2439,7 +2438,6 @@ boolean regionExists(long drId) { * Currently only few for GemFireXD added here but all other boolean flags also * be better moved here. * - * @author swale * @since 7.0 */ public enum DiskRegionFlag { diff --git a/geode-core/src/main/java/com/gemstone/gemfire/internal/cache/DiskRegion.java b/geode-core/src/main/java/com/gemstone/gemfire/internal/cache/DiskRegion.java index 6671c1eb6204..843a71620950 100644 --- a/geode-core/src/main/java/com/gemstone/gemfire/internal/cache/DiskRegion.java +++ b/geode-core/src/main/java/com/gemstone/gemfire/internal/cache/DiskRegion.java @@ -41,10 +41,6 @@ * Represents a (disk-based) persistent store for region data. * Used for both persistent recoverable regions and overflow-only regions. * - * @author David Whitlock - * @author Darrel Schneider - * @author Mitul Bid - * @author Asif * * @since 3.2 */ diff --git a/geode-core/src/main/java/com/gemstone/gemfire/internal/cache/DiskRegionStats.java b/geode-core/src/main/java/com/gemstone/gemfire/internal/cache/DiskRegionStats.java index fa840aa9f202..75cdf21a8c1e 100644 --- a/geode-core/src/main/java/com/gemstone/gemfire/internal/cache/DiskRegionStats.java +++ b/geode-core/src/main/java/com/gemstone/gemfire/internal/cache/DiskRegionStats.java @@ -26,7 +26,6 @@ /** * GemFire statistics about a {@link DiskRegion}. * - * @author David Whitlock * * @since 3.2 */ diff --git a/geode-core/src/main/java/com/gemstone/gemfire/internal/cache/DiskStoreAttributes.java b/geode-core/src/main/java/com/gemstone/gemfire/internal/cache/DiskStoreAttributes.java index 49f4ac23bdc6..a391a0c9b211 100644 --- a/geode-core/src/main/java/com/gemstone/gemfire/internal/cache/DiskStoreAttributes.java +++ b/geode-core/src/main/java/com/gemstone/gemfire/internal/cache/DiskStoreAttributes.java @@ -29,7 +29,6 @@ /** * Creates an attribute object for DiskStore. *

    - * @author Gester * @since prPersistSprint2 */ public class DiskStoreAttributes implements Serializable, DiskStore { diff --git a/geode-core/src/main/java/com/gemstone/gemfire/internal/cache/DiskStoreBackup.java b/geode-core/src/main/java/com/gemstone/gemfire/internal/cache/DiskStoreBackup.java index f59170079b1c..aacec8c68b6d 100644 --- a/geode-core/src/main/java/com/gemstone/gemfire/internal/cache/DiskStoreBackup.java +++ b/geode-core/src/main/java/com/gemstone/gemfire/internal/cache/DiskStoreBackup.java @@ -29,7 +29,6 @@ * lists of oplog files that should be deleted when the oplog is backed up. See * {@link DiskStoreImpl#startBackup(File, BackupInspector, com.gemstone.gemfire.internal.cache.persistence.RestoreScript)} * - * @author dsmith * */ public class DiskStoreBackup { diff --git a/geode-core/src/main/java/com/gemstone/gemfire/internal/cache/DiskStoreFactoryImpl.java b/geode-core/src/main/java/com/gemstone/gemfire/internal/cache/DiskStoreFactoryImpl.java index 50080a1191d5..3e3add816a57 100755 --- a/geode-core/src/main/java/com/gemstone/gemfire/internal/cache/DiskStoreFactoryImpl.java +++ b/geode-core/src/main/java/com/gemstone/gemfire/internal/cache/DiskStoreFactoryImpl.java @@ -37,7 +37,6 @@ /** * Implementation of DiskStoreFactory * - * @author Gester * @since prPersistSprint2 */ public class DiskStoreFactoryImpl implements DiskStoreFactory diff --git a/geode-core/src/main/java/com/gemstone/gemfire/internal/cache/DiskStoreImpl.java b/geode-core/src/main/java/com/gemstone/gemfire/internal/cache/DiskStoreImpl.java index e4ef21d19986..16cdbf5707c3 100644 --- a/geode-core/src/main/java/com/gemstone/gemfire/internal/cache/DiskStoreImpl.java +++ b/geode-core/src/main/java/com/gemstone/gemfire/internal/cache/DiskStoreImpl.java @@ -125,10 +125,6 @@ * Represents a (disk-based) persistent store for region data. Used for both * persistent recoverable regions and overflow-only regions. * - * @author David Whitlock - * @author Darrel Schneider - * @author Mitul Bid - * @author Asif * * @since 3.2 */ @@ -2877,8 +2873,6 @@ private Oplog[] getAllOplogsForBackup() { /** * Compacts oplogs * - * @author Mitul Bid - * @author Asif * @since 5.1 * */ diff --git a/geode-core/src/main/java/com/gemstone/gemfire/internal/cache/DiskStoreObserver.java b/geode-core/src/main/java/com/gemstone/gemfire/internal/cache/DiskStoreObserver.java index b34f7997add0..a756e9895f50 100644 --- a/geode-core/src/main/java/com/gemstone/gemfire/internal/cache/DiskStoreObserver.java +++ b/geode-core/src/main/java/com/gemstone/gemfire/internal/cache/DiskStoreObserver.java @@ -20,7 +20,6 @@ /** * For testing purposes only, observers events in the disk store. - * @author dsmith * */ public abstract class DiskStoreObserver { diff --git a/geode-core/src/main/java/com/gemstone/gemfire/internal/cache/DiskStoreStats.java b/geode-core/src/main/java/com/gemstone/gemfire/internal/cache/DiskStoreStats.java index 717186ab5a9b..2f7ec7252e7a 100644 --- a/geode-core/src/main/java/com/gemstone/gemfire/internal/cache/DiskStoreStats.java +++ b/geode-core/src/main/java/com/gemstone/gemfire/internal/cache/DiskStoreStats.java @@ -24,7 +24,6 @@ /** * GemFire statistics about a {@link DiskStoreImpl}. * - * @author Darrel Schneider * * @since prPersistSprint2 */ diff --git a/geode-core/src/main/java/com/gemstone/gemfire/internal/cache/DiskStoreTask.java b/geode-core/src/main/java/com/gemstone/gemfire/internal/cache/DiskStoreTask.java index b10635f69d53..f593731fb1c2 100644 --- a/geode-core/src/main/java/com/gemstone/gemfire/internal/cache/DiskStoreTask.java +++ b/geode-core/src/main/java/com/gemstone/gemfire/internal/cache/DiskStoreTask.java @@ -17,7 +17,6 @@ package com.gemstone.gemfire.internal.cache; /** - * @author dsmith * */ public interface DiskStoreTask extends Runnable { diff --git a/geode-core/src/main/java/com/gemstone/gemfire/internal/cache/DiskWriteAttributesImpl.java b/geode-core/src/main/java/com/gemstone/gemfire/internal/cache/DiskWriteAttributesImpl.java index 79b8c2481cbe..914c8781ed97 100755 --- a/geode-core/src/main/java/com/gemstone/gemfire/internal/cache/DiskWriteAttributesImpl.java +++ b/geode-core/src/main/java/com/gemstone/gemfire/internal/cache/DiskWriteAttributesImpl.java @@ -36,8 +36,6 @@ * @see RegionAttributes#getDiskWriteAttributes * @see Region#writeToDisk * - * @author David Whitlock - * @author Mitul Bid * * @since 5.1 */ diff --git a/geode-core/src/main/java/com/gemstone/gemfire/internal/cache/DistPeerTXStateStub.java b/geode-core/src/main/java/com/gemstone/gemfire/internal/cache/DistPeerTXStateStub.java index 88006bd438f8..cd17770b7027 100644 --- a/geode-core/src/main/java/com/gemstone/gemfire/internal/cache/DistPeerTXStateStub.java +++ b/geode-core/src/main/java/com/gemstone/gemfire/internal/cache/DistPeerTXStateStub.java @@ -41,7 +41,6 @@ *
    2.It also records those transactional operations in order to send those to * secondaries/replicas(in one batch) at commit time. * - * @author shirishd * */ public final class DistPeerTXStateStub extends PeerTXStateStub implements diff --git a/geode-core/src/main/java/com/gemstone/gemfire/internal/cache/DistTXCommitMessage.java b/geode-core/src/main/java/com/gemstone/gemfire/internal/cache/DistTXCommitMessage.java index 020c1f4c5406..97623f8dce60 100644 --- a/geode-core/src/main/java/com/gemstone/gemfire/internal/cache/DistTXCommitMessage.java +++ b/geode-core/src/main/java/com/gemstone/gemfire/internal/cache/DistTXCommitMessage.java @@ -51,7 +51,6 @@ import com.gemstone.gemfire.internal.logging.log4j.LogMarker; /** - * @author vivekb * */ public class DistTXCommitMessage extends TXMessage { diff --git a/geode-core/src/main/java/com/gemstone/gemfire/internal/cache/DistTXCoordinatorInterface.java b/geode-core/src/main/java/com/gemstone/gemfire/internal/cache/DistTXCoordinatorInterface.java index 94d66fc2f612..363b54039d53 100644 --- a/geode-core/src/main/java/com/gemstone/gemfire/internal/cache/DistTXCoordinatorInterface.java +++ b/geode-core/src/main/java/com/gemstone/gemfire/internal/cache/DistTXCoordinatorInterface.java @@ -30,7 +30,6 @@ * * An entity that works as stub for DistTX on Coordinator. * - * @author vivekb */ public interface DistTXCoordinatorInterface extends TXStateInterface { /** diff --git a/geode-core/src/main/java/com/gemstone/gemfire/internal/cache/DistTXPrecommitMessage.java b/geode-core/src/main/java/com/gemstone/gemfire/internal/cache/DistTXPrecommitMessage.java index a58eb9a7e69e..64429d1e4ba6 100644 --- a/geode-core/src/main/java/com/gemstone/gemfire/internal/cache/DistTXPrecommitMessage.java +++ b/geode-core/src/main/java/com/gemstone/gemfire/internal/cache/DistTXPrecommitMessage.java @@ -56,7 +56,6 @@ import com.gemstone.gemfire.internal.logging.log4j.LogMarker; /** - * @author vivekb * */ public final class DistTXPrecommitMessage extends TXMessage { diff --git a/geode-core/src/main/java/com/gemstone/gemfire/internal/cache/DistTXRollbackMessage.java b/geode-core/src/main/java/com/gemstone/gemfire/internal/cache/DistTXRollbackMessage.java index a69a276cd607..f5f6c31eeb11 100644 --- a/geode-core/src/main/java/com/gemstone/gemfire/internal/cache/DistTXRollbackMessage.java +++ b/geode-core/src/main/java/com/gemstone/gemfire/internal/cache/DistTXRollbackMessage.java @@ -52,7 +52,6 @@ import com.gemstone.gemfire.internal.logging.log4j.LogMarker; /** - * @author vivekb * */ public final class DistTXRollbackMessage extends TXMessage { diff --git a/geode-core/src/main/java/com/gemstone/gemfire/internal/cache/DistTXState.java b/geode-core/src/main/java/com/gemstone/gemfire/internal/cache/DistTXState.java index c81db38acc68..19cc1759db28 100644 --- a/geode-core/src/main/java/com/gemstone/gemfire/internal/cache/DistTXState.java +++ b/geode-core/src/main/java/com/gemstone/gemfire/internal/cache/DistTXState.java @@ -48,7 +48,6 @@ /** * TxState on a datanode VM * - * @author vivekb * */ public class DistTXState extends TXState { diff --git a/geode-core/src/main/java/com/gemstone/gemfire/internal/cache/DistTXStateOnCoordinator.java b/geode-core/src/main/java/com/gemstone/gemfire/internal/cache/DistTXStateOnCoordinator.java index e7ab802d64e6..10d892a87d71 100644 --- a/geode-core/src/main/java/com/gemstone/gemfire/internal/cache/DistTXStateOnCoordinator.java +++ b/geode-core/src/main/java/com/gemstone/gemfire/internal/cache/DistTXStateOnCoordinator.java @@ -31,7 +31,6 @@ /** * TxState on TX coordinator, created when coordinator is also a data node * - * @author shirishd * */ public final class DistTXStateOnCoordinator extends DistTXState implements diff --git a/geode-core/src/main/java/com/gemstone/gemfire/internal/cache/DistTXStateProxyImpl.java b/geode-core/src/main/java/com/gemstone/gemfire/internal/cache/DistTXStateProxyImpl.java index 96e882a155d1..dfa2dda6f31a 100644 --- a/geode-core/src/main/java/com/gemstone/gemfire/internal/cache/DistTXStateProxyImpl.java +++ b/geode-core/src/main/java/com/gemstone/gemfire/internal/cache/DistTXStateProxyImpl.java @@ -23,7 +23,6 @@ /** * - * @author shirishd * */ public abstract class DistTXStateProxyImpl extends TXStateProxyImpl { diff --git a/geode-core/src/main/java/com/gemstone/gemfire/internal/cache/DistributedCacheOperation.java b/geode-core/src/main/java/com/gemstone/gemfire/internal/cache/DistributedCacheOperation.java index 8408a4b647c2..79ae4eed0f1e 100644 --- a/geode-core/src/main/java/com/gemstone/gemfire/internal/cache/DistributedCacheOperation.java +++ b/geode-core/src/main/java/com/gemstone/gemfire/internal/cache/DistributedCacheOperation.java @@ -79,8 +79,6 @@ /** * - * @author Eric Zoerner - * @author Bruce Schuchardt */ public abstract class DistributedCacheOperation { diff --git a/geode-core/src/main/java/com/gemstone/gemfire/internal/cache/DistributedClearOperation.java b/geode-core/src/main/java/com/gemstone/gemfire/internal/cache/DistributedClearOperation.java index 29d9b26ce486..5526ef016398 100644 --- a/geode-core/src/main/java/com/gemstone/gemfire/internal/cache/DistributedClearOperation.java +++ b/geode-core/src/main/java/com/gemstone/gemfire/internal/cache/DistributedClearOperation.java @@ -35,7 +35,6 @@ /** * - * @author Asif * */ public class DistributedClearOperation extends DistributedCacheOperation diff --git a/geode-core/src/main/java/com/gemstone/gemfire/internal/cache/DistributedPutAllOperation.java b/geode-core/src/main/java/com/gemstone/gemfire/internal/cache/DistributedPutAllOperation.java index 84da44103630..2e83cb8c3c42 100644 --- a/geode-core/src/main/java/com/gemstone/gemfire/internal/cache/DistributedPutAllOperation.java +++ b/geode-core/src/main/java/com/gemstone/gemfire/internal/cache/DistributedPutAllOperation.java @@ -65,7 +65,6 @@ /** * Handles distribution of a Region.putall operation. * - * @author Darrel Schneider * @since 5.0 */ public class DistributedPutAllOperation extends AbstractUpdateOperation diff --git a/geode-core/src/main/java/com/gemstone/gemfire/internal/cache/DistributedRemoveAllOperation.java b/geode-core/src/main/java/com/gemstone/gemfire/internal/cache/DistributedRemoveAllOperation.java index 6292a7bcc8a4..70d39dc0f4e4 100644 --- a/geode-core/src/main/java/com/gemstone/gemfire/internal/cache/DistributedRemoveAllOperation.java +++ b/geode-core/src/main/java/com/gemstone/gemfire/internal/cache/DistributedRemoveAllOperation.java @@ -59,7 +59,6 @@ /** * Handles distribution of a Region.removeAll operation. * - * @author Darrel Schneider * @since 8.1 */ public class DistributedRemoveAllOperation extends AbstractUpdateOperation // TODO extend DistributedCacheOperation instead diff --git a/geode-core/src/main/java/com/gemstone/gemfire/internal/cache/DistributedTombstoneOperation.java b/geode-core/src/main/java/com/gemstone/gemfire/internal/cache/DistributedTombstoneOperation.java index c251b3ad917b..1627fb8f97f0 100644 --- a/geode-core/src/main/java/com/gemstone/gemfire/internal/cache/DistributedTombstoneOperation.java +++ b/geode-core/src/main/java/com/gemstone/gemfire/internal/cache/DistributedTombstoneOperation.java @@ -39,7 +39,6 @@ import java.util.Set; /** - * @author Bruce Schuchardt * */ public class DistributedTombstoneOperation extends DistributedCacheOperation { diff --git a/geode-core/src/main/java/com/gemstone/gemfire/internal/cache/DummyCachePerfStats.java b/geode-core/src/main/java/com/gemstone/gemfire/internal/cache/DummyCachePerfStats.java index ad65033094b5..70ec15893748 100755 --- a/geode-core/src/main/java/com/gemstone/gemfire/internal/cache/DummyCachePerfStats.java +++ b/geode-core/src/main/java/com/gemstone/gemfire/internal/cache/DummyCachePerfStats.java @@ -20,7 +20,6 @@ import com.gemstone.gemfire.distributed.internal.PoolStatHelper; /** - * @author ashetkar * @since 5.7 */ public class DummyCachePerfStats extends CachePerfStats { diff --git a/geode-core/src/main/java/com/gemstone/gemfire/internal/cache/DynamicRegionFactoryImpl.java b/geode-core/src/main/java/com/gemstone/gemfire/internal/cache/DynamicRegionFactoryImpl.java index ece1ed7086b9..2064d246352e 100644 --- a/geode-core/src/main/java/com/gemstone/gemfire/internal/cache/DynamicRegionFactoryImpl.java +++ b/geode-core/src/main/java/com/gemstone/gemfire/internal/cache/DynamicRegionFactoryImpl.java @@ -22,7 +22,6 @@ /** This class provides non-published methods that allow the cache to initialize and close the factory. - @author Bruce Schuchardt @since 4.3 */ public class DynamicRegionFactoryImpl extends DynamicRegionFactory { diff --git a/geode-core/src/main/java/com/gemstone/gemfire/internal/cache/EntriesMap.java b/geode-core/src/main/java/com/gemstone/gemfire/internal/cache/EntriesMap.java index b766f36e790d..74697eadb53e 100644 --- a/geode-core/src/main/java/com/gemstone/gemfire/internal/cache/EntriesMap.java +++ b/geode-core/src/main/java/com/gemstone/gemfire/internal/cache/EntriesMap.java @@ -30,7 +30,6 @@ * Interface for accessing extended features of a ConcurrentMap used for * the entries of a Region. * - * @author Eric Zoerner * */ public interface EntriesMap extends ConcurrentMap { diff --git a/geode-core/src/main/java/com/gemstone/gemfire/internal/cache/EntryBits.java b/geode-core/src/main/java/com/gemstone/gemfire/internal/cache/EntryBits.java index 9c4e1cb1429d..f95af608efee 100644 --- a/geode-core/src/main/java/com/gemstone/gemfire/internal/cache/EntryBits.java +++ b/geode-core/src/main/java/com/gemstone/gemfire/internal/cache/EntryBits.java @@ -20,7 +20,6 @@ /** * Interprets a one-byte bit field used for entry properties. * - * @author Eric Zoerner */ public abstract class EntryBits { private static final byte SERIALIZED = 0x1; // persistent bit diff --git a/geode-core/src/main/java/com/gemstone/gemfire/internal/cache/EntryOperationImpl.java b/geode-core/src/main/java/com/gemstone/gemfire/internal/cache/EntryOperationImpl.java index e1b31dfa7517..d53936647601 100755 --- a/geode-core/src/main/java/com/gemstone/gemfire/internal/cache/EntryOperationImpl.java +++ b/geode-core/src/main/java/com/gemstone/gemfire/internal/cache/EntryOperationImpl.java @@ -25,7 +25,6 @@ * Gemfire Context passed to PartitionResolver to compute the * data location * - * @author Yogesh Mahajan * @since 5.8 * */ diff --git a/geode-core/src/main/java/com/gemstone/gemfire/internal/cache/EntrySnapshot.java b/geode-core/src/main/java/com/gemstone/gemfire/internal/cache/EntrySnapshot.java index 7b4fb3f38ed4..02d333e470e9 100755 --- a/geode-core/src/main/java/com/gemstone/gemfire/internal/cache/EntrySnapshot.java +++ b/geode-core/src/main/java/com/gemstone/gemfire/internal/cache/EntrySnapshot.java @@ -35,7 +35,6 @@ * A Region.Entry implementation for remote entries and all PR entries * * @since 5.1 - * @author bruce */ public class EntrySnapshot implements Region.Entry, DataSerializable { private static final long serialVersionUID = -2139749921655693280L; diff --git a/geode-core/src/main/java/com/gemstone/gemfire/internal/cache/EventID.java b/geode-core/src/main/java/com/gemstone/gemfire/internal/cache/EventID.java index 3be0b5aa4603..d8a5b7262488 100755 --- a/geode-core/src/main/java/com/gemstone/gemfire/internal/cache/EventID.java +++ b/geode-core/src/main/java/com/gemstone/gemfire/internal/cache/EventID.java @@ -53,7 +53,6 @@ * DistributedMembershipID 2) ThreadID 3) SequenceID This helps in sequencing * the events belonging to a unique producer. * - * @author Asif * */ public final class EventID diff --git a/geode-core/src/main/java/com/gemstone/gemfire/internal/cache/EventStateHelper.java b/geode-core/src/main/java/com/gemstone/gemfire/internal/cache/EventStateHelper.java index fead386ab28c..b59b0a49b552 100644 --- a/geode-core/src/main/java/com/gemstone/gemfire/internal/cache/EventStateHelper.java +++ b/geode-core/src/main/java/com/gemstone/gemfire/internal/cache/EventStateHelper.java @@ -40,7 +40,6 @@ * * TODO - Store the event state map in DataSerializable object * that keeps the map in this compressed format in memory. - * @author dsmith * */ public class EventStateHelper { diff --git a/geode-core/src/main/java/com/gemstone/gemfire/internal/cache/EventTracker.java b/geode-core/src/main/java/com/gemstone/gemfire/internal/cache/EventTracker.java index 3d6ce73459fe..2f0087258ce9 100644 --- a/geode-core/src/main/java/com/gemstone/gemfire/internal/cache/EventTracker.java +++ b/geode-core/src/main/java/com/gemstone/gemfire/internal/cache/EventTracker.java @@ -51,7 +51,6 @@ * memberID:threadID. It is used to avoid replaying events in * client/server and partitioned-region configurations. * - * @author bruce * @since 6.0 */ public class EventTracker @@ -598,7 +597,6 @@ public String toString() { /** * A sequence number tracker to keep events from clients from being * re-applied to the cache if they've already been seen. - * @author bruce * @since 5.5 */ static class EventSeqnoHolder implements DataSerializable { @@ -656,7 +654,6 @@ public void toData(DataOutput out) throws IOException { * membershipID and threadID in the cache * processed is true means the bulk op is processed by one thread * no need to redo it by other threads. - * @author Gester * @since 5.7 */ static class BulkOpProcessed { @@ -696,7 +693,6 @@ public String toString() { /** * A holder for the version tags generated for a bulk operation (putAll or removeAll). These * version tags are retrieved when a bulk op is retried. - * @author Dan * @since 7.0 * protected for test purposes only. */ diff --git a/geode-core/src/main/java/com/gemstone/gemfire/internal/cache/EvictionAttributesImpl.java b/geode-core/src/main/java/com/gemstone/gemfire/internal/cache/EvictionAttributesImpl.java index b025bcf62f96..1cb51151c86b 100644 --- a/geode-core/src/main/java/com/gemstone/gemfire/internal/cache/EvictionAttributesImpl.java +++ b/geode-core/src/main/java/com/gemstone/gemfire/internal/cache/EvictionAttributesImpl.java @@ -48,7 +48,6 @@ * @see com.gemstone.gemfire.cache.RegionAttributes * @see com.gemstone.gemfire.cache.AttributesMutator * - * @author Mitch Thomas * @since 5.0 */ public final class EvictionAttributesImpl extends EvictionAttributes diff --git a/geode-core/src/main/java/com/gemstone/gemfire/internal/cache/EvictorService.java b/geode-core/src/main/java/com/gemstone/gemfire/internal/cache/EvictorService.java index 6dc62c749991..9054d6d590e1 100644 --- a/geode-core/src/main/java/com/gemstone/gemfire/internal/cache/EvictorService.java +++ b/geode-core/src/main/java/com/gemstone/gemfire/internal/cache/EvictorService.java @@ -36,7 +36,6 @@ * time than the specified period then another iteration is scheduled * immediately. * - * @author skumar * */ diff --git a/geode-core/src/main/java/com/gemstone/gemfire/internal/cache/FilterProfile.java b/geode-core/src/main/java/com/gemstone/gemfire/internal/cache/FilterProfile.java index a8f21b9e457d..90c4dc07d71e 100755 --- a/geode-core/src/main/java/com/gemstone/gemfire/internal/cache/FilterProfile.java +++ b/geode-core/src/main/java/com/gemstone/gemfire/internal/cache/FilterProfile.java @@ -85,7 +85,6 @@ * over the network. * * @since 6.5 - * @author bruce */ public class FilterProfile implements DataSerializableFixedID { private static final Logger logger = LogService.getLogger(); @@ -1795,7 +1794,6 @@ public void processQueuedFilterProfileMsgs(List msgs){ * OperationMessage synchronously propagates a change in the profile to * another member. It is a serial message so that there is no chance * of out-of-order execution. - * @author bruce */ public static class OperationMessage extends HighPriorityDistributionMessage implements MessageWithReply { diff --git a/geode-core/src/main/java/com/gemstone/gemfire/internal/cache/FilterRoutingInfo.java b/geode-core/src/main/java/com/gemstone/gemfire/internal/cache/FilterRoutingInfo.java index 4906b46f0d2e..6576a185e5a1 100644 --- a/geode-core/src/main/java/com/gemstone/gemfire/internal/cache/FilterRoutingInfo.java +++ b/geode-core/src/main/java/com/gemstone/gemfire/internal/cache/FilterRoutingInfo.java @@ -45,7 +45,6 @@ * their Filters (CQs and Interest List) that are satisfied by the * cache update operation. * @since 6.5 - * @author agingade */ public class FilterRoutingInfo implements VersionedDataSerializable { diff --git a/geode-core/src/main/java/com/gemstone/gemfire/internal/cache/FindDurableQueueProcessor.java b/geode-core/src/main/java/com/gemstone/gemfire/internal/cache/FindDurableQueueProcessor.java index a98c831a4d87..a776487c2c3f 100755 --- a/geode-core/src/main/java/com/gemstone/gemfire/internal/cache/FindDurableQueueProcessor.java +++ b/geode-core/src/main/java/com/gemstone/gemfire/internal/cache/FindDurableQueueProcessor.java @@ -48,7 +48,6 @@ * Asks each bridge server if they have the durable id and builds a list of matching servers. * * @since 5.7 - * @author Greg Passmore */ public class FindDurableQueueProcessor extends ReplyProcessor21 { private static final Logger logger = LogService.getLogger(); diff --git a/geode-core/src/main/java/com/gemstone/gemfire/internal/cache/FindRemoteTXMessage.java b/geode-core/src/main/java/com/gemstone/gemfire/internal/cache/FindRemoteTXMessage.java index bf96551f91bc..5310495546c7 100644 --- a/geode-core/src/main/java/com/gemstone/gemfire/internal/cache/FindRemoteTXMessage.java +++ b/geode-core/src/main/java/com/gemstone/gemfire/internal/cache/FindRemoteTXMessage.java @@ -46,7 +46,6 @@ /** * Message to all the peers to ask which member hosts the transaction * for the given transaction id - * @author sbawaska */ public class FindRemoteTXMessage extends HighPriorityDistributionMessage implements MessageWithReply { @@ -241,7 +240,6 @@ public boolean sendViaUDP() { * to indicate if the recipient hosts or has recently hosted the tx state. * If the member did host the txState previously, reply contains * the complete TXCommitMessage representing the tx. - * @author sbawaska */ public static class FindRemoteTXMessageReply extends ReplyMessage { protected boolean isHostingTx; diff --git a/geode-core/src/main/java/com/gemstone/gemfire/internal/cache/FindVersionTagOperation.java b/geode-core/src/main/java/com/gemstone/gemfire/internal/cache/FindVersionTagOperation.java index 3d1b288a0d95..221d7dcfd490 100644 --- a/geode-core/src/main/java/com/gemstone/gemfire/internal/cache/FindVersionTagOperation.java +++ b/geode-core/src/main/java/com/gemstone/gemfire/internal/cache/FindVersionTagOperation.java @@ -41,7 +41,6 @@ import com.gemstone.gemfire.internal.logging.LogService; /** - * @author bruce * */ public class FindVersionTagOperation { @@ -104,7 +103,6 @@ public boolean stillWaiting() { * operation. If we don't have version information the op may be applied by * this cache as a new event. When the event is then propagated to other servers * that have already seen the event it will be ignored, causing an inconsistency. - * @author bruce */ public static class FindVersionTagMessage extends HighPriorityDistributionMessage implements MessageWithReply { diff --git a/geode-core/src/main/java/com/gemstone/gemfire/internal/cache/FixedPartitionAttributesImpl.java b/geode-core/src/main/java/com/gemstone/gemfire/internal/cache/FixedPartitionAttributesImpl.java index fbe6ba23a691..157586d9a20e 100644 --- a/geode-core/src/main/java/com/gemstone/gemfire/internal/cache/FixedPartitionAttributesImpl.java +++ b/geode-core/src/main/java/com/gemstone/gemfire/internal/cache/FixedPartitionAttributesImpl.java @@ -28,7 +28,6 @@ /** * Internal implementation of {@link FixedPartitionAttributes}. * - * @author kbachhav * @since 6.6 */ diff --git a/geode-core/src/main/java/com/gemstone/gemfire/internal/cache/ForceReattemptException.java b/geode-core/src/main/java/com/gemstone/gemfire/internal/cache/ForceReattemptException.java index a66393bc7370..be58e2ed5be9 100644 --- a/geode-core/src/main/java/com/gemstone/gemfire/internal/cache/ForceReattemptException.java +++ b/geode-core/src/main/java/com/gemstone/gemfire/internal/cache/ForceReattemptException.java @@ -27,7 +27,6 @@ * instigate a retry of some sort. * * @see com.gemstone.gemfire.internal.cache.partitioned.PartitionMessage - * @author mthomas * @since 5.0 */ public class ForceReattemptException extends diff --git a/geode-core/src/main/java/com/gemstone/gemfire/internal/cache/ForceableLinkedBlockingQueue.java b/geode-core/src/main/java/com/gemstone/gemfire/internal/cache/ForceableLinkedBlockingQueue.java index 57eb16bf8db9..90d4747beef2 100644 --- a/geode-core/src/main/java/com/gemstone/gemfire/internal/cache/ForceableLinkedBlockingQueue.java +++ b/geode-core/src/main/java/com/gemstone/gemfire/internal/cache/ForceableLinkedBlockingQueue.java @@ -69,7 +69,6 @@ * Java Collections Framework. * * @since 1.5 - * @author Doug Lea * @param the type of elements held in this collection * */ diff --git a/geode-core/src/main/java/com/gemstone/gemfire/internal/cache/FunctionStreamingOrderedReplyMessage.java b/geode-core/src/main/java/com/gemstone/gemfire/internal/cache/FunctionStreamingOrderedReplyMessage.java index dc6b17c55927..3c196bca12bd 100755 --- a/geode-core/src/main/java/com/gemstone/gemfire/internal/cache/FunctionStreamingOrderedReplyMessage.java +++ b/geode-core/src/main/java/com/gemstone/gemfire/internal/cache/FunctionStreamingOrderedReplyMessage.java @@ -27,7 +27,6 @@ /** * - * @author ymahajan * */ public class FunctionStreamingOrderedReplyMessage extends diff --git a/geode-core/src/main/java/com/gemstone/gemfire/internal/cache/GatewayEventFilter.java b/geode-core/src/main/java/com/gemstone/gemfire/internal/cache/GatewayEventFilter.java index b9ec0334bf4e..e791b12d905e 100644 --- a/geode-core/src/main/java/com/gemstone/gemfire/internal/cache/GatewayEventFilter.java +++ b/geode-core/src/main/java/com/gemstone/gemfire/internal/cache/GatewayEventFilter.java @@ -17,7 +17,6 @@ package com.gemstone.gemfire.internal.cache; /** * - * @author Asif * */ public interface GatewayEventFilter diff --git a/geode-core/src/main/java/com/gemstone/gemfire/internal/cache/GemFireCacheImpl.java b/geode-core/src/main/java/com/gemstone/gemfire/internal/cache/GemFireCacheImpl.java index 201acc015bf1..62d7c53256ba 100755 --- a/geode-core/src/main/java/com/gemstone/gemfire/internal/cache/GemFireCacheImpl.java +++ b/geode-core/src/main/java/com/gemstone/gemfire/internal/cache/GemFireCacheImpl.java @@ -245,7 +245,6 @@ /** * GemFire's implementation of a distributed {@link com.gemstone.gemfire.cache.Cache}. * - * @author Darrel Schneider */ @SuppressWarnings("deprecation") public class GemFireCacheImpl implements InternalCache, ClientCache, HasCachePerfStats, DistributionAdvisee { diff --git a/geode-core/src/main/java/com/gemstone/gemfire/internal/cache/GridAdvisor.java b/geode-core/src/main/java/com/gemstone/gemfire/internal/cache/GridAdvisor.java index e66b96e25540..7c7ac12c16f0 100644 --- a/geode-core/src/main/java/com/gemstone/gemfire/internal/cache/GridAdvisor.java +++ b/geode-core/src/main/java/com/gemstone/gemfire/internal/cache/GridAdvisor.java @@ -30,7 +30,6 @@ /** * Used to share code with BridgeServerAdvisor and ControllerAdvisor - * @author darrel * */ public abstract class GridAdvisor extends DistributionAdvisor { diff --git a/geode-core/src/main/java/com/gemstone/gemfire/internal/cache/HARegion.java b/geode-core/src/main/java/com/gemstone/gemfire/internal/cache/HARegion.java index ffdd86464c5a..fa29bf3802c8 100755 --- a/geode-core/src/main/java/com/gemstone/gemfire/internal/cache/HARegion.java +++ b/geode-core/src/main/java/com/gemstone/gemfire/internal/cache/HARegion.java @@ -52,7 +52,6 @@ * This region is being implemented to suppress distribution of puts and to * allow localDestroys on mirrored regions. * - * @author Mitul Bid * @since 4.3 * */ diff --git a/geode-core/src/main/java/com/gemstone/gemfire/internal/cache/HDFSLRURegionMap.java b/geode-core/src/main/java/com/gemstone/gemfire/internal/cache/HDFSLRURegionMap.java index 035441c9cc0a..f6c6aa71a153 100644 --- a/geode-core/src/main/java/com/gemstone/gemfire/internal/cache/HDFSLRURegionMap.java +++ b/geode-core/src/main/java/com/gemstone/gemfire/internal/cache/HDFSLRURegionMap.java @@ -32,7 +32,6 @@ /** * Implementation of RegionMap that reads data from HDFS and adds LRU behavior * - * @author sbawaska */ public class HDFSLRURegionMap extends AbstractLRURegionMap implements HDFSRegionMap { diff --git a/geode-core/src/main/java/com/gemstone/gemfire/internal/cache/HDFSRegionMap.java b/geode-core/src/main/java/com/gemstone/gemfire/internal/cache/HDFSRegionMap.java index 5c398e2262bd..2a7baef049da 100644 --- a/geode-core/src/main/java/com/gemstone/gemfire/internal/cache/HDFSRegionMap.java +++ b/geode-core/src/main/java/com/gemstone/gemfire/internal/cache/HDFSRegionMap.java @@ -20,7 +20,6 @@ * Interface implemented by RegionMap implementations that * read from HDFS. * - * @author sbawaska * */ public interface HDFSRegionMap { diff --git a/geode-core/src/main/java/com/gemstone/gemfire/internal/cache/HDFSRegionMapDelegate.java b/geode-core/src/main/java/com/gemstone/gemfire/internal/cache/HDFSRegionMapDelegate.java index 358be31b9c0c..a2ef653fa152 100644 --- a/geode-core/src/main/java/com/gemstone/gemfire/internal/cache/HDFSRegionMapDelegate.java +++ b/geode-core/src/main/java/com/gemstone/gemfire/internal/cache/HDFSRegionMapDelegate.java @@ -59,7 +59,6 @@ * This class encapsulates all the functionality of HDFSRegionMap, so * that it can be provided to HDFSLRURegionMap. * - * @author sbawaska */ public class HDFSRegionMapDelegate { diff --git a/geode-core/src/main/java/com/gemstone/gemfire/internal/cache/HDFSRegionMapImpl.java b/geode-core/src/main/java/com/gemstone/gemfire/internal/cache/HDFSRegionMapImpl.java index 600a7a8aaeec..9336ed7b82fd 100644 --- a/geode-core/src/main/java/com/gemstone/gemfire/internal/cache/HDFSRegionMapImpl.java +++ b/geode-core/src/main/java/com/gemstone/gemfire/internal/cache/HDFSRegionMapImpl.java @@ -25,7 +25,6 @@ /** * Implementation of RegionMap that reads data from HDFS. * - * @author sbawaska */ public class HDFSRegionMapImpl extends AbstractRegionMap implements HDFSRegionMap { diff --git a/geode-core/src/main/java/com/gemstone/gemfire/internal/cache/ImageState.java b/geode-core/src/main/java/com/gemstone/gemfire/internal/cache/ImageState.java index fee64b341ec2..da3873ce296e 100644 --- a/geode-core/src/main/java/com/gemstone/gemfire/internal/cache/ImageState.java +++ b/geode-core/src/main/java/com/gemstone/gemfire/internal/cache/ImageState.java @@ -29,7 +29,6 @@ * State object used during getInitialImage Locked during clean up of destroyed * tokens. * - * @author Eric Zoerner */ public interface ImageState /* extends Lock */ { diff --git a/geode-core/src/main/java/com/gemstone/gemfire/internal/cache/InMemoryPersistentMemberView.java b/geode-core/src/main/java/com/gemstone/gemfire/internal/cache/InMemoryPersistentMemberView.java index f807952137cc..aa55634a081c 100644 --- a/geode-core/src/main/java/com/gemstone/gemfire/internal/cache/InMemoryPersistentMemberView.java +++ b/geode-core/src/main/java/com/gemstone/gemfire/internal/cache/InMemoryPersistentMemberView.java @@ -29,7 +29,6 @@ import com.gemstone.gemfire.internal.cache.persistence.PersistentMemberView; /** - * @author dsmith * */ public class InMemoryPersistentMemberView implements PersistentMemberView { diff --git a/geode-core/src/main/java/com/gemstone/gemfire/internal/cache/IncomingGatewayStatus.java b/geode-core/src/main/java/com/gemstone/gemfire/internal/cache/IncomingGatewayStatus.java index 9331706e26ef..11c8a35eeac4 100755 --- a/geode-core/src/main/java/com/gemstone/gemfire/internal/cache/IncomingGatewayStatus.java +++ b/geode-core/src/main/java/com/gemstone/gemfire/internal/cache/IncomingGatewayStatus.java @@ -25,7 +25,6 @@ * Gateway client from the server's perspective. This class is * used by the monitoring tool. * - * @author Barry Oglesby * * @since 4.3 */ diff --git a/geode-core/src/main/java/com/gemstone/gemfire/internal/cache/InitialImageFlowControl.java b/geode-core/src/main/java/com/gemstone/gemfire/internal/cache/InitialImageFlowControl.java index 7777a333bc1e..613d040f860d 100644 --- a/geode-core/src/main/java/com/gemstone/gemfire/internal/cache/InitialImageFlowControl.java +++ b/geode-core/src/main/java/com/gemstone/gemfire/internal/cache/InitialImageFlowControl.java @@ -49,7 +49,6 @@ * The initial image target sends FlowControlPermitMessage to the image provider after * each processed chunk. Upon receiving the FlowControlPermit message, the provider * will increase the number of permits available. - * @author dsmith * */ public class InitialImageFlowControl implements MembershipListener { diff --git a/geode-core/src/main/java/com/gemstone/gemfire/internal/cache/InitialImageOperation.java b/geode-core/src/main/java/com/gemstone/gemfire/internal/cache/InitialImageOperation.java index 34e385587c5e..9bd3faf37e03 100644 --- a/geode-core/src/main/java/com/gemstone/gemfire/internal/cache/InitialImageOperation.java +++ b/geode-core/src/main/java/com/gemstone/gemfire/internal/cache/InitialImageOperation.java @@ -104,7 +104,6 @@ /** * Handles requests for an initial image from a cache peer * - * @author Eric Zoerner */ public class InitialImageOperation { private static final Logger logger = LogService.getLogger(); @@ -2409,7 +2408,6 @@ protected boolean logMultipleExceptions() { /** * RVVReplyMessage transmits the GII provider's RVV to requester * - * @author Gester */ public static class RVVReplyMessage extends ReplyMessage { @@ -3392,7 +3390,6 @@ public Version[] getSerializationVersions() { * information so that a cache receiving an initial image will know what * events that image represents. * - * @author bruce */ public static class RegionStateMessage extends ReplyMessage { diff --git a/geode-core/src/main/java/com/gemstone/gemfire/internal/cache/InlineKeyHelper.java b/geode-core/src/main/java/com/gemstone/gemfire/internal/cache/InlineKeyHelper.java index 91ca322c7993..f146f89377e7 100644 --- a/geode-core/src/main/java/com/gemstone/gemfire/internal/cache/InlineKeyHelper.java +++ b/geode-core/src/main/java/com/gemstone/gemfire/internal/cache/InlineKeyHelper.java @@ -18,7 +18,6 @@ /** * No instances of this class. Just some static method having to do with inline keys. - * @author darrel * */ public class InlineKeyHelper { diff --git a/geode-core/src/main/java/com/gemstone/gemfire/internal/cache/InternalCache.java b/geode-core/src/main/java/com/gemstone/gemfire/internal/cache/InternalCache.java index a78746ab59d8..36eee808f3bc 100644 --- a/geode-core/src/main/java/com/gemstone/gemfire/internal/cache/InternalCache.java +++ b/geode-core/src/main/java/com/gemstone/gemfire/internal/cache/InternalCache.java @@ -30,7 +30,6 @@ * The InternalCache interface is contract for implementing classes for defining internal cache operations that should * not be part of the "public" API of the implementing class. *

    - * @author jblum * @see com.gemstone.gemfire.cache.Cache * @since 7.0 */ diff --git a/geode-core/src/main/java/com/gemstone/gemfire/internal/cache/InternalCacheEvent.java b/geode-core/src/main/java/com/gemstone/gemfire/internal/cache/InternalCacheEvent.java index 19bfabb0fc89..4497bbbb9f81 100644 --- a/geode-core/src/main/java/com/gemstone/gemfire/internal/cache/InternalCacheEvent.java +++ b/geode-core/src/main/java/com/gemstone/gemfire/internal/cache/InternalCacheEvent.java @@ -23,7 +23,6 @@ /** * A CacheEvent, but the isGenerateCallbacks() is hidden from public consumption - * @author jpenney * */ public interface InternalCacheEvent extends CacheEvent diff --git a/geode-core/src/main/java/com/gemstone/gemfire/internal/cache/InternalDataView.java b/geode-core/src/main/java/com/gemstone/gemfire/internal/cache/InternalDataView.java index 1ae4e5259dec..e506f2ed1e8a 100644 --- a/geode-core/src/main/java/com/gemstone/gemfire/internal/cache/InternalDataView.java +++ b/geode-core/src/main/java/com/gemstone/gemfire/internal/cache/InternalDataView.java @@ -31,8 +31,6 @@ import com.gemstone.gemfire.internal.offheap.annotations.Retained; /** - * @author Swapnil Bawaskar - * @author Greg Passmore * @since 6.0tx */ public interface InternalDataView { diff --git a/geode-core/src/main/java/com/gemstone/gemfire/internal/cache/InternalRegionArguments.java b/geode-core/src/main/java/com/gemstone/gemfire/internal/cache/InternalRegionArguments.java index 682f3e95a49f..41e763ddd3f9 100644 --- a/geode-core/src/main/java/com/gemstone/gemfire/internal/cache/InternalRegionArguments.java +++ b/geode-core/src/main/java/com/gemstone/gemfire/internal/cache/InternalRegionArguments.java @@ -30,7 +30,6 @@ * An internal version of Region Attributes that allows for additional information * to be passed to the Region constructors, typically for internal purposes, for example * internally GemFire may need use a Region and flag it for internal use only. - * @author Mitch Thomas * @since 4.2.3 */ public final class InternalRegionArguments diff --git a/geode-core/src/main/java/com/gemstone/gemfire/internal/cache/InvalidateOperation.java b/geode-core/src/main/java/com/gemstone/gemfire/internal/cache/InvalidateOperation.java index 75f09d5f49f5..de6adda74abe 100644 --- a/geode-core/src/main/java/com/gemstone/gemfire/internal/cache/InvalidateOperation.java +++ b/geode-core/src/main/java/com/gemstone/gemfire/internal/cache/InvalidateOperation.java @@ -38,7 +38,6 @@ /** * Handles distribution messaging for invalidating an entry in a region. * - * @author Eric Zoerner * */ public class InvalidateOperation extends DistributedCacheOperation diff --git a/geode-core/src/main/java/com/gemstone/gemfire/internal/cache/InvalidatePartitionedRegionMessage.java b/geode-core/src/main/java/com/gemstone/gemfire/internal/cache/InvalidatePartitionedRegionMessage.java index 883d351915a3..97346d331854 100644 --- a/geode-core/src/main/java/com/gemstone/gemfire/internal/cache/InvalidatePartitionedRegionMessage.java +++ b/geode-core/src/main/java/com/gemstone/gemfire/internal/cache/InvalidatePartitionedRegionMessage.java @@ -33,7 +33,6 @@ import java.util.Set; /** - * @author sbawaska * */ public class InvalidatePartitionedRegionMessage extends PartitionMessage { diff --git a/geode-core/src/main/java/com/gemstone/gemfire/internal/cache/InvalidateRegionOperation.java b/geode-core/src/main/java/com/gemstone/gemfire/internal/cache/InvalidateRegionOperation.java index 8328cb789398..e36234e6b3ae 100644 --- a/geode-core/src/main/java/com/gemstone/gemfire/internal/cache/InvalidateRegionOperation.java +++ b/geode-core/src/main/java/com/gemstone/gemfire/internal/cache/InvalidateRegionOperation.java @@ -29,7 +29,6 @@ /** * - * @author Eric Zoerner * */ public class InvalidateRegionOperation extends DistributedCacheOperation { diff --git a/geode-core/src/main/java/com/gemstone/gemfire/internal/cache/JtaAfterCompletionMessage.java b/geode-core/src/main/java/com/gemstone/gemfire/internal/cache/JtaAfterCompletionMessage.java index 49fd94a57406..f20cb9e75264 100644 --- a/geode-core/src/main/java/com/gemstone/gemfire/internal/cache/JtaAfterCompletionMessage.java +++ b/geode-core/src/main/java/com/gemstone/gemfire/internal/cache/JtaAfterCompletionMessage.java @@ -38,7 +38,6 @@ import com.gemstone.gemfire.internal.logging.LogService; /** - * @author sbawaska * */ public class JtaAfterCompletionMessage extends TXMessage { diff --git a/geode-core/src/main/java/com/gemstone/gemfire/internal/cache/JtaBeforeCompletionMessage.java b/geode-core/src/main/java/com/gemstone/gemfire/internal/cache/JtaBeforeCompletionMessage.java index de482312457f..079fd89f8ca2 100644 --- a/geode-core/src/main/java/com/gemstone/gemfire/internal/cache/JtaBeforeCompletionMessage.java +++ b/geode-core/src/main/java/com/gemstone/gemfire/internal/cache/JtaBeforeCompletionMessage.java @@ -34,7 +34,6 @@ import com.gemstone.gemfire.internal.logging.LogService; /** - * @author sbawaska * */ public class JtaBeforeCompletionMessage extends TXMessage { diff --git a/geode-core/src/main/java/com/gemstone/gemfire/internal/cache/KeyInfo.java b/geode-core/src/main/java/com/gemstone/gemfire/internal/cache/KeyInfo.java index e69e01d13ed8..30f30fcb237f 100644 --- a/geode-core/src/main/java/com/gemstone/gemfire/internal/cache/KeyInfo.java +++ b/geode-core/src/main/java/com/gemstone/gemfire/internal/cache/KeyInfo.java @@ -27,8 +27,6 @@ import com.gemstone.gemfire.internal.offheap.annotations.Unretained; /** - * @author sbawaska - * @author rdubey * */ public class KeyInfo { diff --git a/geode-core/src/main/java/com/gemstone/gemfire/internal/cache/KeyWithRegionContext.java b/geode-core/src/main/java/com/gemstone/gemfire/internal/cache/KeyWithRegionContext.java index a87958d864ed..b28a551a6703 100644 --- a/geode-core/src/main/java/com/gemstone/gemfire/internal/cache/KeyWithRegionContext.java +++ b/geode-core/src/main/java/com/gemstone/gemfire/internal/cache/KeyWithRegionContext.java @@ -34,7 +34,6 @@ * to interpret those in hashCode/equals/compareTo methods that have no region * context information. * - * @author swale */ public interface KeyWithRegionContext extends DataSerializableFixedID { diff --git a/geode-core/src/main/java/com/gemstone/gemfire/internal/cache/ListOfDeltas.java b/geode-core/src/main/java/com/gemstone/gemfire/internal/cache/ListOfDeltas.java index ac590314ceea..6592863f286c 100644 --- a/geode-core/src/main/java/com/gemstone/gemfire/internal/cache/ListOfDeltas.java +++ b/geode-core/src/main/java/com/gemstone/gemfire/internal/cache/ListOfDeltas.java @@ -27,7 +27,6 @@ /** * - * @author Neeraj * */ public final class ListOfDeltas implements Delta { diff --git a/geode-core/src/main/java/com/gemstone/gemfire/internal/cache/LoaderHelperFactory.java b/geode-core/src/main/java/com/gemstone/gemfire/internal/cache/LoaderHelperFactory.java index 4b466cab6f3f..75925ba1a06a 100644 --- a/geode-core/src/main/java/com/gemstone/gemfire/internal/cache/LoaderHelperFactory.java +++ b/geode-core/src/main/java/com/gemstone/gemfire/internal/cache/LoaderHelperFactory.java @@ -19,7 +19,6 @@ * from a need to allow Partitioned Regions to generate a LoaderHelper that was * outside the context of the Region the loader invoked from. * @since 5.0 - * @author Mitch Thomas */ package com.gemstone.gemfire.internal.cache; @@ -30,7 +29,6 @@ * {@link com.gemstone.gemfire.cache.CacheLoader}. * * @since 5.0 - * @author Mitch Thomas */ public interface LoaderHelperFactory { diff --git a/geode-core/src/main/java/com/gemstone/gemfire/internal/cache/LoaderHelperImpl.java b/geode-core/src/main/java/com/gemstone/gemfire/internal/cache/LoaderHelperImpl.java index 10076b83d54c..3c3c8ffb925b 100644 --- a/geode-core/src/main/java/com/gemstone/gemfire/internal/cache/LoaderHelperImpl.java +++ b/geode-core/src/main/java/com/gemstone/gemfire/internal/cache/LoaderHelperImpl.java @@ -29,7 +29,6 @@ * is only valid within the {@link CacheLoader#load(LoaderHelper) load} * method. * - * @author Sudhir Menon * * @see CacheLoader#load(LoaderHelper) load * @since 2.0 diff --git a/geode-core/src/main/java/com/gemstone/gemfire/internal/cache/LocalDataSet.java b/geode-core/src/main/java/com/gemstone/gemfire/internal/cache/LocalDataSet.java index 02c8b75807a1..cc89bf5c68cb 100755 --- a/geode-core/src/main/java/com/gemstone/gemfire/internal/cache/LocalDataSet.java +++ b/geode-core/src/main/java/com/gemstone/gemfire/internal/cache/LocalDataSet.java @@ -70,7 +70,6 @@ /** * - * @author ymahajan * */ public final class LocalDataSet implements Region, QueryExecutor { diff --git a/geode-core/src/main/java/com/gemstone/gemfire/internal/cache/LocalRegionDataView.java b/geode-core/src/main/java/com/gemstone/gemfire/internal/cache/LocalRegionDataView.java index dddb64e23efc..5193a17d9f42 100644 --- a/geode-core/src/main/java/com/gemstone/gemfire/internal/cache/LocalRegionDataView.java +++ b/geode-core/src/main/java/com/gemstone/gemfire/internal/cache/LocalRegionDataView.java @@ -30,7 +30,6 @@ /** * - * @author mthomas * @since 6.0tx */ public class LocalRegionDataView implements InternalDataView { diff --git a/geode-core/src/main/java/com/gemstone/gemfire/internal/cache/MemberFunctionStreamingMessage.java b/geode-core/src/main/java/com/gemstone/gemfire/internal/cache/MemberFunctionStreamingMessage.java index b3bdc85eba51..3e05df2b9ce7 100755 --- a/geode-core/src/main/java/com/gemstone/gemfire/internal/cache/MemberFunctionStreamingMessage.java +++ b/geode-core/src/main/java/com/gemstone/gemfire/internal/cache/MemberFunctionStreamingMessage.java @@ -54,7 +54,6 @@ /** * - * @author ymahajan * */ public class MemberFunctionStreamingMessage extends DistributionMessage implements TransactionMessage, MessageWithReply { diff --git a/geode-core/src/main/java/com/gemstone/gemfire/internal/cache/MinimumSystemRequirements.java b/geode-core/src/main/java/com/gemstone/gemfire/internal/cache/MinimumSystemRequirements.java index 6aeab687fcf1..4772f8c521a9 100644 --- a/geode-core/src/main/java/com/gemstone/gemfire/internal/cache/MinimumSystemRequirements.java +++ b/geode-core/src/main/java/com/gemstone/gemfire/internal/cache/MinimumSystemRequirements.java @@ -27,7 +27,6 @@ /** * Checks that minimum system requirements are met. * - * @author jbarrett@pivotal.io * * @since 8.1 */ diff --git a/geode-core/src/main/java/com/gemstone/gemfire/internal/cache/Node.java b/geode-core/src/main/java/com/gemstone/gemfire/internal/cache/Node.java index eed075c1d42a..d94540c1da73 100644 --- a/geode-core/src/main/java/com/gemstone/gemfire/internal/cache/Node.java +++ b/geode-core/src/main/java/com/gemstone/gemfire/internal/cache/Node.java @@ -41,7 +41,6 @@ * 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 { diff --git a/geode-core/src/main/java/com/gemstone/gemfire/internal/cache/OffHeapRegionEntry.java b/geode-core/src/main/java/com/gemstone/gemfire/internal/cache/OffHeapRegionEntry.java index c685676141ff..acd1e6304abc 100644 --- a/geode-core/src/main/java/com/gemstone/gemfire/internal/cache/OffHeapRegionEntry.java +++ b/geode-core/src/main/java/com/gemstone/gemfire/internal/cache/OffHeapRegionEntry.java @@ -23,7 +23,6 @@ * Any RegionEntry that is stored off heap must * implement this interface. * - * @author darrel * */ public interface OffHeapRegionEntry extends RegionEntry, Releasable { diff --git a/geode-core/src/main/java/com/gemstone/gemfire/internal/cache/OpType.java b/geode-core/src/main/java/com/gemstone/gemfire/internal/cache/OpType.java index c0408338c725..8200fa6b8f2b 100644 --- a/geode-core/src/main/java/com/gemstone/gemfire/internal/cache/OpType.java +++ b/geode-core/src/main/java/com/gemstone/gemfire/internal/cache/OpType.java @@ -19,7 +19,6 @@ /** * Enumerated type for an event operation. * - * @author Amey Barve * * * @see com.gemstone.gemfire.cache.Operation diff --git a/geode-core/src/main/java/com/gemstone/gemfire/internal/cache/Oplog.java b/geode-core/src/main/java/com/gemstone/gemfire/internal/cache/Oplog.java index 3a2d1edea5e3..8cf0c8e6984a 100755 --- a/geode-core/src/main/java/com/gemstone/gemfire/internal/cache/Oplog.java +++ b/geode-core/src/main/java/com/gemstone/gemfire/internal/cache/Oplog.java @@ -124,9 +124,6 @@ * file only supports persistent regions. For overflow only regions see * {@link OverflowOplog}. * - * @author Darrel Schneider - * @author Mitul Bid - * @author Asif * * @since 5.1 */ @@ -7903,7 +7900,6 @@ public Version getDataVersionIfOld() { * Used in offline mode to prevent pdx deserialization of keys. The raw bytes * are a serialized pdx. * - * @author darrel * @since 6.6 */ private static class RawByteKey implements Sendable { @@ -7937,7 +7933,6 @@ public void sendTo(DataOutput out) throws IOException { /** * Enumeration of operation log file types. * - * @author rholmes */ enum OplogFileType { OPLOG_CRF, // Creates and updates @@ -7948,7 +7943,6 @@ enum OplogFileType { /** * Enumeration of the possible results of the okToSkipModifyRecord * - * @author dsmith * */ private static enum OkToSkipResult { diff --git a/geode-core/src/main/java/com/gemstone/gemfire/internal/cache/OrderedTombstoneMap.java b/geode-core/src/main/java/com/gemstone/gemfire/internal/cache/OrderedTombstoneMap.java index f1e411127345..09d5309631d9 100644 --- a/geode-core/src/main/java/com/gemstone/gemfire/internal/cache/OrderedTombstoneMap.java +++ b/geode-core/src/main/java/com/gemstone/gemfire/internal/cache/OrderedTombstoneMap.java @@ -38,7 +38,6 @@ * * This map is not threadsafe. * - * @author dsmith * */ public class OrderedTombstoneMap { @@ -105,7 +104,6 @@ public Map.Entry take() { /** * A comparator that sorts version tags based on the region version, and * then on the timestamp. - * @author dsmith * */ public static class VersionTagComparator implements Comparator { diff --git a/geode-core/src/main/java/com/gemstone/gemfire/internal/cache/OverflowOplog.java b/geode-core/src/main/java/com/gemstone/gemfire/internal/cache/OverflowOplog.java index 834e548e7c7b..2368b4f1f087 100644 --- a/geode-core/src/main/java/com/gemstone/gemfire/internal/cache/OverflowOplog.java +++ b/geode-core/src/main/java/com/gemstone/gemfire/internal/cache/OverflowOplog.java @@ -50,7 +50,6 @@ * An oplog used for overflow-only regions. * For regions that are persistent (i.e. they can be recovered) see {@link Oplog}. * - * @author Darrel Schneider * * @since prPersistSprint2 */ diff --git a/geode-core/src/main/java/com/gemstone/gemfire/internal/cache/PRContainsValueFunction.java b/geode-core/src/main/java/com/gemstone/gemfire/internal/cache/PRContainsValueFunction.java index 8ae5445eedde..5768c99b3c0c 100644 --- a/geode-core/src/main/java/com/gemstone/gemfire/internal/cache/PRContainsValueFunction.java +++ b/geode-core/src/main/java/com/gemstone/gemfire/internal/cache/PRContainsValueFunction.java @@ -25,7 +25,6 @@ import com.gemstone.gemfire.internal.InternalEntity; /** - * @author Suranjan Kumar * */ public class PRContainsValueFunction extends FunctionAdapter implements InternalEntity { diff --git a/geode-core/src/main/java/com/gemstone/gemfire/internal/cache/PRHARedundancyProvider.java b/geode-core/src/main/java/com/gemstone/gemfire/internal/cache/PRHARedundancyProvider.java index 3abb0d6b2e70..6fe39b1e651b 100644 --- a/geode-core/src/main/java/com/gemstone/gemfire/internal/cache/PRHARedundancyProvider.java +++ b/geode-core/src/main/java/com/gemstone/gemfire/internal/cache/PRHARedundancyProvider.java @@ -100,7 +100,6 @@ * distributed system gracefully. i.e. Cache.close()

    * (4) Redundancy management at random node failure.
    * - * @author tnegi, Mitch Thomas */ public class PRHARedundancyProvider { @@ -2170,7 +2169,6 @@ public String toString() { /** * Monitors distributed membership for a given bucket - * @author mthomas * */ private class BucketMembershipObserver implements MembershipListener { diff --git a/geode-core/src/main/java/com/gemstone/gemfire/internal/cache/PRQueryProcessor.java b/geode-core/src/main/java/com/gemstone/gemfire/internal/cache/PRQueryProcessor.java index 347f7b343f8c..076c5e815ffe 100644 --- a/geode-core/src/main/java/com/gemstone/gemfire/internal/cache/PRQueryProcessor.java +++ b/geode-core/src/main/java/com/gemstone/gemfire/internal/cache/PRQueryProcessor.java @@ -72,8 +72,6 @@ * The BucketQueryResult is used not only to indicate completion, and holds an exception if there one occurred while * processing a query. * - * @author rreja - * @author Eric Zoerner */ public class PRQueryProcessor { @@ -458,7 +456,6 @@ public static void shutdownNow() * A ThreadPool ( Fixed Size ) with an executor service to execute the query * execution spread over buckets. * - * @author rreja * */ static class PRQueryExecutor { @@ -549,7 +546,6 @@ public Version[] getSerializationVersions() { * Implementation of call-able task to execute query on a bucket region. This * task will be generated by the PRQueryProcessor. * - * @author rreja */ @SuppressWarnings("synthetic-access") private final class QueryTask implements Callable { @@ -600,7 +596,6 @@ public Object call() throws Exception { /** * Encapsulates the result for the query on the bucket. * - * @author rreja */ private final class BucketQueryResult { diff --git a/geode-core/src/main/java/com/gemstone/gemfire/internal/cache/PRSystemPropertyGetter.java b/geode-core/src/main/java/com/gemstone/gemfire/internal/cache/PRSystemPropertyGetter.java index dd33b9a04d38..868a3e927889 100644 --- a/geode-core/src/main/java/com/gemstone/gemfire/internal/cache/PRSystemPropertyGetter.java +++ b/geode-core/src/main/java/com/gemstone/gemfire/internal/cache/PRSystemPropertyGetter.java @@ -21,7 +21,6 @@ package com.gemstone.gemfire.internal.cache; /** - * @author rreja * * TODO To change the template for this generated type comment go to * Window - Preferences - Java - Code Style - Code Templates diff --git a/geode-core/src/main/java/com/gemstone/gemfire/internal/cache/PartitionAttributesImpl.java b/geode-core/src/main/java/com/gemstone/gemfire/internal/cache/PartitionAttributesImpl.java index c028971903d4..d1e2bd0ad27c 100644 --- a/geode-core/src/main/java/com/gemstone/gemfire/internal/cache/PartitionAttributesImpl.java +++ b/geode-core/src/main/java/com/gemstone/gemfire/internal/cache/PartitionAttributesImpl.java @@ -53,7 +53,6 @@ * only in this class and not in {@link PartitionAttributes} are for internal * use only. * - * @author Mitch Thomas * @since 5.5 */ public class PartitionAttributesImpl implements PartitionAttributes, diff --git a/geode-core/src/main/java/com/gemstone/gemfire/internal/cache/PartitionRegionConfig.java b/geode-core/src/main/java/com/gemstone/gemfire/internal/cache/PartitionRegionConfig.java index fa28e51bd24f..6d7c1ca6c158 100644 --- a/geode-core/src/main/java/com/gemstone/gemfire/internal/cache/PartitionRegionConfig.java +++ b/geode-core/src/main/java/com/gemstone/gemfire/internal/cache/PartitionRegionConfig.java @@ -17,7 +17,6 @@ /* * Created on Dec 1, 2005 - * @author tapshank */ package com.gemstone.gemfire.internal.cache; diff --git a/geode-core/src/main/java/com/gemstone/gemfire/internal/cache/PartitionRegionConfigValidator.java b/geode-core/src/main/java/com/gemstone/gemfire/internal/cache/PartitionRegionConfigValidator.java index c6f4ca845f76..b3ca5e5b91d6 100644 --- a/geode-core/src/main/java/com/gemstone/gemfire/internal/cache/PartitionRegionConfigValidator.java +++ b/geode-core/src/main/java/com/gemstone/gemfire/internal/cache/PartitionRegionConfigValidator.java @@ -39,7 +39,6 @@ /** * - * @author ymahajan * */ public class PartitionRegionConfigValidator { diff --git a/geode-core/src/main/java/com/gemstone/gemfire/internal/cache/PartitionedRegionBucketMgmtHelper.java b/geode-core/src/main/java/com/gemstone/gemfire/internal/cache/PartitionedRegionBucketMgmtHelper.java index fc67988a5108..8ace8b3d16dc 100644 --- a/geode-core/src/main/java/com/gemstone/gemfire/internal/cache/PartitionedRegionBucketMgmtHelper.java +++ b/geode-core/src/main/java/com/gemstone/gemfire/internal/cache/PartitionedRegionBucketMgmtHelper.java @@ -26,7 +26,6 @@ /** * This class encapsulates the Bucket Related heuristics/algos for a PR. * - * @author rreja, modified by tnegi * */ public class PartitionedRegionBucketMgmtHelper diff --git a/geode-core/src/main/java/com/gemstone/gemfire/internal/cache/PartitionedRegionDataStore.java b/geode-core/src/main/java/com/gemstone/gemfire/internal/cache/PartitionedRegionDataStore.java index 5f28c931801b..65f13a0dc71c 100644 --- a/geode-core/src/main/java/com/gemstone/gemfire/internal/cache/PartitionedRegionDataStore.java +++ b/geode-core/src/main/java/com/gemstone/gemfire/internal/cache/PartitionedRegionDataStore.java @@ -115,9 +115,6 @@ * will handle remote calls to this DataStore from other nodes participating in * this PartitionedRegion. * - * @author rreja - * @author tapshank - * @author Mitch Thomas */ public class PartitionedRegionDataStore implements HasCachePerfStats { @@ -2586,7 +2583,6 @@ public int getSizeOfLocalPrimaryBuckets() { /** * Interface for visiting buckets - * @author Mitch Thomas */ // public visibility for tests public static abstract class BucketVisitor { @@ -2625,7 +2621,6 @@ private void visitBucket(final Integer bucketId, final LocalRegion bucket, final * Test class and method for visiting Entries * NOTE: This class will only give a partial view if a visited bucket is moved * by a rebalance while a visit is in progress on that bucket. - * @author mthomas */ protected static abstract class EntryVisitor { abstract public void visit(Integer bucketId, Region.Entry re); diff --git a/geode-core/src/main/java/com/gemstone/gemfire/internal/cache/PartitionedRegionDataView.java b/geode-core/src/main/java/com/gemstone/gemfire/internal/cache/PartitionedRegionDataView.java index 25868c86019a..f0832681b297 100644 --- a/geode-core/src/main/java/com/gemstone/gemfire/internal/cache/PartitionedRegionDataView.java +++ b/geode-core/src/main/java/com/gemstone/gemfire/internal/cache/PartitionedRegionDataView.java @@ -28,7 +28,6 @@ /** - * @author mthomas * @since 6.0tx */ public class PartitionedRegionDataView extends LocalRegionDataView { diff --git a/geode-core/src/main/java/com/gemstone/gemfire/internal/cache/PartitionedRegionHelper.java b/geode-core/src/main/java/com/gemstone/gemfire/internal/cache/PartitionedRegionHelper.java index ef89c803d5e0..6ce783a5cb53 100644 --- a/geode-core/src/main/java/com/gemstone/gemfire/internal/cache/PartitionedRegionHelper.java +++ b/geode-core/src/main/java/com/gemstone/gemfire/internal/cache/PartitionedRegionHelper.java @@ -65,7 +65,6 @@ import com.gemstone.gemfire.internal.logging.log4j.LocalizedMessage; /** - * @author tapshank Created on Dec 21, 2005 */ public class PartitionedRegionHelper { diff --git a/geode-core/src/main/java/com/gemstone/gemfire/internal/cache/PartitionedRegionQueryEvaluator.java b/geode-core/src/main/java/com/gemstone/gemfire/internal/cache/PartitionedRegionQueryEvaluator.java index db40af337df2..1099f4c790f5 100644 --- a/geode-core/src/main/java/com/gemstone/gemfire/internal/cache/PartitionedRegionQueryEvaluator.java +++ b/geode-core/src/main/java/com/gemstone/gemfire/internal/cache/PartitionedRegionQueryEvaluator.java @@ -100,10 +100,7 @@ * This class sends the query on various PartitionedRegion data * store nodes and collects the results back, does the union of all the results. * - * @author rreja - * @author Eric Zoerner * revamped with streaming of results - * @author Mitch Thomas * retry logic */ public class PartitionedRegionQueryEvaluator extends StreamingPartitionOperation @@ -111,7 +108,6 @@ public class PartitionedRegionQueryEvaluator extends StreamingPartitionOperation private static final Logger logger = LogService.getLogger(); /** - * @author Mitch Thomas * An ArraList which can be tainted * @since 6.0 */ @@ -145,7 +141,6 @@ public synchronized void untaint() { /** * An ArraList which might be unconsumable. * @since 6.6.2 - * @author shobhit */ public static class MemberResultsList extends ArrayList { private boolean isLastChunkReceived = false; @@ -161,7 +156,6 @@ public void setLastChunkReceived(boolean isLastChunkReceived) { /** * Simple testing interface - * @author Mitch Thomas * @since 6.0 */ public interface TestHook { @@ -1383,7 +1377,6 @@ public Map getResultsPerMember() { * in multipleThreads and results gained from buckets. * In future this can be used for adding for more information to final * query running info from pool threads. - * @author shobhit * @since 6.6 */ public static class PRQueryResultCollector { diff --git a/geode-core/src/main/java/com/gemstone/gemfire/internal/cache/PartitionedRegionStats.java b/geode-core/src/main/java/com/gemstone/gemfire/internal/cache/PartitionedRegionStats.java index 8ec2f151451a..43645c6c6661 100644 --- a/geode-core/src/main/java/com/gemstone/gemfire/internal/cache/PartitionedRegionStats.java +++ b/geode-core/src/main/java/com/gemstone/gemfire/internal/cache/PartitionedRegionStats.java @@ -44,7 +44,6 @@ * To manipulate the statistic values, use (inc|dec|set|get)<fieldName> * methods. * - * @author Mitch Thomas, Tushar * @since 5.0 */ public class PartitionedRegionStats { diff --git a/geode-core/src/main/java/com/gemstone/gemfire/internal/cache/PartitionedRegionStatus.java b/geode-core/src/main/java/com/gemstone/gemfire/internal/cache/PartitionedRegionStatus.java index 8843b06f255a..e3dbabd3983d 100755 --- a/geode-core/src/main/java/com/gemstone/gemfire/internal/cache/PartitionedRegionStatus.java +++ b/geode-core/src/main/java/com/gemstone/gemfire/internal/cache/PartitionedRegionStatus.java @@ -21,7 +21,6 @@ * Class PartitionedRegionStatus provides information about * PartitionedRegions. This class is used by the monitoring tool. * - * @author Barry Oglesby * * @since 5.1 */ diff --git a/geode-core/src/main/java/com/gemstone/gemfire/internal/cache/PlaceHolderDiskRegion.java b/geode-core/src/main/java/com/gemstone/gemfire/internal/cache/PlaceHolderDiskRegion.java index 48f74a85f234..50f1ac7ab6f0 100644 --- a/geode-core/src/main/java/com/gemstone/gemfire/internal/cache/PlaceHolderDiskRegion.java +++ b/geode-core/src/main/java/com/gemstone/gemfire/internal/cache/PlaceHolderDiskRegion.java @@ -31,7 +31,6 @@ * This class needs to keep track of any information that can be recovered * from the DiskInitFile. * - * @author Darrel Schneider * * @since prPersistSprint2 */ diff --git a/geode-core/src/main/java/com/gemstone/gemfire/internal/cache/PoolFactoryImpl.java b/geode-core/src/main/java/com/gemstone/gemfire/internal/cache/PoolFactoryImpl.java index 7d148bb39299..216f3e2a95a0 100644 --- a/geode-core/src/main/java/com/gemstone/gemfire/internal/cache/PoolFactoryImpl.java +++ b/geode-core/src/main/java/com/gemstone/gemfire/internal/cache/PoolFactoryImpl.java @@ -49,7 +49,6 @@ /** * Implementation of PoolFactory. - * @author darrel * @since 5.7 */ public class PoolFactoryImpl implements PoolFactory { diff --git a/geode-core/src/main/java/com/gemstone/gemfire/internal/cache/PoolManagerImpl.java b/geode-core/src/main/java/com/gemstone/gemfire/internal/cache/PoolManagerImpl.java index effd7ed5d669..761f9735d4a0 100644 --- a/geode-core/src/main/java/com/gemstone/gemfire/internal/cache/PoolManagerImpl.java +++ b/geode-core/src/main/java/com/gemstone/gemfire/internal/cache/PoolManagerImpl.java @@ -48,7 +48,6 @@ /** * Implementation used by PoolManager. * - * @author darrel * @since 5.7 * */ diff --git a/geode-core/src/main/java/com/gemstone/gemfire/internal/cache/PoolStats.java b/geode-core/src/main/java/com/gemstone/gemfire/internal/cache/PoolStats.java index 248e77f7edf0..99876ac88b6c 100755 --- a/geode-core/src/main/java/com/gemstone/gemfire/internal/cache/PoolStats.java +++ b/geode-core/src/main/java/com/gemstone/gemfire/internal/cache/PoolStats.java @@ -27,7 +27,6 @@ /** * GemFire statistics about a Pool * - * @author gregp * * @since 5.7 */ diff --git a/geode-core/src/main/java/com/gemstone/gemfire/internal/cache/PreferBytesCachedDeserializable.java b/geode-core/src/main/java/com/gemstone/gemfire/internal/cache/PreferBytesCachedDeserializable.java index 7ed88b5fedc4..7f8fdd04256e 100644 --- a/geode-core/src/main/java/com/gemstone/gemfire/internal/cache/PreferBytesCachedDeserializable.java +++ b/geode-core/src/main/java/com/gemstone/gemfire/internal/cache/PreferBytesCachedDeserializable.java @@ -33,7 +33,6 @@ * You can ask it for its Object in which case it always has to deserialize. * So it "prefers serialization (aka bytes)". * - * @author Darrel * @since 5.0.2 * */ diff --git a/geode-core/src/main/java/com/gemstone/gemfire/internal/cache/PrimaryBucketException.java b/geode-core/src/main/java/com/gemstone/gemfire/internal/cache/PrimaryBucketException.java index f1ad46a88bfd..35502c417682 100644 --- a/geode-core/src/main/java/com/gemstone/gemfire/internal/cache/PrimaryBucketException.java +++ b/geode-core/src/main/java/com/gemstone/gemfire/internal/cache/PrimaryBucketException.java @@ -22,7 +22,6 @@ * An exception thrown if a bucket instance is not primary yet was requested * to perform a modification operation. * - * @author Mitch Thomas * @since 5.1 * */ diff --git a/geode-core/src/main/java/com/gemstone/gemfire/internal/cache/ProfileExchangeProcessor.java b/geode-core/src/main/java/com/gemstone/gemfire/internal/cache/ProfileExchangeProcessor.java index 5cb7dbdfedf5..fe0e6b0e5385 100644 --- a/geode-core/src/main/java/com/gemstone/gemfire/internal/cache/ProfileExchangeProcessor.java +++ b/geode-core/src/main/java/com/gemstone/gemfire/internal/cache/ProfileExchangeProcessor.java @@ -28,7 +28,6 @@ * implementation will wait for members to come online that may have a later * copies of the region. * - * @author dsmith * */ public interface ProfileExchangeProcessor { diff --git a/geode-core/src/main/java/com/gemstone/gemfire/internal/cache/ProxyBucketRegion.java b/geode-core/src/main/java/com/gemstone/gemfire/internal/cache/ProxyBucketRegion.java index c34f73235320..245f5b2db734 100755 --- a/geode-core/src/main/java/com/gemstone/gemfire/internal/cache/ProxyBucketRegion.java +++ b/geode-core/src/main/java/com/gemstone/gemfire/internal/cache/ProxyBucketRegion.java @@ -57,7 +57,6 @@ * Empty shell for {@link BucketRegion} which exists only to maintain metadata * in the form of a {@link BucketAdvisor} * - * @author Kirk Lund * @since 5.1 */ public final class ProxyBucketRegion implements Bucket { diff --git a/geode-core/src/main/java/com/gemstone/gemfire/internal/cache/ProxyRegionMap.java b/geode-core/src/main/java/com/gemstone/gemfire/internal/cache/ProxyRegionMap.java index dc9db463e12b..fb5596c1e6be 100644 --- a/geode-core/src/main/java/com/gemstone/gemfire/internal/cache/ProxyRegionMap.java +++ b/geode-core/src/main/java/com/gemstone/gemfire/internal/cache/ProxyRegionMap.java @@ -51,7 +51,6 @@ * * @since 5.0 * - * @author Darrel Schneider * */ final class ProxyRegionMap implements RegionMap { diff --git a/geode-core/src/main/java/com/gemstone/gemfire/internal/cache/PutAllPartialResultException.java b/geode-core/src/main/java/com/gemstone/gemfire/internal/cache/PutAllPartialResultException.java index 273e1939ca10..ee1ea1af4773 100755 --- a/geode-core/src/main/java/com/gemstone/gemfire/internal/cache/PutAllPartialResultException.java +++ b/geode-core/src/main/java/com/gemstone/gemfire/internal/cache/PutAllPartialResultException.java @@ -28,7 +28,6 @@ * Note: the name of this class is not changed to BulkOpPartialResultException * to keep it compatible with old clients and old peers. * - * @author xzhou * * * @since 6.5 diff --git a/geode-core/src/main/java/com/gemstone/gemfire/internal/cache/QueuedOperation.java b/geode-core/src/main/java/com/gemstone/gemfire/internal/cache/QueuedOperation.java index 92a5a6c72a5e..fa7aea19d05e 100644 --- a/geode-core/src/main/java/com/gemstone/gemfire/internal/cache/QueuedOperation.java +++ b/geode-core/src/main/java/com/gemstone/gemfire/internal/cache/QueuedOperation.java @@ -27,7 +27,6 @@ * Represents a single operation that can be queued for reliable delivery. * Instances are owned in the context of a region. * - * @author Darrel Schneider * @since 5.0 */ public class QueuedOperation diff --git a/geode-core/src/main/java/com/gemstone/gemfire/internal/cache/RegionClearedException.java b/geode-core/src/main/java/com/gemstone/gemfire/internal/cache/RegionClearedException.java index 34db56991881..50078829574a 100644 --- a/geode-core/src/main/java/com/gemstone/gemfire/internal/cache/RegionClearedException.java +++ b/geode-core/src/main/java/com/gemstone/gemfire/internal/cache/RegionClearedException.java @@ -19,7 +19,6 @@ /** * Indicates that a Clear Operation happened while an entry operation * was in progress, which would result in the ongoing entry operation to abort - * @author Asif Shahid * @since 5.1 */ public class RegionClearedException extends Exception { diff --git a/geode-core/src/main/java/com/gemstone/gemfire/internal/cache/RegionEntry.java b/geode-core/src/main/java/com/gemstone/gemfire/internal/cache/RegionEntry.java index e2cfb907c885..489413d754b0 100644 --- a/geode-core/src/main/java/com/gemstone/gemfire/internal/cache/RegionEntry.java +++ b/geode-core/src/main/java/com/gemstone/gemfire/internal/cache/RegionEntry.java @@ -45,7 +45,6 @@ * * @since 3.5.1 * - * @author Darrel Schneider Implementations: (unshared) diff --git a/geode-core/src/main/java/com/gemstone/gemfire/internal/cache/RegionEntryContext.java b/geode-core/src/main/java/com/gemstone/gemfire/internal/cache/RegionEntryContext.java index 7f49df709425..abdefaaa58e5 100644 --- a/geode-core/src/main/java/com/gemstone/gemfire/internal/cache/RegionEntryContext.java +++ b/geode-core/src/main/java/com/gemstone/gemfire/internal/cache/RegionEntryContext.java @@ -21,7 +21,6 @@ /** * Provides important contextual information that allows a {@link RegionEntry} to manage its state. - * @author rholmes * @since 8.0 */ public interface RegionEntryContext extends HasCachePerfStats { diff --git a/geode-core/src/main/java/com/gemstone/gemfire/internal/cache/RegionEntryFactory.java b/geode-core/src/main/java/com/gemstone/gemfire/internal/cache/RegionEntryFactory.java index a0f933c98b97..efb071cedaf1 100644 --- a/geode-core/src/main/java/com/gemstone/gemfire/internal/cache/RegionEntryFactory.java +++ b/geode-core/src/main/java/com/gemstone/gemfire/internal/cache/RegionEntryFactory.java @@ -23,7 +23,6 @@ * * @since 3.5.1 * - * @author Darrel Schneider * */ public interface RegionEntryFactory { diff --git a/geode-core/src/main/java/com/gemstone/gemfire/internal/cache/RegionEventImpl.java b/geode-core/src/main/java/com/gemstone/gemfire/internal/cache/RegionEventImpl.java index 0d2502d07235..2304dea6e50c 100644 --- a/geode-core/src/main/java/com/gemstone/gemfire/internal/cache/RegionEventImpl.java +++ b/geode-core/src/main/java/com/gemstone/gemfire/internal/cache/RegionEventImpl.java @@ -38,7 +38,6 @@ /** * Implementation of a region event * - * @author Sudhir Menon * */ // must be public for DataSerializable to work diff --git a/geode-core/src/main/java/com/gemstone/gemfire/internal/cache/RegionEvictorTask.java b/geode-core/src/main/java/com/gemstone/gemfire/internal/cache/RegionEvictorTask.java index 5826a705c5d2..ee49b64cee0f 100755 --- a/geode-core/src/main/java/com/gemstone/gemfire/internal/cache/RegionEvictorTask.java +++ b/geode-core/src/main/java/com/gemstone/gemfire/internal/cache/RegionEvictorTask.java @@ -33,7 +33,6 @@ * Takes delta to be evicted and tries to evict the least no of LRU entry which * would make evictedBytes more than or equal to the delta * - * @author Suranjan, Amardeep, Swapnil, Yogesh * @since 6.0 * */ diff --git a/geode-core/src/main/java/com/gemstone/gemfire/internal/cache/RegionIdleExpiryTask.java b/geode-core/src/main/java/com/gemstone/gemfire/internal/cache/RegionIdleExpiryTask.java index c1b547ab5fb6..ca98f5fc3b82 100644 --- a/geode-core/src/main/java/com/gemstone/gemfire/internal/cache/RegionIdleExpiryTask.java +++ b/geode-core/src/main/java/com/gemstone/gemfire/internal/cache/RegionIdleExpiryTask.java @@ -21,7 +21,6 @@ /** * - * @author Eric Zoerner */ class RegionIdleExpiryTask extends RegionExpiryTask { diff --git a/geode-core/src/main/java/com/gemstone/gemfire/internal/cache/RegionMap.java b/geode-core/src/main/java/com/gemstone/gemfire/internal/cache/RegionMap.java index 86daa871aeb4..a7c26073dbbc 100644 --- a/geode-core/src/main/java/com/gemstone/gemfire/internal/cache/RegionMap.java +++ b/geode-core/src/main/java/com/gemstone/gemfire/internal/cache/RegionMap.java @@ -43,7 +43,6 @@ * * @since 3.5.1 * - * @author Darrel Schneider * */ public interface RegionMap extends LRUMapCallbacks { diff --git a/geode-core/src/main/java/com/gemstone/gemfire/internal/cache/RegionMapFactory.java b/geode-core/src/main/java/com/gemstone/gemfire/internal/cache/RegionMapFactory.java index 6a57198d79ab..2a7f0c421430 100644 --- a/geode-core/src/main/java/com/gemstone/gemfire/internal/cache/RegionMapFactory.java +++ b/geode-core/src/main/java/com/gemstone/gemfire/internal/cache/RegionMapFactory.java @@ -24,7 +24,6 @@ * * @since 3.5.1 * - * @author Darrel Schneider * */ class RegionMapFactory { diff --git a/geode-core/src/main/java/com/gemstone/gemfire/internal/cache/RegionQueue.java b/geode-core/src/main/java/com/gemstone/gemfire/internal/cache/RegionQueue.java index 0e744550e61c..0d6a841abad0 100755 --- a/geode-core/src/main/java/com/gemstone/gemfire/internal/cache/RegionQueue.java +++ b/geode-core/src/main/java/com/gemstone/gemfire/internal/cache/RegionQueue.java @@ -25,7 +25,6 @@ * Interface RegionQueue is an interface for queue * implementations backed by regions. * - * @author Barry Oglesby * * @since 4.2 */ diff --git a/geode-core/src/main/java/com/gemstone/gemfire/internal/cache/RegionQueueException.java b/geode-core/src/main/java/com/gemstone/gemfire/internal/cache/RegionQueueException.java index 7e4f48f49384..1aca59abbb46 100755 --- a/geode-core/src/main/java/com/gemstone/gemfire/internal/cache/RegionQueueException.java +++ b/geode-core/src/main/java/com/gemstone/gemfire/internal/cache/RegionQueueException.java @@ -21,7 +21,6 @@ /** * An exception thrown by a RegionQueue. * - * @author Barry Oglesby * * @since 4.2 */ diff --git a/geode-core/src/main/java/com/gemstone/gemfire/internal/cache/RegionStatus.java b/geode-core/src/main/java/com/gemstone/gemfire/internal/cache/RegionStatus.java index 626115b4aceb..4f5003aed2ca 100755 --- a/geode-core/src/main/java/com/gemstone/gemfire/internal/cache/RegionStatus.java +++ b/geode-core/src/main/java/com/gemstone/gemfire/internal/cache/RegionStatus.java @@ -28,7 +28,6 @@ * Class RegionStatus provides information about * Regions. This class is used by the monitoring tool. * - * @author Barry Oglesby * * @since 5.1 */ diff --git a/geode-core/src/main/java/com/gemstone/gemfire/internal/cache/RegionTTLExpiryTask.java b/geode-core/src/main/java/com/gemstone/gemfire/internal/cache/RegionTTLExpiryTask.java index afd60e71e9b9..d8fd9053201f 100644 --- a/geode-core/src/main/java/com/gemstone/gemfire/internal/cache/RegionTTLExpiryTask.java +++ b/geode-core/src/main/java/com/gemstone/gemfire/internal/cache/RegionTTLExpiryTask.java @@ -21,7 +21,6 @@ /** * - * @author Eric Zoerner */ class RegionTTLExpiryTask extends RegionExpiryTask { diff --git a/geode-core/src/main/java/com/gemstone/gemfire/internal/cache/ReliableDistributionData.java b/geode-core/src/main/java/com/gemstone/gemfire/internal/cache/ReliableDistributionData.java index f25515e21b74..30a5c243a362 100644 --- a/geode-core/src/main/java/com/gemstone/gemfire/internal/cache/ReliableDistributionData.java +++ b/geode-core/src/main/java/com/gemstone/gemfire/internal/cache/ReliableDistributionData.java @@ -22,7 +22,6 @@ * Represents one or more distributed operations that can be reliably distributed. * This interface allows the data to be queued and checked for reliable distribution. * - * @author Darrel Schneider * @since 5.0 */ public interface ReliableDistributionData { diff --git a/geode-core/src/main/java/com/gemstone/gemfire/internal/cache/ReliableMessageQueue.java b/geode-core/src/main/java/com/gemstone/gemfire/internal/cache/ReliableMessageQueue.java index ec431151bc08..5e0ec9061b84 100644 --- a/geode-core/src/main/java/com/gemstone/gemfire/internal/cache/ReliableMessageQueue.java +++ b/geode-core/src/main/java/com/gemstone/gemfire/internal/cache/ReliableMessageQueue.java @@ -26,7 +26,6 @@ * is done. * Instances of this interface can be obtained from {@link ReliableMessageQueueFactory} which can be obtained from {@link GemFireCacheImpl#getReliableMessageQueueFactory}. * - * @author Darrel Schneider * @since 5.0 */ public interface ReliableMessageQueue { diff --git a/geode-core/src/main/java/com/gemstone/gemfire/internal/cache/ReliableMessageQueueFactory.java b/geode-core/src/main/java/com/gemstone/gemfire/internal/cache/ReliableMessageQueueFactory.java index 2041ff1b1ff3..4a4dcf7423a8 100644 --- a/geode-core/src/main/java/com/gemstone/gemfire/internal/cache/ReliableMessageQueueFactory.java +++ b/geode-core/src/main/java/com/gemstone/gemfire/internal/cache/ReliableMessageQueueFactory.java @@ -21,7 +21,6 @@ * The Cache will have an instance of the factory that can be obtained * from {@link GemFireCacheImpl#getReliableMessageQueueFactory}. * - * @author Darrel Schneider * @since 5.0 */ public interface ReliableMessageQueueFactory { diff --git a/geode-core/src/main/java/com/gemstone/gemfire/internal/cache/ReliableMessageQueueFactoryImpl.java b/geode-core/src/main/java/com/gemstone/gemfire/internal/cache/ReliableMessageQueueFactoryImpl.java index bda6e381a084..170cbb165110 100644 --- a/geode-core/src/main/java/com/gemstone/gemfire/internal/cache/ReliableMessageQueueFactoryImpl.java +++ b/geode-core/src/main/java/com/gemstone/gemfire/internal/cache/ReliableMessageQueueFactoryImpl.java @@ -24,7 +24,6 @@ /** * Implementation of {@link ReliableMessageQueueFactory} * - * @author Darrel Schneider * @since 5.0 */ public class ReliableMessageQueueFactoryImpl implements ReliableMessageQueueFactory { diff --git a/geode-core/src/main/java/com/gemstone/gemfire/internal/cache/RemoteFetchEntryMessage.java b/geode-core/src/main/java/com/gemstone/gemfire/internal/cache/RemoteFetchEntryMessage.java index 4b5eca25844c..685f0a5ee6c7 100755 --- a/geode-core/src/main/java/com/gemstone/gemfire/internal/cache/RemoteFetchEntryMessage.java +++ b/geode-core/src/main/java/com/gemstone/gemfire/internal/cache/RemoteFetchEntryMessage.java @@ -54,7 +54,6 @@ * reply is sent in a {@link * com.gemstone.gemfire.internal.cache.RemoteFetchEntryMessage.FetchEntryReplyMessage}. * - * @author bruce * @since 5.1 */ public final class RemoteFetchEntryMessage extends RemoteOperationMessage @@ -195,7 +194,6 @@ public void setKey(Object key) /** * This message is used for the reply to a {@link RemoteFetchEntryMessage}. * - * @author mthomas * @since 5.0 */ public static final class FetchEntryReplyMessage extends ReplyMessage diff --git a/geode-core/src/main/java/com/gemstone/gemfire/internal/cache/RemoteFetchVersionMessage.java b/geode-core/src/main/java/com/gemstone/gemfire/internal/cache/RemoteFetchVersionMessage.java index 487c2a044351..12e4de6114ef 100644 --- a/geode-core/src/main/java/com/gemstone/gemfire/internal/cache/RemoteFetchVersionMessage.java +++ b/geode-core/src/main/java/com/gemstone/gemfire/internal/cache/RemoteFetchVersionMessage.java @@ -47,7 +47,6 @@ * DistributedRegions with DataPolicy EMPTY, NORMAL, PRELOADED, can use * this message to fetch VersionTag for a key. * - * @author sbawaska * @since 7.0 */ public final class RemoteFetchVersionMessage extends RemoteOperationMessage { @@ -149,7 +148,6 @@ protected boolean operateOnRegion(DistributionManager dm, LocalRegion r, /** * This message is used to send a reply for RemoteFetchVersionMessage. * - * @author sbawaska */ public static final class FetchVersionReplyMessage extends ReplyMessage { private VersionTag tag; @@ -216,7 +214,6 @@ public void fromData(DataInput in) throws IOException, /** * A processor to capture the VersionTag returned by RemoteFetchVersion message. * - * @author sbawaska */ public static class FetchVersionResponse extends RemoteOperationResponse { diff --git a/geode-core/src/main/java/com/gemstone/gemfire/internal/cache/RemoteGetMessage.java b/geode-core/src/main/java/com/gemstone/gemfire/internal/cache/RemoteGetMessage.java index 04b52acfdc6f..c7543399c44c 100755 --- a/geode-core/src/main/java/com/gemstone/gemfire/internal/cache/RemoteGetMessage.java +++ b/geode-core/src/main/java/com/gemstone/gemfire/internal/cache/RemoteGetMessage.java @@ -363,7 +363,6 @@ public String toString() * A processor to capture the value returned by {@link * com.gemstone.gemfire.internal.cache.RemoteGetMessage.GetReplyMessage} * - * @author Mitch Thomas * @since 5.0 */ public static class RemoteGetResponse extends RemoteOperationResponse { diff --git a/geode-core/src/main/java/com/gemstone/gemfire/internal/cache/RemoteOperationException.java b/geode-core/src/main/java/com/gemstone/gemfire/internal/cache/RemoteOperationException.java index df250199ffa2..33d838edc805 100755 --- a/geode-core/src/main/java/com/gemstone/gemfire/internal/cache/RemoteOperationException.java +++ b/geode-core/src/main/java/com/gemstone/gemfire/internal/cache/RemoteOperationException.java @@ -25,7 +25,6 @@ * Indicates that the current non-partitioned region operation failed fatally. * * @see com.gemstone.gemfire.internal.cache.RemoteOperationMessage - * @author gregp * @since 6.5 */ public class RemoteOperationException extends diff --git a/geode-core/src/main/java/com/gemstone/gemfire/internal/cache/RemoteOperationMessage.java b/geode-core/src/main/java/com/gemstone/gemfire/internal/cache/RemoteOperationMessage.java index 27d5bc2dcff4..42ce8114e0bf 100755 --- a/geode-core/src/main/java/com/gemstone/gemfire/internal/cache/RemoteOperationMessage.java +++ b/geode-core/src/main/java/com/gemstone/gemfire/internal/cache/RemoteOperationMessage.java @@ -57,7 +57,6 @@ * The base PartitionedRegion message type upon which other messages should be * based. * - * @author gregp * @since 6.5 */ public abstract class RemoteOperationMessage extends DistributionMessage implements @@ -507,7 +506,6 @@ public boolean canParticipateInTransaction() { * recipient, capturing any CacheException thrown by the recipient and handle * it as an expected exception. * - * @author Greg Passmore * @since 6.5 * @see #waitForCacheException() */ diff --git a/geode-core/src/main/java/com/gemstone/gemfire/internal/cache/RemoteOperationMessageWithDirectReply.java b/geode-core/src/main/java/com/gemstone/gemfire/internal/cache/RemoteOperationMessageWithDirectReply.java index 3f03211b25eb..191cafbe74ae 100755 --- a/geode-core/src/main/java/com/gemstone/gemfire/internal/cache/RemoteOperationMessageWithDirectReply.java +++ b/geode-core/src/main/java/com/gemstone/gemfire/internal/cache/RemoteOperationMessageWithDirectReply.java @@ -35,7 +35,6 @@ * * Additionally, if the ReplyProcessor used for this message extends PartitionResponse, it should * pass false for the register parameter of the PartitionResponse. - * @author dsmith * */ public abstract class RemoteOperationMessageWithDirectReply extends diff --git a/geode-core/src/main/java/com/gemstone/gemfire/internal/cache/RemotePutMessage.java b/geode-core/src/main/java/com/gemstone/gemfire/internal/cache/RemotePutMessage.java index b15e0359321f..9f51b39bf66d 100755 --- a/geode-core/src/main/java/com/gemstone/gemfire/internal/cache/RemotePutMessage.java +++ b/geode-core/src/main/java/com/gemstone/gemfire/internal/cache/RemotePutMessage.java @@ -1085,7 +1085,6 @@ public void importOldBytes(byte[] ov, boolean isSerialized) { /** * A processor to capture the value returned by {@link RemotePutMessage} - * @author bruce * @since 5.1 */ public static class RemotePutResponse extends RemoteOperationResponse { diff --git a/geode-core/src/main/java/com/gemstone/gemfire/internal/cache/RoleEventImpl.java b/geode-core/src/main/java/com/gemstone/gemfire/internal/cache/RoleEventImpl.java index 6a59834c660b..3a82353070ca 100755 --- a/geode-core/src/main/java/com/gemstone/gemfire/internal/cache/RoleEventImpl.java +++ b/geode-core/src/main/java/com/gemstone/gemfire/internal/cache/RoleEventImpl.java @@ -31,7 +31,6 @@ * Implementation of a RoleEvent. Super class is DataSerializable but * this class is probably never on the wire, however, it does support it. * - * @author Kirk Lund * @since 5.0 */ public final class RoleEventImpl extends RegionEventImpl diff --git a/geode-core/src/main/java/com/gemstone/gemfire/internal/cache/SearchLoadAndWriteProcessor.java b/geode-core/src/main/java/com/gemstone/gemfire/internal/cache/SearchLoadAndWriteProcessor.java index e96d99dc2494..bd0e366898c9 100755 --- a/geode-core/src/main/java/com/gemstone/gemfire/internal/cache/SearchLoadAndWriteProcessor.java +++ b/geode-core/src/main/java/com/gemstone/gemfire/internal/cache/SearchLoadAndWriteProcessor.java @@ -88,7 +88,6 @@ * At the receiving end, the request is converted into an appropriate message * whose process method responds to the request. * - * @author Sudhir Menon */ public class SearchLoadAndWriteProcessor implements MembershipListener { diff --git a/geode-core/src/main/java/com/gemstone/gemfire/internal/cache/SendQueueOperation.java b/geode-core/src/main/java/com/gemstone/gemfire/internal/cache/SendQueueOperation.java index f9ad32376d4a..1fc20efdbb47 100644 --- a/geode-core/src/main/java/com/gemstone/gemfire/internal/cache/SendQueueOperation.java +++ b/geode-core/src/main/java/com/gemstone/gemfire/internal/cache/SendQueueOperation.java @@ -28,7 +28,6 @@ /** * Sends a chunk of queued messages to everyone currently playing a role. * - * @author Darrel Schneider * @since 5.0 * */ diff --git a/geode-core/src/main/java/com/gemstone/gemfire/internal/cache/ServerPingMessage.java b/geode-core/src/main/java/com/gemstone/gemfire/internal/cache/ServerPingMessage.java index 81ff11f78817..c6c9b1ff1d09 100644 --- a/geode-core/src/main/java/com/gemstone/gemfire/internal/cache/ServerPingMessage.java +++ b/geode-core/src/main/java/com/gemstone/gemfire/internal/cache/ServerPingMessage.java @@ -36,7 +36,6 @@ * Ping to check if a server is alive. It waits for a specified * time before returning false. * - * @author hemantb */ public class ServerPingMessage extends PooledDistributionMessage { private int processorId = 0; diff --git a/geode-core/src/main/java/com/gemstone/gemfire/internal/cache/StateFlushOperation.java b/geode-core/src/main/java/com/gemstone/gemfire/internal/cache/StateFlushOperation.java index e56c1262ef6c..947bd4d5f5ea 100644 --- a/geode-core/src/main/java/com/gemstone/gemfire/internal/cache/StateFlushOperation.java +++ b/geode-core/src/main/java/com/gemstone/gemfire/internal/cache/StateFlushOperation.java @@ -97,7 +97,6 @@ * complex examples in transaction processing and a more straightforward * example in DistributedCacheOperation. * - * @author Bruce Schuchardt * @since 5.0.1 */ public class StateFlushOperation { @@ -275,7 +274,6 @@ public boolean flush( * This flushes the ordered messages in flight between members and the gii * provider, so we don't miss data when the image is requested. * - * @author bruce * @since 5.0.1 * @see StateFlushOperation.StateStabilizationMessage * @see StateFlushOperation.StateStabilizedMessage diff --git a/geode-core/src/main/java/com/gemstone/gemfire/internal/cache/StoreAllCachedDeserializable.java b/geode-core/src/main/java/com/gemstone/gemfire/internal/cache/StoreAllCachedDeserializable.java index 7d94281cc7af..15045e43d624 100644 --- a/geode-core/src/main/java/com/gemstone/gemfire/internal/cache/StoreAllCachedDeserializable.java +++ b/geode-core/src/main/java/com/gemstone/gemfire/internal/cache/StoreAllCachedDeserializable.java @@ -32,7 +32,6 @@ * This cache deserializable always keeps its byte[] in serialized form * and the object form. * - * @author Darrel * @since 5.5 * */ diff --git a/geode-core/src/main/java/com/gemstone/gemfire/internal/cache/TXBucketRegionState.java b/geode-core/src/main/java/com/gemstone/gemfire/internal/cache/TXBucketRegionState.java index a6e51affb7be..dab7c7065e25 100644 --- a/geode-core/src/main/java/com/gemstone/gemfire/internal/cache/TXBucketRegionState.java +++ b/geode-core/src/main/java/com/gemstone/gemfire/internal/cache/TXBucketRegionState.java @@ -20,7 +20,6 @@ package com.gemstone.gemfire.internal.cache; /** - * @author mthomas * */ public class TXBucketRegionState extends TXRegionState { diff --git a/geode-core/src/main/java/com/gemstone/gemfire/internal/cache/TXCommitMessage.java b/geode-core/src/main/java/com/gemstone/gemfire/internal/cache/TXCommitMessage.java index e712943c502a..1a4d3777fc9e 100644 --- a/geode-core/src/main/java/com/gemstone/gemfire/internal/cache/TXCommitMessage.java +++ b/geode-core/src/main/java/com/gemstone/gemfire/internal/cache/TXCommitMessage.java @@ -79,7 +79,6 @@ /** TXCommitMessage is the message that contains all the information * that needs to be distributed, on commit, to other cache members. * - * @author Darrel Schneider * @since 4.0 * */ @@ -2225,7 +2224,6 @@ private void updateLockMembers() { /** * Reply processor which collects all CommitReplyExceptions and emits * a detailed failure exception if problems occur - * @author Mitch Thomas * @since 5.7 */ private class CommitReplyProcessor extends ReliableReplyProcessor21 { @@ -2291,7 +2289,6 @@ public Set getRegionDestroyedMembers(String regionFullPath) { /** * An Exception that collects many remote CommitExceptions - * @author Mitch Thomas * @since 5.7 */ public static class CommitExceptionCollectingException extends ReplyException { diff --git a/geode-core/src/main/java/com/gemstone/gemfire/internal/cache/TXEntryState.java b/geode-core/src/main/java/com/gemstone/gemfire/internal/cache/TXEntryState.java index 9883d31794dc..1964c2829432 100644 --- a/geode-core/src/main/java/com/gemstone/gemfire/internal/cache/TXEntryState.java +++ b/geode-core/src/main/java/com/gemstone/gemfire/internal/cache/TXEntryState.java @@ -63,7 +63,6 @@ * TXEntryState is the entity that tracks transactional changes, except for * those tracked by {@link TXEntryUserAttrState}, to an entry. * - * @author Darrel Schneider * * @since 4.0 * @@ -2198,7 +2197,6 @@ public void setDistTxEntryStates(DistTxThinEntryState thinEntryState) { * Whereas @see DistTxEntryEvent is used forstoring entry event information on * TxCordinator and carry same to replicates. * - * @author vivekb */ public static class DistTxThinEntryState implements DataSerializableFixedID { diff --git a/geode-core/src/main/java/com/gemstone/gemfire/internal/cache/TXEntryStateFactory.java b/geode-core/src/main/java/com/gemstone/gemfire/internal/cache/TXEntryStateFactory.java index d6f48a2158ad..3cb5d370a66a 100644 --- a/geode-core/src/main/java/com/gemstone/gemfire/internal/cache/TXEntryStateFactory.java +++ b/geode-core/src/main/java/com/gemstone/gemfire/internal/cache/TXEntryStateFactory.java @@ -20,7 +20,6 @@ /** * - * @author Asif * */ public interface TXEntryStateFactory diff --git a/geode-core/src/main/java/com/gemstone/gemfire/internal/cache/TXEntryUserAttrState.java b/geode-core/src/main/java/com/gemstone/gemfire/internal/cache/TXEntryUserAttrState.java index 021512c16c0d..25d4dd10241c 100644 --- a/geode-core/src/main/java/com/gemstone/gemfire/internal/cache/TXEntryUserAttrState.java +++ b/geode-core/src/main/java/com/gemstone/gemfire/internal/cache/TXEntryUserAttrState.java @@ -24,7 +24,6 @@ * TXEntryUserAttrState is the entity that tracks transactional changes * to an entry user attribute. * - * @author Darrel Schneider * * @since 4.0 * diff --git a/geode-core/src/main/java/com/gemstone/gemfire/internal/cache/TXEvent.java b/geode-core/src/main/java/com/gemstone/gemfire/internal/cache/TXEvent.java index 409a1546c51e..e686ceae6ac0 100644 --- a/geode-core/src/main/java/com/gemstone/gemfire/internal/cache/TXEvent.java +++ b/geode-core/src/main/java/com/gemstone/gemfire/internal/cache/TXEvent.java @@ -22,7 +22,6 @@ /**

    The internal implementation of the {@link TransactionEvent} interface * - * @author Darrel Schneider * * @since 4.0 * diff --git a/geode-core/src/main/java/com/gemstone/gemfire/internal/cache/TXFarSideCMTracker.java b/geode-core/src/main/java/com/gemstone/gemfire/internal/cache/TXFarSideCMTracker.java index 94e3059d5fe9..e5011a478e4a 100644 --- a/geode-core/src/main/java/com/gemstone/gemfire/internal/cache/TXFarSideCMTracker.java +++ b/geode-core/src/main/java/com/gemstone/gemfire/internal/cache/TXFarSideCMTracker.java @@ -66,7 +66,6 @@ * * * - * @author Mitch Thomas * @since 4.0 * */ diff --git a/geode-core/src/main/java/com/gemstone/gemfire/internal/cache/TXId.java b/geode-core/src/main/java/com/gemstone/gemfire/internal/cache/TXId.java index 063ad5d93580..b5faa7a7ce2c 100644 --- a/geode-core/src/main/java/com/gemstone/gemfire/internal/cache/TXId.java +++ b/geode-core/src/main/java/com/gemstone/gemfire/internal/cache/TXId.java @@ -29,7 +29,6 @@ * identify a transaction in a confederation of transaction * participants (currently VM in a Distributed System). * - * @author Mitch Thomas * * @since 4.0 * diff --git a/geode-core/src/main/java/com/gemstone/gemfire/internal/cache/TXLockRequest.java b/geode-core/src/main/java/com/gemstone/gemfire/internal/cache/TXLockRequest.java index f33ca4752891..da55d4551115 100644 --- a/geode-core/src/main/java/com/gemstone/gemfire/internal/cache/TXLockRequest.java +++ b/geode-core/src/main/java/com/gemstone/gemfire/internal/cache/TXLockRequest.java @@ -24,7 +24,6 @@ /** TXLockRequest represents all the locks that need to be made * for a single transaction. * - * @author Darrel Schneider * * @since 4.0 * diff --git a/geode-core/src/main/java/com/gemstone/gemfire/internal/cache/TXManagerImpl.java b/geode-core/src/main/java/com/gemstone/gemfire/internal/cache/TXManagerImpl.java index de49fead8e01..9a1d08d178b7 100644 --- a/geode-core/src/main/java/com/gemstone/gemfire/internal/cache/TXManagerImpl.java +++ b/geode-core/src/main/java/com/gemstone/gemfire/internal/cache/TXManagerImpl.java @@ -79,7 +79,6 @@ * transaction logging are handled here * - * @author Mitch Thomas * * @since 4.0 * @@ -1300,7 +1299,6 @@ private void scheduleExpiry(TransactionId txId, TimeUnit expiryTimeUnit) { /** * Task scheduled to expire a transaction when it is suspended. * This task gets canceled if the transaction is resumed. - * @author sbawaska */ public static class TXExpiryTask extends SystemTimerTask { diff --git a/geode-core/src/main/java/com/gemstone/gemfire/internal/cache/TXMessage.java b/geode-core/src/main/java/com/gemstone/gemfire/internal/cache/TXMessage.java index ab31d3bb02c2..4918508580ce 100644 --- a/geode-core/src/main/java/com/gemstone/gemfire/internal/cache/TXMessage.java +++ b/geode-core/src/main/java/com/gemstone/gemfire/internal/cache/TXMessage.java @@ -43,7 +43,6 @@ /** * - * @author sbawaska * */ public abstract class TXMessage extends SerialDistributionMessage diff --git a/geode-core/src/main/java/com/gemstone/gemfire/internal/cache/TXRegionLockRequestImpl.java b/geode-core/src/main/java/com/gemstone/gemfire/internal/cache/TXRegionLockRequestImpl.java index 21ace6ab8117..29af5cc96334 100644 --- a/geode-core/src/main/java/com/gemstone/gemfire/internal/cache/TXRegionLockRequestImpl.java +++ b/geode-core/src/main/java/com/gemstone/gemfire/internal/cache/TXRegionLockRequestImpl.java @@ -34,7 +34,6 @@ /** TXRegionLockRequest represents all the locks that need to be made * for a single region. * - * @author Darrel Schneider * * @since 4.0 * diff --git a/geode-core/src/main/java/com/gemstone/gemfire/internal/cache/TXRegionState.java b/geode-core/src/main/java/com/gemstone/gemfire/internal/cache/TXRegionState.java index 8e52c014ae7c..c948f55dd99a 100644 --- a/geode-core/src/main/java/com/gemstone/gemfire/internal/cache/TXRegionState.java +++ b/geode-core/src/main/java/com/gemstone/gemfire/internal/cache/TXRegionState.java @@ -31,7 +31,6 @@ /** TXRegionState is the entity that tracks all the changes a transaction * has made to a region. * - * @author Darrel Schneider * * @since 4.0 * diff --git a/geode-core/src/main/java/com/gemstone/gemfire/internal/cache/TXRemoteCommitMessage.java b/geode-core/src/main/java/com/gemstone/gemfire/internal/cache/TXRemoteCommitMessage.java index 4716c47c59cb..cd75864d2f60 100644 --- a/geode-core/src/main/java/com/gemstone/gemfire/internal/cache/TXRemoteCommitMessage.java +++ b/geode-core/src/main/java/com/gemstone/gemfire/internal/cache/TXRemoteCommitMessage.java @@ -44,7 +44,6 @@ /** * - * @author sbawaska * */ public class TXRemoteCommitMessage extends TXMessage { @@ -261,7 +260,6 @@ public TXCommitMessage getCommitMessage() { * A processor to capture the value returned by {@link * com.gemstone.gemfire.internal.cache.TXRemoteCommitMessage.TXRemoteCommitReplyMessage} * - * @author gregp * @since 6.6 */ public static class RemoteCommitResponse extends RemoteOperationResponse diff --git a/geode-core/src/main/java/com/gemstone/gemfire/internal/cache/TXRemoteRollbackMessage.java b/geode-core/src/main/java/com/gemstone/gemfire/internal/cache/TXRemoteRollbackMessage.java index e8756b9e7108..96677f6b285e 100644 --- a/geode-core/src/main/java/com/gemstone/gemfire/internal/cache/TXRemoteRollbackMessage.java +++ b/geode-core/src/main/java/com/gemstone/gemfire/internal/cache/TXRemoteRollbackMessage.java @@ -34,7 +34,6 @@ /** * - * @author sbawaska * */ public class TXRemoteRollbackMessage extends TXMessage { diff --git a/geode-core/src/main/java/com/gemstone/gemfire/internal/cache/TXReservationMgr.java b/geode-core/src/main/java/com/gemstone/gemfire/internal/cache/TXReservationMgr.java index 965a54ea8b1d..592c21e9bcb6 100644 --- a/geode-core/src/main/java/com/gemstone/gemfire/internal/cache/TXReservationMgr.java +++ b/geode-core/src/main/java/com/gemstone/gemfire/internal/cache/TXReservationMgr.java @@ -25,7 +25,6 @@ /** Used to reserve region entries, during a transaction commit, * for modification by the transaction. * - * @author Darrel Schneider * * @since 4.0 * diff --git a/geode-core/src/main/java/com/gemstone/gemfire/internal/cache/TXRmtEvent.java b/geode-core/src/main/java/com/gemstone/gemfire/internal/cache/TXRmtEvent.java index 3f3cf59507cd..b378c8e5949c 100644 --- a/geode-core/src/main/java/com/gemstone/gemfire/internal/cache/TXRmtEvent.java +++ b/geode-core/src/main/java/com/gemstone/gemfire/internal/cache/TXRmtEvent.java @@ -34,7 +34,6 @@ * The internal implementation of the {@link TransactionEvent}interface used by * the remote commit code. * - * @author Darrel Schneider * * @since 4.0 * diff --git a/geode-core/src/main/java/com/gemstone/gemfire/internal/cache/TXState.java b/geode-core/src/main/java/com/gemstone/gemfire/internal/cache/TXState.java index 8215957de44e..18ecf2241287 100644 --- a/geode-core/src/main/java/com/gemstone/gemfire/internal/cache/TXState.java +++ b/geode-core/src/main/java/com/gemstone/gemfire/internal/cache/TXState.java @@ -68,7 +68,6 @@ * thread basis, noting changes to Region entries on a per operation * basis. It lives on the node where transaction data exists. * - * @author Mitch Thomas * * @since 4.0 * diff --git a/geode-core/src/main/java/com/gemstone/gemfire/internal/cache/TXStateInterface.java b/geode-core/src/main/java/com/gemstone/gemfire/internal/cache/TXStateInterface.java index 4fa97b8d9f28..5da20d874ba0 100644 --- a/geode-core/src/main/java/com/gemstone/gemfire/internal/cache/TXStateInterface.java +++ b/geode-core/src/main/java/com/gemstone/gemfire/internal/cache/TXStateInterface.java @@ -37,7 +37,6 @@ /** * An entity that tracks transactions must implement this interface. * - * @author mthomas */ public interface TXStateInterface extends Synchronization, InternalDataView { diff --git a/geode-core/src/main/java/com/gemstone/gemfire/internal/cache/TXStateProxy.java b/geode-core/src/main/java/com/gemstone/gemfire/internal/cache/TXStateProxy.java index dc8efddde993..ba9866efccc1 100644 --- a/geode-core/src/main/java/com/gemstone/gemfire/internal/cache/TXStateProxy.java +++ b/geode-core/src/main/java/com/gemstone/gemfire/internal/cache/TXStateProxy.java @@ -27,7 +27,6 @@ * This interface extends {@link TXStateInterface} providing for a proxy for the * real transaction on a remote data store node. * - * @author mthomas */ public interface TXStateProxy extends TXStateInterface { diff --git a/geode-core/src/main/java/com/gemstone/gemfire/internal/cache/TXStateProxyImpl.java b/geode-core/src/main/java/com/gemstone/gemfire/internal/cache/TXStateProxyImpl.java index fda1a3ad58cb..e66302ed341e 100644 --- a/geode-core/src/main/java/com/gemstone/gemfire/internal/cache/TXStateProxyImpl.java +++ b/geode-core/src/main/java/com/gemstone/gemfire/internal/cache/TXStateProxyImpl.java @@ -51,7 +51,6 @@ import com.gemstone.gemfire.internal.logging.log4j.LocalizedMessage; /** - * @author mthomas * */ public class TXStateProxyImpl implements TXStateProxy { diff --git a/geode-core/src/main/java/com/gemstone/gemfire/internal/cache/TXStateStub.java b/geode-core/src/main/java/com/gemstone/gemfire/internal/cache/TXStateStub.java index 373910a4ffa0..ac35425fad61 100644 --- a/geode-core/src/main/java/com/gemstone/gemfire/internal/cache/TXStateStub.java +++ b/geode-core/src/main/java/com/gemstone/gemfire/internal/cache/TXStateStub.java @@ -49,7 +49,6 @@ * TXStateStub lives on the accessor node when we are remoting * a transaction. It is a stub for {@link TXState}. * - * @author gregp, sbawaska * */ public abstract class TXStateStub implements TXStateInterface { diff --git a/geode-core/src/main/java/com/gemstone/gemfire/internal/cache/TXSynchronizationRunnable.java b/geode-core/src/main/java/com/gemstone/gemfire/internal/cache/TXSynchronizationRunnable.java index 5ea318dddbf5..1d5f80ec2d1d 100644 --- a/geode-core/src/main/java/com/gemstone/gemfire/internal/cache/TXSynchronizationRunnable.java +++ b/geode-core/src/main/java/com/gemstone/gemfire/internal/cache/TXSynchronizationRunnable.java @@ -28,7 +28,6 @@ * must invoke runSecondRunnable() with another Runnable that invokes * afterCompletion behavior. * - * @author Bruce Schuchardt * @since 6.6 * */ diff --git a/geode-core/src/main/java/com/gemstone/gemfire/internal/cache/TestHeapThresholdObserver.java b/geode-core/src/main/java/com/gemstone/gemfire/internal/cache/TestHeapThresholdObserver.java index fed07645e6ac..f8a867dcf66c 100755 --- a/geode-core/src/main/java/com/gemstone/gemfire/internal/cache/TestHeapThresholdObserver.java +++ b/geode-core/src/main/java/com/gemstone/gemfire/internal/cache/TestHeapThresholdObserver.java @@ -19,7 +19,6 @@ /** * Test only hand back object passed to * - * @author Amardeep Rajpal * */ public class TestHeapThresholdObserver { diff --git a/geode-core/src/main/java/com/gemstone/gemfire/internal/cache/TimestampedEntryEventImpl.java b/geode-core/src/main/java/com/gemstone/gemfire/internal/cache/TimestampedEntryEventImpl.java index f7412e989717..fca7d62d5261 100644 --- a/geode-core/src/main/java/com/gemstone/gemfire/internal/cache/TimestampedEntryEventImpl.java +++ b/geode-core/src/main/java/com/gemstone/gemfire/internal/cache/TimestampedEntryEventImpl.java @@ -21,7 +21,6 @@ /** * A subclass of EntryEventImpl used in WAN conflict resolution * - * @author Bruce Schuchardt */ public class TimestampedEntryEventImpl extends EntryEventImpl implements TimestampedEntryEvent { diff --git a/geode-core/src/main/java/com/gemstone/gemfire/internal/cache/Token.java b/geode-core/src/main/java/com/gemstone/gemfire/internal/cache/Token.java index ae393a06c26b..0f731e0e4a9a 100644 --- a/geode-core/src/main/java/com/gemstone/gemfire/internal/cache/Token.java +++ b/geode-core/src/main/java/com/gemstone/gemfire/internal/cache/Token.java @@ -35,7 +35,6 @@ * These classes are Serializable and implement readResolve to support * canonicalization in the face of copysharing. * - * @author Eric Zoerner */ public abstract class Token { diff --git a/geode-core/src/main/java/com/gemstone/gemfire/internal/cache/TombstoneService.java b/geode-core/src/main/java/com/gemstone/gemfire/internal/cache/TombstoneService.java index 0814b34d371f..44c5d58d6bb0 100644 --- a/geode-core/src/main/java/com/gemstone/gemfire/internal/cache/TombstoneService.java +++ b/geode-core/src/main/java/com/gemstone/gemfire/internal/cache/TombstoneService.java @@ -57,7 +57,6 @@ * The cache holds a tombstone service that is responsible for tracking * and timing out tombstones. * - * @author bruce */ public class TombstoneService implements ResourceListener { private static final Logger logger = LogService.getLogger(); diff --git a/geode-core/src/main/java/com/gemstone/gemfire/internal/cache/TransactionMessage.java b/geode-core/src/main/java/com/gemstone/gemfire/internal/cache/TransactionMessage.java index 82b9e784f715..3c7c93ae8662 100644 --- a/geode-core/src/main/java/com/gemstone/gemfire/internal/cache/TransactionMessage.java +++ b/geode-core/src/main/java/com/gemstone/gemfire/internal/cache/TransactionMessage.java @@ -25,7 +25,6 @@ /** * Messages that carry transaction information will implement this interface * - * @author sbawaska */ public interface TransactionMessage { /** diff --git a/geode-core/src/main/java/com/gemstone/gemfire/internal/cache/TxEntryFactory.java b/geode-core/src/main/java/com/gemstone/gemfire/internal/cache/TxEntryFactory.java index 14f36512973c..db93886c9596 100644 --- a/geode-core/src/main/java/com/gemstone/gemfire/internal/cache/TxEntryFactory.java +++ b/geode-core/src/main/java/com/gemstone/gemfire/internal/cache/TxEntryFactory.java @@ -17,7 +17,6 @@ package com.gemstone.gemfire.internal.cache; /** * - * @author ashahid * */ public interface TxEntryFactory diff --git a/geode-core/src/main/java/com/gemstone/gemfire/internal/cache/UnsharedImageState.java b/geode-core/src/main/java/com/gemstone/gemfire/internal/cache/UnsharedImageState.java index 4ffb55a9a1a3..9920388ff356 100644 --- a/geode-core/src/main/java/com/gemstone/gemfire/internal/cache/UnsharedImageState.java +++ b/geode-core/src/main/java/com/gemstone/gemfire/internal/cache/UnsharedImageState.java @@ -39,8 +39,6 @@ * Also used on pool regions to track register interest. * Note that currently a region will never have both a GII and RI in progress * at the same time. - * @author Eric Zoerner - * @author darrel */ public class UnsharedImageState implements ImageState { private static final Logger logger = LogService.getLogger(); diff --git a/geode-core/src/main/java/com/gemstone/gemfire/internal/cache/UpdateAttributesProcessor.java b/geode-core/src/main/java/com/gemstone/gemfire/internal/cache/UpdateAttributesProcessor.java index c81eac1ad534..866eaffce1d2 100644 --- a/geode-core/src/main/java/com/gemstone/gemfire/internal/cache/UpdateAttributesProcessor.java +++ b/geode-core/src/main/java/com/gemstone/gemfire/internal/cache/UpdateAttributesProcessor.java @@ -52,7 +52,6 @@ * a DistributionAdvisee's profile out to others and, * optionally if profileExchange, * fetching the profile of anyone who excepts the pushed profile. - * @author Eric Zoerner * */ public class UpdateAttributesProcessor { diff --git a/geode-core/src/main/java/com/gemstone/gemfire/internal/cache/UpdateEntryVersionOperation.java b/geode-core/src/main/java/com/gemstone/gemfire/internal/cache/UpdateEntryVersionOperation.java index 466292bf93a9..a3d1c19a36f4 100644 --- a/geode-core/src/main/java/com/gemstone/gemfire/internal/cache/UpdateEntryVersionOperation.java +++ b/geode-core/src/main/java/com/gemstone/gemfire/internal/cache/UpdateEntryVersionOperation.java @@ -40,7 +40,6 @@ * This operation updates Version stamp of an entry if entry is available and * entry version stamp has same DSID as in event's version tag. * - * @author Shobhit Agarwal * */ public class UpdateEntryVersionOperation extends DistributedCacheOperation { diff --git a/geode-core/src/main/java/com/gemstone/gemfire/internal/cache/UpdateOperation.java b/geode-core/src/main/java/com/gemstone/gemfire/internal/cache/UpdateOperation.java index d26f50ca0c76..6c39c9898e57 100644 --- a/geode-core/src/main/java/com/gemstone/gemfire/internal/cache/UpdateOperation.java +++ b/geode-core/src/main/java/com/gemstone/gemfire/internal/cache/UpdateOperation.java @@ -53,7 +53,6 @@ /** * Handles distribution messaging for updating an entry in a region. * - * @author Eric Zoerner */ public class UpdateOperation extends AbstractUpdateOperation { diff --git a/geode-core/src/main/java/com/gemstone/gemfire/internal/cache/UserSpecifiedDiskStoreAttributes.java b/geode-core/src/main/java/com/gemstone/gemfire/internal/cache/UserSpecifiedDiskStoreAttributes.java index 5c1fd72cff55..fc0dee795946 100644 --- a/geode-core/src/main/java/com/gemstone/gemfire/internal/cache/UserSpecifiedDiskStoreAttributes.java +++ b/geode-core/src/main/java/com/gemstone/gemfire/internal/cache/UserSpecifiedDiskStoreAttributes.java @@ -27,7 +27,6 @@ * {@link com.gemstone.gemfire.cache.DiskStoreFactory}. Its initial usage was to validate * when a user set a value which should not be set (for DiskStore). * - * @author Gester * @since prPersistSprint2 * */ diff --git a/geode-core/src/main/java/com/gemstone/gemfire/internal/cache/UserSpecifiedRegionAttributes.java b/geode-core/src/main/java/com/gemstone/gemfire/internal/cache/UserSpecifiedRegionAttributes.java index 806c050e5401..a17650c37858 100644 --- a/geode-core/src/main/java/com/gemstone/gemfire/internal/cache/UserSpecifiedRegionAttributes.java +++ b/geode-core/src/main/java/com/gemstone/gemfire/internal/cache/UserSpecifiedRegionAttributes.java @@ -30,7 +30,6 @@ * {@link com.gemstone.gemfire.cache.AttributesFactory}. Its initial usage was to validate * when a user set a value which should not be set (for PartitionedRegions). * - * @author Mitch Thomas * @since 5.1 * */ diff --git a/geode-core/src/main/java/com/gemstone/gemfire/internal/cache/VMCachedDeserializable.java b/geode-core/src/main/java/com/gemstone/gemfire/internal/cache/VMCachedDeserializable.java index c5d3c6eb66f6..b7e895b32278 100644 --- a/geode-core/src/main/java/com/gemstone/gemfire/internal/cache/VMCachedDeserializable.java +++ b/geode-core/src/main/java/com/gemstone/gemfire/internal/cache/VMCachedDeserializable.java @@ -35,7 +35,6 @@ * The first time someone asks this instance for its Object it will deserialize * the bytes and from then on keep a reference to the deserialized form. * So it "prefers deserialization". - * @author Eric Zoerner * */ public final class VMCachedDeserializable implements CachedDeserializable, DataSerializableFixedID { diff --git a/geode-core/src/main/java/com/gemstone/gemfire/internal/cache/VMLRURegionMap.java b/geode-core/src/main/java/com/gemstone/gemfire/internal/cache/VMLRURegionMap.java index de05dd2f1252..0ee6a27681f1 100644 --- a/geode-core/src/main/java/com/gemstone/gemfire/internal/cache/VMLRURegionMap.java +++ b/geode-core/src/main/java/com/gemstone/gemfire/internal/cache/VMLRURegionMap.java @@ -26,7 +26,6 @@ * * @since 3.5.1 * - * @author Darrel Schneider * */ final class VMLRURegionMap extends AbstractLRURegionMap { diff --git a/geode-core/src/main/java/com/gemstone/gemfire/internal/cache/VMRegionMap.java b/geode-core/src/main/java/com/gemstone/gemfire/internal/cache/VMRegionMap.java index e5b8fe790fab..bf2483eb1292 100644 --- a/geode-core/src/main/java/com/gemstone/gemfire/internal/cache/VMRegionMap.java +++ b/geode-core/src/main/java/com/gemstone/gemfire/internal/cache/VMRegionMap.java @@ -23,7 +23,6 @@ * * @since 3.5.1 * - * @author Darrel Schneider * */ final class VMRegionMap extends AbstractRegionMap { diff --git a/geode-core/src/main/java/com/gemstone/gemfire/internal/cache/VMStatsDiskLRURegionEntry.java b/geode-core/src/main/java/com/gemstone/gemfire/internal/cache/VMStatsDiskLRURegionEntry.java index 6f2cb0385268..49a4530d9221 100644 --- a/geode-core/src/main/java/com/gemstone/gemfire/internal/cache/VMStatsDiskLRURegionEntry.java +++ b/geode-core/src/main/java/com/gemstone/gemfire/internal/cache/VMStatsDiskLRURegionEntry.java @@ -26,7 +26,6 @@ * * @since 3.5.1 * - * @author Darrel Schneider * */ public abstract class VMStatsDiskLRURegionEntry diff --git a/geode-core/src/main/java/com/gemstone/gemfire/internal/cache/VMStatsDiskRegionEntry.java b/geode-core/src/main/java/com/gemstone/gemfire/internal/cache/VMStatsDiskRegionEntry.java index 9daa2d7aff68..4de5613dc936 100644 --- a/geode-core/src/main/java/com/gemstone/gemfire/internal/cache/VMStatsDiskRegionEntry.java +++ b/geode-core/src/main/java/com/gemstone/gemfire/internal/cache/VMStatsDiskRegionEntry.java @@ -25,7 +25,6 @@ * * @since 3.5.1 * - * @author Darrel Schneider * */ public abstract class VMStatsDiskRegionEntry diff --git a/geode-core/src/main/java/com/gemstone/gemfire/internal/cache/VMStatsLRURegionEntry.java b/geode-core/src/main/java/com/gemstone/gemfire/internal/cache/VMStatsLRURegionEntry.java index 11579810ad32..d008890a98e3 100644 --- a/geode-core/src/main/java/com/gemstone/gemfire/internal/cache/VMStatsLRURegionEntry.java +++ b/geode-core/src/main/java/com/gemstone/gemfire/internal/cache/VMStatsLRURegionEntry.java @@ -25,7 +25,6 @@ * * @since 3.5.1 * - * @author Darrel Schneider * */ public abstract class VMStatsLRURegionEntry extends AbstractLRURegionEntry diff --git a/geode-core/src/main/java/com/gemstone/gemfire/internal/cache/VMStatsRegionEntry.java b/geode-core/src/main/java/com/gemstone/gemfire/internal/cache/VMStatsRegionEntry.java index 08eaff65e232..7951233d8bc0 100644 --- a/geode-core/src/main/java/com/gemstone/gemfire/internal/cache/VMStatsRegionEntry.java +++ b/geode-core/src/main/java/com/gemstone/gemfire/internal/cache/VMStatsRegionEntry.java @@ -24,7 +24,6 @@ * * @since 3.5.1 * - * @author Darrel Schneider * */ public abstract class VMStatsRegionEntry extends AbstractRegionEntry { diff --git a/geode-core/src/main/java/com/gemstone/gemfire/internal/cache/VMThinDiskLRURegionEntry.java b/geode-core/src/main/java/com/gemstone/gemfire/internal/cache/VMThinDiskLRURegionEntry.java index 07e1675f29d4..24a36965cf39 100644 --- a/geode-core/src/main/java/com/gemstone/gemfire/internal/cache/VMThinDiskLRURegionEntry.java +++ b/geode-core/src/main/java/com/gemstone/gemfire/internal/cache/VMThinDiskLRURegionEntry.java @@ -27,7 +27,6 @@ * * @since 3.5.1 * - * @author Darrel Schneider * */ public abstract class VMThinDiskLRURegionEntry diff --git a/geode-core/src/main/java/com/gemstone/gemfire/internal/cache/VMThinDiskRegionEntry.java b/geode-core/src/main/java/com/gemstone/gemfire/internal/cache/VMThinDiskRegionEntry.java index 83383275b3fe..74a93268dcb7 100644 --- a/geode-core/src/main/java/com/gemstone/gemfire/internal/cache/VMThinDiskRegionEntry.java +++ b/geode-core/src/main/java/com/gemstone/gemfire/internal/cache/VMThinDiskRegionEntry.java @@ -29,7 +29,6 @@ * * @since 3.5.1 * - * @author Darrel Schneider * */ public abstract class VMThinDiskRegionEntry diff --git a/geode-core/src/main/java/com/gemstone/gemfire/internal/cache/VMThinLRURegionEntry.java b/geode-core/src/main/java/com/gemstone/gemfire/internal/cache/VMThinLRURegionEntry.java index 2e014b47e1da..9b43c4f4af3f 100644 --- a/geode-core/src/main/java/com/gemstone/gemfire/internal/cache/VMThinLRURegionEntry.java +++ b/geode-core/src/main/java/com/gemstone/gemfire/internal/cache/VMThinLRURegionEntry.java @@ -25,7 +25,6 @@ * * @since 3.5.1 * - * @author Darrel Schneider * */ public abstract class VMThinLRURegionEntry extends AbstractLRURegionEntry diff --git a/geode-core/src/main/java/com/gemstone/gemfire/internal/cache/VMThinRegionEntry.java b/geode-core/src/main/java/com/gemstone/gemfire/internal/cache/VMThinRegionEntry.java index bdc05c3ac9f4..b9662466fa33 100644 --- a/geode-core/src/main/java/com/gemstone/gemfire/internal/cache/VMThinRegionEntry.java +++ b/geode-core/src/main/java/com/gemstone/gemfire/internal/cache/VMThinRegionEntry.java @@ -24,7 +24,6 @@ * * @since 3.5.1 * - * @author Darrel Schneider * */ public abstract class VMThinRegionEntry extends AbstractRegionEntry { diff --git a/geode-core/src/main/java/com/gemstone/gemfire/internal/cache/VersionTimestamp.java b/geode-core/src/main/java/com/gemstone/gemfire/internal/cache/VersionTimestamp.java index 10f1b7858c0c..83a89937f248 100644 --- a/geode-core/src/main/java/com/gemstone/gemfire/internal/cache/VersionTimestamp.java +++ b/geode-core/src/main/java/com/gemstone/gemfire/internal/cache/VersionTimestamp.java @@ -18,7 +18,6 @@ /** * - * @author russell */ public class VersionTimestamp { diff --git a/geode-core/src/main/java/com/gemstone/gemfire/internal/cache/VersionedStatsDiskLRURegionEntry.java b/geode-core/src/main/java/com/gemstone/gemfire/internal/cache/VersionedStatsDiskLRURegionEntry.java index 4ba4bec7fdc4..529a3efaaa0a 100644 --- a/geode-core/src/main/java/com/gemstone/gemfire/internal/cache/VersionedStatsDiskLRURegionEntry.java +++ b/geode-core/src/main/java/com/gemstone/gemfire/internal/cache/VersionedStatsDiskLRURegionEntry.java @@ -19,7 +19,6 @@ import com.gemstone.gemfire.internal.cache.versions.VersionStamp; /** - * @author bruce * */ public abstract class VersionedStatsDiskLRURegionEntry extends VMStatsDiskLRURegionEntry diff --git a/geode-core/src/main/java/com/gemstone/gemfire/internal/cache/VersionedStatsDiskRegionEntry.java b/geode-core/src/main/java/com/gemstone/gemfire/internal/cache/VersionedStatsDiskRegionEntry.java index 0fd150975124..afabc53d3860 100644 --- a/geode-core/src/main/java/com/gemstone/gemfire/internal/cache/VersionedStatsDiskRegionEntry.java +++ b/geode-core/src/main/java/com/gemstone/gemfire/internal/cache/VersionedStatsDiskRegionEntry.java @@ -19,7 +19,6 @@ import com.gemstone.gemfire.internal.cache.versions.VersionStamp; /** - * @author bruce * */ public abstract class VersionedStatsDiskRegionEntry extends VMStatsDiskRegionEntry diff --git a/geode-core/src/main/java/com/gemstone/gemfire/internal/cache/VersionedStatsLRURegionEntry.java b/geode-core/src/main/java/com/gemstone/gemfire/internal/cache/VersionedStatsLRURegionEntry.java index 8cd01a5fb773..f482f6e40c7d 100644 --- a/geode-core/src/main/java/com/gemstone/gemfire/internal/cache/VersionedStatsLRURegionEntry.java +++ b/geode-core/src/main/java/com/gemstone/gemfire/internal/cache/VersionedStatsLRURegionEntry.java @@ -19,7 +19,6 @@ import com.gemstone.gemfire.internal.cache.versions.VersionStamp; /** - * @author bruce * */ public abstract class VersionedStatsLRURegionEntry extends VMStatsLRURegionEntry diff --git a/geode-core/src/main/java/com/gemstone/gemfire/internal/cache/VersionedStatsRegionEntry.java b/geode-core/src/main/java/com/gemstone/gemfire/internal/cache/VersionedStatsRegionEntry.java index 797e3d328530..a2db8be8b7a1 100644 --- a/geode-core/src/main/java/com/gemstone/gemfire/internal/cache/VersionedStatsRegionEntry.java +++ b/geode-core/src/main/java/com/gemstone/gemfire/internal/cache/VersionedStatsRegionEntry.java @@ -19,7 +19,6 @@ import com.gemstone.gemfire.internal.cache.versions.VersionStamp; /** - * @author bruce * */ public abstract class VersionedStatsRegionEntry extends VMStatsRegionEntry diff --git a/geode-core/src/main/java/com/gemstone/gemfire/internal/cache/VersionedThinDiskLRURegionEntry.java b/geode-core/src/main/java/com/gemstone/gemfire/internal/cache/VersionedThinDiskLRURegionEntry.java index 3e1634582cdc..19b4c5649d05 100644 --- a/geode-core/src/main/java/com/gemstone/gemfire/internal/cache/VersionedThinDiskLRURegionEntry.java +++ b/geode-core/src/main/java/com/gemstone/gemfire/internal/cache/VersionedThinDiskLRURegionEntry.java @@ -19,7 +19,6 @@ import com.gemstone.gemfire.internal.cache.versions.VersionStamp; /** - * @author bruce * */ public abstract class VersionedThinDiskLRURegionEntry extends VMThinDiskLRURegionEntry diff --git a/geode-core/src/main/java/com/gemstone/gemfire/internal/cache/VersionedThinDiskRegionEntry.java b/geode-core/src/main/java/com/gemstone/gemfire/internal/cache/VersionedThinDiskRegionEntry.java index 0bb87c6cc667..76be8744c747 100644 --- a/geode-core/src/main/java/com/gemstone/gemfire/internal/cache/VersionedThinDiskRegionEntry.java +++ b/geode-core/src/main/java/com/gemstone/gemfire/internal/cache/VersionedThinDiskRegionEntry.java @@ -19,7 +19,6 @@ import com.gemstone.gemfire.internal.cache.versions.VersionStamp; /** - * @author bruce * */ public abstract class VersionedThinDiskRegionEntry extends VMThinDiskRegionEntry diff --git a/geode-core/src/main/java/com/gemstone/gemfire/internal/cache/VersionedThinLRURegionEntry.java b/geode-core/src/main/java/com/gemstone/gemfire/internal/cache/VersionedThinLRURegionEntry.java index daffdc379ac1..dd9239eff8bf 100644 --- a/geode-core/src/main/java/com/gemstone/gemfire/internal/cache/VersionedThinLRURegionEntry.java +++ b/geode-core/src/main/java/com/gemstone/gemfire/internal/cache/VersionedThinLRURegionEntry.java @@ -23,7 +23,6 @@ import com.gemstone.gemfire.internal.cache.versions.VersionTag; /** - * @author bruce * */ public abstract class VersionedThinLRURegionEntry extends VMThinLRURegionEntry diff --git a/geode-core/src/main/java/com/gemstone/gemfire/internal/cache/VersionedThinRegionEntry.java b/geode-core/src/main/java/com/gemstone/gemfire/internal/cache/VersionedThinRegionEntry.java index fbcfe3ccc407..47aad77038a7 100644 --- a/geode-core/src/main/java/com/gemstone/gemfire/internal/cache/VersionedThinRegionEntry.java +++ b/geode-core/src/main/java/com/gemstone/gemfire/internal/cache/VersionedThinRegionEntry.java @@ -19,7 +19,6 @@ import com.gemstone.gemfire.internal.cache.versions.VersionStamp; /** - * @author bruce * */ public abstract class VersionedThinRegionEntry extends VMThinRegionEntry diff --git a/geode-core/src/main/java/com/gemstone/gemfire/internal/cache/WrappedCallbackArgument.java b/geode-core/src/main/java/com/gemstone/gemfire/internal/cache/WrappedCallbackArgument.java index be12a23b1aca..99a5cebbf718 100644 --- a/geode-core/src/main/java/com/gemstone/gemfire/internal/cache/WrappedCallbackArgument.java +++ b/geode-core/src/main/java/com/gemstone/gemfire/internal/cache/WrappedCallbackArgument.java @@ -30,7 +30,6 @@ * Customers should never see a callback arg that is an instance of this class. * It is for internal purposes only. * - * @author darrel * * @since 5.7 */ diff --git a/geode-core/src/main/java/com/gemstone/gemfire/internal/cache/WrappedRegionMembershipListener.java b/geode-core/src/main/java/com/gemstone/gemfire/internal/cache/WrappedRegionMembershipListener.java index 6e1d33851cf8..be0bec4ac535 100755 --- a/geode-core/src/main/java/com/gemstone/gemfire/internal/cache/WrappedRegionMembershipListener.java +++ b/geode-core/src/main/java/com/gemstone/gemfire/internal/cache/WrappedRegionMembershipListener.java @@ -26,7 +26,6 @@ * WrappedRegionMembershipListener is used during initialization of new * cache listeners at runtime, after the region has already been initialized * and is active. - * @author bruce */ class WrappedRegionMembershipListener implements RegionMembershipListener { diff --git a/geode-core/src/main/java/com/gemstone/gemfire/internal/cache/compression/CompressedCachedDeserializable.java b/geode-core/src/main/java/com/gemstone/gemfire/internal/cache/compression/CompressedCachedDeserializable.java index ff200acc1ca1..59e249d9660d 100644 --- a/geode-core/src/main/java/com/gemstone/gemfire/internal/cache/compression/CompressedCachedDeserializable.java +++ b/geode-core/src/main/java/com/gemstone/gemfire/internal/cache/compression/CompressedCachedDeserializable.java @@ -38,7 +38,6 @@ * An abstract implementation of {@link CachedDeserializable} that prefers serialization and compresses * the internal serialized value. * - * @author rholmes */ public abstract class CompressedCachedDeserializable implements CachedDeserializable, DataSerializableFixedID { diff --git a/geode-core/src/main/java/com/gemstone/gemfire/internal/cache/compression/SnappyCompressedCachedDeserializable.java b/geode-core/src/main/java/com/gemstone/gemfire/internal/cache/compression/SnappyCompressedCachedDeserializable.java index 05b65dd928b8..34854262aac2 100644 --- a/geode-core/src/main/java/com/gemstone/gemfire/internal/cache/compression/SnappyCompressedCachedDeserializable.java +++ b/geode-core/src/main/java/com/gemstone/gemfire/internal/cache/compression/SnappyCompressedCachedDeserializable.java @@ -28,7 +28,6 @@ * value overhead by sharing the same Snappy {@link Compressor} instance with * all instances of this class within the {@link Cache}. * - * @author rholmes */ public class SnappyCompressedCachedDeserializable extends CompressedCachedDeserializable { diff --git a/geode-core/src/main/java/com/gemstone/gemfire/internal/cache/control/FilterByPath.java b/geode-core/src/main/java/com/gemstone/gemfire/internal/cache/control/FilterByPath.java index 6ac363bc1e15..c814eee46292 100644 --- a/geode-core/src/main/java/com/gemstone/gemfire/internal/cache/control/FilterByPath.java +++ b/geode-core/src/main/java/com/gemstone/gemfire/internal/cache/control/FilterByPath.java @@ -22,7 +22,6 @@ import com.gemstone.gemfire.cache.Region; /** - * @author dsmith * */ public class FilterByPath implements RegionFilter { diff --git a/geode-core/src/main/java/com/gemstone/gemfire/internal/cache/control/HeapMemoryMonitor.java b/geode-core/src/main/java/com/gemstone/gemfire/internal/cache/control/HeapMemoryMonitor.java index 27a6dffe8d41..62c7b709db7f 100644 --- a/geode-core/src/main/java/com/gemstone/gemfire/internal/cache/control/HeapMemoryMonitor.java +++ b/geode-core/src/main/java/com/gemstone/gemfire/internal/cache/control/HeapMemoryMonitor.java @@ -61,10 +61,6 @@ * the MemoryMXBean, by polling the JVM and as a listener on GemFire Statistics * output in order to accommodate differences in the various JVMs. * - * @author Kirk Lund - * @author Mitch Thomas - * @author Swapnil Bawaskar - * @author David Hoots * @since 9.0 */ public class HeapMemoryMonitor implements NotificationListener, ResourceMonitor { @@ -814,7 +810,6 @@ public String toString() { /** * Polls the heap if stat sampling is disabled. * - * @author sbawaska */ class HeapPoller implements Runnable { @SuppressWarnings("synthetic-access") diff --git a/geode-core/src/main/java/com/gemstone/gemfire/internal/cache/control/InternalResourceManager.java b/geode-core/src/main/java/com/gemstone/gemfire/internal/cache/control/InternalResourceManager.java index ef9c50289508..96d2b87c579b 100755 --- a/geode-core/src/main/java/com/gemstone/gemfire/internal/cache/control/InternalResourceManager.java +++ b/geode-core/src/main/java/com/gemstone/gemfire/internal/cache/control/InternalResourceManager.java @@ -59,10 +59,6 @@ * Implementation of ResourceManager with additional internal-only methods. * TODO: cleanup raw and typed collections * - * @author Kirk Lund - * @author Mitch Thomas - * @author Swapnil Bawaskar - * @author David Hoots */ public class InternalResourceManager implements ResourceManager { private static final Logger logger = LogService.getLogger(); @@ -411,7 +407,6 @@ public static ResourceObserver getResourceObserver() { /** * For testing only. Receives callbacks for resource related events. - * @author dsmith */ public static interface ResourceObserver { /** diff --git a/geode-core/src/main/java/com/gemstone/gemfire/internal/cache/control/MemoryEvent.java b/geode-core/src/main/java/com/gemstone/gemfire/internal/cache/control/MemoryEvent.java index 429dcea7bb0b..3b54b50fdc53 100644 --- a/geode-core/src/main/java/com/gemstone/gemfire/internal/cache/control/MemoryEvent.java +++ b/geode-core/src/main/java/com/gemstone/gemfire/internal/cache/control/MemoryEvent.java @@ -22,8 +22,6 @@ import com.gemstone.gemfire.internal.cache.control.MemoryThresholds.MemoryState; /** - * @author sbawaska - * @author David Hoots */ public class MemoryEvent implements ResourceEvent { private final ResourceType type; diff --git a/geode-core/src/main/java/com/gemstone/gemfire/internal/cache/control/MemoryThresholds.java b/geode-core/src/main/java/com/gemstone/gemfire/internal/cache/control/MemoryThresholds.java index 11690eb5783e..a95fd8efc435 100644 --- a/geode-core/src/main/java/com/gemstone/gemfire/internal/cache/control/MemoryThresholds.java +++ b/geode-core/src/main/java/com/gemstone/gemfire/internal/cache/control/MemoryThresholds.java @@ -29,7 +29,6 @@ * Stores eviction and critical thresholds for memory as well as the logic for * determining how memory transitions between states. * - * @author David Hoots * @since 9.0 */ public class MemoryThresholds { diff --git a/geode-core/src/main/java/com/gemstone/gemfire/internal/cache/control/OffHeapMemoryMonitor.java b/geode-core/src/main/java/com/gemstone/gemfire/internal/cache/control/OffHeapMemoryMonitor.java index 3ab39ea82174..08171fba786f 100644 --- a/geode-core/src/main/java/com/gemstone/gemfire/internal/cache/control/OffHeapMemoryMonitor.java +++ b/geode-core/src/main/java/com/gemstone/gemfire/internal/cache/control/OffHeapMemoryMonitor.java @@ -38,7 +38,6 @@ * are compared against current off-heap usage and, with the help of {#link * InternalResourceManager}, dispatches events when the thresholds are crossed. * - * @author David Hoots * @since 9.0 */ public class OffHeapMemoryMonitor implements ResourceMonitor, MemoryUsageListener { diff --git a/geode-core/src/main/java/com/gemstone/gemfire/internal/cache/control/PartitionRebalanceDetailsImpl.java b/geode-core/src/main/java/com/gemstone/gemfire/internal/cache/control/PartitionRebalanceDetailsImpl.java index bcd94471cf21..0e0383e8dd1a 100644 --- a/geode-core/src/main/java/com/gemstone/gemfire/internal/cache/control/PartitionRebalanceDetailsImpl.java +++ b/geode-core/src/main/java/com/gemstone/gemfire/internal/cache/control/PartitionRebalanceDetailsImpl.java @@ -31,7 +31,6 @@ * Serializable form is used to allow JMX * MBeans to use this as a remotable return type. * - * @author dsmith */ public class PartitionRebalanceDetailsImpl implements PartitionRebalanceInfo, Serializable, Comparable { diff --git a/geode-core/src/main/java/com/gemstone/gemfire/internal/cache/control/RebalanceOperationImpl.java b/geode-core/src/main/java/com/gemstone/gemfire/internal/cache/control/RebalanceOperationImpl.java index a42661da3403..789c07b2117d 100644 --- a/geode-core/src/main/java/com/gemstone/gemfire/internal/cache/control/RebalanceOperationImpl.java +++ b/geode-core/src/main/java/com/gemstone/gemfire/internal/cache/control/RebalanceOperationImpl.java @@ -49,7 +49,6 @@ /** * Implements RebalanceOperation for rebalancing Cache resources. * - * @author Kirk Lund */ @SuppressWarnings("synthetic-access") public class RebalanceOperationImpl implements RebalanceOperation { diff --git a/geode-core/src/main/java/com/gemstone/gemfire/internal/cache/control/RegionFilter.java b/geode-core/src/main/java/com/gemstone/gemfire/internal/cache/control/RegionFilter.java index f0a0e4dae3e1..43b14aaf2792 100644 --- a/geode-core/src/main/java/com/gemstone/gemfire/internal/cache/control/RegionFilter.java +++ b/geode-core/src/main/java/com/gemstone/gemfire/internal/cache/control/RegionFilter.java @@ -19,7 +19,6 @@ import com.gemstone.gemfire.cache.Region; /** - * @author dsmith * */ public interface RegionFilter { diff --git a/geode-core/src/main/java/com/gemstone/gemfire/internal/cache/control/ResourceAdvisor.java b/geode-core/src/main/java/com/gemstone/gemfire/internal/cache/control/ResourceAdvisor.java index 6288b4c522c1..b16338311ca3 100644 --- a/geode-core/src/main/java/com/gemstone/gemfire/internal/cache/control/ResourceAdvisor.java +++ b/geode-core/src/main/java/com/gemstone/gemfire/internal/cache/control/ResourceAdvisor.java @@ -53,7 +53,6 @@ * The advisor associated with a {@link ResourceManager}. Allows knowledge of * remote {@link ResourceManager} state and distribution of local {@link ResourceManager} state. * - * @author Mitch Thomas * @since 6.0 */ public class ResourceAdvisor extends DistributionAdvisor { @@ -295,8 +294,6 @@ public String toString() { * Profile which shares state with other ResourceManagers. * The data available in this profile should be enough to * deliver a {@link MemoryEvent} for any of the CRITICAL {@link MemoryState}s - * @author Mitch Thomas - * @author David Hoots * @since 6.0 */ public static class ResourceManagerProfile extends Profile { diff --git a/geode-core/src/main/java/com/gemstone/gemfire/internal/cache/control/ResourceEvent.java b/geode-core/src/main/java/com/gemstone/gemfire/internal/cache/control/ResourceEvent.java index 1cc4803d1a8f..ae62ffbe2339 100644 --- a/geode-core/src/main/java/com/gemstone/gemfire/internal/cache/control/ResourceEvent.java +++ b/geode-core/src/main/java/com/gemstone/gemfire/internal/cache/control/ResourceEvent.java @@ -21,7 +21,6 @@ import com.gemstone.gemfire.internal.cache.control.InternalResourceManager.ResourceType; /** - * @author sbawaska * */ public interface ResourceEvent { diff --git a/geode-core/src/main/java/com/gemstone/gemfire/internal/cache/control/ResourceManagerStats.java b/geode-core/src/main/java/com/gemstone/gemfire/internal/cache/control/ResourceManagerStats.java index d5bf214ad72c..d54e7c4d69b3 100644 --- a/geode-core/src/main/java/com/gemstone/gemfire/internal/cache/control/ResourceManagerStats.java +++ b/geode-core/src/main/java/com/gemstone/gemfire/internal/cache/control/ResourceManagerStats.java @@ -27,7 +27,6 @@ /** * Contains methods for manipulating resource manager statistics. - * @author dsmith * */ public class ResourceManagerStats { diff --git a/geode-core/src/main/java/com/gemstone/gemfire/internal/cache/control/ResourceMonitor.java b/geode-core/src/main/java/com/gemstone/gemfire/internal/cache/control/ResourceMonitor.java index 100f5a69ac68..449fdc916fb1 100644 --- a/geode-core/src/main/java/com/gemstone/gemfire/internal/cache/control/ResourceMonitor.java +++ b/geode-core/src/main/java/com/gemstone/gemfire/internal/cache/control/ResourceMonitor.java @@ -24,7 +24,6 @@ * Implemented by classes that the ResourceManager creates in order to monitor a * specific type of resource (heap memory, off-heap memory, disk, etc.). * - * @author David Hoots * @since 9.0 */ interface ResourceMonitor { diff --git a/geode-core/src/main/java/com/gemstone/gemfire/internal/cache/delta/Delta.java b/geode-core/src/main/java/com/gemstone/gemfire/internal/cache/delta/Delta.java index f622379a4cb3..aeabbd8474ef 100644 --- a/geode-core/src/main/java/com/gemstone/gemfire/internal/cache/delta/Delta.java +++ b/geode-core/src/main/java/com/gemstone/gemfire/internal/cache/delta/Delta.java @@ -27,7 +27,6 @@ * Internal Note: When an update message carries a Delta as a payload, * it makes sure it gets deserialized before being put into the region. * - * @author Eric Zoerner * @since 5.5 * @see com.gemstone.gemfire.internal.cache.UpdateOperation */ diff --git a/geode-core/src/main/java/com/gemstone/gemfire/internal/cache/execute/AbstractExecution.java b/geode-core/src/main/java/com/gemstone/gemfire/internal/cache/execute/AbstractExecution.java index 7d7cf19462de..ff736be3bcbe 100755 --- a/geode-core/src/main/java/com/gemstone/gemfire/internal/cache/execute/AbstractExecution.java +++ b/geode-core/src/main/java/com/gemstone/gemfire/internal/cache/execute/AbstractExecution.java @@ -48,7 +48,6 @@ /** * Abstract implementation of InternalExecution interface. * - * @author Yogesh Mahajan * @since 5.8LA * */ diff --git a/geode-core/src/main/java/com/gemstone/gemfire/internal/cache/execute/DefaultResultCollector.java b/geode-core/src/main/java/com/gemstone/gemfire/internal/cache/execute/DefaultResultCollector.java index cc64ee0591ec..8f36b1fae0fd 100755 --- a/geode-core/src/main/java/com/gemstone/gemfire/internal/cache/execute/DefaultResultCollector.java +++ b/geode-core/src/main/java/com/gemstone/gemfire/internal/cache/execute/DefaultResultCollector.java @@ -31,7 +31,6 @@ * implementation stores the result in a List. The size of the list will be same * as the no of nodes on which a function got executed * - * @author Yogesh Mahajan * @since 6.0 * */ diff --git a/geode-core/src/main/java/com/gemstone/gemfire/internal/cache/execute/DistributedRegionFunctionExecutor.java b/geode-core/src/main/java/com/gemstone/gemfire/internal/cache/execute/DistributedRegionFunctionExecutor.java index e32ab23844ee..adb07f988e19 100755 --- a/geode-core/src/main/java/com/gemstone/gemfire/internal/cache/execute/DistributedRegionFunctionExecutor.java +++ b/geode-core/src/main/java/com/gemstone/gemfire/internal/cache/execute/DistributedRegionFunctionExecutor.java @@ -43,7 +43,6 @@ * For DistributedRegions with DataPolicy.REPLICATE, execute the function * locally. * - * @author Yogesh Mahajan * * @since 5.8 LA * diff --git a/geode-core/src/main/java/com/gemstone/gemfire/internal/cache/execute/DistributedRegionFunctionResultSender.java b/geode-core/src/main/java/com/gemstone/gemfire/internal/cache/execute/DistributedRegionFunctionResultSender.java index 18106c19ae0d..c22dc3355236 100644 --- a/geode-core/src/main/java/com/gemstone/gemfire/internal/cache/execute/DistributedRegionFunctionResultSender.java +++ b/geode-core/src/main/java/com/gemstone/gemfire/internal/cache/execute/DistributedRegionFunctionResultSender.java @@ -30,7 +30,6 @@ import com.gemstone.gemfire.internal.logging.log4j.LocalizedMessage; /** * - * @author ymahajan * */ public final class DistributedRegionFunctionResultSender implements diff --git a/geode-core/src/main/java/com/gemstone/gemfire/internal/cache/execute/DistributedRegionFunctionResultWaiter.java b/geode-core/src/main/java/com/gemstone/gemfire/internal/cache/execute/DistributedRegionFunctionResultWaiter.java index 1894f99cc966..2ee5105b89f6 100755 --- a/geode-core/src/main/java/com/gemstone/gemfire/internal/cache/execute/DistributedRegionFunctionResultWaiter.java +++ b/geode-core/src/main/java/com/gemstone/gemfire/internal/cache/execute/DistributedRegionFunctionResultWaiter.java @@ -28,7 +28,6 @@ import com.gemstone.gemfire.internal.cache.DistributedRegionFunctionStreamingMessage; /** * - * @author ymahajan * */ public class DistributedRegionFunctionResultWaiter extends diff --git a/geode-core/src/main/java/com/gemstone/gemfire/internal/cache/execute/FunctionContextImpl.java b/geode-core/src/main/java/com/gemstone/gemfire/internal/cache/execute/FunctionContextImpl.java index b750c564e827..c0dfb6de603d 100755 --- a/geode-core/src/main/java/com/gemstone/gemfire/internal/cache/execute/FunctionContextImpl.java +++ b/geode-core/src/main/java/com/gemstone/gemfire/internal/cache/execute/FunctionContextImpl.java @@ -28,8 +28,6 @@ * * For data dependent functions refer to {@link RegionFunctionContext} * - * @author Yogesh Mahajan - * @author Mitch Thomas * * @since 6.0 * diff --git a/geode-core/src/main/java/com/gemstone/gemfire/internal/cache/execute/FunctionExecutionNodePruner.java b/geode-core/src/main/java/com/gemstone/gemfire/internal/cache/execute/FunctionExecutionNodePruner.java index 6848873ec03f..0201ba92422a 100755 --- a/geode-core/src/main/java/com/gemstone/gemfire/internal/cache/execute/FunctionExecutionNodePruner.java +++ b/geode-core/src/main/java/com/gemstone/gemfire/internal/cache/execute/FunctionExecutionNodePruner.java @@ -35,7 +35,6 @@ import com.gemstone.gemfire.internal.logging.LogService; /** * - * @author ymahajan * */ public class FunctionExecutionNodePruner { diff --git a/geode-core/src/main/java/com/gemstone/gemfire/internal/cache/execute/FunctionRemoteContext.java b/geode-core/src/main/java/com/gemstone/gemfire/internal/cache/execute/FunctionRemoteContext.java index 4155fbb81345..72b6f663d880 100755 --- a/geode-core/src/main/java/com/gemstone/gemfire/internal/cache/execute/FunctionRemoteContext.java +++ b/geode-core/src/main/java/com/gemstone/gemfire/internal/cache/execute/FunctionRemoteContext.java @@ -29,7 +29,6 @@ /** * FunctionContext for remote/target nodes * - * @author Yogesh Mahajan * */ public class FunctionRemoteContext implements DataSerializable { diff --git a/geode-core/src/main/java/com/gemstone/gemfire/internal/cache/execute/FunctionStreamingResultCollector.java b/geode-core/src/main/java/com/gemstone/gemfire/internal/cache/execute/FunctionStreamingResultCollector.java index f86535dd41ad..3874ad90f8c9 100755 --- a/geode-core/src/main/java/com/gemstone/gemfire/internal/cache/execute/FunctionStreamingResultCollector.java +++ b/geode-core/src/main/java/com/gemstone/gemfire/internal/cache/execute/FunctionStreamingResultCollector.java @@ -52,7 +52,6 @@ /** * - * @author ymahajan * */ public class FunctionStreamingResultCollector extends ReplyProcessor21 implements diff --git a/geode-core/src/main/java/com/gemstone/gemfire/internal/cache/execute/InternalExecution.java b/geode-core/src/main/java/com/gemstone/gemfire/internal/cache/execute/InternalExecution.java index fa4d28367932..d3fd2f27ecaa 100755 --- a/geode-core/src/main/java/com/gemstone/gemfire/internal/cache/execute/InternalExecution.java +++ b/geode-core/src/main/java/com/gemstone/gemfire/internal/cache/execute/InternalExecution.java @@ -27,7 +27,6 @@ /** * Internal interface for SQLFabric. It has internal methods specific for SQLFabric * - * @author Yogesh Mahajan * @since 5.8LA * */ diff --git a/geode-core/src/main/java/com/gemstone/gemfire/internal/cache/execute/InternalFunctionException.java b/geode-core/src/main/java/com/gemstone/gemfire/internal/cache/execute/InternalFunctionException.java index 112e3d38ecf9..9fe6c247a511 100644 --- a/geode-core/src/main/java/com/gemstone/gemfire/internal/cache/execute/InternalFunctionException.java +++ b/geode-core/src/main/java/com/gemstone/gemfire/internal/cache/execute/InternalFunctionException.java @@ -31,7 +31,6 @@ * The exception string provides details on the cause of failure. *

    * - * @author Kishor Bachhav * * @since 6.6 * @see FunctionService diff --git a/geode-core/src/main/java/com/gemstone/gemfire/internal/cache/execute/InternalFunctionService.java b/geode-core/src/main/java/com/gemstone/gemfire/internal/cache/execute/InternalFunctionService.java index eae2bc8fd765..8af841d0ade5 100755 --- a/geode-core/src/main/java/com/gemstone/gemfire/internal/cache/execute/InternalFunctionService.java +++ b/geode-core/src/main/java/com/gemstone/gemfire/internal/cache/execute/InternalFunctionService.java @@ -33,7 +33,6 @@ * * Provides internal methods for sqlFabric product * - * @author Yogesh Mahajan * * @since 6.1 * diff --git a/geode-core/src/main/java/com/gemstone/gemfire/internal/cache/execute/InternalRegionFunctionContext.java b/geode-core/src/main/java/com/gemstone/gemfire/internal/cache/execute/InternalRegionFunctionContext.java index c8ea4214d15e..22349256f464 100644 --- a/geode-core/src/main/java/com/gemstone/gemfire/internal/cache/execute/InternalRegionFunctionContext.java +++ b/geode-core/src/main/java/com/gemstone/gemfire/internal/cache/execute/InternalRegionFunctionContext.java @@ -35,7 +35,6 @@ * depend on casting to {@link RegionFunctionContextImpl} directly rather should * use this interface. * - * @author swale */ public interface InternalRegionFunctionContext extends RegionFunctionContext { diff --git a/geode-core/src/main/java/com/gemstone/gemfire/internal/cache/execute/InternalResultSender.java b/geode-core/src/main/java/com/gemstone/gemfire/internal/cache/execute/InternalResultSender.java index 4fd50fb9dcd3..eb3349fdda47 100755 --- a/geode-core/src/main/java/com/gemstone/gemfire/internal/cache/execute/InternalResultSender.java +++ b/geode-core/src/main/java/com/gemstone/gemfire/internal/cache/execute/InternalResultSender.java @@ -20,7 +20,6 @@ /** * - * @author ymahajan * */ public interface InternalResultSender extends ResultSender { diff --git a/geode-core/src/main/java/com/gemstone/gemfire/internal/cache/execute/LocalResultCollector.java b/geode-core/src/main/java/com/gemstone/gemfire/internal/cache/execute/LocalResultCollector.java index fccbd595278c..b190ae9c4a8d 100644 --- a/geode-core/src/main/java/com/gemstone/gemfire/internal/cache/execute/LocalResultCollector.java +++ b/geode-core/src/main/java/com/gemstone/gemfire/internal/cache/execute/LocalResultCollector.java @@ -24,7 +24,6 @@ * Extends {@link ResultCollector} interface to provide for methods that are * required internally by the product. * - * @author swale */ public interface LocalResultCollector extends ResultCollector { diff --git a/geode-core/src/main/java/com/gemstone/gemfire/internal/cache/execute/MemberFunctionExecutor.java b/geode-core/src/main/java/com/gemstone/gemfire/internal/cache/execute/MemberFunctionExecutor.java index 9cfbd51dc053..ac628a0ff429 100644 --- a/geode-core/src/main/java/com/gemstone/gemfire/internal/cache/execute/MemberFunctionExecutor.java +++ b/geode-core/src/main/java/com/gemstone/gemfire/internal/cache/execute/MemberFunctionExecutor.java @@ -42,7 +42,6 @@ import com.gemstone.gemfire.internal.i18n.LocalizedStrings; /** - * @author ymahajan */ public class MemberFunctionExecutor extends AbstractExecution { diff --git a/geode-core/src/main/java/com/gemstone/gemfire/internal/cache/execute/MemberFunctionResultSender.java b/geode-core/src/main/java/com/gemstone/gemfire/internal/cache/execute/MemberFunctionResultSender.java index 30c652cb2735..baf4c725a0e2 100644 --- a/geode-core/src/main/java/com/gemstone/gemfire/internal/cache/execute/MemberFunctionResultSender.java +++ b/geode-core/src/main/java/com/gemstone/gemfire/internal/cache/execute/MemberFunctionResultSender.java @@ -32,7 +32,6 @@ import com.gemstone.gemfire.internal.logging.log4j.LocalizedMessage; /** * - * @author ymahajan * */ public final class MemberFunctionResultSender implements InternalResultSender { diff --git a/geode-core/src/main/java/com/gemstone/gemfire/internal/cache/execute/MemberFunctionResultWaiter.java b/geode-core/src/main/java/com/gemstone/gemfire/internal/cache/execute/MemberFunctionResultWaiter.java index 0532d7ffac68..af8c5f3b2757 100755 --- a/geode-core/src/main/java/com/gemstone/gemfire/internal/cache/execute/MemberFunctionResultWaiter.java +++ b/geode-core/src/main/java/com/gemstone/gemfire/internal/cache/execute/MemberFunctionResultWaiter.java @@ -28,7 +28,6 @@ import com.gemstone.gemfire.internal.cache.MemberFunctionStreamingMessage; /** * - * @author ymahajan * */ public class MemberFunctionResultWaiter extends StreamingFunctionOperation { diff --git a/geode-core/src/main/java/com/gemstone/gemfire/internal/cache/execute/MemberMappedArgument.java b/geode-core/src/main/java/com/gemstone/gemfire/internal/cache/execute/MemberMappedArgument.java index f5116b31abbe..d328d03b9121 100755 --- a/geode-core/src/main/java/com/gemstone/gemfire/internal/cache/execute/MemberMappedArgument.java +++ b/geode-core/src/main/java/com/gemstone/gemfire/internal/cache/execute/MemberMappedArgument.java @@ -37,7 +37,6 @@ * map, it will include the query string as an argument. When it is sent to a * member that is in the map, will not include the query string as an argument. * - * @author Yogesh Mahajan * @since 6.0 * */ diff --git a/geode-core/src/main/java/com/gemstone/gemfire/internal/cache/execute/MultiRegionFunctionContext.java b/geode-core/src/main/java/com/gemstone/gemfire/internal/cache/execute/MultiRegionFunctionContext.java index 902b88abba88..54eaea1345fc 100755 --- a/geode-core/src/main/java/com/gemstone/gemfire/internal/cache/execute/MultiRegionFunctionContext.java +++ b/geode-core/src/main/java/com/gemstone/gemfire/internal/cache/execute/MultiRegionFunctionContext.java @@ -26,7 +26,6 @@ * Context available when called using * {@link InternalFunctionService#onRegions(Set)} * - * @author ymahajan * * @since 6.5 * diff --git a/geode-core/src/main/java/com/gemstone/gemfire/internal/cache/execute/MultiRegionFunctionContextImpl.java b/geode-core/src/main/java/com/gemstone/gemfire/internal/cache/execute/MultiRegionFunctionContextImpl.java index 7ff14f087f79..5a4e2b9af3f8 100755 --- a/geode-core/src/main/java/com/gemstone/gemfire/internal/cache/execute/MultiRegionFunctionContextImpl.java +++ b/geode-core/src/main/java/com/gemstone/gemfire/internal/cache/execute/MultiRegionFunctionContextImpl.java @@ -25,7 +25,6 @@ * Context available when called using * {@link InternalFunctionService#onRegions(Set)} * - * @author ymahajan * * @since 6.5 * diff --git a/geode-core/src/main/java/com/gemstone/gemfire/internal/cache/execute/MultiRegionFunctionExecutor.java b/geode-core/src/main/java/com/gemstone/gemfire/internal/cache/execute/MultiRegionFunctionExecutor.java index 613a383bd6a6..192916997f3f 100755 --- a/geode-core/src/main/java/com/gemstone/gemfire/internal/cache/execute/MultiRegionFunctionExecutor.java +++ b/geode-core/src/main/java/com/gemstone/gemfire/internal/cache/execute/MultiRegionFunctionExecutor.java @@ -47,7 +47,6 @@ /** * - * @author ymahajan * */ public class MultiRegionFunctionExecutor extends AbstractExecution { diff --git a/geode-core/src/main/java/com/gemstone/gemfire/internal/cache/execute/MultiRegionFunctionResultWaiter.java b/geode-core/src/main/java/com/gemstone/gemfire/internal/cache/execute/MultiRegionFunctionResultWaiter.java index 51a883becc4d..dfcc90efc12e 100755 --- a/geode-core/src/main/java/com/gemstone/gemfire/internal/cache/execute/MultiRegionFunctionResultWaiter.java +++ b/geode-core/src/main/java/com/gemstone/gemfire/internal/cache/execute/MultiRegionFunctionResultWaiter.java @@ -29,7 +29,6 @@ import com.gemstone.gemfire.internal.cache.MemberFunctionStreamingMessage; /** * - * @author ymahajan * */ public class MultiRegionFunctionResultWaiter extends diff --git a/geode-core/src/main/java/com/gemstone/gemfire/internal/cache/execute/NoResult.java b/geode-core/src/main/java/com/gemstone/gemfire/internal/cache/execute/NoResult.java index b01c3a3c7536..068ec4b179b9 100755 --- a/geode-core/src/main/java/com/gemstone/gemfire/internal/cache/execute/NoResult.java +++ b/geode-core/src/main/java/com/gemstone/gemfire/internal/cache/execute/NoResult.java @@ -34,7 +34,6 @@ * {@link FunctionException} * * - * @author Yogesh Mahajan * * @since 5.8 Beta * diff --git a/geode-core/src/main/java/com/gemstone/gemfire/internal/cache/execute/PartitionedRegionFunctionExecutor.java b/geode-core/src/main/java/com/gemstone/gemfire/internal/cache/execute/PartitionedRegionFunctionExecutor.java index 6c2065070b45..359b7f674d54 100755 --- a/geode-core/src/main/java/com/gemstone/gemfire/internal/cache/execute/PartitionedRegionFunctionExecutor.java +++ b/geode-core/src/main/java/com/gemstone/gemfire/internal/cache/execute/PartitionedRegionFunctionExecutor.java @@ -40,7 +40,6 @@ /** * - * @author ymahajan * */ public class PartitionedRegionFunctionExecutor extends AbstractExecution { diff --git a/geode-core/src/main/java/com/gemstone/gemfire/internal/cache/execute/PartitionedRegionFunctionResultSender.java b/geode-core/src/main/java/com/gemstone/gemfire/internal/cache/execute/PartitionedRegionFunctionResultSender.java index 813d833ff33f..1183c049f65d 100644 --- a/geode-core/src/main/java/com/gemstone/gemfire/internal/cache/execute/PartitionedRegionFunctionResultSender.java +++ b/geode-core/src/main/java/com/gemstone/gemfire/internal/cache/execute/PartitionedRegionFunctionResultSender.java @@ -40,7 +40,6 @@ * in the ResultReciever. * ResultSender will be instantiated in executeOnDatastore and set in FunctionContext. * - * @author skumar */ public final class PartitionedRegionFunctionResultSender implements diff --git a/geode-core/src/main/java/com/gemstone/gemfire/internal/cache/execute/PartitionedRegionFunctionResultWaiter.java b/geode-core/src/main/java/com/gemstone/gemfire/internal/cache/execute/PartitionedRegionFunctionResultWaiter.java index dd00d69732d0..53eb05b20b08 100755 --- a/geode-core/src/main/java/com/gemstone/gemfire/internal/cache/execute/PartitionedRegionFunctionResultWaiter.java +++ b/geode-core/src/main/java/com/gemstone/gemfire/internal/cache/execute/PartitionedRegionFunctionResultWaiter.java @@ -37,7 +37,6 @@ * It takes a set of nodes to which functionExecution message has to be sent. Creates one message for each and sends * it to each of them. Then it gets result in processData where it adds them to the resultCollector. * - * @author skumar * */ public class PartitionedRegionFunctionResultWaiter extends StreamingFunctionOperation { diff --git a/geode-core/src/main/java/com/gemstone/gemfire/internal/cache/execute/RegionFunctionContextImpl.java b/geode-core/src/main/java/com/gemstone/gemfire/internal/cache/execute/RegionFunctionContextImpl.java index 28b627a852d0..175e863c2a57 100755 --- a/geode-core/src/main/java/com/gemstone/gemfire/internal/cache/execute/RegionFunctionContextImpl.java +++ b/geode-core/src/main/java/com/gemstone/gemfire/internal/cache/execute/RegionFunctionContextImpl.java @@ -36,7 +36,6 @@ * type casted to RegionFunctionContext. Methods provided to retrieve the Region * and filter passed to the function execution * - * @author Yogesh Mahajan * * @since 6.0 * diff --git a/geode-core/src/main/java/com/gemstone/gemfire/internal/cache/execute/ServerFunctionExecutor.java b/geode-core/src/main/java/com/gemstone/gemfire/internal/cache/execute/ServerFunctionExecutor.java index bf00268d158f..9c06bf67b0cd 100644 --- a/geode-core/src/main/java/com/gemstone/gemfire/internal/cache/execute/ServerFunctionExecutor.java +++ b/geode-core/src/main/java/com/gemstone/gemfire/internal/cache/execute/ServerFunctionExecutor.java @@ -36,7 +36,6 @@ import com.gemstone.gemfire.internal.i18n.LocalizedStrings; /** * - * @author ymahajan * */ public class ServerFunctionExecutor extends AbstractExecution { diff --git a/geode-core/src/main/java/com/gemstone/gemfire/internal/cache/execute/ServerRegionFunctionExecutor.java b/geode-core/src/main/java/com/gemstone/gemfire/internal/cache/execute/ServerRegionFunctionExecutor.java index c5d5ddb82613..ebda491e8242 100755 --- a/geode-core/src/main/java/com/gemstone/gemfire/internal/cache/execute/ServerRegionFunctionExecutor.java +++ b/geode-core/src/main/java/com/gemstone/gemfire/internal/cache/execute/ServerRegionFunctionExecutor.java @@ -42,7 +42,6 @@ * Executes Function with FunctionService#onRegion(Region region) in client server mode. * * @see FunctionService#onRegion(Region) * - * @author Yogesh Mahajan * @since 5.8 LA * */ diff --git a/geode-core/src/main/java/com/gemstone/gemfire/internal/cache/execute/ServerToClientFunctionResultSender.java b/geode-core/src/main/java/com/gemstone/gemfire/internal/cache/execute/ServerToClientFunctionResultSender.java index f718831dd802..6fce3a3cc682 100755 --- a/geode-core/src/main/java/com/gemstone/gemfire/internal/cache/execute/ServerToClientFunctionResultSender.java +++ b/geode-core/src/main/java/com/gemstone/gemfire/internal/cache/execute/ServerToClientFunctionResultSender.java @@ -39,7 +39,6 @@ import com.gemstone.gemfire.internal.security.AuthorizeRequestPP; /** - * @author ymahajan */ public class ServerToClientFunctionResultSender implements ResultSender { private static final Logger logger = LogService.getLogger(); diff --git a/geode-core/src/main/java/com/gemstone/gemfire/internal/cache/execute/ServerToClientFunctionResultSender65.java b/geode-core/src/main/java/com/gemstone/gemfire/internal/cache/execute/ServerToClientFunctionResultSender65.java index 62db3119f5ac..1a1b6c70c92b 100644 --- a/geode-core/src/main/java/com/gemstone/gemfire/internal/cache/execute/ServerToClientFunctionResultSender65.java +++ b/geode-core/src/main/java/com/gemstone/gemfire/internal/cache/execute/ServerToClientFunctionResultSender65.java @@ -36,7 +36,6 @@ import com.gemstone.gemfire.internal.logging.LogService; /** * - * @author ymahajan * @since 6.5 * */ diff --git a/geode-core/src/main/java/com/gemstone/gemfire/internal/cache/execute/StreamingFunctionOperation.java b/geode-core/src/main/java/com/gemstone/gemfire/internal/cache/execute/StreamingFunctionOperation.java index b8c254a07e92..07be79cacbce 100644 --- a/geode-core/src/main/java/com/gemstone/gemfire/internal/cache/execute/StreamingFunctionOperation.java +++ b/geode-core/src/main/java/com/gemstone/gemfire/internal/cache/execute/StreamingFunctionOperation.java @@ -28,7 +28,6 @@ import com.gemstone.gemfire.distributed.internal.membership.InternalDistributedMember; /** - * @author ymahajan */ public abstract class StreamingFunctionOperation { diff --git a/geode-core/src/main/java/com/gemstone/gemfire/internal/cache/execute/util/CommitFunction.java b/geode-core/src/main/java/com/gemstone/gemfire/internal/cache/execute/util/CommitFunction.java index b5a9478c1117..23139b4ee50e 100644 --- a/geode-core/src/main/java/com/gemstone/gemfire/internal/cache/execute/util/CommitFunction.java +++ b/geode-core/src/main/java/com/gemstone/gemfire/internal/cache/execute/util/CommitFunction.java @@ -66,7 +66,6 @@ * {@link FunctionService#registerFunction(Function)} * * @since 6.6.1 - * @author sbawaska */ public class CommitFunction implements Function { private static final Logger logger = LogService.getLogger(); diff --git a/geode-core/src/main/java/com/gemstone/gemfire/internal/cache/execute/util/FindRestEnabledServersFunction.java b/geode-core/src/main/java/com/gemstone/gemfire/internal/cache/execute/util/FindRestEnabledServersFunction.java index 3b70941d7645..050c0e9f94b6 100644 --- a/geode-core/src/main/java/com/gemstone/gemfire/internal/cache/execute/util/FindRestEnabledServersFunction.java +++ b/geode-core/src/main/java/com/gemstone/gemfire/internal/cache/execute/util/FindRestEnabledServersFunction.java @@ -29,7 +29,6 @@ /** * The FindRestEnabledServersFunction class is a gemfire function that gives details about REST enabled gemfire servers. *

    -* @author Nilkanth Patel * @since 8.1 */ diff --git a/geode-core/src/main/java/com/gemstone/gemfire/internal/cache/execute/util/NestedTransactionFunction.java b/geode-core/src/main/java/com/gemstone/gemfire/internal/cache/execute/util/NestedTransactionFunction.java index 3b8fe861b8a9..9e4aa9db665a 100644 --- a/geode-core/src/main/java/com/gemstone/gemfire/internal/cache/execute/util/NestedTransactionFunction.java +++ b/geode-core/src/main/java/com/gemstone/gemfire/internal/cache/execute/util/NestedTransactionFunction.java @@ -47,7 +47,6 @@ * * @see CommitFunction * @since 6.6.1 - * @author sbawaska * */ public class NestedTransactionFunction implements Function { diff --git a/geode-core/src/main/java/com/gemstone/gemfire/internal/cache/execute/util/RollbackFunction.java b/geode-core/src/main/java/com/gemstone/gemfire/internal/cache/execute/util/RollbackFunction.java index beccebb8e99f..f413d6c77dc3 100644 --- a/geode-core/src/main/java/com/gemstone/gemfire/internal/cache/execute/util/RollbackFunction.java +++ b/geode-core/src/main/java/com/gemstone/gemfire/internal/cache/execute/util/RollbackFunction.java @@ -65,7 +65,6 @@ * {@link FunctionService#registerFunction(Function)} * * @since 6.6.1 - * @author sbawaska */ public class RollbackFunction implements Function { private static final Logger logger = LogService.getLogger(); diff --git a/geode-core/src/main/java/com/gemstone/gemfire/internal/cache/extension/Extensible.java b/geode-core/src/main/java/com/gemstone/gemfire/internal/cache/extension/Extensible.java index 94a6d30ff324..87c2c6bb5e2b 100644 --- a/geode-core/src/main/java/com/gemstone/gemfire/internal/cache/extension/Extensible.java +++ b/geode-core/src/main/java/com/gemstone/gemfire/internal/cache/extension/Extensible.java @@ -26,7 +26,6 @@ * * Used in {@link CacheXml} to read and write cache xml configurations. * - * @author jbarrett@pivotal.io * * @since 8.1 */ diff --git a/geode-core/src/main/java/com/gemstone/gemfire/internal/cache/extension/Extension.java b/geode-core/src/main/java/com/gemstone/gemfire/internal/cache/extension/Extension.java index b3279e3f1b67..3347bd10cecf 100644 --- a/geode-core/src/main/java/com/gemstone/gemfire/internal/cache/extension/Extension.java +++ b/geode-core/src/main/java/com/gemstone/gemfire/internal/cache/extension/Extension.java @@ -23,7 +23,6 @@ /** * Interface used for objects wishing to extend and {@link Extensible} object. * - * @author jbarrett@pivotal.io * * @since 8.1 */ diff --git a/geode-core/src/main/java/com/gemstone/gemfire/internal/cache/extension/ExtensionPoint.java b/geode-core/src/main/java/com/gemstone/gemfire/internal/cache/extension/ExtensionPoint.java index ffcc910d98e6..9fe30b4ddf1f 100644 --- a/geode-core/src/main/java/com/gemstone/gemfire/internal/cache/extension/ExtensionPoint.java +++ b/geode-core/src/main/java/com/gemstone/gemfire/internal/cache/extension/ExtensionPoint.java @@ -20,7 +20,6 @@ /** * Allows {@link Extensible} objects to add and remove {@link Extension}s. * - * @author jbarrett@pivotal.io * * @since 8.1 */ diff --git a/geode-core/src/main/java/com/gemstone/gemfire/internal/cache/extension/SimpleExtensionPoint.java b/geode-core/src/main/java/com/gemstone/gemfire/internal/cache/extension/SimpleExtensionPoint.java index 96a899ed4a35..44020831a31e 100644 --- a/geode-core/src/main/java/com/gemstone/gemfire/internal/cache/extension/SimpleExtensionPoint.java +++ b/geode-core/src/main/java/com/gemstone/gemfire/internal/cache/extension/SimpleExtensionPoint.java @@ -25,7 +25,6 @@ * Simple implementation of {@link ExtensionPoint} for easy integration with * existing objects. * - * @author jbarrett@pivotal.io * * @since 8.1 */ diff --git a/geode-core/src/main/java/com/gemstone/gemfire/internal/cache/ha/HAContainerMap.java b/geode-core/src/main/java/com/gemstone/gemfire/internal/cache/ha/HAContainerMap.java index d638114e3466..8cc0310dec04 100755 --- a/geode-core/src/main/java/com/gemstone/gemfire/internal/cache/ha/HAContainerMap.java +++ b/geode-core/src/main/java/com/gemstone/gemfire/internal/cache/ha/HAContainerMap.java @@ -29,7 +29,6 @@ import com.gemstone.gemfire.internal.i18n.LocalizedStrings; /** - * @author ashetkar * @since 5.7 */ public class HAContainerMap implements HAContainerWrapper { diff --git a/geode-core/src/main/java/com/gemstone/gemfire/internal/cache/ha/HAContainerRegion.java b/geode-core/src/main/java/com/gemstone/gemfire/internal/cache/ha/HAContainerRegion.java index 8803c322c3eb..3bed7698548f 100755 --- a/geode-core/src/main/java/com/gemstone/gemfire/internal/cache/ha/HAContainerRegion.java +++ b/geode-core/src/main/java/com/gemstone/gemfire/internal/cache/ha/HAContainerRegion.java @@ -33,7 +33,6 @@ import com.gemstone.gemfire.internal.cache.tier.sockets.HAEventWrapper; /** - * @author ashetkar * @since 5.7 */ public class HAContainerRegion implements HAContainerWrapper { diff --git a/geode-core/src/main/java/com/gemstone/gemfire/internal/cache/ha/HAContainerWrapper.java b/geode-core/src/main/java/com/gemstone/gemfire/internal/cache/ha/HAContainerWrapper.java index b3b344034671..57451188ff16 100755 --- a/geode-core/src/main/java/com/gemstone/gemfire/internal/cache/ha/HAContainerWrapper.java +++ b/geode-core/src/main/java/com/gemstone/gemfire/internal/cache/ha/HAContainerWrapper.java @@ -23,7 +23,6 @@ import com.gemstone.gemfire.internal.cache.tier.sockets.ClientProxyMembershipID; /** - * @author ashetkar * @since 5.7 */ public interface HAContainerWrapper extends Map { diff --git a/geode-core/src/main/java/com/gemstone/gemfire/internal/cache/ha/HARegionQueue.java b/geode-core/src/main/java/com/gemstone/gemfire/internal/cache/ha/HARegionQueue.java index 3d14822b0c9a..089dfe89a3a6 100755 --- a/geode-core/src/main/java/com/gemstone/gemfire/internal/cache/ha/HARegionQueue.java +++ b/geode-core/src/main/java/com/gemstone/gemfire/internal/cache/ha/HARegionQueue.java @@ -131,9 +131,6 @@ * (See BlockingHARegionQueue) * * - * @author Dinesh Patel - * @author Mitul Bid - * @author Asif * @since 4.3 * */ @@ -2318,8 +2315,6 @@ public void closeClientCq(ClientProxyMembershipID clientId, InternalCqQuery cqTo * a separate Lock object was used by the BlockingQueue for wait notify. This * class will be performant if there is a single peek thread. * - * @author Asif - * @author Mitul Bid * */ private static class BlockingHARegionQueue extends HARegionQueue diff --git a/geode-core/src/main/java/com/gemstone/gemfire/internal/cache/ha/HARegionQueueAttributes.java b/geode-core/src/main/java/com/gemstone/gemfire/internal/cache/ha/HARegionQueueAttributes.java index ffa176fb6c05..c0af8e22e205 100755 --- a/geode-core/src/main/java/com/gemstone/gemfire/internal/cache/ha/HARegionQueueAttributes.java +++ b/geode-core/src/main/java/com/gemstone/gemfire/internal/cache/ha/HARegionQueueAttributes.java @@ -24,7 +24,6 @@ * This class defines the user specified attributes of the HARegion which are * configurable. * - * @author Mitul Bid * */ public class HARegionQueueAttributes diff --git a/geode-core/src/main/java/com/gemstone/gemfire/internal/cache/ha/HARegionQueueStats.java b/geode-core/src/main/java/com/gemstone/gemfire/internal/cache/ha/HARegionQueueStats.java index ff2c7ba091db..e7b74d132dee 100755 --- a/geode-core/src/main/java/com/gemstone/gemfire/internal/cache/ha/HARegionQueueStats.java +++ b/geode-core/src/main/java/com/gemstone/gemfire/internal/cache/ha/HARegionQueueStats.java @@ -26,7 +26,6 @@ /** * This class tracks GemFire statistics related to a {@link HARegionQueue}. * - * @author Dinesh Patel * */ public class HARegionQueueStats diff --git a/geode-core/src/main/java/com/gemstone/gemfire/internal/cache/ha/QueueRemovalMessage.java b/geode-core/src/main/java/com/gemstone/gemfire/internal/cache/ha/QueueRemovalMessage.java index 34f45bad8141..4ffb4d8393a4 100755 --- a/geode-core/src/main/java/com/gemstone/gemfire/internal/cache/ha/QueueRemovalMessage.java +++ b/geode-core/src/main/java/com/gemstone/gemfire/internal/cache/ha/QueueRemovalMessage.java @@ -45,7 +45,6 @@ * the list of messages that have been dispatched by this node. The messages are * received by other nodes and the processing is handed over to an executor * - * @author Mitul Bid * */ public final class QueueRemovalMessage extends PooledDistributionMessage diff --git a/geode-core/src/main/java/com/gemstone/gemfire/internal/cache/ha/ThreadIdentifier.java b/geode-core/src/main/java/com/gemstone/gemfire/internal/cache/ha/ThreadIdentifier.java index 2438bb3618bd..c2f37858943d 100755 --- a/geode-core/src/main/java/com/gemstone/gemfire/internal/cache/ha/ThreadIdentifier.java +++ b/geode-core/src/main/java/com/gemstone/gemfire/internal/cache/ha/ThreadIdentifier.java @@ -39,7 +39,6 @@ * which uniquely identifies the thread by storing the Object of this class. * * @see EventID - * @author Asif * * */ diff --git a/geode-core/src/main/java/com/gemstone/gemfire/internal/cache/locks/TXLessorDepartureHandler.java b/geode-core/src/main/java/com/gemstone/gemfire/internal/cache/locks/TXLessorDepartureHandler.java index 9545457c0654..fa323e812cf4 100755 --- a/geode-core/src/main/java/com/gemstone/gemfire/internal/cache/locks/TXLessorDepartureHandler.java +++ b/geode-core/src/main/java/com/gemstone/gemfire/internal/cache/locks/TXLessorDepartureHandler.java @@ -35,7 +35,6 @@ * each participant if it's ok to release the leases. Upon receipt of all * replies the lease will be automatically released. * - * @author Kirk Lund */ public class TXLessorDepartureHandler implements DLockLessorDepartureHandler { diff --git a/geode-core/src/main/java/com/gemstone/gemfire/internal/cache/locks/TXLockBatch.java b/geode-core/src/main/java/com/gemstone/gemfire/internal/cache/locks/TXLockBatch.java index 91695662225c..410aa77d5d4d 100755 --- a/geode-core/src/main/java/com/gemstone/gemfire/internal/cache/locks/TXLockBatch.java +++ b/geode-core/src/main/java/com/gemstone/gemfire/internal/cache/locks/TXLockBatch.java @@ -34,7 +34,6 @@ /** * Adapts multiple TXRegionLockRequests to one DLockBatch for DLock to use. * - * @author Kirk Lund */ public final class TXLockBatch implements DLockBatch, DataSerializableFixedID { diff --git a/geode-core/src/main/java/com/gemstone/gemfire/internal/cache/locks/TXLockIdImpl.java b/geode-core/src/main/java/com/gemstone/gemfire/internal/cache/locks/TXLockIdImpl.java index 5c7ad9add56f..7ee67c41e796 100755 --- a/geode-core/src/main/java/com/gemstone/gemfire/internal/cache/locks/TXLockIdImpl.java +++ b/geode-core/src/main/java/com/gemstone/gemfire/internal/cache/locks/TXLockIdImpl.java @@ -28,7 +28,6 @@ /** * Identifies a group of transaction locks. * - * @author Kirk Lund */ public final class TXLockIdImpl implements TXLockId, DataSerializableFixedID { diff --git a/geode-core/src/main/java/com/gemstone/gemfire/internal/cache/locks/TXLockService.java b/geode-core/src/main/java/com/gemstone/gemfire/internal/cache/locks/TXLockService.java index c5c1608142ae..18c4caaac034 100755 --- a/geode-core/src/main/java/com/gemstone/gemfire/internal/cache/locks/TXLockService.java +++ b/geode-core/src/main/java/com/gemstone/gemfire/internal/cache/locks/TXLockService.java @@ -28,7 +28,6 @@ * This is an abstract class defining the public facade for the transaction * locking service. * - * @author Kirk Lund */ public abstract class TXLockService { diff --git a/geode-core/src/main/java/com/gemstone/gemfire/internal/cache/locks/TXLockToken.java b/geode-core/src/main/java/com/gemstone/gemfire/internal/cache/locks/TXLockToken.java index cad6c98cee46..8411c8769454 100755 --- a/geode-core/src/main/java/com/gemstone/gemfire/internal/cache/locks/TXLockToken.java +++ b/geode-core/src/main/java/com/gemstone/gemfire/internal/cache/locks/TXLockToken.java @@ -25,7 +25,6 @@ /** * Represents one transaction lock. * - * @author Kirk Lund */ public class TXLockToken implements DataSerializable { private static final long serialVersionUID = 8172108573123093776L; diff --git a/geode-core/src/main/java/com/gemstone/gemfire/internal/cache/locks/TXLockUpdateParticipantsMessage.java b/geode-core/src/main/java/com/gemstone/gemfire/internal/cache/locks/TXLockUpdateParticipantsMessage.java index cb373162fe97..a82b335a27e4 100644 --- a/geode-core/src/main/java/com/gemstone/gemfire/internal/cache/locks/TXLockUpdateParticipantsMessage.java +++ b/geode-core/src/main/java/com/gemstone/gemfire/internal/cache/locks/TXLockUpdateParticipantsMessage.java @@ -46,7 +46,6 @@ * @see TXOriginatorRecoveryProcessor * @see com.gemstone.gemfire.internal.cache.TXFarSideCMTracker * - * @author Mitch Thomas * @since 4.1.1 */ public final class TXLockUpdateParticipantsMessage diff --git a/geode-core/src/main/java/com/gemstone/gemfire/internal/cache/locks/TXOriginatorRecoveryProcessor.java b/geode-core/src/main/java/com/gemstone/gemfire/internal/cache/locks/TXOriginatorRecoveryProcessor.java index 12b9eef45433..cc8e6bcfb9d9 100755 --- a/geode-core/src/main/java/com/gemstone/gemfire/internal/cache/locks/TXOriginatorRecoveryProcessor.java +++ b/geode-core/src/main/java/com/gemstone/gemfire/internal/cache/locks/TXOriginatorRecoveryProcessor.java @@ -47,7 +47,6 @@ * reply until the commit has finished. Once all replies have come in, the * transaction lock (TXLockId) will be released. * - * @author Kirk Lund */ public class TXOriginatorRecoveryProcessor extends ReplyProcessor21 { diff --git a/geode-core/src/main/java/com/gemstone/gemfire/internal/cache/locks/TXRecoverGrantorMessageProcessor.java b/geode-core/src/main/java/com/gemstone/gemfire/internal/cache/locks/TXRecoverGrantorMessageProcessor.java index 7bcdeb9f7a79..2d116a3b6b6b 100755 --- a/geode-core/src/main/java/com/gemstone/gemfire/internal/cache/locks/TXRecoverGrantorMessageProcessor.java +++ b/geode-core/src/main/java/com/gemstone/gemfire/internal/cache/locks/TXRecoverGrantorMessageProcessor.java @@ -37,7 +37,6 @@ * Provides processing of DLockRecoverGrantorProcessor. Reply will not be * sent until all locks are released. * - * @author Kirk Lund */ public class TXRecoverGrantorMessageProcessor implements DLockRecoverGrantorProcessor.MessageProcessor { diff --git a/geode-core/src/main/java/com/gemstone/gemfire/internal/cache/lru/HeapEvictor.java b/geode-core/src/main/java/com/gemstone/gemfire/internal/cache/lru/HeapEvictor.java index 11eca7fcd438..95b806b99beb 100644 --- a/geode-core/src/main/java/com/gemstone/gemfire/internal/cache/lru/HeapEvictor.java +++ b/geode-core/src/main/java/com/gemstone/gemfire/internal/cache/lru/HeapEvictor.java @@ -56,7 +56,6 @@ * Triggers centralized eviction(asynchronously) when the ResourceManager sends * an eviction event for on-heap regions. This is registered with the ResourceManager. * - * @author Yogesh, Suranjan, Amardeep, rholmes * @since 6.0 * */ diff --git a/geode-core/src/main/java/com/gemstone/gemfire/internal/cache/lru/HeapLRUCapacityController.java b/geode-core/src/main/java/com/gemstone/gemfire/internal/cache/lru/HeapLRUCapacityController.java index fb19e02cc848..c0b8ef678e5d 100644 --- a/geode-core/src/main/java/com/gemstone/gemfire/internal/cache/lru/HeapLRUCapacityController.java +++ b/geode-core/src/main/java/com/gemstone/gemfire/internal/cache/lru/HeapLRUCapacityController.java @@ -56,7 +56,6 @@ * -XX:+UseConcMarkSweepGC and -XX:+UseParNewGC * options improve the behavior of the HeapLRUCapacityController. * - * @author David Whitlock * * @since 3.2 */ diff --git a/geode-core/src/main/java/com/gemstone/gemfire/internal/cache/lru/HeapLRUStatistics.java b/geode-core/src/main/java/com/gemstone/gemfire/internal/cache/lru/HeapLRUStatistics.java index 6ff20986799f..e74793d7ca52 100644 --- a/geode-core/src/main/java/com/gemstone/gemfire/internal/cache/lru/HeapLRUStatistics.java +++ b/geode-core/src/main/java/com/gemstone/gemfire/internal/cache/lru/HeapLRUStatistics.java @@ -27,7 +27,6 @@ * * @see com.gemstone.gemfire.internal.cache.lru.MemLRUCapacityController * @see com.gemstone.gemfire.internal.cache.lru.LRUCapacityController - * @author Mitch Thomas * @since 4.0 */ public class HeapLRUStatistics extends LRUStatistics { diff --git a/geode-core/src/main/java/com/gemstone/gemfire/internal/cache/lru/LRUAlgorithm.java b/geode-core/src/main/java/com/gemstone/gemfire/internal/cache/lru/LRUAlgorithm.java index aae773d6e819..b30ed15668f9 100644 --- a/geode-core/src/main/java/com/gemstone/gemfire/internal/cache/lru/LRUAlgorithm.java +++ b/geode-core/src/main/java/com/gemstone/gemfire/internal/cache/lru/LRUAlgorithm.java @@ -69,7 +69,6 @@ * region will result in an {@link IllegalStateException} being * thrown. * - * @author David Whitlock * @since 3.2 */ public abstract class LRUAlgorithm diff --git a/geode-core/src/main/java/com/gemstone/gemfire/internal/cache/lru/LRUCapacityController.java b/geode-core/src/main/java/com/gemstone/gemfire/internal/cache/lru/LRUCapacityController.java index 77c9dae0b4c8..828a4fbec6db 100644 --- a/geode-core/src/main/java/com/gemstone/gemfire/internal/cache/lru/LRUCapacityController.java +++ b/geode-core/src/main/java/com/gemstone/gemfire/internal/cache/lru/LRUCapacityController.java @@ -51,7 +51,6 @@ * </region-attributes> * * - * @author Matthew Splett * @since 2.0.2 */ public final class LRUCapacityController extends LRUAlgorithm diff --git a/geode-core/src/main/java/com/gemstone/gemfire/internal/cache/lru/MemLRUCapacityController.java b/geode-core/src/main/java/com/gemstone/gemfire/internal/cache/lru/MemLRUCapacityController.java index cac6a38138ba..e62f95d5a392 100644 --- a/geode-core/src/main/java/com/gemstone/gemfire/internal/cache/lru/MemLRUCapacityController.java +++ b/geode-core/src/main/java/com/gemstone/gemfire/internal/cache/lru/MemLRUCapacityController.java @@ -77,7 +77,6 @@ * * @see LRUCapacityController * - * @author Matthew Splett * * @since 2.0.2 */ diff --git a/geode-core/src/main/java/com/gemstone/gemfire/internal/cache/lru/NewLIFOClockHand.java b/geode-core/src/main/java/com/gemstone/gemfire/internal/cache/lru/NewLIFOClockHand.java index 2ebc7a012d48..67a135e0fefc 100755 --- a/geode-core/src/main/java/com/gemstone/gemfire/internal/cache/lru/NewLIFOClockHand.java +++ b/geode-core/src/main/java/com/gemstone/gemfire/internal/cache/lru/NewLIFOClockHand.java @@ -24,7 +24,6 @@ * NewLIFOClockHand holds the behavior for LIFO logic , Overwriting * getLRUEntry() to return most recently added Entry * - * @author aingle * @since 5.7 */ diff --git a/geode-core/src/main/java/com/gemstone/gemfire/internal/cache/lru/OffHeapEvictor.java b/geode-core/src/main/java/com/gemstone/gemfire/internal/cache/lru/OffHeapEvictor.java index 297c4fe083bf..693a651f5229 100644 --- a/geode-core/src/main/java/com/gemstone/gemfire/internal/cache/lru/OffHeapEvictor.java +++ b/geode-core/src/main/java/com/gemstone/gemfire/internal/cache/lru/OffHeapEvictor.java @@ -29,7 +29,6 @@ * Triggers centralized eviction(asynchronously) when the ResourceManager sends * an eviction event for off-heap regions. This is registered with the ResourceManager. * - * @author rholmes * @since 9.0 */ public class OffHeapEvictor extends HeapEvictor { diff --git a/geode-core/src/main/java/com/gemstone/gemfire/internal/cache/lru/Sizeable.java b/geode-core/src/main/java/com/gemstone/gemfire/internal/cache/lru/Sizeable.java index a62ca7a77b7a..32446c600f81 100644 --- a/geode-core/src/main/java/com/gemstone/gemfire/internal/cache/lru/Sizeable.java +++ b/geode-core/src/main/java/com/gemstone/gemfire/internal/cache/lru/Sizeable.java @@ -45,7 +45,6 @@ return size;
    }
    * - * @author David Whitlock * * @since 3.2 */ diff --git a/geode-core/src/main/java/com/gemstone/gemfire/internal/cache/operations/ContainsKeyOperationContext.java b/geode-core/src/main/java/com/gemstone/gemfire/internal/cache/operations/ContainsKeyOperationContext.java index 1fd3cdd65de6..b3a7536fddbc 100644 --- a/geode-core/src/main/java/com/gemstone/gemfire/internal/cache/operations/ContainsKeyOperationContext.java +++ b/geode-core/src/main/java/com/gemstone/gemfire/internal/cache/operations/ContainsKeyOperationContext.java @@ -23,7 +23,6 @@ * Encapsulates a {@link com.gemstone.gemfire.cache.operations.OperationContext.OperationCode#CONTAINS_KEY} region operation having the * key object for the pre-operation case. * - * @author Sumedh Wale * @since 5.5 */ public class ContainsKeyOperationContext extends KeyOperationContext { diff --git a/geode-core/src/main/java/com/gemstone/gemfire/internal/cache/partitioned/AllBucketProfilesUpdateMessage.java b/geode-core/src/main/java/com/gemstone/gemfire/internal/cache/partitioned/AllBucketProfilesUpdateMessage.java index 0344c8ae0d20..6f5eb00c6fe3 100644 --- a/geode-core/src/main/java/com/gemstone/gemfire/internal/cache/partitioned/AllBucketProfilesUpdateMessage.java +++ b/geode-core/src/main/java/com/gemstone/gemfire/internal/cache/partitioned/AllBucketProfilesUpdateMessage.java @@ -42,7 +42,6 @@ * A Partitioned Region meta-data update message. This is used to send * all local bucket's meta-data to other members with the same Partitioned Region. * - * @author Yogesh Mahajan * @since 6.6 */ public final class AllBucketProfilesUpdateMessage extends DistributionMessage diff --git a/geode-core/src/main/java/com/gemstone/gemfire/internal/cache/partitioned/BecomePrimaryBucketMessage.java b/geode-core/src/main/java/com/gemstone/gemfire/internal/cache/partitioned/BecomePrimaryBucketMessage.java index 7c439b57a923..6cd5f2d9dad5 100644 --- a/geode-core/src/main/java/com/gemstone/gemfire/internal/cache/partitioned/BecomePrimaryBucketMessage.java +++ b/geode-core/src/main/java/com/gemstone/gemfire/internal/cache/partitioned/BecomePrimaryBucketMessage.java @@ -53,7 +53,6 @@ * // recipient became primary for the bucket * } * - * @author Kirk Lund */ public class BecomePrimaryBucketMessage extends PartitionMessage { diff --git a/geode-core/src/main/java/com/gemstone/gemfire/internal/cache/partitioned/Bucket.java b/geode-core/src/main/java/com/gemstone/gemfire/internal/cache/partitioned/Bucket.java index 675fd3206704..094405d386a4 100755 --- a/geode-core/src/main/java/com/gemstone/gemfire/internal/cache/partitioned/Bucket.java +++ b/geode-core/src/main/java/com/gemstone/gemfire/internal/cache/partitioned/Bucket.java @@ -27,7 +27,6 @@ /** * Represents a storage or meta-data container for a * PartitionedRegion. - * @author Kirk Lund */ public interface Bucket extends CacheDistributionAdvisee { diff --git a/geode-core/src/main/java/com/gemstone/gemfire/internal/cache/partitioned/BucketBackupMessage.java b/geode-core/src/main/java/com/gemstone/gemfire/internal/cache/partitioned/BucketBackupMessage.java index 23e135ffe4a5..04d25e322846 100644 --- a/geode-core/src/main/java/com/gemstone/gemfire/internal/cache/partitioned/BucketBackupMessage.java +++ b/geode-core/src/main/java/com/gemstone/gemfire/internal/cache/partitioned/BucketBackupMessage.java @@ -38,7 +38,6 @@ * if one or more needs to be backed-up in order to satisfy the redundantCopies * setting * - * @author mthomas * @since 5.0 */ public final class BucketBackupMessage extends PartitionMessage diff --git a/geode-core/src/main/java/com/gemstone/gemfire/internal/cache/partitioned/BucketProfileUpdateMessage.java b/geode-core/src/main/java/com/gemstone/gemfire/internal/cache/partitioned/BucketProfileUpdateMessage.java index aa7bacc5c458..7345b4407cc1 100644 --- a/geode-core/src/main/java/com/gemstone/gemfire/internal/cache/partitioned/BucketProfileUpdateMessage.java +++ b/geode-core/src/main/java/com/gemstone/gemfire/internal/cache/partitioned/BucketProfileUpdateMessage.java @@ -42,7 +42,6 @@ * A Partitioned Region meta-data update message. This is used to send * a bucket's meta-data to other members with the same Partitioned Region. * - * @author Mitch Thomas * @since 5.1 */ public final class BucketProfileUpdateMessage extends DistributionMessage diff --git a/geode-core/src/main/java/com/gemstone/gemfire/internal/cache/partitioned/BucketSizeMessage.java b/geode-core/src/main/java/com/gemstone/gemfire/internal/cache/partitioned/BucketSizeMessage.java index db9eb7cd64bf..29d3dfb41a1c 100644 --- a/geode-core/src/main/java/com/gemstone/gemfire/internal/cache/partitioned/BucketSizeMessage.java +++ b/geode-core/src/main/java/com/gemstone/gemfire/internal/cache/partitioned/BucketSizeMessage.java @@ -44,7 +44,6 @@ /** * A message used to determine the number of bytes a Bucket consumes. - * @author mthomas * @since 5.0 */ @@ -233,7 +232,6 @@ public long getSize() /** * A processor to capture the value returned by {@link * com.gemstone.gemfire.internal.cache.partitioned.GetMessage.GetReplyMessage} - * @author mthomas * @since 5.0 */ public static class BucketSizeResponse extends ReplyProcessor21 { diff --git a/geode-core/src/main/java/com/gemstone/gemfire/internal/cache/partitioned/ContainsKeyValueMessage.java b/geode-core/src/main/java/com/gemstone/gemfire/internal/cache/partitioned/ContainsKeyValueMessage.java index 1d7656d32009..4a9c684a49e6 100644 --- a/geode-core/src/main/java/com/gemstone/gemfire/internal/cache/partitioned/ContainsKeyValueMessage.java +++ b/geode-core/src/main/java/com/gemstone/gemfire/internal/cache/partitioned/ContainsKeyValueMessage.java @@ -282,7 +282,6 @@ public boolean doesItContainKeyValue() * A processor to capture the value returned by {@link * com.gemstone.gemfire.internal.cache.partitioned.ContainsKeyValueMessage.ContainsKeyValueReplyMessage} * - * @author Mitch Thomas * @since 5.0 */ public static class ContainsKeyValueResponse extends PartitionResponse diff --git a/geode-core/src/main/java/com/gemstone/gemfire/internal/cache/partitioned/CreateBucketMessage.java b/geode-core/src/main/java/com/gemstone/gemfire/internal/cache/partitioned/CreateBucketMessage.java index 9827a2e2dc4e..d8b479f63275 100644 --- a/geode-core/src/main/java/com/gemstone/gemfire/internal/cache/partitioned/CreateBucketMessage.java +++ b/geode-core/src/main/java/com/gemstone/gemfire/internal/cache/partitioned/CreateBucketMessage.java @@ -57,7 +57,6 @@ * the redundancy to be impaired if that datastore crashes (even if it * never hosted that bucket). * - * @author Dan Smith * @since 6.0 * */ @@ -199,7 +198,6 @@ public boolean isSevereAlertCompatible() { /** * A class that contains the reply to a {@link CreateBucketMessage} message * which contains the {@link Node} that has accepted to manage the bucket. - * @author mthomas * @since 5.0 */ public static final class CreateBucketReplyMessage extends ReplyMessage { @@ -298,7 +296,6 @@ public String toString() { /** * A processor to capture the {@link Node} returned by {@link CreateBucketMessage} - * @author mthomas * @since 5.0 */ static public class NodeResponse extends ReplyProcessor21 { diff --git a/geode-core/src/main/java/com/gemstone/gemfire/internal/cache/partitioned/DeposePrimaryBucketMessage.java b/geode-core/src/main/java/com/gemstone/gemfire/internal/cache/partitioned/DeposePrimaryBucketMessage.java index 90d2ba2799f8..0bda88f61f61 100755 --- a/geode-core/src/main/java/com/gemstone/gemfire/internal/cache/partitioned/DeposePrimaryBucketMessage.java +++ b/geode-core/src/main/java/com/gemstone/gemfire/internal/cache/partitioned/DeposePrimaryBucketMessage.java @@ -47,7 +47,6 @@ if (response != null && response.waitForResponse()) { // primary was deposed } - * @author Kirk Lund */ public class DeposePrimaryBucketMessage extends PartitionMessage { diff --git a/geode-core/src/main/java/com/gemstone/gemfire/internal/cache/partitioned/DestroyMessage.java b/geode-core/src/main/java/com/gemstone/gemfire/internal/cache/partitioned/DestroyMessage.java index 18261b5d14c3..a30b9f2f65b9 100644 --- a/geode-core/src/main/java/com/gemstone/gemfire/internal/cache/partitioned/DestroyMessage.java +++ b/geode-core/src/main/java/com/gemstone/gemfire/internal/cache/partitioned/DestroyMessage.java @@ -69,8 +69,6 @@ * frequently, if they are not then it makes sense to fold the destroy and the * invalidate into the same message and use an extra bit to differentiate * - * @author mthomas - * @author bruce * @since 5.0 * */ diff --git a/geode-core/src/main/java/com/gemstone/gemfire/internal/cache/partitioned/DestroyRegionOnDataStoreMessage.java b/geode-core/src/main/java/com/gemstone/gemfire/internal/cache/partitioned/DestroyRegionOnDataStoreMessage.java index 19d014f1dbab..01303728eb6e 100644 --- a/geode-core/src/main/java/com/gemstone/gemfire/internal/cache/partitioned/DestroyRegionOnDataStoreMessage.java +++ b/geode-core/src/main/java/com/gemstone/gemfire/internal/cache/partitioned/DestroyRegionOnDataStoreMessage.java @@ -41,7 +41,6 @@ * A message sent to a data store telling that data store to globally * destroy the region on behalf of a PR accessor. * - * @author mthomas * @since 5.0 */ public final class DestroyRegionOnDataStoreMessage extends PartitionMessage diff --git a/geode-core/src/main/java/com/gemstone/gemfire/internal/cache/partitioned/DumpAllPRConfigMessage.java b/geode-core/src/main/java/com/gemstone/gemfire/internal/cache/partitioned/DumpAllPRConfigMessage.java index e6c2e756ab47..ad725e13df3e 100755 --- a/geode-core/src/main/java/com/gemstone/gemfire/internal/cache/partitioned/DumpAllPRConfigMessage.java +++ b/geode-core/src/main/java/com/gemstone/gemfire/internal/cache/partitioned/DumpAllPRConfigMessage.java @@ -33,7 +33,6 @@ * which sends this message to all VMs that have that PartitionedRegion defined. * * @see com.gemstone.gemfire.internal.cache.PartitionedRegion#sendDumpAllPartitionedRegions() - * @author Tushar Apshankar */ public final class DumpAllPRConfigMessage extends PartitionMessage { diff --git a/geode-core/src/main/java/com/gemstone/gemfire/internal/cache/partitioned/DumpB2NRegion.java b/geode-core/src/main/java/com/gemstone/gemfire/internal/cache/partitioned/DumpB2NRegion.java index ec718fe9ceba..11422655df21 100644 --- a/geode-core/src/main/java/com/gemstone/gemfire/internal/cache/partitioned/DumpB2NRegion.java +++ b/geode-core/src/main/java/com/gemstone/gemfire/internal/cache/partitioned/DumpB2NRegion.java @@ -56,7 +56,6 @@ * which sends this message to all VMs that have that PartitionedRegion defined. * * @see com.gemstone.gemfire.internal.cache.PartitionedRegion#sendDumpB2NRegionForBucket(int) - * @author rreja */ public final class DumpB2NRegion extends PartitionMessage { diff --git a/geode-core/src/main/java/com/gemstone/gemfire/internal/cache/partitioned/DumpBucketsMessage.java b/geode-core/src/main/java/com/gemstone/gemfire/internal/cache/partitioned/DumpBucketsMessage.java index c218c08d0a25..c23379c8a892 100644 --- a/geode-core/src/main/java/com/gemstone/gemfire/internal/cache/partitioned/DumpBucketsMessage.java +++ b/geode-core/src/main/java/com/gemstone/gemfire/internal/cache/partitioned/DumpBucketsMessage.java @@ -38,7 +38,6 @@ * PartitionedRegion defined. * * @see com.gemstone.gemfire.internal.cache.PartitionedRegion#dumpAllBuckets(boolean) - * @author Mitch Thomas */ public final class DumpBucketsMessage extends PartitionMessage { diff --git a/geode-core/src/main/java/com/gemstone/gemfire/internal/cache/partitioned/EndBucketCreationMessage.java b/geode-core/src/main/java/com/gemstone/gemfire/internal/cache/partitioned/EndBucketCreationMessage.java index 1b3f2255c4ae..887502fa2c41 100644 --- a/geode-core/src/main/java/com/gemstone/gemfire/internal/cache/partitioned/EndBucketCreationMessage.java +++ b/geode-core/src/main/java/com/gemstone/gemfire/internal/cache/partitioned/EndBucketCreationMessage.java @@ -36,7 +36,6 @@ * .createBucketAtomically, because the buckets created during that * time do not volunteer for primary until receiving this message. * - * @author Dan Smith */ public class EndBucketCreationMessage extends PartitionMessage { diff --git a/geode-core/src/main/java/com/gemstone/gemfire/internal/cache/partitioned/FetchBulkEntriesMessage.java b/geode-core/src/main/java/com/gemstone/gemfire/internal/cache/partitioned/FetchBulkEntriesMessage.java index 0c93f9e9e1d3..93501aab845b 100644 --- a/geode-core/src/main/java/com/gemstone/gemfire/internal/cache/partitioned/FetchBulkEntriesMessage.java +++ b/geode-core/src/main/java/com/gemstone/gemfire/internal/cache/partitioned/FetchBulkEntriesMessage.java @@ -64,7 +64,6 @@ /** * - * @author ashetkar * @since 8.0 */ public final class FetchBulkEntriesMessage extends PartitionMessage @@ -478,7 +477,6 @@ else if (chunkStream != null) { /** * A processor to capture the value returned by {@link * com.gemstone.gemfire.internal.cache.partitioned.FetchBulkEntriesMessage} - * @author ashetkar * @since 8.0 */ public static class FetchBulkEntriesResponse extends ReplyProcessor21 { diff --git a/geode-core/src/main/java/com/gemstone/gemfire/internal/cache/partitioned/FetchEntriesMessage.java b/geode-core/src/main/java/com/gemstone/gemfire/internal/cache/partitioned/FetchEntriesMessage.java index 03421642c4ef..6625f3dc84f6 100644 --- a/geode-core/src/main/java/com/gemstone/gemfire/internal/cache/partitioned/FetchEntriesMessage.java +++ b/geode-core/src/main/java/com/gemstone/gemfire/internal/cache/partitioned/FetchEntriesMessage.java @@ -448,7 +448,6 @@ else if (chunkStream != null) { /** * A processor to capture the value returned by {@link * com.gemstone.gemfire.internal.cache.partitioned.GetMessage.GetReplyMessage} - * @author mthomas * @since 5.0 */ public static class FetchEntriesResponse extends ReplyProcessor21 { diff --git a/geode-core/src/main/java/com/gemstone/gemfire/internal/cache/partitioned/FetchEntryMessage.java b/geode-core/src/main/java/com/gemstone/gemfire/internal/cache/partitioned/FetchEntryMessage.java index ef7b07a60ec2..ae363ba53eeb 100644 --- a/geode-core/src/main/java/com/gemstone/gemfire/internal/cache/partitioned/FetchEntryMessage.java +++ b/geode-core/src/main/java/com/gemstone/gemfire/internal/cache/partitioned/FetchEntryMessage.java @@ -60,7 +60,6 @@ * reply is sent in a {@link * com.gemstone.gemfire.internal.cache.partitioned.FetchEntryMessage.FetchEntryReplyMessage}. * - * @author bruce * @since 5.1 */ public final class FetchEntryMessage extends PartitionMessage @@ -242,7 +241,6 @@ public final void setKey(Object key) { /** * This message is used for the reply to a {@link FetchEntryMessage}. * - * @author mthomas * @since 5.0 */ public static final class FetchEntryReplyMessage extends ReplyMessage diff --git a/geode-core/src/main/java/com/gemstone/gemfire/internal/cache/partitioned/FetchKeysMessage.java b/geode-core/src/main/java/com/gemstone/gemfire/internal/cache/partitioned/FetchKeysMessage.java index 41e08b3ee66b..d7c7d71f4aa5 100644 --- a/geode-core/src/main/java/com/gemstone/gemfire/internal/cache/partitioned/FetchKeysMessage.java +++ b/geode-core/src/main/java/com/gemstone/gemfire/internal/cache/partitioned/FetchKeysMessage.java @@ -453,7 +453,6 @@ else if (chunk != null) { /** * A processor to capture the value returned by {@link * com.gemstone.gemfire.internal.cache.partitioned.GetMessage.GetReplyMessage} - * @author mthomas * @since 5.0 */ public static class FetchKeysResponse extends PartitionResponse { diff --git a/geode-core/src/main/java/com/gemstone/gemfire/internal/cache/partitioned/FlushMessage.java b/geode-core/src/main/java/com/gemstone/gemfire/internal/cache/partitioned/FlushMessage.java index 72306a1b16a9..1d9bf58d54d6 100644 --- a/geode-core/src/main/java/com/gemstone/gemfire/internal/cache/partitioned/FlushMessage.java +++ b/geode-core/src/main/java/com/gemstone/gemfire/internal/cache/partitioned/FlushMessage.java @@ -44,7 +44,6 @@ * as the reply. This was to leverage the fact that the message is a * {@link com.gemstone.gemfire.distributed.internal.SerialDistributionMessage}.

    * - * @author Mitch Thomas * @since 5.1 */ public final class FlushMessage extends SerialDistributionMessage implements MessageWithReply diff --git a/geode-core/src/main/java/com/gemstone/gemfire/internal/cache/partitioned/GetMessage.java b/geode-core/src/main/java/com/gemstone/gemfire/internal/cache/partitioned/GetMessage.java index 84e94b48fcd9..047d1c7da5ad 100644 --- a/geode-core/src/main/java/com/gemstone/gemfire/internal/cache/partitioned/GetMessage.java +++ b/geode-core/src/main/java/com/gemstone/gemfire/internal/cache/partitioned/GetMessage.java @@ -74,7 +74,6 @@ * Since the {@link com.gemstone.gemfire.cache.Region#get(Object)}operation is * used very frequently the performance of this class is critical. * - * @author Mitch Thomas * @since 5.0 */ public final class GetMessage extends PartitionMessageWithDirectReply @@ -331,7 +330,6 @@ public static GetResponse send(InternalDistributedMember recipient, * is used very frequently the performance of this class is * critical. * - * @author mthomas * @since 5.0 */ public static final class GetReplyMessage extends ReplyMessage @@ -539,7 +537,6 @@ else if (this.valueInBytes == null) { * A processor to capture the value returned by {@link * com.gemstone.gemfire.internal.cache.partitioned.GetMessage.GetReplyMessage} * - * @author Mitch Thomas * @since 5.0 */ public static class GetResponse extends PartitionResponse { diff --git a/geode-core/src/main/java/com/gemstone/gemfire/internal/cache/partitioned/IdentityRequestMessage.java b/geode-core/src/main/java/com/gemstone/gemfire/internal/cache/partitioned/IdentityRequestMessage.java index 4fce38a6bd1f..31eb415eff79 100644 --- a/geode-core/src/main/java/com/gemstone/gemfire/internal/cache/partitioned/IdentityRequestMessage.java +++ b/geode-core/src/main/java/com/gemstone/gemfire/internal/cache/partitioned/IdentityRequestMessage.java @@ -41,7 +41,6 @@ /** * A message sent to determine the most recent PartitionedRegion identity - * @author mthomas * @since 5.0 */ public final class IdentityRequestMessage extends DistributionMessage implements MessageWithReply @@ -178,7 +177,6 @@ public String toString() /** * The message that contains the Integer identity response to the {@link IdentityRequestMessage} * - * @author mthomas * @since 5.0 */ public static final class IdentityReplyMessage extends HighPriorityDistributionMessage { @@ -278,7 +276,6 @@ public Integer getId() { /** * The response to a {@link IdentityRequestMessage} use {@link #waitForId()} to * capture the identity - * @author mthomas * @since 5.0 */ public static class IdentityResponse extends ReplyProcessor21 { diff --git a/geode-core/src/main/java/com/gemstone/gemfire/internal/cache/partitioned/IdentityUpdateMessage.java b/geode-core/src/main/java/com/gemstone/gemfire/internal/cache/partitioned/IdentityUpdateMessage.java index 233b09e21e28..8605670a5cba 100644 --- a/geode-core/src/main/java/com/gemstone/gemfire/internal/cache/partitioned/IdentityUpdateMessage.java +++ b/geode-core/src/main/java/com/gemstone/gemfire/internal/cache/partitioned/IdentityUpdateMessage.java @@ -145,7 +145,6 @@ public String toString() /** * A processor that ignores exceptions, silently removing those nodes that reply with problems - * @author mthomas * @since 5.0 */ public static class IdentityUpdateResponse extends ReplyProcessor21 { diff --git a/geode-core/src/main/java/com/gemstone/gemfire/internal/cache/partitioned/InterestEventMessage.java b/geode-core/src/main/java/com/gemstone/gemfire/internal/cache/partitioned/InterestEventMessage.java index 96bb07df5dd1..ce242cd398d7 100755 --- a/geode-core/src/main/java/com/gemstone/gemfire/internal/cache/partitioned/InterestEventMessage.java +++ b/geode-core/src/main/java/com/gemstone/gemfire/internal/cache/partitioned/InterestEventMessage.java @@ -45,7 +45,6 @@ * This message is used as the notification that a client interest registration or * unregistration event occurred. * - * @author Barry Oglesby * @since 5.8BetaSUISSE */ public class InterestEventMessage extends PartitionMessage { @@ -158,7 +157,6 @@ public static InterestEventResponse send(Set recipients, /** * This message is used for the reply to a {@link InterestEventMessage}. * - * @author Barry Oglesby * @since 5.8BetaSUISSE */ public static class InterestEventReplyMessage extends @@ -250,7 +248,6 @@ public int getDSFID() { * A processor to capture the value returned by {@link * com.gemstone.gemfire.internal.cache.partitioned.InterestEventMessage.InterestEventReplyMessage} * - * @author Barry Oglesby * @since 5.1 */ public static class InterestEventResponse extends PartitionResponse { diff --git a/geode-core/src/main/java/com/gemstone/gemfire/internal/cache/partitioned/InternalPRInfo.java b/geode-core/src/main/java/com/gemstone/gemfire/internal/cache/partitioned/InternalPRInfo.java index 3a079955ca90..edfa5a02b52e 100755 --- a/geode-core/src/main/java/com/gemstone/gemfire/internal/cache/partitioned/InternalPRInfo.java +++ b/geode-core/src/main/java/com/gemstone/gemfire/internal/cache/partitioned/InternalPRInfo.java @@ -24,7 +24,6 @@ /** * Extends PartitionRegionInfo with internal-only methods. * - * @author Kirk Lund */ public interface InternalPRInfo extends PartitionRegionInfo, Comparable { diff --git a/geode-core/src/main/java/com/gemstone/gemfire/internal/cache/partitioned/InternalPartitionDetails.java b/geode-core/src/main/java/com/gemstone/gemfire/internal/cache/partitioned/InternalPartitionDetails.java index 06cb7c33d720..dce412e14234 100755 --- a/geode-core/src/main/java/com/gemstone/gemfire/internal/cache/partitioned/InternalPartitionDetails.java +++ b/geode-core/src/main/java/com/gemstone/gemfire/internal/cache/partitioned/InternalPartitionDetails.java @@ -22,7 +22,6 @@ * Provides load and bucket level details for internal use. Extends * {@link com.gemstone.gemfire.cache.partition.PartitionMemberInfo}. * - * @author Kirk Lund */ public interface InternalPartitionDetails extends PartitionMemberInfo, Comparable { diff --git a/geode-core/src/main/java/com/gemstone/gemfire/internal/cache/partitioned/InvalidateMessage.java b/geode-core/src/main/java/com/gemstone/gemfire/internal/cache/partitioned/InvalidateMessage.java index d909af42b573..8c14e493949d 100644 --- a/geode-core/src/main/java/com/gemstone/gemfire/internal/cache/partitioned/InvalidateMessage.java +++ b/geode-core/src/main/java/com/gemstone/gemfire/internal/cache/partitioned/InvalidateMessage.java @@ -363,7 +363,6 @@ public String toString() { } /** * A processor to capture the value returned by {@link InvalidateMessage} - * @author bruce * @since 5.1 */ public static class InvalidateResponse extends PartitionResponse { diff --git a/geode-core/src/main/java/com/gemstone/gemfire/internal/cache/partitioned/LoadProbe.java b/geode-core/src/main/java/com/gemstone/gemfire/internal/cache/partitioned/LoadProbe.java index 5ede90b3db9e..8785a7c69ecc 100644 --- a/geode-core/src/main/java/com/gemstone/gemfire/internal/cache/partitioned/LoadProbe.java +++ b/geode-core/src/main/java/com/gemstone/gemfire/internal/cache/partitioned/LoadProbe.java @@ -25,7 +25,6 @@ * and sent to all of the data stores to gather their load. In the future, this * class or something like it may be exposed to customers to allow them to * provide different methods for determining load. - * @author dsmith * */ public interface LoadProbe extends DataSerializable { diff --git a/geode-core/src/main/java/com/gemstone/gemfire/internal/cache/partitioned/ManageBackupBucketMessage.java b/geode-core/src/main/java/com/gemstone/gemfire/internal/cache/partitioned/ManageBackupBucketMessage.java index e4851055f049..7c9070a35549 100644 --- a/geode-core/src/main/java/com/gemstone/gemfire/internal/cache/partitioned/ManageBackupBucketMessage.java +++ b/geode-core/src/main/java/com/gemstone/gemfire/internal/cache/partitioned/ManageBackupBucketMessage.java @@ -47,7 +47,6 @@ /** * A request to manage a particular bucket * - * @author Mitch Thomas * @since 5.0 * */ @@ -225,7 +224,6 @@ public boolean isSevereAlertCompatible() { /** * A class that contains the reply to a {@link ManageBackupBucketMessage} message * which contains the {@link Node} that has accepted to manage the bucket. - * @author mthomas * @since 5.0 */ public static final class ManageBackupBucketReplyMessage extends ReplyMessage { @@ -354,7 +352,6 @@ public String toString() { /** * A processor to capture the {@link Node} returned by {@link ManageBackupBucketMessage} - * @author mthomas * @since 5.0 */ static public class NodeResponse extends ReplyProcessor21 { diff --git a/geode-core/src/main/java/com/gemstone/gemfire/internal/cache/partitioned/ManageBucketMessage.java b/geode-core/src/main/java/com/gemstone/gemfire/internal/cache/partitioned/ManageBucketMessage.java index 038906bb1ed5..25acd5af43e2 100644 --- a/geode-core/src/main/java/com/gemstone/gemfire/internal/cache/partitioned/ManageBucketMessage.java +++ b/geode-core/src/main/java/com/gemstone/gemfire/internal/cache/partitioned/ManageBucketMessage.java @@ -47,7 +47,6 @@ /** * A request to manage a particular bucket * - * @author Mitch Thomas * @since 5.0 * */ @@ -210,7 +209,6 @@ public boolean isSevereAlertCompatible() { /** * A class that contains the reply to a {@link ManageBucketMessage} message * which contains the {@link Node} that has accepted to manage the bucket. - * @author mthomas * @since 5.0 */ public static final class ManageBucketReplyMessage extends ReplyMessage { @@ -339,7 +337,6 @@ public String toString() { /** * A processor to capture the {@link Node} returned by {@link ManageBucketMessage} - * @author mthomas * @since 5.0 */ static public class NodeResponse extends ReplyProcessor21 { diff --git a/geode-core/src/main/java/com/gemstone/gemfire/internal/cache/partitioned/MoveBucketMessage.java b/geode-core/src/main/java/com/gemstone/gemfire/internal/cache/partitioned/MoveBucketMessage.java index 22210005d952..78e1ae11c9ee 100755 --- a/geode-core/src/main/java/com/gemstone/gemfire/internal/cache/partitioned/MoveBucketMessage.java +++ b/geode-core/src/main/java/com/gemstone/gemfire/internal/cache/partitioned/MoveBucketMessage.java @@ -53,7 +53,6 @@ * // bucket was moved * } * - * @author Kirk Lund */ public class MoveBucketMessage extends PartitionMessage { private static final Logger logger = LogService.getLogger(); diff --git a/geode-core/src/main/java/com/gemstone/gemfire/internal/cache/partitioned/OfflineMemberDetails.java b/geode-core/src/main/java/com/gemstone/gemfire/internal/cache/partitioned/OfflineMemberDetails.java index fcb0923c64e0..8b07e24e6e94 100644 --- a/geode-core/src/main/java/com/gemstone/gemfire/internal/cache/partitioned/OfflineMemberDetails.java +++ b/geode-core/src/main/java/com/gemstone/gemfire/internal/cache/partitioned/OfflineMemberDetails.java @@ -26,7 +26,6 @@ import com.gemstone.gemfire.internal.cache.persistence.PersistentMemberID; /** - * @author dsmith * */ public interface OfflineMemberDetails extends DataSerializable { diff --git a/geode-core/src/main/java/com/gemstone/gemfire/internal/cache/partitioned/OfflineMemberDetailsImpl.java b/geode-core/src/main/java/com/gemstone/gemfire/internal/cache/partitioned/OfflineMemberDetailsImpl.java index ae9bb29eb31b..ca00b060a513 100644 --- a/geode-core/src/main/java/com/gemstone/gemfire/internal/cache/partitioned/OfflineMemberDetailsImpl.java +++ b/geode-core/src/main/java/com/gemstone/gemfire/internal/cache/partitioned/OfflineMemberDetailsImpl.java @@ -28,7 +28,6 @@ import com.gemstone.gemfire.internal.cache.persistence.PersistentMemberID; /** - * @author dsmith * */ public class OfflineMemberDetailsImpl implements OfflineMemberDetails, Serializable, DataSerializable { diff --git a/geode-core/src/main/java/com/gemstone/gemfire/internal/cache/partitioned/PREntriesIterator.java b/geode-core/src/main/java/com/gemstone/gemfire/internal/cache/partitioned/PREntriesIterator.java index 5c24497d66c8..ec2a8dbf1880 100644 --- a/geode-core/src/main/java/com/gemstone/gemfire/internal/cache/partitioned/PREntriesIterator.java +++ b/geode-core/src/main/java/com/gemstone/gemfire/internal/cache/partitioned/PREntriesIterator.java @@ -28,7 +28,6 @@ * PartitionedRegion.KeysSetIterator used by SqlFabric to obtain information of * the bucket ID from which the current local entry is being fetched from. * - * @author Asif */ public interface PREntriesIterator extends Iterator{ diff --git a/geode-core/src/main/java/com/gemstone/gemfire/internal/cache/partitioned/PRLoad.java b/geode-core/src/main/java/com/gemstone/gemfire/internal/cache/partitioned/PRLoad.java index a5b73a18d485..f8f1f78f925d 100644 --- a/geode-core/src/main/java/com/gemstone/gemfire/internal/cache/partitioned/PRLoad.java +++ b/geode-core/src/main/java/com/gemstone/gemfire/internal/cache/partitioned/PRLoad.java @@ -28,8 +28,6 @@ * A class which holds the load for a partitioned region * on a given VM. * - * @author dsmith - * @author Kirk Lund * @since 6.0 */ public final class PRLoad implements DataSerializable { diff --git a/geode-core/src/main/java/com/gemstone/gemfire/internal/cache/partitioned/PRLocallyDestroyedException.java b/geode-core/src/main/java/com/gemstone/gemfire/internal/cache/partitioned/PRLocallyDestroyedException.java index b47d2757ee4d..6ea159ecccbb 100644 --- a/geode-core/src/main/java/com/gemstone/gemfire/internal/cache/partitioned/PRLocallyDestroyedException.java +++ b/geode-core/src/main/java/com/gemstone/gemfire/internal/cache/partitioned/PRLocallyDestroyedException.java @@ -22,7 +22,6 @@ /** * An exception indicating that a PartitionedRegion was found to be Locally * Destroyed - * @author bruce * @since 5.1 * */ diff --git a/geode-core/src/main/java/com/gemstone/gemfire/internal/cache/partitioned/PRSanityCheckMessage.java b/geode-core/src/main/java/com/gemstone/gemfire/internal/cache/partitioned/PRSanityCheckMessage.java index 547f6908a5d0..47b73ba9ebe4 100755 --- a/geode-core/src/main/java/com/gemstone/gemfire/internal/cache/partitioned/PRSanityCheckMessage.java +++ b/geode-core/src/main/java/com/gemstone/gemfire/internal/cache/partitioned/PRSanityCheckMessage.java @@ -38,7 +38,6 @@ * PRSanityCheckMessage is used to assert correctness of prID assignments * across the distributed system. * - * @author bruce * */ public final class PRSanityCheckMessage extends PartitionMessage diff --git a/geode-core/src/main/java/com/gemstone/gemfire/internal/cache/partitioned/PRTombstoneMessage.java b/geode-core/src/main/java/com/gemstone/gemfire/internal/cache/partitioned/PRTombstoneMessage.java index 57b6d43faf0d..d004182e6a19 100644 --- a/geode-core/src/main/java/com/gemstone/gemfire/internal/cache/partitioned/PRTombstoneMessage.java +++ b/geode-core/src/main/java/com/gemstone/gemfire/internal/cache/partitioned/PRTombstoneMessage.java @@ -51,7 +51,6 @@ /** * This message class sends tombstone GC information to other PR holders * @since 7.0 - * @author Bruce Schuchardt */ public final class PRTombstoneMessage extends PartitionMessageWithDirectReply implements SerializationVersions { diff --git a/geode-core/src/main/java/com/gemstone/gemfire/internal/cache/partitioned/PRUpdateEntryVersionMessage.java b/geode-core/src/main/java/com/gemstone/gemfire/internal/cache/partitioned/PRUpdateEntryVersionMessage.java index 49053f7aebe3..7fcb0310abdc 100644 --- a/geode-core/src/main/java/com/gemstone/gemfire/internal/cache/partitioned/PRUpdateEntryVersionMessage.java +++ b/geode-core/src/main/java/com/gemstone/gemfire/internal/cache/partitioned/PRUpdateEntryVersionMessage.java @@ -56,7 +56,6 @@ * This message is generated based on event received on GatewayReceiver for * updating the time-stamp in a version tag for a RegionEntry. * - * @author Shobhit Agarwal * */ public class PRUpdateEntryVersionMessage extends diff --git a/geode-core/src/main/java/com/gemstone/gemfire/internal/cache/partitioned/PartitionMemberInfoImpl.java b/geode-core/src/main/java/com/gemstone/gemfire/internal/cache/partitioned/PartitionMemberInfoImpl.java index 60eb8d98d98b..76113519e28b 100755 --- a/geode-core/src/main/java/com/gemstone/gemfire/internal/cache/partitioned/PartitionMemberInfoImpl.java +++ b/geode-core/src/main/java/com/gemstone/gemfire/internal/cache/partitioned/PartitionMemberInfoImpl.java @@ -24,7 +24,6 @@ * Implements PartitionMemberInfo. Serializable form is used to allow JMX * MBeans to use this as a remotable return type. * - * @author Kirk Lund */ public class PartitionMemberInfoImpl implements InternalPartitionDetails, Serializable { diff --git a/geode-core/src/main/java/com/gemstone/gemfire/internal/cache/partitioned/PartitionMessage.java b/geode-core/src/main/java/com/gemstone/gemfire/internal/cache/partitioned/PartitionMessage.java index a439fe9d284b..626efefc1921 100644 --- a/geode-core/src/main/java/com/gemstone/gemfire/internal/cache/partitioned/PartitionMessage.java +++ b/geode-core/src/main/java/com/gemstone/gemfire/internal/cache/partitioned/PartitionMessage.java @@ -71,8 +71,6 @@ * The base PartitionedRegion message type upon which other messages should be * based. * - * @author mthomas - * @author bruce * @since 5.0 */ public abstract class PartitionMessage extends DistributionMessage implements @@ -702,7 +700,6 @@ protected final boolean _mayAddToMultipleSerialGateways(DistributionManager dm) * recipient, capturing any CacheException thrown by the recipient and handle * it as an expected exception. * - * @author Mitch Thomas * @since 5.0 * @see #waitForCacheException() */ diff --git a/geode-core/src/main/java/com/gemstone/gemfire/internal/cache/partitioned/PartitionMessageWithDirectReply.java b/geode-core/src/main/java/com/gemstone/gemfire/internal/cache/partitioned/PartitionMessageWithDirectReply.java index 15fed93e45be..2ac81c923987 100644 --- a/geode-core/src/main/java/com/gemstone/gemfire/internal/cache/partitioned/PartitionMessageWithDirectReply.java +++ b/geode-core/src/main/java/com/gemstone/gemfire/internal/cache/partitioned/PartitionMessageWithDirectReply.java @@ -39,7 +39,6 @@ * * Additionally, if the ReplyProcessor used for this message extends PartitionResponse, it should * pass false for the register parameter of the PartitionResponse. - * @author dsmith * */ public abstract class PartitionMessageWithDirectReply extends diff --git a/geode-core/src/main/java/com/gemstone/gemfire/internal/cache/partitioned/PartitionedRegionObserver.java b/geode-core/src/main/java/com/gemstone/gemfire/internal/cache/partitioned/PartitionedRegionObserver.java index b70dd8a39080..a3e375379380 100644 --- a/geode-core/src/main/java/com/gemstone/gemfire/internal/cache/partitioned/PartitionedRegionObserver.java +++ b/geode-core/src/main/java/com/gemstone/gemfire/internal/cache/partitioned/PartitionedRegionObserver.java @@ -23,7 +23,6 @@ * events. See the documentation for class PartitionedRegionObserverHolder for * details. * - * @author Kishor Bachhav * */ diff --git a/geode-core/src/main/java/com/gemstone/gemfire/internal/cache/partitioned/PartitionedRegionObserverAdapter.java b/geode-core/src/main/java/com/gemstone/gemfire/internal/cache/partitioned/PartitionedRegionObserverAdapter.java index f2f08f2532fb..14c7180277c7 100644 --- a/geode-core/src/main/java/com/gemstone/gemfire/internal/cache/partitioned/PartitionedRegionObserverAdapter.java +++ b/geode-core/src/main/java/com/gemstone/gemfire/internal/cache/partitioned/PartitionedRegionObserverAdapter.java @@ -24,7 +24,6 @@ * interface PartitionedRegionObserver. See the documentation for class * PartitionedRegionObserverHolder for details. * - * @author Kishor Bachhav */ public class PartitionedRegionObserverAdapter implements PartitionedRegionObserver { diff --git a/geode-core/src/main/java/com/gemstone/gemfire/internal/cache/partitioned/PartitionedRegionObserverHolder.java b/geode-core/src/main/java/com/gemstone/gemfire/internal/cache/partitioned/PartitionedRegionObserverHolder.java index 57e9d5e53c0d..e5a63145dfe4 100644 --- a/geode-core/src/main/java/com/gemstone/gemfire/internal/cache/partitioned/PartitionedRegionObserverHolder.java +++ b/geode-core/src/main/java/com/gemstone/gemfire/internal/cache/partitioned/PartitionedRegionObserverHolder.java @@ -24,7 +24,6 @@ * needed, this member variable should point to an object with 'do-nothing' * methods, such as PartitionedRegionObserverAdapter. * - * @author Kishor Bachhav */ public class PartitionedRegionObserverHolder { diff --git a/geode-core/src/main/java/com/gemstone/gemfire/internal/cache/partitioned/PartitionedRegionRebalanceOp.java b/geode-core/src/main/java/com/gemstone/gemfire/internal/cache/partitioned/PartitionedRegionRebalanceOp.java index a8d13502dc46..864287624d0e 100644 --- a/geode-core/src/main/java/com/gemstone/gemfire/internal/cache/partitioned/PartitionedRegionRebalanceOp.java +++ b/geode-core/src/main/java/com/gemstone/gemfire/internal/cache/partitioned/PartitionedRegionRebalanceOp.java @@ -78,7 +78,6 @@ * There is also a FPRDirector that creates buckets and moves primaries for * fixed partititioned regions. * - * @author dsmith * */ @SuppressWarnings("synthetic-access") @@ -706,7 +705,6 @@ public boolean removeBucket(InternalDistributedMember targetMember, int bucketId /** * A wrapper class which delegates actual bucket operations to the enclosed BucketOperator, * but keeps track of statistics about how many buckets are created, transfered, etc. - * @author dsmith * */ private class BucketOperatorWrapper implements diff --git a/geode-core/src/main/java/com/gemstone/gemfire/internal/cache/partitioned/PrimaryRequestMessage.java b/geode-core/src/main/java/com/gemstone/gemfire/internal/cache/partitioned/PrimaryRequestMessage.java index 80870c3de5e2..5ae1b1fda4fa 100644 --- a/geode-core/src/main/java/com/gemstone/gemfire/internal/cache/partitioned/PrimaryRequestMessage.java +++ b/geode-core/src/main/java/com/gemstone/gemfire/internal/cache/partitioned/PrimaryRequestMessage.java @@ -46,7 +46,6 @@ * primary owner of the bucket. It is sent by client threads which need * to use the bucket, however do not know of its primary location. * - * @author Mitch Thomas * */ public final class PrimaryRequestMessage extends PartitionMessage @@ -142,7 +141,6 @@ public int getProcessorType() /** * The reply to a PrimarRequestMessage, indicating if the sender is the primary - * @author Mitch Thomas */ static public final class PrimaryRequestReplyMessage extends ReplyMessage { private static final long serialVersionUID = 1L; @@ -182,7 +180,6 @@ public void toData(DataOutput out) throws IOException /** * A processor to capture the member who was selected as primary for the bucket requested - * @author Mitch Thomas * @since 5.1 */ static public class PrimaryResponse extends ReplyProcessor21 { diff --git a/geode-core/src/main/java/com/gemstone/gemfire/internal/cache/partitioned/PutAllPRMessage.java b/geode-core/src/main/java/com/gemstone/gemfire/internal/cache/partitioned/PutAllPRMessage.java index b6c7b1ba7fda..cace5ccfdd63 100755 --- a/geode-core/src/main/java/com/gemstone/gemfire/internal/cache/partitioned/PutAllPRMessage.java +++ b/geode-core/src/main/java/com/gemstone/gemfire/internal/cache/partitioned/PutAllPRMessage.java @@ -78,7 +78,6 @@ * a bucket's primary owner. In addition to updating an entry it is also used to * send Partitioned Region event information. * - * @author Gester Zhou * @since 6.0 */ public final class PutAllPRMessage extends PartitionMessageWithDirectReply @@ -846,7 +845,6 @@ public String toString() { /** * A processor to capture the value returned by {@link PutAllPRMessage} - * @author Gester Zhou * @since 5.8 */ public static class PutAllResponse extends PartitionResponse { diff --git a/geode-core/src/main/java/com/gemstone/gemfire/internal/cache/partitioned/PutMessage.java b/geode-core/src/main/java/com/gemstone/gemfire/internal/cache/partitioned/PutMessage.java index c2ff411c063d..235caccc0925 100644 --- a/geode-core/src/main/java/com/gemstone/gemfire/internal/cache/partitioned/PutMessage.java +++ b/geode-core/src/main/java/com/gemstone/gemfire/internal/cache/partitioned/PutMessage.java @@ -79,8 +79,6 @@ * a bucket's primary owner. In addition to updating an entry it is also used to * send Partitioned Region event information. * - * @author Mitch Thomas - * @author bruce * @since 5.0 */ public final class PutMessage extends PartitionMessageWithDirectReply implements NewValueImporter { @@ -1212,7 +1210,6 @@ public void importOldBytes(byte[] ov, boolean isSerialized) { /** * A processor to capture the value returned by {@link PutMessage} - * @author bruce * @since 5.1 */ public static class PutResponse extends PartitionResponse { diff --git a/geode-core/src/main/java/com/gemstone/gemfire/internal/cache/partitioned/RedundancyAlreadyMetException.java b/geode-core/src/main/java/com/gemstone/gemfire/internal/cache/partitioned/RedundancyAlreadyMetException.java index 57ceac5d6bc2..f1b703beb475 100644 --- a/geode-core/src/main/java/com/gemstone/gemfire/internal/cache/partitioned/RedundancyAlreadyMetException.java +++ b/geode-core/src/main/java/com/gemstone/gemfire/internal/cache/partitioned/RedundancyAlreadyMetException.java @@ -19,7 +19,6 @@ import com.gemstone.gemfire.GemFireException; /** - * @author dsmith * */ public class RedundancyAlreadyMetException extends GemFireException { diff --git a/geode-core/src/main/java/com/gemstone/gemfire/internal/cache/partitioned/RedundancyLogger.java b/geode-core/src/main/java/com/gemstone/gemfire/internal/cache/partitioned/RedundancyLogger.java index a3678f9dcf4d..f7e8621fa6a2 100644 --- a/geode-core/src/main/java/com/gemstone/gemfire/internal/cache/partitioned/RedundancyLogger.java +++ b/geode-core/src/main/java/com/gemstone/gemfire/internal/cache/partitioned/RedundancyLogger.java @@ -50,7 +50,6 @@ * is meant to run in its own thread and utilizes the PRHARedundancyProvider's count down latch in order to determine * when it is finished. * - * @author rholmes */ public class RedundancyLogger extends RecoveryRunnable implements PersistentStateListener { @@ -197,7 +196,6 @@ public void run2() { /** * Keeps track of logging a message for a single partitioned region * and logging a separate message when the waiting is done for the same region - * @author dsmith, rholmes * */ private class RegionStatus { diff --git a/geode-core/src/main/java/com/gemstone/gemfire/internal/cache/partitioned/RemoteFetchKeysMessage.java b/geode-core/src/main/java/com/gemstone/gemfire/internal/cache/partitioned/RemoteFetchKeysMessage.java index d6bec58ffbc3..ac95e03830ae 100644 --- a/geode-core/src/main/java/com/gemstone/gemfire/internal/cache/partitioned/RemoteFetchKeysMessage.java +++ b/geode-core/src/main/java/com/gemstone/gemfire/internal/cache/partitioned/RemoteFetchKeysMessage.java @@ -61,7 +61,6 @@ /** * TODO this class should be moved to a different package - * @author sbawaska */ public class RemoteFetchKeysMessage extends RemoteOperationMessage { diff --git a/geode-core/src/main/java/com/gemstone/gemfire/internal/cache/partitioned/RemoteSizeMessage.java b/geode-core/src/main/java/com/gemstone/gemfire/internal/cache/partitioned/RemoteSizeMessage.java index cbbea5545398..566a222a6730 100755 --- a/geode-core/src/main/java/com/gemstone/gemfire/internal/cache/partitioned/RemoteSizeMessage.java +++ b/geode-core/src/main/java/com/gemstone/gemfire/internal/cache/partitioned/RemoteSizeMessage.java @@ -46,7 +46,6 @@ * This message is used to determine the number of Entries in a Region, or its * size. * - * @author mthomas * @since 5.0 */ public final class RemoteSizeMessage extends RemoteOperationMessage @@ -302,7 +301,6 @@ public int getSize() { * A processor to capture the value returned by {@link * com.gemstone.gemfire.internal.cache.partitioned.GetMessage.GetReplyMessage} * - * @author mthomas * @since 5.0 */ public static class SizeResponse extends ReplyProcessor21 diff --git a/geode-core/src/main/java/com/gemstone/gemfire/internal/cache/partitioned/RemoveAllPRMessage.java b/geode-core/src/main/java/com/gemstone/gemfire/internal/cache/partitioned/RemoveAllPRMessage.java index 8b7b23fd768b..c9079430b754 100644 --- a/geode-core/src/main/java/com/gemstone/gemfire/internal/cache/partitioned/RemoveAllPRMessage.java +++ b/geode-core/src/main/java/com/gemstone/gemfire/internal/cache/partitioned/RemoveAllPRMessage.java @@ -77,7 +77,6 @@ /** * PR removeAll * - * @author dschneider * @since 8.1 */ public final class RemoveAllPRMessage extends PartitionMessageWithDirectReply @@ -767,7 +766,6 @@ public String toString() { /** * A processor to capture the value returned by {@link RemoveAllPRMessage} - * @author Darrel Schneider * @since 8.1 */ public static class RemoveAllResponse extends PartitionResponse { diff --git a/geode-core/src/main/java/com/gemstone/gemfire/internal/cache/partitioned/RemoveBucketMessage.java b/geode-core/src/main/java/com/gemstone/gemfire/internal/cache/partitioned/RemoveBucketMessage.java index 7673841bc266..acb960b8939a 100755 --- a/geode-core/src/main/java/com/gemstone/gemfire/internal/cache/partitioned/RemoveBucketMessage.java +++ b/geode-core/src/main/java/com/gemstone/gemfire/internal/cache/partitioned/RemoveBucketMessage.java @@ -51,7 +51,6 @@ * // bucket was removed * } * - * @author Kirk Lund */ public class RemoveBucketMessage extends PartitionMessage { private static final Logger logger = LogService.getLogger(); diff --git a/geode-core/src/main/java/com/gemstone/gemfire/internal/cache/partitioned/RemoveIndexesMessage.java b/geode-core/src/main/java/com/gemstone/gemfire/internal/cache/partitioned/RemoveIndexesMessage.java index d808f9f5aa20..512eba30bbc8 100755 --- a/geode-core/src/main/java/com/gemstone/gemfire/internal/cache/partitioned/RemoveIndexesMessage.java +++ b/geode-core/src/main/java/com/gemstone/gemfire/internal/cache/partitioned/RemoveIndexesMessage.java @@ -50,7 +50,6 @@ * extends PartitionMessage * {@link com.gemstone.gemfire.internal.cache.partitioned.PartitionMessage} * - * @author rdubey * */ public final class RemoveIndexesMessage extends PartitionMessage @@ -333,7 +332,6 @@ else if (logger.isTraceEnabled(LogMarker.DM) && (t instanceof RuntimeException)) * information for successful or unsucessful remove index on the member of * the partitioned region. * - * @author rdubey * */ public static class RemoveIndexesResponse extends PartitionResponse @@ -411,7 +409,6 @@ public int getTotalRemoteBuckets() { /** * Class representing remove index results on pr. * - * @author rdubey */ public static class RemoveIndexesResult { @@ -438,7 +435,6 @@ public RemoveIndexesResult(int numBucketIndexRemoved) { /** * Class for index creation reply. This class has the information about sucessful * or unsucessful index creation. - * @author rdubey * */ public static final class RemoveIndexesReplyMessage extends ReplyMessage { diff --git a/geode-core/src/main/java/com/gemstone/gemfire/internal/cache/partitioned/SizeMessage.java b/geode-core/src/main/java/com/gemstone/gemfire/internal/cache/partitioned/SizeMessage.java index 8b74d5d83f87..2c5064e5b908 100644 --- a/geode-core/src/main/java/com/gemstone/gemfire/internal/cache/partitioned/SizeMessage.java +++ b/geode-core/src/main/java/com/gemstone/gemfire/internal/cache/partitioned/SizeMessage.java @@ -51,7 +51,6 @@ * This message is used to determine the number of Entries in a Region, or its * size. * - * @author mthomas * @since 5.0 */ public final class SizeMessage extends PartitionMessage @@ -313,7 +312,6 @@ public Map getBucketSizes() * A processor to capture the value returned by {@link * com.gemstone.gemfire.internal.cache.partitioned.GetMessage.GetReplyMessage} * - * @author mthomas * @since 5.0 */ public static class SizeResponse extends ReplyProcessor21 diff --git a/geode-core/src/main/java/com/gemstone/gemfire/internal/cache/partitioned/SizedBasedLoadProbe.java b/geode-core/src/main/java/com/gemstone/gemfire/internal/cache/partitioned/SizedBasedLoadProbe.java index 1784365e139f..52a7c5f9cd59 100644 --- a/geode-core/src/main/java/com/gemstone/gemfire/internal/cache/partitioned/SizedBasedLoadProbe.java +++ b/geode-core/src/main/java/com/gemstone/gemfire/internal/cache/partitioned/SizedBasedLoadProbe.java @@ -29,7 +29,6 @@ * A load probe which calculates the load of a pr using * the size of the buckets in bytes. * - * @author dsmith * @since 6.0 */ public class SizedBasedLoadProbe implements LoadProbe, DataSerializableFixedID { diff --git a/geode-core/src/main/java/com/gemstone/gemfire/internal/cache/partitioned/StreamingPartitionOperation.java b/geode-core/src/main/java/com/gemstone/gemfire/internal/cache/partitioned/StreamingPartitionOperation.java index e0bf42d44122..8d1255776318 100644 --- a/geode-core/src/main/java/com/gemstone/gemfire/internal/cache/partitioned/StreamingPartitionOperation.java +++ b/geode-core/src/main/java/com/gemstone/gemfire/internal/cache/partitioned/StreamingPartitionOperation.java @@ -59,7 +59,6 @@ * recipients requesting a potentially large amount of data from a Partitioned Region datastore * and receiving the reply with data chunked into several messages. * - * @author Eric Zoerner */ public abstract class StreamingPartitionOperation extends StreamingOperation { diff --git a/geode-core/src/main/java/com/gemstone/gemfire/internal/cache/partitioned/rebalance/BucketOperator.java b/geode-core/src/main/java/com/gemstone/gemfire/internal/cache/partitioned/rebalance/BucketOperator.java index 6a4e44087b31..91f97bdd7a9d 100644 --- a/geode-core/src/main/java/com/gemstone/gemfire/internal/cache/partitioned/rebalance/BucketOperator.java +++ b/geode-core/src/main/java/com/gemstone/gemfire/internal/cache/partitioned/rebalance/BucketOperator.java @@ -23,7 +23,6 @@ /** * A BucketOperator is used by the PartitionedRegionLoadModel to perform the actual * operations such as moving a bucket or creating a redundant copy. - * @author dsmith * */ public interface BucketOperator { diff --git a/geode-core/src/main/java/com/gemstone/gemfire/internal/cache/partitioned/rebalance/CompositeDirector.java b/geode-core/src/main/java/com/gemstone/gemfire/internal/cache/partitioned/rebalance/CompositeDirector.java index 535868862bc4..9a7f44de7557 100644 --- a/geode-core/src/main/java/com/gemstone/gemfire/internal/cache/partitioned/rebalance/CompositeDirector.java +++ b/geode-core/src/main/java/com/gemstone/gemfire/internal/cache/partitioned/rebalance/CompositeDirector.java @@ -22,7 +22,6 @@ * * This is the most commonly used director. * - * @author dsmith * */ public class CompositeDirector extends RebalanceDirectorAdapter { diff --git a/geode-core/src/main/java/com/gemstone/gemfire/internal/cache/partitioned/rebalance/FPRDirector.java b/geode-core/src/main/java/com/gemstone/gemfire/internal/cache/partitioned/rebalance/FPRDirector.java index 2827574b45ef..d579c10fb29c 100644 --- a/geode-core/src/main/java/com/gemstone/gemfire/internal/cache/partitioned/rebalance/FPRDirector.java +++ b/geode-core/src/main/java/com/gemstone/gemfire/internal/cache/partitioned/rebalance/FPRDirector.java @@ -26,7 +26,6 @@ * Note that unlike other directors, this director performs all the work in * a call to nextStep. * - * @author dsmith * */ public class FPRDirector extends RebalanceDirectorAdapter { diff --git a/geode-core/src/main/java/com/gemstone/gemfire/internal/cache/partitioned/rebalance/MoveBuckets.java b/geode-core/src/main/java/com/gemstone/gemfire/internal/cache/partitioned/rebalance/MoveBuckets.java index 5ac6bfe06011..ce691947296f 100644 --- a/geode-core/src/main/java/com/gemstone/gemfire/internal/cache/partitioned/rebalance/MoveBuckets.java +++ b/geode-core/src/main/java/com/gemstone/gemfire/internal/cache/partitioned/rebalance/MoveBuckets.java @@ -21,7 +21,6 @@ /** * A director to move buckets to improve the load balance of a * PR. This is most commonly used as an element of the composite director. - * @author dsmith * */ public class MoveBuckets extends RebalanceDirectorAdapter { diff --git a/geode-core/src/main/java/com/gemstone/gemfire/internal/cache/partitioned/rebalance/MovePrimaries.java b/geode-core/src/main/java/com/gemstone/gemfire/internal/cache/partitioned/rebalance/MovePrimaries.java index 69f01a413eae..c80bf12b22fc 100644 --- a/geode-core/src/main/java/com/gemstone/gemfire/internal/cache/partitioned/rebalance/MovePrimaries.java +++ b/geode-core/src/main/java/com/gemstone/gemfire/internal/cache/partitioned/rebalance/MovePrimaries.java @@ -21,7 +21,6 @@ /** * A director to move primaries to improve the load balance of a * PR. This is most commonly used as an element of the composite director. - * @author dsmith * */ public class MovePrimaries extends RebalanceDirectorAdapter { diff --git a/geode-core/src/main/java/com/gemstone/gemfire/internal/cache/partitioned/rebalance/MovePrimariesFPR.java b/geode-core/src/main/java/com/gemstone/gemfire/internal/cache/partitioned/rebalance/MovePrimariesFPR.java index 3b6a82495db4..ad2bcbadf236 100644 --- a/geode-core/src/main/java/com/gemstone/gemfire/internal/cache/partitioned/rebalance/MovePrimariesFPR.java +++ b/geode-core/src/main/java/com/gemstone/gemfire/internal/cache/partitioned/rebalance/MovePrimariesFPR.java @@ -32,7 +32,6 @@ /** * A director to move primaries to improve the load balance of a * fixed partition region. This is most commonly used as an FPRDirector - * @author dsmith * */ public class MovePrimariesFPR extends RebalanceDirectorAdapter { diff --git a/geode-core/src/main/java/com/gemstone/gemfire/internal/cache/partitioned/rebalance/PartitionedRegionLoadModel.java b/geode-core/src/main/java/com/gemstone/gemfire/internal/cache/partitioned/rebalance/PartitionedRegionLoadModel.java index 2bbde75effd5..e02401131308 100644 --- a/geode-core/src/main/java/com/gemstone/gemfire/internal/cache/partitioned/rebalance/PartitionedRegionLoadModel.java +++ b/geode-core/src/main/java/com/gemstone/gemfire/internal/cache/partitioned/rebalance/PartitionedRegionLoadModel.java @@ -70,7 +70,6 @@ * * This model is not threadsafe. * - * @author dsmith * @since 6.0 * */ @@ -1078,7 +1077,6 @@ Map getColocatedMembers() { /** * Represents the sum of all of colocated buckets with * a given bucket id. - * @author dsmith * */ protected class BucketRollup extends Bucket { @@ -1503,7 +1501,6 @@ public int compareTo(Bucket other) { * to keep track of moves that we have already attempted * that have failed. * - * @author dsmith * */ protected static class Move { diff --git a/geode-core/src/main/java/com/gemstone/gemfire/internal/cache/partitioned/rebalance/PercentageMoveDirector.java b/geode-core/src/main/java/com/gemstone/gemfire/internal/cache/partitioned/rebalance/PercentageMoveDirector.java index 591561c11810..c1ba298c5511 100644 --- a/geode-core/src/main/java/com/gemstone/gemfire/internal/cache/partitioned/rebalance/PercentageMoveDirector.java +++ b/geode-core/src/main/java/com/gemstone/gemfire/internal/cache/partitioned/rebalance/PercentageMoveDirector.java @@ -42,7 +42,6 @@ * use the same value for load and cost, there's no need to complicate things * now. * - * @author dsmith * */ public class PercentageMoveDirector extends RebalanceDirectorAdapter { @@ -148,7 +147,6 @@ public boolean nextStep() { /** * A comparator that compares buckets by load, and then by bucket id. - * @author dsmith */ private static class LoadComparator implements Comparator { diff --git a/geode-core/src/main/java/com/gemstone/gemfire/internal/cache/partitioned/rebalance/RebalanceDirector.java b/geode-core/src/main/java/com/gemstone/gemfire/internal/cache/partitioned/rebalance/RebalanceDirector.java index 5d62d1e2c9a1..c283b275c934 100644 --- a/geode-core/src/main/java/com/gemstone/gemfire/internal/cache/partitioned/rebalance/RebalanceDirector.java +++ b/geode-core/src/main/java/com/gemstone/gemfire/internal/cache/partitioned/rebalance/RebalanceDirector.java @@ -25,7 +25,6 @@ * to the system such as creating buckets, moving buckets, * or moving primaries. * - * @author dsmith * */ public interface RebalanceDirector { diff --git a/geode-core/src/main/java/com/gemstone/gemfire/internal/cache/partitioned/rebalance/RebalanceDirectorAdapter.java b/geode-core/src/main/java/com/gemstone/gemfire/internal/cache/partitioned/rebalance/RebalanceDirectorAdapter.java index 083501ff4408..da58f9e212ea 100644 --- a/geode-core/src/main/java/com/gemstone/gemfire/internal/cache/partitioned/rebalance/RebalanceDirectorAdapter.java +++ b/geode-core/src/main/java/com/gemstone/gemfire/internal/cache/partitioned/rebalance/RebalanceDirectorAdapter.java @@ -20,7 +20,6 @@ * A base class for rebalance directors that provides some * default implementations of methods on rebalance director. * - * @author dsmith * */ public abstract class RebalanceDirectorAdapter implements RebalanceDirector { diff --git a/geode-core/src/main/java/com/gemstone/gemfire/internal/cache/partitioned/rebalance/RemoveOverRedundancy.java b/geode-core/src/main/java/com/gemstone/gemfire/internal/cache/partitioned/rebalance/RemoveOverRedundancy.java index 9d835b434328..e34724ec3fd7 100644 --- a/geode-core/src/main/java/com/gemstone/gemfire/internal/cache/partitioned/rebalance/RemoveOverRedundancy.java +++ b/geode-core/src/main/java/com/gemstone/gemfire/internal/cache/partitioned/rebalance/RemoveOverRedundancy.java @@ -26,7 +26,6 @@ /** * A director to remove copies of buckets when the bucket exceeds the redundancy * level. This is most commonly used as an element of the composite director. - * @author dsmith * */ public class RemoveOverRedundancy extends RebalanceDirectorAdapter { diff --git a/geode-core/src/main/java/com/gemstone/gemfire/internal/cache/partitioned/rebalance/SatisfyRedundancy.java b/geode-core/src/main/java/com/gemstone/gemfire/internal/cache/partitioned/rebalance/SatisfyRedundancy.java index 1898ccfae175..6a6da8fd55ed 100644 --- a/geode-core/src/main/java/com/gemstone/gemfire/internal/cache/partitioned/rebalance/SatisfyRedundancy.java +++ b/geode-core/src/main/java/com/gemstone/gemfire/internal/cache/partitioned/rebalance/SatisfyRedundancy.java @@ -25,7 +25,6 @@ /** * A director to create redundant copies for buckets that are low in redundancy * level. This is most commonly used as an element of the composite director. - * @author dsmith * */ public class SatisfyRedundancy extends RebalanceDirectorAdapter { diff --git a/geode-core/src/main/java/com/gemstone/gemfire/internal/cache/partitioned/rebalance/SimulatedBucketOperator.java b/geode-core/src/main/java/com/gemstone/gemfire/internal/cache/partitioned/rebalance/SimulatedBucketOperator.java index ac7af059f53b..bf2504917316 100644 --- a/geode-core/src/main/java/com/gemstone/gemfire/internal/cache/partitioned/rebalance/SimulatedBucketOperator.java +++ b/geode-core/src/main/java/com/gemstone/gemfire/internal/cache/partitioned/rebalance/SimulatedBucketOperator.java @@ -22,7 +22,6 @@ /** * A BucketOperator which does nothing. Used for simulations. - * @author dsmith * */ public class SimulatedBucketOperator implements BucketOperator { diff --git a/geode-core/src/main/java/com/gemstone/gemfire/internal/cache/persistence/BackupInspector.java b/geode-core/src/main/java/com/gemstone/gemfire/internal/cache/persistence/BackupInspector.java index ae008e34a548..6ec0e4c6f281 100644 --- a/geode-core/src/main/java/com/gemstone/gemfire/internal/cache/persistence/BackupInspector.java +++ b/geode-core/src/main/java/com/gemstone/gemfire/internal/cache/persistence/BackupInspector.java @@ -28,7 +28,6 @@ /** * Inspects a completed backup and parses the operation log file data from the restore script produced by a previous backup. - * @author rholmes */ public abstract class BackupInspector { /** @@ -184,7 +183,6 @@ public Set getIncrementalOplogFileNames() { /** * A BackupInspector for the Windows platform(s). - * @author rholmes * */ class WindowsBackupInspector extends BackupInspector { @@ -270,7 +268,6 @@ protected File getRestoreFile(final File backupDir) { /** * A BackupInspector for Unix platforms. - * @author rholmes */ class UnixBackupInspector extends BackupInspector { /** diff --git a/geode-core/src/main/java/com/gemstone/gemfire/internal/cache/persistence/BackupManager.java b/geode-core/src/main/java/com/gemstone/gemfire/internal/cache/persistence/BackupManager.java index c764007bf9ba..89856ad565c2 100644 --- a/geode-core/src/main/java/com/gemstone/gemfire/internal/cache/persistence/BackupManager.java +++ b/geode-core/src/main/java/com/gemstone/gemfire/internal/cache/persistence/BackupManager.java @@ -46,7 +46,6 @@ * This class manages the state an logic to backup a single * cache. * - * @author dsmith * */ public class BackupManager implements MembershipListener { diff --git a/geode-core/src/main/java/com/gemstone/gemfire/internal/cache/persistence/BytesAndBits.java b/geode-core/src/main/java/com/gemstone/gemfire/internal/cache/persistence/BytesAndBits.java index a099ff3d0784..e5af55be006b 100644 --- a/geode-core/src/main/java/com/gemstone/gemfire/internal/cache/persistence/BytesAndBits.java +++ b/geode-core/src/main/java/com/gemstone/gemfire/internal/cache/persistence/BytesAndBits.java @@ -21,7 +21,6 @@ /** * Used to fetch a record's raw bytes and user bits. * - * @author Darrel Schneider * @since prPersistSprint1 */ public class BytesAndBits { diff --git a/geode-core/src/main/java/com/gemstone/gemfire/internal/cache/persistence/CanonicalIdHolder.java b/geode-core/src/main/java/com/gemstone/gemfire/internal/cache/persistence/CanonicalIdHolder.java index 7fae38f871d4..ff1288b5b5fb 100644 --- a/geode-core/src/main/java/com/gemstone/gemfire/internal/cache/persistence/CanonicalIdHolder.java +++ b/geode-core/src/main/java/com/gemstone/gemfire/internal/cache/persistence/CanonicalIdHolder.java @@ -30,7 +30,6 @@ * * This class is not thread safe, so it should be synchronized externally. * - * @author dsmith * */ public class CanonicalIdHolder { diff --git a/geode-core/src/main/java/com/gemstone/gemfire/internal/cache/persistence/CreatePersistentRegionProcessor.java b/geode-core/src/main/java/com/gemstone/gemfire/internal/cache/persistence/CreatePersistentRegionProcessor.java index 54dd91a4e286..f4fee886b96f 100644 --- a/geode-core/src/main/java/com/gemstone/gemfire/internal/cache/persistence/CreatePersistentRegionProcessor.java +++ b/geode-core/src/main/java/com/gemstone/gemfire/internal/cache/persistence/CreatePersistentRegionProcessor.java @@ -26,7 +26,6 @@ * the initialization of a persistent region to exchange * profiles with other members. This class also determines which * member should be used for initialization. - * @author dsmith * */ public class CreatePersistentRegionProcessor extends CreateRegionProcessor { diff --git a/geode-core/src/main/java/com/gemstone/gemfire/internal/cache/persistence/DiskExceptionHandler.java b/geode-core/src/main/java/com/gemstone/gemfire/internal/cache/persistence/DiskExceptionHandler.java index 5a42d3d59377..7f0d53933376 100644 --- a/geode-core/src/main/java/com/gemstone/gemfire/internal/cache/persistence/DiskExceptionHandler.java +++ b/geode-core/src/main/java/com/gemstone/gemfire/internal/cache/persistence/DiskExceptionHandler.java @@ -25,7 +25,6 @@ * by the {@link DiskRegion} class. The exception handler is expected to close * the region. This interface exists so that ProxyBucketRegions can handle * disk access exceptions by passing them on to the parent partition region. - * @author dsmith * */ public interface DiskExceptionHandler { diff --git a/geode-core/src/main/java/com/gemstone/gemfire/internal/cache/persistence/DiskInitFileInterpreter.java b/geode-core/src/main/java/com/gemstone/gemfire/internal/cache/persistence/DiskInitFileInterpreter.java index 68efced116dd..bda711fe8056 100644 --- a/geode-core/src/main/java/com/gemstone/gemfire/internal/cache/persistence/DiskInitFileInterpreter.java +++ b/geode-core/src/main/java/com/gemstone/gemfire/internal/cache/persistence/DiskInitFileInterpreter.java @@ -24,7 +24,6 @@ import com.gemstone.gemfire.internal.cache.versions.RegionVersionHolder; /** - * @author dsmith * */ public interface DiskInitFileInterpreter { diff --git a/geode-core/src/main/java/com/gemstone/gemfire/internal/cache/persistence/DiskInitFileParser.java b/geode-core/src/main/java/com/gemstone/gemfire/internal/cache/persistence/DiskInitFileParser.java index a8a69c9d1621..542153e87fb9 100644 --- a/geode-core/src/main/java/com/gemstone/gemfire/internal/cache/persistence/DiskInitFileParser.java +++ b/geode-core/src/main/java/com/gemstone/gemfire/internal/cache/persistence/DiskInitFileParser.java @@ -49,7 +49,6 @@ import com.gemstone.gemfire.internal.logging.log4j.LogMarker; /** - * @author dsmith * */ public class DiskInitFileParser { diff --git a/geode-core/src/main/java/com/gemstone/gemfire/internal/cache/persistence/DiskRecoveryStore.java b/geode-core/src/main/java/com/gemstone/gemfire/internal/cache/persistence/DiskRecoveryStore.java index 0f4f058858e4..a9238c88725b 100644 --- a/geode-core/src/main/java/com/gemstone/gemfire/internal/cache/persistence/DiskRecoveryStore.java +++ b/geode-core/src/main/java/com/gemstone/gemfire/internal/cache/persistence/DiskRecoveryStore.java @@ -33,7 +33,6 @@ * Used by the disk code to store recovered data into the cache. * The primary implementor of this interface is LocalRegion. * - * @author Darrel Schneider * * @since prPersistSprint3 */ diff --git a/geode-core/src/main/java/com/gemstone/gemfire/internal/cache/persistence/DiskStoreID.java b/geode-core/src/main/java/com/gemstone/gemfire/internal/cache/persistence/DiskStoreID.java index 8148ef1287ad..ccac06bfabe5 100644 --- a/geode-core/src/main/java/com/gemstone/gemfire/internal/cache/persistence/DiskStoreID.java +++ b/geode-core/src/main/java/com/gemstone/gemfire/internal/cache/persistence/DiskStoreID.java @@ -31,7 +31,6 @@ /** * A Unique ID for a disk store - * @author dsmith * * TODO - RVV - this class is java serializable because apparently it is included in some * Exception that is serialized with java serialization back to a client as part diff --git a/geode-core/src/main/java/com/gemstone/gemfire/internal/cache/persistence/MembershipFlushRequest.java b/geode-core/src/main/java/com/gemstone/gemfire/internal/cache/persistence/MembershipFlushRequest.java index 88db7005b868..692cb2a84791 100644 --- a/geode-core/src/main/java/com/gemstone/gemfire/internal/cache/persistence/MembershipFlushRequest.java +++ b/geode-core/src/main/java/com/gemstone/gemfire/internal/cache/persistence/MembershipFlushRequest.java @@ -41,7 +41,6 @@ import com.gemstone.gemfire.internal.cache.ProxyBucketRegion; /** - * @author dsmith * */ public class MembershipFlushRequest extends diff --git a/geode-core/src/main/java/com/gemstone/gemfire/internal/cache/persistence/MembershipViewRequest.java b/geode-core/src/main/java/com/gemstone/gemfire/internal/cache/persistence/MembershipViewRequest.java index 7dc01cfec951..be174fe0c439 100644 --- a/geode-core/src/main/java/com/gemstone/gemfire/internal/cache/persistence/MembershipViewRequest.java +++ b/geode-core/src/main/java/com/gemstone/gemfire/internal/cache/persistence/MembershipViewRequest.java @@ -50,7 +50,6 @@ import com.gemstone.gemfire.internal.logging.LogService; /** - * @author dsmith * */ public class MembershipViewRequest extends diff --git a/geode-core/src/main/java/com/gemstone/gemfire/internal/cache/persistence/PRPersistentConfig.java b/geode-core/src/main/java/com/gemstone/gemfire/internal/cache/persistence/PRPersistentConfig.java index f0cbcf9c9e5a..c6bcb8c9e3c0 100644 --- a/geode-core/src/main/java/com/gemstone/gemfire/internal/cache/persistence/PRPersistentConfig.java +++ b/geode-core/src/main/java/com/gemstone/gemfire/internal/cache/persistence/PRPersistentConfig.java @@ -17,7 +17,6 @@ package com.gemstone.gemfire.internal.cache.persistence; /** - * @author dsmith * */ public class PRPersistentConfig { diff --git a/geode-core/src/main/java/com/gemstone/gemfire/internal/cache/persistence/PersistenceAdvisor.java b/geode-core/src/main/java/com/gemstone/gemfire/internal/cache/persistence/PersistenceAdvisor.java index 90a93250a62e..c2f3baef1efa 100644 --- a/geode-core/src/main/java/com/gemstone/gemfire/internal/cache/persistence/PersistenceAdvisor.java +++ b/geode-core/src/main/java/com/gemstone/gemfire/internal/cache/persistence/PersistenceAdvisor.java @@ -27,7 +27,6 @@ import com.gemstone.gemfire.internal.cache.CacheDistributionAdvisor; /** - * @author dsmith * */ public interface PersistenceAdvisor { diff --git a/geode-core/src/main/java/com/gemstone/gemfire/internal/cache/persistence/PersistenceAdvisorImpl.java b/geode-core/src/main/java/com/gemstone/gemfire/internal/cache/persistence/PersistenceAdvisorImpl.java index 750cf8115abf..3c09612ea801 100644 --- a/geode-core/src/main/java/com/gemstone/gemfire/internal/cache/persistence/PersistenceAdvisorImpl.java +++ b/geode-core/src/main/java/com/gemstone/gemfire/internal/cache/persistence/PersistenceAdvisorImpl.java @@ -53,7 +53,6 @@ import com.gemstone.gemfire.internal.util.TransformUtils; /** - * @author dsmith * */ public class PersistenceAdvisorImpl implements PersistenceAdvisor { diff --git a/geode-core/src/main/java/com/gemstone/gemfire/internal/cache/persistence/PersistenceObserverHolder.java b/geode-core/src/main/java/com/gemstone/gemfire/internal/cache/persistence/PersistenceObserverHolder.java index 465eceb392b2..731de07d4778 100644 --- a/geode-core/src/main/java/com/gemstone/gemfire/internal/cache/persistence/PersistenceObserverHolder.java +++ b/geode-core/src/main/java/com/gemstone/gemfire/internal/cache/persistence/PersistenceObserverHolder.java @@ -21,7 +21,6 @@ /** * Used for test hooks to during the * persistence process. - * @author dsmith * */ diff --git a/geode-core/src/main/java/com/gemstone/gemfire/internal/cache/persistence/PersistentMemberID.java b/geode-core/src/main/java/com/gemstone/gemfire/internal/cache/persistence/PersistentMemberID.java index 9d84839aea4d..a1413f4b79df 100644 --- a/geode-core/src/main/java/com/gemstone/gemfire/internal/cache/persistence/PersistentMemberID.java +++ b/geode-core/src/main/java/com/gemstone/gemfire/internal/cache/persistence/PersistentMemberID.java @@ -27,7 +27,6 @@ import com.gemstone.gemfire.internal.cache.versions.VersionSource; /** - * @author dsmith * */ public class PersistentMemberID implements DataSerializable { diff --git a/geode-core/src/main/java/com/gemstone/gemfire/internal/cache/persistence/PersistentMemberManager.java b/geode-core/src/main/java/com/gemstone/gemfire/internal/cache/persistence/PersistentMemberManager.java index a6f6d64801a2..7590a1267f25 100644 --- a/geode-core/src/main/java/com/gemstone/gemfire/internal/cache/persistence/PersistentMemberManager.java +++ b/geode-core/src/main/java/com/gemstone/gemfire/internal/cache/persistence/PersistentMemberManager.java @@ -35,7 +35,6 @@ import com.gemstone.gemfire.internal.logging.log4j.LocalizedMessage; /** - * @author dsmith * */ public class PersistentMemberManager { diff --git a/geode-core/src/main/java/com/gemstone/gemfire/internal/cache/persistence/PersistentMemberPattern.java b/geode-core/src/main/java/com/gemstone/gemfire/internal/cache/persistence/PersistentMemberPattern.java index 87f8a9137af8..193a558c4bce 100644 --- a/geode-core/src/main/java/com/gemstone/gemfire/internal/cache/persistence/PersistentMemberPattern.java +++ b/geode-core/src/main/java/com/gemstone/gemfire/internal/cache/persistence/PersistentMemberPattern.java @@ -34,7 +34,6 @@ * has revoked. Any fields that are null will be considered a wildcard * matching any members. * - * @author dsmith * @since prPersistSprint1 */ public class PersistentMemberPattern implements PersistentID, Comparable { diff --git a/geode-core/src/main/java/com/gemstone/gemfire/internal/cache/persistence/PersistentMemberState.java b/geode-core/src/main/java/com/gemstone/gemfire/internal/cache/persistence/PersistentMemberState.java index a834b556019f..4c2fca5ef003 100644 --- a/geode-core/src/main/java/com/gemstone/gemfire/internal/cache/persistence/PersistentMemberState.java +++ b/geode-core/src/main/java/com/gemstone/gemfire/internal/cache/persistence/PersistentMemberState.java @@ -21,7 +21,6 @@ import java.io.IOException; /** - * @author dsmith * */ public enum PersistentMemberState { diff --git a/geode-core/src/main/java/com/gemstone/gemfire/internal/cache/persistence/PersistentMemberView.java b/geode-core/src/main/java/com/gemstone/gemfire/internal/cache/persistence/PersistentMemberView.java index 3f4f2abd5b1b..90be946549de 100644 --- a/geode-core/src/main/java/com/gemstone/gemfire/internal/cache/persistence/PersistentMemberView.java +++ b/geode-core/src/main/java/com/gemstone/gemfire/internal/cache/persistence/PersistentMemberView.java @@ -27,7 +27,6 @@ * be backed by disk, or it may be only in memory on non-persistent * replicas. * - * @author dsmith * */ public interface PersistentMemberView { diff --git a/geode-core/src/main/java/com/gemstone/gemfire/internal/cache/persistence/PersistentStateQueryMessage.java b/geode-core/src/main/java/com/gemstone/gemfire/internal/cache/persistence/PersistentStateQueryMessage.java index 150cd15c4079..1f6910745304 100644 --- a/geode-core/src/main/java/com/gemstone/gemfire/internal/cache/persistence/PersistentStateQueryMessage.java +++ b/geode-core/src/main/java/com/gemstone/gemfire/internal/cache/persistence/PersistentStateQueryMessage.java @@ -49,7 +49,6 @@ import com.gemstone.gemfire.internal.logging.LogService; /** - * @author dsmith * */ public class PersistentStateQueryMessage extends diff --git a/geode-core/src/main/java/com/gemstone/gemfire/internal/cache/persistence/PersistentStateQueryResults.java b/geode-core/src/main/java/com/gemstone/gemfire/internal/cache/persistence/PersistentStateQueryResults.java index ad3c0bdbbbac..8761d725185a 100644 --- a/geode-core/src/main/java/com/gemstone/gemfire/internal/cache/persistence/PersistentStateQueryResults.java +++ b/geode-core/src/main/java/com/gemstone/gemfire/internal/cache/persistence/PersistentStateQueryResults.java @@ -26,7 +26,6 @@ /** * Holds the results of a persistent state query - * @author dsmith * */ class PersistentStateQueryResults { diff --git a/geode-core/src/main/java/com/gemstone/gemfire/internal/cache/persistence/PrepareNewPersistentMemberMessage.java b/geode-core/src/main/java/com/gemstone/gemfire/internal/cache/persistence/PrepareNewPersistentMemberMessage.java index e4cd8033216f..920724bb8318 100644 --- a/geode-core/src/main/java/com/gemstone/gemfire/internal/cache/persistence/PrepareNewPersistentMemberMessage.java +++ b/geode-core/src/main/java/com/gemstone/gemfire/internal/cache/persistence/PrepareNewPersistentMemberMessage.java @@ -47,7 +47,6 @@ import com.gemstone.gemfire.internal.logging.LogService; /** - * @author dsmith * */ public class PrepareNewPersistentMemberMessage extends diff --git a/geode-core/src/main/java/com/gemstone/gemfire/internal/cache/persistence/RemovePersistentMemberMessage.java b/geode-core/src/main/java/com/gemstone/gemfire/internal/cache/persistence/RemovePersistentMemberMessage.java index 57a5aed3f896..07d6ce54cb33 100644 --- a/geode-core/src/main/java/com/gemstone/gemfire/internal/cache/persistence/RemovePersistentMemberMessage.java +++ b/geode-core/src/main/java/com/gemstone/gemfire/internal/cache/persistence/RemovePersistentMemberMessage.java @@ -47,7 +47,6 @@ import com.gemstone.gemfire.internal.logging.LogService; /** - * @author dsmith * */ public class RemovePersistentMemberMessage extends diff --git a/geode-core/src/main/java/com/gemstone/gemfire/internal/cache/persistence/RestoreScript.java b/geode-core/src/main/java/com/gemstone/gemfire/internal/cache/persistence/RestoreScript.java index 428887700bc7..eb73c5290c9d 100644 --- a/geode-core/src/main/java/com/gemstone/gemfire/internal/cache/persistence/RestoreScript.java +++ b/geode-core/src/main/java/com/gemstone/gemfire/internal/cache/persistence/RestoreScript.java @@ -34,7 +34,6 @@ * * It generates either a restore.sh for unix or a restore.bat for windows. * - * @author dsmith * */ public class RestoreScript { diff --git a/geode-core/src/main/java/com/gemstone/gemfire/internal/cache/persistence/query/CloseableIterator.java b/geode-core/src/main/java/com/gemstone/gemfire/internal/cache/persistence/query/CloseableIterator.java index 2f77533e5215..ca66a4757dab 100644 --- a/geode-core/src/main/java/com/gemstone/gemfire/internal/cache/persistence/query/CloseableIterator.java +++ b/geode-core/src/main/java/com/gemstone/gemfire/internal/cache/persistence/query/CloseableIterator.java @@ -22,7 +22,6 @@ * An iterator that has an additional close method. * The iterator should be closed if it is abandoned before * reaching the end of the iteration to free up resources. - * @author dsmith * */ public interface CloseableIterator extends Iterator { diff --git a/geode-core/src/main/java/com/gemstone/gemfire/internal/cache/persistence/query/IndexMap.java b/geode-core/src/main/java/com/gemstone/gemfire/internal/cache/persistence/query/IndexMap.java index 009659941817..c51d38b3781e 100644 --- a/geode-core/src/main/java/com/gemstone/gemfire/internal/cache/persistence/query/IndexMap.java +++ b/geode-core/src/main/java/com/gemstone/gemfire/internal/cache/persistence/query/IndexMap.java @@ -38,7 +38,6 @@ * * TODO - Do we need getKey, getValue, * - * @author dsmith * @since cedar */ public interface IndexMap { @@ -164,7 +163,6 @@ CloseableIterator descendingKeyIterator(Object end, /** * A single entry in an index - * @author dsmith * @since cedar */ interface IndexEntry { diff --git a/geode-core/src/main/java/com/gemstone/gemfire/internal/cache/persistence/query/ResultBag.java b/geode-core/src/main/java/com/gemstone/gemfire/internal/cache/persistence/query/ResultBag.java index 2935aaf29211..c7cf05ec4307 100644 --- a/geode-core/src/main/java/com/gemstone/gemfire/internal/cache/persistence/query/ResultBag.java +++ b/geode-core/src/main/java/com/gemstone/gemfire/internal/cache/persistence/query/ResultBag.java @@ -35,7 +35,6 @@ * The result set should be closed using the close method to free up resources * when it is no longer in use. * - * @author dsmith * @since cedar */ public interface ResultBag { diff --git a/geode-core/src/main/java/com/gemstone/gemfire/internal/cache/persistence/query/ResultList.java b/geode-core/src/main/java/com/gemstone/gemfire/internal/cache/persistence/query/ResultList.java index 1f30ab0f58dc..26cb115e1813 100644 --- a/geode-core/src/main/java/com/gemstone/gemfire/internal/cache/persistence/query/ResultList.java +++ b/geode-core/src/main/java/com/gemstone/gemfire/internal/cache/persistence/query/ResultList.java @@ -27,7 +27,6 @@ * may or may not reflect modifications to the set while the iteration is in progress. * They will guarantee that entries will be returned in the correct order. * - * @author dsmith * @since cedar */ public interface ResultList { diff --git a/geode-core/src/main/java/com/gemstone/gemfire/internal/cache/persistence/query/ResultMap.java b/geode-core/src/main/java/com/gemstone/gemfire/internal/cache/persistence/query/ResultMap.java index 1531fefa1391..5c86c5ded8c3 100644 --- a/geode-core/src/main/java/com/gemstone/gemfire/internal/cache/persistence/query/ResultMap.java +++ b/geode-core/src/main/java/com/gemstone/gemfire/internal/cache/persistence/query/ResultMap.java @@ -29,7 +29,6 @@ * * The key and value are both allowed to be an object, or a CachedDeserializable. * - * @author dsmith * @since cedar */ public interface ResultMap { @@ -108,7 +107,6 @@ CloseableIterator keyIterator(Object start, /** * A single entry in an index - * @author dsmith * @since cedar */ interface Entry { diff --git a/geode-core/src/main/java/com/gemstone/gemfire/internal/cache/persistence/query/ResultSet.java b/geode-core/src/main/java/com/gemstone/gemfire/internal/cache/persistence/query/ResultSet.java index e1d8150c7e01..2649118764c3 100644 --- a/geode-core/src/main/java/com/gemstone/gemfire/internal/cache/persistence/query/ResultSet.java +++ b/geode-core/src/main/java/com/gemstone/gemfire/internal/cache/persistence/query/ResultSet.java @@ -35,7 +35,6 @@ * The result set should be closed using the close method to free up resources * when it is no longer in use. * - * @author dsmith * @since cedar */ public interface ResultSet { diff --git a/geode-core/src/main/java/com/gemstone/gemfire/internal/cache/persistence/query/TemporaryResultSetFactory.java b/geode-core/src/main/java/com/gemstone/gemfire/internal/cache/persistence/query/TemporaryResultSetFactory.java index 47d4f6b76673..1f13b4648351 100644 --- a/geode-core/src/main/java/com/gemstone/gemfire/internal/cache/persistence/query/TemporaryResultSetFactory.java +++ b/geode-core/src/main/java/com/gemstone/gemfire/internal/cache/persistence/query/TemporaryResultSetFactory.java @@ -25,7 +25,6 @@ * * The result sets will not be recovered when the member restarts. * Any temporary results still on disk when a member restarts will be deleted. - * @author dsmith * */ public class TemporaryResultSetFactory { diff --git a/geode-core/src/main/java/com/gemstone/gemfire/internal/cache/persistence/query/mock/ByteComparator.java b/geode-core/src/main/java/com/gemstone/gemfire/internal/cache/persistence/query/mock/ByteComparator.java index 9b84d3b1421d..675c01098d7c 100644 --- a/geode-core/src/main/java/com/gemstone/gemfire/internal/cache/persistence/query/mock/ByteComparator.java +++ b/geode-core/src/main/java/com/gemstone/gemfire/internal/cache/persistence/query/mock/ByteComparator.java @@ -28,7 +28,6 @@ * any useful order. It's only guaranteed to return 0 * if the bytes are equal, and satisfy all the transitivity * and communitivity properties of compare. - * @author dsmith * */ public class ByteComparator implements Comparator { diff --git a/geode-core/src/main/java/com/gemstone/gemfire/internal/cache/persistence/query/mock/CachedDeserializableComparator.java b/geode-core/src/main/java/com/gemstone/gemfire/internal/cache/persistence/query/mock/CachedDeserializableComparator.java index 6bfa3d1d24a7..7e8c559a247e 100644 --- a/geode-core/src/main/java/com/gemstone/gemfire/internal/cache/persistence/query/mock/CachedDeserializableComparator.java +++ b/geode-core/src/main/java/com/gemstone/gemfire/internal/cache/persistence/query/mock/CachedDeserializableComparator.java @@ -26,7 +26,6 @@ * * If either object is not a cached deserializable, just use * the object directly. - * @author dsmith * */ class CachedDeserializableComparator implements Comparator { diff --git a/geode-core/src/main/java/com/gemstone/gemfire/internal/cache/persistence/query/mock/IndexMapImpl.java b/geode-core/src/main/java/com/gemstone/gemfire/internal/cache/persistence/query/mock/IndexMapImpl.java index 0912abba16e1..bfcc3cd19e5e 100644 --- a/geode-core/src/main/java/com/gemstone/gemfire/internal/cache/persistence/query/mock/IndexMapImpl.java +++ b/geode-core/src/main/java/com/gemstone/gemfire/internal/cache/persistence/query/mock/IndexMapImpl.java @@ -32,7 +32,6 @@ * A dummy implementation of an IndexMap. Keeps all of the entries * in memory, but in serialized form. * - * @author dsmith * */ public class IndexMapImpl implements IndexMap { diff --git a/geode-core/src/main/java/com/gemstone/gemfire/internal/cache/persistence/query/mock/ItrAdapter.java b/geode-core/src/main/java/com/gemstone/gemfire/internal/cache/persistence/query/mock/ItrAdapter.java index 21207988169c..4c5b29cffe27 100644 --- a/geode-core/src/main/java/com/gemstone/gemfire/internal/cache/persistence/query/mock/ItrAdapter.java +++ b/geode-core/src/main/java/com/gemstone/gemfire/internal/cache/persistence/query/mock/ItrAdapter.java @@ -26,7 +26,6 @@ * * The java.util.iterator is expected to be iterating over a set of * CachedDeserializable objects. - * @author dsmith * */ class ItrAdapter implements CloseableIterator { diff --git a/geode-core/src/main/java/com/gemstone/gemfire/internal/cache/persistence/query/mock/NaturalComparator.java b/geode-core/src/main/java/com/gemstone/gemfire/internal/cache/persistence/query/mock/NaturalComparator.java index bd52bbd1f7ee..d29de8cadab9 100644 --- a/geode-core/src/main/java/com/gemstone/gemfire/internal/cache/persistence/query/mock/NaturalComparator.java +++ b/geode-core/src/main/java/com/gemstone/gemfire/internal/cache/persistence/query/mock/NaturalComparator.java @@ -20,7 +20,6 @@ /** * A comparator which compares to objects in natural order. - * @author dsmith * */ public class NaturalComparator implements Comparator { diff --git a/geode-core/src/main/java/com/gemstone/gemfire/internal/cache/persistence/query/mock/Pair.java b/geode-core/src/main/java/com/gemstone/gemfire/internal/cache/persistence/query/mock/Pair.java index ac9d6a083e16..38c5c74d18d9 100644 --- a/geode-core/src/main/java/com/gemstone/gemfire/internal/cache/persistence/query/mock/Pair.java +++ b/geode-core/src/main/java/com/gemstone/gemfire/internal/cache/persistence/query/mock/Pair.java @@ -19,7 +19,6 @@ /** * An object that holds a pair of objects. - * @author dsmith * */ public class Pair { diff --git a/geode-core/src/main/java/com/gemstone/gemfire/internal/cache/persistence/query/mock/PairComparator.java b/geode-core/src/main/java/com/gemstone/gemfire/internal/cache/persistence/query/mock/PairComparator.java index cc71cdbd920a..f5fbfeef09f3 100644 --- a/geode-core/src/main/java/com/gemstone/gemfire/internal/cache/persistence/query/mock/PairComparator.java +++ b/geode-core/src/main/java/com/gemstone/gemfire/internal/cache/persistence/query/mock/PairComparator.java @@ -21,7 +21,6 @@ /** * A comparator for Pair objects that uses two * passed in comparators. - * @author dsmith * */ public class PairComparator implements Comparator { diff --git a/geode-core/src/main/java/com/gemstone/gemfire/internal/cache/persistence/query/mock/ReverseComparator.java b/geode-core/src/main/java/com/gemstone/gemfire/internal/cache/persistence/query/mock/ReverseComparator.java index 77638020bc33..c19e1588c08c 100644 --- a/geode-core/src/main/java/com/gemstone/gemfire/internal/cache/persistence/query/mock/ReverseComparator.java +++ b/geode-core/src/main/java/com/gemstone/gemfire/internal/cache/persistence/query/mock/ReverseComparator.java @@ -20,7 +20,6 @@ /** * A comparator which reverses the comparison order - * @author dsmith * */ public class ReverseComparator implements Comparator { diff --git a/geode-core/src/main/java/com/gemstone/gemfire/internal/cache/persistence/query/mock/SortedResultBagImpl.java b/geode-core/src/main/java/com/gemstone/gemfire/internal/cache/persistence/query/mock/SortedResultBagImpl.java index 58731a145144..84a51f4d455f 100644 --- a/geode-core/src/main/java/com/gemstone/gemfire/internal/cache/persistence/query/mock/SortedResultBagImpl.java +++ b/geode-core/src/main/java/com/gemstone/gemfire/internal/cache/persistence/query/mock/SortedResultBagImpl.java @@ -27,7 +27,6 @@ /** * Mock sorted bag implementation. Uses the mock index map * internally, for convenience. - * @author dsmith * */ public class SortedResultBagImpl implements ResultBag { diff --git a/geode-core/src/main/java/com/gemstone/gemfire/internal/cache/persistence/soplog/ByteComparator.java b/geode-core/src/main/java/com/gemstone/gemfire/internal/cache/persistence/soplog/ByteComparator.java index 3eb30e7f416d..5c199ae289ce 100644 --- a/geode-core/src/main/java/com/gemstone/gemfire/internal/cache/persistence/soplog/ByteComparator.java +++ b/geode-core/src/main/java/com/gemstone/gemfire/internal/cache/persistence/soplog/ByteComparator.java @@ -25,7 +25,6 @@ * lexicographic ordering is not important or the serialization is order- * preserving. * - * @author bakera */ public class ByteComparator implements SerializedComparator { @Override diff --git a/geode-core/src/main/java/com/gemstone/gemfire/internal/cache/persistence/soplog/CursorIterator.java b/geode-core/src/main/java/com/gemstone/gemfire/internal/cache/persistence/soplog/CursorIterator.java index e6126590a843..dacc208c08c7 100644 --- a/geode-core/src/main/java/com/gemstone/gemfire/internal/cache/persistence/soplog/CursorIterator.java +++ b/geode-core/src/main/java/com/gemstone/gemfire/internal/cache/persistence/soplog/CursorIterator.java @@ -23,7 +23,6 @@ * element. The implementor must provide access to the current element * as well as a means to move to the next element. * - * @author bakera * * @param the element type */ diff --git a/geode-core/src/main/java/com/gemstone/gemfire/internal/cache/persistence/soplog/DelegatingSerializedComparator.java b/geode-core/src/main/java/com/gemstone/gemfire/internal/cache/persistence/soplog/DelegatingSerializedComparator.java index 81927825cd0e..52470d076e8b 100644 --- a/geode-core/src/main/java/com/gemstone/gemfire/internal/cache/persistence/soplog/DelegatingSerializedComparator.java +++ b/geode-core/src/main/java/com/gemstone/gemfire/internal/cache/persistence/soplog/DelegatingSerializedComparator.java @@ -21,7 +21,6 @@ /** * Delegates object comparisons to one or more embedded comparators. * - * @author bakera */ public interface DelegatingSerializedComparator extends SerializedComparator { /** diff --git a/geode-core/src/main/java/com/gemstone/gemfire/internal/cache/persistence/soplog/KeyValueIterator.java b/geode-core/src/main/java/com/gemstone/gemfire/internal/cache/persistence/soplog/KeyValueIterator.java index d1627ea5ca11..df7e1ac161ab 100644 --- a/geode-core/src/main/java/com/gemstone/gemfire/internal/cache/persistence/soplog/KeyValueIterator.java +++ b/geode-core/src/main/java/com/gemstone/gemfire/internal/cache/persistence/soplog/KeyValueIterator.java @@ -23,7 +23,6 @@ * implementor must provide access to the current key/value as well as a means * to move to the next pair. * - * @author bakera * * @param the key type * @param the value type diff --git a/geode-core/src/main/java/com/gemstone/gemfire/internal/cache/persistence/soplog/SortedReader.java b/geode-core/src/main/java/com/gemstone/gemfire/internal/cache/persistence/soplog/SortedReader.java index 6ea8a216b792..1042e222d5b2 100644 --- a/geode-core/src/main/java/com/gemstone/gemfire/internal/cache/persistence/soplog/SortedReader.java +++ b/geode-core/src/main/java/com/gemstone/gemfire/internal/cache/persistence/soplog/SortedReader.java @@ -27,7 +27,6 @@ * * @param type of value returned by the sorted reader * - * @author bakera */ public interface SortedReader extends Closeable { /** diff --git a/geode-core/src/main/java/com/gemstone/gemfire/internal/cache/persistence/soplog/TrackedReference.java b/geode-core/src/main/java/com/gemstone/gemfire/internal/cache/persistence/soplog/TrackedReference.java index abc5370379ac..2934f076be22 100644 --- a/geode-core/src/main/java/com/gemstone/gemfire/internal/cache/persistence/soplog/TrackedReference.java +++ b/geode-core/src/main/java/com/gemstone/gemfire/internal/cache/persistence/soplog/TrackedReference.java @@ -23,7 +23,6 @@ /** * Tracks the usage of a reference. * - * @author bakera * * @param the reference type */ diff --git a/geode-core/src/main/java/com/gemstone/gemfire/internal/cache/snapshot/CacheSnapshotServiceImpl.java b/geode-core/src/main/java/com/gemstone/gemfire/internal/cache/snapshot/CacheSnapshotServiceImpl.java index 6f6aef79cd48..34fbb47d2547 100644 --- a/geode-core/src/main/java/com/gemstone/gemfire/internal/cache/snapshot/CacheSnapshotServiceImpl.java +++ b/geode-core/src/main/java/com/gemstone/gemfire/internal/cache/snapshot/CacheSnapshotServiceImpl.java @@ -36,7 +36,6 @@ * Provides an implementation for cache snapshots. Most of the implementation * delegates to {@link RegionSnapshotService}. * - * @author bakera */ public class CacheSnapshotServiceImpl implements CacheSnapshotService { /** the cache */ diff --git a/geode-core/src/main/java/com/gemstone/gemfire/internal/cache/snapshot/ClientExporter.java b/geode-core/src/main/java/com/gemstone/gemfire/internal/cache/snapshot/ClientExporter.java index 8ef13a547fa2..6962876330c5 100644 --- a/geode-core/src/main/java/com/gemstone/gemfire/internal/cache/snapshot/ClientExporter.java +++ b/geode-core/src/main/java/com/gemstone/gemfire/internal/cache/snapshot/ClientExporter.java @@ -47,7 +47,6 @@ * to the client. The client uses a custom {@link ResultCollector} to write * entries immediately into the snapshot file. * - * @author bakera * * @param the key type * @param the value type diff --git a/geode-core/src/main/java/com/gemstone/gemfire/internal/cache/snapshot/ExportedRegistry.java b/geode-core/src/main/java/com/gemstone/gemfire/internal/cache/snapshot/ExportedRegistry.java index 719d23ce49e3..c51b00b64850 100644 --- a/geode-core/src/main/java/com/gemstone/gemfire/internal/cache/snapshot/ExportedRegistry.java +++ b/geode-core/src/main/java/com/gemstone/gemfire/internal/cache/snapshot/ExportedRegistry.java @@ -31,7 +31,6 @@ /** * Captures the pdx types and enums to be exported. * - * @author bakera */ public class ExportedRegistry { /** the types */ diff --git a/geode-core/src/main/java/com/gemstone/gemfire/internal/cache/snapshot/FlowController.java b/geode-core/src/main/java/com/gemstone/gemfire/internal/cache/snapshot/FlowController.java index 07eea982230a..37e33a2ca98a 100644 --- a/geode-core/src/main/java/com/gemstone/gemfire/internal/cache/snapshot/FlowController.java +++ b/geode-core/src/main/java/com/gemstone/gemfire/internal/cache/snapshot/FlowController.java @@ -42,7 +42,6 @@ * while the recipient should respond with {@link #sendAck(DM, DistributedMember, int, String)} * or {@link #sendAbort(DM, int, DistributedMember)}. * - * @author bakera */ public class FlowController { // watch out for rollover problems with MAX_VALUE diff --git a/geode-core/src/main/java/com/gemstone/gemfire/internal/cache/snapshot/GFSnapshot.java b/geode-core/src/main/java/com/gemstone/gemfire/internal/cache/snapshot/GFSnapshot.java index f671ceb476fa..5f2b2df46806 100644 --- a/geode-core/src/main/java/com/gemstone/gemfire/internal/cache/snapshot/GFSnapshot.java +++ b/geode-core/src/main/java/com/gemstone/gemfire/internal/cache/snapshot/GFSnapshot.java @@ -48,7 +48,6 @@ /** * Provides support for reading and writing snapshot files. * - * @author bakera */ public class GFSnapshot { /** diff --git a/geode-core/src/main/java/com/gemstone/gemfire/internal/cache/snapshot/LocalExporter.java b/geode-core/src/main/java/com/gemstone/gemfire/internal/cache/snapshot/LocalExporter.java index 8f8ab0e88333..fe319a0cc31a 100644 --- a/geode-core/src/main/java/com/gemstone/gemfire/internal/cache/snapshot/LocalExporter.java +++ b/geode-core/src/main/java/com/gemstone/gemfire/internal/cache/snapshot/LocalExporter.java @@ -32,7 +32,6 @@ * is assumed to be local so snapshot data is obtained directly by iterating * over the {@link Region#entrySet()}. * - * @author bakera * * @param the key type * @param the value type diff --git a/geode-core/src/main/java/com/gemstone/gemfire/internal/cache/snapshot/RegionSnapshotServiceImpl.java b/geode-core/src/main/java/com/gemstone/gemfire/internal/cache/snapshot/RegionSnapshotServiceImpl.java index eac1c4df7b34..78f6b0e481ff 100644 --- a/geode-core/src/main/java/com/gemstone/gemfire/internal/cache/snapshot/RegionSnapshotServiceImpl.java +++ b/geode-core/src/main/java/com/gemstone/gemfire/internal/cache/snapshot/RegionSnapshotServiceImpl.java @@ -64,7 +64,6 @@ /** * Provides an implementation for region snapshots. * - * @author bakera * * @param the key type * @param the value type diff --git a/geode-core/src/main/java/com/gemstone/gemfire/internal/cache/snapshot/SnapshotFileMapper.java b/geode-core/src/main/java/com/gemstone/gemfire/internal/cache/snapshot/SnapshotFileMapper.java index dac156e890fe..1e7354f21f0a 100644 --- a/geode-core/src/main/java/com/gemstone/gemfire/internal/cache/snapshot/SnapshotFileMapper.java +++ b/geode-core/src/main/java/com/gemstone/gemfire/internal/cache/snapshot/SnapshotFileMapper.java @@ -30,7 +30,6 @@ * exported on a specific member. * * @see SnapshotOptionsImpl#setMapper(SnapshotFileMapper) - * @author bakera * */ public interface SnapshotFileMapper extends Serializable { diff --git a/geode-core/src/main/java/com/gemstone/gemfire/internal/cache/snapshot/SnapshotOptionsImpl.java b/geode-core/src/main/java/com/gemstone/gemfire/internal/cache/snapshot/SnapshotOptionsImpl.java index e14c18ea8e29..4d460d2b8627 100644 --- a/geode-core/src/main/java/com/gemstone/gemfire/internal/cache/snapshot/SnapshotOptionsImpl.java +++ b/geode-core/src/main/java/com/gemstone/gemfire/internal/cache/snapshot/SnapshotOptionsImpl.java @@ -22,7 +22,6 @@ /** * Implements the snapshot options. * - * @author bakera * * @param the key type * @param the value type diff --git a/geode-core/src/main/java/com/gemstone/gemfire/internal/cache/snapshot/SnapshotPacket.java b/geode-core/src/main/java/com/gemstone/gemfire/internal/cache/snapshot/SnapshotPacket.java index 4b1de2d14615..b1892bca36c7 100644 --- a/geode-core/src/main/java/com/gemstone/gemfire/internal/cache/snapshot/SnapshotPacket.java +++ b/geode-core/src/main/java/com/gemstone/gemfire/internal/cache/snapshot/SnapshotPacket.java @@ -42,7 +42,6 @@ * Provides an envelope for transmitting a collection of * SnapshotRecords during export. * - * @author bakera */ public class SnapshotPacket implements DataSerializableFixedID { /** diff --git a/geode-core/src/main/java/com/gemstone/gemfire/internal/cache/snapshot/WindowedExporter.java b/geode-core/src/main/java/com/gemstone/gemfire/internal/cache/snapshot/WindowedExporter.java index 3a7f85a0d897..a097568852c9 100644 --- a/geode-core/src/main/java/com/gemstone/gemfire/internal/cache/snapshot/WindowedExporter.java +++ b/geode-core/src/main/java/com/gemstone/gemfire/internal/cache/snapshot/WindowedExporter.java @@ -60,7 +60,6 @@ * node. The source node will continue to send data until it runs out of permits; * it must then wait for ACK's to resume. * - * @author bakera * * @param the key type * @param the value type diff --git a/geode-core/src/main/java/com/gemstone/gemfire/internal/cache/tier/Acceptor.java b/geode-core/src/main/java/com/gemstone/gemfire/internal/cache/tier/Acceptor.java index bce39c63aa97..59cd367ae291 100755 --- a/geode-core/src/main/java/com/gemstone/gemfire/internal/cache/tier/Acceptor.java +++ b/geode-core/src/main/java/com/gemstone/gemfire/internal/cache/tier/Acceptor.java @@ -26,7 +26,6 @@ * Server. Multiple communication stacks may provide implementations for the * interfaces defined in this package * - * @author Sudhir Menon * @since 2.0.2 */ public abstract class Acceptor diff --git a/geode-core/src/main/java/com/gemstone/gemfire/internal/cache/tier/BatchException.java b/geode-core/src/main/java/com/gemstone/gemfire/internal/cache/tier/BatchException.java index f27d136768f3..f5b761d48ee0 100755 --- a/geode-core/src/main/java/com/gemstone/gemfire/internal/cache/tier/BatchException.java +++ b/geode-core/src/main/java/com/gemstone/gemfire/internal/cache/tier/BatchException.java @@ -21,7 +21,6 @@ /** * An exception thrown during batch processing. * - * @author Barry Oglesby * * @since 4.2 */ diff --git a/geode-core/src/main/java/com/gemstone/gemfire/internal/cache/tier/CachedRegionHelper.java b/geode-core/src/main/java/com/gemstone/gemfire/internal/cache/tier/CachedRegionHelper.java index 9482c9998571..4e382f5a5f9f 100755 --- a/geode-core/src/main/java/com/gemstone/gemfire/internal/cache/tier/CachedRegionHelper.java +++ b/geode-core/src/main/java/com/gemstone/gemfire/internal/cache/tier/CachedRegionHelper.java @@ -25,7 +25,6 @@ /** * Helper class that maintains a weak hashmap of referenced regions * - * @author Sudhir Menon * @since 2.0.2 */ public class CachedRegionHelper { diff --git a/geode-core/src/main/java/com/gemstone/gemfire/internal/cache/tier/Command.java b/geode-core/src/main/java/com/gemstone/gemfire/internal/cache/tier/Command.java index f347892e5d49..1a6af2b7b0c1 100755 --- a/geode-core/src/main/java/com/gemstone/gemfire/internal/cache/tier/Command.java +++ b/geode-core/src/main/java/com/gemstone/gemfire/internal/cache/tier/Command.java @@ -22,7 +22,6 @@ import com.gemstone.gemfire.internal.cache.tier.sockets.*; /** - * @author ashahid * */ public interface Command { diff --git a/geode-core/src/main/java/com/gemstone/gemfire/internal/cache/tier/ConnectionProxy.java b/geode-core/src/main/java/com/gemstone/gemfire/internal/cache/tier/ConnectionProxy.java index 7bf890cdc59e..02f17143b272 100755 --- a/geode-core/src/main/java/com/gemstone/gemfire/internal/cache/tier/ConnectionProxy.java +++ b/geode-core/src/main/java/com/gemstone/gemfire/internal/cache/tier/ConnectionProxy.java @@ -21,7 +21,6 @@ /** * Provides the version of the client. * - * @author Sudhir Menon * @since 2.0.2 */ @SuppressWarnings("deprecation") diff --git a/geode-core/src/main/java/com/gemstone/gemfire/internal/cache/tier/InterestType.java b/geode-core/src/main/java/com/gemstone/gemfire/internal/cache/tier/InterestType.java index e012fd049492..ccacb5fb447e 100755 --- a/geode-core/src/main/java/com/gemstone/gemfire/internal/cache/tier/InterestType.java +++ b/geode-core/src/main/java/com/gemstone/gemfire/internal/cache/tier/InterestType.java @@ -19,7 +19,6 @@ /** * Pre-defined interest list types supported by the system * - * @author Sudhir Menon * @version $Revision: 13166 $ * @since 2.0.2 */ diff --git a/geode-core/src/main/java/com/gemstone/gemfire/internal/cache/tier/InternalClientMembership.java b/geode-core/src/main/java/com/gemstone/gemfire/internal/cache/tier/InternalClientMembership.java index 806a41283168..7e1ae2a96b36 100755 --- a/geode-core/src/main/java/com/gemstone/gemfire/internal/cache/tier/InternalClientMembership.java +++ b/geode-core/src/main/java/com/gemstone/gemfire/internal/cache/tier/InternalClientMembership.java @@ -56,7 +56,6 @@ * ClientMembershipListeners. The public counterpart for this * class is {@link com.gemstone.gemfire.management.membership.ClientMembership}. * - * @author Kirk Lund * @since 4.2.1 */ public final class InternalClientMembership { diff --git a/geode-core/src/main/java/com/gemstone/gemfire/internal/cache/tier/MessageType.java b/geode-core/src/main/java/com/gemstone/gemfire/internal/cache/tier/MessageType.java index 0ce0a7bce94b..fdba06442afe 100755 --- a/geode-core/src/main/java/com/gemstone/gemfire/internal/cache/tier/MessageType.java +++ b/geode-core/src/main/java/com/gemstone/gemfire/internal/cache/tier/MessageType.java @@ -19,7 +19,6 @@ /** * Pre-defined message types supported by the system * - * @author Sudhir Menon * @since 2.0.2 */ public class MessageType { diff --git a/geode-core/src/main/java/com/gemstone/gemfire/internal/cache/tier/sockets/AcceptorImpl.java b/geode-core/src/main/java/com/gemstone/gemfire/internal/cache/tier/sockets/AcceptorImpl.java index 89c073fd3bd3..6f850627ce49 100755 --- a/geode-core/src/main/java/com/gemstone/gemfire/internal/cache/tier/sockets/AcceptorImpl.java +++ b/geode-core/src/main/java/com/gemstone/gemfire/internal/cache/tier/sockets/AcceptorImpl.java @@ -96,7 +96,6 @@ * Implements the acceptor thread on the bridge server. Accepts connections from * the edge and starts up threads to process requests from these. * - * @author Sudhir Menon * @since 2.0.2 */ @SuppressWarnings("deprecation") diff --git a/geode-core/src/main/java/com/gemstone/gemfire/internal/cache/tier/sockets/CacheClientNotifier.java b/geode-core/src/main/java/com/gemstone/gemfire/internal/cache/tier/sockets/CacheClientNotifier.java index 582e5f678452..6ac4690c25e6 100755 --- a/geode-core/src/main/java/com/gemstone/gemfire/internal/cache/tier/sockets/CacheClientNotifier.java +++ b/geode-core/src/main/java/com/gemstone/gemfire/internal/cache/tier/sockets/CacheClientNotifier.java @@ -128,7 +128,6 @@ * client socket connections to clients requesting notification of updates and * notifies them when updates occur. * - * @author Barry Oglesby * * @since 3.2 */ diff --git a/geode-core/src/main/java/com/gemstone/gemfire/internal/cache/tier/sockets/CacheClientNotifierStats.java b/geode-core/src/main/java/com/gemstone/gemfire/internal/cache/tier/sockets/CacheClientNotifierStats.java index d2465ddafd31..b51ae5cddb77 100755 --- a/geode-core/src/main/java/com/gemstone/gemfire/internal/cache/tier/sockets/CacheClientNotifierStats.java +++ b/geode-core/src/main/java/com/gemstone/gemfire/internal/cache/tier/sockets/CacheClientNotifierStats.java @@ -29,7 +29,6 @@ * GemFire statistics about a {@link CacheClientNotifier}. These statistics * are related to cache server client notifications. * - * @author Barry Oglesby * * @since 4.1.2 */ diff --git a/geode-core/src/main/java/com/gemstone/gemfire/internal/cache/tier/sockets/CacheClientProxyStats.java b/geode-core/src/main/java/com/gemstone/gemfire/internal/cache/tier/sockets/CacheClientProxyStats.java index f86bc475807d..dddcf1dcb611 100755 --- a/geode-core/src/main/java/com/gemstone/gemfire/internal/cache/tier/sockets/CacheClientProxyStats.java +++ b/geode-core/src/main/java/com/gemstone/gemfire/internal/cache/tier/sockets/CacheClientProxyStats.java @@ -30,7 +30,6 @@ * to a {@link CacheClientProxy}. These statistics are related to cache server * client notifications for each client. * - * @author Barry Oglesby * * @since 4.2 */ diff --git a/geode-core/src/main/java/com/gemstone/gemfire/internal/cache/tier/sockets/CacheClientUpdater.java b/geode-core/src/main/java/com/gemstone/gemfire/internal/cache/tier/sockets/CacheClientUpdater.java index bd98c0c19d9a..3e43b6939872 100755 --- a/geode-core/src/main/java/com/gemstone/gemfire/internal/cache/tier/sockets/CacheClientUpdater.java +++ b/geode-core/src/main/java/com/gemstone/gemfire/internal/cache/tier/sockets/CacheClientUpdater.java @@ -102,7 +102,6 @@ * {@linkplain com.gemstone.gemfire.cache.Region#localInvalidate(Object) invalidates} * the local cache based on the contents of those messages. * - * @author Barry Oglesby * @since 3.5 */ public class CacheClientUpdater extends Thread implements ClientUpdater, @@ -1928,7 +1927,6 @@ private void verifySocketBufferSize(int requestedBufferSize, int actualBufferSiz * Stats for a CacheClientUpdater. Currently the only thing measured * are incoming bytes on the wire * @since 5.7 - * @author darrel */ public static class CCUStats implements MessageStats { // static fields diff --git a/geode-core/src/main/java/com/gemstone/gemfire/internal/cache/tier/sockets/CacheServerHelper.java b/geode-core/src/main/java/com/gemstone/gemfire/internal/cache/tier/sockets/CacheServerHelper.java index b0b0be1c8a59..4e6d16a8c8e0 100755 --- a/geode-core/src/main/java/com/gemstone/gemfire/internal/cache/tier/sockets/CacheServerHelper.java +++ b/geode-core/src/main/java/com/gemstone/gemfire/internal/cache/tier/sockets/CacheServerHelper.java @@ -39,7 +39,6 @@ * CacheServerHelper is a static class that provides helper methods * for the CacheServer classes. * - * @author Barry Oglesby * @since 3.5 */ public class CacheServerHelper { diff --git a/geode-core/src/main/java/com/gemstone/gemfire/internal/cache/tier/sockets/ChunkedMessage.java b/geode-core/src/main/java/com/gemstone/gemfire/internal/cache/tier/sockets/ChunkedMessage.java index 30360e1ec19f..2c49f900aee3 100755 --- a/geode-core/src/main/java/com/gemstone/gemfire/internal/cache/tier/sockets/ChunkedMessage.java +++ b/geode-core/src/main/java/com/gemstone/gemfire/internal/cache/tier/sockets/ChunkedMessage.java @@ -58,7 +58,6 @@ * * @see com.gemstone.gemfire.internal.cache.tier.MessageType * - * @author Barry Oglesby * * @since 4.2 */ diff --git a/geode-core/src/main/java/com/gemstone/gemfire/internal/cache/tier/sockets/ClientDataSerializerMessage.java b/geode-core/src/main/java/com/gemstone/gemfire/internal/cache/tier/sockets/ClientDataSerializerMessage.java index 165728793361..0bf328458dd3 100644 --- a/geode-core/src/main/java/com/gemstone/gemfire/internal/cache/tier/sockets/ClientDataSerializerMessage.java +++ b/geode-core/src/main/java/com/gemstone/gemfire/internal/cache/tier/sockets/ClientDataSerializerMessage.java @@ -28,7 +28,6 @@ import com.gemstone.gemfire.internal.cache.tier.MessageType; /** * - * @author Amardeep * */ public class ClientDataSerializerMessage extends ClientUpdateMessageImpl{ diff --git a/geode-core/src/main/java/com/gemstone/gemfire/internal/cache/tier/sockets/ClientHealthMonitor.java b/geode-core/src/main/java/com/gemstone/gemfire/internal/cache/tier/sockets/ClientHealthMonitor.java index a3e099b78c42..93e543dbb443 100755 --- a/geode-core/src/main/java/com/gemstone/gemfire/internal/cache/tier/sockets/ClientHealthMonitor.java +++ b/geode-core/src/main/java/com/gemstone/gemfire/internal/cache/tier/sockets/ClientHealthMonitor.java @@ -53,7 +53,6 @@ * time elapses between heartbeats, the monitor determines that the client is * dead and interrupts its threads. * - * @author Barry Oglesby * * @since 4.2.3 */ diff --git a/geode-core/src/main/java/com/gemstone/gemfire/internal/cache/tier/sockets/ClientInstantiatorMessage.java b/geode-core/src/main/java/com/gemstone/gemfire/internal/cache/tier/sockets/ClientInstantiatorMessage.java index b9ba8f97ec6a..288c3f8b841d 100755 --- a/geode-core/src/main/java/com/gemstone/gemfire/internal/cache/tier/sockets/ClientInstantiatorMessage.java +++ b/geode-core/src/main/java/com/gemstone/gemfire/internal/cache/tier/sockets/ClientInstantiatorMessage.java @@ -34,7 +34,6 @@ * object is registerd on Server. This message contains array of serailized * instantiators along with the unique EventID * - * @author Yogesh Mahajan * * @since 5.0 */ diff --git a/geode-core/src/main/java/com/gemstone/gemfire/internal/cache/tier/sockets/ClientInterestMessageImpl.java b/geode-core/src/main/java/com/gemstone/gemfire/internal/cache/tier/sockets/ClientInterestMessageImpl.java index 168020e8167a..4e8647823b15 100755 --- a/geode-core/src/main/java/com/gemstone/gemfire/internal/cache/tier/sockets/ClientInterestMessageImpl.java +++ b/geode-core/src/main/java/com/gemstone/gemfire/internal/cache/tier/sockets/ClientInterestMessageImpl.java @@ -31,7 +31,6 @@ * a client's interest registrations made by the server on behalf of the * client. * - * @author Barry Oglesby * * @since 5.6 */ diff --git a/geode-core/src/main/java/com/gemstone/gemfire/internal/cache/tier/sockets/ClientMarkerMessageImpl.java b/geode-core/src/main/java/com/gemstone/gemfire/internal/cache/tier/sockets/ClientMarkerMessageImpl.java index f96295092f20..97f53c2d3c90 100755 --- a/geode-core/src/main/java/com/gemstone/gemfire/internal/cache/tier/sockets/ClientMarkerMessageImpl.java +++ b/geode-core/src/main/java/com/gemstone/gemfire/internal/cache/tier/sockets/ClientMarkerMessageImpl.java @@ -30,7 +30,6 @@ * to notify the client that all of its queued updates have been sent. This is * to be used mostly by the durable clients, although all clients receive it. * - * @author Barry Oglesby * * @since 5.5 */ diff --git a/geode-core/src/main/java/com/gemstone/gemfire/internal/cache/tier/sockets/ClientMessage.java b/geode-core/src/main/java/com/gemstone/gemfire/internal/cache/tier/sockets/ClientMessage.java index c780a9685586..c34e53994a8f 100755 --- a/geode-core/src/main/java/com/gemstone/gemfire/internal/cache/tier/sockets/ClientMessage.java +++ b/geode-core/src/main/java/com/gemstone/gemfire/internal/cache/tier/sockets/ClientMessage.java @@ -26,7 +26,6 @@ * Interface ClientMessage is a message representing a cache * operation that is sent from a server to an interested client. * - * @author Barry Oglesby * * @since 5.5 */ diff --git a/geode-core/src/main/java/com/gemstone/gemfire/internal/cache/tier/sockets/ClientPingMessageImpl.java b/geode-core/src/main/java/com/gemstone/gemfire/internal/cache/tier/sockets/ClientPingMessageImpl.java index 37ec81d42289..b83bd30e1f3b 100644 --- a/geode-core/src/main/java/com/gemstone/gemfire/internal/cache/tier/sockets/ClientPingMessageImpl.java +++ b/geode-core/src/main/java/com/gemstone/gemfire/internal/cache/tier/sockets/ClientPingMessageImpl.java @@ -30,7 +30,6 @@ * periodically placed in the CacheClientProxy's queue to verify * the client connection is still alive. * - * @author Barry Oglesby * * @since 6.6.2.x */ diff --git a/geode-core/src/main/java/com/gemstone/gemfire/internal/cache/tier/sockets/ClientProxyMembershipID.java b/geode-core/src/main/java/com/gemstone/gemfire/internal/cache/tier/sockets/ClientProxyMembershipID.java index 44c6152af5f0..561011068627 100644 --- a/geode-core/src/main/java/com/gemstone/gemfire/internal/cache/tier/sockets/ClientProxyMembershipID.java +++ b/geode-core/src/main/java/com/gemstone/gemfire/internal/cache/tier/sockets/ClientProxyMembershipID.java @@ -49,7 +49,6 @@ /** * This class represents a ConnectionProxy of the CacheClient * - * @author ashahid * * */ diff --git a/geode-core/src/main/java/com/gemstone/gemfire/internal/cache/tier/sockets/ClientTombstoneMessage.java b/geode-core/src/main/java/com/gemstone/gemfire/internal/cache/tier/sockets/ClientTombstoneMessage.java index e6604d90c366..281b4ea972cd 100644 --- a/geode-core/src/main/java/com/gemstone/gemfire/internal/cache/tier/sockets/ClientTombstoneMessage.java +++ b/geode-core/src/main/java/com/gemstone/gemfire/internal/cache/tier/sockets/ClientTombstoneMessage.java @@ -32,7 +32,6 @@ import com.gemstone.gemfire.internal.cache.versions.VersionSource; /** * - * @author bruce schuchardt * */ public class ClientTombstoneMessage extends ClientUpdateMessageImpl{ diff --git a/geode-core/src/main/java/com/gemstone/gemfire/internal/cache/tier/sockets/ClientUpdateMessage.java b/geode-core/src/main/java/com/gemstone/gemfire/internal/cache/tier/sockets/ClientUpdateMessage.java index 4b6639745819..46ddf0a0d69b 100755 --- a/geode-core/src/main/java/com/gemstone/gemfire/internal/cache/tier/sockets/ClientUpdateMessage.java +++ b/geode-core/src/main/java/com/gemstone/gemfire/internal/cache/tier/sockets/ClientUpdateMessage.java @@ -27,7 +27,6 @@ * Interface ClientUpdateMessage is a message representing a cache * operation that is sent from a server to an interested client. * - * @author Barry Oglesby * * @since 5.5 */ diff --git a/geode-core/src/main/java/com/gemstone/gemfire/internal/cache/tier/sockets/ClientUpdateMessageImpl.java b/geode-core/src/main/java/com/gemstone/gemfire/internal/cache/tier/sockets/ClientUpdateMessageImpl.java index 97d9a3d1b4af..da337d1e0e06 100755 --- a/geode-core/src/main/java/com/gemstone/gemfire/internal/cache/tier/sockets/ClientUpdateMessageImpl.java +++ b/geode-core/src/main/java/com/gemstone/gemfire/internal/cache/tier/sockets/ClientUpdateMessageImpl.java @@ -62,7 +62,6 @@ * Class ClientUpdateMessageImpl is a message representing a cache * operation that is sent from a server to an interested client. * - * @author Barry Oglesby * * @since 4.2 */ diff --git a/geode-core/src/main/java/com/gemstone/gemfire/internal/cache/tier/sockets/ConnectionListener.java b/geode-core/src/main/java/com/gemstone/gemfire/internal/cache/tier/sockets/ConnectionListener.java index 031e6a247bf6..e79c5799ac2e 100644 --- a/geode-core/src/main/java/com/gemstone/gemfire/internal/cache/tier/sockets/ConnectionListener.java +++ b/geode-core/src/main/java/com/gemstone/gemfire/internal/cache/tier/sockets/ConnectionListener.java @@ -20,7 +20,6 @@ * A listener which can be registered on {@link AcceptorImpl} * in order to receive events about connections created * or destroyed for this acceptor. - * @author dsmith * @since 5.7 * */ diff --git a/geode-core/src/main/java/com/gemstone/gemfire/internal/cache/tier/sockets/ConnectionListenerAdapter.java b/geode-core/src/main/java/com/gemstone/gemfire/internal/cache/tier/sockets/ConnectionListenerAdapter.java index 9b0047d45149..8c784e1d4d73 100644 --- a/geode-core/src/main/java/com/gemstone/gemfire/internal/cache/tier/sockets/ConnectionListenerAdapter.java +++ b/geode-core/src/main/java/com/gemstone/gemfire/internal/cache/tier/sockets/ConnectionListenerAdapter.java @@ -18,7 +18,6 @@ /** * A ConnectionListener that does nothing. - * @author dsmith * @since 5.7 * */ diff --git a/geode-core/src/main/java/com/gemstone/gemfire/internal/cache/tier/sockets/HAEventWrapper.java b/geode-core/src/main/java/com/gemstone/gemfire/internal/cache/tier/sockets/HAEventWrapper.java index 2d6a23300eb3..d60313d162e1 100755 --- a/geode-core/src/main/java/com/gemstone/gemfire/internal/cache/tier/sockets/HAEventWrapper.java +++ b/geode-core/src/main/java/com/gemstone/gemfire/internal/cache/tier/sockets/HAEventWrapper.java @@ -49,7 +49,6 @@ * HARegionQueue mechanics. It also has a property to indicate * the number of HARegionQueues referencing this instance. * - * @author ashetkar * @since 5.7 * */ diff --git a/geode-core/src/main/java/com/gemstone/gemfire/internal/cache/tier/sockets/InterestResultPolicyImpl.java b/geode-core/src/main/java/com/gemstone/gemfire/internal/cache/tier/sockets/InterestResultPolicyImpl.java index 89fb3ec3b6b9..bd51e0d41cbb 100644 --- a/geode-core/src/main/java/com/gemstone/gemfire/internal/cache/tier/sockets/InterestResultPolicyImpl.java +++ b/geode-core/src/main/java/com/gemstone/gemfire/internal/cache/tier/sockets/InterestResultPolicyImpl.java @@ -27,7 +27,6 @@ /** * Used to make InterestResultPolicy implement DataSerializableFixedID * - * @author Darrel Schneider * * @since 5.7 */ diff --git a/geode-core/src/main/java/com/gemstone/gemfire/internal/cache/tier/sockets/ObjectPartList.java b/geode-core/src/main/java/com/gemstone/gemfire/internal/cache/tier/sockets/ObjectPartList.java index d34fa2d55d4a..b746f5fdef92 100644 --- a/geode-core/src/main/java/com/gemstone/gemfire/internal/cache/tier/sockets/ObjectPartList.java +++ b/geode-core/src/main/java/com/gemstone/gemfire/internal/cache/tier/sockets/ObjectPartList.java @@ -41,7 +41,6 @@ * that keys are either provided for all entries or for none. * * @since 5.7 - * @author swale */ public class ObjectPartList implements DataSerializableFixedID, Releasable { private static final Logger logger = LogService.getLogger(); diff --git a/geode-core/src/main/java/com/gemstone/gemfire/internal/cache/tier/sockets/ObjectPartList651.java b/geode-core/src/main/java/com/gemstone/gemfire/internal/cache/tier/sockets/ObjectPartList651.java index ca99a1af3c2c..82957f64f6a9 100644 --- a/geode-core/src/main/java/com/gemstone/gemfire/internal/cache/tier/sockets/ObjectPartList651.java +++ b/geode-core/src/main/java/com/gemstone/gemfire/internal/cache/tier/sockets/ObjectPartList651.java @@ -32,7 +32,6 @@ * * [bruce] THIS CLASS IS OBSOLETE AS OF V7.0. It is replaced with VersionedObjectList * - * @author Suranjan Kumar * */ public class ObjectPartList651 extends ObjectPartList { diff --git a/geode-core/src/main/java/com/gemstone/gemfire/internal/cache/tier/sockets/ServerConnection.java b/geode-core/src/main/java/com/gemstone/gemfire/internal/cache/tier/sockets/ServerConnection.java index 16f80b740190..13427f806428 100644 --- a/geode-core/src/main/java/com/gemstone/gemfire/internal/cache/tier/sockets/ServerConnection.java +++ b/geode-core/src/main/java/com/gemstone/gemfire/internal/cache/tier/sockets/ServerConnection.java @@ -75,7 +75,6 @@ * cache connection. Each server connection runs in its own thread to maximize * concurrency and improve response times to edge requests * - * @author Sudhir Menon * @since 2.0.2 */ public class ServerConnection implements Runnable { diff --git a/geode-core/src/main/java/com/gemstone/gemfire/internal/cache/tier/sockets/ServerQueueStatus.java b/geode-core/src/main/java/com/gemstone/gemfire/internal/cache/tier/sockets/ServerQueueStatus.java index 7f8abaf36b45..c260c031dbe2 100755 --- a/geode-core/src/main/java/com/gemstone/gemfire/internal/cache/tier/sockets/ServerQueueStatus.java +++ b/geode-core/src/main/java/com/gemstone/gemfire/internal/cache/tier/sockets/ServerQueueStatus.java @@ -24,7 +24,6 @@ * response of Handshake to server. This wrapper object is used to hold the * various info retrurned from Handshake. such as endpoint type and queue size. * - * @author Yogesh Mahajan * @since 5.5 * */ diff --git a/geode-core/src/main/java/com/gemstone/gemfire/internal/cache/tier/sockets/ServerResponseMatrix.java b/geode-core/src/main/java/com/gemstone/gemfire/internal/cache/tier/sockets/ServerResponseMatrix.java index 96e79b1db429..c5186025888e 100755 --- a/geode-core/src/main/java/com/gemstone/gemfire/internal/cache/tier/sockets/ServerResponseMatrix.java +++ b/geode-core/src/main/java/com/gemstone/gemfire/internal/cache/tier/sockets/ServerResponseMatrix.java @@ -40,7 +40,6 @@ * entries are gathered up after the RI response is completed and removed from * the system * - * @author Yogesh Mahajan * @since 5.1 * */ diff --git a/geode-core/src/main/java/com/gemstone/gemfire/internal/cache/tier/sockets/UnregisterAllInterest.java b/geode-core/src/main/java/com/gemstone/gemfire/internal/cache/tier/sockets/UnregisterAllInterest.java index 0b54c9bb87d0..a40bef07b1b9 100644 --- a/geode-core/src/main/java/com/gemstone/gemfire/internal/cache/tier/sockets/UnregisterAllInterest.java +++ b/geode-core/src/main/java/com/gemstone/gemfire/internal/cache/tier/sockets/UnregisterAllInterest.java @@ -22,7 +22,6 @@ /** * Singleton token indicating that all interest registrations should be removed. * - * @author Darrel Schneider * */ public class UnregisterAllInterest implements Serializable { diff --git a/geode-core/src/main/java/com/gemstone/gemfire/internal/cache/tier/sockets/VersionedObjectList.java b/geode-core/src/main/java/com/gemstone/gemfire/internal/cache/tier/sockets/VersionedObjectList.java index f8ef7ecf3551..7f6bef4d3cb0 100644 --- a/geode-core/src/main/java/com/gemstone/gemfire/internal/cache/tier/sockets/VersionedObjectList.java +++ b/geode-core/src/main/java/com/gemstone/gemfire/internal/cache/tier/sockets/VersionedObjectList.java @@ -56,7 +56,6 @@ * This class also implements Externalizable so that it can be serialized as * part of a PutAllPartialResultException. * - * @author Bruce Schuchardt * @since 7.0 */ @@ -698,7 +697,6 @@ public void remove() { * It works by pretending to be a VersionedObjectList during serialization * and writing only a portion of the list in each invocation of toData(). * - * @author bruces * */ public static class Chunker implements DataSerializableFixedID { diff --git a/geode-core/src/main/java/com/gemstone/gemfire/internal/cache/tier/sockets/command/CommitCommand.java b/geode-core/src/main/java/com/gemstone/gemfire/internal/cache/tier/sockets/command/CommitCommand.java index 6caf89a7f7f8..79c73fc90722 100644 --- a/geode-core/src/main/java/com/gemstone/gemfire/internal/cache/tier/sockets/command/CommitCommand.java +++ b/geode-core/src/main/java/com/gemstone/gemfire/internal/cache/tier/sockets/command/CommitCommand.java @@ -40,7 +40,6 @@ * This is the base command which read the parts for the * MessageType.COMMIT.
    * - * @author gregp * @since 6.6 */ public class CommitCommand extends BaseCommand { diff --git a/geode-core/src/main/java/com/gemstone/gemfire/internal/cache/tier/sockets/command/Destroy70.java b/geode-core/src/main/java/com/gemstone/gemfire/internal/cache/tier/sockets/command/Destroy70.java index bab174ca9c54..82d9c1a0f65d 100644 --- a/geode-core/src/main/java/com/gemstone/gemfire/internal/cache/tier/sockets/command/Destroy70.java +++ b/geode-core/src/main/java/com/gemstone/gemfire/internal/cache/tier/sockets/command/Destroy70.java @@ -30,7 +30,6 @@ import java.io.IOException; /** - * @author bruces * */ public class Destroy70 extends Destroy65 { diff --git a/geode-core/src/main/java/com/gemstone/gemfire/internal/cache/tier/sockets/command/ExecuteFunction.java b/geode-core/src/main/java/com/gemstone/gemfire/internal/cache/tier/sockets/command/ExecuteFunction.java index 8adf50e27b6b..045eccd755fb 100755 --- a/geode-core/src/main/java/com/gemstone/gemfire/internal/cache/tier/sockets/command/ExecuteFunction.java +++ b/geode-core/src/main/java/com/gemstone/gemfire/internal/cache/tier/sockets/command/ExecuteFunction.java @@ -60,7 +60,6 @@ * If the hasResult byte is 1, then this command send back the result after the * execution to the client else do not send the reply back to the client * - * @author Kishor Bachhav * @since 5.8Beta */ public class ExecuteFunction extends BaseCommand { diff --git a/geode-core/src/main/java/com/gemstone/gemfire/internal/cache/tier/sockets/command/ExecuteFunction65.java b/geode-core/src/main/java/com/gemstone/gemfire/internal/cache/tier/sockets/command/ExecuteFunction65.java index 985c194fe28c..0bda7ffae958 100644 --- a/geode-core/src/main/java/com/gemstone/gemfire/internal/cache/tier/sockets/command/ExecuteFunction65.java +++ b/geode-core/src/main/java/com/gemstone/gemfire/internal/cache/tier/sockets/command/ExecuteFunction65.java @@ -54,7 +54,6 @@ import com.gemstone.gemfire.internal.security.AuthorizeRequest; /** - * @author ymahajan * @since 6.5 */ public class ExecuteFunction65 extends BaseCommand { diff --git a/geode-core/src/main/java/com/gemstone/gemfire/internal/cache/tier/sockets/command/ExecuteFunction66.java b/geode-core/src/main/java/com/gemstone/gemfire/internal/cache/tier/sockets/command/ExecuteFunction66.java index 9160c111ab44..296c029a952f 100644 --- a/geode-core/src/main/java/com/gemstone/gemfire/internal/cache/tier/sockets/command/ExecuteFunction66.java +++ b/geode-core/src/main/java/com/gemstone/gemfire/internal/cache/tier/sockets/command/ExecuteFunction66.java @@ -64,7 +64,6 @@ import com.gemstone.gemfire.internal.security.AuthorizeRequest; /** - * @author kbachhav * @since 6.6 */ public class ExecuteFunction66 extends BaseCommand { diff --git a/geode-core/src/main/java/com/gemstone/gemfire/internal/cache/tier/sockets/command/ExecuteFunction70.java b/geode-core/src/main/java/com/gemstone/gemfire/internal/cache/tier/sockets/command/ExecuteFunction70.java index 3a4e4d444b73..528e462953b0 100644 --- a/geode-core/src/main/java/com/gemstone/gemfire/internal/cache/tier/sockets/command/ExecuteFunction70.java +++ b/geode-core/src/main/java/com/gemstone/gemfire/internal/cache/tier/sockets/command/ExecuteFunction70.java @@ -41,7 +41,6 @@ /** * - * @author sbawaska */ public class ExecuteFunction70 extends ExecuteFunction66 { diff --git a/geode-core/src/main/java/com/gemstone/gemfire/internal/cache/tier/sockets/command/ExecuteRegionFunction.java b/geode-core/src/main/java/com/gemstone/gemfire/internal/cache/tier/sockets/command/ExecuteRegionFunction.java index 63a550bbc828..5a3856728a45 100755 --- a/geode-core/src/main/java/com/gemstone/gemfire/internal/cache/tier/sockets/command/ExecuteRegionFunction.java +++ b/geode-core/src/main/java/com/gemstone/gemfire/internal/cache/tier/sockets/command/ExecuteRegionFunction.java @@ -55,7 +55,6 @@ * If the hasResult byte is 1, then this command send back the result after the * execution to the client else do not send the reply back to the client * - * @author Kishor Bachhav * @since 5.8LA */ public class ExecuteRegionFunction extends BaseCommand { diff --git a/geode-core/src/main/java/com/gemstone/gemfire/internal/cache/tier/sockets/command/ExecuteRegionFunction65.java b/geode-core/src/main/java/com/gemstone/gemfire/internal/cache/tier/sockets/command/ExecuteRegionFunction65.java index 934514843a50..9c92e98d2946 100755 --- a/geode-core/src/main/java/com/gemstone/gemfire/internal/cache/tier/sockets/command/ExecuteRegionFunction65.java +++ b/geode-core/src/main/java/com/gemstone/gemfire/internal/cache/tier/sockets/command/ExecuteRegionFunction65.java @@ -53,7 +53,6 @@ /** * - * @author ymahajan * @since 6.5 */ public class ExecuteRegionFunction65 extends BaseCommand { diff --git a/geode-core/src/main/java/com/gemstone/gemfire/internal/cache/tier/sockets/command/ExecuteRegionFunction66.java b/geode-core/src/main/java/com/gemstone/gemfire/internal/cache/tier/sockets/command/ExecuteRegionFunction66.java index 018d05b3958b..5d1443df9ed6 100644 --- a/geode-core/src/main/java/com/gemstone/gemfire/internal/cache/tier/sockets/command/ExecuteRegionFunction66.java +++ b/geode-core/src/main/java/com/gemstone/gemfire/internal/cache/tier/sockets/command/ExecuteRegionFunction66.java @@ -55,7 +55,6 @@ /** * - * @author kbachhav * @since 6.6 */ public class ExecuteRegionFunction66 extends BaseCommand { diff --git a/geode-core/src/main/java/com/gemstone/gemfire/internal/cache/tier/sockets/command/ExecuteRegionFunctionSingleHop.java b/geode-core/src/main/java/com/gemstone/gemfire/internal/cache/tier/sockets/command/ExecuteRegionFunctionSingleHop.java index 15b01fc1e63b..8dcc155c9eb4 100644 --- a/geode-core/src/main/java/com/gemstone/gemfire/internal/cache/tier/sockets/command/ExecuteRegionFunctionSingleHop.java +++ b/geode-core/src/main/java/com/gemstone/gemfire/internal/cache/tier/sockets/command/ExecuteRegionFunctionSingleHop.java @@ -53,7 +53,6 @@ /** * - * @author skumar * @since 6.5 */ public class ExecuteRegionFunctionSingleHop extends BaseCommand { diff --git a/geode-core/src/main/java/com/gemstone/gemfire/internal/cache/tier/sockets/command/GetAllForRI.java b/geode-core/src/main/java/com/gemstone/gemfire/internal/cache/tier/sockets/command/GetAllForRI.java index 71074bb5c519..8a1c1497470e 100644 --- a/geode-core/src/main/java/com/gemstone/gemfire/internal/cache/tier/sockets/command/GetAllForRI.java +++ b/geode-core/src/main/java/com/gemstone/gemfire/internal/cache/tier/sockets/command/GetAllForRI.java @@ -29,7 +29,6 @@ * [bruce] this class is superceded by GetAll70, which merges GetAll651 and * GetAllForRI * - * @author dsmith * */ public class GetAllForRI extends GetAll651 { diff --git a/geode-core/src/main/java/com/gemstone/gemfire/internal/cache/tier/sockets/command/GetAllWithCallback.java b/geode-core/src/main/java/com/gemstone/gemfire/internal/cache/tier/sockets/command/GetAllWithCallback.java index 21645f833bce..630163b53eef 100644 --- a/geode-core/src/main/java/com/gemstone/gemfire/internal/cache/tier/sockets/command/GetAllWithCallback.java +++ b/geode-core/src/main/java/com/gemstone/gemfire/internal/cache/tier/sockets/command/GetAllWithCallback.java @@ -52,7 +52,6 @@ /** * Initial version copied from GetAll70.java r48777. * - * @author dschneider * */ public class GetAllWithCallback extends BaseCommand { diff --git a/geode-core/src/main/java/com/gemstone/gemfire/internal/cache/tier/sockets/command/GetClientPRMetadataCommand.java b/geode-core/src/main/java/com/gemstone/gemfire/internal/cache/tier/sockets/command/GetClientPRMetadataCommand.java index e7c4a569ccf3..c9260723718a 100755 --- a/geode-core/src/main/java/com/gemstone/gemfire/internal/cache/tier/sockets/command/GetClientPRMetadataCommand.java +++ b/geode-core/src/main/java/com/gemstone/gemfire/internal/cache/tier/sockets/command/GetClientPRMetadataCommand.java @@ -36,8 +36,6 @@ /** * {@link Command} for {@link GetClientPRMetadataCommand} * - * @author Suranjan Kumar - * @author Yogesh Mahajan * * @since 6.5 */ diff --git a/geode-core/src/main/java/com/gemstone/gemfire/internal/cache/tier/sockets/command/GetClientPRMetadataCommand66.java b/geode-core/src/main/java/com/gemstone/gemfire/internal/cache/tier/sockets/command/GetClientPRMetadataCommand66.java index 3343c20473e6..45fe3769c52b 100644 --- a/geode-core/src/main/java/com/gemstone/gemfire/internal/cache/tier/sockets/command/GetClientPRMetadataCommand66.java +++ b/geode-core/src/main/java/com/gemstone/gemfire/internal/cache/tier/sockets/command/GetClientPRMetadataCommand66.java @@ -34,7 +34,6 @@ /** * {@link Command} for {@link GetClientPRMetadataCommand66} * - * @author Suranjan Kumar * * @since 6.6 */ diff --git a/geode-core/src/main/java/com/gemstone/gemfire/internal/cache/tier/sockets/command/GetClientPartitionAttributesCommand.java b/geode-core/src/main/java/com/gemstone/gemfire/internal/cache/tier/sockets/command/GetClientPartitionAttributesCommand.java index d44c8c6d8be9..351c24fa10d2 100755 --- a/geode-core/src/main/java/com/gemstone/gemfire/internal/cache/tier/sockets/command/GetClientPartitionAttributesCommand.java +++ b/geode-core/src/main/java/com/gemstone/gemfire/internal/cache/tier/sockets/command/GetClientPartitionAttributesCommand.java @@ -37,8 +37,6 @@ /** * {@link Command} for {@link GetClientPartitionAttributesOp} operation * - * @author Suranjan Kumar - * @author Yogesh Mahajan * * @since 6.5 * diff --git a/geode-core/src/main/java/com/gemstone/gemfire/internal/cache/tier/sockets/command/GetEntry70.java b/geode-core/src/main/java/com/gemstone/gemfire/internal/cache/tier/sockets/command/GetEntry70.java index d099aba0470c..3a9c5320180f 100644 --- a/geode-core/src/main/java/com/gemstone/gemfire/internal/cache/tier/sockets/command/GetEntry70.java +++ b/geode-core/src/main/java/com/gemstone/gemfire/internal/cache/tier/sockets/command/GetEntry70.java @@ -29,7 +29,6 @@ * getEntry(key) operation performed on server. * Extends Request, and overrides getValueAndIsObject() in Request * so as to not invoke loader. - * @author sbawaska * @since 6.6 */ public class GetEntry70 extends Get70 { diff --git a/geode-core/src/main/java/com/gemstone/gemfire/internal/cache/tier/sockets/command/GetEntryCommand.java b/geode-core/src/main/java/com/gemstone/gemfire/internal/cache/tier/sockets/command/GetEntryCommand.java index 9e6e88024714..f5226e9dc442 100644 --- a/geode-core/src/main/java/com/gemstone/gemfire/internal/cache/tier/sockets/command/GetEntryCommand.java +++ b/geode-core/src/main/java/com/gemstone/gemfire/internal/cache/tier/sockets/command/GetEntryCommand.java @@ -28,7 +28,6 @@ * getEntry(key) operation performed on server. * Extends Request, and overrides getValueAndIsObject() in Request * so as to not invoke loader. - * @author sbawaska * @since 6.6 */ public class GetEntryCommand extends Request { diff --git a/geode-core/src/main/java/com/gemstone/gemfire/internal/cache/tier/sockets/command/Invalidate70.java b/geode-core/src/main/java/com/gemstone/gemfire/internal/cache/tier/sockets/command/Invalidate70.java index d1a0ad630ddb..7ced9c835418 100644 --- a/geode-core/src/main/java/com/gemstone/gemfire/internal/cache/tier/sockets/command/Invalidate70.java +++ b/geode-core/src/main/java/com/gemstone/gemfire/internal/cache/tier/sockets/command/Invalidate70.java @@ -31,7 +31,6 @@ import java.io.IOException; /** - * @author bruces * */ public class Invalidate70 extends Invalidate { diff --git a/geode-core/src/main/java/com/gemstone/gemfire/internal/cache/tier/sockets/command/ManagementCommand.java b/geode-core/src/main/java/com/gemstone/gemfire/internal/cache/tier/sockets/command/ManagementCommand.java index 4afb1da74472..cdf439982a2e 100755 --- a/geode-core/src/main/java/com/gemstone/gemfire/internal/cache/tier/sockets/command/ManagementCommand.java +++ b/geode-core/src/main/java/com/gemstone/gemfire/internal/cache/tier/sockets/command/ManagementCommand.java @@ -25,7 +25,6 @@ /** * TODO: Javadoc everything and edit as needed * - * @author VMware, Inc. * @since 7.0 */ public class ManagementCommand extends BaseCommand { diff --git a/geode-core/src/main/java/com/gemstone/gemfire/internal/cache/tier/sockets/command/Put70.java b/geode-core/src/main/java/com/gemstone/gemfire/internal/cache/tier/sockets/command/Put70.java index 59f7640a9e15..af16bed71143 100644 --- a/geode-core/src/main/java/com/gemstone/gemfire/internal/cache/tier/sockets/command/Put70.java +++ b/geode-core/src/main/java/com/gemstone/gemfire/internal/cache/tier/sockets/command/Put70.java @@ -31,7 +31,6 @@ import java.io.IOException; /** - * @author bruces * */ public class Put70 extends Put65 { diff --git a/geode-core/src/main/java/com/gemstone/gemfire/internal/cache/tier/sockets/command/PutAllWithCallback.java b/geode-core/src/main/java/com/gemstone/gemfire/internal/cache/tier/sockets/command/PutAllWithCallback.java index cb75c662f47a..ef5f5015fce7 100644 --- a/geode-core/src/main/java/com/gemstone/gemfire/internal/cache/tier/sockets/command/PutAllWithCallback.java +++ b/geode-core/src/main/java/com/gemstone/gemfire/internal/cache/tier/sockets/command/PutAllWithCallback.java @@ -23,7 +23,6 @@ /** * Adds a callbackArg to PutAll80 - * @author dschneider * */ public class PutAllWithCallback extends PutAll80 { diff --git a/geode-core/src/main/java/com/gemstone/gemfire/internal/cache/tier/sockets/command/RegisterInterest61.java b/geode-core/src/main/java/com/gemstone/gemfire/internal/cache/tier/sockets/command/RegisterInterest61.java index f5ac4c3dcb6e..6100b52599c6 100755 --- a/geode-core/src/main/java/com/gemstone/gemfire/internal/cache/tier/sockets/command/RegisterInterest61.java +++ b/geode-core/src/main/java/com/gemstone/gemfire/internal/cache/tier/sockets/command/RegisterInterest61.java @@ -37,7 +37,6 @@ import java.io.IOException; /** - * @author aingle * @since 6.1 */ public class RegisterInterest61 extends BaseCommand { diff --git a/geode-core/src/main/java/com/gemstone/gemfire/internal/cache/tier/sockets/command/RegisterInterestList.java b/geode-core/src/main/java/com/gemstone/gemfire/internal/cache/tier/sockets/command/RegisterInterestList.java index f2a2da8e2b1a..c43c28e13e72 100644 --- a/geode-core/src/main/java/com/gemstone/gemfire/internal/cache/tier/sockets/command/RegisterInterestList.java +++ b/geode-core/src/main/java/com/gemstone/gemfire/internal/cache/tier/sockets/command/RegisterInterestList.java @@ -38,7 +38,6 @@ import java.util.List; /** - * @author ashahid * */ public class RegisterInterestList extends BaseCommand { diff --git a/geode-core/src/main/java/com/gemstone/gemfire/internal/cache/tier/sockets/command/RegisterInterestList61.java b/geode-core/src/main/java/com/gemstone/gemfire/internal/cache/tier/sockets/command/RegisterInterestList61.java index 7838439c0ec9..92c03f60d5c7 100755 --- a/geode-core/src/main/java/com/gemstone/gemfire/internal/cache/tier/sockets/command/RegisterInterestList61.java +++ b/geode-core/src/main/java/com/gemstone/gemfire/internal/cache/tier/sockets/command/RegisterInterestList61.java @@ -38,7 +38,6 @@ import java.util.List; /** - * @author aingle * @since 6.1 */ public class RegisterInterestList61 extends BaseCommand { diff --git a/geode-core/src/main/java/com/gemstone/gemfire/internal/cache/tier/sockets/command/RegisterInterestList66.java b/geode-core/src/main/java/com/gemstone/gemfire/internal/cache/tier/sockets/command/RegisterInterestList66.java index 1e9d021f542f..58051a147d39 100644 --- a/geode-core/src/main/java/com/gemstone/gemfire/internal/cache/tier/sockets/command/RegisterInterestList66.java +++ b/geode-core/src/main/java/com/gemstone/gemfire/internal/cache/tier/sockets/command/RegisterInterestList66.java @@ -44,7 +44,6 @@ * {@link RegisterInterestList61} number of keys & each individual key was sent * as a separate part. * - * @author sbhokare * * @since 6.6 */ diff --git a/geode-core/src/main/java/com/gemstone/gemfire/internal/cache/tier/sockets/command/RollbackCommand.java b/geode-core/src/main/java/com/gemstone/gemfire/internal/cache/tier/sockets/command/RollbackCommand.java index ed8915b13e9e..ed7c7065d96f 100644 --- a/geode-core/src/main/java/com/gemstone/gemfire/internal/cache/tier/sockets/command/RollbackCommand.java +++ b/geode-core/src/main/java/com/gemstone/gemfire/internal/cache/tier/sockets/command/RollbackCommand.java @@ -29,7 +29,6 @@ /** * Command for performing Rollback on the server - * @author sbawaska */ public class RollbackCommand extends BaseCommand { diff --git a/geode-core/src/main/java/com/gemstone/gemfire/internal/cache/tier/sockets/command/TXFailoverCommand.java b/geode-core/src/main/java/com/gemstone/gemfire/internal/cache/tier/sockets/command/TXFailoverCommand.java index 73e19b4297d1..789b3125a89f 100644 --- a/geode-core/src/main/java/com/gemstone/gemfire/internal/cache/tier/sockets/command/TXFailoverCommand.java +++ b/geode-core/src/main/java/com/gemstone/gemfire/internal/cache/tier/sockets/command/TXFailoverCommand.java @@ -45,7 +45,6 @@ * Used for bootstrapping txState/PeerTXStateStub on the server. * This command is send when in client in a transaction is about * to failover to this server - * @author sbawaska */ public class TXFailoverCommand extends BaseCommand { diff --git a/geode-core/src/main/java/com/gemstone/gemfire/internal/cache/tx/DistClientTXStateStub.java b/geode-core/src/main/java/com/gemstone/gemfire/internal/cache/tx/DistClientTXStateStub.java index d6f69ef14e32..7916b9216d51 100644 --- a/geode-core/src/main/java/com/gemstone/gemfire/internal/cache/tx/DistClientTXStateStub.java +++ b/geode-core/src/main/java/com/gemstone/gemfire/internal/cache/tx/DistClientTXStateStub.java @@ -33,7 +33,6 @@ import com.gemstone.gemfire.internal.i18n.LocalizedStrings; /** - * @author vivekb * */ public class DistClientTXStateStub extends ClientTXStateStub implements diff --git a/geode-core/src/main/java/com/gemstone/gemfire/internal/cache/tx/DistTxEntryEvent.java b/geode-core/src/main/java/com/gemstone/gemfire/internal/cache/tx/DistTxEntryEvent.java index f0f443ecd545..a1089656048c 100644 --- a/geode-core/src/main/java/com/gemstone/gemfire/internal/cache/tx/DistTxEntryEvent.java +++ b/geode-core/src/main/java/com/gemstone/gemfire/internal/cache/tx/DistTxEntryEvent.java @@ -39,7 +39,6 @@ /** * - * @author shirishd * */ public class DistTxEntryEvent extends EntryEventImpl { diff --git a/geode-core/src/main/java/com/gemstone/gemfire/internal/cache/tx/TransactionalOperation.java b/geode-core/src/main/java/com/gemstone/gemfire/internal/cache/tx/TransactionalOperation.java index e183fb533f2b..5f88d42b675c 100755 --- a/geode-core/src/main/java/com/gemstone/gemfire/internal/cache/tx/TransactionalOperation.java +++ b/geode-core/src/main/java/com/gemstone/gemfire/internal/cache/tx/TransactionalOperation.java @@ -22,7 +22,6 @@ import java.util.Set; /** - * @author Bruce Schuchardt * */ public class TransactionalOperation { diff --git a/geode-core/src/main/java/com/gemstone/gemfire/internal/cache/versions/ConcurrentCacheModificationException.java b/geode-core/src/main/java/com/gemstone/gemfire/internal/cache/versions/ConcurrentCacheModificationException.java index ed234d8158de..af297d1d3879 100644 --- a/geode-core/src/main/java/com/gemstone/gemfire/internal/cache/versions/ConcurrentCacheModificationException.java +++ b/geode-core/src/main/java/com/gemstone/gemfire/internal/cache/versions/ConcurrentCacheModificationException.java @@ -26,7 +26,6 @@ * mechanism when a conflict is detected. It is not currently meant to be * exposed to customers. * - * @author Bruce Schuchardt * @since 7.0 */ public class ConcurrentCacheModificationException extends diff --git a/geode-core/src/main/java/com/gemstone/gemfire/internal/cache/versions/DiskRegionVersionVector.java b/geode-core/src/main/java/com/gemstone/gemfire/internal/cache/versions/DiskRegionVersionVector.java index 92b5b3d3d4c5..ea9344763973 100644 --- a/geode-core/src/main/java/com/gemstone/gemfire/internal/cache/versions/DiskRegionVersionVector.java +++ b/geode-core/src/main/java/com/gemstone/gemfire/internal/cache/versions/DiskRegionVersionVector.java @@ -27,7 +27,6 @@ /** * A region version vector for regions with persistent data. This region * version vector uses the persistent disk store UUID as the member id. - * @author dsmith * */ public class DiskRegionVersionVector extends RegionVersionVector { diff --git a/geode-core/src/main/java/com/gemstone/gemfire/internal/cache/versions/DiskVersionTag.java b/geode-core/src/main/java/com/gemstone/gemfire/internal/cache/versions/DiskVersionTag.java index c347ad3d225c..7cb284bcdb37 100644 --- a/geode-core/src/main/java/com/gemstone/gemfire/internal/cache/versions/DiskVersionTag.java +++ b/geode-core/src/main/java/com/gemstone/gemfire/internal/cache/versions/DiskVersionTag.java @@ -27,7 +27,6 @@ /** * The version tag class for version tags for persistent regions. The VersionSource * held in these tags is a disk store id. - * @author dsmith * */ public class DiskVersionTag extends VersionTag { diff --git a/geode-core/src/main/java/com/gemstone/gemfire/internal/cache/versions/RVVException.java b/geode-core/src/main/java/com/gemstone/gemfire/internal/cache/versions/RVVException.java index 1974b17131d6..f628d44844fb 100644 --- a/geode-core/src/main/java/com/gemstone/gemfire/internal/cache/versions/RVVException.java +++ b/geode-core/src/main/java/com/gemstone/gemfire/internal/cache/versions/RVVException.java @@ -51,7 +51,6 @@ * RegionVersionHolder that holds the exception is locked while accessing * its RVVExceptions. This is what is done in RegionVersionVector. * - * @author Bruce Schuchardt */ abstract class RVVException implements Comparable, Cloneable, VersionedDataSerializable { protected static boolean UseTreeSetsForTesting = false; diff --git a/geode-core/src/main/java/com/gemstone/gemfire/internal/cache/versions/RVVExceptionT.java b/geode-core/src/main/java/com/gemstone/gemfire/internal/cache/versions/RVVExceptionT.java index 337183105f86..72fdd54de422 100644 --- a/geode-core/src/main/java/com/gemstone/gemfire/internal/cache/versions/RVVExceptionT.java +++ b/geode-core/src/main/java/com/gemstone/gemfire/internal/cache/versions/RVVExceptionT.java @@ -31,7 +31,6 @@ * used if the exception represents a large gap. * * - * @author Bruce Schuchardt * */ public class RVVExceptionT extends RVVException { diff --git a/geode-core/src/main/java/com/gemstone/gemfire/internal/cache/versions/RegionVersionHolder.java b/geode-core/src/main/java/com/gemstone/gemfire/internal/cache/versions/RegionVersionHolder.java index 2f337d148bc3..ce37122ae321 100755 --- a/geode-core/src/main/java/com/gemstone/gemfire/internal/cache/versions/RegionVersionHolder.java +++ b/geode-core/src/main/java/com/gemstone/gemfire/internal/cache/versions/RegionVersionHolder.java @@ -52,7 +52,6 @@ * Operation R4 and R5 are applied locally, but never distributed to P. So P's RVV for R is still 3. * After R GIIed from P, R's RVV becomes R5(3-6), i.e. Exception's nextVersion is currentVersion+1. * - * @author Bruce Schuchardt */ public class RegionVersionHolder implements Cloneable, DataSerializable { diff --git a/geode-core/src/main/java/com/gemstone/gemfire/internal/cache/versions/RegionVersionVector.java b/geode-core/src/main/java/com/gemstone/gemfire/internal/cache/versions/RegionVersionVector.java index 27f374736771..d9180a2d71c7 100644 --- a/geode-core/src/main/java/com/gemstone/gemfire/internal/cache/versions/RegionVersionVector.java +++ b/geode-core/src/main/java/com/gemstone/gemfire/internal/cache/versions/RegionVersionVector.java @@ -56,7 +56,6 @@ * RegionVersionVector tracks the highest region-level version number of * operations applied to a region for each member that has the region.

    * - * @author Bruce Schuchardt */ public abstract class RegionVersionVector> implements DataSerializableFixedID, MembershipListener { @@ -1473,7 +1472,6 @@ public Version[] getSerializationVersions(){ // * This class will wrap DM member IDs to provide integers that can be stored // * on disk and be timed out in the vector. // * -// * @author bruce // * // */ // static class RVVMember implements Comparable { diff --git a/geode-core/src/main/java/com/gemstone/gemfire/internal/cache/versions/VMRegionVersionVector.java b/geode-core/src/main/java/com/gemstone/gemfire/internal/cache/versions/VMRegionVersionVector.java index 26034f7a090e..c9d4d9e8174f 100644 --- a/geode-core/src/main/java/com/gemstone/gemfire/internal/cache/versions/VMRegionVersionVector.java +++ b/geode-core/src/main/java/com/gemstone/gemfire/internal/cache/versions/VMRegionVersionVector.java @@ -27,7 +27,6 @@ /** * A region version vector for regions without persistent data. This region * version vector uses the InternalDistributedMember as the member id. - * @author dsmith * */ public class VMRegionVersionVector extends RegionVersionVector { diff --git a/geode-core/src/main/java/com/gemstone/gemfire/internal/cache/versions/VMVersionTag.java b/geode-core/src/main/java/com/gemstone/gemfire/internal/cache/versions/VMVersionTag.java index 4dfa1d6ddd7e..e1cb993a48cf 100644 --- a/geode-core/src/main/java/com/gemstone/gemfire/internal/cache/versions/VMVersionTag.java +++ b/geode-core/src/main/java/com/gemstone/gemfire/internal/cache/versions/VMVersionTag.java @@ -28,7 +28,6 @@ * The version tag class for version tags for non-persistent regions. The * VersionSource held in these tags is an InternalDistributedMember. * - * @author dsmith * */ public class VMVersionTag extends VersionTag { diff --git a/geode-core/src/main/java/com/gemstone/gemfire/internal/cache/versions/VersionHolder.java b/geode-core/src/main/java/com/gemstone/gemfire/internal/cache/versions/VersionHolder.java index 55b8b574756f..7f7e188dd7f3 100644 --- a/geode-core/src/main/java/com/gemstone/gemfire/internal/cache/versions/VersionHolder.java +++ b/geode-core/src/main/java/com/gemstone/gemfire/internal/cache/versions/VersionHolder.java @@ -18,7 +18,6 @@ /** * Read only interface for an object that holds an entry version. - * @author dsmith * * @param */ diff --git a/geode-core/src/main/java/com/gemstone/gemfire/internal/cache/versions/VersionSource.java b/geode-core/src/main/java/com/gemstone/gemfire/internal/cache/versions/VersionSource.java index 5a533e75d5c7..080010bcd657 100644 --- a/geode-core/src/main/java/com/gemstone/gemfire/internal/cache/versions/VersionSource.java +++ b/geode-core/src/main/java/com/gemstone/gemfire/internal/cache/versions/VersionSource.java @@ -31,7 +31,6 @@ * * VersionMembers should implement equals and hashcode. * - * @author dsmith * */ public interface VersionSource extends DataSerializableFixedID, Comparable { diff --git a/geode-core/src/main/java/com/gemstone/gemfire/internal/cache/versions/VersionStamp.java b/geode-core/src/main/java/com/gemstone/gemfire/internal/cache/versions/VersionStamp.java index cef26edc9678..3e56eff64fc5 100644 --- a/geode-core/src/main/java/com/gemstone/gemfire/internal/cache/versions/VersionStamp.java +++ b/geode-core/src/main/java/com/gemstone/gemfire/internal/cache/versions/VersionStamp.java @@ -22,7 +22,6 @@ import com.gemstone.gemfire.internal.cache.LocalRegion; /** - * @author bruce * */ public interface VersionStamp extends VersionHolder { diff --git a/geode-core/src/main/java/com/gemstone/gemfire/internal/cache/versions/VersionTag.java b/geode-core/src/main/java/com/gemstone/gemfire/internal/cache/versions/VersionTag.java index 535c43dc69f5..60e4299d5dfd 100644 --- a/geode-core/src/main/java/com/gemstone/gemfire/internal/cache/versions/VersionTag.java +++ b/geode-core/src/main/java/com/gemstone/gemfire/internal/cache/versions/VersionTag.java @@ -41,7 +41,6 @@ * This class implements java.io.Serializable for dunit testing. It should * not otherwise be serialized with that mechanism. * - * @author bruce */ public abstract class VersionTag implements DataSerializableFixedID, java.io.Serializable, VersionHolder { private static final Logger logger = LogService.getLogger(); diff --git a/geode-core/src/main/java/com/gemstone/gemfire/internal/cache/wan/AbstractGatewaySender.java b/geode-core/src/main/java/com/gemstone/gemfire/internal/cache/wan/AbstractGatewaySender.java index d2822af5bb40..24181c6cf3ec 100644 --- a/geode-core/src/main/java/com/gemstone/gemfire/internal/cache/wan/AbstractGatewaySender.java +++ b/geode-core/src/main/java/com/gemstone/gemfire/internal/cache/wan/AbstractGatewaySender.java @@ -81,8 +81,6 @@ * Abstract implementation of both Serial and Parallel GatewaySender. It handles * common functionality like initializing proxy. * - * @author Suranjan Kumar - * @author Yogesh Mahajan * * @since 7.0 */ @@ -1298,7 +1296,6 @@ public EventWrapper(GatewaySenderEventImpl e) { * we will release. This is done by making a copy/clone of the original event. * This fixes bug 52029. * - * @author dschneider * */ public static class TmpQueueEvent implements Releasable { diff --git a/geode-core/src/main/java/com/gemstone/gemfire/internal/cache/wan/AbstractGatewaySenderEventProcessor.java b/geode-core/src/main/java/com/gemstone/gemfire/internal/cache/wan/AbstractGatewaySenderEventProcessor.java index 86ecce1dcb27..246982494467 100644 --- a/geode-core/src/main/java/com/gemstone/gemfire/internal/cache/wan/AbstractGatewaySenderEventProcessor.java +++ b/geode-core/src/main/java/com/gemstone/gemfire/internal/cache/wan/AbstractGatewaySenderEventProcessor.java @@ -70,7 +70,6 @@ * {@link ConcurrentParallelGatewaySenderQueue}. * The dispatcher could be either GatewaySenderEventRemoteDispatcher or GatewaySenderEventCallbackDispatcher. * - * @author Suranjan Kumar * @since 7.0 * */ diff --git a/geode-core/src/main/java/com/gemstone/gemfire/internal/cache/wan/AsyncEventQueueConfigurationException.java b/geode-core/src/main/java/com/gemstone/gemfire/internal/cache/wan/AsyncEventQueueConfigurationException.java index 5ffbeb537849..f81349e298b2 100644 --- a/geode-core/src/main/java/com/gemstone/gemfire/internal/cache/wan/AsyncEventQueueConfigurationException.java +++ b/geode-core/src/main/java/com/gemstone/gemfire/internal/cache/wan/AsyncEventQueueConfigurationException.java @@ -21,7 +21,6 @@ /** * Exception to inform user that AsyncEventQueue is wrongly configured. * - * @author Suranjan Kumar * */ public class AsyncEventQueueConfigurationException extends diff --git a/geode-core/src/main/java/com/gemstone/gemfire/internal/cache/wan/BatchException70.java b/geode-core/src/main/java/com/gemstone/gemfire/internal/cache/wan/BatchException70.java index df74bb13c19b..5183e45469d8 100644 --- a/geode-core/src/main/java/com/gemstone/gemfire/internal/cache/wan/BatchException70.java +++ b/geode-core/src/main/java/com/gemstone/gemfire/internal/cache/wan/BatchException70.java @@ -24,7 +24,6 @@ /** * An exception thrown during batch processing. * - * @author Suranjan Kumar * * @since 7.0 */ diff --git a/geode-core/src/main/java/com/gemstone/gemfire/internal/cache/wan/DistributedSystemListener.java b/geode-core/src/main/java/com/gemstone/gemfire/internal/cache/wan/DistributedSystemListener.java index d49e4071566e..fc9f86a7dbeb 100644 --- a/geode-core/src/main/java/com/gemstone/gemfire/internal/cache/wan/DistributedSystemListener.java +++ b/geode-core/src/main/java/com/gemstone/gemfire/internal/cache/wan/DistributedSystemListener.java @@ -19,7 +19,6 @@ /** * This interface is for Jayesh's use case for WAN BootStrapping and will not be part of the product release. * - * @author kbachhav * */ public interface DistributedSystemListener { diff --git a/geode-core/src/main/java/com/gemstone/gemfire/internal/cache/wan/GatewayReceiverException.java b/geode-core/src/main/java/com/gemstone/gemfire/internal/cache/wan/GatewayReceiverException.java index d6459c142737..a01b12c987d2 100644 --- a/geode-core/src/main/java/com/gemstone/gemfire/internal/cache/wan/GatewayReceiverException.java +++ b/geode-core/src/main/java/com/gemstone/gemfire/internal/cache/wan/GatewayReceiverException.java @@ -22,7 +22,6 @@ /** * Exception observed during GatewayReceiver operations. * - * @author kbachhav * @since 8.1 */ public class GatewayReceiverException extends OperationAbortedException { diff --git a/geode-core/src/main/java/com/gemstone/gemfire/internal/cache/wan/GatewaySenderConfigurationException.java b/geode-core/src/main/java/com/gemstone/gemfire/internal/cache/wan/GatewaySenderConfigurationException.java index 74358b6b766a..07a665114c1e 100644 --- a/geode-core/src/main/java/com/gemstone/gemfire/internal/cache/wan/GatewaySenderConfigurationException.java +++ b/geode-core/src/main/java/com/gemstone/gemfire/internal/cache/wan/GatewaySenderConfigurationException.java @@ -24,7 +24,6 @@ * remote side of the gateway's configuration. * * @since 7.0 - * @author skumar * */ public class GatewaySenderConfigurationException extends GatewaySenderException { diff --git a/geode-core/src/main/java/com/gemstone/gemfire/internal/cache/wan/GatewaySenderEventCallbackArgument.java b/geode-core/src/main/java/com/gemstone/gemfire/internal/cache/wan/GatewaySenderEventCallbackArgument.java index f464c5f5577e..f6f8d885ff85 100644 --- a/geode-core/src/main/java/com/gemstone/gemfire/internal/cache/wan/GatewaySenderEventCallbackArgument.java +++ b/geode-core/src/main/java/com/gemstone/gemfire/internal/cache/wan/GatewaySenderEventCallbackArgument.java @@ -42,7 +42,6 @@ *

    * This class used to be in package com.gemstone.gemfire.util. * - * @author Suranjan Kumar * @since 7.0 */ public final class GatewaySenderEventCallbackArgument extends diff --git a/geode-core/src/main/java/com/gemstone/gemfire/internal/cache/wan/GatewaySenderEventCallbackDispatcher.java b/geode-core/src/main/java/com/gemstone/gemfire/internal/cache/wan/GatewaySenderEventCallbackDispatcher.java index 617da072e8e9..38912f33cb61 100644 --- a/geode-core/src/main/java/com/gemstone/gemfire/internal/cache/wan/GatewaySenderEventCallbackDispatcher.java +++ b/geode-core/src/main/java/com/gemstone/gemfire/internal/cache/wan/GatewaySenderEventCallbackDispatcher.java @@ -35,7 +35,6 @@ * GatewayEvents to AsyncEventListener * callback implementers. This dispatcher is used in the write-behind case. * - * @author Suranjan Kumar * @since 7.0 */ public class GatewaySenderEventCallbackDispatcher implements GatewaySenderEventDispatcher{ diff --git a/geode-core/src/main/java/com/gemstone/gemfire/internal/cache/wan/GatewaySenderEventDispatcher.java b/geode-core/src/main/java/com/gemstone/gemfire/internal/cache/wan/GatewaySenderEventDispatcher.java index 70aaf7b63cfe..0315eb83f7c1 100644 --- a/geode-core/src/main/java/com/gemstone/gemfire/internal/cache/wan/GatewaySenderEventDispatcher.java +++ b/geode-core/src/main/java/com/gemstone/gemfire/internal/cache/wan/GatewaySenderEventDispatcher.java @@ -18,8 +18,6 @@ import java.util.List; /** - * @author Suranjan Kumar - * @author Yogesh Mahajan * @since 7.0 * */ diff --git a/geode-core/src/main/java/com/gemstone/gemfire/internal/cache/wan/parallel/ConcurrentParallelGatewaySenderEventProcessor.java b/geode-core/src/main/java/com/gemstone/gemfire/internal/cache/wan/parallel/ConcurrentParallelGatewaySenderEventProcessor.java index dd6ffc5117ad..b63c7cbcda2c 100644 --- a/geode-core/src/main/java/com/gemstone/gemfire/internal/cache/wan/parallel/ConcurrentParallelGatewaySenderEventProcessor.java +++ b/geode-core/src/main/java/com/gemstone/gemfire/internal/cache/wan/parallel/ConcurrentParallelGatewaySenderEventProcessor.java @@ -64,7 +64,6 @@ * * The {@link ParallelGatewaySenderQueue} should be shared among all the {@link ParallelGatewaySenderEventProcessor}s. * - * @author Suranjan Kumar * */ public class ConcurrentParallelGatewaySenderEventProcessor extends AbstractGatewaySenderEventProcessor { diff --git a/geode-core/src/main/java/com/gemstone/gemfire/internal/cache/wan/parallel/ConcurrentParallelGatewaySenderQueue.java b/geode-core/src/main/java/com/gemstone/gemfire/internal/cache/wan/parallel/ConcurrentParallelGatewaySenderQueue.java index 820c40ce53c9..8524ccf0d9fb 100644 --- a/geode-core/src/main/java/com/gemstone/gemfire/internal/cache/wan/parallel/ConcurrentParallelGatewaySenderQueue.java +++ b/geode-core/src/main/java/com/gemstone/gemfire/internal/cache/wan/parallel/ConcurrentParallelGatewaySenderQueue.java @@ -51,7 +51,6 @@ * It implements RegionQueue so that AbstractGatewaySenderEventProcessor * can work on it. * - * @author Suranjan Kumar * */ public class ConcurrentParallelGatewaySenderQueue implements RegionQueue { diff --git a/geode-core/src/main/java/com/gemstone/gemfire/internal/cache/wan/parallel/ParallelGatewaySenderEventProcessor.java b/geode-core/src/main/java/com/gemstone/gemfire/internal/cache/wan/parallel/ParallelGatewaySenderEventProcessor.java index fb833735c93a..417ba13c5084 100644 --- a/geode-core/src/main/java/com/gemstone/gemfire/internal/cache/wan/parallel/ParallelGatewaySenderEventProcessor.java +++ b/geode-core/src/main/java/com/gemstone/gemfire/internal/cache/wan/parallel/ParallelGatewaySenderEventProcessor.java @@ -56,7 +56,6 @@ /** - * @author Suranjan Kumar * */ public class ParallelGatewaySenderEventProcessor extends diff --git a/geode-core/src/main/java/com/gemstone/gemfire/internal/cache/wan/parallel/ParallelQueueBatchRemovalMessage.java b/geode-core/src/main/java/com/gemstone/gemfire/internal/cache/wan/parallel/ParallelQueueBatchRemovalMessage.java index 8cc216a4e24c..fda0fc559b8c 100644 --- a/geode-core/src/main/java/com/gemstone/gemfire/internal/cache/wan/parallel/ParallelQueueBatchRemovalMessage.java +++ b/geode-core/src/main/java/com/gemstone/gemfire/internal/cache/wan/parallel/ParallelQueueBatchRemovalMessage.java @@ -53,8 +53,6 @@ /** * Removes a batch of events from the remote secondary queues * - * @author Suranjan Kumar - * @author Yogesh Mahajan * * @since 7.0 * diff --git a/geode-core/src/main/java/com/gemstone/gemfire/internal/cache/wan/parallel/ParallelQueueRemovalMessage.java b/geode-core/src/main/java/com/gemstone/gemfire/internal/cache/wan/parallel/ParallelQueueRemovalMessage.java index de297ad3fa63..09f70a66c94d 100644 --- a/geode-core/src/main/java/com/gemstone/gemfire/internal/cache/wan/parallel/ParallelQueueRemovalMessage.java +++ b/geode-core/src/main/java/com/gemstone/gemfire/internal/cache/wan/parallel/ParallelQueueRemovalMessage.java @@ -51,7 +51,6 @@ /** * Removes a batch of events from the remote secondary queues - * @author Suranjan Kumar * @since 8.0 */ diff --git a/geode-core/src/main/java/com/gemstone/gemfire/internal/cache/wan/serial/BatchDestroyOperation.java b/geode-core/src/main/java/com/gemstone/gemfire/internal/cache/wan/serial/BatchDestroyOperation.java index d8d072041297..988c526b2f20 100644 --- a/geode-core/src/main/java/com/gemstone/gemfire/internal/cache/wan/serial/BatchDestroyOperation.java +++ b/geode-core/src/main/java/com/gemstone/gemfire/internal/cache/wan/serial/BatchDestroyOperation.java @@ -52,7 +52,6 @@ * * We iterate from key to tailKey and destroy all the keys. * - * @author Suranjan Kumar * */ public class BatchDestroyOperation extends DistributedCacheOperation { diff --git a/geode-core/src/main/java/com/gemstone/gemfire/internal/cache/wan/serial/ConcurrentSerialGatewaySenderEventProcessor.java b/geode-core/src/main/java/com/gemstone/gemfire/internal/cache/wan/serial/ConcurrentSerialGatewaySenderEventProcessor.java index 1f68c5571fca..2cb98eaa25e8 100644 --- a/geode-core/src/main/java/com/gemstone/gemfire/internal/cache/wan/serial/ConcurrentSerialGatewaySenderEventProcessor.java +++ b/geode-core/src/main/java/com/gemstone/gemfire/internal/cache/wan/serial/ConcurrentSerialGatewaySenderEventProcessor.java @@ -57,7 +57,6 @@ /** * - * @author Suranjan Kumar * */ public class ConcurrentSerialGatewaySenderEventProcessor extends diff --git a/geode-core/src/main/java/com/gemstone/gemfire/internal/cache/wan/serial/SerialGatewaySenderEventProcessor.java b/geode-core/src/main/java/com/gemstone/gemfire/internal/cache/wan/serial/SerialGatewaySenderEventProcessor.java index a04ddd250a39..3abd17b1d72e 100644 --- a/geode-core/src/main/java/com/gemstone/gemfire/internal/cache/wan/serial/SerialGatewaySenderEventProcessor.java +++ b/geode-core/src/main/java/com/gemstone/gemfire/internal/cache/wan/serial/SerialGatewaySenderEventProcessor.java @@ -60,8 +60,6 @@ import com.gemstone.gemfire.pdx.internal.PeerTypeRegistration; /** - * @author Suranjan Kumar - * @author Yogesh Mahajan * @since 7.0 * */ diff --git a/geode-core/src/main/java/com/gemstone/gemfire/internal/cache/wan/serial/SerialGatewaySenderQueue.java b/geode-core/src/main/java/com/gemstone/gemfire/internal/cache/wan/serial/SerialGatewaySenderQueue.java index 430409ab8e14..bb27e831ff71 100644 --- a/geode-core/src/main/java/com/gemstone/gemfire/internal/cache/wan/serial/SerialGatewaySenderQueue.java +++ b/geode-core/src/main/java/com/gemstone/gemfire/internal/cache/wan/serial/SerialGatewaySenderQueue.java @@ -74,8 +74,6 @@ import com.gemstone.gemfire.pdx.internal.PeerTypeRegistration; /** - * @author Suranjan Kumar - * @author Yogesh Mahajan * @since 7.0 * */ diff --git a/geode-core/src/main/java/com/gemstone/gemfire/internal/cache/wan/serial/SerialSecondaryGatewayListener.java b/geode-core/src/main/java/com/gemstone/gemfire/internal/cache/wan/serial/SerialSecondaryGatewayListener.java index 7564cde04190..5cb0ec0f4b99 100644 --- a/geode-core/src/main/java/com/gemstone/gemfire/internal/cache/wan/serial/SerialSecondaryGatewayListener.java +++ b/geode-core/src/main/java/com/gemstone/gemfire/internal/cache/wan/serial/SerialSecondaryGatewayListener.java @@ -24,8 +24,6 @@ import com.gemstone.gemfire.internal.cache.wan.GatewaySenderEventImpl; import com.gemstone.gemfire.internal.logging.LogService; /** - * @author Suranjan Kumar - * @author Yogesh Mahajan * @since 7.0 * */ diff --git a/geode-core/src/main/java/com/gemstone/gemfire/internal/cache/xmlcache/AbstractXmlParser.java b/geode-core/src/main/java/com/gemstone/gemfire/internal/cache/xmlcache/AbstractXmlParser.java index 6865e1613ffb..dddc192294c3 100644 --- a/geode-core/src/main/java/com/gemstone/gemfire/internal/cache/xmlcache/AbstractXmlParser.java +++ b/geode-core/src/main/java/com/gemstone/gemfire/internal/cache/xmlcache/AbstractXmlParser.java @@ -29,7 +29,6 @@ * {@link UnsupportedOperationException} on unused methods. Also keeps * references for {@link #logWriter} and {@link #stack} * - * @author jbarrett@pivotal.io * * @since 8.1 */ diff --git a/geode-core/src/main/java/com/gemstone/gemfire/internal/cache/xmlcache/BindingCreation.java b/geode-core/src/main/java/com/gemstone/gemfire/internal/cache/xmlcache/BindingCreation.java index 364c886da0cf..e7307d486f5b 100755 --- a/geode-core/src/main/java/com/gemstone/gemfire/internal/cache/xmlcache/BindingCreation.java +++ b/geode-core/src/main/java/com/gemstone/gemfire/internal/cache/xmlcache/BindingCreation.java @@ -24,7 +24,6 @@ import java.util.*; /** - * @author asifs This class represents the data given for binding a DataSource * to JNDI tree. It encapsulates to Map objects , one for gemfire jndi * tree specific data & another for vendor specific data. This object * will get created for every diff --git a/geode-core/src/main/java/com/gemstone/gemfire/internal/cache/xmlcache/CacheCreation.java b/geode-core/src/main/java/com/gemstone/gemfire/internal/cache/xmlcache/CacheCreation.java index 9456f9a4e557..915bde90f7c8 100755 --- a/geode-core/src/main/java/com/gemstone/gemfire/internal/cache/xmlcache/CacheCreation.java +++ b/geode-core/src/main/java/com/gemstone/gemfire/internal/cache/xmlcache/CacheCreation.java @@ -129,7 +129,6 @@ * must be updated when {@link Cache} is modified. This class is * public for testing purposes. * - * @author David Whitlock * * @since 3.0 */ diff --git a/geode-core/src/main/java/com/gemstone/gemfire/internal/cache/xmlcache/CacheServerCreation.java b/geode-core/src/main/java/com/gemstone/gemfire/internal/cache/xmlcache/CacheServerCreation.java index 8e9dbbe73608..14527add38ac 100644 --- a/geode-core/src/main/java/com/gemstone/gemfire/internal/cache/xmlcache/CacheServerCreation.java +++ b/geode-core/src/main/java/com/gemstone/gemfire/internal/cache/xmlcache/CacheServerCreation.java @@ -32,7 +32,6 @@ /** * Represents a {@link CacheServer} that is created declaratively. * - * @author David Whitlock * @since 4.0 */ public class CacheServerCreation extends AbstractCacheServer { diff --git a/geode-core/src/main/java/com/gemstone/gemfire/internal/cache/xmlcache/CacheTransactionManagerCreation.java b/geode-core/src/main/java/com/gemstone/gemfire/internal/cache/xmlcache/CacheTransactionManagerCreation.java index 52ab3454e191..cf37928b3ee3 100644 --- a/geode-core/src/main/java/com/gemstone/gemfire/internal/cache/xmlcache/CacheTransactionManagerCreation.java +++ b/geode-core/src/main/java/com/gemstone/gemfire/internal/cache/xmlcache/CacheTransactionManagerCreation.java @@ -30,7 +30,6 @@ /** * Represents a {@link CacheTransactionManager} that is created declaratively. * - * @author Mitch Thomas * * @since 4.0 */ diff --git a/geode-core/src/main/java/com/gemstone/gemfire/internal/cache/xmlcache/CacheXml.java b/geode-core/src/main/java/com/gemstone/gemfire/internal/cache/xmlcache/CacheXml.java index 4d918011b54a..4f1facbf4b75 100644 --- a/geode-core/src/main/java/com/gemstone/gemfire/internal/cache/xmlcache/CacheXml.java +++ b/geode-core/src/main/java/com/gemstone/gemfire/internal/cache/xmlcache/CacheXml.java @@ -37,7 +37,6 @@ * com.gemstone.gemfire.cache.Cache} and vice versa. It provides helper methods * and constants. * - * @author David Whitlock * @since 3.0 */ public abstract class CacheXml implements EntityResolver2, ErrorHandler { diff --git a/geode-core/src/main/java/com/gemstone/gemfire/internal/cache/xmlcache/CacheXmlGenerator.java b/geode-core/src/main/java/com/gemstone/gemfire/internal/cache/xmlcache/CacheXmlGenerator.java index 4ba1409a4c6c..57d06b0a091f 100644 --- a/geode-core/src/main/java/com/gemstone/gemfire/internal/cache/xmlcache/CacheXmlGenerator.java +++ b/geode-core/src/main/java/com/gemstone/gemfire/internal/cache/xmlcache/CacheXmlGenerator.java @@ -129,7 +129,6 @@ * Cache} instance. This class was developed for testing purposes, * but it is conceivable that it could be used in the product as well. * - * @author David Whitlock * * @since 3.0 */ @@ -1203,7 +1202,6 @@ private void generate(DiskStore ds) throws SAXException { /** Compare regions by name * - * @author lynn * */ class RegionComparator implements Comparator { diff --git a/geode-core/src/main/java/com/gemstone/gemfire/internal/cache/xmlcache/CacheXmlParser.java b/geode-core/src/main/java/com/gemstone/gemfire/internal/cache/xmlcache/CacheXmlParser.java index dc9f6c8841ec..69899fd903b5 100644 --- a/geode-core/src/main/java/com/gemstone/gemfire/internal/cache/xmlcache/CacheXmlParser.java +++ b/geode-core/src/main/java/com/gemstone/gemfire/internal/cache/xmlcache/CacheXmlParser.java @@ -130,7 +130,6 @@ * thrown. The second phase actually {@linkplain CacheCreation#create creates} * the {@link Cache}/{@link ClientCache},{@link Region}s, etc. * - * @author David Whitlock * * @since 3.0 */ diff --git a/geode-core/src/main/java/com/gemstone/gemfire/internal/cache/xmlcache/CacheXmlPropertyResolver.java b/geode-core/src/main/java/com/gemstone/gemfire/internal/cache/xmlcache/CacheXmlPropertyResolver.java index 267b253464e8..40134e421797 100644 --- a/geode-core/src/main/java/com/gemstone/gemfire/internal/cache/xmlcache/CacheXmlPropertyResolver.java +++ b/geode-core/src/main/java/com/gemstone/gemfire/internal/cache/xmlcache/CacheXmlPropertyResolver.java @@ -30,7 +30,6 @@ * Property resolver for resolving ${} like strings with system or Gemfire * properties in Cache.xml * - * @author Shobhit Agarwal * @since 6.6 */ public class CacheXmlPropertyResolver implements PropertyResolver{ diff --git a/geode-core/src/main/java/com/gemstone/gemfire/internal/cache/xmlcache/CacheXmlPropertyResolverHelper.java b/geode-core/src/main/java/com/gemstone/gemfire/internal/cache/xmlcache/CacheXmlPropertyResolverHelper.java index 2a777accb8f6..487899982540 100644 --- a/geode-core/src/main/java/com/gemstone/gemfire/internal/cache/xmlcache/CacheXmlPropertyResolverHelper.java +++ b/geode-core/src/main/java/com/gemstone/gemfire/internal/cache/xmlcache/CacheXmlPropertyResolverHelper.java @@ -29,7 +29,6 @@ /** * Helper class for CacheXmlPropertyResolver. Helps in parsing ${...${}..}..${} strings. * - * @author Shobhit Agarwal * @since 6.6 */ public class CacheXmlPropertyResolverHelper { diff --git a/geode-core/src/main/java/com/gemstone/gemfire/internal/cache/xmlcache/CacheXmlVersion.java b/geode-core/src/main/java/com/gemstone/gemfire/internal/cache/xmlcache/CacheXmlVersion.java index d59ce8f4109a..51e840a95136 100644 --- a/geode-core/src/main/java/com/gemstone/gemfire/internal/cache/xmlcache/CacheXmlVersion.java +++ b/geode-core/src/main/java/com/gemstone/gemfire/internal/cache/xmlcache/CacheXmlVersion.java @@ -23,7 +23,6 @@ * comparisons. Under the old String comparison version "8.1" was older than * "8_0" and "10.0" was older than "9.0". * - * @author jbarrett@pivotal.io * * @since 8.1 */ diff --git a/geode-core/src/main/java/com/gemstone/gemfire/internal/cache/xmlcache/ClientCacheCreation.java b/geode-core/src/main/java/com/gemstone/gemfire/internal/cache/xmlcache/ClientCacheCreation.java index 26dd9bd57114..e8a947916fb8 100644 --- a/geode-core/src/main/java/com/gemstone/gemfire/internal/cache/xmlcache/ClientCacheCreation.java +++ b/geode-core/src/main/java/com/gemstone/gemfire/internal/cache/xmlcache/ClientCacheCreation.java @@ -56,7 +56,6 @@ * must be updated when {@link ClientCache} is modified. This class is * public for testing purposes. * - * @author darrel * * @since 6.5 */ diff --git a/geode-core/src/main/java/com/gemstone/gemfire/internal/cache/xmlcache/ClientHaQueueCreation.java b/geode-core/src/main/java/com/gemstone/gemfire/internal/cache/xmlcache/ClientHaQueueCreation.java index 2b7b94479539..be466936a4cf 100755 --- a/geode-core/src/main/java/com/gemstone/gemfire/internal/cache/xmlcache/ClientHaQueueCreation.java +++ b/geode-core/src/main/java/com/gemstone/gemfire/internal/cache/xmlcache/ClientHaQueueCreation.java @@ -23,7 +23,6 @@ * client subscription. It encapsulates eviction policy, capacity and overflowDirectory. * This object will get created for every client-subscription tag * - * @author aingle * @since 5.7 */ public class ClientHaQueueCreation { diff --git a/geode-core/src/main/java/com/gemstone/gemfire/internal/cache/xmlcache/Declarable2.java b/geode-core/src/main/java/com/gemstone/gemfire/internal/cache/xmlcache/Declarable2.java index 181fb694418c..5ffd9da31296 100644 --- a/geode-core/src/main/java/com/gemstone/gemfire/internal/cache/xmlcache/Declarable2.java +++ b/geode-core/src/main/java/com/gemstone/gemfire/internal/cache/xmlcache/Declarable2.java @@ -25,7 +25,6 @@ * Properties}). This allows us to convert a Declarable * into XML. * - * @author David Whitlock * * @since 3.0 */ diff --git a/geode-core/src/main/java/com/gemstone/gemfire/internal/cache/xmlcache/DefaultEntityResolver2.java b/geode-core/src/main/java/com/gemstone/gemfire/internal/cache/xmlcache/DefaultEntityResolver2.java index 4f03f23a7b72..6cac4c70a7a7 100644 --- a/geode-core/src/main/java/com/gemstone/gemfire/internal/cache/xmlcache/DefaultEntityResolver2.java +++ b/geode-core/src/main/java/com/gemstone/gemfire/internal/cache/xmlcache/DefaultEntityResolver2.java @@ -29,7 +29,6 @@ /** * Default behavior for EntityResolver2 implementations. * - * @author jbarrett@pivotal.io * * @since 8.1 */ diff --git a/geode-core/src/main/java/com/gemstone/gemfire/internal/cache/xmlcache/DiskStoreAttributesCreation.java b/geode-core/src/main/java/com/gemstone/gemfire/internal/cache/xmlcache/DiskStoreAttributesCreation.java index 3af39385e1f7..bb4d24853c54 100644 --- a/geode-core/src/main/java/com/gemstone/gemfire/internal/cache/xmlcache/DiskStoreAttributesCreation.java +++ b/geode-core/src/main/java/com/gemstone/gemfire/internal/cache/xmlcache/DiskStoreAttributesCreation.java @@ -32,7 +32,6 @@ * that this class must be updated when {@link DiskStore} is * modified. This class is public for testing purposes. * - * @author Gester * * @since prPersistSprint2 */ diff --git a/geode-core/src/main/java/com/gemstone/gemfire/internal/cache/xmlcache/FunctionServiceCreation.java b/geode-core/src/main/java/com/gemstone/gemfire/internal/cache/xmlcache/FunctionServiceCreation.java index 1cd19965a4af..f4218f29f0ef 100755 --- a/geode-core/src/main/java/com/gemstone/gemfire/internal/cache/xmlcache/FunctionServiceCreation.java +++ b/geode-core/src/main/java/com/gemstone/gemfire/internal/cache/xmlcache/FunctionServiceCreation.java @@ -24,7 +24,6 @@ /** * FunctionServiceCreation to be used in CacheXmlParser - * @author skumar * */ public class FunctionServiceCreation { diff --git a/geode-core/src/main/java/com/gemstone/gemfire/internal/cache/xmlcache/GeodeEntityResolver.java b/geode-core/src/main/java/com/gemstone/gemfire/internal/cache/xmlcache/GeodeEntityResolver.java index 67cda990c421..59d58604da96 100644 --- a/geode-core/src/main/java/com/gemstone/gemfire/internal/cache/xmlcache/GeodeEntityResolver.java +++ b/geode-core/src/main/java/com/gemstone/gemfire/internal/cache/xmlcache/GeodeEntityResolver.java @@ -32,7 +32,6 @@ * Loaded by {@link ServiceLoader} on {@link EntityResolver2} class. See file * META-INF/services/org.xml.sax.ext.EntityResolver2 * - * @author jbarrett@pivotal.io * * @since 8.1 */ diff --git a/geode-core/src/main/java/com/gemstone/gemfire/internal/cache/xmlcache/IndexCreationData.java b/geode-core/src/main/java/com/gemstone/gemfire/internal/cache/xmlcache/IndexCreationData.java index d0719db6f7e1..52fd157c5315 100755 --- a/geode-core/src/main/java/com/gemstone/gemfire/internal/cache/xmlcache/IndexCreationData.java +++ b/geode-core/src/main/java/com/gemstone/gemfire/internal/cache/xmlcache/IndexCreationData.java @@ -27,7 +27,6 @@ import com.gemstone.gemfire.cache.query.IndexType; /** - * @author asifs * * This class contains the information needed to create an index It will * contain the callback data between invocation diff --git a/geode-core/src/main/java/com/gemstone/gemfire/internal/cache/xmlcache/PivotalEntityResolver.java b/geode-core/src/main/java/com/gemstone/gemfire/internal/cache/xmlcache/PivotalEntityResolver.java index e69767ae91d8..9c7e1f0447d9 100644 --- a/geode-core/src/main/java/com/gemstone/gemfire/internal/cache/xmlcache/PivotalEntityResolver.java +++ b/geode-core/src/main/java/com/gemstone/gemfire/internal/cache/xmlcache/PivotalEntityResolver.java @@ -32,7 +32,6 @@ * Loaded by {@link ServiceLoader} on {@link EntityResolver2} class. See file * META-INF/services/org.xml.sax.ext.EntityResolver2 * - * @author jbarrett@pivotal.io * * @since 8.1 */ diff --git a/geode-core/src/main/java/com/gemstone/gemfire/internal/cache/xmlcache/PropertyResolver.java b/geode-core/src/main/java/com/gemstone/gemfire/internal/cache/xmlcache/PropertyResolver.java index e0df01643167..8d21d7127923 100644 --- a/geode-core/src/main/java/com/gemstone/gemfire/internal/cache/xmlcache/PropertyResolver.java +++ b/geode-core/src/main/java/com/gemstone/gemfire/internal/cache/xmlcache/PropertyResolver.java @@ -23,7 +23,6 @@ import java.util.Properties; /** - * @author Shobhit Agarwal * @since 6.6 */ public interface PropertyResolver { diff --git a/geode-core/src/main/java/com/gemstone/gemfire/internal/cache/xmlcache/RegionAttributesCreation.java b/geode-core/src/main/java/com/gemstone/gemfire/internal/cache/xmlcache/RegionAttributesCreation.java index eb16598d3dbf..15562629a451 100644 --- a/geode-core/src/main/java/com/gemstone/gemfire/internal/cache/xmlcache/RegionAttributesCreation.java +++ b/geode-core/src/main/java/com/gemstone/gemfire/internal/cache/xmlcache/RegionAttributesCreation.java @@ -57,7 +57,6 @@ * that this class must be updated when {@link RegionAttributes} is * modified. This class is public for testing purposes. * - * @author David Whitlock * * @since 3.0 */ diff --git a/geode-core/src/main/java/com/gemstone/gemfire/internal/cache/xmlcache/RegionCreation.java b/geode-core/src/main/java/com/gemstone/gemfire/internal/cache/xmlcache/RegionCreation.java index 835d709253b5..b3706ba82d6d 100644 --- a/geode-core/src/main/java/com/gemstone/gemfire/internal/cache/xmlcache/RegionCreation.java +++ b/geode-core/src/main/java/com/gemstone/gemfire/internal/cache/xmlcache/RegionCreation.java @@ -62,7 +62,6 @@ * must be updated when {@link Region} is modified. This class is * public for testing purposes. * - * @author David Whitlock * * @since 3.0 */ diff --git a/geode-core/src/main/java/com/gemstone/gemfire/internal/cache/xmlcache/ResourceManagerCreation.java b/geode-core/src/main/java/com/gemstone/gemfire/internal/cache/xmlcache/ResourceManagerCreation.java index 658c34201987..3f9036b56285 100644 --- a/geode-core/src/main/java/com/gemstone/gemfire/internal/cache/xmlcache/ResourceManagerCreation.java +++ b/geode-core/src/main/java/com/gemstone/gemfire/internal/cache/xmlcache/ResourceManagerCreation.java @@ -27,7 +27,6 @@ import com.gemstone.gemfire.internal.cache.control.MemoryThresholds; /** - * @author Mitch Thomas * @since 6.0 */ public class ResourceManagerCreation implements ResourceManager { diff --git a/geode-core/src/main/java/com/gemstone/gemfire/internal/cache/xmlcache/SerializerCreation.java b/geode-core/src/main/java/com/gemstone/gemfire/internal/cache/xmlcache/SerializerCreation.java index 847c3dc3781f..ee8ec8d313c6 100644 --- a/geode-core/src/main/java/com/gemstone/gemfire/internal/cache/xmlcache/SerializerCreation.java +++ b/geode-core/src/main/java/com/gemstone/gemfire/internal/cache/xmlcache/SerializerCreation.java @@ -33,7 +33,6 @@ import org.apache.logging.log4j.Logger; /** - * @author shaley * */ public class SerializerCreation { diff --git a/geode-core/src/main/java/com/gemstone/gemfire/internal/cache/xmlcache/XmlGenerator.java b/geode-core/src/main/java/com/gemstone/gemfire/internal/cache/xmlcache/XmlGenerator.java index 639335decea6..b1fb0fc1026b 100644 --- a/geode-core/src/main/java/com/gemstone/gemfire/internal/cache/xmlcache/XmlGenerator.java +++ b/geode-core/src/main/java/com/gemstone/gemfire/internal/cache/xmlcache/XmlGenerator.java @@ -24,7 +24,6 @@ * to generate entities defined in the XML Namespace returned by * {@link #getNamspaceUri()} . * - * @author jbarrett@pivotal.io * * @since 8.1 */ diff --git a/geode-core/src/main/java/com/gemstone/gemfire/internal/cache/xmlcache/XmlGeneratorUtils.java b/geode-core/src/main/java/com/gemstone/gemfire/internal/cache/xmlcache/XmlGeneratorUtils.java index f5173541633a..30697300577e 100644 --- a/geode-core/src/main/java/com/gemstone/gemfire/internal/cache/xmlcache/XmlGeneratorUtils.java +++ b/geode-core/src/main/java/com/gemstone/gemfire/internal/cache/xmlcache/XmlGeneratorUtils.java @@ -28,7 +28,6 @@ * Utilities for use in {@link XmlGenerator} implementation to provide common * helper methods. * - * @author jbarrett@pivotal.io * * @since 8.1 */ diff --git a/geode-core/src/main/java/com/gemstone/gemfire/internal/cache/xmlcache/XmlParser.java b/geode-core/src/main/java/com/gemstone/gemfire/internal/cache/xmlcache/XmlParser.java index c5c7407a5890..9d601fae56e4 100644 --- a/geode-core/src/main/java/com/gemstone/gemfire/internal/cache/xmlcache/XmlParser.java +++ b/geode-core/src/main/java/com/gemstone/gemfire/internal/cache/xmlcache/XmlParser.java @@ -33,7 +33,6 @@ * Loaded by {@link ServiceLoader} on {@link XmlParser} class. See file * META-INF/services/com.gemstone.gemfire.internal.cache.xmlcache.XmlParser * - * @author jbarrett@pivotal.io * * @since 8.1 */ diff --git a/geode-core/src/main/java/com/gemstone/gemfire/internal/concurrent/AL.java b/geode-core/src/main/java/com/gemstone/gemfire/internal/concurrent/AL.java index 6608179f269d..c10f4f4cbcfd 100644 --- a/geode-core/src/main/java/com/gemstone/gemfire/internal/concurrent/AL.java +++ b/geode-core/src/main/java/com/gemstone/gemfire/internal/concurrent/AL.java @@ -21,7 +21,6 @@ * the JDK 5 version java.util.concurrent.atomic.AtomicLong. * Note that unlike AtomicLong this interface does not support * java.lang.Number. - * @author darrel * @deprecated used AtomicLong instead */ public interface AL { diff --git a/geode-core/src/main/java/com/gemstone/gemfire/internal/concurrent/AtomicLong5.java b/geode-core/src/main/java/com/gemstone/gemfire/internal/concurrent/AtomicLong5.java index bfa8b301d248..1c783c00a75b 100644 --- a/geode-core/src/main/java/com/gemstone/gemfire/internal/concurrent/AtomicLong5.java +++ b/geode-core/src/main/java/com/gemstone/gemfire/internal/concurrent/AtomicLong5.java @@ -18,7 +18,6 @@ /** * AL implementation for JDK 5. - * @author darrel */ public final class AtomicLong5 extends java.util.concurrent.atomic.AtomicLong diff --git a/geode-core/src/main/java/com/gemstone/gemfire/internal/concurrent/CompactConcurrentHashSet2.java b/geode-core/src/main/java/com/gemstone/gemfire/internal/concurrent/CompactConcurrentHashSet2.java index 549c04e90e49..f7c0fdc6d709 100755 --- a/geode-core/src/main/java/com/gemstone/gemfire/internal/concurrent/CompactConcurrentHashSet2.java +++ b/geode-core/src/main/java/com/gemstone/gemfire/internal/concurrent/CompactConcurrentHashSet2.java @@ -69,7 +69,6 @@ * * * @since 9.0 - * @author Originally Doug Lea * @param the type of values held in the set */ public class CompactConcurrentHashSet2 extends AbstractSet implements Set, Serializable { diff --git a/geode-core/src/main/java/com/gemstone/gemfire/internal/concurrent/ConcurrentHashSet.java b/geode-core/src/main/java/com/gemstone/gemfire/internal/concurrent/ConcurrentHashSet.java index 707a97178f62..309d85e64c1c 100644 --- a/geode-core/src/main/java/com/gemstone/gemfire/internal/concurrent/ConcurrentHashSet.java +++ b/geode-core/src/main/java/com/gemstone/gemfire/internal/concurrent/ConcurrentHashSet.java @@ -26,7 +26,6 @@ /**This class is similar to HashSet supporting all the feature * of ConcurrentHashMap * - * @author soubhikc * */ public class ConcurrentHashSet extends AbstractSet diff --git a/geode-core/src/main/java/com/gemstone/gemfire/internal/concurrent/LI.java b/geode-core/src/main/java/com/gemstone/gemfire/internal/concurrent/LI.java index dcf77616915a..8df422f91aa6 100644 --- a/geode-core/src/main/java/com/gemstone/gemfire/internal/concurrent/LI.java +++ b/geode-core/src/main/java/com/gemstone/gemfire/internal/concurrent/LI.java @@ -24,7 +24,6 @@ * * Retained for backwards compatibility reasons. * - * @author dsmith */ public class LI implements Serializable { diff --git a/geode-core/src/main/java/com/gemstone/gemfire/internal/concurrent/MapCallback.java b/geode-core/src/main/java/com/gemstone/gemfire/internal/concurrent/MapCallback.java index 8b3353b466ba..8aa3bf897cd3 100644 --- a/geode-core/src/main/java/com/gemstone/gemfire/internal/concurrent/MapCallback.java +++ b/geode-core/src/main/java/com/gemstone/gemfire/internal/concurrent/MapCallback.java @@ -27,7 +27,6 @@ *

    * Now also has a bunch of callbacks including for replace/remove etc. * - * @author swale * @since 7.0 * * @param diff --git a/geode-core/src/main/java/com/gemstone/gemfire/internal/concurrent/MapResult.java b/geode-core/src/main/java/com/gemstone/gemfire/internal/concurrent/MapResult.java index 3771a8e030c2..6a041d1e8aba 100644 --- a/geode-core/src/main/java/com/gemstone/gemfire/internal/concurrent/MapResult.java +++ b/geode-core/src/main/java/com/gemstone/gemfire/internal/concurrent/MapResult.java @@ -21,7 +21,6 @@ * Any additional result state needed to be passed to {@link MapCallback} which * returns values by reference. * - * @author swale * @since Helios */ public interface MapResult { diff --git a/geode-core/src/main/java/com/gemstone/gemfire/internal/datasource/AbstractDataSource.java b/geode-core/src/main/java/com/gemstone/gemfire/internal/datasource/AbstractDataSource.java index ff79dc9dec09..261a674ab0d6 100644 --- a/geode-core/src/main/java/com/gemstone/gemfire/internal/datasource/AbstractDataSource.java +++ b/geode-core/src/main/java/com/gemstone/gemfire/internal/datasource/AbstractDataSource.java @@ -17,7 +17,6 @@ package com.gemstone.gemfire.internal.datasource; /** - * @author tnegi */ import java.io.PrintWriter; import java.io.Serializable; @@ -36,8 +35,6 @@ * for the datasouce types. The class also implements the Serializable and * Referenceable behavior. * - * @author tnegi - * @author Asif : This class now contains only those paramaters which are needed * by the Gemfire DataSource configuration. This maps to those * paramaters which are specified as attributes of tag. * Those parameters which are specified as attributes of tag diff --git a/geode-core/src/main/java/com/gemstone/gemfire/internal/datasource/AbstractPoolCache.java b/geode-core/src/main/java/com/gemstone/gemfire/internal/datasource/AbstractPoolCache.java index b615327971ed..7f32ec560d9a 100644 --- a/geode-core/src/main/java/com/gemstone/gemfire/internal/datasource/AbstractPoolCache.java +++ b/geode-core/src/main/java/com/gemstone/gemfire/internal/datasource/AbstractPoolCache.java @@ -43,8 +43,6 @@ * connections(not assigned to user) and the active connections(assigned to * user) This is a thread safe class. * - * @author tnegi - * @author Asif Second Version .Modified the synchronization code & objects on * which locks were being taken. Changed the logic of retrieval of * connection & returning of connection. The beahviour of cleaner thread * has been modified such that it waits on activeCache if it is empty. diff --git a/geode-core/src/main/java/com/gemstone/gemfire/internal/datasource/ClientConnectionFactoryWrapper.java b/geode-core/src/main/java/com/gemstone/gemfire/internal/datasource/ClientConnectionFactoryWrapper.java index e80a4b2993bd..47dd691ff300 100755 --- a/geode-core/src/main/java/com/gemstone/gemfire/internal/datasource/ClientConnectionFactoryWrapper.java +++ b/geode-core/src/main/java/com/gemstone/gemfire/internal/datasource/ClientConnectionFactoryWrapper.java @@ -20,7 +20,6 @@ * This class wraps the client connection factory and the corresponding * connection manager Object. * - * @author rreja */ public class ClientConnectionFactoryWrapper { diff --git a/geode-core/src/main/java/com/gemstone/gemfire/internal/datasource/ConfigProperty.java b/geode-core/src/main/java/com/gemstone/gemfire/internal/datasource/ConfigProperty.java index 46e6c2bab5a2..69a159475e38 100755 --- a/geode-core/src/main/java/com/gemstone/gemfire/internal/datasource/ConfigProperty.java +++ b/geode-core/src/main/java/com/gemstone/gemfire/internal/datasource/ConfigProperty.java @@ -20,7 +20,6 @@ * This class represents the config property for vendor specific data. This has * a name, value and type. * - * @author rreja */ public class ConfigProperty { diff --git a/geode-core/src/main/java/com/gemstone/gemfire/internal/datasource/ConfiguredDataSourceProperties.java b/geode-core/src/main/java/com/gemstone/gemfire/internal/datasource/ConfiguredDataSourceProperties.java index 5ac46ce9bcb1..e2056faf6534 100644 --- a/geode-core/src/main/java/com/gemstone/gemfire/internal/datasource/ConfiguredDataSourceProperties.java +++ b/geode-core/src/main/java/com/gemstone/gemfire/internal/datasource/ConfiguredDataSourceProperties.java @@ -19,8 +19,6 @@ /** * JavaBean for datasource and poold properties. * - * @author tnegi - * @author asif : This class now contains only those paramaters which are needed * by the Gemfire DataSource configuration. This maps to those * paramaters which are specified as attributes of tag. * Those parameters which are specified as attributes of tag diff --git a/geode-core/src/main/java/com/gemstone/gemfire/internal/datasource/ConnectionEventListenerAdaptor.java b/geode-core/src/main/java/com/gemstone/gemfire/internal/datasource/ConnectionEventListenerAdaptor.java index b01b1a605b5c..2e0f43a34afc 100644 --- a/geode-core/src/main/java/com/gemstone/gemfire/internal/datasource/ConnectionEventListenerAdaptor.java +++ b/geode-core/src/main/java/com/gemstone/gemfire/internal/datasource/ConnectionEventListenerAdaptor.java @@ -17,7 +17,6 @@ package com.gemstone.gemfire.internal.datasource; /** - * @author mitulb * * To change the template for this generated type comment go to Window - * Preferences - Java - Code Generation - Code and Comments diff --git a/geode-core/src/main/java/com/gemstone/gemfire/internal/datasource/ConnectionPoolCache.java b/geode-core/src/main/java/com/gemstone/gemfire/internal/datasource/ConnectionPoolCache.java index fe204c12738c..2167602430d7 100644 --- a/geode-core/src/main/java/com/gemstone/gemfire/internal/datasource/ConnectionPoolCache.java +++ b/geode-core/src/main/java/com/gemstone/gemfire/internal/datasource/ConnectionPoolCache.java @@ -19,7 +19,6 @@ /** * This interface outlines the behavior of a connection pool. * - * @author negi */ public interface ConnectionPoolCache { diff --git a/geode-core/src/main/java/com/gemstone/gemfire/internal/datasource/ConnectionPoolCacheImpl.java b/geode-core/src/main/java/com/gemstone/gemfire/internal/datasource/ConnectionPoolCacheImpl.java index 88ef765b5685..5f7f406fff47 100644 --- a/geode-core/src/main/java/com/gemstone/gemfire/internal/datasource/ConnectionPoolCacheImpl.java +++ b/geode-core/src/main/java/com/gemstone/gemfire/internal/datasource/ConnectionPoolCacheImpl.java @@ -20,7 +20,6 @@ * This class models a connection pool for non-transactional database * connection. Extends the AbstractPoolCache to inherit the pool bahavior. * - * @author tnegi */ import java.sql.SQLException; diff --git a/geode-core/src/main/java/com/gemstone/gemfire/internal/datasource/ConnectionProvider.java b/geode-core/src/main/java/com/gemstone/gemfire/internal/datasource/ConnectionProvider.java index 718a325be3d3..3a39d54b52b5 100644 --- a/geode-core/src/main/java/com/gemstone/gemfire/internal/datasource/ConnectionProvider.java +++ b/geode-core/src/main/java/com/gemstone/gemfire/internal/datasource/ConnectionProvider.java @@ -19,7 +19,6 @@ /** * This interface outlines the behavior of a Connection provider. * - * @author tnegi */ public interface ConnectionProvider { diff --git a/geode-core/src/main/java/com/gemstone/gemfire/internal/datasource/ConnectionProviderException.java b/geode-core/src/main/java/com/gemstone/gemfire/internal/datasource/ConnectionProviderException.java index 340641383ae1..5deccd891b14 100644 --- a/geode-core/src/main/java/com/gemstone/gemfire/internal/datasource/ConnectionProviderException.java +++ b/geode-core/src/main/java/com/gemstone/gemfire/internal/datasource/ConnectionProviderException.java @@ -26,7 +26,6 @@ /** * Exception thrown from the connection provider. * - * @author tnegi */ public class ConnectionProviderException extends GemFireCheckedException { private static final long serialVersionUID = -7406652144153958227L; diff --git a/geode-core/src/main/java/com/gemstone/gemfire/internal/datasource/DataSourceCreateException.java b/geode-core/src/main/java/com/gemstone/gemfire/internal/datasource/DataSourceCreateException.java index c5c80e09a1d7..3e47d7dbc746 100644 --- a/geode-core/src/main/java/com/gemstone/gemfire/internal/datasource/DataSourceCreateException.java +++ b/geode-core/src/main/java/com/gemstone/gemfire/internal/datasource/DataSourceCreateException.java @@ -21,7 +21,6 @@ /** * Exception thrown from DataSource factory. * - * @author tnegi */ public class DataSourceCreateException extends GemFireCheckedException { private static final long serialVersionUID = 8759147832954825309L; diff --git a/geode-core/src/main/java/com/gemstone/gemfire/internal/datasource/DataSourceFactory.java b/geode-core/src/main/java/com/gemstone/gemfire/internal/datasource/DataSourceFactory.java index 853e73f3166f..872d45944327 100644 --- a/geode-core/src/main/java/com/gemstone/gemfire/internal/datasource/DataSourceFactory.java +++ b/geode-core/src/main/java/com/gemstone/gemfire/internal/datasource/DataSourceFactory.java @@ -22,15 +22,12 @@ * pooling. 2) Datasource with pooled connections. 3) Datasource with pooled * connection and transaction capabilities. * - * @author tnegi - * @author Asif : The invokeAllMethods was setting only some specific properties * Modified the code so that any key value mentioned in tag * is attempted for setting. If the property has a key as serverName , * then the setter method is invoked with the name setServerName & the * value present in value attribute is passed Made the Exception * handling robust * - * @author rreja : Changed invokeAllMethods wrt the change in cache.xml for * vendor specific properties. * */ diff --git a/geode-core/src/main/java/com/gemstone/gemfire/internal/datasource/DataSourceResources.java b/geode-core/src/main/java/com/gemstone/gemfire/internal/datasource/DataSourceResources.java index 57866aeb6b92..fceba5dacf17 100644 --- a/geode-core/src/main/java/com/gemstone/gemfire/internal/datasource/DataSourceResources.java +++ b/geode-core/src/main/java/com/gemstone/gemfire/internal/datasource/DataSourceResources.java @@ -22,8 +22,6 @@ package com.gemstone.gemfire.internal.datasource; /** - * @author tnegi - * @author asif */ public interface DataSourceResources { diff --git a/geode-core/src/main/java/com/gemstone/gemfire/internal/datasource/FacetsJCAConnectionManagerImpl.java b/geode-core/src/main/java/com/gemstone/gemfire/internal/datasource/FacetsJCAConnectionManagerImpl.java index eac773eae90f..f75d74280ff2 100644 --- a/geode-core/src/main/java/com/gemstone/gemfire/internal/datasource/FacetsJCAConnectionManagerImpl.java +++ b/geode-core/src/main/java/com/gemstone/gemfire/internal/datasource/FacetsJCAConnectionManagerImpl.java @@ -50,7 +50,6 @@ * account while allocating a connection). Security related features are * remaining. * - * @author rreja */ public class FacetsJCAConnectionManagerImpl implements ConnectionManager, ConnectionEventListener, Synchronization { diff --git a/geode-core/src/main/java/com/gemstone/gemfire/internal/datasource/GemFireBasicDataSource.java b/geode-core/src/main/java/com/gemstone/gemfire/internal/datasource/GemFireBasicDataSource.java index 22a5ef0dc1e8..de53b850e526 100644 --- a/geode-core/src/main/java/com/gemstone/gemfire/internal/datasource/GemFireBasicDataSource.java +++ b/geode-core/src/main/java/com/gemstone/gemfire/internal/datasource/GemFireBasicDataSource.java @@ -35,8 +35,6 @@ * GemFireBasicDataSource extends AbstractDataSource. This is a datasource class * which provides connections. fromthe databse without any pooling. * - * @author tnegi - * @author Asif */ public class GemFireBasicDataSource extends AbstractDataSource { private static final Logger logger = LogService.getLogger(); diff --git a/geode-core/src/main/java/com/gemstone/gemfire/internal/datasource/GemFireConnPooledDataSource.java b/geode-core/src/main/java/com/gemstone/gemfire/internal/datasource/GemFireConnPooledDataSource.java index 29a7fcb59cd9..62ada8acd883 100644 --- a/geode-core/src/main/java/com/gemstone/gemfire/internal/datasource/GemFireConnPooledDataSource.java +++ b/geode-core/src/main/java/com/gemstone/gemfire/internal/datasource/GemFireConnPooledDataSource.java @@ -35,8 +35,6 @@ * class which provides connections from the pool. The objects of these class * are ConnectionEventListener for connection close and error events. * - * @author tnegi - * @author Asif Modified Exception handling & changed name of the function */ public class GemFireConnPooledDataSource extends AbstractDataSource implements javax.sql.ConnectionEventListener { diff --git a/geode-core/src/main/java/com/gemstone/gemfire/internal/datasource/GemFireConnectionPoolManager.java b/geode-core/src/main/java/com/gemstone/gemfire/internal/datasource/GemFireConnectionPoolManager.java index 7543f8bdec67..4fbd46e73dc3 100644 --- a/geode-core/src/main/java/com/gemstone/gemfire/internal/datasource/GemFireConnectionPoolManager.java +++ b/geode-core/src/main/java/com/gemstone/gemfire/internal/datasource/GemFireConnectionPoolManager.java @@ -17,7 +17,6 @@ package com.gemstone.gemfire.internal.datasource; /** - * @author tnegi */ import java.io.Serializable; import javax.sql.*; @@ -26,7 +25,6 @@ * GemFireConnectionPoolManager implements ConnectionProvider interface for * managing the the conection pools(with and wothout transactions). * - * @author tnegi */ public class GemFireConnectionPoolManager implements ConnectionProvider, Serializable { diff --git a/geode-core/src/main/java/com/gemstone/gemfire/internal/datasource/GemFireTransactionDataSource.java b/geode-core/src/main/java/com/gemstone/gemfire/internal/datasource/GemFireTransactionDataSource.java index 91f30096eadb..f986fe6ba723 100644 --- a/geode-core/src/main/java/com/gemstone/gemfire/internal/datasource/GemFireTransactionDataSource.java +++ b/geode-core/src/main/java/com/gemstone/gemfire/internal/datasource/GemFireTransactionDataSource.java @@ -45,8 +45,6 @@ * participate in the transaction. The objects of these class are * ConnectionEventListener for connection close and error events. * - * @author tnegi - * @author Asif : Modified the exception handling & changed the name of some * functions. */ public class GemFireTransactionDataSource extends AbstractDataSource implements diff --git a/geode-core/src/main/java/com/gemstone/gemfire/internal/datasource/JCAConnectionManagerImpl.java b/geode-core/src/main/java/com/gemstone/gemfire/internal/datasource/JCAConnectionManagerImpl.java index 2129eda7b1d9..3091bbbf38d4 100755 --- a/geode-core/src/main/java/com/gemstone/gemfire/internal/datasource/JCAConnectionManagerImpl.java +++ b/geode-core/src/main/java/com/gemstone/gemfire/internal/datasource/JCAConnectionManagerImpl.java @@ -48,7 +48,6 @@ * account while allocating a connection). Security related features are * remaining. * - * @author rreja */ public class JCAConnectionManagerImpl implements ConnectionManager, ConnectionEventListener { diff --git a/geode-core/src/main/java/com/gemstone/gemfire/internal/datasource/ManagedPoolCacheImpl.java b/geode-core/src/main/java/com/gemstone/gemfire/internal/datasource/ManagedPoolCacheImpl.java index 74a323bcefe3..50099744483c 100755 --- a/geode-core/src/main/java/com/gemstone/gemfire/internal/datasource/ManagedPoolCacheImpl.java +++ b/geode-core/src/main/java/com/gemstone/gemfire/internal/datasource/ManagedPoolCacheImpl.java @@ -17,7 +17,6 @@ package com.gemstone.gemfire.internal.datasource; /** - * @author rreja */ import javax.resource.ResourceException; import javax.resource.spi.ConnectionEventListener; @@ -35,7 +34,6 @@ * This class implements a connection pool for Managed connection. Extends the * AbstractPoolCache to inherit the pool bahavior. * - * @author rreja */ public class ManagedPoolCacheImpl extends AbstractPoolCache { diff --git a/geode-core/src/main/java/com/gemstone/gemfire/internal/datasource/PoolException.java b/geode-core/src/main/java/com/gemstone/gemfire/internal/datasource/PoolException.java index 1df84e8f65e0..7e789ef071b5 100755 --- a/geode-core/src/main/java/com/gemstone/gemfire/internal/datasource/PoolException.java +++ b/geode-core/src/main/java/com/gemstone/gemfire/internal/datasource/PoolException.java @@ -21,7 +21,6 @@ /** * Exception thrown from Connection Pool. * - * @author rreja */ public class PoolException extends GemFireCheckedException { private static final long serialVersionUID = -6178632158204356727L; diff --git a/geode-core/src/main/java/com/gemstone/gemfire/internal/datasource/TranxPoolCacheImpl.java b/geode-core/src/main/java/com/gemstone/gemfire/internal/datasource/TranxPoolCacheImpl.java index 3c6687659361..9aee122fa865 100644 --- a/geode-core/src/main/java/com/gemstone/gemfire/internal/datasource/TranxPoolCacheImpl.java +++ b/geode-core/src/main/java/com/gemstone/gemfire/internal/datasource/TranxPoolCacheImpl.java @@ -17,7 +17,6 @@ package com.gemstone.gemfire.internal.datasource; /** - * @author tnegi */ import java.sql.SQLException; @@ -34,7 +33,6 @@ * This class models a connection pool for transactional database connection. * Extends the AbstractPoolCache to inherit the pool bahavior. * - * @author tnegi */ public class TranxPoolCacheImpl extends AbstractPoolCache { private static final long serialVersionUID = 3295652525163658888L; diff --git a/geode-core/src/main/java/com/gemstone/gemfire/internal/i18n/AbstractStringIdResourceBundle.java b/geode-core/src/main/java/com/gemstone/gemfire/internal/i18n/AbstractStringIdResourceBundle.java index 38842d78edbe..18b20221dc2a 100644 --- a/geode-core/src/main/java/com/gemstone/gemfire/internal/i18n/AbstractStringIdResourceBundle.java +++ b/geode-core/src/main/java/com/gemstone/gemfire/internal/i18n/AbstractStringIdResourceBundle.java @@ -34,7 +34,6 @@ * Baseclass for all {@link StringId} based ResourceBundles * @see java.util.ResourceBundle * - * @author kbanks * @since 5.7 */ public class AbstractStringIdResourceBundle { diff --git a/geode-core/src/main/java/com/gemstone/gemfire/internal/i18n/LocalizedStrings.java b/geode-core/src/main/java/com/gemstone/gemfire/internal/i18n/LocalizedStrings.java index 8147718c1623..718c50b19f63 100644 --- a/geode-core/src/main/java/com/gemstone/gemfire/internal/i18n/LocalizedStrings.java +++ b/geode-core/src/main/java/com/gemstone/gemfire/internal/i18n/LocalizedStrings.java @@ -37,7 +37,6 @@ * } * * - * @author kbanks * @since 6.0 * */ diff --git a/geode-core/src/main/java/com/gemstone/gemfire/internal/i18n/StringId.java b/geode-core/src/main/java/com/gemstone/gemfire/internal/i18n/StringId.java index fc5fe520c1cc..6b8f3838e224 100755 --- a/geode-core/src/main/java/com/gemstone/gemfire/internal/i18n/StringId.java +++ b/geode-core/src/main/java/com/gemstone/gemfire/internal/i18n/StringId.java @@ -20,7 +20,6 @@ /** * This class forms the basis of the i18n strategy. Its primary function is to * be used as a key to be passed to an instance of StringIdResourceBundle. - * @author kbanks * @since 6.0 */ public interface StringId { diff --git a/geode-core/src/main/java/com/gemstone/gemfire/internal/io/CompositeOutputStream.java b/geode-core/src/main/java/com/gemstone/gemfire/internal/io/CompositeOutputStream.java index de28dec44c09..5fbf162f210b 100755 --- a/geode-core/src/main/java/com/gemstone/gemfire/internal/io/CompositeOutputStream.java +++ b/geode-core/src/main/java/com/gemstone/gemfire/internal/io/CompositeOutputStream.java @@ -26,7 +26,6 @@ /** * Delegates all operations to a collection of OutputStreams. * - * @author Kirk Lund * @since 7.0 */ public class CompositeOutputStream extends OutputStream implements Iterable { diff --git a/geode-core/src/main/java/com/gemstone/gemfire/internal/io/CompositePrintStream.java b/geode-core/src/main/java/com/gemstone/gemfire/internal/io/CompositePrintStream.java index 0528267ab79e..cdd2eae6241b 100755 --- a/geode-core/src/main/java/com/gemstone/gemfire/internal/io/CompositePrintStream.java +++ b/geode-core/src/main/java/com/gemstone/gemfire/internal/io/CompositePrintStream.java @@ -21,7 +21,6 @@ import java.util.Iterator; /** - * @author Kirk Lund * @since 7.0 */ public class CompositePrintStream extends PrintStream { diff --git a/geode-core/src/main/java/com/gemstone/gemfire/internal/io/TeeOutputStream.java b/geode-core/src/main/java/com/gemstone/gemfire/internal/io/TeeOutputStream.java index be493d9bcef6..6d7229cec75b 100755 --- a/geode-core/src/main/java/com/gemstone/gemfire/internal/io/TeeOutputStream.java +++ b/geode-core/src/main/java/com/gemstone/gemfire/internal/io/TeeOutputStream.java @@ -24,7 +24,6 @@ * Delegates all operations to the original underlying OutputStream and a * mutable branch OutputStream. * - * @author Kirk Lund * @since 7.0 */ public class TeeOutputStream extends FilterOutputStream { diff --git a/geode-core/src/main/java/com/gemstone/gemfire/internal/io/TeePrintStream.java b/geode-core/src/main/java/com/gemstone/gemfire/internal/io/TeePrintStream.java index a63417b42147..76dc6b8d8adc 100755 --- a/geode-core/src/main/java/com/gemstone/gemfire/internal/io/TeePrintStream.java +++ b/geode-core/src/main/java/com/gemstone/gemfire/internal/io/TeePrintStream.java @@ -19,7 +19,6 @@ import java.io.PrintStream; /** - * @author Kirk Lund * @since 7.0 */ public class TeePrintStream extends PrintStream { diff --git a/geode-core/src/main/java/com/gemstone/gemfire/internal/jndi/ContextImpl.java b/geode-core/src/main/java/com/gemstone/gemfire/internal/jndi/ContextImpl.java index 2baf9ff47beb..7ccf13a6959a 100644 --- a/geode-core/src/main/java/com/gemstone/gemfire/internal/jndi/ContextImpl.java +++ b/geode-core/src/main/java/com/gemstone/gemfire/internal/jndi/ContextImpl.java @@ -51,7 +51,6 @@ * In such cases any occurrences of '.' are replaced with '/' before parsing. * This rule can be altered/modified by making changes in NameParserImpl class. * - * @author Nand Kishor Jha */ public class ContextImpl implements Context { diff --git a/geode-core/src/main/java/com/gemstone/gemfire/internal/jndi/InitialContextFactoryImpl.java b/geode-core/src/main/java/com/gemstone/gemfire/internal/jndi/InitialContextFactoryImpl.java index 85409e292037..d31961692928 100644 --- a/geode-core/src/main/java/com/gemstone/gemfire/internal/jndi/InitialContextFactoryImpl.java +++ b/geode-core/src/main/java/com/gemstone/gemfire/internal/jndi/InitialContextFactoryImpl.java @@ -31,7 +31,6 @@ * Optionally, this also facilitates the backup of original system property * which can be restored later. * - * @author Nand Kishor Jha */ public class InitialContextFactoryImpl implements InitialContextFactory { diff --git a/geode-core/src/main/java/com/gemstone/gemfire/internal/jndi/JNDIInvoker.java b/geode-core/src/main/java/com/gemstone/gemfire/internal/jndi/JNDIInvoker.java index 271b0e4b53aa..b3aecc4ef7d9 100644 --- a/geode-core/src/main/java/com/gemstone/gemfire/internal/jndi/JNDIInvoker.java +++ b/geode-core/src/main/java/com/gemstone/gemfire/internal/jndi/JNDIInvoker.java @@ -61,7 +61,6 @@ * TransactionManager. *

    * - * @author Nand Kishor Jha */ public class JNDIInvoker { diff --git a/geode-core/src/main/java/com/gemstone/gemfire/internal/jndi/NameParserImpl.java b/geode-core/src/main/java/com/gemstone/gemfire/internal/jndi/NameParserImpl.java index 38c2b928b4a2..39ab4b8f2c59 100644 --- a/geode-core/src/main/java/com/gemstone/gemfire/internal/jndi/NameParserImpl.java +++ b/geode-core/src/main/java/com/gemstone/gemfire/internal/jndi/NameParserImpl.java @@ -25,7 +25,6 @@ /** * ContextImpl name parser. * - * @author Nand Kishor Jha */ class NameParserImpl implements NameParser { diff --git a/geode-core/src/main/java/com/gemstone/gemfire/internal/jta/GlobalTransaction.java b/geode-core/src/main/java/com/gemstone/gemfire/internal/jta/GlobalTransaction.java index 585470a95a6d..16bdf04dc6fd 100644 --- a/geode-core/src/main/java/com/gemstone/gemfire/internal/jta/GlobalTransaction.java +++ b/geode-core/src/main/java/com/gemstone/gemfire/internal/jta/GlobalTransaction.java @@ -21,7 +21,6 @@ * GlobalTransaction is the JTA concept of a Global Transaction. *

    * - * @author Mitul Bid * * @since 4.0 */ diff --git a/geode-core/src/main/java/com/gemstone/gemfire/internal/jta/TransactionManagerImpl.java b/geode-core/src/main/java/com/gemstone/gemfire/internal/jta/TransactionManagerImpl.java index 712684f5305c..d7b421728e75 100644 --- a/geode-core/src/main/java/com/gemstone/gemfire/internal/jta/TransactionManagerImpl.java +++ b/geode-core/src/main/java/com/gemstone/gemfire/internal/jta/TransactionManagerImpl.java @@ -21,8 +21,6 @@ * TransactionManager: A JTA compatible Transaction Manager. *

    * - * @author Mitul Bid - * @author Asif * @since 4.1.1 */ import java.io.Serializable; diff --git a/geode-core/src/main/java/com/gemstone/gemfire/internal/jta/TransactionUtils.java b/geode-core/src/main/java/com/gemstone/gemfire/internal/jta/TransactionUtils.java index a6fa6141f133..2481d8e7fccb 100755 --- a/geode-core/src/main/java/com/gemstone/gemfire/internal/jta/TransactionUtils.java +++ b/geode-core/src/main/java/com/gemstone/gemfire/internal/jta/TransactionUtils.java @@ -23,7 +23,6 @@ /** * Contains Utility functions for use by JTA * - * @author Mitul D Bid */ public class TransactionUtils { diff --git a/geode-core/src/main/java/com/gemstone/gemfire/internal/jta/UserTransactionImpl.java b/geode-core/src/main/java/com/gemstone/gemfire/internal/jta/UserTransactionImpl.java index 43721e7d7a27..eacbd09eb7fb 100644 --- a/geode-core/src/main/java/com/gemstone/gemfire/internal/jta/UserTransactionImpl.java +++ b/geode-core/src/main/java/com/gemstone/gemfire/internal/jta/UserTransactionImpl.java @@ -23,8 +23,6 @@ * . *

    * - * @author Mitul Bid - * @author Asif * * @since 4.0 */ diff --git a/geode-core/src/main/java/com/gemstone/gemfire/internal/jta/XidImpl.java b/geode-core/src/main/java/com/gemstone/gemfire/internal/jta/XidImpl.java index 8928387d9928..a8bc96e87d12 100644 --- a/geode-core/src/main/java/com/gemstone/gemfire/internal/jta/XidImpl.java +++ b/geode-core/src/main/java/com/gemstone/gemfire/internal/jta/XidImpl.java @@ -21,7 +21,6 @@ * XidImpl: A JTA compatible implementation of Xid *

    * - * @author Mitul Bid * @since 4.0 */ import javax.transaction.xa.*; diff --git a/geode-core/src/main/java/com/gemstone/gemfire/internal/lang/ClassUtils.java b/geode-core/src/main/java/com/gemstone/gemfire/internal/lang/ClassUtils.java index 098eb1cd8eb8..5342b2425953 100644 --- a/geode-core/src/main/java/com/gemstone/gemfire/internal/lang/ClassUtils.java +++ b/geode-core/src/main/java/com/gemstone/gemfire/internal/lang/ClassUtils.java @@ -20,7 +20,6 @@ /** * The ClassUtils class is an abstract utility class for working with and invoking methods on Class objects. *

    - * @author John Blum * @see java.lang.Class * @see java.lang.Object * @since 7.0 diff --git a/geode-core/src/main/java/com/gemstone/gemfire/internal/lang/Filter.java b/geode-core/src/main/java/com/gemstone/gemfire/internal/lang/Filter.java index 9c0b83b5c639..c886e71359d9 100644 --- a/geode-core/src/main/java/com/gemstone/gemfire/internal/lang/Filter.java +++ b/geode-core/src/main/java/com/gemstone/gemfire/internal/lang/Filter.java @@ -20,7 +20,6 @@ /** * The Filter interface defines a contract for implementing objects that act as a filter to segregate other objects. *

    - * @author John Blum * @since 7.0 */ public interface Filter { diff --git a/geode-core/src/main/java/com/gemstone/gemfire/internal/lang/InOutParameter.java b/geode-core/src/main/java/com/gemstone/gemfire/internal/lang/InOutParameter.java index a1b98d9e1907..906bdf07ee75 100644 --- a/geode-core/src/main/java/com/gemstone/gemfire/internal/lang/InOutParameter.java +++ b/geode-core/src/main/java/com/gemstone/gemfire/internal/lang/InOutParameter.java @@ -22,7 +22,6 @@ * constitutes a wrapper around the value it encapsulates. In essence, an instance of this class is the same thing * as it's value, as determined by the equals method and so this class just serves as a kind of holder for it's value. *

    - * @author John Blum * @param the expected Class type of the parameter's value. * @since 6.8 */ diff --git a/geode-core/src/main/java/com/gemstone/gemfire/internal/lang/Initable.java b/geode-core/src/main/java/com/gemstone/gemfire/internal/lang/Initable.java index 8543f05009a8..05ccf355555e 100644 --- a/geode-core/src/main/java/com/gemstone/gemfire/internal/lang/Initable.java +++ b/geode-core/src/main/java/com/gemstone/gemfire/internal/lang/Initable.java @@ -21,7 +21,6 @@ * The Initable interface defines a contract for implementing classes who's Object instances can be initialized after * construction. *

    - * @author John Blum * @since 6.8 */ public interface Initable { diff --git a/geode-core/src/main/java/com/gemstone/gemfire/internal/lang/Initializer.java b/geode-core/src/main/java/com/gemstone/gemfire/internal/lang/Initializer.java index cef5ed18bada..14298fd3c07f 100644 --- a/geode-core/src/main/java/com/gemstone/gemfire/internal/lang/Initializer.java +++ b/geode-core/src/main/java/com/gemstone/gemfire/internal/lang/Initializer.java @@ -20,7 +20,6 @@ * The Initializer class is a utility class to identify Initable objects and initialize them by calling their * init method. *

    - * @author John Blum * @see com.gemstone.gemfire.internal.lang.Initable * @since 8.0 */ diff --git a/geode-core/src/main/java/com/gemstone/gemfire/internal/lang/MutableIdentifiable.java b/geode-core/src/main/java/com/gemstone/gemfire/internal/lang/MutableIdentifiable.java index 3e27ccfccd49..460274e24141 100644 --- a/geode-core/src/main/java/com/gemstone/gemfire/internal/lang/MutableIdentifiable.java +++ b/geode-core/src/main/java/com/gemstone/gemfire/internal/lang/MutableIdentifiable.java @@ -22,7 +22,6 @@ * The MutableIdentifiable interface defines a contract for classes whose mutable Object instances can * be uniquely identified relative to other Object instances within the same class type hierarchy. *

    - * @author John Blum * @param the class type of the identifier. * @see java.lang.Comparable * @since 7.0 diff --git a/geode-core/src/main/java/com/gemstone/gemfire/internal/lang/ObjectUtils.java b/geode-core/src/main/java/com/gemstone/gemfire/internal/lang/ObjectUtils.java index e53e74ed28e5..4994792f1fdd 100644 --- a/geode-core/src/main/java/com/gemstone/gemfire/internal/lang/ObjectUtils.java +++ b/geode-core/src/main/java/com/gemstone/gemfire/internal/lang/ObjectUtils.java @@ -23,7 +23,6 @@ /** * The ObjectUtils class is an abstract utility class for working with and invoking methods on Objects. *

    - * @author John Blum * @see java.lang.Object * @since 6.8 */ diff --git a/geode-core/src/main/java/com/gemstone/gemfire/internal/lang/Orderable.java b/geode-core/src/main/java/com/gemstone/gemfire/internal/lang/Orderable.java index 0c4bc1901f4d..2cefbd4ceff6 100644 --- a/geode-core/src/main/java/com/gemstone/gemfire/internal/lang/Orderable.java +++ b/geode-core/src/main/java/com/gemstone/gemfire/internal/lang/Orderable.java @@ -21,7 +21,6 @@ * The Orderable interface defines a contract for classes whose Objects can be sorted, or ordered according to the * order property of a Comparable type. *

    - * @author John Blum * @see java.lang.Comparable * @since 6.8 */ diff --git a/geode-core/src/main/java/com/gemstone/gemfire/internal/lang/Ordered.java b/geode-core/src/main/java/com/gemstone/gemfire/internal/lang/Ordered.java index 456f45adb0f4..d52f32556082 100644 --- a/geode-core/src/main/java/com/gemstone/gemfire/internal/lang/Ordered.java +++ b/geode-core/src/main/java/com/gemstone/gemfire/internal/lang/Ordered.java @@ -22,7 +22,6 @@ * of ordered data structure, such as an array or List, or exist in a context where order relative to other * peer instances matter. *

    - * @author John Blum * @since 6.8 */ public interface Ordered { diff --git a/geode-core/src/main/java/com/gemstone/gemfire/internal/lang/StringUtils.java b/geode-core/src/main/java/com/gemstone/gemfire/internal/lang/StringUtils.java index 82e6417231e4..bffd398181b5 100644 --- a/geode-core/src/main/java/com/gemstone/gemfire/internal/lang/StringUtils.java +++ b/geode-core/src/main/java/com/gemstone/gemfire/internal/lang/StringUtils.java @@ -23,7 +23,6 @@ /** * The StringUtils is an abstract utility class for working with and invoking operations on String literals. *

    - * @author John J. Blum * @see java.lang.String * @since 7.0 */ diff --git a/geode-core/src/main/java/com/gemstone/gemfire/internal/lang/SystemUtils.java b/geode-core/src/main/java/com/gemstone/gemfire/internal/lang/SystemUtils.java index 9664ae65a78e..f58446d52493 100644 --- a/geode-core/src/main/java/com/gemstone/gemfire/internal/lang/SystemUtils.java +++ b/geode-core/src/main/java/com/gemstone/gemfire/internal/lang/SystemUtils.java @@ -26,7 +26,6 @@ * The SystemUtils class is an abstract utility class for working with, invoking methods and accessing properties * of the Java System class. * - * @author John Blum * @see java.lang.System * @since 6.8 */ diff --git a/geode-core/src/main/java/com/gemstone/gemfire/internal/lang/ThreadUtils.java b/geode-core/src/main/java/com/gemstone/gemfire/internal/lang/ThreadUtils.java index 5d7816c03030..e4688d06c4d4 100644 --- a/geode-core/src/main/java/com/gemstone/gemfire/internal/lang/ThreadUtils.java +++ b/geode-core/src/main/java/com/gemstone/gemfire/internal/lang/ThreadUtils.java @@ -25,7 +25,6 @@ /** * The ThreadUtils class is an abstract utility class for working with and invoking methods on Threads. *

    - * @author John Blum * @see java.lang.Thread * @since 7.0 */ diff --git a/geode-core/src/main/java/com/gemstone/gemfire/internal/logging/DateFormatter.java b/geode-core/src/main/java/com/gemstone/gemfire/internal/logging/DateFormatter.java index c7a7ec258b9e..f930e88cc3c4 100644 --- a/geode-core/src/main/java/com/gemstone/gemfire/internal/logging/DateFormatter.java +++ b/geode-core/src/main/java/com/gemstone/gemfire/internal/logging/DateFormatter.java @@ -23,7 +23,6 @@ /** * Defines the common date format for GemFire and provides DateFormat instances. * - * @author Kirk Lund */ public final class DateFormatter { diff --git a/geode-core/src/main/java/com/gemstone/gemfire/internal/logging/DebugLogWriter.java b/geode-core/src/main/java/com/gemstone/gemfire/internal/logging/DebugLogWriter.java index 06b4722f6623..6446e4c41a0d 100644 --- a/geode-core/src/main/java/com/gemstone/gemfire/internal/logging/DebugLogWriter.java +++ b/geode-core/src/main/java/com/gemstone/gemfire/internal/logging/DebugLogWriter.java @@ -34,7 +34,6 @@ * } * * - * @author Mitch Thomas * @since 5.0 */ final public class DebugLogWriter extends LogWriterImpl diff --git a/geode-core/src/main/java/com/gemstone/gemfire/internal/logging/LogFileParser.java b/geode-core/src/main/java/com/gemstone/gemfire/internal/logging/LogFileParser.java index 35c974f6dce8..aa00da463d53 100644 --- a/geode-core/src/main/java/com/gemstone/gemfire/internal/logging/LogFileParser.java +++ b/geode-core/src/main/java/com/gemstone/gemfire/internal/logging/LogFileParser.java @@ -28,8 +28,6 @@ * LogFileParser.LogEntry}s. It behaves sort of like an {@link * java.util.StringTokenizer}. * - * @author David Whitlock - * @author Bruce Schuchardt * * @since 3.0 */ diff --git a/geode-core/src/main/java/com/gemstone/gemfire/internal/logging/LogService.java b/geode-core/src/main/java/com/gemstone/gemfire/internal/logging/LogService.java index 7eeb26cce7e4..5572d119c84b 100644 --- a/geode-core/src/main/java/com/gemstone/gemfire/internal/logging/LogService.java +++ b/geode-core/src/main/java/com/gemstone/gemfire/internal/logging/LogService.java @@ -40,8 +40,6 @@ /** * Centralizes log configuration and initialization. * - * @author bakera - * @author David Hoots */ @SuppressWarnings("unused") public class LogService extends LogManager { diff --git a/geode-core/src/main/java/com/gemstone/gemfire/internal/logging/LogWriterFactory.java b/geode-core/src/main/java/com/gemstone/gemfire/internal/logging/LogWriterFactory.java index f08847abd5ed..eb728acaf6b7 100644 --- a/geode-core/src/main/java/com/gemstone/gemfire/internal/logging/LogWriterFactory.java +++ b/geode-core/src/main/java/com/gemstone/gemfire/internal/logging/LogWriterFactory.java @@ -30,7 +30,6 @@ /** * Creates LogWriterLogger instances. * - * @author Kirk Lund */ public class LogWriterFactory { diff --git a/geode-core/src/main/java/com/gemstone/gemfire/internal/logging/LoggingThreadGroup.java b/geode-core/src/main/java/com/gemstone/gemfire/internal/logging/LoggingThreadGroup.java index 71e4371d08fe..48c0eac3b086 100755 --- a/geode-core/src/main/java/com/gemstone/gemfire/internal/logging/LoggingThreadGroup.java +++ b/geode-core/src/main/java/com/gemstone/gemfire/internal/logging/LoggingThreadGroup.java @@ -39,7 +39,6 @@ * * @see LoggingThreadGroup#createThreadGroup * - * @author David Whitlock * @since 4.0 */ public class LoggingThreadGroup extends ThreadGroup { diff --git a/geode-core/src/main/java/com/gemstone/gemfire/internal/logging/ManagerLogWriter.java b/geode-core/src/main/java/com/gemstone/gemfire/internal/logging/ManagerLogWriter.java index f83f579be0da..28419fc2eaa1 100644 --- a/geode-core/src/main/java/com/gemstone/gemfire/internal/logging/ManagerLogWriter.java +++ b/geode-core/src/main/java/com/gemstone/gemfire/internal/logging/ManagerLogWriter.java @@ -43,7 +43,6 @@ * Its just like {@link LocalLogWriter} except it has support for rolling * and alerts. * - * @author Darrel Schneider * @since 1.0 */ public class ManagerLogWriter extends LocalLogWriter { diff --git a/geode-core/src/main/java/com/gemstone/gemfire/internal/logging/MergeLogFiles.java b/geode-core/src/main/java/com/gemstone/gemfire/internal/logging/MergeLogFiles.java index 1f19ff3d32cc..ca738a9f7ac0 100644 --- a/geode-core/src/main/java/com/gemstone/gemfire/internal/logging/MergeLogFiles.java +++ b/geode-core/src/main/java/com/gemstone/gemfire/internal/logging/MergeLogFiles.java @@ -94,8 +94,6 @@ * @see SortLogFile * @see LogFileParser * - * @author David Whitlock - * @author Bruce Schuchardt * * * @since 2.0 (-pids, -threads, -align, and -noblanks added in 5.1) diff --git a/geode-core/src/main/java/com/gemstone/gemfire/internal/logging/SecurityLocalLogWriter.java b/geode-core/src/main/java/com/gemstone/gemfire/internal/logging/SecurityLocalLogWriter.java index c40fdd9af2e5..44f6e5760a97 100644 --- a/geode-core/src/main/java/com/gemstone/gemfire/internal/logging/SecurityLocalLogWriter.java +++ b/geode-core/src/main/java/com/gemstone/gemfire/internal/logging/SecurityLocalLogWriter.java @@ -25,7 +25,6 @@ * Implementation of {@link com.gemstone.gemfire.LogWriter} that will write * security related logs to a local stream. * - * @author Sumedh Wale * @since 5.5 */ public class SecurityLocalLogWriter extends PureLogWriter { diff --git a/geode-core/src/main/java/com/gemstone/gemfire/internal/logging/SecurityLogConfig.java b/geode-core/src/main/java/com/gemstone/gemfire/internal/logging/SecurityLogConfig.java index c5fe6a04d1d8..f915994182d1 100644 --- a/geode-core/src/main/java/com/gemstone/gemfire/internal/logging/SecurityLogConfig.java +++ b/geode-core/src/main/java/com/gemstone/gemfire/internal/logging/SecurityLogConfig.java @@ -24,7 +24,6 @@ * LogConfig implementation for Security logging configuration that delegates * to a DistributionConfig. * - * @author Kirk Lund */ public class SecurityLogConfig implements LogConfig { diff --git a/geode-core/src/main/java/com/gemstone/gemfire/internal/logging/SecurityLogWriter.java b/geode-core/src/main/java/com/gemstone/gemfire/internal/logging/SecurityLogWriter.java index 319738353615..27b1a0c8a9e0 100644 --- a/geode-core/src/main/java/com/gemstone/gemfire/internal/logging/SecurityLogWriter.java +++ b/geode-core/src/main/java/com/gemstone/gemfire/internal/logging/SecurityLogWriter.java @@ -28,7 +28,6 @@ * This class wraps an existing {@link InternalLogWriter} instance to add the * security prefix feature mentioned above. * - * @author Sumedh Wale * @since 5.5 */ public final class SecurityLogWriter extends LogWriterImpl implements InternalLogWriter { diff --git a/geode-core/src/main/java/com/gemstone/gemfire/internal/logging/SecurityManagerLogWriter.java b/geode-core/src/main/java/com/gemstone/gemfire/internal/logging/SecurityManagerLogWriter.java index 5330a449fdf4..98bf2847c50e 100644 --- a/geode-core/src/main/java/com/gemstone/gemfire/internal/logging/SecurityManagerLogWriter.java +++ b/geode-core/src/main/java/com/gemstone/gemfire/internal/logging/SecurityManagerLogWriter.java @@ -31,7 +31,6 @@ * This class extends the {@link ManagerLogWriter} to add the security prefix * feature mentioned above. * - * @author Sumedh Wale * @since 5.5 */ public final class SecurityManagerLogWriter extends ManagerLogWriter { diff --git a/geode-core/src/main/java/com/gemstone/gemfire/internal/logging/SortLogFile.java b/geode-core/src/main/java/com/gemstone/gemfire/internal/logging/SortLogFile.java index ea74061d50d0..ad53b97fae54 100644 --- a/geode-core/src/main/java/com/gemstone/gemfire/internal/logging/SortLogFile.java +++ b/geode-core/src/main/java/com/gemstone/gemfire/internal/logging/SortLogFile.java @@ -30,7 +30,6 @@ * @see MergeLogFiles * @see LogFileParser * - * @author David Whitlock * * @since 3.0 */ diff --git a/geode-core/src/main/java/com/gemstone/gemfire/internal/logging/StandardErrorPrinter.java b/geode-core/src/main/java/com/gemstone/gemfire/internal/logging/StandardErrorPrinter.java index 7f27c25a81d4..ca3ebe10d7df 100644 --- a/geode-core/src/main/java/com/gemstone/gemfire/internal/logging/StandardErrorPrinter.java +++ b/geode-core/src/main/java/com/gemstone/gemfire/internal/logging/StandardErrorPrinter.java @@ -19,7 +19,6 @@ /** * Prints messages formatted like GemFire log messages to stderr. * - * @author Kirk Lund */ public class StandardErrorPrinter extends LocalLogWriter { diff --git a/geode-core/src/main/java/com/gemstone/gemfire/internal/logging/StandardOutputPrinter.java b/geode-core/src/main/java/com/gemstone/gemfire/internal/logging/StandardOutputPrinter.java index 4651b41d9a7d..49e1af4d712d 100644 --- a/geode-core/src/main/java/com/gemstone/gemfire/internal/logging/StandardOutputPrinter.java +++ b/geode-core/src/main/java/com/gemstone/gemfire/internal/logging/StandardOutputPrinter.java @@ -19,7 +19,6 @@ /** * Prints messages formatted like GemFire log messages to stderr. * - * @author Kirk Lund */ public class StandardOutputPrinter extends LocalLogWriter { diff --git a/geode-core/src/main/java/com/gemstone/gemfire/internal/logging/log4j/AlertAppender.java b/geode-core/src/main/java/com/gemstone/gemfire/internal/logging/log4j/AlertAppender.java index e071511538a2..e9bdc25d695f 100644 --- a/geode-core/src/main/java/com/gemstone/gemfire/internal/logging/log4j/AlertAppender.java +++ b/geode-core/src/main/java/com/gemstone/gemfire/internal/logging/log4j/AlertAppender.java @@ -42,7 +42,6 @@ * A Log4j Appender which will notify listeners whenever a message of the * requested level is written to the log file. * - * @author David Hoots */ public final class AlertAppender extends AbstractAppender implements PropertyChangeListener { private static final String APPENDER_NAME = AlertAppender.class.getName(); diff --git a/geode-core/src/main/java/com/gemstone/gemfire/internal/logging/log4j/AppenderContext.java b/geode-core/src/main/java/com/gemstone/gemfire/internal/logging/log4j/AppenderContext.java index bde0bff04213..4e9cf8823c9d 100644 --- a/geode-core/src/main/java/com/gemstone/gemfire/internal/logging/log4j/AppenderContext.java +++ b/geode-core/src/main/java/com/gemstone/gemfire/internal/logging/log4j/AppenderContext.java @@ -26,7 +26,6 @@ * Provides the LoggerContext and LoggerConfig for GemFire appenders to attach * to. These appenders include AlertAppender and LogWriterAppender. * - * @author Kirk Lund */ public class AppenderContext { diff --git a/geode-core/src/main/java/com/gemstone/gemfire/internal/logging/log4j/ConfigLocator.java b/geode-core/src/main/java/com/gemstone/gemfire/internal/logging/log4j/ConfigLocator.java index 0a207ac90f1a..9c13c6e4932a 100755 --- a/geode-core/src/main/java/com/gemstone/gemfire/internal/logging/log4j/ConfigLocator.java +++ b/geode-core/src/main/java/com/gemstone/gemfire/internal/logging/log4j/ConfigLocator.java @@ -25,7 +25,6 @@ /** * Utility methods for finding the Log4J 2 configuration file. * - * @author Kirk Lund */ public class ConfigLocator { diff --git a/geode-core/src/main/java/com/gemstone/gemfire/internal/logging/log4j/FastLogger.java b/geode-core/src/main/java/com/gemstone/gemfire/internal/logging/log4j/FastLogger.java index fbfc69919ea4..02ce998155e8 100644 --- a/geode-core/src/main/java/com/gemstone/gemfire/internal/logging/log4j/FastLogger.java +++ b/geode-core/src/main/java/com/gemstone/gemfire/internal/logging/log4j/FastLogger.java @@ -28,8 +28,6 @@ * penalties when the log level is INFO or above. If delegating is true * then it will always delegate to ExtendedLoggerWrapper for is-enabled checks. * - * @author Kirk Lund - * @author David Hoots */ public class FastLogger extends ExtendedLoggerWrapper { private static final long serialVersionUID = 7084130827962463327L; diff --git a/geode-core/src/main/java/com/gemstone/gemfire/internal/logging/log4j/GemFireLogger.java b/geode-core/src/main/java/com/gemstone/gemfire/internal/logging/log4j/GemFireLogger.java index a64286b3ff0d..682a5a151be4 100644 --- a/geode-core/src/main/java/com/gemstone/gemfire/internal/logging/log4j/GemFireLogger.java +++ b/geode-core/src/main/java/com/gemstone/gemfire/internal/logging/log4j/GemFireLogger.java @@ -27,7 +27,6 @@ * Extends Logger interface with convenience methods for the FINEST, FINER, * FINE, CONFIG, INFO, WARNING, ERROR and SEVERE custom log levels. * - * @author Kirk Lund */ public interface GemFireLogger extends Logger { diff --git a/geode-core/src/main/java/com/gemstone/gemfire/internal/logging/log4j/LocalizedMessage.java b/geode-core/src/main/java/com/gemstone/gemfire/internal/logging/log4j/LocalizedMessage.java index d3c50c8688ec..df7558f81ed5 100644 --- a/geode-core/src/main/java/com/gemstone/gemfire/internal/logging/log4j/LocalizedMessage.java +++ b/geode-core/src/main/java/com/gemstone/gemfire/internal/logging/log4j/LocalizedMessage.java @@ -24,7 +24,6 @@ /** * An implementation of a Log4j {@link Message} that wraps a {@link StringId}. * - * @author David Hoots */ public final class LocalizedMessage implements Message { private static final long serialVersionUID = -8893339995741536401L; diff --git a/geode-core/src/main/java/com/gemstone/gemfire/internal/logging/log4j/LogWriterAppender.java b/geode-core/src/main/java/com/gemstone/gemfire/internal/logging/log4j/LogWriterAppender.java index 5ce77f21feda..9c103ee12b37 100644 --- a/geode-core/src/main/java/com/gemstone/gemfire/internal/logging/log4j/LogWriterAppender.java +++ b/geode-core/src/main/java/com/gemstone/gemfire/internal/logging/log4j/LogWriterAppender.java @@ -37,8 +37,6 @@ /** * A Log4j Appender which will copy all output to a LogWriter. * - * @author David Hoots - * @author Kirk Lund */ public class LogWriterAppender extends AbstractAppender implements PropertyChangeListener { private static final org.apache.logging.log4j.Logger logger = LogService.getLogger(); diff --git a/geode-core/src/main/java/com/gemstone/gemfire/internal/logging/log4j/LogWriterAppenders.java b/geode-core/src/main/java/com/gemstone/gemfire/internal/logging/log4j/LogWriterAppenders.java index 7dd936614142..a2fa57d43602 100644 --- a/geode-core/src/main/java/com/gemstone/gemfire/internal/logging/log4j/LogWriterAppenders.java +++ b/geode-core/src/main/java/com/gemstone/gemfire/internal/logging/log4j/LogWriterAppenders.java @@ -47,7 +47,6 @@ * Holds on to one or many instances of LogWriterAppender and provides * convenience methods for controlling their lifecycles. * - * @author Kirk Lund */ public class LogWriterAppenders { public final static String APPEND_TO_LOG_FILE = "gemfire.append-log"; diff --git a/geode-core/src/main/java/com/gemstone/gemfire/internal/logging/log4j/LogWriterLogger.java b/geode-core/src/main/java/com/gemstone/gemfire/internal/logging/log4j/LogWriterLogger.java index 1fb907d96205..f1e314a4bdf1 100644 --- a/geode-core/src/main/java/com/gemstone/gemfire/internal/logging/log4j/LogWriterLogger.java +++ b/geode-core/src/main/java/com/gemstone/gemfire/internal/logging/log4j/LogWriterLogger.java @@ -38,8 +38,6 @@ * Implements GemFireLogger with custom levels while also bridging LogWriter * and LogWriterI18n to Log4J. * - * @author Kirk Lund - * @author David Hoots */ @SuppressWarnings("unused") public final class LogWriterLogger diff --git a/geode-core/src/main/java/com/gemstone/gemfire/internal/memcached/Command.java b/geode-core/src/main/java/com/gemstone/gemfire/internal/memcached/Command.java index e1f71dcbf45e..3d3d3edda284 100644 --- a/geode-core/src/main/java/com/gemstone/gemfire/internal/memcached/Command.java +++ b/geode-core/src/main/java/com/gemstone/gemfire/internal/memcached/Command.java @@ -55,7 +55,6 @@ /** * Represents all commands a memcached client * can issue - * @author Swapnil Bawaskar * */ public enum Command { diff --git a/geode-core/src/main/java/com/gemstone/gemfire/internal/memcached/CommandProcessor.java b/geode-core/src/main/java/com/gemstone/gemfire/internal/memcached/CommandProcessor.java index 63764805ff84..0ea657f2c616 100644 --- a/geode-core/src/main/java/com/gemstone/gemfire/internal/memcached/CommandProcessor.java +++ b/geode-core/src/main/java/com/gemstone/gemfire/internal/memcached/CommandProcessor.java @@ -26,7 +26,6 @@ * implement this interface to process a command from * the client. * - * @author Swapnil Bawaskar * */ public interface CommandProcessor { diff --git a/geode-core/src/main/java/com/gemstone/gemfire/internal/memcached/ConnectionHandler.java b/geode-core/src/main/java/com/gemstone/gemfire/internal/memcached/ConnectionHandler.java index f3af39525376..1df73b6a63ec 100644 --- a/geode-core/src/main/java/com/gemstone/gemfire/internal/memcached/ConnectionHandler.java +++ b/geode-core/src/main/java/com/gemstone/gemfire/internal/memcached/ConnectionHandler.java @@ -34,7 +34,6 @@ * responses to this client. * * - * @author Swapnil Bawaskar * */ public class ConnectionHandler implements Runnable { diff --git a/geode-core/src/main/java/com/gemstone/gemfire/internal/memcached/KeyWrapper.java b/geode-core/src/main/java/com/gemstone/gemfire/internal/memcached/KeyWrapper.java index 1a1b5270230a..8014f4a2fbf6 100644 --- a/geode-core/src/main/java/com/gemstone/gemfire/internal/memcached/KeyWrapper.java +++ b/geode-core/src/main/java/com/gemstone/gemfire/internal/memcached/KeyWrapper.java @@ -29,7 +29,6 @@ * class are used. Instances of this class encapsulate byte[] keys and * override equals and hashCode to base them on contents on byte[]. * - * @author sbawaska */ public class KeyWrapper implements DataSerializable { diff --git a/geode-core/src/main/java/com/gemstone/gemfire/internal/memcached/Reply.java b/geode-core/src/main/java/com/gemstone/gemfire/internal/memcached/Reply.java index e3ec69a9a4ab..bd4907a587e3 100644 --- a/geode-core/src/main/java/com/gemstone/gemfire/internal/memcached/Reply.java +++ b/geode-core/src/main/java/com/gemstone/gemfire/internal/memcached/Reply.java @@ -19,7 +19,6 @@ /** * Represents the reply messages sent to the client. * All reply types override toString to send "\r\n" - * @author Swapnil Bawaskar */ public enum Reply { diff --git a/geode-core/src/main/java/com/gemstone/gemfire/internal/memcached/RequestReader.java b/geode-core/src/main/java/com/gemstone/gemfire/internal/memcached/RequestReader.java index 9b4e0b1ab603..e00c4d3dcf54 100644 --- a/geode-core/src/main/java/com/gemstone/gemfire/internal/memcached/RequestReader.java +++ b/geode-core/src/main/java/com/gemstone/gemfire/internal/memcached/RequestReader.java @@ -34,7 +34,6 @@ * Reads the first line from the request and interprets the {@link Command} * from the memcached client * - * @author Swapnil Bawaskar * */ public class RequestReader { diff --git a/geode-core/src/main/java/com/gemstone/gemfire/internal/memcached/ResponseStatus.java b/geode-core/src/main/java/com/gemstone/gemfire/internal/memcached/ResponseStatus.java index c1fe09701d30..a27a3d2edd06 100644 --- a/geode-core/src/main/java/com/gemstone/gemfire/internal/memcached/ResponseStatus.java +++ b/geode-core/src/main/java/com/gemstone/gemfire/internal/memcached/ResponseStatus.java @@ -19,7 +19,6 @@ /** * encapsulate ResponseOpCodes for binary reply messages. * - * @author Swapnil Bawaskar */ public enum ResponseStatus { diff --git a/geode-core/src/main/java/com/gemstone/gemfire/internal/memcached/ValueWrapper.java b/geode-core/src/main/java/com/gemstone/gemfire/internal/memcached/ValueWrapper.java index ac832f4e816f..ad105a301247 100644 --- a/geode-core/src/main/java/com/gemstone/gemfire/internal/memcached/ValueWrapper.java +++ b/geode-core/src/main/java/com/gemstone/gemfire/internal/memcached/ValueWrapper.java @@ -30,7 +30,6 @@ * version and the value. Instances of this class can be * obtained by using {@link #getWrappedValue(byte[], int)} * - * @author Swapnil Bawaskar * */ public class ValueWrapper implements DataSerializable { diff --git a/geode-core/src/main/java/com/gemstone/gemfire/internal/memcached/commands/AbstractCommand.java b/geode-core/src/main/java/com/gemstone/gemfire/internal/memcached/commands/AbstractCommand.java index 7a03c0545591..fe71f56db376 100644 --- a/geode-core/src/main/java/com/gemstone/gemfire/internal/memcached/commands/AbstractCommand.java +++ b/geode-core/src/main/java/com/gemstone/gemfire/internal/memcached/commands/AbstractCommand.java @@ -41,7 +41,6 @@ /** * Abstract class with utility methods for all Command classes. * - * @author Swapnil Bawaskar * */ public abstract class AbstractCommand implements CommandProcessor { diff --git a/geode-core/src/main/java/com/gemstone/gemfire/internal/memcached/commands/AddCommand.java b/geode-core/src/main/java/com/gemstone/gemfire/internal/memcached/commands/AddCommand.java index 33a52ceede56..b62a044782fb 100644 --- a/geode-core/src/main/java/com/gemstone/gemfire/internal/memcached/commands/AddCommand.java +++ b/geode-core/src/main/java/com/gemstone/gemfire/internal/memcached/commands/AddCommand.java @@ -33,7 +33,6 @@ * "add" means "store this data, but only if the server *doesn't* already * hold data for this key". * - * @author Swapnil Bawaskar */ public class AddCommand extends StorageCommand { diff --git a/geode-core/src/main/java/com/gemstone/gemfire/internal/memcached/commands/AddQCommand.java b/geode-core/src/main/java/com/gemstone/gemfire/internal/memcached/commands/AddQCommand.java index 4e6ee713b9f3..1dc4a907776d 100644 --- a/geode-core/src/main/java/com/gemstone/gemfire/internal/memcached/commands/AddQCommand.java +++ b/geode-core/src/main/java/com/gemstone/gemfire/internal/memcached/commands/AddQCommand.java @@ -18,7 +18,6 @@ /** * - * @author Swapnil Bawaskar * */ public class AddQCommand extends AddCommand { diff --git a/geode-core/src/main/java/com/gemstone/gemfire/internal/memcached/commands/AppendCommand.java b/geode-core/src/main/java/com/gemstone/gemfire/internal/memcached/commands/AppendCommand.java index 17b3ef4b2074..d6828b76be1f 100644 --- a/geode-core/src/main/java/com/gemstone/gemfire/internal/memcached/commands/AppendCommand.java +++ b/geode-core/src/main/java/com/gemstone/gemfire/internal/memcached/commands/AppendCommand.java @@ -28,7 +28,6 @@ /** * "append" means "add this data to an existing key after existing data". * - * @author Swapnil Bawaskar * */ public class AppendCommand extends StorageCommand { diff --git a/geode-core/src/main/java/com/gemstone/gemfire/internal/memcached/commands/AppendQCommand.java b/geode-core/src/main/java/com/gemstone/gemfire/internal/memcached/commands/AppendQCommand.java index df0c0c103664..45aaf3f1e3dc 100644 --- a/geode-core/src/main/java/com/gemstone/gemfire/internal/memcached/commands/AppendQCommand.java +++ b/geode-core/src/main/java/com/gemstone/gemfire/internal/memcached/commands/AppendQCommand.java @@ -18,7 +18,6 @@ /** * - * @author Swapnil Bawaskar */ public class AppendQCommand extends AppendCommand { diff --git a/geode-core/src/main/java/com/gemstone/gemfire/internal/memcached/commands/CASCommand.java b/geode-core/src/main/java/com/gemstone/gemfire/internal/memcached/commands/CASCommand.java index 2c3a7524c721..2d4b6d719934 100644 --- a/geode-core/src/main/java/com/gemstone/gemfire/internal/memcached/commands/CASCommand.java +++ b/geode-core/src/main/java/com/gemstone/gemfire/internal/memcached/commands/CASCommand.java @@ -30,7 +30,6 @@ * "cas" is a check and set operation which means "store this data but * only if no one else has updated since I last fetched it." * - * @author Swapnil Bawaskar * */ public class CASCommand extends AbstractCommand { diff --git a/geode-core/src/main/java/com/gemstone/gemfire/internal/memcached/commands/ClientError.java b/geode-core/src/main/java/com/gemstone/gemfire/internal/memcached/commands/ClientError.java index a137a7e3095b..28a1b08bb575 100644 --- a/geode-core/src/main/java/com/gemstone/gemfire/internal/memcached/commands/ClientError.java +++ b/geode-core/src/main/java/com/gemstone/gemfire/internal/memcached/commands/ClientError.java @@ -21,7 +21,6 @@ * when this exception is thrown "CLIENT_ERROR \r\n" * is sent to the client * - * @author Swapnil Bawaskar */ public class ClientError extends RuntimeException { private static final long serialVersionUID = -2426928000696680541L; diff --git a/geode-core/src/main/java/com/gemstone/gemfire/internal/memcached/commands/DecrementCommand.java b/geode-core/src/main/java/com/gemstone/gemfire/internal/memcached/commands/DecrementCommand.java index 12c2f599ccad..43aeea0c86d2 100644 --- a/geode-core/src/main/java/com/gemstone/gemfire/internal/memcached/commands/DecrementCommand.java +++ b/geode-core/src/main/java/com/gemstone/gemfire/internal/memcached/commands/DecrementCommand.java @@ -41,7 +41,6 @@ * Also, the item must already exist for incr/decr to work; these commands won't pretend * that a non-existent key exists with value 0; instead, they will fail. * - * @author Swapnil Bawaskar * */ public class DecrementCommand extends AbstractCommand { diff --git a/geode-core/src/main/java/com/gemstone/gemfire/internal/memcached/commands/DecrementQCommand.java b/geode-core/src/main/java/com/gemstone/gemfire/internal/memcached/commands/DecrementQCommand.java index bb454f90d059..bf7f5c3c9ab1 100644 --- a/geode-core/src/main/java/com/gemstone/gemfire/internal/memcached/commands/DecrementQCommand.java +++ b/geode-core/src/main/java/com/gemstone/gemfire/internal/memcached/commands/DecrementQCommand.java @@ -18,7 +18,6 @@ /** * - * @author Swapnil Bawaskar */ public class DecrementQCommand extends DecrementCommand { diff --git a/geode-core/src/main/java/com/gemstone/gemfire/internal/memcached/commands/DeleteCommand.java b/geode-core/src/main/java/com/gemstone/gemfire/internal/memcached/commands/DeleteCommand.java index 32714643882e..0adf4264e475 100644 --- a/geode-core/src/main/java/com/gemstone/gemfire/internal/memcached/commands/DeleteCommand.java +++ b/geode-core/src/main/java/com/gemstone/gemfire/internal/memcached/commands/DeleteCommand.java @@ -33,7 +33,6 @@ * The command "delete" allows for explicit deletion of items: * delete [noreply]\r\n * - * @author Swapnil Bawaskar * */ public class DeleteCommand extends AbstractCommand { diff --git a/geode-core/src/main/java/com/gemstone/gemfire/internal/memcached/commands/DeleteQCommand.java b/geode-core/src/main/java/com/gemstone/gemfire/internal/memcached/commands/DeleteQCommand.java index e3bde4759a48..ea99a88a7dbd 100644 --- a/geode-core/src/main/java/com/gemstone/gemfire/internal/memcached/commands/DeleteQCommand.java +++ b/geode-core/src/main/java/com/gemstone/gemfire/internal/memcached/commands/DeleteQCommand.java @@ -18,7 +18,6 @@ /** * - * @author Swapnil Bawaskar */ public class DeleteQCommand extends DeleteCommand { diff --git a/geode-core/src/main/java/com/gemstone/gemfire/internal/memcached/commands/FlushAllQCommand.java b/geode-core/src/main/java/com/gemstone/gemfire/internal/memcached/commands/FlushAllQCommand.java index ca1567b1aafe..48619cf96946 100644 --- a/geode-core/src/main/java/com/gemstone/gemfire/internal/memcached/commands/FlushAllQCommand.java +++ b/geode-core/src/main/java/com/gemstone/gemfire/internal/memcached/commands/FlushAllQCommand.java @@ -18,7 +18,6 @@ /** * - * @author Swapnil Bawaskar */ public class FlushAllQCommand extends FlushAllCommand { diff --git a/geode-core/src/main/java/com/gemstone/gemfire/internal/memcached/commands/GATCommand.java b/geode-core/src/main/java/com/gemstone/gemfire/internal/memcached/commands/GATCommand.java index 6823085c4dfe..c34de85d62ae 100644 --- a/geode-core/src/main/java/com/gemstone/gemfire/internal/memcached/commands/GATCommand.java +++ b/geode-core/src/main/java/com/gemstone/gemfire/internal/memcached/commands/GATCommand.java @@ -18,7 +18,6 @@ /** * - * @author Swapnil Bawaskar */ public class GATCommand extends TouchCommand { diff --git a/geode-core/src/main/java/com/gemstone/gemfire/internal/memcached/commands/GATQCommand.java b/geode-core/src/main/java/com/gemstone/gemfire/internal/memcached/commands/GATQCommand.java index 6316a20a2e04..4e523b5654d9 100644 --- a/geode-core/src/main/java/com/gemstone/gemfire/internal/memcached/commands/GATQCommand.java +++ b/geode-core/src/main/java/com/gemstone/gemfire/internal/memcached/commands/GATQCommand.java @@ -18,7 +18,6 @@ /** * - * @author Swapnil Bawaskar */ public class GATQCommand extends GATCommand { diff --git a/geode-core/src/main/java/com/gemstone/gemfire/internal/memcached/commands/GetCommand.java b/geode-core/src/main/java/com/gemstone/gemfire/internal/memcached/commands/GetCommand.java index 8fd08479ea4c..6085a75594e3 100644 --- a/geode-core/src/main/java/com/gemstone/gemfire/internal/memcached/commands/GetCommand.java +++ b/geode-core/src/main/java/com/gemstone/gemfire/internal/memcached/commands/GetCommand.java @@ -47,7 +47,6 @@ * <data block>\r\n * * - * @author Swapnil Bawaskar * */ public class GetCommand extends AbstractCommand { diff --git a/geode-core/src/main/java/com/gemstone/gemfire/internal/memcached/commands/GetKCommand.java b/geode-core/src/main/java/com/gemstone/gemfire/internal/memcached/commands/GetKCommand.java index 5ce0b9676fa1..015bcdf196f2 100644 --- a/geode-core/src/main/java/com/gemstone/gemfire/internal/memcached/commands/GetKCommand.java +++ b/geode-core/src/main/java/com/gemstone/gemfire/internal/memcached/commands/GetKCommand.java @@ -18,7 +18,6 @@ /** * - * @author Swapnil Bawaskar */ public class GetKCommand extends GetCommand { diff --git a/geode-core/src/main/java/com/gemstone/gemfire/internal/memcached/commands/GetKQCommand.java b/geode-core/src/main/java/com/gemstone/gemfire/internal/memcached/commands/GetKQCommand.java index 42897cb4e617..e62a1a5b08f9 100644 --- a/geode-core/src/main/java/com/gemstone/gemfire/internal/memcached/commands/GetKQCommand.java +++ b/geode-core/src/main/java/com/gemstone/gemfire/internal/memcached/commands/GetKQCommand.java @@ -18,7 +18,6 @@ /** * - * @author Swapnil Bawaskar * */ public class GetKQCommand extends GetKCommand { diff --git a/geode-core/src/main/java/com/gemstone/gemfire/internal/memcached/commands/GetQCommand.java b/geode-core/src/main/java/com/gemstone/gemfire/internal/memcached/commands/GetQCommand.java index c506d5ff4b8c..a737eaba79fa 100644 --- a/geode-core/src/main/java/com/gemstone/gemfire/internal/memcached/commands/GetQCommand.java +++ b/geode-core/src/main/java/com/gemstone/gemfire/internal/memcached/commands/GetQCommand.java @@ -27,7 +27,6 @@ /** * Does not send a response on a cache miss. * - * @author Swapnil Bawaskar */ public class GetQCommand extends GetCommand { diff --git a/geode-core/src/main/java/com/gemstone/gemfire/internal/memcached/commands/IncrementCommand.java b/geode-core/src/main/java/com/gemstone/gemfire/internal/memcached/commands/IncrementCommand.java index db9c78e8a4ad..7fa4920f26c0 100644 --- a/geode-core/src/main/java/com/gemstone/gemfire/internal/memcached/commands/IncrementCommand.java +++ b/geode-core/src/main/java/com/gemstone/gemfire/internal/memcached/commands/IncrementCommand.java @@ -41,7 +41,6 @@ * Also, the item must already exist for incr/decr to work; these commands won't pretend * that a non-existent key exists with value 0; instead, they will fail. * - * @author Swapnil Bawaskar * */ public class IncrementCommand extends AbstractCommand { diff --git a/geode-core/src/main/java/com/gemstone/gemfire/internal/memcached/commands/IncrementQCommand.java b/geode-core/src/main/java/com/gemstone/gemfire/internal/memcached/commands/IncrementQCommand.java index 1a269b25d3ab..44726fe32796 100644 --- a/geode-core/src/main/java/com/gemstone/gemfire/internal/memcached/commands/IncrementQCommand.java +++ b/geode-core/src/main/java/com/gemstone/gemfire/internal/memcached/commands/IncrementQCommand.java @@ -18,7 +18,6 @@ /** * - * @author Swapnil Bawaskar */ public class IncrementQCommand extends IncrementCommand { diff --git a/geode-core/src/main/java/com/gemstone/gemfire/internal/memcached/commands/NoOpCommand.java b/geode-core/src/main/java/com/gemstone/gemfire/internal/memcached/commands/NoOpCommand.java index 5d110659182a..cd8c751d53e3 100644 --- a/geode-core/src/main/java/com/gemstone/gemfire/internal/memcached/commands/NoOpCommand.java +++ b/geode-core/src/main/java/com/gemstone/gemfire/internal/memcached/commands/NoOpCommand.java @@ -24,7 +24,6 @@ /** * - * @author Swapnil Bawaskar */ public class NoOpCommand extends AbstractCommand { diff --git a/geode-core/src/main/java/com/gemstone/gemfire/internal/memcached/commands/NotSupportedCommand.java b/geode-core/src/main/java/com/gemstone/gemfire/internal/memcached/commands/NotSupportedCommand.java index 2c0d5a828f11..74f26507099f 100644 --- a/geode-core/src/main/java/com/gemstone/gemfire/internal/memcached/commands/NotSupportedCommand.java +++ b/geode-core/src/main/java/com/gemstone/gemfire/internal/memcached/commands/NotSupportedCommand.java @@ -25,7 +25,6 @@ /** * - * @author sbawaska */ public class NotSupportedCommand extends AbstractCommand { diff --git a/geode-core/src/main/java/com/gemstone/gemfire/internal/memcached/commands/PrependCommand.java b/geode-core/src/main/java/com/gemstone/gemfire/internal/memcached/commands/PrependCommand.java index d4e3c643a484..1fee290d3d87 100644 --- a/geode-core/src/main/java/com/gemstone/gemfire/internal/memcached/commands/PrependCommand.java +++ b/geode-core/src/main/java/com/gemstone/gemfire/internal/memcached/commands/PrependCommand.java @@ -28,7 +28,6 @@ /** * "prepend" means "add this data to an existing key before existing data". * - * @author Swapnil Bawaskar * */ public class PrependCommand extends StorageCommand { diff --git a/geode-core/src/main/java/com/gemstone/gemfire/internal/memcached/commands/PrependQCommand.java b/geode-core/src/main/java/com/gemstone/gemfire/internal/memcached/commands/PrependQCommand.java index b1eaad264079..19f5488cb096 100644 --- a/geode-core/src/main/java/com/gemstone/gemfire/internal/memcached/commands/PrependQCommand.java +++ b/geode-core/src/main/java/com/gemstone/gemfire/internal/memcached/commands/PrependQCommand.java @@ -18,7 +18,6 @@ /** * - * @author Swapnil Bawaskar */ public class PrependQCommand extends PrependCommand { diff --git a/geode-core/src/main/java/com/gemstone/gemfire/internal/memcached/commands/QuitCommand.java b/geode-core/src/main/java/com/gemstone/gemfire/internal/memcached/commands/QuitCommand.java index 0b1efa80cd3a..a8b732ef38d5 100644 --- a/geode-core/src/main/java/com/gemstone/gemfire/internal/memcached/commands/QuitCommand.java +++ b/geode-core/src/main/java/com/gemstone/gemfire/internal/memcached/commands/QuitCommand.java @@ -33,7 +33,6 @@ * connection. However, the client may also simply close the connection * when it no longer needs it, without issuing this command. * - * @author Swapnil Bawaskar * */ public class QuitCommand extends AbstractCommand { diff --git a/geode-core/src/main/java/com/gemstone/gemfire/internal/memcached/commands/QuitQCommand.java b/geode-core/src/main/java/com/gemstone/gemfire/internal/memcached/commands/QuitQCommand.java index 0c89474e0af7..cce240394176 100644 --- a/geode-core/src/main/java/com/gemstone/gemfire/internal/memcached/commands/QuitQCommand.java +++ b/geode-core/src/main/java/com/gemstone/gemfire/internal/memcached/commands/QuitQCommand.java @@ -18,7 +18,6 @@ /** * - * @author Swapnil Bawaskar */ public class QuitQCommand extends QuitCommand { diff --git a/geode-core/src/main/java/com/gemstone/gemfire/internal/memcached/commands/ReplaceCommand.java b/geode-core/src/main/java/com/gemstone/gemfire/internal/memcached/commands/ReplaceCommand.java index 79e322ce0baa..9e7a8a8396ea 100644 --- a/geode-core/src/main/java/com/gemstone/gemfire/internal/memcached/commands/ReplaceCommand.java +++ b/geode-core/src/main/java/com/gemstone/gemfire/internal/memcached/commands/ReplaceCommand.java @@ -34,7 +34,6 @@ * "replace" means "store this data, but only if the server *does* * already hold data for this key". * - * @author Swapnil Bawaskar */ public class ReplaceCommand extends StorageCommand { diff --git a/geode-core/src/main/java/com/gemstone/gemfire/internal/memcached/commands/ReplaceQCommand.java b/geode-core/src/main/java/com/gemstone/gemfire/internal/memcached/commands/ReplaceQCommand.java index 77069ca440e7..889764b079aa 100644 --- a/geode-core/src/main/java/com/gemstone/gemfire/internal/memcached/commands/ReplaceQCommand.java +++ b/geode-core/src/main/java/com/gemstone/gemfire/internal/memcached/commands/ReplaceQCommand.java @@ -18,7 +18,6 @@ /** * - * @author Swapnil Bawaskar */ public class ReplaceQCommand extends ReplaceCommand { diff --git a/geode-core/src/main/java/com/gemstone/gemfire/internal/memcached/commands/SetCommand.java b/geode-core/src/main/java/com/gemstone/gemfire/internal/memcached/commands/SetCommand.java index 8c93728bffd2..24c6de092553 100644 --- a/geode-core/src/main/java/com/gemstone/gemfire/internal/memcached/commands/SetCommand.java +++ b/geode-core/src/main/java/com/gemstone/gemfire/internal/memcached/commands/SetCommand.java @@ -33,7 +33,6 @@ * * "set" means "store this data". * - * @author Swapnil Bawaskar * */ public class SetCommand extends StorageCommand { diff --git a/geode-core/src/main/java/com/gemstone/gemfire/internal/memcached/commands/SetQCommand.java b/geode-core/src/main/java/com/gemstone/gemfire/internal/memcached/commands/SetQCommand.java index 2e915222a0fa..4f34832b1548 100644 --- a/geode-core/src/main/java/com/gemstone/gemfire/internal/memcached/commands/SetQCommand.java +++ b/geode-core/src/main/java/com/gemstone/gemfire/internal/memcached/commands/SetQCommand.java @@ -18,7 +18,6 @@ /** * - * @author Swapnil Bawaskar * */ public class SetQCommand extends SetCommand { diff --git a/geode-core/src/main/java/com/gemstone/gemfire/internal/memcached/commands/StatsCommand.java b/geode-core/src/main/java/com/gemstone/gemfire/internal/memcached/commands/StatsCommand.java index c8b190809159..234bf68914fd 100644 --- a/geode-core/src/main/java/com/gemstone/gemfire/internal/memcached/commands/StatsCommand.java +++ b/geode-core/src/main/java/com/gemstone/gemfire/internal/memcached/commands/StatsCommand.java @@ -33,7 +33,6 @@ * stats\r\n * it causes the server to output general-purpose statistics * - * @author Swapnil Bawaskar * */ public class StatsCommand extends AbstractCommand { diff --git a/geode-core/src/main/java/com/gemstone/gemfire/internal/memcached/commands/StorageCommand.java b/geode-core/src/main/java/com/gemstone/gemfire/internal/memcached/commands/StorageCommand.java index a4482fb14675..caa20f3af6a7 100644 --- a/geode-core/src/main/java/com/gemstone/gemfire/internal/memcached/commands/StorageCommand.java +++ b/geode-core/src/main/java/com/gemstone/gemfire/internal/memcached/commands/StorageCommand.java @@ -44,7 +44,6 @@ * <data block>\r\n * * - * @author Swapnil Bawaskar */ public abstract class StorageCommand extends AbstractCommand { diff --git a/geode-core/src/main/java/com/gemstone/gemfire/internal/memcached/commands/TouchCommand.java b/geode-core/src/main/java/com/gemstone/gemfire/internal/memcached/commands/TouchCommand.java index 78da166be523..7a025dd96385 100644 --- a/geode-core/src/main/java/com/gemstone/gemfire/internal/memcached/commands/TouchCommand.java +++ b/geode-core/src/main/java/com/gemstone/gemfire/internal/memcached/commands/TouchCommand.java @@ -28,7 +28,6 @@ /** * - * @author Swapnil Bawaskar */ public class TouchCommand extends AbstractCommand { diff --git a/geode-core/src/main/java/com/gemstone/gemfire/internal/memcached/commands/VerbosityCommand.java b/geode-core/src/main/java/com/gemstone/gemfire/internal/memcached/commands/VerbosityCommand.java index 0be31605fa21..bf4185b258c3 100644 --- a/geode-core/src/main/java/com/gemstone/gemfire/internal/memcached/commands/VerbosityCommand.java +++ b/geode-core/src/main/java/com/gemstone/gemfire/internal/memcached/commands/VerbosityCommand.java @@ -32,7 +32,6 @@ * the logging output. * * - * @author Swapnil Bawaskar * */ public class VerbosityCommand extends AbstractCommand { diff --git a/geode-core/src/main/java/com/gemstone/gemfire/internal/memcached/commands/VersionCommand.java b/geode-core/src/main/java/com/gemstone/gemfire/internal/memcached/commands/VersionCommand.java index 88cb2107f628..98fbc13d9c50 100644 --- a/geode-core/src/main/java/com/gemstone/gemfire/internal/memcached/commands/VersionCommand.java +++ b/geode-core/src/main/java/com/gemstone/gemfire/internal/memcached/commands/VersionCommand.java @@ -26,7 +26,6 @@ /** * Sends current version of gemcached server to the client * - * @author Swapnil Bawaskar * */ public class VersionCommand extends AbstractCommand { diff --git a/geode-core/src/main/java/com/gemstone/gemfire/internal/modules/util/RegionConfiguration.java b/geode-core/src/main/java/com/gemstone/gemfire/internal/modules/util/RegionConfiguration.java index 2def6e77b2c4..5ad8152fbd2b 100644 --- a/geode-core/src/main/java/com/gemstone/gemfire/internal/modules/util/RegionConfiguration.java +++ b/geode-core/src/main/java/com/gemstone/gemfire/internal/modules/util/RegionConfiguration.java @@ -30,7 +30,6 @@ * Class RegionConfiguration encapsulates the configuration * attributes for a Region to be created on the server. * - * @author Barry Oglesby * * @since 6.5 */ diff --git a/geode-core/src/main/java/com/gemstone/gemfire/internal/net/SocketUtils.java b/geode-core/src/main/java/com/gemstone/gemfire/internal/net/SocketUtils.java index 3379b78a9a64..464484afd3d0 100644 --- a/geode-core/src/main/java/com/gemstone/gemfire/internal/net/SocketUtils.java +++ b/geode-core/src/main/java/com/gemstone/gemfire/internal/net/SocketUtils.java @@ -24,7 +24,6 @@ /** * The SocketUtils class is utility class for performing operations on Sockets and ServerSockets. *

    - * @author John Blum * @see java.net.ServerSocket * @see java.net.Socket * @since 7.0 diff --git a/geode-core/src/main/java/com/gemstone/gemfire/internal/offheap/ByteArrayMemoryChunk.java b/geode-core/src/main/java/com/gemstone/gemfire/internal/offheap/ByteArrayMemoryChunk.java index cd0225908d28..3f8ae3a55384 100644 --- a/geode-core/src/main/java/com/gemstone/gemfire/internal/offheap/ByteArrayMemoryChunk.java +++ b/geode-core/src/main/java/com/gemstone/gemfire/internal/offheap/ByteArrayMemoryChunk.java @@ -20,7 +20,6 @@ * The read and write methods on this implementation will throw ArrayIndexOutOfBoundsException * if the offset extends past the end of the underlying array of if an attempt is made to read or write past the end of the array. * - * @author darrel * @since 9.0 */ public class ByteArrayMemoryChunk implements MemoryChunk { diff --git a/geode-core/src/main/java/com/gemstone/gemfire/internal/offheap/ByteBufferMemoryChunk.java b/geode-core/src/main/java/com/gemstone/gemfire/internal/offheap/ByteBufferMemoryChunk.java index 1c030f797d62..cf41ee677418 100644 --- a/geode-core/src/main/java/com/gemstone/gemfire/internal/offheap/ByteBufferMemoryChunk.java +++ b/geode-core/src/main/java/com/gemstone/gemfire/internal/offheap/ByteBufferMemoryChunk.java @@ -23,7 +23,6 @@ * BufferUnderflowException will be thrown if an attempt to read more data than exists is made. * BufferOverflowException will be thrown if an attempt to write past the end of the chunk is made. * - * @author darrel * @since 9.0 */ public class ByteBufferMemoryChunk implements MemoryChunk { diff --git a/geode-core/src/main/java/com/gemstone/gemfire/internal/offheap/DataType.java b/geode-core/src/main/java/com/gemstone/gemfire/internal/offheap/DataType.java index 948fcd95fa7f..c6bbbd140374 100755 --- a/geode-core/src/main/java/com/gemstone/gemfire/internal/offheap/DataType.java +++ b/geode-core/src/main/java/com/gemstone/gemfire/internal/offheap/DataType.java @@ -36,7 +36,6 @@ * Determines the data type of the bytes in an off-heap MemoryBlock. This is * used by the tests for inspection of the off-heap memory. * - * @author Kirk Lund * @since 9.0 */ public class DataType implements DSCODE { diff --git a/geode-core/src/main/java/com/gemstone/gemfire/internal/offheap/LifecycleListener.java b/geode-core/src/main/java/com/gemstone/gemfire/internal/offheap/LifecycleListener.java index 613b12aa2476..e987a0e2bd91 100644 --- a/geode-core/src/main/java/com/gemstone/gemfire/internal/offheap/LifecycleListener.java +++ b/geode-core/src/main/java/com/gemstone/gemfire/internal/offheap/LifecycleListener.java @@ -24,7 +24,6 @@ * Used by tests to get notifications about the lifecycle of a * SimpleMemoryAllocatorImpl. * - * @author Kirk Lund */ public interface LifecycleListener { diff --git a/geode-core/src/main/java/com/gemstone/gemfire/internal/offheap/MemoryChunk.java b/geode-core/src/main/java/com/gemstone/gemfire/internal/offheap/MemoryChunk.java index 012fbe5cdd55..dd169157f21d 100644 --- a/geode-core/src/main/java/com/gemstone/gemfire/internal/offheap/MemoryChunk.java +++ b/geode-core/src/main/java/com/gemstone/gemfire/internal/offheap/MemoryChunk.java @@ -20,7 +20,6 @@ * Represents a chunk of allocated memory that is not on the heap. * This interface provides methods that let you read and write to the chunk. * - * @author darrel * @since 9.0 */ public interface MemoryChunk extends Releasable { diff --git a/geode-core/src/main/java/com/gemstone/gemfire/internal/offheap/MemoryChunkWithRefCount.java b/geode-core/src/main/java/com/gemstone/gemfire/internal/offheap/MemoryChunkWithRefCount.java index e3ba6abb47fe..06ee0233221f 100644 --- a/geode-core/src/main/java/com/gemstone/gemfire/internal/offheap/MemoryChunkWithRefCount.java +++ b/geode-core/src/main/java/com/gemstone/gemfire/internal/offheap/MemoryChunkWithRefCount.java @@ -22,7 +22,6 @@ * To increment the count call {@link #retain()}. * To decrement the count call {@link #release()}. * - * @author darrel * @since 9.0 */ public interface MemoryChunkWithRefCount extends MemoryChunk, StoredObject { diff --git a/geode-core/src/main/java/com/gemstone/gemfire/internal/offheap/MemoryInspector.java b/geode-core/src/main/java/com/gemstone/gemfire/internal/offheap/MemoryInspector.java index c904cd30bb42..c14d44513fce 100755 --- a/geode-core/src/main/java/com/gemstone/gemfire/internal/offheap/MemoryInspector.java +++ b/geode-core/src/main/java/com/gemstone/gemfire/internal/offheap/MemoryInspector.java @@ -21,7 +21,6 @@ /** * Provides for inspection of meta-data for off-heap memory blocks. * - * @author Kirk Lund * @since 9.0 */ public interface MemoryInspector { diff --git a/geode-core/src/main/java/com/gemstone/gemfire/internal/offheap/MemoryUsageListener.java b/geode-core/src/main/java/com/gemstone/gemfire/internal/offheap/MemoryUsageListener.java index 48cbaa8ffe8c..6e8f79fc36f0 100644 --- a/geode-core/src/main/java/com/gemstone/gemfire/internal/offheap/MemoryUsageListener.java +++ b/geode-core/src/main/java/com/gemstone/gemfire/internal/offheap/MemoryUsageListener.java @@ -19,7 +19,6 @@ /** * Defines callback for notification when off-heap memory usage changes. * - * @author Kirk Lund * @since 9.0 */ public interface MemoryUsageListener { diff --git a/geode-core/src/main/java/com/gemstone/gemfire/internal/offheap/OffHeapHelper.java b/geode-core/src/main/java/com/gemstone/gemfire/internal/offheap/OffHeapHelper.java index 484593169333..fb18b6f63da6 100644 --- a/geode-core/src/main/java/com/gemstone/gemfire/internal/offheap/OffHeapHelper.java +++ b/geode-core/src/main/java/com/gemstone/gemfire/internal/offheap/OffHeapHelper.java @@ -24,7 +24,6 @@ /** * Utility class that provides static method to do some common tasks for off-heap references. * - * @author darrel * @since 9.0 */ public class OffHeapHelper { diff --git a/geode-core/src/main/java/com/gemstone/gemfire/internal/offheap/OffHeapMemoryStats.java b/geode-core/src/main/java/com/gemstone/gemfire/internal/offheap/OffHeapMemoryStats.java index 790e43df870e..0deca809686f 100755 --- a/geode-core/src/main/java/com/gemstone/gemfire/internal/offheap/OffHeapMemoryStats.java +++ b/geode-core/src/main/java/com/gemstone/gemfire/internal/offheap/OffHeapMemoryStats.java @@ -21,7 +21,6 @@ /** * Statistics for off-heap memory storage. * - * @author Kirk Lund * @since 9.0 */ public interface OffHeapMemoryStats { diff --git a/geode-core/src/main/java/com/gemstone/gemfire/internal/offheap/OffHeapStorage.java b/geode-core/src/main/java/com/gemstone/gemfire/internal/offheap/OffHeapStorage.java index bb5cdebfd0b8..a266dc3830e6 100755 --- a/geode-core/src/main/java/com/gemstone/gemfire/internal/offheap/OffHeapStorage.java +++ b/geode-core/src/main/java/com/gemstone/gemfire/internal/offheap/OffHeapStorage.java @@ -36,8 +36,6 @@ /** * Enables off-heap storage by creating a MemoryAllocator. * - * @author Darrel Schneider - * @author Kirk Lund * @since 9.0 */ public class OffHeapStorage implements OffHeapMemoryStats { diff --git a/geode-core/src/main/java/com/gemstone/gemfire/internal/offheap/OutOfOffHeapMemoryListener.java b/geode-core/src/main/java/com/gemstone/gemfire/internal/offheap/OutOfOffHeapMemoryListener.java index 6a043edf521f..2a346e8f1bca 100755 --- a/geode-core/src/main/java/com/gemstone/gemfire/internal/offheap/OutOfOffHeapMemoryListener.java +++ b/geode-core/src/main/java/com/gemstone/gemfire/internal/offheap/OutOfOffHeapMemoryListener.java @@ -25,7 +25,6 @@ * connection causes the System and Cache to close in order to avoid data * inconsistency. * - * @author Kirk Lund * @since 9.0 */ public interface OutOfOffHeapMemoryListener { diff --git a/geode-core/src/main/java/com/gemstone/gemfire/internal/offheap/Releasable.java b/geode-core/src/main/java/com/gemstone/gemfire/internal/offheap/Releasable.java index e093dd293c98..3b9a17c3e541 100644 --- a/geode-core/src/main/java/com/gemstone/gemfire/internal/offheap/Releasable.java +++ b/geode-core/src/main/java/com/gemstone/gemfire/internal/offheap/Releasable.java @@ -20,7 +20,6 @@ * Instances that implement this interface must have release called on them * before the instance becomes garbage. * - * @author darrel * @since 9.0 */ public interface Releasable { diff --git a/geode-core/src/main/java/com/gemstone/gemfire/internal/offheap/StoredObject.java b/geode-core/src/main/java/com/gemstone/gemfire/internal/offheap/StoredObject.java index 4d93a07d04bf..46461d3933c6 100644 --- a/geode-core/src/main/java/com/gemstone/gemfire/internal/offheap/StoredObject.java +++ b/geode-core/src/main/java/com/gemstone/gemfire/internal/offheap/StoredObject.java @@ -28,7 +28,6 @@ * Currently this interface is only used for values stored in off-heap regions. * At some point in the future it may also be used for values stored in heap regions. * - * @author darrel * @since 9.0 */ public interface StoredObject extends Releasable, Sendable, CachedDeserializable { diff --git a/geode-core/src/main/java/com/gemstone/gemfire/internal/offheap/annotations/OffHeapIdentifier.java b/geode-core/src/main/java/com/gemstone/gemfire/internal/offheap/annotations/OffHeapIdentifier.java index 054e2f8e2f19..e275467a67fd 100644 --- a/geode-core/src/main/java/com/gemstone/gemfire/internal/offheap/annotations/OffHeapIdentifier.java +++ b/geode-core/src/main/java/com/gemstone/gemfire/internal/offheap/annotations/OffHeapIdentifier.java @@ -20,7 +20,6 @@ /** * Used for uniquely identifying off-heap annotations. - * @author rholmes */ public enum OffHeapIdentifier { /** diff --git a/geode-core/src/main/java/com/gemstone/gemfire/internal/offheap/annotations/Released.java b/geode-core/src/main/java/com/gemstone/gemfire/internal/offheap/annotations/Released.java index 4d19e3f07ddb..6f22ac3d4c10 100644 --- a/geode-core/src/main/java/com/gemstone/gemfire/internal/offheap/annotations/Released.java +++ b/geode-core/src/main/java/com/gemstone/gemfire/internal/offheap/annotations/Released.java @@ -36,7 +36,6 @@ * One or more OffHeapIdentifiers may be supplied if the developer wishes to link this annotation with other * off-heap annotations. * - * @author rholmes */ @Retention(RetentionPolicy.SOURCE) @Target({ElementType.PARAMETER, diff --git a/geode-core/src/main/java/com/gemstone/gemfire/internal/offheap/annotations/Retained.java b/geode-core/src/main/java/com/gemstone/gemfire/internal/offheap/annotations/Retained.java index 7bb8b4b8e601..9bc1c644d2eb 100644 --- a/geode-core/src/main/java/com/gemstone/gemfire/internal/offheap/annotations/Retained.java +++ b/geode-core/src/main/java/com/gemstone/gemfire/internal/offheap/annotations/Retained.java @@ -37,7 +37,6 @@ * One or more OffHeapIdentifiers may be supplied if the developer wishes to link this annotation with other * off-heap annotations. * - * @author rholmes */ @Retention(RetentionPolicy.SOURCE) @Target({ElementType.PARAMETER, diff --git a/geode-core/src/main/java/com/gemstone/gemfire/internal/offheap/annotations/Unretained.java b/geode-core/src/main/java/com/gemstone/gemfire/internal/offheap/annotations/Unretained.java index 72f206e37739..a5bcf22cd819 100644 --- a/geode-core/src/main/java/com/gemstone/gemfire/internal/offheap/annotations/Unretained.java +++ b/geode-core/src/main/java/com/gemstone/gemfire/internal/offheap/annotations/Unretained.java @@ -37,7 +37,6 @@ * One or more OffHeapIdentifiers may be supplied if the developer wishes to link this annotation with other * off-heap annotations. * - * @author rholmes */ @Retention(RetentionPolicy.SOURCE) @Target({ElementType.METHOD, diff --git a/geode-core/src/main/java/com/gemstone/gemfire/internal/process/AttachProcessUtils.java b/geode-core/src/main/java/com/gemstone/gemfire/internal/process/AttachProcessUtils.java index 3fe758e08e86..54f0b4b58002 100755 --- a/geode-core/src/main/java/com/gemstone/gemfire/internal/process/AttachProcessUtils.java +++ b/geode-core/src/main/java/com/gemstone/gemfire/internal/process/AttachProcessUtils.java @@ -23,7 +23,6 @@ /** * Implementation of the {@link ProcessUtils} SPI that uses the JDK Attach API. * - * @author Kirk Lund * @since 8.0 */ final class AttachProcessUtils implements InternalProcessUtils { diff --git a/geode-core/src/main/java/com/gemstone/gemfire/internal/process/BlockingProcessStreamReader.java b/geode-core/src/main/java/com/gemstone/gemfire/internal/process/BlockingProcessStreamReader.java index 7d5767bb04f2..b3d5f20fda88 100755 --- a/geode-core/src/main/java/com/gemstone/gemfire/internal/process/BlockingProcessStreamReader.java +++ b/geode-core/src/main/java/com/gemstone/gemfire/internal/process/BlockingProcessStreamReader.java @@ -30,7 +30,6 @@ * * Extracted from ProcessStreamReader. * - * @author Kirk Lund * @since 8.2 */ public final class BlockingProcessStreamReader extends ProcessStreamReader { diff --git a/geode-core/src/main/java/com/gemstone/gemfire/internal/process/ClusterConfigurationNotAvailableException.java b/geode-core/src/main/java/com/gemstone/gemfire/internal/process/ClusterConfigurationNotAvailableException.java index fc8aff3643b1..a8f17c49ed04 100644 --- a/geode-core/src/main/java/com/gemstone/gemfire/internal/process/ClusterConfigurationNotAvailableException.java +++ b/geode-core/src/main/java/com/gemstone/gemfire/internal/process/ClusterConfigurationNotAvailableException.java @@ -19,7 +19,6 @@ /** * Exception thrown during server startup when it requests the locators for shared configuration and does not receive it. * - * @author bansods * @since 8.0 */ public final class ClusterConfigurationNotAvailableException extends RuntimeException { diff --git a/geode-core/src/main/java/com/gemstone/gemfire/internal/process/ConnectionFailedException.java b/geode-core/src/main/java/com/gemstone/gemfire/internal/process/ConnectionFailedException.java index cafdbf3f47bb..e5b3064a7990 100755 --- a/geode-core/src/main/java/com/gemstone/gemfire/internal/process/ConnectionFailedException.java +++ b/geode-core/src/main/java/com/gemstone/gemfire/internal/process/ConnectionFailedException.java @@ -19,7 +19,6 @@ /** * A ConnectionFailedException is thrown if connection to a process fails. * - * @author Kirk Lund * @since 7.0 */ public final class ConnectionFailedException extends Exception { diff --git a/geode-core/src/main/java/com/gemstone/gemfire/internal/process/ControlFileWatchdog.java b/geode-core/src/main/java/com/gemstone/gemfire/internal/process/ControlFileWatchdog.java index ca917b2e8bf5..f94c5e8258bf 100755 --- a/geode-core/src/main/java/com/gemstone/gemfire/internal/process/ControlFileWatchdog.java +++ b/geode-core/src/main/java/com/gemstone/gemfire/internal/process/ControlFileWatchdog.java @@ -26,7 +26,6 @@ /** * Invokes a ControlRequestHandler when a control file has been created. * - * @author Kirk Lund * @since 8.0 */ final class ControlFileWatchdog implements Runnable { diff --git a/geode-core/src/main/java/com/gemstone/gemfire/internal/process/ControlNotificationHandler.java b/geode-core/src/main/java/com/gemstone/gemfire/internal/process/ControlNotificationHandler.java index 3f9938097eb3..b52384c07953 100755 --- a/geode-core/src/main/java/com/gemstone/gemfire/internal/process/ControlNotificationHandler.java +++ b/geode-core/src/main/java/com/gemstone/gemfire/internal/process/ControlNotificationHandler.java @@ -23,7 +23,6 @@ * Separated from ControllableProcess so that an internal object can implement * this to avoid exposing these methods via the customer API. * - * @author Kirk Lund * @since 8.0 */ public interface ControlNotificationHandler { diff --git a/geode-core/src/main/java/com/gemstone/gemfire/internal/process/ControllableProcess.java b/geode-core/src/main/java/com/gemstone/gemfire/internal/process/ControllableProcess.java index 12a3130431b2..f459aed93e21 100755 --- a/geode-core/src/main/java/com/gemstone/gemfire/internal/process/ControllableProcess.java +++ b/geode-core/src/main/java/com/gemstone/gemfire/internal/process/ControllableProcess.java @@ -31,7 +31,6 @@ * Creates the PID file and ControlFileWatchdogs to monitor working directory * for creation of stop or status request files. * - * @author Kirk Lund * @since 8.0 */ public final class ControllableProcess { diff --git a/geode-core/src/main/java/com/gemstone/gemfire/internal/process/FileAlreadyExistsException.java b/geode-core/src/main/java/com/gemstone/gemfire/internal/process/FileAlreadyExistsException.java index 4e3d1e0bc9f2..7cf6c73cbdf1 100755 --- a/geode-core/src/main/java/com/gemstone/gemfire/internal/process/FileAlreadyExistsException.java +++ b/geode-core/src/main/java/com/gemstone/gemfire/internal/process/FileAlreadyExistsException.java @@ -21,7 +21,6 @@ * and the launcher expects to create a new pid file without forcing the * deletion of the old one. * - * @author Kirk Lund * @since 7.0 */ public final class FileAlreadyExistsException extends Exception { diff --git a/geode-core/src/main/java/com/gemstone/gemfire/internal/process/FileControllerParameters.java b/geode-core/src/main/java/com/gemstone/gemfire/internal/process/FileControllerParameters.java index 055723ccd42b..eb98233408dc 100755 --- a/geode-core/src/main/java/com/gemstone/gemfire/internal/process/FileControllerParameters.java +++ b/geode-core/src/main/java/com/gemstone/gemfire/internal/process/FileControllerParameters.java @@ -24,7 +24,6 @@ * Defines {@link ProcessController} {@link Arguments} that must be implemented * to support the {@link FileProcessController}. * - * @author Kirk Lund * @since 8.0 */ interface FileControllerParameters extends Arguments { diff --git a/geode-core/src/main/java/com/gemstone/gemfire/internal/process/FileProcessController.java b/geode-core/src/main/java/com/gemstone/gemfire/internal/process/FileProcessController.java index f635bfb57e82..45c5bbacb8ea 100755 --- a/geode-core/src/main/java/com/gemstone/gemfire/internal/process/FileProcessController.java +++ b/geode-core/src/main/java/com/gemstone/gemfire/internal/process/FileProcessController.java @@ -35,7 +35,6 @@ * Controls a {@link ControllableProcess} using files to communicate between * processes. * - * @author Kirk Lund * @since 8.0 */ public class FileProcessController implements ProcessController { diff --git a/geode-core/src/main/java/com/gemstone/gemfire/internal/process/LocalProcessController.java b/geode-core/src/main/java/com/gemstone/gemfire/internal/process/LocalProcessController.java index c0e3a9fa3c2f..4339a53453c8 100755 --- a/geode-core/src/main/java/com/gemstone/gemfire/internal/process/LocalProcessController.java +++ b/geode-core/src/main/java/com/gemstone/gemfire/internal/process/LocalProcessController.java @@ -46,7 +46,6 @@ /** * Attaches to a local process to control it via JMX. * - * @author Kirk Lund * @since 7.0 * @deprecated as of 8.0 please use {@link ControllableProcess} instead */ diff --git a/geode-core/src/main/java/com/gemstone/gemfire/internal/process/LocalProcessLauncher.java b/geode-core/src/main/java/com/gemstone/gemfire/internal/process/LocalProcessLauncher.java index 9962345971de..4840d75223ef 100755 --- a/geode-core/src/main/java/com/gemstone/gemfire/internal/process/LocalProcessLauncher.java +++ b/geode-core/src/main/java/com/gemstone/gemfire/internal/process/LocalProcessLauncher.java @@ -32,7 +32,6 @@ *

  • http://weblogs.java.net/blog/kohsuke/archive/2009/01/writing_a_unix.html *
  • http://www.enderunix.org/docs/eng/daemon.php * - * @author Kirk Lund * @since 7.0 */ public final class LocalProcessLauncher { diff --git a/geode-core/src/main/java/com/gemstone/gemfire/internal/process/MBeanControllerParameters.java b/geode-core/src/main/java/com/gemstone/gemfire/internal/process/MBeanControllerParameters.java index fe0be77ff7d8..b006ba6bc12f 100755 --- a/geode-core/src/main/java/com/gemstone/gemfire/internal/process/MBeanControllerParameters.java +++ b/geode-core/src/main/java/com/gemstone/gemfire/internal/process/MBeanControllerParameters.java @@ -24,7 +24,6 @@ * Defines {@link ProcessController} {@link Arguments} that must be implemented * to support the {@link MBeanProcessController}. - * @author Kirk Lund * @since 8.0 */ interface MBeanControllerParameters extends Arguments { diff --git a/geode-core/src/main/java/com/gemstone/gemfire/internal/process/MBeanInvocationFailedException.java b/geode-core/src/main/java/com/gemstone/gemfire/internal/process/MBeanInvocationFailedException.java index d472faa55a41..fd801487e5a5 100755 --- a/geode-core/src/main/java/com/gemstone/gemfire/internal/process/MBeanInvocationFailedException.java +++ b/geode-core/src/main/java/com/gemstone/gemfire/internal/process/MBeanInvocationFailedException.java @@ -19,7 +19,6 @@ /** * A MBeanInvocationFailedException is thrown if invocation of the mbean failed. * - * @author Kirk Lund * @since 7.0 */ public final class MBeanInvocationFailedException extends Exception { diff --git a/geode-core/src/main/java/com/gemstone/gemfire/internal/process/MBeanProcessController.java b/geode-core/src/main/java/com/gemstone/gemfire/internal/process/MBeanProcessController.java index a63fa0967f80..eaafb8dd72a8 100755 --- a/geode-core/src/main/java/com/gemstone/gemfire/internal/process/MBeanProcessController.java +++ b/geode-core/src/main/java/com/gemstone/gemfire/internal/process/MBeanProcessController.java @@ -43,7 +43,6 @@ * Controls a {@link ControllableProcess} using the Attach API to manipulate * MBeans. * - * @author Kirk Lund * @since 8.0 */ public final class MBeanProcessController implements ProcessController { diff --git a/geode-core/src/main/java/com/gemstone/gemfire/internal/process/NativeProcessUtils.java b/geode-core/src/main/java/com/gemstone/gemfire/internal/process/NativeProcessUtils.java index 26a77224bac4..eca48ebe463d 100755 --- a/geode-core/src/main/java/com/gemstone/gemfire/internal/process/NativeProcessUtils.java +++ b/geode-core/src/main/java/com/gemstone/gemfire/internal/process/NativeProcessUtils.java @@ -22,7 +22,6 @@ /** * Implementation of the {@link ProcessUtils} SPI that uses {@link NativeCalls}. * - * @author Kirk Lund * @since 8.0 */ final class NativeProcessUtils implements InternalProcessUtils { diff --git a/geode-core/src/main/java/com/gemstone/gemfire/internal/process/NonBlockingProcessStreamReader.java b/geode-core/src/main/java/com/gemstone/gemfire/internal/process/NonBlockingProcessStreamReader.java index f0f565e96f8d..89e5a52d2769 100755 --- a/geode-core/src/main/java/com/gemstone/gemfire/internal/process/NonBlockingProcessStreamReader.java +++ b/geode-core/src/main/java/com/gemstone/gemfire/internal/process/NonBlockingProcessStreamReader.java @@ -31,7 +31,6 @@ * continue reading after the Process terminates in order to fully read the last * of that Process' output (such as a stack trace). * - * @author Kirk Lund * @since 8.2 */ public final class NonBlockingProcessStreamReader extends ProcessStreamReader { diff --git a/geode-core/src/main/java/com/gemstone/gemfire/internal/process/PidFile.java b/geode-core/src/main/java/com/gemstone/gemfire/internal/process/PidFile.java index d1bf46bef9ec..0c5e92b1bae0 100755 --- a/geode-core/src/main/java/com/gemstone/gemfire/internal/process/PidFile.java +++ b/geode-core/src/main/java/com/gemstone/gemfire/internal/process/PidFile.java @@ -32,7 +32,6 @@ * File wrapper that adds support for reading process id (pid) from a pid file * written to disk by GemFire processes. * - * @author Kirk Lund * @since 8.2 */ public class PidFile { diff --git a/geode-core/src/main/java/com/gemstone/gemfire/internal/process/PidUnavailableException.java b/geode-core/src/main/java/com/gemstone/gemfire/internal/process/PidUnavailableException.java index 8352030b3657..1e7e4d5427ca 100755 --- a/geode-core/src/main/java/com/gemstone/gemfire/internal/process/PidUnavailableException.java +++ b/geode-core/src/main/java/com/gemstone/gemfire/internal/process/PidUnavailableException.java @@ -20,7 +20,6 @@ * A PidUnavailableException is thrown when the pid cannot be parsed from * the RuntimeMXBean name or otherwise determined. * - * @author Kirk Lund * @since 7.0 */ public final class PidUnavailableException extends Exception { diff --git a/geode-core/src/main/java/com/gemstone/gemfire/internal/process/ProcessController.java b/geode-core/src/main/java/com/gemstone/gemfire/internal/process/ProcessController.java index 71fb2e348c68..44d212a4b89c 100755 --- a/geode-core/src/main/java/com/gemstone/gemfire/internal/process/ProcessController.java +++ b/geode-core/src/main/java/com/gemstone/gemfire/internal/process/ProcessController.java @@ -22,7 +22,6 @@ /** * Defines the operations for controlling a running process. * - * @author Kirk Lund * @since 8.0 */ public interface ProcessController { diff --git a/geode-core/src/main/java/com/gemstone/gemfire/internal/process/ProcessControllerFactory.java b/geode-core/src/main/java/com/gemstone/gemfire/internal/process/ProcessControllerFactory.java index 356e643b58c9..139196175eac 100755 --- a/geode-core/src/main/java/com/gemstone/gemfire/internal/process/ProcessControllerFactory.java +++ b/geode-core/src/main/java/com/gemstone/gemfire/internal/process/ProcessControllerFactory.java @@ -32,7 +32,6 @@ * Manages which implementation of {@link ProcessController} will be used and * constructs the instance. * - * @author Kirk Lund * @since 8.0 */ public final class ProcessControllerFactory { diff --git a/geode-core/src/main/java/com/gemstone/gemfire/internal/process/ProcessControllerParameters.java b/geode-core/src/main/java/com/gemstone/gemfire/internal/process/ProcessControllerParameters.java index eddadb5fbc13..849e32734f76 100755 --- a/geode-core/src/main/java/com/gemstone/gemfire/internal/process/ProcessControllerParameters.java +++ b/geode-core/src/main/java/com/gemstone/gemfire/internal/process/ProcessControllerParameters.java @@ -23,7 +23,6 @@ * implement ProcessControllerArguments would typically be in a different * package. * - * @author Kirk Lund * @since 8.0 */ public interface ProcessControllerParameters extends FileControllerParameters, MBeanControllerParameters { diff --git a/geode-core/src/main/java/com/gemstone/gemfire/internal/process/ProcessLauncherContext.java b/geode-core/src/main/java/com/gemstone/gemfire/internal/process/ProcessLauncherContext.java index a1a0f1714911..c85567dde5e7 100644 --- a/geode-core/src/main/java/com/gemstone/gemfire/internal/process/ProcessLauncherContext.java +++ b/geode-core/src/main/java/com/gemstone/gemfire/internal/process/ProcessLauncherContext.java @@ -31,7 +31,6 @@ * Thread based context for launching a process. GemFire internals can acquire * optional configuration details from a process launcher via this context. * - * @author Kirk Lund * @since 7.0 */ public final class ProcessLauncherContext { diff --git a/geode-core/src/main/java/com/gemstone/gemfire/internal/process/ProcessStreamReader.java b/geode-core/src/main/java/com/gemstone/gemfire/internal/process/ProcessStreamReader.java index ca462d069e64..26b10a9d90bb 100755 --- a/geode-core/src/main/java/com/gemstone/gemfire/internal/process/ProcessStreamReader.java +++ b/geode-core/src/main/java/com/gemstone/gemfire/internal/process/ProcessStreamReader.java @@ -28,7 +28,6 @@ /** * Reads the output stream of a Process. * - * @author Kirk Lund * @since 7.0 */ public abstract class ProcessStreamReader implements Runnable { @@ -209,7 +208,6 @@ public static enum ReadingMode { /** * Builds a ProcessStreamReader. * - * @author Kirk Lund * @since 8.2 */ public static class Builder { diff --git a/geode-core/src/main/java/com/gemstone/gemfire/internal/process/ProcessTerminatedAbnormallyException.java b/geode-core/src/main/java/com/gemstone/gemfire/internal/process/ProcessTerminatedAbnormallyException.java index 7be420cc795b..9ca54f92d7be 100644 --- a/geode-core/src/main/java/com/gemstone/gemfire/internal/process/ProcessTerminatedAbnormallyException.java +++ b/geode-core/src/main/java/com/gemstone/gemfire/internal/process/ProcessTerminatedAbnormallyException.java @@ -23,7 +23,6 @@ * The ProcessTerminatedAbnormallyException class is a GemFireException (or RuntimeException) indicating that a process * terminated abnormally, and it's exit code is captured along with this RuntimeException. *

    - * @author John Blum * @see com.gemstone.gemfire.GemFireException * @since 7.0 */ diff --git a/geode-core/src/main/java/com/gemstone/gemfire/internal/process/ProcessType.java b/geode-core/src/main/java/com/gemstone/gemfire/internal/process/ProcessType.java index 4fa0ead79725..6b0c3091236c 100755 --- a/geode-core/src/main/java/com/gemstone/gemfire/internal/process/ProcessType.java +++ b/geode-core/src/main/java/com/gemstone/gemfire/internal/process/ProcessType.java @@ -20,7 +20,6 @@ * Enumeration of GemFire {@link ControllableProcess} types and the file names * associated with controlling its lifecycle. * - * @author Kirk Lund * @since 8.0 */ public enum ProcessType { diff --git a/geode-core/src/main/java/com/gemstone/gemfire/internal/process/ProcessUtils.java b/geode-core/src/main/java/com/gemstone/gemfire/internal/process/ProcessUtils.java index 30f271343036..c2841da627be 100755 --- a/geode-core/src/main/java/com/gemstone/gemfire/internal/process/ProcessUtils.java +++ b/geode-core/src/main/java/com/gemstone/gemfire/internal/process/ProcessUtils.java @@ -27,7 +27,6 @@ /** * Utility operations for processes such as identifying the process id (pid). * - * @author Kirk Lund * @since 7.0 */ public final class ProcessUtils { diff --git a/geode-core/src/main/java/com/gemstone/gemfire/internal/process/StartupStatus.java b/geode-core/src/main/java/com/gemstone/gemfire/internal/process/StartupStatus.java index b71d58b839e3..a775e2a34040 100644 --- a/geode-core/src/main/java/com/gemstone/gemfire/internal/process/StartupStatus.java +++ b/geode-core/src/main/java/com/gemstone/gemfire/internal/process/StartupStatus.java @@ -24,7 +24,6 @@ /** * Extracted from LogWriterImpl and changed to static. * - * @author Kirk Lund */ public class StartupStatus { private static final Logger logger = LogService.getLogger(); diff --git a/geode-core/src/main/java/com/gemstone/gemfire/internal/process/UnableToControlProcessException.java b/geode-core/src/main/java/com/gemstone/gemfire/internal/process/UnableToControlProcessException.java index 420ef0151698..fbca34f624ab 100755 --- a/geode-core/src/main/java/com/gemstone/gemfire/internal/process/UnableToControlProcessException.java +++ b/geode-core/src/main/java/com/gemstone/gemfire/internal/process/UnableToControlProcessException.java @@ -20,7 +20,6 @@ * Exception indicating that an attempt to control a {@link ControllableProcess} * has failed for some reason. * - * @author Kirk Lund * @since 8.0 */ public final class UnableToControlProcessException extends Exception { diff --git a/geode-core/src/main/java/com/gemstone/gemfire/internal/process/signal/AbstractSignalNotificationHandler.java b/geode-core/src/main/java/com/gemstone/gemfire/internal/process/signal/AbstractSignalNotificationHandler.java index 4b871750393d..7a14827f974a 100644 --- a/geode-core/src/main/java/com/gemstone/gemfire/internal/process/signal/AbstractSignalNotificationHandler.java +++ b/geode-core/src/main/java/com/gemstone/gemfire/internal/process/signal/AbstractSignalNotificationHandler.java @@ -28,7 +28,6 @@ /** * The AbstractSignalNotificationHandler class... *

    - * @author John Blum * @see com.gemstone.gemfire.internal.process.signal.Signal * @see com.gemstone.gemfire.internal.process.signal.SignalEvent * @see com.gemstone.gemfire.internal.process.signal.SignalListener diff --git a/geode-core/src/main/java/com/gemstone/gemfire/internal/process/signal/Signal.java b/geode-core/src/main/java/com/gemstone/gemfire/internal/process/signal/Signal.java index 6649f40c6a19..cf5c3f814891 100644 --- a/geode-core/src/main/java/com/gemstone/gemfire/internal/process/signal/Signal.java +++ b/geode-core/src/main/java/com/gemstone/gemfire/internal/process/signal/Signal.java @@ -22,7 +22,6 @@ /** * Signals defined in the enumerated type were based on Open BSD and the IBM JVM... *

    - * @author John Blum * @see com.gemstone.gemfire.internal.process.signal.SignalType * @since 7.0 * @see http://www.fromdual.com/operating-system-signals diff --git a/geode-core/src/main/java/com/gemstone/gemfire/internal/process/signal/SignalEvent.java b/geode-core/src/main/java/com/gemstone/gemfire/internal/process/signal/SignalEvent.java index 99ba65744295..d88adf5dae4f 100644 --- a/geode-core/src/main/java/com/gemstone/gemfire/internal/process/signal/SignalEvent.java +++ b/geode-core/src/main/java/com/gemstone/gemfire/internal/process/signal/SignalEvent.java @@ -22,7 +22,6 @@ /** * The SignalEvent class... *

    - * @author John Blum * @see java.util.EventObject * @since 7.0 */ diff --git a/geode-core/src/main/java/com/gemstone/gemfire/internal/process/signal/SignalListener.java b/geode-core/src/main/java/com/gemstone/gemfire/internal/process/signal/SignalListener.java index 363edf9e5046..729da206b6b8 100644 --- a/geode-core/src/main/java/com/gemstone/gemfire/internal/process/signal/SignalListener.java +++ b/geode-core/src/main/java/com/gemstone/gemfire/internal/process/signal/SignalListener.java @@ -22,7 +22,6 @@ /** * The SignalListener class... *

    - * @author John Blum * @see java.util.EventListener * @since 7.0 */ diff --git a/geode-core/src/main/java/com/gemstone/gemfire/internal/process/signal/SignalType.java b/geode-core/src/main/java/com/gemstone/gemfire/internal/process/signal/SignalType.java index a50d57901a72..ec01081d73ef 100644 --- a/geode-core/src/main/java/com/gemstone/gemfire/internal/process/signal/SignalType.java +++ b/geode-core/src/main/java/com/gemstone/gemfire/internal/process/signal/SignalType.java @@ -20,7 +20,6 @@ /** * The SignalType class... *

    - * @author John Blum * @since 7.0 */ public enum SignalType { diff --git a/geode-core/src/main/java/com/gemstone/gemfire/internal/redis/ByteArrayWrapper.java b/geode-core/src/main/java/com/gemstone/gemfire/internal/redis/ByteArrayWrapper.java index 1554b1c7e773..790101d56f01 100755 --- a/geode-core/src/main/java/com/gemstone/gemfire/internal/redis/ByteArrayWrapper.java +++ b/geode-core/src/main/java/com/gemstone/gemfire/internal/redis/ByteArrayWrapper.java @@ -30,7 +30,6 @@ * for the data but it is also serializable and comparable so it is able to be used * in querying * - * @author Vitaliy Gavrilov * */ public class ByteArrayWrapper implements DataSerializable, Comparable { diff --git a/geode-core/src/main/java/com/gemstone/gemfire/internal/redis/ByteToCommandDecoder.java b/geode-core/src/main/java/com/gemstone/gemfire/internal/redis/ByteToCommandDecoder.java index 96d78538f055..31a0c715da1d 100644 --- a/geode-core/src/main/java/com/gemstone/gemfire/internal/redis/ByteToCommandDecoder.java +++ b/geode-core/src/main/java/com/gemstone/gemfire/internal/redis/ByteToCommandDecoder.java @@ -38,7 +38,6 @@ * allows us to just back out and wait for more data, while exceptions are left to * malformed requests which should never happen if using a proper Redis client. * - * @author Vitaliy Gavrilov * */ public class ByteToCommandDecoder extends ByteToMessageDecoder { diff --git a/geode-core/src/main/java/com/gemstone/gemfire/internal/redis/Coder.java b/geode-core/src/main/java/com/gemstone/gemfire/internal/redis/Coder.java index 6906eb6d2ce1..89cc5d46e8c1 100644 --- a/geode-core/src/main/java/com/gemstone/gemfire/internal/redis/Coder.java +++ b/geode-core/src/main/java/com/gemstone/gemfire/internal/redis/Coder.java @@ -33,7 +33,6 @@ /** * This is a safe encoder and decoder for all redis matching needs * - * @author Vitaliy Gavrilov * */ public class Coder { diff --git a/geode-core/src/main/java/com/gemstone/gemfire/internal/redis/Command.java b/geode-core/src/main/java/com/gemstone/gemfire/internal/redis/Command.java index 0d3ccd0fa276..24bf0bbd1dce 100755 --- a/geode-core/src/main/java/com/gemstone/gemfire/internal/redis/Command.java +++ b/geode-core/src/main/java/com/gemstone/gemfire/internal/redis/Command.java @@ -26,7 +26,6 @@ * command resides in an instance of this class. This class is designed to be * used strictly by getter and setter methods. * - * @author Vitaliy Gavrilov * */ public class Command { diff --git a/geode-core/src/main/java/com/gemstone/gemfire/internal/redis/DoubleWrapper.java b/geode-core/src/main/java/com/gemstone/gemfire/internal/redis/DoubleWrapper.java index 38e596da1737..48d62fcf1bcf 100755 --- a/geode-core/src/main/java/com/gemstone/gemfire/internal/redis/DoubleWrapper.java +++ b/geode-core/src/main/java/com/gemstone/gemfire/internal/redis/DoubleWrapper.java @@ -26,7 +26,6 @@ /** * This is a wrapper class for doubles, similar to {@link ByteArrayWrapper} * - * @author Vitaliy Gavrilov * */ public class DoubleWrapper implements DataSerializable, Comparable { diff --git a/geode-core/src/main/java/com/gemstone/gemfire/internal/redis/ExecutionHandlerContext.java b/geode-core/src/main/java/com/gemstone/gemfire/internal/redis/ExecutionHandlerContext.java index 0f4f34196596..d4c3d4785706 100644 --- a/geode-core/src/main/java/com/gemstone/gemfire/internal/redis/ExecutionHandlerContext.java +++ b/geode-core/src/main/java/com/gemstone/gemfire/internal/redis/ExecutionHandlerContext.java @@ -52,7 +52,6 @@ * execution of a command. It abstracts transactions, provides access to the {@link RegionProvider} * and anything else an executing {@link Command} may need. * - * @author Vitaliy Gavrilov * */ public class ExecutionHandlerContext extends ChannelInboundHandlerAdapter { diff --git a/geode-core/src/main/java/com/gemstone/gemfire/internal/redis/Executor.java b/geode-core/src/main/java/com/gemstone/gemfire/internal/redis/Executor.java index ec3f8a39469b..3660f94f272d 100755 --- a/geode-core/src/main/java/com/gemstone/gemfire/internal/redis/Executor.java +++ b/geode-core/src/main/java/com/gemstone/gemfire/internal/redis/Executor.java @@ -20,7 +20,6 @@ /** * Interface for executors of a {@link Command} * - * @author Vitaliy Gavrilov * */ public interface Executor { diff --git a/geode-core/src/main/java/com/gemstone/gemfire/internal/redis/Extendable.java b/geode-core/src/main/java/com/gemstone/gemfire/internal/redis/Extendable.java index e67f157d7c59..edae36cf0e5d 100644 --- a/geode-core/src/main/java/com/gemstone/gemfire/internal/redis/Extendable.java +++ b/geode-core/src/main/java/com/gemstone/gemfire/internal/redis/Extendable.java @@ -19,7 +19,6 @@ /** * This defines a command that can be extended, and there may need some level of abstraction * - * @author Vitaliy Gavrilov * */ public interface Extendable { diff --git a/geode-core/src/main/java/com/gemstone/gemfire/internal/redis/RedisCommandParserException.java b/geode-core/src/main/java/com/gemstone/gemfire/internal/redis/RedisCommandParserException.java index d58e20d31615..f02b453f69fe 100755 --- a/geode-core/src/main/java/com/gemstone/gemfire/internal/redis/RedisCommandParserException.java +++ b/geode-core/src/main/java/com/gemstone/gemfire/internal/redis/RedisCommandParserException.java @@ -19,7 +19,6 @@ /** * Exception thrown by CommandParser (non-existent class) when a command has illegal syntax * - * @author Vitaliy Gavrilov * */ public class RedisCommandParserException extends Exception { diff --git a/geode-core/src/main/java/com/gemstone/gemfire/internal/redis/RedisCommandType.java b/geode-core/src/main/java/com/gemstone/gemfire/internal/redis/RedisCommandType.java index 7ca46ad1025c..12c8aba14829 100755 --- a/geode-core/src/main/java/com/gemstone/gemfire/internal/redis/RedisCommandType.java +++ b/geode-core/src/main/java/com/gemstone/gemfire/internal/redis/RedisCommandType.java @@ -135,7 +135,6 @@ * the redis protocol and calling {@link #getExecutor()} on a type returns the executor * class for that command. * - * @author Vitaliy Gavrilov * */ public enum RedisCommandType { diff --git a/geode-core/src/main/java/com/gemstone/gemfire/internal/redis/RedisDataTypeMismatchException.java b/geode-core/src/main/java/com/gemstone/gemfire/internal/redis/RedisDataTypeMismatchException.java index fca22d2c7194..70893ea6ae8f 100755 --- a/geode-core/src/main/java/com/gemstone/gemfire/internal/redis/RedisDataTypeMismatchException.java +++ b/geode-core/src/main/java/com/gemstone/gemfire/internal/redis/RedisDataTypeMismatchException.java @@ -21,7 +21,6 @@ * a data structure of one {@link RedisDataType} with a command that is * of another type * - * @author Vitaliy Gavrilov * */ public class RedisDataTypeMismatchException extends RuntimeException { diff --git a/geode-core/src/main/java/com/gemstone/gemfire/internal/redis/RegionCreationException.java b/geode-core/src/main/java/com/gemstone/gemfire/internal/redis/RegionCreationException.java index 6ecaf8b28832..0ad6ed0028f9 100644 --- a/geode-core/src/main/java/com/gemstone/gemfire/internal/redis/RegionCreationException.java +++ b/geode-core/src/main/java/com/gemstone/gemfire/internal/redis/RegionCreationException.java @@ -19,7 +19,6 @@ /** * This exception is used when an error happens while creating a {@link com.gemstone.gemfire.cache.Region} globally * - * @author Vitaliy Gavrilov * */ public class RegionCreationException extends RuntimeException { diff --git a/geode-core/src/main/java/com/gemstone/gemfire/internal/redis/RegionProvider.java b/geode-core/src/main/java/com/gemstone/gemfire/internal/redis/RegionProvider.java index dcd83cb17510..08de0c95b64c 100644 --- a/geode-core/src/main/java/com/gemstone/gemfire/internal/redis/RegionProvider.java +++ b/geode-core/src/main/java/com/gemstone/gemfire/internal/redis/RegionProvider.java @@ -58,7 +58,6 @@ * or destroying a {@link Region} needs to be synchronized, which is done away with * and abstracted by this class. * - * @author Vitaly Gavrilov * */ public class RegionProvider implements Closeable { diff --git a/geode-core/src/main/java/com/gemstone/gemfire/internal/redis/executor/AbstractExecutor.java b/geode-core/src/main/java/com/gemstone/gemfire/internal/redis/executor/AbstractExecutor.java index c6b275f41dd1..93ef3371f410 100755 --- a/geode-core/src/main/java/com/gemstone/gemfire/internal/redis/executor/AbstractExecutor.java +++ b/geode-core/src/main/java/com/gemstone/gemfire/internal/redis/executor/AbstractExecutor.java @@ -30,7 +30,6 @@ * The AbstractExecutor is the base of all {@link Executor} types for the * {@link GemFireRedisServer}. * - * @author Vitaliy Gavrilov * */ public abstract class AbstractExecutor implements Executor { diff --git a/geode-core/src/main/java/com/gemstone/gemfire/internal/security/AuthorizeRequest.java b/geode-core/src/main/java/com/gemstone/gemfire/internal/security/AuthorizeRequest.java index 312472baf9c0..8e550d47a07a 100644 --- a/geode-core/src/main/java/com/gemstone/gemfire/internal/security/AuthorizeRequest.java +++ b/geode-core/src/main/java/com/gemstone/gemfire/internal/security/AuthorizeRequest.java @@ -48,7 +48,6 @@ * operation is encapsulated in a {@link OperationContext} object that can be * modified by the pre-processing authorization callbacks. * - * @author Sumedh Wale * @since 5.5 */ public class AuthorizeRequest { diff --git a/geode-core/src/main/java/com/gemstone/gemfire/internal/security/AuthorizeRequestPP.java b/geode-core/src/main/java/com/gemstone/gemfire/internal/security/AuthorizeRequestPP.java index 95640e0c7f8b..17082bb3038d 100644 --- a/geode-core/src/main/java/com/gemstone/gemfire/internal/security/AuthorizeRequestPP.java +++ b/geode-core/src/main/java/com/gemstone/gemfire/internal/security/AuthorizeRequestPP.java @@ -40,7 +40,6 @@ * being passed for the operation is encapsulated in a {@link OperationContext} * object that can be modified by the post-processing authorization callbacks. * - * @author Sumedh Wale * @since 5.5 */ public class AuthorizeRequestPP { diff --git a/geode-core/src/main/java/com/gemstone/gemfire/internal/security/FilterPostAuthorization.java b/geode-core/src/main/java/com/gemstone/gemfire/internal/security/FilterPostAuthorization.java index 053576fe0674..40cdc151a177 100644 --- a/geode-core/src/main/java/com/gemstone/gemfire/internal/security/FilterPostAuthorization.java +++ b/geode-core/src/main/java/com/gemstone/gemfire/internal/security/FilterPostAuthorization.java @@ -49,7 +49,6 @@ * operation only if the authorization field in {@link ObjectWithAuthz} object * allows the current principal. * - * @author Sumedh Wale * @since 5.5 */ public class FilterPostAuthorization implements AccessControl { diff --git a/geode-core/src/main/java/com/gemstone/gemfire/internal/security/FilterPreAuthorization.java b/geode-core/src/main/java/com/gemstone/gemfire/internal/security/FilterPreAuthorization.java index fce65dd6dfa9..df6d13693dc4 100644 --- a/geode-core/src/main/java/com/gemstone/gemfire/internal/security/FilterPreAuthorization.java +++ b/geode-core/src/main/java/com/gemstone/gemfire/internal/security/FilterPreAuthorization.java @@ -46,7 +46,6 @@ * pre-operation phase to add an integer denoting which Principals * would be allowed to get that object. * - * @author Sumedh Wale * @since 5.5 */ public class FilterPreAuthorization implements AccessControl { diff --git a/geode-core/src/main/java/com/gemstone/gemfire/internal/sequencelog/EntryLogger.java b/geode-core/src/main/java/com/gemstone/gemfire/internal/sequencelog/EntryLogger.java index b7ccf15ca502..e025c7d7029c 100644 --- a/geode-core/src/main/java/com/gemstone/gemfire/internal/sequencelog/EntryLogger.java +++ b/geode-core/src/main/java/com/gemstone/gemfire/internal/sequencelog/EntryLogger.java @@ -32,7 +32,6 @@ /** * A wrapper around the graph logger that logs entry level events. - * @author dsmith * * *TODO diff --git a/geode-core/src/main/java/com/gemstone/gemfire/internal/sequencelog/GraphType.java b/geode-core/src/main/java/com/gemstone/gemfire/internal/sequencelog/GraphType.java index 175d7e6c0f9d..bd009e296e17 100644 --- a/geode-core/src/main/java/com/gemstone/gemfire/internal/sequencelog/GraphType.java +++ b/geode-core/src/main/java/com/gemstone/gemfire/internal/sequencelog/GraphType.java @@ -19,7 +19,6 @@ import java.util.EnumSet; /** - * @author dsmith * */ public enum GraphType { diff --git a/geode-core/src/main/java/com/gemstone/gemfire/internal/sequencelog/MembershipLogger.java b/geode-core/src/main/java/com/gemstone/gemfire/internal/sequencelog/MembershipLogger.java index 3bdee5c890cb..dc3eb32d3a62 100644 --- a/geode-core/src/main/java/com/gemstone/gemfire/internal/sequencelog/MembershipLogger.java +++ b/geode-core/src/main/java/com/gemstone/gemfire/internal/sequencelog/MembershipLogger.java @@ -21,7 +21,6 @@ import com.gemstone.gemfire.distributed.internal.membership.InternalDistributedMember; /** - * @author dsmith * */ public class MembershipLogger { diff --git a/geode-core/src/main/java/com/gemstone/gemfire/internal/sequencelog/MessageLogger.java b/geode-core/src/main/java/com/gemstone/gemfire/internal/sequencelog/MessageLogger.java index a65851957aa8..2f9d417073fb 100644 --- a/geode-core/src/main/java/com/gemstone/gemfire/internal/sequencelog/MessageLogger.java +++ b/geode-core/src/main/java/com/gemstone/gemfire/internal/sequencelog/MessageLogger.java @@ -20,7 +20,6 @@ import com.gemstone.gemfire.distributed.internal.membership.InternalDistributedMember; /** - * @author dsmith * */ public class MessageLogger { diff --git a/geode-core/src/main/java/com/gemstone/gemfire/internal/sequencelog/RegionLogger.java b/geode-core/src/main/java/com/gemstone/gemfire/internal/sequencelog/RegionLogger.java index fbc8e296036d..dec27e91b80e 100644 --- a/geode-core/src/main/java/com/gemstone/gemfire/internal/sequencelog/RegionLogger.java +++ b/geode-core/src/main/java/com/gemstone/gemfire/internal/sequencelog/RegionLogger.java @@ -24,7 +24,6 @@ /** * A Wrapper around the graph logger that logs region level * events. - * @author dsmith * */ public class RegionLogger { diff --git a/geode-core/src/main/java/com/gemstone/gemfire/internal/sequencelog/SequenceLogger.java b/geode-core/src/main/java/com/gemstone/gemfire/internal/sequencelog/SequenceLogger.java index 94b1c1f116e0..5f9e1e18a27f 100644 --- a/geode-core/src/main/java/com/gemstone/gemfire/internal/sequencelog/SequenceLogger.java +++ b/geode-core/src/main/java/com/gemstone/gemfire/internal/sequencelog/SequenceLogger.java @@ -20,7 +20,6 @@ * A logger that allows the user to "log" events in a sequence diagram. * Useful for tracking the movement of an object through our * distributed system, for example. - * @author dsmith * */ public interface SequenceLogger { diff --git a/geode-core/src/main/java/com/gemstone/gemfire/internal/sequencelog/SequenceLoggerImpl.java b/geode-core/src/main/java/com/gemstone/gemfire/internal/sequencelog/SequenceLoggerImpl.java index 8007ad5ad20d..26c944eafbe6 100644 --- a/geode-core/src/main/java/com/gemstone/gemfire/internal/sequencelog/SequenceLoggerImpl.java +++ b/geode-core/src/main/java/com/gemstone/gemfire/internal/sequencelog/SequenceLoggerImpl.java @@ -27,7 +27,6 @@ import com.gemstone.gemfire.internal.sequencelog.io.OutputStreamAppender; /** - * @author dsmith * */ public class SequenceLoggerImpl implements SequenceLogger { diff --git a/geode-core/src/main/java/com/gemstone/gemfire/internal/sequencelog/Transition.java b/geode-core/src/main/java/com/gemstone/gemfire/internal/sequencelog/Transition.java index 7fac9954f9ef..c623e35aa915 100644 --- a/geode-core/src/main/java/com/gemstone/gemfire/internal/sequencelog/Transition.java +++ b/geode-core/src/main/java/com/gemstone/gemfire/internal/sequencelog/Transition.java @@ -17,7 +17,6 @@ package com.gemstone.gemfire.internal.sequencelog; /** - * @author dsmith * */ public class Transition { diff --git a/geode-core/src/main/java/com/gemstone/gemfire/internal/sequencelog/io/Filter.java b/geode-core/src/main/java/com/gemstone/gemfire/internal/sequencelog/io/Filter.java index 8d4ee844abad..aa97994c14e4 100644 --- a/geode-core/src/main/java/com/gemstone/gemfire/internal/sequencelog/io/Filter.java +++ b/geode-core/src/main/java/com/gemstone/gemfire/internal/sequencelog/io/Filter.java @@ -21,7 +21,6 @@ import com.gemstone.gemfire.internal.sequencelog.GraphType; /** - * @author dsmith * */ public interface Filter { diff --git a/geode-core/src/main/java/com/gemstone/gemfire/internal/sequencelog/io/GemfireLogConverter.java b/geode-core/src/main/java/com/gemstone/gemfire/internal/sequencelog/io/GemfireLogConverter.java index e4318752675b..79c158360d31 100644 --- a/geode-core/src/main/java/com/gemstone/gemfire/internal/sequencelog/io/GemfireLogConverter.java +++ b/geode-core/src/main/java/com/gemstone/gemfire/internal/sequencelog/io/GemfireLogConverter.java @@ -39,7 +39,6 @@ * A utility to convert existing gemfire logs * into a graph logger file. This will help * me debug hydra runs more quickly. - * @author dsmith * */ public class GemfireLogConverter { diff --git a/geode-core/src/main/java/com/gemstone/gemfire/internal/sequencelog/io/GraphReader.java b/geode-core/src/main/java/com/gemstone/gemfire/internal/sequencelog/io/GraphReader.java index 01402d8675e2..4f8c6a6633c8 100644 --- a/geode-core/src/main/java/com/gemstone/gemfire/internal/sequencelog/io/GraphReader.java +++ b/geode-core/src/main/java/com/gemstone/gemfire/internal/sequencelog/io/GraphReader.java @@ -27,7 +27,6 @@ import com.gemstone.gemfire.internal.sequencelog.model.GraphSet; /** - * @author dsmith * */ public class GraphReader { diff --git a/geode-core/src/main/java/com/gemstone/gemfire/internal/sequencelog/io/InputStreamReader.java b/geode-core/src/main/java/com/gemstone/gemfire/internal/sequencelog/io/InputStreamReader.java index 0fa30af6f512..e6c4930e43eb 100644 --- a/geode-core/src/main/java/com/gemstone/gemfire/internal/sequencelog/io/InputStreamReader.java +++ b/geode-core/src/main/java/com/gemstone/gemfire/internal/sequencelog/io/InputStreamReader.java @@ -29,7 +29,6 @@ import com.gemstone.gemfire.internal.sequencelog.model.GraphReaderCallback; /** - * @author dsmith * */ public class InputStreamReader { diff --git a/geode-core/src/main/java/com/gemstone/gemfire/internal/sequencelog/io/OutputStreamAppender.java b/geode-core/src/main/java/com/gemstone/gemfire/internal/sequencelog/io/OutputStreamAppender.java index 1fb20da361d2..833bf28c84d8 100644 --- a/geode-core/src/main/java/com/gemstone/gemfire/internal/sequencelog/io/OutputStreamAppender.java +++ b/geode-core/src/main/java/com/gemstone/gemfire/internal/sequencelog/io/OutputStreamAppender.java @@ -31,7 +31,6 @@ /** * Appends events logged using the SequenceLogger to a binary stream. - * @author dsmith * */ public class OutputStreamAppender { diff --git a/geode-core/src/main/java/com/gemstone/gemfire/internal/sequencelog/model/Graph.java b/geode-core/src/main/java/com/gemstone/gemfire/internal/sequencelog/model/Graph.java index 0a8769effead..75ec9181becd 100644 --- a/geode-core/src/main/java/com/gemstone/gemfire/internal/sequencelog/model/Graph.java +++ b/geode-core/src/main/java/com/gemstone/gemfire/internal/sequencelog/model/Graph.java @@ -25,7 +25,6 @@ import java.util.TreeMap; /** - * @author dsmith * * TODO - I think a better idea here would be consider * source vertices as "temporary" place holders that diff --git a/geode-core/src/main/java/com/gemstone/gemfire/internal/sequencelog/model/GraphID.java b/geode-core/src/main/java/com/gemstone/gemfire/internal/sequencelog/model/GraphID.java index 077a1991dd09..0129fae11eda 100644 --- a/geode-core/src/main/java/com/gemstone/gemfire/internal/sequencelog/model/GraphID.java +++ b/geode-core/src/main/java/com/gemstone/gemfire/internal/sequencelog/model/GraphID.java @@ -21,7 +21,6 @@ import com.gemstone.gemfire.internal.sequencelog.GraphType; /** - * @author dsmith * */ public class GraphID implements Comparable, Serializable { diff --git a/geode-core/src/main/java/com/gemstone/gemfire/internal/sequencelog/model/GraphReaderCallback.java b/geode-core/src/main/java/com/gemstone/gemfire/internal/sequencelog/model/GraphReaderCallback.java index 816bb8236f4c..59df8077552b 100644 --- a/geode-core/src/main/java/com/gemstone/gemfire/internal/sequencelog/model/GraphReaderCallback.java +++ b/geode-core/src/main/java/com/gemstone/gemfire/internal/sequencelog/model/GraphReaderCallback.java @@ -21,7 +21,6 @@ import com.gemstone.gemfire.internal.sequencelog.GraphType; /** - * @author dsmith * */ public interface GraphReaderCallback { diff --git a/geode-core/src/main/java/com/gemstone/gemfire/internal/sequencelog/model/GraphSet.java b/geode-core/src/main/java/com/gemstone/gemfire/internal/sequencelog/model/GraphSet.java index 2422a68bd183..140225df12fd 100644 --- a/geode-core/src/main/java/com/gemstone/gemfire/internal/sequencelog/model/GraphSet.java +++ b/geode-core/src/main/java/com/gemstone/gemfire/internal/sequencelog/model/GraphSet.java @@ -29,7 +29,6 @@ import com.gemstone.gemfire.internal.sequencelog.GraphType; /** - * @author dsmith * */ public class GraphSet implements GraphReaderCallback { diff --git a/geode-core/src/main/java/com/gemstone/gemfire/internal/sequencelog/model/Vertex.java b/geode-core/src/main/java/com/gemstone/gemfire/internal/sequencelog/model/Vertex.java index 65f04f074191..455f20d427b6 100644 --- a/geode-core/src/main/java/com/gemstone/gemfire/internal/sequencelog/model/Vertex.java +++ b/geode-core/src/main/java/com/gemstone/gemfire/internal/sequencelog/model/Vertex.java @@ -19,7 +19,6 @@ import java.util.SortedMap; /** - * @author dsmith * */ public class Vertex implements Comparable { diff --git a/geode-core/src/main/java/com/gemstone/gemfire/internal/sequencelog/visualization/text/TextDisplay.java b/geode-core/src/main/java/com/gemstone/gemfire/internal/sequencelog/visualization/text/TextDisplay.java index 59ade3c0d293..23516db09f36 100644 --- a/geode-core/src/main/java/com/gemstone/gemfire/internal/sequencelog/visualization/text/TextDisplay.java +++ b/geode-core/src/main/java/com/gemstone/gemfire/internal/sequencelog/visualization/text/TextDisplay.java @@ -28,7 +28,6 @@ import com.gemstone.gemfire.internal.sequencelog.model.GraphReaderCallback; /** - * @author dsmith * */ public class TextDisplay { diff --git a/geode-core/src/main/java/com/gemstone/gemfire/internal/shared/NativeCalls.java b/geode-core/src/main/java/com/gemstone/gemfire/internal/shared/NativeCalls.java index c1b40e43ef19..d9dd82605674 100644 --- a/geode-core/src/main/java/com/gemstone/gemfire/internal/shared/NativeCalls.java +++ b/geode-core/src/main/java/com/gemstone/gemfire/internal/shared/NativeCalls.java @@ -41,7 +41,6 @@ * This class is also referenced by ODBC/.NET drivers so it should not refer to * any classes other than standard JDK or those within the same package. * - * @author swale * @since 8.0 */ public abstract class NativeCalls { @@ -486,7 +485,6 @@ protected boolean isNoProtocolOptionCode(int errno) * for re-reading configuration files or any other appropriate actions on * receiving HUP signal as is the convention in other servers. * - * @author swale * @since 8.0 */ public static interface RehashServerOnSIGHUP { @@ -535,7 +533,6 @@ public boolean isTTY() { * implementation could be initialized (e.g. if JNA itself does not provide an * implementation for the platform, or JNA is not found). * - * @author swale * @since 8.0 */ public static class NativeCallsGeneric extends NativeCalls { diff --git a/geode-core/src/main/java/com/gemstone/gemfire/internal/shared/NativeCallsJNAImpl.java b/geode-core/src/main/java/com/gemstone/gemfire/internal/shared/NativeCallsJNAImpl.java index d1cab3fb6fb2..1854992b58a1 100644 --- a/geode-core/src/main/java/com/gemstone/gemfire/internal/shared/NativeCallsJNAImpl.java +++ b/geode-core/src/main/java/com/gemstone/gemfire/internal/shared/NativeCallsJNAImpl.java @@ -60,7 +60,6 @@ * yet and its not a mature library yet, so not using it. Can revisit once this * changes. * - * @author swale * @since 8.0 */ public final class NativeCallsJNAImpl { diff --git a/geode-core/src/main/java/com/gemstone/gemfire/internal/shared/NativeErrorException.java b/geode-core/src/main/java/com/gemstone/gemfire/internal/shared/NativeErrorException.java index 1adaf2c925ef..5a674171acf4 100644 --- a/geode-core/src/main/java/com/gemstone/gemfire/internal/shared/NativeErrorException.java +++ b/geode-core/src/main/java/com/gemstone/gemfire/internal/shared/NativeErrorException.java @@ -23,7 +23,6 @@ * LastErrorException class, and also for ODBC/.NET drivers that * don't use JNA. * - * @author swale * @since 8.0 */ public class NativeErrorException extends Exception { diff --git a/geode-core/src/main/java/com/gemstone/gemfire/internal/shared/StringPrintWriter.java b/geode-core/src/main/java/com/gemstone/gemfire/internal/shared/StringPrintWriter.java index 6f741fea1596..e17fae550f2c 100644 --- a/geode-core/src/main/java/com/gemstone/gemfire/internal/shared/StringPrintWriter.java +++ b/geode-core/src/main/java/com/gemstone/gemfire/internal/shared/StringPrintWriter.java @@ -26,7 +26,6 @@ * A {@link PrintWriter} that collects its output in a string builder, which can * then be used to construct a string. This completely avoids any locking etc. * - * @author swale */ public class StringPrintWriter extends PrintWriter { diff --git a/geode-core/src/main/java/com/gemstone/gemfire/internal/shared/TCPSocketOptions.java b/geode-core/src/main/java/com/gemstone/gemfire/internal/shared/TCPSocketOptions.java index 2e8581ae1d0c..e4cd826c6827 100644 --- a/geode-core/src/main/java/com/gemstone/gemfire/internal/shared/TCPSocketOptions.java +++ b/geode-core/src/main/java/com/gemstone/gemfire/internal/shared/TCPSocketOptions.java @@ -25,7 +25,6 @@ * Passed to {@link NativeCalls} API to set these options on the Java * {@link Socket} using native OS specific calls. * - * @author swale * @since 8.0 */ public enum TCPSocketOptions { diff --git a/geode-core/src/main/java/com/gemstone/gemfire/internal/size/CachingSingleObjectSizer.java b/geode-core/src/main/java/com/gemstone/gemfire/internal/size/CachingSingleObjectSizer.java index 5fdb4d60e8c2..5a9cd25449f5 100644 --- a/geode-core/src/main/java/com/gemstone/gemfire/internal/size/CachingSingleObjectSizer.java +++ b/geode-core/src/main/java/com/gemstone/gemfire/internal/size/CachingSingleObjectSizer.java @@ -22,7 +22,6 @@ import com.gemstone.gemfire.internal.util.concurrent.CopyOnWriteWeakHashMap; /** - * @author dsmith * */ public class CachingSingleObjectSizer implements SingleObjectSizer { diff --git a/geode-core/src/main/java/com/gemstone/gemfire/internal/size/ReflectionObjectSizer.java b/geode-core/src/main/java/com/gemstone/gemfire/internal/size/ReflectionObjectSizer.java index d94487cbe392..04961b6e1990 100644 --- a/geode-core/src/main/java/com/gemstone/gemfire/internal/size/ReflectionObjectSizer.java +++ b/geode-core/src/main/java/com/gemstone/gemfire/internal/size/ReflectionObjectSizer.java @@ -40,7 +40,6 @@ * For objects that are all approximately the same size, consider using * {@link SizeClassOnceObjectSizer} * - * @author dsmith * */ public class ReflectionObjectSizer implements ObjectSizer, Serializable { diff --git a/geode-core/src/main/java/com/gemstone/gemfire/internal/size/ReflectionSingleObjectSizer.java b/geode-core/src/main/java/com/gemstone/gemfire/internal/size/ReflectionSingleObjectSizer.java index 1daab1ebf1d5..6deaa26508e6 100644 --- a/geode-core/src/main/java/com/gemstone/gemfire/internal/size/ReflectionSingleObjectSizer.java +++ b/geode-core/src/main/java/com/gemstone/gemfire/internal/size/ReflectionSingleObjectSizer.java @@ -29,7 +29,6 @@ * does not follow any object references, it just calculates the size * of a flat object. * - * @author dsmith * */ public class ReflectionSingleObjectSizer implements SingleObjectSizer { diff --git a/geode-core/src/main/java/com/gemstone/gemfire/internal/size/SizeClassOnceObjectSizer.java b/geode-core/src/main/java/com/gemstone/gemfire/internal/size/SizeClassOnceObjectSizer.java index 45ea00f2f8d0..7e32dd335bb8 100644 --- a/geode-core/src/main/java/com/gemstone/gemfire/internal/size/SizeClassOnceObjectSizer.java +++ b/geode-core/src/main/java/com/gemstone/gemfire/internal/size/SizeClassOnceObjectSizer.java @@ -36,7 +36,6 @@ * and performance. It should work well for objects that are fairly constant * in size. For completely accurate sizing, use {@link ReflectionObjectSizer} * - * @author dsmith * */ public class SizeClassOnceObjectSizer implements ObjectSizer, Serializable, Declarable { diff --git a/geode-core/src/main/java/com/gemstone/gemfire/internal/size/SizeOfUtil0.java b/geode-core/src/main/java/com/gemstone/gemfire/internal/size/SizeOfUtil0.java index 1eb24d7197de..aeab8fa4b8bf 100644 --- a/geode-core/src/main/java/com/gemstone/gemfire/internal/size/SizeOfUtil0.java +++ b/geode-core/src/main/java/com/gemstone/gemfire/internal/size/SizeOfUtil0.java @@ -21,7 +21,6 @@ * with jprobe, because jprobe doesn't play nicely with the -javaagent flag. If * we implement a 1.4 SizeOfUtil class, then we probably don't need this one. * - * @author dsmith * */ public class SizeOfUtil0 implements SingleObjectSizer { diff --git a/geode-core/src/main/java/com/gemstone/gemfire/internal/size/WellKnownClassSizer.java b/geode-core/src/main/java/com/gemstone/gemfire/internal/size/WellKnownClassSizer.java index 4af10648f63c..ac02f0de3b01 100644 --- a/geode-core/src/main/java/com/gemstone/gemfire/internal/size/WellKnownClassSizer.java +++ b/geode-core/src/main/java/com/gemstone/gemfire/internal/size/WellKnownClassSizer.java @@ -23,7 +23,6 @@ * * This will return 0 if it does not know * how to size the object - * @author dsmith * */ public class WellKnownClassSizer { diff --git a/geode-core/src/main/java/com/gemstone/gemfire/internal/statistics/CounterMonitor.java b/geode-core/src/main/java/com/gemstone/gemfire/internal/statistics/CounterMonitor.java index 410361a38ffc..81c034fe2698 100755 --- a/geode-core/src/main/java/com/gemstone/gemfire/internal/statistics/CounterMonitor.java +++ b/geode-core/src/main/java/com/gemstone/gemfire/internal/statistics/CounterMonitor.java @@ -17,7 +17,6 @@ package com.gemstone.gemfire.internal.statistics; /** - * @author Kirk Lund * @since 7.0 */ public final class CounterMonitor extends StatisticsMonitor { diff --git a/geode-core/src/main/java/com/gemstone/gemfire/internal/statistics/GaugeMonitor.java b/geode-core/src/main/java/com/gemstone/gemfire/internal/statistics/GaugeMonitor.java index c1c7230cf369..4dd331eecc4f 100755 --- a/geode-core/src/main/java/com/gemstone/gemfire/internal/statistics/GaugeMonitor.java +++ b/geode-core/src/main/java/com/gemstone/gemfire/internal/statistics/GaugeMonitor.java @@ -17,7 +17,6 @@ package com.gemstone.gemfire.internal.statistics; /** - * @author Kirk Lund * @since 7.0 */ public final class GaugeMonitor extends StatisticsMonitor { diff --git a/geode-core/src/main/java/com/gemstone/gemfire/internal/statistics/IgnoreResourceException.java b/geode-core/src/main/java/com/gemstone/gemfire/internal/statistics/IgnoreResourceException.java index 10c453deb573..efe2005d03f3 100755 --- a/geode-core/src/main/java/com/gemstone/gemfire/internal/statistics/IgnoreResourceException.java +++ b/geode-core/src/main/java/com/gemstone/gemfire/internal/statistics/IgnoreResourceException.java @@ -24,7 +24,6 @@ *

    * Extracted from {@link com.gemstone.gemfire.internal.StatArchiveWriter}. * - * @author Kirk Lund * @since 7.0 */ public class IgnoreResourceException extends GemFireCheckedException { diff --git a/geode-core/src/main/java/com/gemstone/gemfire/internal/statistics/MapBasedStatisticsNotification.java b/geode-core/src/main/java/com/gemstone/gemfire/internal/statistics/MapBasedStatisticsNotification.java index 14d1e5ec058c..be77a2d4735c 100755 --- a/geode-core/src/main/java/com/gemstone/gemfire/internal/statistics/MapBasedStatisticsNotification.java +++ b/geode-core/src/main/java/com/gemstone/gemfire/internal/statistics/MapBasedStatisticsNotification.java @@ -25,7 +25,6 @@ import com.gemstone.gemfire.StatisticsType; /** - * @author Kirk Lund * @since 7.0 */ public class MapBasedStatisticsNotification implements StatisticsNotification { diff --git a/geode-core/src/main/java/com/gemstone/gemfire/internal/statistics/ResourceInstance.java b/geode-core/src/main/java/com/gemstone/gemfire/internal/statistics/ResourceInstance.java index a050f367294f..68de8966123f 100755 --- a/geode-core/src/main/java/com/gemstone/gemfire/internal/statistics/ResourceInstance.java +++ b/geode-core/src/main/java/com/gemstone/gemfire/internal/statistics/ResourceInstance.java @@ -26,7 +26,6 @@ *

    * Extracted from {@link com.gemstone.gemfire.internal.StatArchiveWriter}. * - * @author Kirk Lund * @since 7.0 */ public class ResourceInstance { diff --git a/geode-core/src/main/java/com/gemstone/gemfire/internal/statistics/ResourceType.java b/geode-core/src/main/java/com/gemstone/gemfire/internal/statistics/ResourceType.java index f2aced4663a3..48d95187edda 100755 --- a/geode-core/src/main/java/com/gemstone/gemfire/internal/statistics/ResourceType.java +++ b/geode-core/src/main/java/com/gemstone/gemfire/internal/statistics/ResourceType.java @@ -26,7 +26,6 @@ *

    * Extracted from {@link com.gemstone.gemfire.internal.StatArchiveWriter}. * - * @author Kirk Lund * @since 7.0 */ public class ResourceType { diff --git a/geode-core/src/main/java/com/gemstone/gemfire/internal/statistics/SampleCollector.java b/geode-core/src/main/java/com/gemstone/gemfire/internal/statistics/SampleCollector.java index 9b40e95b3863..506dae63dace 100755 --- a/geode-core/src/main/java/com/gemstone/gemfire/internal/statistics/SampleCollector.java +++ b/geode-core/src/main/java/com/gemstone/gemfire/internal/statistics/SampleCollector.java @@ -50,7 +50,6 @@ *

    * Extracted from StatArchiveWriter. * - * @author Kirk Lund * @since 7.0 */ public class SampleCollector { @@ -570,7 +569,6 @@ StatMonitorHandler getStatMonitorHandlerSnapshot() { } /** - * @author Kirk Lund * @since 7.0 */ public class MarkableSampleHandler implements SampleHandler { @@ -651,7 +649,6 @@ public String toString() { } /** - * @author Kirk Lund * @since 7.0 */ public class SampleHandlers implements Iterable { diff --git a/geode-core/src/main/java/com/gemstone/gemfire/internal/statistics/SampleHandler.java b/geode-core/src/main/java/com/gemstone/gemfire/internal/statistics/SampleHandler.java index 369dae1d5dd3..451973f54720 100755 --- a/geode-core/src/main/java/com/gemstone/gemfire/internal/statistics/SampleHandler.java +++ b/geode-core/src/main/java/com/gemstone/gemfire/internal/statistics/SampleHandler.java @@ -22,7 +22,6 @@ * Defines the operations required to handle statistics samples and receive * notifications of ResourceTypes and ResourceInstances. * - * @author Kirk Lund * @since 7.0 */ public interface SampleHandler { diff --git a/geode-core/src/main/java/com/gemstone/gemfire/internal/statistics/SimpleStatisticId.java b/geode-core/src/main/java/com/gemstone/gemfire/internal/statistics/SimpleStatisticId.java index 8f68d39c5e9b..cfb852389f5d 100755 --- a/geode-core/src/main/java/com/gemstone/gemfire/internal/statistics/SimpleStatisticId.java +++ b/geode-core/src/main/java/com/gemstone/gemfire/internal/statistics/SimpleStatisticId.java @@ -26,7 +26,6 @@ * StatisticsType may describe one or more Statistics instances, while a * StatisticDescriptor may describe one or more StatisticId instances. * - * @author Kirk Lund * @since 7.0 */ public final class SimpleStatisticId implements StatisticId { diff --git a/geode-core/src/main/java/com/gemstone/gemfire/internal/statistics/StatArchiveDescriptor.java b/geode-core/src/main/java/com/gemstone/gemfire/internal/statistics/StatArchiveDescriptor.java index 4485f1100d42..64d13c4badb5 100755 --- a/geode-core/src/main/java/com/gemstone/gemfire/internal/statistics/StatArchiveDescriptor.java +++ b/geode-core/src/main/java/com/gemstone/gemfire/internal/statistics/StatArchiveDescriptor.java @@ -28,7 +28,6 @@ * instead of a constructor with many similar parameters (ie, multiple Strings * which could easily be interposed with one another). * - * @author Kirk Lund * @since 7.0 */ public class StatArchiveDescriptor { diff --git a/geode-core/src/main/java/com/gemstone/gemfire/internal/statistics/StatArchiveHandler.java b/geode-core/src/main/java/com/gemstone/gemfire/internal/statistics/StatArchiveHandler.java index 02df1f5e922f..f1a7a1f481da 100755 --- a/geode-core/src/main/java/com/gemstone/gemfire/internal/statistics/StatArchiveHandler.java +++ b/geode-core/src/main/java/com/gemstone/gemfire/internal/statistics/StatArchiveHandler.java @@ -49,8 +49,6 @@ * {@link com.gemstone.gemfire.internal.StatArchiveWriter} for the currently * open archive file (unless archiving is disabled). * - * @author Darrel Schneider - * @author Kirk Lund * @since 7.0 */ public class StatArchiveHandler implements SampleHandler { diff --git a/geode-core/src/main/java/com/gemstone/gemfire/internal/statistics/StatArchiveHandlerConfig.java b/geode-core/src/main/java/com/gemstone/gemfire/internal/statistics/StatArchiveHandlerConfig.java index 0bc76d533d74..28df256fe1f1 100755 --- a/geode-core/src/main/java/com/gemstone/gemfire/internal/statistics/StatArchiveHandlerConfig.java +++ b/geode-core/src/main/java/com/gemstone/gemfire/internal/statistics/StatArchiveHandlerConfig.java @@ -24,7 +24,6 @@ *

    * Implemented by {@link com.gemstone.gemfire.internal.HostStatSampler}. - * @author Kirk Lund * @since 7.0 * @see com.gemstone.gemfire.distributed.internal.RuntimeDistributionConfigImpl */ diff --git a/geode-core/src/main/java/com/gemstone/gemfire/internal/statistics/StatMonitorHandler.java b/geode-core/src/main/java/com/gemstone/gemfire/internal/statistics/StatMonitorHandler.java index c8be6016cb1d..70e0e17afac4 100755 --- a/geode-core/src/main/java/com/gemstone/gemfire/internal/statistics/StatMonitorHandler.java +++ b/geode-core/src/main/java/com/gemstone/gemfire/internal/statistics/StatMonitorHandler.java @@ -28,7 +28,6 @@ import com.gemstone.gemfire.internal.logging.log4j.LogMarker; /** - * @author Kirk Lund * @since 7.0 */ public class StatMonitorHandler implements SampleHandler { @@ -158,7 +157,6 @@ StatMonitorNotifier getStatMonitorNotifier() { } /** - * @author Kirk Lund * @since 7.0 */ class StatMonitorNotifier implements Runnable { @@ -313,7 +311,6 @@ public String toString() { } /** - * @author Kirk Lund * @since 7.0 */ static class MonitorTask { diff --git a/geode-core/src/main/java/com/gemstone/gemfire/internal/statistics/StatisticId.java b/geode-core/src/main/java/com/gemstone/gemfire/internal/statistics/StatisticId.java index 28174a9f3b6f..cf1bbab67683 100755 --- a/geode-core/src/main/java/com/gemstone/gemfire/internal/statistics/StatisticId.java +++ b/geode-core/src/main/java/com/gemstone/gemfire/internal/statistics/StatisticId.java @@ -26,7 +26,6 @@ * StatisticsType may describe one or more Statistics instances, while a * StatisticDescriptor may describe one or more StatisticId instances. * - * @author Kirk Lund * @since 7.0 */ public interface StatisticId { diff --git a/geode-core/src/main/java/com/gemstone/gemfire/internal/statistics/StatisticNotFoundException.java b/geode-core/src/main/java/com/gemstone/gemfire/internal/statistics/StatisticNotFoundException.java index 53a76dfbe2de..1d60b47084c3 100755 --- a/geode-core/src/main/java/com/gemstone/gemfire/internal/statistics/StatisticNotFoundException.java +++ b/geode-core/src/main/java/com/gemstone/gemfire/internal/statistics/StatisticNotFoundException.java @@ -19,7 +19,6 @@ import com.gemstone.gemfire.GemFireCheckedException; /** - * @author Kirk Lund * @since 7.0 */ public class StatisticNotFoundException extends GemFireCheckedException { diff --git a/geode-core/src/main/java/com/gemstone/gemfire/internal/statistics/StatisticsListener.java b/geode-core/src/main/java/com/gemstone/gemfire/internal/statistics/StatisticsListener.java index 5d880d8db310..f8462f28b455 100755 --- a/geode-core/src/main/java/com/gemstone/gemfire/internal/statistics/StatisticsListener.java +++ b/geode-core/src/main/java/com/gemstone/gemfire/internal/statistics/StatisticsListener.java @@ -17,7 +17,6 @@ package com.gemstone.gemfire.internal.statistics; /** - * @author Kirk Lund * @since 7.0 */ public interface StatisticsListener { diff --git a/geode-core/src/main/java/com/gemstone/gemfire/internal/statistics/StatisticsMonitor.java b/geode-core/src/main/java/com/gemstone/gemfire/internal/statistics/StatisticsMonitor.java index ea2c50b577ed..1940ac9d93ea 100755 --- a/geode-core/src/main/java/com/gemstone/gemfire/internal/statistics/StatisticsMonitor.java +++ b/geode-core/src/main/java/com/gemstone/gemfire/internal/statistics/StatisticsMonitor.java @@ -25,7 +25,6 @@ * static monitoring that will fire for all instances even ones that may not * yet be created at the time this monitor is defined * - * @author Kirk Lund * @since 7.0 */ public abstract class StatisticsMonitor { diff --git a/geode-core/src/main/java/com/gemstone/gemfire/internal/statistics/StatisticsNotification.java b/geode-core/src/main/java/com/gemstone/gemfire/internal/statistics/StatisticsNotification.java index 2bf85f098db8..e4e8ea5fa903 100755 --- a/geode-core/src/main/java/com/gemstone/gemfire/internal/statistics/StatisticsNotification.java +++ b/geode-core/src/main/java/com/gemstone/gemfire/internal/statistics/StatisticsNotification.java @@ -23,7 +23,6 @@ import com.gemstone.gemfire.StatisticsType; /** - * @author Kirk Lund * @since 7.0 */ public interface StatisticsNotification extends Iterable { diff --git a/geode-core/src/main/java/com/gemstone/gemfire/internal/statistics/StatisticsSampler.java b/geode-core/src/main/java/com/gemstone/gemfire/internal/statistics/StatisticsSampler.java index 52d6ad071667..7feb07470d88 100755 --- a/geode-core/src/main/java/com/gemstone/gemfire/internal/statistics/StatisticsSampler.java +++ b/geode-core/src/main/java/com/gemstone/gemfire/internal/statistics/StatisticsSampler.java @@ -22,7 +22,6 @@ * Defines the minimal contract for a StatisticsSampler. This is used by * classes that need to interact with the sampler. * - * @author Kirk Lund * @since 7.0 */ public interface StatisticsSampler { diff --git a/geode-core/src/main/java/com/gemstone/gemfire/internal/statistics/ValueMonitor.java b/geode-core/src/main/java/com/gemstone/gemfire/internal/statistics/ValueMonitor.java index 9587d79a7b4c..6c0b85374689 100755 --- a/geode-core/src/main/java/com/gemstone/gemfire/internal/statistics/ValueMonitor.java +++ b/geode-core/src/main/java/com/gemstone/gemfire/internal/statistics/ValueMonitor.java @@ -50,7 +50,6 @@ public void handleNotification(StatisticsNotification notify) { }; } * - * @author Kirk Lund * @since 7.0 * @see com.gemstone.gemfire.Statistics */ diff --git a/geode-core/src/main/java/com/gemstone/gemfire/internal/stats50/Atomic50StatisticsImpl.java b/geode-core/src/main/java/com/gemstone/gemfire/internal/stats50/Atomic50StatisticsImpl.java index cdd8ee60ec7c..10ad8ce9b16d 100644 --- a/geode-core/src/main/java/com/gemstone/gemfire/internal/stats50/Atomic50StatisticsImpl.java +++ b/geode-core/src/main/java/com/gemstone/gemfire/internal/stats50/Atomic50StatisticsImpl.java @@ -31,7 +31,6 @@ * * @see Package introduction * - * @author Darrel Schneider * * @since 3.0 * diff --git a/geode-core/src/main/java/com/gemstone/gemfire/internal/tcp/BaseMsgStreamer.java b/geode-core/src/main/java/com/gemstone/gemfire/internal/tcp/BaseMsgStreamer.java index 214b514af503..b5eb60e4f9d9 100644 --- a/geode-core/src/main/java/com/gemstone/gemfire/internal/tcp/BaseMsgStreamer.java +++ b/geode-core/src/main/java/com/gemstone/gemfire/internal/tcp/BaseMsgStreamer.java @@ -26,7 +26,6 @@ * Base interface for {@link MsgStreamer} and {@link MsgStreamerList} to send a * message over a list of connections to one or more peers. * - * @author swale * @since 7.1 */ public interface BaseMsgStreamer { diff --git a/geode-core/src/main/java/com/gemstone/gemfire/internal/tcp/Buffers.java b/geode-core/src/main/java/com/gemstone/gemfire/internal/tcp/Buffers.java index 8bc290c65771..bb24fabd3480 100644 --- a/geode-core/src/main/java/com/gemstone/gemfire/internal/tcp/Buffers.java +++ b/geode-core/src/main/java/com/gemstone/gemfire/internal/tcp/Buffers.java @@ -26,7 +26,6 @@ import com.gemstone.gemfire.internal.Assert; /** - * @author dsmith * */ public class Buffers { diff --git a/geode-core/src/main/java/com/gemstone/gemfire/internal/tcp/ConnectExceptions.java b/geode-core/src/main/java/com/gemstone/gemfire/internal/tcp/ConnectExceptions.java index f9b6fa51f1a2..fcaacbca7ed5 100755 --- a/geode-core/src/main/java/com/gemstone/gemfire/internal/tcp/ConnectExceptions.java +++ b/geode-core/src/main/java/com/gemstone/gemfire/internal/tcp/ConnectExceptions.java @@ -27,7 +27,6 @@ * This exception is thrown as a result of one or more failed attempts * to connect to a remote conduit. * - * @author David Whitlock * * * @since 3.0 diff --git a/geode-core/src/main/java/com/gemstone/gemfire/internal/tcp/Connection.java b/geode-core/src/main/java/com/gemstone/gemfire/internal/tcp/Connection.java index 988ca33c0677..bf44cd379f68 100644 --- a/geode-core/src/main/java/com/gemstone/gemfire/internal/tcp/Connection.java +++ b/geode-core/src/main/java/com/gemstone/gemfire/internal/tcp/Connection.java @@ -90,7 +90,6 @@ message objects. A Connection may be closed to preserve system resources and will automatically be reopened when it's needed.

    - @author Bruce Schuchardt @since 2.0 */ diff --git a/geode-core/src/main/java/com/gemstone/gemfire/internal/tcp/ConnectionException.java b/geode-core/src/main/java/com/gemstone/gemfire/internal/tcp/ConnectionException.java index 590c71af4ca8..604b40593b83 100644 --- a/geode-core/src/main/java/com/gemstone/gemfire/internal/tcp/ConnectionException.java +++ b/geode-core/src/main/java/com/gemstone/gemfire/internal/tcp/ConnectionException.java @@ -19,7 +19,6 @@ import com.gemstone.gemfire.GemFireException; /** - @author Bruce Schuchardt @since 3.0 */ diff --git a/geode-core/src/main/java/com/gemstone/gemfire/internal/tcp/ConnectionTable.java b/geode-core/src/main/java/com/gemstone/gemfire/internal/tcp/ConnectionTable.java index 3816efe6c489..e4b35a27101c 100644 --- a/geode-core/src/main/java/com/gemstone/gemfire/internal/tcp/ConnectionTable.java +++ b/geode-core/src/main/java/com/gemstone/gemfire/internal/tcp/ConnectionTable.java @@ -63,8 +63,6 @@ Connections represent a pipe between two endpoints represented by generic DistributedMembers.

    - @author Bruce Schuchardt - @author Darrel Schneider @since 2.1 */ /* diff --git a/geode-core/src/main/java/com/gemstone/gemfire/internal/tcp/DirectReplySender.java b/geode-core/src/main/java/com/gemstone/gemfire/internal/tcp/DirectReplySender.java index a491c9b7f926..fd043e72f852 100644 --- a/geode-core/src/main/java/com/gemstone/gemfire/internal/tcp/DirectReplySender.java +++ b/geode-core/src/main/java/com/gemstone/gemfire/internal/tcp/DirectReplySender.java @@ -39,7 +39,6 @@ /** * A reply sender which replies back directly to a dedicated socket * socket. - * @author dsmith * */ class DirectReplySender implements ReplySender { diff --git a/geode-core/src/main/java/com/gemstone/gemfire/internal/tcp/MemberShunnedException.java b/geode-core/src/main/java/com/gemstone/gemfire/internal/tcp/MemberShunnedException.java index a95481478025..1de1a6acac39 100644 --- a/geode-core/src/main/java/com/gemstone/gemfire/internal/tcp/MemberShunnedException.java +++ b/geode-core/src/main/java/com/gemstone/gemfire/internal/tcp/MemberShunnedException.java @@ -24,7 +24,6 @@ * MemberShunnedException may be thrown to prevent ack-ing a message * received from a member that has been removed from membership. It * is currently only thrown by JGroupMembershipManager.processMessage() - * @author bruce */ public class MemberShunnedException extends GemFireException { diff --git a/geode-core/src/main/java/com/gemstone/gemfire/internal/tcp/MsgDestreamer.java b/geode-core/src/main/java/com/gemstone/gemfire/internal/tcp/MsgDestreamer.java index 9cd1c62455ef..95826316275b 100644 --- a/geode-core/src/main/java/com/gemstone/gemfire/internal/tcp/MsgDestreamer.java +++ b/geode-core/src/main/java/com/gemstone/gemfire/internal/tcp/MsgDestreamer.java @@ -40,7 +40,6 @@ * This allows us to receive a message without needing to * read it completely into a buffer before we can start deserializing it. - @author Darrel @since 5.0.2 */ diff --git a/geode-core/src/main/java/com/gemstone/gemfire/internal/tcp/MsgIdGenerator.java b/geode-core/src/main/java/com/gemstone/gemfire/internal/tcp/MsgIdGenerator.java index 10bec274ca0d..b4c0d07294d1 100644 --- a/geode-core/src/main/java/com/gemstone/gemfire/internal/tcp/MsgIdGenerator.java +++ b/geode-core/src/main/java/com/gemstone/gemfire/internal/tcp/MsgIdGenerator.java @@ -23,7 +23,6 @@ * Failure to call release will eventually cause obtain to fail with an exception. *

    Currently ids are in the range 0..32767 inclusive. * - * @author Darrel * @since 5.0.2 */ diff --git a/geode-core/src/main/java/com/gemstone/gemfire/internal/tcp/MsgOutputStream.java b/geode-core/src/main/java/com/gemstone/gemfire/internal/tcp/MsgOutputStream.java index a6a9186960c5..c593b27bb9d1 100644 --- a/geode-core/src/main/java/com/gemstone/gemfire/internal/tcp/MsgOutputStream.java +++ b/geode-core/src/main/java/com/gemstone/gemfire/internal/tcp/MsgOutputStream.java @@ -25,7 +25,6 @@ /** MsgOutputStream should no longer be used except in Connection * to do the handshake. Otherwise MsgStreamer should always be used. - @author Darrel @since 3.0 */ diff --git a/geode-core/src/main/java/com/gemstone/gemfire/internal/tcp/MsgReader.java b/geode-core/src/main/java/com/gemstone/gemfire/internal/tcp/MsgReader.java index 48876b4b04d5..39bd36506fa6 100644 --- a/geode-core/src/main/java/com/gemstone/gemfire/internal/tcp/MsgReader.java +++ b/geode-core/src/main/java/com/gemstone/gemfire/internal/tcp/MsgReader.java @@ -29,7 +29,6 @@ * This class is currently used for reading direct ack responses * It should probably be used for all of the reading done * in Connection. - * @author dsmith * */ public abstract class MsgReader { diff --git a/geode-core/src/main/java/com/gemstone/gemfire/internal/tcp/MsgStreamer.java b/geode-core/src/main/java/com/gemstone/gemfire/internal/tcp/MsgStreamer.java index 88bcf34ead94..9fb2eb8d9974 100644 --- a/geode-core/src/main/java/com/gemstone/gemfire/internal/tcp/MsgStreamer.java +++ b/geode-core/src/main/java/com/gemstone/gemfire/internal/tcp/MsgStreamer.java @@ -46,7 +46,6 @@ * in chunks. This allows us to send a message without needing to * perserialize it completely in memory thus saving buffer memory. - @author Darrel @since 5.0.2 */ diff --git a/geode-core/src/main/java/com/gemstone/gemfire/internal/tcp/MsgStreamerList.java b/geode-core/src/main/java/com/gemstone/gemfire/internal/tcp/MsgStreamerList.java index 8b90fb9d58d3..419db2d44179 100644 --- a/geode-core/src/main/java/com/gemstone/gemfire/internal/tcp/MsgStreamerList.java +++ b/geode-core/src/main/java/com/gemstone/gemfire/internal/tcp/MsgStreamerList.java @@ -31,7 +31,6 @@ * requiring possibly different serializations for different versions of * product. * - * @author swale * @since 7.1 */ public final class MsgStreamerList implements BaseMsgStreamer { diff --git a/geode-core/src/main/java/com/gemstone/gemfire/internal/tcp/NIOMsgReader.java b/geode-core/src/main/java/com/gemstone/gemfire/internal/tcp/NIOMsgReader.java index 77344312a5b1..783e0ead5c13 100644 --- a/geode-core/src/main/java/com/gemstone/gemfire/internal/tcp/NIOMsgReader.java +++ b/geode-core/src/main/java/com/gemstone/gemfire/internal/tcp/NIOMsgReader.java @@ -27,7 +27,6 @@ /** * A message reader which reads from the socket * using (blocking) nio. - * @author dsmith * */ public class NIOMsgReader extends MsgReader { diff --git a/geode-core/src/main/java/com/gemstone/gemfire/internal/tcp/OioMsgReader.java b/geode-core/src/main/java/com/gemstone/gemfire/internal/tcp/OioMsgReader.java index bef40bab154b..5894b482d8fd 100644 --- a/geode-core/src/main/java/com/gemstone/gemfire/internal/tcp/OioMsgReader.java +++ b/geode-core/src/main/java/com/gemstone/gemfire/internal/tcp/OioMsgReader.java @@ -24,7 +24,6 @@ /** * A message reader which reads from the socket using * the old io. - * @author dsmith * */ public class OioMsgReader extends MsgReader { diff --git a/geode-core/src/main/java/com/gemstone/gemfire/internal/tcp/ReenteredConnectException.java b/geode-core/src/main/java/com/gemstone/gemfire/internal/tcp/ReenteredConnectException.java index 438766d75316..5537c3fc55d9 100644 --- a/geode-core/src/main/java/com/gemstone/gemfire/internal/tcp/ReenteredConnectException.java +++ b/geode-core/src/main/java/com/gemstone/gemfire/internal/tcp/ReenteredConnectException.java @@ -26,7 +26,6 @@ * This condition has been observered when using an AlertListener, because * we try to transmit messages logged during a connection to the very member * we're trying to connect to. - * @author dsmith * */ public class ReenteredConnectException extends GemFireException { diff --git a/geode-core/src/main/java/com/gemstone/gemfire/internal/tcp/ServerDelegate.java b/geode-core/src/main/java/com/gemstone/gemfire/internal/tcp/ServerDelegate.java index cd711e7a104e..67f0ba8142c4 100644 --- a/geode-core/src/main/java/com/gemstone/gemfire/internal/tcp/ServerDelegate.java +++ b/geode-core/src/main/java/com/gemstone/gemfire/internal/tcp/ServerDelegate.java @@ -28,7 +28,6 @@ @see com.gemstone.gemfire.distributed.internal.direct.DirectChannel - @author Bruce Schuchardt @since 2.0 */ diff --git a/geode-core/src/main/java/com/gemstone/gemfire/internal/tcp/TCPConduit.java b/geode-core/src/main/java/com/gemstone/gemfire/internal/tcp/TCPConduit.java index 41e5837258a7..0cf75a836959 100644 --- a/geode-core/src/main/java/com/gemstone/gemfire/internal/tcp/TCPConduit.java +++ b/geode-core/src/main/java/com/gemstone/gemfire/internal/tcp/TCPConduit.java @@ -76,7 +76,6 @@ If the ServerDelegate is null, DistributionMessages are ignored by the TCPConduit.

    - @author Bruce Schuchardt @since 2.0 */ diff --git a/geode-core/src/main/java/com/gemstone/gemfire/internal/tcp/VersionedByteBufferInputStream.java b/geode-core/src/main/java/com/gemstone/gemfire/internal/tcp/VersionedByteBufferInputStream.java index 9503e09499ba..60d3ec366a95 100644 --- a/geode-core/src/main/java/com/gemstone/gemfire/internal/tcp/VersionedByteBufferInputStream.java +++ b/geode-core/src/main/java/com/gemstone/gemfire/internal/tcp/VersionedByteBufferInputStream.java @@ -27,7 +27,6 @@ * {@link VersionedDataStream} for a stream coming from a different product * version. * - * @author swale * @since 7.1 */ public class VersionedByteBufferInputStream extends ByteBufferInputStream diff --git a/geode-core/src/main/java/com/gemstone/gemfire/internal/tcp/VersionedMsgStreamer.java b/geode-core/src/main/java/com/gemstone/gemfire/internal/tcp/VersionedMsgStreamer.java index b734a813002f..2d990bb0fb51 100644 --- a/geode-core/src/main/java/com/gemstone/gemfire/internal/tcp/VersionedMsgStreamer.java +++ b/geode-core/src/main/java/com/gemstone/gemfire/internal/tcp/VersionedMsgStreamer.java @@ -28,7 +28,6 @@ * An extension of {@link MsgStreamer} that implements * {@link VersionedDataStream}. * - * @author swale * @since 7.1 */ final class VersionedMsgStreamer extends MsgStreamer implements diff --git a/geode-core/src/main/java/com/gemstone/gemfire/internal/util/ArrayUtils.java b/geode-core/src/main/java/com/gemstone/gemfire/internal/util/ArrayUtils.java index 7222660ee14e..4f15b17dfe9d 100644 --- a/geode-core/src/main/java/com/gemstone/gemfire/internal/util/ArrayUtils.java +++ b/geode-core/src/main/java/com/gemstone/gemfire/internal/util/ArrayUtils.java @@ -23,8 +23,6 @@ import com.gemstone.gemfire.internal.offheap.annotations.Unretained; /** - * @author John Blum - * @author jpenney * * Handle some simple editing of fixed-length arrays. * diff --git a/geode-core/src/main/java/com/gemstone/gemfire/internal/util/Breadcrumbs.java b/geode-core/src/main/java/com/gemstone/gemfire/internal/util/Breadcrumbs.java index 6c0c52c9524a..00884c63e788 100755 --- a/geode-core/src/main/java/com/gemstone/gemfire/internal/util/Breadcrumbs.java +++ b/geode-core/src/main/java/com/gemstone/gemfire/internal/util/Breadcrumbs.java @@ -24,7 +24,6 @@ * Breadcrumbs establishes traces in thread names that are useful in figuring * out what is going on in a distributed system given only stack traces. * - * @author Bruce Schuchardt * @since 20 May 2014 * */ diff --git a/geode-core/src/main/java/com/gemstone/gemfire/internal/util/Bytes.java b/geode-core/src/main/java/com/gemstone/gemfire/internal/util/Bytes.java index 7bf2c8e39191..b8f2f8a6130f 100644 --- a/geode-core/src/main/java/com/gemstone/gemfire/internal/util/Bytes.java +++ b/geode-core/src/main/java/com/gemstone/gemfire/internal/util/Bytes.java @@ -21,7 +21,6 @@ /** * Provides utilities for converting from byte[] to primitive values. * - * @author bakera */ public class Bytes { /** diff --git a/geode-core/src/main/java/com/gemstone/gemfire/internal/util/Callable.java b/geode-core/src/main/java/com/gemstone/gemfire/internal/util/Callable.java index 0062c15af288..7799224978a2 100755 --- a/geode-core/src/main/java/com/gemstone/gemfire/internal/util/Callable.java +++ b/geode-core/src/main/java/com/gemstone/gemfire/internal/util/Callable.java @@ -33,7 +33,6 @@ * Runnable, however, does not return a result and cannot * throw a checked exception. * - * @author Eric Zoerner * * @version based on JSR166 Callable version 1.6. */ diff --git a/geode-core/src/main/java/com/gemstone/gemfire/internal/util/CollectionUtils.java b/geode-core/src/main/java/com/gemstone/gemfire/internal/util/CollectionUtils.java index 4830d30669f9..bbc6b1d47805 100644 --- a/geode-core/src/main/java/com/gemstone/gemfire/internal/util/CollectionUtils.java +++ b/geode-core/src/main/java/com/gemstone/gemfire/internal/util/CollectionUtils.java @@ -35,7 +35,6 @@ * The CollectionUtils class is a utility class for working with the Java Collections framework of classes, data * structures and algorithms. *

    - * @author John Blum * @see com.gemstone.gemfire.internal.lang.Filter * @see java.util.Arrays * @see java.util.Collection @@ -245,7 +244,6 @@ public static final Iterable unmodifiableIterable(final Iterable itera * Unmodifiable {@link Iterable} in the style of * {@link Collections#unmodifiableCollection(Collection)}. * - * @author jbarrett@pivotal.io * * @since 8.1 */ diff --git a/geode-core/src/main/java/com/gemstone/gemfire/internal/util/DebuggerSupport.java b/geode-core/src/main/java/com/gemstone/gemfire/internal/util/DebuggerSupport.java index 3df61ec70e05..d40c5519f2c0 100644 --- a/geode-core/src/main/java/com/gemstone/gemfire/internal/util/DebuggerSupport.java +++ b/geode-core/src/main/java/com/gemstone/gemfire/internal/util/DebuggerSupport.java @@ -24,7 +24,6 @@ /** * - * @author Eric Zoerner * */ public abstract class DebuggerSupport { diff --git a/geode-core/src/main/java/com/gemstone/gemfire/internal/util/DelayedAction.java b/geode-core/src/main/java/com/gemstone/gemfire/internal/util/DelayedAction.java index 146a9a3fa843..0a6003164940 100644 --- a/geode-core/src/main/java/com/gemstone/gemfire/internal/util/DelayedAction.java +++ b/geode-core/src/main/java/com/gemstone/gemfire/internal/util/DelayedAction.java @@ -23,7 +23,6 @@ * two threads have both reached expected code before proceeding. Unlike a * barrier pattern, the threads can be allowed to proceed independently. * - * @author bakera */ public class DelayedAction implements Runnable { private final CountDownLatch hit = new CountDownLatch(1); diff --git a/geode-core/src/main/java/com/gemstone/gemfire/internal/util/Hex.java b/geode-core/src/main/java/com/gemstone/gemfire/internal/util/Hex.java index 19874927dabf..8cbd40f56706 100644 --- a/geode-core/src/main/java/com/gemstone/gemfire/internal/util/Hex.java +++ b/geode-core/src/main/java/com/gemstone/gemfire/internal/util/Hex.java @@ -19,7 +19,6 @@ /** * Provides hexadecimal conversion and display utilities. * - * @author bakera */ public class Hex { /** hex chars */ diff --git a/geode-core/src/main/java/com/gemstone/gemfire/internal/util/IOUtils.java b/geode-core/src/main/java/com/gemstone/gemfire/internal/util/IOUtils.java index 30042ce4b5ed..3effd6989db7 100644 --- a/geode-core/src/main/java/com/gemstone/gemfire/internal/util/IOUtils.java +++ b/geode-core/src/main/java/com/gemstone/gemfire/internal/util/IOUtils.java @@ -33,7 +33,6 @@ /** * Reusable Input/Output operation utility methods. *

    - * @author John Blum * @since 6.6 */ @SuppressWarnings("unused") diff --git a/geode-core/src/main/java/com/gemstone/gemfire/internal/util/JavaCommandBuilder.java b/geode-core/src/main/java/com/gemstone/gemfire/internal/util/JavaCommandBuilder.java index f2894524c9e7..233ab8321e43 100644 --- a/geode-core/src/main/java/com/gemstone/gemfire/internal/util/JavaCommandBuilder.java +++ b/geode-core/src/main/java/com/gemstone/gemfire/internal/util/JavaCommandBuilder.java @@ -23,7 +23,6 @@ /** * A utility class for building up arguments used in spawning another VM - * @author kbanks **/ public class JavaCommandBuilder { diff --git a/geode-core/src/main/java/com/gemstone/gemfire/internal/util/LogFileUtils.java b/geode-core/src/main/java/com/gemstone/gemfire/internal/util/LogFileUtils.java index 587728dfdd8c..b1ac33f0fc96 100644 --- a/geode-core/src/main/java/com/gemstone/gemfire/internal/util/LogFileUtils.java +++ b/geode-core/src/main/java/com/gemstone/gemfire/internal/util/LogFileUtils.java @@ -30,7 +30,6 @@ /** * Utility class for copying log files * - * @author gregp * @since 6.5 */ public class LogFileUtils { diff --git a/geode-core/src/main/java/com/gemstone/gemfire/internal/util/ObjectIntProcedure.java b/geode-core/src/main/java/com/gemstone/gemfire/internal/util/ObjectIntProcedure.java index 87632d5c56c1..1822c09e748d 100755 --- a/geode-core/src/main/java/com/gemstone/gemfire/internal/util/ObjectIntProcedure.java +++ b/geode-core/src/main/java/com/gemstone/gemfire/internal/util/ObjectIntProcedure.java @@ -20,7 +20,6 @@ * Similar to the Trove TObjectProcedure, this is used in iterating over some * GemFire collections * - * @author bschuchardt * */ public interface ObjectIntProcedure { diff --git a/geode-core/src/main/java/com/gemstone/gemfire/internal/util/PasswordUtil.java b/geode-core/src/main/java/com/gemstone/gemfire/internal/util/PasswordUtil.java index d3df48f46e9f..52f295113b82 100644 --- a/geode-core/src/main/java/com/gemstone/gemfire/internal/util/PasswordUtil.java +++ b/geode-core/src/main/java/com/gemstone/gemfire/internal/util/PasswordUtil.java @@ -42,7 +42,6 @@ * password attribute of the jndi-binding tag, like this: password="password" *
    * - * @author Yogesh Mahajan */ public class PasswordUtil { diff --git a/geode-core/src/main/java/com/gemstone/gemfire/internal/util/PluckStacks.java b/geode-core/src/main/java/com/gemstone/gemfire/internal/util/PluckStacks.java index c1efbcc3b43e..39a035d5b4c1 100644 --- a/geode-core/src/main/java/com/gemstone/gemfire/internal/util/PluckStacks.java +++ b/geode-core/src/main/java/com/gemstone/gemfire/internal/util/PluckStacks.java @@ -40,7 +40,6 @@ * rest to stdout. * * - * @author bruces * */ diff --git a/geode-core/src/main/java/com/gemstone/gemfire/internal/util/SingletonCallable.java b/geode-core/src/main/java/com/gemstone/gemfire/internal/util/SingletonCallable.java index d49736846a4b..3df9dfa82d78 100644 --- a/geode-core/src/main/java/com/gemstone/gemfire/internal/util/SingletonCallable.java +++ b/geode-core/src/main/java/com/gemstone/gemfire/internal/util/SingletonCallable.java @@ -26,7 +26,6 @@ * fail with the same exception without having to perform the * expensive operation. * - * @author sbawaskar * * @param the type of return value */ diff --git a/geode-core/src/main/java/com/gemstone/gemfire/internal/util/SingletonValue.java b/geode-core/src/main/java/com/gemstone/gemfire/internal/util/SingletonValue.java index 5f902b69576e..c0841927c999 100644 --- a/geode-core/src/main/java/com/gemstone/gemfire/internal/util/SingletonValue.java +++ b/geode-core/src/main/java/com/gemstone/gemfire/internal/util/SingletonValue.java @@ -39,7 +39,6 @@ * supports timeouts, the serial execution penalty can cause "timeout stacking" * and thus unbounded delays on the invoking threads. * - * @author bakera * * @param the type of the singleton */ diff --git a/geode-core/src/main/java/com/gemstone/gemfire/internal/util/StackTraceCollector.java b/geode-core/src/main/java/com/gemstone/gemfire/internal/util/StackTraceCollector.java index e70756d35f74..9e3238d53768 100644 --- a/geode-core/src/main/java/com/gemstone/gemfire/internal/util/StackTraceCollector.java +++ b/geode-core/src/main/java/com/gemstone/gemfire/internal/util/StackTraceCollector.java @@ -35,7 +35,6 @@ * } * * - * @author rholmes * * @since 9.0 */ diff --git a/geode-core/src/main/java/com/gemstone/gemfire/internal/util/SunAPINotFoundException.java b/geode-core/src/main/java/com/gemstone/gemfire/internal/util/SunAPINotFoundException.java index 88e2e779bd37..d3717a7f8745 100644 --- a/geode-core/src/main/java/com/gemstone/gemfire/internal/util/SunAPINotFoundException.java +++ b/geode-core/src/main/java/com/gemstone/gemfire/internal/util/SunAPINotFoundException.java @@ -21,7 +21,6 @@ * The SunAPINotFoundException class is a RuntimeException indicating that the Sun API classes and components could * not be found, which is most likely the case when we are not running a Sun JVM (like HotSpot). *

    - * @author John Blum * @see java.lang.RuntimeException * @since 7.0 */ diff --git a/geode-core/src/main/java/com/gemstone/gemfire/internal/util/TransformUtils.java b/geode-core/src/main/java/com/gemstone/gemfire/internal/util/TransformUtils.java index 809a29e88d82..349ea2d1ff25 100644 --- a/geode-core/src/main/java/com/gemstone/gemfire/internal/util/TransformUtils.java +++ b/geode-core/src/main/java/com/gemstone/gemfire/internal/util/TransformUtils.java @@ -26,7 +26,6 @@ /** * Contains common data tranformation utility methods and transformers. - * @author rholmes */ public final class TransformUtils { diff --git a/geode-core/src/main/java/com/gemstone/gemfire/internal/util/Transformer.java b/geode-core/src/main/java/com/gemstone/gemfire/internal/util/Transformer.java index 3bfff89b06fe..8abba4778ee2 100644 --- a/geode-core/src/main/java/com/gemstone/gemfire/internal/util/Transformer.java +++ b/geode-core/src/main/java/com/gemstone/gemfire/internal/util/Transformer.java @@ -18,7 +18,6 @@ /** * Represents a data transform between two types. - * @author rholmes * * @param The data type to be transformed from. * @param The data type to be transformed to. diff --git a/geode-core/src/main/java/com/gemstone/gemfire/internal/util/Versionable.java b/geode-core/src/main/java/com/gemstone/gemfire/internal/util/Versionable.java index a5b02e04b6b3..1c9cdccb6813 100644 --- a/geode-core/src/main/java/com/gemstone/gemfire/internal/util/Versionable.java +++ b/geode-core/src/main/java/com/gemstone/gemfire/internal/util/Versionable.java @@ -21,7 +21,6 @@ * A simple interface that describes the contract of an * object that has a version * - * @author Mitch Thomas * @since 5.0 */ public interface Versionable diff --git a/geode-core/src/main/java/com/gemstone/gemfire/internal/util/VersionedArrayList.java b/geode-core/src/main/java/com/gemstone/gemfire/internal/util/VersionedArrayList.java index 0be01c12d65d..50088ee4a659 100644 --- a/geode-core/src/main/java/com/gemstone/gemfire/internal/util/VersionedArrayList.java +++ b/geode-core/src/main/java/com/gemstone/gemfire/internal/util/VersionedArrayList.java @@ -38,7 +38,6 @@ * * @see java.util.ConcurrentModificationException * - * @author rreja */ public class VersionedArrayList implements DataSerializable, Versionable, Iterable { diff --git a/geode-core/src/main/java/com/gemstone/gemfire/internal/util/concurrent/CopyOnWriteHashMap.java b/geode-core/src/main/java/com/gemstone/gemfire/internal/util/concurrent/CopyOnWriteHashMap.java index 2ac55e2b51f2..d6c9d9457811 100644 --- a/geode-core/src/main/java/com/gemstone/gemfire/internal/util/concurrent/CopyOnWriteHashMap.java +++ b/geode-core/src/main/java/com/gemstone/gemfire/internal/util/concurrent/CopyOnWriteHashMap.java @@ -31,7 +31,6 @@ * Note that the entryKey and keySet of this map are unmodifable. * Should be easy to make them modifiable at a future time. * - * @author dsmith * */ public class CopyOnWriteHashMap extends AbstractMap implements ConcurrentMap , Serializable { diff --git a/geode-core/src/main/java/com/gemstone/gemfire/internal/util/concurrent/CopyOnWriteWeakHashMap.java b/geode-core/src/main/java/com/gemstone/gemfire/internal/util/concurrent/CopyOnWriteWeakHashMap.java index b50086eb6a44..626740e1facc 100644 --- a/geode-core/src/main/java/com/gemstone/gemfire/internal/util/concurrent/CopyOnWriteWeakHashMap.java +++ b/geode-core/src/main/java/com/gemstone/gemfire/internal/util/concurrent/CopyOnWriteWeakHashMap.java @@ -25,7 +25,6 @@ /** * A copy on write hash map that uses weak references for keys. * - * @author dsmith * */ public class CopyOnWriteWeakHashMap extends AbstractMap { diff --git a/geode-core/src/main/java/com/gemstone/gemfire/internal/util/concurrent/CustomEntryConcurrentHashMap.java b/geode-core/src/main/java/com/gemstone/gemfire/internal/util/concurrent/CustomEntryConcurrentHashMap.java index 0695e4c93a9c..f5ce4b41e1a4 100644 --- a/geode-core/src/main/java/com/gemstone/gemfire/internal/util/concurrent/CustomEntryConcurrentHashMap.java +++ b/geode-core/src/main/java/com/gemstone/gemfire/internal/util/concurrent/CustomEntryConcurrentHashMap.java @@ -129,7 +129,6 @@ * /../technotes/guides/collections/index.html"> Java Collections Framework. * * @since 1.5 - * @author Doug Lea * @param * the type of keys maintained by this map * @param @@ -1132,7 +1131,6 @@ final ArrayList> clear(ArrayList> clearedEntries) * Extension of {@link com.gemstone.gemfire.internal.util.concurrent.CustomEntryConcurrentHashMap.Segment} using reference-equality comparison for key, * value equality instead of equals method. * - * @author swale * @since 7.0 */ static final class IdentitySegment extends Segment implements @@ -1683,7 +1681,6 @@ public final boolean create(final K key, final V value) { * Also allows invoking a method when removing from map by a call to * {@link #removeConditionally(Object, MapCallback, Object, Object)}. * - * @author swale * @since 7.0 * * @param diff --git a/geode-core/src/main/java/com/gemstone/gemfire/internal/util/concurrent/FutureResult.java b/geode-core/src/main/java/com/gemstone/gemfire/internal/util/concurrent/FutureResult.java index fbf9ccf6ecf4..0fe2765e6dad 100644 --- a/geode-core/src/main/java/com/gemstone/gemfire/internal/util/concurrent/FutureResult.java +++ b/geode-core/src/main/java/com/gemstone/gemfire/internal/util/concurrent/FutureResult.java @@ -33,7 +33,6 @@ * Cancelling this future sets the state to cancelled and causes threads * waiting on get to proceed with a CancellationException. * - * @author Eric Zoerner */ public class FutureResult implements Future { private final StoppableCountDownLatch latch; diff --git a/geode-core/src/main/java/com/gemstone/gemfire/internal/util/concurrent/ReentrantSemaphore.java b/geode-core/src/main/java/com/gemstone/gemfire/internal/util/concurrent/ReentrantSemaphore.java index c5b81de095cd..96c7fbcc7b6a 100644 --- a/geode-core/src/main/java/com/gemstone/gemfire/internal/util/concurrent/ReentrantSemaphore.java +++ b/geode-core/src/main/java/com/gemstone/gemfire/internal/util/concurrent/ReentrantSemaphore.java @@ -34,7 +34,6 @@ * * This semaphore is useful for allowing only a limited number of threads to enter a block of code, * while allowing a single thread to try to enter that block several times in it's call stack. - * @author dsmith * */ public class ReentrantSemaphore extends Semaphore { diff --git a/geode-core/src/main/java/com/gemstone/gemfire/internal/util/concurrent/SemaphoreReadWriteLock.java b/geode-core/src/main/java/com/gemstone/gemfire/internal/util/concurrent/SemaphoreReadWriteLock.java index 57cef6c89dc5..0a745699a220 100644 --- a/geode-core/src/main/java/com/gemstone/gemfire/internal/util/concurrent/SemaphoreReadWriteLock.java +++ b/geode-core/src/main/java/com/gemstone/gemfire/internal/util/concurrent/SemaphoreReadWriteLock.java @@ -26,7 +26,6 @@ * This ReadWriteLock is useful when different threads need to lock * and unlock the read lock. This is NOT a reentrant lock. * - * @author sbawaska */ public class SemaphoreReadWriteLock implements ReadWriteLock { diff --git a/geode-core/src/main/java/com/gemstone/gemfire/internal/util/concurrent/StoppableCondition.java b/geode-core/src/main/java/com/gemstone/gemfire/internal/util/concurrent/StoppableCondition.java index 40cb59b3bc31..5c33498ab3c5 100644 --- a/geode-core/src/main/java/com/gemstone/gemfire/internal/util/concurrent/StoppableCondition.java +++ b/geode-core/src/main/java/com/gemstone/gemfire/internal/util/concurrent/StoppableCondition.java @@ -41,7 +41,6 @@ *

    * It is implemented as a strict "cover" for a genuine {@link java.util.concurrent.locks.Condition}. * - * @author jpenney */ public class StoppableCondition implements /* Condition, */ java.io.Serializable { private static final long serialVersionUID = -7091681525970431937L; diff --git a/geode-core/src/main/java/com/gemstone/gemfire/internal/util/concurrent/StoppableCountDownLatch.java b/geode-core/src/main/java/com/gemstone/gemfire/internal/util/concurrent/StoppableCountDownLatch.java index ad4fd4f76719..36506fb05d3c 100644 --- a/geode-core/src/main/java/com/gemstone/gemfire/internal/util/concurrent/StoppableCountDownLatch.java +++ b/geode-core/src/main/java/com/gemstone/gemfire/internal/util/concurrent/StoppableCountDownLatch.java @@ -24,7 +24,6 @@ /** * This class is a "stoppable" cover for {@link CountDownLatch}. - * @author jpenney */ public class StoppableCountDownLatch { diff --git a/geode-core/src/main/java/com/gemstone/gemfire/internal/util/concurrent/StoppableCountDownOrUpLatch.java b/geode-core/src/main/java/com/gemstone/gemfire/internal/util/concurrent/StoppableCountDownOrUpLatch.java index 0bfaf392ed33..157e4a84b95f 100644 --- a/geode-core/src/main/java/com/gemstone/gemfire/internal/util/concurrent/StoppableCountDownOrUpLatch.java +++ b/geode-core/src/main/java/com/gemstone/gemfire/internal/util/concurrent/StoppableCountDownOrUpLatch.java @@ -26,7 +26,6 @@ *

    * Based on the original Doug Lea backport implementation of CountDownLatch. * - * @author Kirk Lund * @see java.util.concurrent.CountDownLatch */ public class StoppableCountDownOrUpLatch { diff --git a/geode-core/src/main/java/com/gemstone/gemfire/internal/util/concurrent/StoppableReadWriteLock.java b/geode-core/src/main/java/com/gemstone/gemfire/internal/util/concurrent/StoppableReadWriteLock.java index 08ab5c8745d7..34e0f8fdba71 100644 --- a/geode-core/src/main/java/com/gemstone/gemfire/internal/util/concurrent/StoppableReadWriteLock.java +++ b/geode-core/src/main/java/com/gemstone/gemfire/internal/util/concurrent/StoppableReadWriteLock.java @@ -22,7 +22,6 @@ * A non-reentrant ReadWriteLock that responds to Cancellation. The underlying lock * is {@link SemaphoreReadWriteLock}, which is a count based lock. * - * @author sbawaska */ public class StoppableReadWriteLock extends StoppableReentrantReadWriteLock { diff --git a/geode-core/src/main/java/com/gemstone/gemfire/internal/util/concurrent/StoppableReentrantLock.java b/geode-core/src/main/java/com/gemstone/gemfire/internal/util/concurrent/StoppableReentrantLock.java index ab0536e10779..af76ff299ac9 100755 --- a/geode-core/src/main/java/com/gemstone/gemfire/internal/util/concurrent/StoppableReentrantLock.java +++ b/geode-core/src/main/java/com/gemstone/gemfire/internal/util/concurrent/StoppableReentrantLock.java @@ -26,7 +26,6 @@ * Instances of {@link java.util.concurrent.locks.Lock} * that respond to cancellations * - * @author jpenney */ public class StoppableReentrantLock { /** diff --git a/geode-core/src/main/java/com/gemstone/gemfire/internal/util/concurrent/StoppableReentrantReadWriteLock.java b/geode-core/src/main/java/com/gemstone/gemfire/internal/util/concurrent/StoppableReentrantReadWriteLock.java index ea7faeed8fca..27b5468e1bfd 100644 --- a/geode-core/src/main/java/com/gemstone/gemfire/internal/util/concurrent/StoppableReentrantReadWriteLock.java +++ b/geode-core/src/main/java/com/gemstone/gemfire/internal/util/concurrent/StoppableReentrantReadWriteLock.java @@ -33,7 +33,6 @@ /** * Instances of {@link java.util.concurrent.locks.ReentrantReadWriteLock} * that respond to cancellation - * @author jpenney * */ public class StoppableReentrantReadWriteLock implements /* ReadWriteLock, */ java.io.Serializable { @@ -84,7 +83,6 @@ public StoppableWriteLock writeLock() { /** * read locks that are stoppable - * @author jpenney */ static public class StoppableReadLock { diff --git a/geode-core/src/main/java/com/gemstone/gemfire/lang/AttachAPINotFoundException.java b/geode-core/src/main/java/com/gemstone/gemfire/lang/AttachAPINotFoundException.java index e8fb08b75c44..ac382e520413 100644 --- a/geode-core/src/main/java/com/gemstone/gemfire/lang/AttachAPINotFoundException.java +++ b/geode-core/src/main/java/com/gemstone/gemfire/lang/AttachAPINotFoundException.java @@ -21,7 +21,6 @@ * The AttachAPINotFoundException class is a RuntimeException indicating that the JDK tools.jar has not been properly * set on the user's classpath *

    - * @author John Blum * @see java.lang.RuntimeException * @since 7.0 */ diff --git a/geode-core/src/main/java/com/gemstone/gemfire/lang/Identifiable.java b/geode-core/src/main/java/com/gemstone/gemfire/lang/Identifiable.java index 524f552089b3..fa271153b408 100644 --- a/geode-core/src/main/java/com/gemstone/gemfire/lang/Identifiable.java +++ b/geode-core/src/main/java/com/gemstone/gemfire/lang/Identifiable.java @@ -23,7 +23,6 @@ * The Identifiable interface defines a contract for classes whose Object instances can be uniquely identified relative * to other Object instances within the same class type hierarchy. *

    - * @author John Blum * @param the class type of the identifier. * @see java.lang.Comparable * @since 7.0 diff --git a/geode-core/src/main/java/com/gemstone/gemfire/management/AlreadyRunningException.java b/geode-core/src/main/java/com/gemstone/gemfire/management/AlreadyRunningException.java index 78c5d0b4cb52..1cd4d2c2980a 100644 --- a/geode-core/src/main/java/com/gemstone/gemfire/management/AlreadyRunningException.java +++ b/geode-core/src/main/java/com/gemstone/gemfire/management/AlreadyRunningException.java @@ -20,7 +20,6 @@ * Indicates that a request to start a management service * failed because it was already running. * - * @author darrel * @since 7.0 * */ diff --git a/geode-core/src/main/java/com/gemstone/gemfire/management/AsyncEventQueueMXBean.java b/geode-core/src/main/java/com/gemstone/gemfire/management/AsyncEventQueueMXBean.java index b4445ac7304f..e96d78c82caa 100644 --- a/geode-core/src/main/java/com/gemstone/gemfire/management/AsyncEventQueueMXBean.java +++ b/geode-core/src/main/java/com/gemstone/gemfire/management/AsyncEventQueueMXBean.java @@ -21,7 +21,6 @@ /** * MBean that provides access to an {@link AsyncEventQueue}. * - * @author rishim * @since 7.0 * */ diff --git a/geode-core/src/main/java/com/gemstone/gemfire/management/CacheServerMXBean.java b/geode-core/src/main/java/com/gemstone/gemfire/management/CacheServerMXBean.java index 62aedbd971b9..8255a935c855 100644 --- a/geode-core/src/main/java/com/gemstone/gemfire/management/CacheServerMXBean.java +++ b/geode-core/src/main/java/com/gemstone/gemfire/management/CacheServerMXBean.java @@ -49,7 +49,6 @@ * * * - * @author rishim * @since 7.0 * */ diff --git a/geode-core/src/main/java/com/gemstone/gemfire/management/ClientHealthStatus.java b/geode-core/src/main/java/com/gemstone/gemfire/management/ClientHealthStatus.java index be509cc4c8ef..232f2bc22603 100644 --- a/geode-core/src/main/java/com/gemstone/gemfire/management/ClientHealthStatus.java +++ b/geode-core/src/main/java/com/gemstone/gemfire/management/ClientHealthStatus.java @@ -24,7 +24,6 @@ * Composite data type used to distribute statistics which can be used to * determine the health of a cache client. * - * @author rishim, ajayp * @since 7.0 */ public class ClientHealthStatus { diff --git a/geode-core/src/main/java/com/gemstone/gemfire/management/ClientQueueDetail.java b/geode-core/src/main/java/com/gemstone/gemfire/management/ClientQueueDetail.java index e80cda4646a1..0f032aee4c0c 100644 --- a/geode-core/src/main/java/com/gemstone/gemfire/management/ClientQueueDetail.java +++ b/geode-core/src/main/java/com/gemstone/gemfire/management/ClientQueueDetail.java @@ -18,7 +18,6 @@ /** * - * @author rishim * @since 8.0 */ public class ClientQueueDetail { diff --git a/geode-core/src/main/java/com/gemstone/gemfire/management/DependenciesNotFoundException.java b/geode-core/src/main/java/com/gemstone/gemfire/management/DependenciesNotFoundException.java index 0861a79cb960..5a14c32ddd3d 100644 --- a/geode-core/src/main/java/com/gemstone/gemfire/management/DependenciesNotFoundException.java +++ b/geode-core/src/main/java/com/gemstone/gemfire/management/DependenciesNotFoundException.java @@ -21,7 +21,6 @@ /** * Indicates that required dependencies were not found in the ClassPath. * - * @author Abhishek Chaudhari * @since 7.0 */ public class DependenciesNotFoundException extends GemFireException { diff --git a/geode-core/src/main/java/com/gemstone/gemfire/management/DiskBackupResult.java b/geode-core/src/main/java/com/gemstone/gemfire/management/DiskBackupResult.java index f81c03dd9e1d..9782b534f1a6 100644 --- a/geode-core/src/main/java/com/gemstone/gemfire/management/DiskBackupResult.java +++ b/geode-core/src/main/java/com/gemstone/gemfire/management/DiskBackupResult.java @@ -22,7 +22,6 @@ * Composite data type used to distribute the results of a disk backup * operation. * - * @author rishim * @since 7.0 */ public class DiskBackupResult { diff --git a/geode-core/src/main/java/com/gemstone/gemfire/management/DiskBackupStatus.java b/geode-core/src/main/java/com/gemstone/gemfire/management/DiskBackupStatus.java index c602774ee8c6..7df0302edc66 100644 --- a/geode-core/src/main/java/com/gemstone/gemfire/management/DiskBackupStatus.java +++ b/geode-core/src/main/java/com/gemstone/gemfire/management/DiskBackupStatus.java @@ -24,7 +24,6 @@ * Composite data type used to distribute the status of disk backup * operations. * - * @author rishim * @since 7.0 */ public class DiskBackupStatus { diff --git a/geode-core/src/main/java/com/gemstone/gemfire/management/DiskMetrics.java b/geode-core/src/main/java/com/gemstone/gemfire/management/DiskMetrics.java index c285bbdb41df..1436f79aa8f8 100644 --- a/geode-core/src/main/java/com/gemstone/gemfire/management/DiskMetrics.java +++ b/geode-core/src/main/java/com/gemstone/gemfire/management/DiskMetrics.java @@ -21,7 +21,6 @@ /** * Composite data type used to distribute metrics for a {@link DiskStore}. * - * @author rishim * @since 7.0 */ public class DiskMetrics { diff --git a/geode-core/src/main/java/com/gemstone/gemfire/management/DiskStoreMXBean.java b/geode-core/src/main/java/com/gemstone/gemfire/management/DiskStoreMXBean.java index 110a791a8482..79ff056f12c4 100644 --- a/geode-core/src/main/java/com/gemstone/gemfire/management/DiskStoreMXBean.java +++ b/geode-core/src/main/java/com/gemstone/gemfire/management/DiskStoreMXBean.java @@ -23,7 +23,6 @@ * MBean that provides access to information and management functionality for a * {@link DiskStore}. * - * @author rishim * @since 7.0 * */ diff --git a/geode-core/src/main/java/com/gemstone/gemfire/management/DistributedLockServiceMXBean.java b/geode-core/src/main/java/com/gemstone/gemfire/management/DistributedLockServiceMXBean.java index 7387eb4e14ea..317ee3380b2a 100644 --- a/geode-core/src/main/java/com/gemstone/gemfire/management/DistributedLockServiceMXBean.java +++ b/geode-core/src/main/java/com/gemstone/gemfire/management/DistributedLockServiceMXBean.java @@ -26,7 +26,6 @@ * Since any number of DistributedLockService objects can be created by a member there may be 0 or * more instances of this MBean available. * - * @author rishim * @since 7.0 * */ diff --git a/geode-core/src/main/java/com/gemstone/gemfire/management/DistributedRegionMXBean.java b/geode-core/src/main/java/com/gemstone/gemfire/management/DistributedRegionMXBean.java index 1de4712863b5..3edda2754f14 100644 --- a/geode-core/src/main/java/com/gemstone/gemfire/management/DistributedRegionMXBean.java +++ b/geode-core/src/main/java/com/gemstone/gemfire/management/DistributedRegionMXBean.java @@ -26,7 +26,6 @@ * MBean that provides access to information and management functionality for a * {@link Region}. * - * @author rishim * @since 7.0 * */ diff --git a/geode-core/src/main/java/com/gemstone/gemfire/management/DistributedSystemMXBean.java b/geode-core/src/main/java/com/gemstone/gemfire/management/DistributedSystemMXBean.java index 3ce1730a6586..a6f65d4f5914 100644 --- a/geode-core/src/main/java/com/gemstone/gemfire/management/DistributedSystemMXBean.java +++ b/geode-core/src/main/java/com/gemstone/gemfire/management/DistributedSystemMXBean.java @@ -71,7 +71,6 @@ * * * - * @author rishim * @since 7.0 * */ diff --git a/geode-core/src/main/java/com/gemstone/gemfire/management/EvictionAttributesData.java b/geode-core/src/main/java/com/gemstone/gemfire/management/EvictionAttributesData.java index 303de74a98b2..76760d12239a 100644 --- a/geode-core/src/main/java/com/gemstone/gemfire/management/EvictionAttributesData.java +++ b/geode-core/src/main/java/com/gemstone/gemfire/management/EvictionAttributesData.java @@ -26,7 +26,6 @@ * Composite data type used to distribute the eviction attributes for * a {@link Region}. * - * @author rishim * @since 7.0 */ diff --git a/geode-core/src/main/java/com/gemstone/gemfire/management/FixedPartitionAttributesData.java b/geode-core/src/main/java/com/gemstone/gemfire/management/FixedPartitionAttributesData.java index 1f256956b76a..904ad5a83607 100644 --- a/geode-core/src/main/java/com/gemstone/gemfire/management/FixedPartitionAttributesData.java +++ b/geode-core/src/main/java/com/gemstone/gemfire/management/FixedPartitionAttributesData.java @@ -24,7 +24,6 @@ * Composite date type used to distribute the fixed partition attributes for * a {@link Region}. * - * @author rishim * @since 7.0 */ public class FixedPartitionAttributesData { diff --git a/geode-core/src/main/java/com/gemstone/gemfire/management/GatewayReceiverMXBean.java b/geode-core/src/main/java/com/gemstone/gemfire/management/GatewayReceiverMXBean.java index e3c483f6dcf2..519db6cfc131 100644 --- a/geode-core/src/main/java/com/gemstone/gemfire/management/GatewayReceiverMXBean.java +++ b/geode-core/src/main/java/com/gemstone/gemfire/management/GatewayReceiverMXBean.java @@ -22,7 +22,6 @@ * MBean that provides access to information and management functionality for a * {@link GatewayReceiver}. * - * @author rishim * @since 7.0 * */ diff --git a/geode-core/src/main/java/com/gemstone/gemfire/management/GatewaySenderMXBean.java b/geode-core/src/main/java/com/gemstone/gemfire/management/GatewaySenderMXBean.java index 27ad171509f3..33c47a40b103 100644 --- a/geode-core/src/main/java/com/gemstone/gemfire/management/GatewaySenderMXBean.java +++ b/geode-core/src/main/java/com/gemstone/gemfire/management/GatewaySenderMXBean.java @@ -22,7 +22,6 @@ * MBean that provides access to information and management functionality for a * {@link GatewaySender}. * - * @author rishim * @since 7.0 * */ diff --git a/geode-core/src/main/java/com/gemstone/gemfire/management/GemFireProperties.java b/geode-core/src/main/java/com/gemstone/gemfire/management/GemFireProperties.java index 4fe0acd4657e..0bb2c8b74a48 100644 --- a/geode-core/src/main/java/com/gemstone/gemfire/management/GemFireProperties.java +++ b/geode-core/src/main/java/com/gemstone/gemfire/management/GemFireProperties.java @@ -20,7 +20,6 @@ /** * Composite Data type to be used by member to depict gemfire properties in key value manner - * @author rishim * @since 7.0 * */ diff --git a/geode-core/src/main/java/com/gemstone/gemfire/management/JMXNotificationType.java b/geode-core/src/main/java/com/gemstone/gemfire/management/JMXNotificationType.java index ee7cadc6c3d3..68bf547026e6 100644 --- a/geode-core/src/main/java/com/gemstone/gemfire/management/JMXNotificationType.java +++ b/geode-core/src/main/java/com/gemstone/gemfire/management/JMXNotificationType.java @@ -23,7 +23,6 @@ * * For detail usage see GemFire quick start. * - * @author rishim * @since 8.0 */ public interface JMXNotificationType { diff --git a/geode-core/src/main/java/com/gemstone/gemfire/management/JMXNotificationUserData.java b/geode-core/src/main/java/com/gemstone/gemfire/management/JMXNotificationUserData.java index 789c234deb7e..53560a27c015 100644 --- a/geode-core/src/main/java/com/gemstone/gemfire/management/JMXNotificationUserData.java +++ b/geode-core/src/main/java/com/gemstone/gemfire/management/JMXNotificationUserData.java @@ -20,7 +20,6 @@ * This interface acts as UserData section of JMX notifications of type "system.alert". * It contains some additional information apart from the Notification details. * - * @author rishim * @since 8.0 */ public interface JMXNotificationUserData { diff --git a/geode-core/src/main/java/com/gemstone/gemfire/management/JVMMetrics.java b/geode-core/src/main/java/com/gemstone/gemfire/management/JVMMetrics.java index e2f7be1a5569..0d4c9eb52fd7 100644 --- a/geode-core/src/main/java/com/gemstone/gemfire/management/JVMMetrics.java +++ b/geode-core/src/main/java/com/gemstone/gemfire/management/JVMMetrics.java @@ -25,7 +25,6 @@ * Composite data type used to distribute metrics for the JVM running * a GemFire member. * - * @author rishim * @since 7.0 * */ diff --git a/geode-core/src/main/java/com/gemstone/gemfire/management/LocatorMXBean.java b/geode-core/src/main/java/com/gemstone/gemfire/management/LocatorMXBean.java index 96ffe0f03bc5..ec4dd88098f4 100644 --- a/geode-core/src/main/java/com/gemstone/gemfire/management/LocatorMXBean.java +++ b/geode-core/src/main/java/com/gemstone/gemfire/management/LocatorMXBean.java @@ -22,7 +22,6 @@ * MBean that provides access to information and management functionality for a * {@link Locator}. * - * @author rishim * @since 7.0 */ public interface LocatorMXBean { diff --git a/geode-core/src/main/java/com/gemstone/gemfire/management/LockServiceMXBean.java b/geode-core/src/main/java/com/gemstone/gemfire/management/LockServiceMXBean.java index 9cec87fc09ff..85a8e75b4bbe 100644 --- a/geode-core/src/main/java/com/gemstone/gemfire/management/LockServiceMXBean.java +++ b/geode-core/src/main/java/com/gemstone/gemfire/management/LockServiceMXBean.java @@ -25,7 +25,6 @@ * {@link DLockService}. Since any number of DLockService objects can be created * by a member there may be 0 or more instances of this MBean available. * - * @author rishim * @since 7.0 * */ diff --git a/geode-core/src/main/java/com/gemstone/gemfire/management/ManagementException.java b/geode-core/src/main/java/com/gemstone/gemfire/management/ManagementException.java index ec61fc91f053..b4d84d156fad 100644 --- a/geode-core/src/main/java/com/gemstone/gemfire/management/ManagementException.java +++ b/geode-core/src/main/java/com/gemstone/gemfire/management/ManagementException.java @@ -26,7 +26,6 @@ * Various management and monitoring exceptions are wrapped in * ManagementExceptions. * - * @author rishim * @since 7.0 * */ diff --git a/geode-core/src/main/java/com/gemstone/gemfire/management/ManagementService.java b/geode-core/src/main/java/com/gemstone/gemfire/management/ManagementService.java index 45aa01d270d3..492fdefba0a5 100755 --- a/geode-core/src/main/java/com/gemstone/gemfire/management/ManagementService.java +++ b/geode-core/src/main/java/com/gemstone/gemfire/management/ManagementService.java @@ -31,7 +31,6 @@ /** * Interface to the GemFire management service for a single Cache. * - * @author rishim. * @since 7.0 */ public abstract class ManagementService{ diff --git a/geode-core/src/main/java/com/gemstone/gemfire/management/ManagerMXBean.java b/geode-core/src/main/java/com/gemstone/gemfire/management/ManagerMXBean.java index 39981cfa250d..7272c8c212a8 100644 --- a/geode-core/src/main/java/com/gemstone/gemfire/management/ManagerMXBean.java +++ b/geode-core/src/main/java/com/gemstone/gemfire/management/ManagerMXBean.java @@ -25,7 +25,6 @@ * MBean that provides access to information and management functionality for a * {@link Manager}. * - * @author rishim * @since 7.0 * */ diff --git a/geode-core/src/main/java/com/gemstone/gemfire/management/MemberMXBean.java b/geode-core/src/main/java/com/gemstone/gemfire/management/MemberMXBean.java index e803825a8d41..ed27569b134d 100644 --- a/geode-core/src/main/java/com/gemstone/gemfire/management/MemberMXBean.java +++ b/geode-core/src/main/java/com/gemstone/gemfire/management/MemberMXBean.java @@ -134,7 +134,6 @@ * * * - * @author rishim * @since 7.0 */ public interface MemberMXBean { diff --git a/geode-core/src/main/java/com/gemstone/gemfire/management/MembershipAttributesData.java b/geode-core/src/main/java/com/gemstone/gemfire/management/MembershipAttributesData.java index 6713b7e6a856..be0bfb55ddd9 100644 --- a/geode-core/src/main/java/com/gemstone/gemfire/management/MembershipAttributesData.java +++ b/geode-core/src/main/java/com/gemstone/gemfire/management/MembershipAttributesData.java @@ -26,7 +26,6 @@ * Composite data type used to distribute the membership attributes for * a {@link Region}. * - * @author rishim * @since 7.0 * */ diff --git a/geode-core/src/main/java/com/gemstone/gemfire/management/NetworkMetrics.java b/geode-core/src/main/java/com/gemstone/gemfire/management/NetworkMetrics.java index 63e7d1aea4a3..48b4e972b6e6 100644 --- a/geode-core/src/main/java/com/gemstone/gemfire/management/NetworkMetrics.java +++ b/geode-core/src/main/java/com/gemstone/gemfire/management/NetworkMetrics.java @@ -21,7 +21,6 @@ /** * Composite data type used to distribute network related metrics for a member. * - * @author rishim * @since 7.0 * */ diff --git a/geode-core/src/main/java/com/gemstone/gemfire/management/OSMetrics.java b/geode-core/src/main/java/com/gemstone/gemfire/management/OSMetrics.java index a47738a7a79e..9b8fe79ff84a 100644 --- a/geode-core/src/main/java/com/gemstone/gemfire/management/OSMetrics.java +++ b/geode-core/src/main/java/com/gemstone/gemfire/management/OSMetrics.java @@ -22,7 +22,6 @@ * Composite data type used to distribute metrics for the operating system hosting * a member of the distributed system. * - * @author rishim * @since 7.0 * */ diff --git a/geode-core/src/main/java/com/gemstone/gemfire/management/PartitionAttributesData.java b/geode-core/src/main/java/com/gemstone/gemfire/management/PartitionAttributesData.java index 15faa8402623..d26c04bcd6ad 100644 --- a/geode-core/src/main/java/com/gemstone/gemfire/management/PartitionAttributesData.java +++ b/geode-core/src/main/java/com/gemstone/gemfire/management/PartitionAttributesData.java @@ -24,7 +24,6 @@ /** * Composite date type used to distribute attributes for a {@link PartitionedRegion}. * - * @author rishim * @since 7.0 */ public class PartitionAttributesData { diff --git a/geode-core/src/main/java/com/gemstone/gemfire/management/PersistentMemberDetails.java b/geode-core/src/main/java/com/gemstone/gemfire/management/PersistentMemberDetails.java index 17e0f2772a7c..4169a83a381e 100644 --- a/geode-core/src/main/java/com/gemstone/gemfire/management/PersistentMemberDetails.java +++ b/geode-core/src/main/java/com/gemstone/gemfire/management/PersistentMemberDetails.java @@ -22,7 +22,6 @@ * Composite data type used to distribute attributes for the missing disk * store of a persistent member. * - * @author rishim * @since 7.0 * */ diff --git a/geode-core/src/main/java/com/gemstone/gemfire/management/RegionAttributesData.java b/geode-core/src/main/java/com/gemstone/gemfire/management/RegionAttributesData.java index 6c3f62f9d8a5..1597f7e01fff 100644 --- a/geode-core/src/main/java/com/gemstone/gemfire/management/RegionAttributesData.java +++ b/geode-core/src/main/java/com/gemstone/gemfire/management/RegionAttributesData.java @@ -24,7 +24,6 @@ /** * Composite data type used to distribute attributes for a {@link Region}. * - * @author rishim * @since 7.0 */ public class RegionAttributesData { diff --git a/geode-core/src/main/java/com/gemstone/gemfire/management/RegionMXBean.java b/geode-core/src/main/java/com/gemstone/gemfire/management/RegionMXBean.java index 9ab31b5adaeb..33f827a6d284 100644 --- a/geode-core/src/main/java/com/gemstone/gemfire/management/RegionMXBean.java +++ b/geode-core/src/main/java/com/gemstone/gemfire/management/RegionMXBean.java @@ -28,7 +28,6 @@ * * For all the latency related attributes e.g. PutRemoteLatency ,DiskWritesAverageLatency etc.. * "enable-time-statistics" should be set to true. - * @author rishim * @since 7.0 * */ diff --git a/geode-core/src/main/java/com/gemstone/gemfire/management/ServerLoadData.java b/geode-core/src/main/java/com/gemstone/gemfire/management/ServerLoadData.java index c074655e230f..84ac4ee0ae8b 100644 --- a/geode-core/src/main/java/com/gemstone/gemfire/management/ServerLoadData.java +++ b/geode-core/src/main/java/com/gemstone/gemfire/management/ServerLoadData.java @@ -21,7 +21,6 @@ /** * Composite data type used to distribute server load information. * - * @author rishim * @since 7.0 */ public class ServerLoadData { diff --git a/geode-core/src/main/java/com/gemstone/gemfire/management/cli/CliMetaData.java b/geode-core/src/main/java/com/gemstone/gemfire/management/cli/CliMetaData.java index 3fa2f5d44ee0..905f5d2e5785 100644 --- a/geode-core/src/main/java/com/gemstone/gemfire/management/cli/CliMetaData.java +++ b/geode-core/src/main/java/com/gemstone/gemfire/management/cli/CliMetaData.java @@ -27,7 +27,6 @@ /** * An annotation to define additional meta-data for commands. * - * @author Abhishek Chaudhari * * @since 7.0 */ @@ -72,7 +71,6 @@ // TODO - Abhishek - refactor to group this // /** -// * @author Abhishek Chaudhari // * // * @since 8.0 // */ @@ -88,7 +86,6 @@ /** * An annotation to define additional meta-data for availability of commands. * - * @author Abhishek Chaudhari * * @since 8.0 */ diff --git a/geode-core/src/main/java/com/gemstone/gemfire/management/cli/CommandProcessingException.java b/geode-core/src/main/java/com/gemstone/gemfire/management/cli/CommandProcessingException.java index 8cf2924f90b5..c1dbce2fb69d 100644 --- a/geode-core/src/main/java/com/gemstone/gemfire/management/cli/CommandProcessingException.java +++ b/geode-core/src/main/java/com/gemstone/gemfire/management/cli/CommandProcessingException.java @@ -24,7 +24,6 @@ *

  • errors from invalid values for parameters * * - * @author Abhishek Chaudhari * @since 7.0 */ public class CommandProcessingException extends RuntimeException { diff --git a/geode-core/src/main/java/com/gemstone/gemfire/management/cli/CommandService.java b/geode-core/src/main/java/com/gemstone/gemfire/management/cli/CommandService.java index 30fec72a5667..df8078836484 100644 --- a/geode-core/src/main/java/com/gemstone/gemfire/management/cli/CommandService.java +++ b/geode-core/src/main/java/com/gemstone/gemfire/management/cli/CommandService.java @@ -34,7 +34,6 @@ * NOTE: CommandService is currently available only on * GemFire Manager nodes. * - * @author Abhishek Chaudhari * * @since 7.0 */ diff --git a/geode-core/src/main/java/com/gemstone/gemfire/management/cli/CommandServiceException.java b/geode-core/src/main/java/com/gemstone/gemfire/management/cli/CommandServiceException.java index 1545788a27b6..74451e023986 100644 --- a/geode-core/src/main/java/com/gemstone/gemfire/management/cli/CommandServiceException.java +++ b/geode-core/src/main/java/com/gemstone/gemfire/management/cli/CommandServiceException.java @@ -20,7 +20,6 @@ * Indicates that an exception occurred while accessing/creating a Command * Service for processing GemFire Command Line Interface (CLI) commands. * - * @author Abhishek Chaudhari * * @since 7.0 */ diff --git a/geode-core/src/main/java/com/gemstone/gemfire/management/cli/CommandStatement.java b/geode-core/src/main/java/com/gemstone/gemfire/management/cli/CommandStatement.java index 093113a47fff..9ca582828ca3 100755 --- a/geode-core/src/main/java/com/gemstone/gemfire/management/cli/CommandStatement.java +++ b/geode-core/src/main/java/com/gemstone/gemfire/management/cli/CommandStatement.java @@ -23,8 +23,6 @@ * CommandStatement instance can be used multiple times to process * the same command string repeatedly. * - * @author Kirk Lund - * @author Abhishek Chaudhari * * @since 7.0 */ diff --git a/geode-core/src/main/java/com/gemstone/gemfire/management/cli/ConverterHint.java b/geode-core/src/main/java/com/gemstone/gemfire/management/cli/ConverterHint.java index 27758dcb5969..a1e70e79085a 100644 --- a/geode-core/src/main/java/com/gemstone/gemfire/management/cli/ConverterHint.java +++ b/geode-core/src/main/java/com/gemstone/gemfire/management/cli/ConverterHint.java @@ -22,7 +22,6 @@ * Used in {@link CliOption} annotations to indicate which converter(s) should * or should not be used. * - * @author David Hoots * @since 8.0 */ public interface ConverterHint { diff --git a/geode-core/src/main/java/com/gemstone/gemfire/management/cli/Result.java b/geode-core/src/main/java/com/gemstone/gemfire/management/cli/Result.java index 011d49ba5f1d..7480d48294af 100755 --- a/geode-core/src/main/java/com/gemstone/gemfire/management/cli/Result.java +++ b/geode-core/src/main/java/com/gemstone/gemfire/management/cli/Result.java @@ -30,8 +30,6 @@ * To check whether the result has a file in it use * {@link #hasIncomingFiles()}. * - * @author Kirk Lund - * @author Abhishek Chaudhari * * @since 7.0 */ @@ -40,7 +38,6 @@ public interface Result { /** * Indicates a Results status. * - * @author Kirk Lund * @since 7.0 */ public enum Status { diff --git a/geode-core/src/main/java/com/gemstone/gemfire/management/internal/ArrayConverter.java b/geode-core/src/main/java/com/gemstone/gemfire/management/internal/ArrayConverter.java index 29eb3276143e..c249aeb691e0 100644 --- a/geode-core/src/main/java/com/gemstone/gemfire/management/internal/ArrayConverter.java +++ b/geode-core/src/main/java/com/gemstone/gemfire/management/internal/ArrayConverter.java @@ -27,7 +27,6 @@ /** * Converting an Array of Composite types * - * @author rishim * */ public final class ArrayConverter extends OpenTypeConverter { diff --git a/geode-core/src/main/java/com/gemstone/gemfire/management/internal/BaseManagementService.java b/geode-core/src/main/java/com/gemstone/gemfire/management/internal/BaseManagementService.java index 54be01852a71..d159d9673065 100755 --- a/geode-core/src/main/java/com/gemstone/gemfire/management/internal/BaseManagementService.java +++ b/geode-core/src/main/java/com/gemstone/gemfire/management/internal/BaseManagementService.java @@ -32,7 +32,6 @@ /** * Super class to all Management Service * - * @author rishim. * @since 7.0 */ public abstract class BaseManagementService extends ManagementService { diff --git a/geode-core/src/main/java/com/gemstone/gemfire/management/internal/CollectionConverter.java b/geode-core/src/main/java/com/gemstone/gemfire/management/internal/CollectionConverter.java index ad33d3df9144..194a33cfc1f6 100644 --- a/geode-core/src/main/java/com/gemstone/gemfire/management/internal/CollectionConverter.java +++ b/geode-core/src/main/java/com/gemstone/gemfire/management/internal/CollectionConverter.java @@ -35,7 +35,6 @@ /** * Open type converter for Collections * - * @author rishim * */ public final class CollectionConverter extends OpenTypeConverter { diff --git a/geode-core/src/main/java/com/gemstone/gemfire/management/internal/CompositeConverter.java b/geode-core/src/main/java/com/gemstone/gemfire/management/internal/CompositeConverter.java index a59394954147..c507f4df5bad 100644 --- a/geode-core/src/main/java/com/gemstone/gemfire/management/internal/CompositeConverter.java +++ b/geode-core/src/main/java/com/gemstone/gemfire/management/internal/CompositeConverter.java @@ -29,7 +29,6 @@ /** * Open type converter for Composite type * - * @author rishim * */ diff --git a/geode-core/src/main/java/com/gemstone/gemfire/management/internal/EnumConverter.java b/geode-core/src/main/java/com/gemstone/gemfire/management/internal/EnumConverter.java index d7379bc63812..1b5a4af942bd 100644 --- a/geode-core/src/main/java/com/gemstone/gemfire/management/internal/EnumConverter.java +++ b/geode-core/src/main/java/com/gemstone/gemfire/management/internal/EnumConverter.java @@ -23,7 +23,6 @@ /** * Open type converter for Enums. * - * @author rishim * */ public final class EnumConverter> extends OpenTypeConverter { diff --git a/geode-core/src/main/java/com/gemstone/gemfire/management/internal/FederatingManager.java b/geode-core/src/main/java/com/gemstone/gemfire/management/internal/FederatingManager.java index ccfa0a82fb51..478c8e8ca3ea 100755 --- a/geode-core/src/main/java/com/gemstone/gemfire/management/internal/FederatingManager.java +++ b/geode-core/src/main/java/com/gemstone/gemfire/management/internal/FederatingManager.java @@ -60,7 +60,6 @@ * The FederatingManager is only appropriate for a peer or server in a GemFire * distributed system. * - * @author VMware, Inc. * @since 7.0 */ public class FederatingManager extends Manager { @@ -389,7 +388,6 @@ public void startManagingActivity() throws Exception { * This task can be cancelled from the calling thread if a timeout happens. In * that case we have to handle the thread interrupt * - * @author rishim * */ diff --git a/geode-core/src/main/java/com/gemstone/gemfire/management/internal/FederationComponent.java b/geode-core/src/main/java/com/gemstone/gemfire/management/internal/FederationComponent.java index 8650ba859a62..24862c5c5915 100644 --- a/geode-core/src/main/java/com/gemstone/gemfire/management/internal/FederationComponent.java +++ b/geode-core/src/main/java/com/gemstone/gemfire/management/internal/FederationComponent.java @@ -38,7 +38,6 @@ * Central component for federation It consists of an Object State as well as * some meta data for the Object being federated. * - * @author rishim * */ diff --git a/geode-core/src/main/java/com/gemstone/gemfire/management/internal/FilterChain.java b/geode-core/src/main/java/com/gemstone/gemfire/management/internal/FilterChain.java index ce26bd9eeebf..e5044178def4 100644 --- a/geode-core/src/main/java/com/gemstone/gemfire/management/internal/FilterChain.java +++ b/geode-core/src/main/java/com/gemstone/gemfire/management/internal/FilterChain.java @@ -21,7 +21,6 @@ * Abstract class containing methods which will be accesed * by both Local and Remote filter chains * - * @author rishim * */ public abstract class FilterChain { diff --git a/geode-core/src/main/java/com/gemstone/gemfire/management/internal/IdentityConverter.java b/geode-core/src/main/java/com/gemstone/gemfire/management/internal/IdentityConverter.java index 951a914a80f0..df1a3c4ffb02 100644 --- a/geode-core/src/main/java/com/gemstone/gemfire/management/internal/IdentityConverter.java +++ b/geode-core/src/main/java/com/gemstone/gemfire/management/internal/IdentityConverter.java @@ -25,7 +25,6 @@ * data. This is true for any of the SimpleType types, and for an * any-dimension array of those * - * @author rishim * */ public final class IdentityConverter extends OpenTypeConverter { diff --git a/geode-core/src/main/java/com/gemstone/gemfire/management/internal/JettyHelper.java b/geode-core/src/main/java/com/gemstone/gemfire/management/internal/JettyHelper.java index 36b8fa8f0ad9..749959ae8b21 100644 --- a/geode-core/src/main/java/com/gemstone/gemfire/management/internal/JettyHelper.java +++ b/geode-core/src/main/java/com/gemstone/gemfire/management/internal/JettyHelper.java @@ -38,8 +38,6 @@ import com.gemstone.gemfire.internal.logging.LogService; /** - * @author jdeppe - * @author jblum * @since 8.1 */ @SuppressWarnings("unused") diff --git a/geode-core/src/main/java/com/gemstone/gemfire/management/internal/JmxManagerAdvisee.java b/geode-core/src/main/java/com/gemstone/gemfire/management/internal/JmxManagerAdvisee.java index a95d6ff30613..6be30a5868e0 100644 --- a/geode-core/src/main/java/com/gemstone/gemfire/management/internal/JmxManagerAdvisee.java +++ b/geode-core/src/main/java/com/gemstone/gemfire/management/internal/JmxManagerAdvisee.java @@ -32,7 +32,6 @@ /** * - * @author darrel * @since 7.0 */ public class JmxManagerAdvisee implements DistributionAdvisee { diff --git a/geode-core/src/main/java/com/gemstone/gemfire/management/internal/JmxManagerAdvisor.java b/geode-core/src/main/java/com/gemstone/gemfire/management/internal/JmxManagerAdvisor.java index c0d1c0b75bc7..83e4e41eda26 100644 --- a/geode-core/src/main/java/com/gemstone/gemfire/management/internal/JmxManagerAdvisor.java +++ b/geode-core/src/main/java/com/gemstone/gemfire/management/internal/JmxManagerAdvisor.java @@ -43,7 +43,6 @@ /** * - * @author darrel * @since 7.0 */ public class JmxManagerAdvisor extends DistributionAdvisor { diff --git a/geode-core/src/main/java/com/gemstone/gemfire/management/internal/JmxManagerLocatorRequest.java b/geode-core/src/main/java/com/gemstone/gemfire/management/internal/JmxManagerLocatorRequest.java index b5dfe33292f2..d3f075d39144 100644 --- a/geode-core/src/main/java/com/gemstone/gemfire/management/internal/JmxManagerLocatorRequest.java +++ b/geode-core/src/main/java/com/gemstone/gemfire/management/internal/JmxManagerLocatorRequest.java @@ -31,7 +31,6 @@ * Sent to a locator to request it to find (and possibly start) * a jmx manager for us. It returns a JmxManagerLocatorResponse. * - * @author darrel * @since 7.0 * */ diff --git a/geode-core/src/main/java/com/gemstone/gemfire/management/internal/JmxManagerLocatorResponse.java b/geode-core/src/main/java/com/gemstone/gemfire/management/internal/JmxManagerLocatorResponse.java index 438fe725de72..bdd10f7a7d88 100644 --- a/geode-core/src/main/java/com/gemstone/gemfire/management/internal/JmxManagerLocatorResponse.java +++ b/geode-core/src/main/java/com/gemstone/gemfire/management/internal/JmxManagerLocatorResponse.java @@ -30,7 +30,6 @@ * Sent to a locator to request it to find (and possibly start) * a jmx manager for us. It returns a JmxManagerLocatorResponse. * - * @author darrel * @since 7.0 * */ diff --git a/geode-core/src/main/java/com/gemstone/gemfire/management/internal/LocalFilterChain.java b/geode-core/src/main/java/com/gemstone/gemfire/management/internal/LocalFilterChain.java index be3fced7a3db..507042e96e8a 100644 --- a/geode-core/src/main/java/com/gemstone/gemfire/management/internal/LocalFilterChain.java +++ b/geode-core/src/main/java/com/gemstone/gemfire/management/internal/LocalFilterChain.java @@ -27,7 +27,6 @@ * Have made it a chain to support future filters * which should be evaluated locally before registering * an MBean - * @author rishim * */ diff --git a/geode-core/src/main/java/com/gemstone/gemfire/management/internal/LocalManager.java b/geode-core/src/main/java/com/gemstone/gemfire/management/internal/LocalManager.java index 32dd1cc5f1b3..d7c468b64156 100644 --- a/geode-core/src/main/java/com/gemstone/gemfire/management/internal/LocalManager.java +++ b/geode-core/src/main/java/com/gemstone/gemfire/management/internal/LocalManager.java @@ -60,7 +60,6 @@ * regions for MBean and notification federation. * * - * @author rishim * */ @@ -340,7 +339,6 @@ public void runManagementTaskAdhoc(){ * executor is guaranteed not to be reconfigurable to use additional threads. * * - * @author rishim * */ diff --git a/geode-core/src/main/java/com/gemstone/gemfire/management/internal/MBeanJMXAdapter.java b/geode-core/src/main/java/com/gemstone/gemfire/management/internal/MBeanJMXAdapter.java index f22caf3ad7ed..345c452559c2 100644 --- a/geode-core/src/main/java/com/gemstone/gemfire/management/internal/MBeanJMXAdapter.java +++ b/geode-core/src/main/java/com/gemstone/gemfire/management/internal/MBeanJMXAdapter.java @@ -59,7 +59,6 @@ /** * Utility class to interact with the JMX server * - * @author rishim * */ public class MBeanJMXAdapter implements ManagementConstants { diff --git a/geode-core/src/main/java/com/gemstone/gemfire/management/internal/MBeanProxyFactory.java b/geode-core/src/main/java/com/gemstone/gemfire/management/internal/MBeanProxyFactory.java index 58e1adf63533..e8b640842832 100644 --- a/geode-core/src/main/java/com/gemstone/gemfire/management/internal/MBeanProxyFactory.java +++ b/geode-core/src/main/java/com/gemstone/gemfire/management/internal/MBeanProxyFactory.java @@ -41,7 +41,6 @@ * It also maintains a proxy repository {@link MBeanProxyInfoRepository} for * quick access to the proxy instances * - * @author rishim * */ public class MBeanProxyFactory { diff --git a/geode-core/src/main/java/com/gemstone/gemfire/management/internal/MBeanProxyInfoRepository.java b/geode-core/src/main/java/com/gemstone/gemfire/management/internal/MBeanProxyInfoRepository.java index 1804d489b97c..0b7c65a39c79 100644 --- a/geode-core/src/main/java/com/gemstone/gemfire/management/internal/MBeanProxyInfoRepository.java +++ b/geode-core/src/main/java/com/gemstone/gemfire/management/internal/MBeanProxyInfoRepository.java @@ -37,7 +37,6 @@ * proxy ops. It will also be used while filter addition/ removal if dynamic * filters are going to be supported. * - * @author rishim * */ diff --git a/geode-core/src/main/java/com/gemstone/gemfire/management/internal/MBeanProxyInvocationHandler.java b/geode-core/src/main/java/com/gemstone/gemfire/management/internal/MBeanProxyInvocationHandler.java index 7c037ad00cfe..4a628c9cfb52 100644 --- a/geode-core/src/main/java/com/gemstone/gemfire/management/internal/MBeanProxyInvocationHandler.java +++ b/geode-core/src/main/java/com/gemstone/gemfire/management/internal/MBeanProxyInvocationHandler.java @@ -53,7 +53,6 @@ * delegated to the federation components. * All method calls are routed to specified members via Function service * - * @author rishim * */ @@ -459,7 +458,6 @@ private Object invokeBroadcasterMethod(Object proxy, Method method, /** * Internal implementation of all the generic proxy methods * - * @author rishim * */ private class ProxyInterfaceImpl implements ProxyInterface { diff --git a/geode-core/src/main/java/com/gemstone/gemfire/management/internal/MXBeanProxyInvocationHandler.java b/geode-core/src/main/java/com/gemstone/gemfire/management/internal/MXBeanProxyInvocationHandler.java index 7c907b27af15..48e6e40ea9f5 100644 --- a/geode-core/src/main/java/com/gemstone/gemfire/management/internal/MXBeanProxyInvocationHandler.java +++ b/geode-core/src/main/java/com/gemstone/gemfire/management/internal/MXBeanProxyInvocationHandler.java @@ -33,7 +33,6 @@ * follows same route as MBeanProxyInvocationHandler Only difference is after * obtaining the result it transforms the open type to the actual java type * - * @author rishim * */ public class MXBeanProxyInvocationHandler { @@ -164,7 +163,6 @@ public int compare(Method a, Method b) { /** * Hanlder for MXBean Proxy * - * @author rishim * */ private abstract class MethodHandler { diff --git a/geode-core/src/main/java/com/gemstone/gemfire/management/internal/ManagementCacheListener.java b/geode-core/src/main/java/com/gemstone/gemfire/management/internal/ManagementCacheListener.java index 2c181e7bf456..e7e58423882d 100644 --- a/geode-core/src/main/java/com/gemstone/gemfire/management/internal/ManagementCacheListener.java +++ b/geode-core/src/main/java/com/gemstone/gemfire/management/internal/ManagementCacheListener.java @@ -31,7 +31,6 @@ * It updates the last refreshed time of proxy once it gets the update request * from the Managed Node * - * @author rishim * */ public class ManagementCacheListener extends diff --git a/geode-core/src/main/java/com/gemstone/gemfire/management/internal/ManagementConstants.java b/geode-core/src/main/java/com/gemstone/gemfire/management/internal/ManagementConstants.java index 5e75b7bc6b17..925d9bd62b82 100644 --- a/geode-core/src/main/java/com/gemstone/gemfire/management/internal/ManagementConstants.java +++ b/geode-core/src/main/java/com/gemstone/gemfire/management/internal/ManagementConstants.java @@ -26,7 +26,6 @@ /** * Management Related Constants are defined here - * @author rishim * */ public interface ManagementConstants { diff --git a/geode-core/src/main/java/com/gemstone/gemfire/management/internal/ManagementFunction.java b/geode-core/src/main/java/com/gemstone/gemfire/management/internal/ManagementFunction.java index 5018c07cf5e6..9f37a9ab531e 100644 --- a/geode-core/src/main/java/com/gemstone/gemfire/management/internal/ManagementFunction.java +++ b/geode-core/src/main/java/com/gemstone/gemfire/management/internal/ManagementFunction.java @@ -44,7 +44,6 @@ * 1) All setter methods 2) All operations 3) addNotificationListener 4) * removeNotificationListener 5) getNotificationInfo * - * @author rishim * */ diff --git a/geode-core/src/main/java/com/gemstone/gemfire/management/internal/ManagementMembershipListener.java b/geode-core/src/main/java/com/gemstone/gemfire/management/internal/ManagementMembershipListener.java index 9a7c657562ef..fc8f371387de 100644 --- a/geode-core/src/main/java/com/gemstone/gemfire/management/internal/ManagementMembershipListener.java +++ b/geode-core/src/main/java/com/gemstone/gemfire/management/internal/ManagementMembershipListener.java @@ -29,7 +29,6 @@ * This listener is added to the cache when a node becomes Managing node. It * then starts to listen on various membership events to take steps accordingly * - * @author rishim * */ diff --git a/geode-core/src/main/java/com/gemstone/gemfire/management/internal/ManagementResourceRepo.java b/geode-core/src/main/java/com/gemstone/gemfire/management/internal/ManagementResourceRepo.java index c5d87294d7d1..605d0c0f92f7 100644 --- a/geode-core/src/main/java/com/gemstone/gemfire/management/internal/ManagementResourceRepo.java +++ b/geode-core/src/main/java/com/gemstone/gemfire/management/internal/ManagementResourceRepo.java @@ -33,7 +33,6 @@ * Various repository related methods are declared here These methods provide a * consistent view to read and update the repository. * - * @author rishim * */ diff --git a/geode-core/src/main/java/com/gemstone/gemfire/management/internal/ManagementStrings.java b/geode-core/src/main/java/com/gemstone/gemfire/management/internal/ManagementStrings.java index 5c859c51d958..0505aaabf532 100644 --- a/geode-core/src/main/java/com/gemstone/gemfire/management/internal/ManagementStrings.java +++ b/geode-core/src/main/java/com/gemstone/gemfire/management/internal/ManagementStrings.java @@ -26,7 +26,6 @@ * * 100001 - 110000 * - * @author rishim * */ public class ManagementStrings { diff --git a/geode-core/src/main/java/com/gemstone/gemfire/management/internal/Manager.java b/geode-core/src/main/java/com/gemstone/gemfire/management/internal/Manager.java index 680620a51b99..7ed6f28cee4e 100755 --- a/geode-core/src/main/java/com/gemstone/gemfire/management/internal/Manager.java +++ b/geode-core/src/main/java/com/gemstone/gemfire/management/internal/Manager.java @@ -27,7 +27,6 @@ * It's responsible for defining JMX server endpoints for servicing JMX * clients. * - * @author VMware, Inc. * @since 7.0 */ public abstract class Manager { diff --git a/geode-core/src/main/java/com/gemstone/gemfire/management/internal/MemberMessenger.java b/geode-core/src/main/java/com/gemstone/gemfire/management/internal/MemberMessenger.java index a3af75ecbcfd..d66815ffe9f7 100644 --- a/geode-core/src/main/java/com/gemstone/gemfire/management/internal/MemberMessenger.java +++ b/geode-core/src/main/java/com/gemstone/gemfire/management/internal/MemberMessenger.java @@ -36,7 +36,6 @@ * level. * * - * @author rishim * */ public class MemberMessenger { diff --git a/geode-core/src/main/java/com/gemstone/gemfire/management/internal/MonitoringRegionCacheListener.java b/geode-core/src/main/java/com/gemstone/gemfire/management/internal/MonitoringRegionCacheListener.java index 5b844b77af8b..448df8ae881d 100644 --- a/geode-core/src/main/java/com/gemstone/gemfire/management/internal/MonitoringRegionCacheListener.java +++ b/geode-core/src/main/java/com/gemstone/gemfire/management/internal/MonitoringRegionCacheListener.java @@ -33,7 +33,6 @@ * updates. This acts as an aggregator interface for Manager. Its used only on * Manager's side. * - * @author rishim * */ public class MonitoringRegionCacheListener extends diff --git a/geode-core/src/main/java/com/gemstone/gemfire/management/internal/NotificationBroadCasterProxy.java b/geode-core/src/main/java/com/gemstone/gemfire/management/internal/NotificationBroadCasterProxy.java index 86c3059d5c62..3ab80aa17128 100644 --- a/geode-core/src/main/java/com/gemstone/gemfire/management/internal/NotificationBroadCasterProxy.java +++ b/geode-core/src/main/java/com/gemstone/gemfire/management/internal/NotificationBroadCasterProxy.java @@ -25,7 +25,6 @@ * proxy implementations have to implement the sendNotification method. * * - * @author rishim * */ diff --git a/geode-core/src/main/java/com/gemstone/gemfire/management/internal/NotificationCacheListener.java b/geode-core/src/main/java/com/gemstone/gemfire/management/internal/NotificationCacheListener.java index 2492dd37aba8..cef78b5e3899 100644 --- a/geode-core/src/main/java/com/gemstone/gemfire/management/internal/NotificationCacheListener.java +++ b/geode-core/src/main/java/com/gemstone/gemfire/management/internal/NotificationCacheListener.java @@ -27,7 +27,6 @@ /** * This listener will be attached to each notification region * corresponding to a member - * @author rishim * */ public class NotificationCacheListener implements diff --git a/geode-core/src/main/java/com/gemstone/gemfire/management/internal/NotificationHub.java b/geode-core/src/main/java/com/gemstone/gemfire/management/internal/NotificationHub.java index 91cef7b2d8bb..90085bf40a4a 100644 --- a/geode-core/src/main/java/com/gemstone/gemfire/management/internal/NotificationHub.java +++ b/geode-core/src/main/java/com/gemstone/gemfire/management/internal/NotificationHub.java @@ -34,7 +34,6 @@ * This class acts as a central point hub for collecting all notifications * originated from VM and sending across to Managing Node * - * @author rishim * */ public class NotificationHub { @@ -163,7 +162,6 @@ public Map getListenerObjectMap() { * This class is the managed node counterpart to listen to notifications from * MBeans for which it is resistered * - * @author rishim * */ public class NotificationHubListener implements NotificationListener { diff --git a/geode-core/src/main/java/com/gemstone/gemfire/management/internal/NotificationHubClient.java b/geode-core/src/main/java/com/gemstone/gemfire/management/internal/NotificationHubClient.java index c97a9976857e..c029a25d6081 100644 --- a/geode-core/src/main/java/com/gemstone/gemfire/management/internal/NotificationHubClient.java +++ b/geode-core/src/main/java/com/gemstone/gemfire/management/internal/NotificationHubClient.java @@ -28,7 +28,6 @@ * This class actually distribute the notification with the help of the actual * broadcaster proxy. * - * @author rishim * */ diff --git a/geode-core/src/main/java/com/gemstone/gemfire/management/internal/NotificationKey.java b/geode-core/src/main/java/com/gemstone/gemfire/management/internal/NotificationKey.java index 388554b63824..a7e0daa3f950 100644 --- a/geode-core/src/main/java/com/gemstone/gemfire/management/internal/NotificationKey.java +++ b/geode-core/src/main/java/com/gemstone/gemfire/management/internal/NotificationKey.java @@ -22,7 +22,6 @@ * This class is used as a key for Notification region Only using ObjectName as * key will overwrite entries if put rate for notification is high. * - * @author rishim * */ public class NotificationKey implements java.io.Serializable { diff --git a/geode-core/src/main/java/com/gemstone/gemfire/management/internal/OpenMethod.java b/geode-core/src/main/java/com/gemstone/gemfire/management/internal/OpenMethod.java index 4cf230ce7d4b..86a956e78d32 100644 --- a/geode-core/src/main/java/com/gemstone/gemfire/management/internal/OpenMethod.java +++ b/geode-core/src/main/java/com/gemstone/gemfire/management/internal/OpenMethod.java @@ -28,7 +28,6 @@ /** * Each data type in corresponding to an Open type will have a * - * @author rishim * */ public class OpenMethod { diff --git a/geode-core/src/main/java/com/gemstone/gemfire/management/internal/OpenTypeConverter.java b/geode-core/src/main/java/com/gemstone/gemfire/management/internal/OpenTypeConverter.java index 40128762f939..8c21385a0a8a 100644 --- a/geode-core/src/main/java/com/gemstone/gemfire/management/internal/OpenTypeConverter.java +++ b/geode-core/src/main/java/com/gemstone/gemfire/management/internal/OpenTypeConverter.java @@ -81,7 +81,6 @@ * Apart from simple types, arrays, and collections, Java types are converted * through introspection into CompositeType * - * @author rishim * */ public abstract class OpenTypeConverter { @@ -490,7 +489,6 @@ private static OpenTypeConverter makeCompositeConverter(Class c) * Converts from a CompositeData to an instance of the targetClass Various * subclasses override its functionality. * - * @author rishim * */ protected static abstract class CompositeBuilder { @@ -546,7 +544,6 @@ abstract Object fromCompositeData(CompositeData cd, String[] itemNames, * Builder if the target class has a method "public static * from(CompositeData)" * - * @author rishim * */ protected static final class CompositeBuilderViaFrom extends CompositeBuilder { @@ -608,7 +605,6 @@ final Object fromCompositeData(CompositeData cd, String[] itemNames, * getters are OK, then the "applicable" method will return an empty string * and the other builders will be tried. * - * @author rishim * */ protected static class CompositeBuilderCheckGetters extends CompositeBuilder { @@ -648,7 +644,6 @@ final Object fromCompositeData(CompositeData cd, String[] itemNames, /** * Builder if the target class has a setter for every getter * - * @author rishim * */ protected static class CompositeBuilderViaSetters extends CompositeBuilder { @@ -710,7 +705,6 @@ Object fromCompositeData(CompositeData cd, String[] itemNames, * Builder if the target class has a constructor that is annotated with @ConstructorProperties * so we can derive the corresponding getters. * - * @author rishim * */ protected static final class CompositeBuilderViaConstructor extends @@ -900,7 +894,6 @@ private static class Constr { * than getters. Then we can make an instance using a dynamic proxy that * forwards the getters to the source CompositeData * - * @author rishim * */ protected static final class CompositeBuilderViaProxy extends diff --git a/geode-core/src/main/java/com/gemstone/gemfire/management/internal/OpenTypeUtil.java b/geode-core/src/main/java/com/gemstone/gemfire/management/internal/OpenTypeUtil.java index 9eddef59cbec..1fbeec791a1e 100644 --- a/geode-core/src/main/java/com/gemstone/gemfire/management/internal/OpenTypeUtil.java +++ b/geode-core/src/main/java/com/gemstone/gemfire/management/internal/OpenTypeUtil.java @@ -33,7 +33,6 @@ /** * Various uitlity methods for open type conversion * - * @author rishim * */ diff --git a/geode-core/src/main/java/com/gemstone/gemfire/management/internal/ProxyInfo.java b/geode-core/src/main/java/com/gemstone/gemfire/management/internal/ProxyInfo.java index b7dc08c0c1b2..0a2847a50813 100644 --- a/geode-core/src/main/java/com/gemstone/gemfire/management/internal/ProxyInfo.java +++ b/geode-core/src/main/java/com/gemstone/gemfire/management/internal/ProxyInfo.java @@ -22,7 +22,6 @@ * Proxy info class holds details about proxy * for quicker access during several Management * operations - * @author rishim * */ public class ProxyInfo { diff --git a/geode-core/src/main/java/com/gemstone/gemfire/management/internal/ProxyInterface.java b/geode-core/src/main/java/com/gemstone/gemfire/management/internal/ProxyInterface.java index 3a7290325344..636fdc5f113e 100644 --- a/geode-core/src/main/java/com/gemstone/gemfire/management/internal/ProxyInterface.java +++ b/geode-core/src/main/java/com/gemstone/gemfire/management/internal/ProxyInterface.java @@ -19,7 +19,6 @@ /** * This generic interface is a place holder for all * the generic methods that we want to invoke for Proxies - * @author rishim * */ public interface ProxyInterface { diff --git a/geode-core/src/main/java/com/gemstone/gemfire/management/internal/ProxyListener.java b/geode-core/src/main/java/com/gemstone/gemfire/management/internal/ProxyListener.java index eadaf022a824..a6909bb6d6c3 100644 --- a/geode-core/src/main/java/com/gemstone/gemfire/management/internal/ProxyListener.java +++ b/geode-core/src/main/java/com/gemstone/gemfire/management/internal/ProxyListener.java @@ -43,7 +43,6 @@ * Adding an ProxyListener in a non Manager node wont be useful as it wont get any * proxy related callbacks * - * @author rishim * */ public interface ProxyListener extends MembershipListener { diff --git a/geode-core/src/main/java/com/gemstone/gemfire/management/internal/SSLUtil.java b/geode-core/src/main/java/com/gemstone/gemfire/management/internal/SSLUtil.java index 803dc35bfd47..eb88ad6244c2 100644 --- a/geode-core/src/main/java/com/gemstone/gemfire/management/internal/SSLUtil.java +++ b/geode-core/src/main/java/com/gemstone/gemfire/management/internal/SSLUtil.java @@ -27,7 +27,6 @@ /** * - * @author rishim * @since 8.1 */ public class SSLUtil { diff --git a/geode-core/src/main/java/com/gemstone/gemfire/management/internal/StringBasedFilter.java b/geode-core/src/main/java/com/gemstone/gemfire/management/internal/StringBasedFilter.java index f57447d35dbe..6490042ffdf8 100644 --- a/geode-core/src/main/java/com/gemstone/gemfire/management/internal/StringBasedFilter.java +++ b/geode-core/src/main/java/com/gemstone/gemfire/management/internal/StringBasedFilter.java @@ -28,7 +28,6 @@ * This is a string pattern based Filter * with some limitations. * - * @author rishim * */ diff --git a/geode-core/src/main/java/com/gemstone/gemfire/management/internal/SystemManagementService.java b/geode-core/src/main/java/com/gemstone/gemfire/management/internal/SystemManagementService.java index 1ca10ccc2600..1de666c12676 100755 --- a/geode-core/src/main/java/com/gemstone/gemfire/management/internal/SystemManagementService.java +++ b/geode-core/src/main/java/com/gemstone/gemfire/management/internal/SystemManagementService.java @@ -62,7 +62,6 @@ * which is the gateway to various JMX operations over a GemFire * System * - * @author VMware, Inc. * @since 7.0 */ public final class SystemManagementService extends BaseManagementService { diff --git a/geode-core/src/main/java/com/gemstone/gemfire/management/internal/TableConverter.java b/geode-core/src/main/java/com/gemstone/gemfire/management/internal/TableConverter.java index 4e179bbf87ec..8db63ec73b4f 100644 --- a/geode-core/src/main/java/com/gemstone/gemfire/management/internal/TableConverter.java +++ b/geode-core/src/main/java/com/gemstone/gemfire/management/internal/TableConverter.java @@ -34,7 +34,6 @@ /** * Table type converter * - * @author rishim * */ public final class TableConverter extends OpenTypeConverter { diff --git a/geode-core/src/main/java/com/gemstone/gemfire/management/internal/beans/AggregateHandler.java b/geode-core/src/main/java/com/gemstone/gemfire/management/internal/beans/AggregateHandler.java index b70b47cc751b..9f019077e404 100644 --- a/geode-core/src/main/java/com/gemstone/gemfire/management/internal/beans/AggregateHandler.java +++ b/geode-core/src/main/java/com/gemstone/gemfire/management/internal/beans/AggregateHandler.java @@ -25,7 +25,6 @@ * also as long as they adhere to ProxyAggregator contract) implement this * interface. * - * @author rishim * */ diff --git a/geode-core/src/main/java/com/gemstone/gemfire/management/internal/beans/AsyncEventQueueMBean.java b/geode-core/src/main/java/com/gemstone/gemfire/management/internal/beans/AsyncEventQueueMBean.java index f69661214ce9..1f9cbe6d6786 100644 --- a/geode-core/src/main/java/com/gemstone/gemfire/management/internal/beans/AsyncEventQueueMBean.java +++ b/geode-core/src/main/java/com/gemstone/gemfire/management/internal/beans/AsyncEventQueueMBean.java @@ -24,7 +24,6 @@ /** * Concrete implementation of AsyncEventQueueMXBean * - * @author rishim * */ public class AsyncEventQueueMBean extends NotificationBroadcasterSupport diff --git a/geode-core/src/main/java/com/gemstone/gemfire/management/internal/beans/AsyncEventQueueMBeanBridge.java b/geode-core/src/main/java/com/gemstone/gemfire/management/internal/beans/AsyncEventQueueMBeanBridge.java index e63bbbb4f162..108e2656d788 100644 --- a/geode-core/src/main/java/com/gemstone/gemfire/management/internal/beans/AsyncEventQueueMBeanBridge.java +++ b/geode-core/src/main/java/com/gemstone/gemfire/management/internal/beans/AsyncEventQueueMBeanBridge.java @@ -25,7 +25,6 @@ /** * - * @author rishim * */ public class AsyncEventQueueMBeanBridge { diff --git a/geode-core/src/main/java/com/gemstone/gemfire/management/internal/beans/BeanUtilFuncs.java b/geode-core/src/main/java/com/gemstone/gemfire/management/internal/beans/BeanUtilFuncs.java index cc0fb6af69d9..5556c4d6663c 100644 --- a/geode-core/src/main/java/com/gemstone/gemfire/management/internal/beans/BeanUtilFuncs.java +++ b/geode-core/src/main/java/com/gemstone/gemfire/management/internal/beans/BeanUtilFuncs.java @@ -37,7 +37,6 @@ /** * Various Utility Functions to be used by MBeans * - * @author rishim * */ public class BeanUtilFuncs { diff --git a/geode-core/src/main/java/com/gemstone/gemfire/management/internal/beans/CacheServerBridge.java b/geode-core/src/main/java/com/gemstone/gemfire/management/internal/beans/CacheServerBridge.java index 406abb590e42..8e6e8cdd399d 100644 --- a/geode-core/src/main/java/com/gemstone/gemfire/management/internal/beans/CacheServerBridge.java +++ b/geode-core/src/main/java/com/gemstone/gemfire/management/internal/beans/CacheServerBridge.java @@ -73,7 +73,6 @@ * Represents the GemFire CacheServer . Provides data and notifications about * server, subscriptions,durable queues and indices * - * @author rishim * */ public class CacheServerBridge extends ServerBridge{ diff --git a/geode-core/src/main/java/com/gemstone/gemfire/management/internal/beans/CacheServerMBean.java b/geode-core/src/main/java/com/gemstone/gemfire/management/internal/beans/CacheServerMBean.java index 7b22c460b5ec..f4488397062a 100644 --- a/geode-core/src/main/java/com/gemstone/gemfire/management/internal/beans/CacheServerMBean.java +++ b/geode-core/src/main/java/com/gemstone/gemfire/management/internal/beans/CacheServerMBean.java @@ -27,7 +27,6 @@ * Represents the GemFire CacheServer . Provides data and notifications about * server, subscriptions,durable queues and indices * - * @author rishim * */ public class CacheServerMBean extends NotificationBroadcasterSupport implements CacheServerMXBean { diff --git a/geode-core/src/main/java/com/gemstone/gemfire/management/internal/beans/DiskRegionBridge.java b/geode-core/src/main/java/com/gemstone/gemfire/management/internal/beans/DiskRegionBridge.java index 85aba90550df..e52c91357d5b 100644 --- a/geode-core/src/main/java/com/gemstone/gemfire/management/internal/beans/DiskRegionBridge.java +++ b/geode-core/src/main/java/com/gemstone/gemfire/management/internal/beans/DiskRegionBridge.java @@ -28,7 +28,6 @@ /** * - * @author rishim * */ public class DiskRegionBridge { diff --git a/geode-core/src/main/java/com/gemstone/gemfire/management/internal/beans/DiskStoreMBean.java b/geode-core/src/main/java/com/gemstone/gemfire/management/internal/beans/DiskStoreMBean.java index 699137d9e723..9d79e376f17c 100644 --- a/geode-core/src/main/java/com/gemstone/gemfire/management/internal/beans/DiskStoreMBean.java +++ b/geode-core/src/main/java/com/gemstone/gemfire/management/internal/beans/DiskStoreMBean.java @@ -26,7 +26,6 @@ * persistence attributes. A region without a disk store name belongs to the * default disk store. * - * @author rishim * */ public class DiskStoreMBean extends NotificationBroadcasterSupport implements diff --git a/geode-core/src/main/java/com/gemstone/gemfire/management/internal/beans/DiskStoreMBeanBridge.java b/geode-core/src/main/java/com/gemstone/gemfire/management/internal/beans/DiskStoreMBeanBridge.java index 25403b6c2dd3..4b8bedc817b7 100644 --- a/geode-core/src/main/java/com/gemstone/gemfire/management/internal/beans/DiskStoreMBeanBridge.java +++ b/geode-core/src/main/java/com/gemstone/gemfire/management/internal/beans/DiskStoreMBeanBridge.java @@ -32,7 +32,6 @@ /** * Bridge class to act as an interface between JMX layer and GemFire DiskStores * - * @author rishim * */ public class DiskStoreMBeanBridge { diff --git a/geode-core/src/main/java/com/gemstone/gemfire/management/internal/beans/DistributedLockServiceBridge.java b/geode-core/src/main/java/com/gemstone/gemfire/management/internal/beans/DistributedLockServiceBridge.java index a0eecb9a0fa9..86001c9d6358 100644 --- a/geode-core/src/main/java/com/gemstone/gemfire/management/internal/beans/DistributedLockServiceBridge.java +++ b/geode-core/src/main/java/com/gemstone/gemfire/management/internal/beans/DistributedLockServiceBridge.java @@ -39,7 +39,6 @@ * Iterator. Iterates over them and gather data. Creating multiple iterator on * each method call is a concern and a better way needs to be introduced. * - * @author rishim * */ public class DistributedLockServiceBridge { diff --git a/geode-core/src/main/java/com/gemstone/gemfire/management/internal/beans/DistributedLockServiceMBean.java b/geode-core/src/main/java/com/gemstone/gemfire/management/internal/beans/DistributedLockServiceMBean.java index 1da02e35f41b..37f5ec34e85a 100644 --- a/geode-core/src/main/java/com/gemstone/gemfire/management/internal/beans/DistributedLockServiceMBean.java +++ b/geode-core/src/main/java/com/gemstone/gemfire/management/internal/beans/DistributedLockServiceMBean.java @@ -23,7 +23,6 @@ /** * It represents a distributed view of a LockService * - * @author rishim * */ public class DistributedLockServiceMBean implements diff --git a/geode-core/src/main/java/com/gemstone/gemfire/management/internal/beans/DistributedRegionBridge.java b/geode-core/src/main/java/com/gemstone/gemfire/management/internal/beans/DistributedRegionBridge.java index e4fec4ca04a5..5fbbc61cb7a4 100644 --- a/geode-core/src/main/java/com/gemstone/gemfire/management/internal/beans/DistributedRegionBridge.java +++ b/geode-core/src/main/java/com/gemstone/gemfire/management/internal/beans/DistributedRegionBridge.java @@ -46,7 +46,6 @@ * MBeanAggregator will create this bridge and inject it into a * DistributedRegionMBean * - * @author rishim * */ public class DistributedRegionBridge { diff --git a/geode-core/src/main/java/com/gemstone/gemfire/management/internal/beans/DistributedRegionMBean.java b/geode-core/src/main/java/com/gemstone/gemfire/management/internal/beans/DistributedRegionMBean.java index 9d7eb1be02e2..549acc7c5bfb 100644 --- a/geode-core/src/main/java/com/gemstone/gemfire/management/internal/beans/DistributedRegionMBean.java +++ b/geode-core/src/main/java/com/gemstone/gemfire/management/internal/beans/DistributedRegionMBean.java @@ -27,7 +27,6 @@ * System-wide aggregate of a named Region. Provides high-level view of a Region * for all members hosting and/or using it. * - * @author rishim * */ public class DistributedRegionMBean implements DistributedRegionMXBean { diff --git a/geode-core/src/main/java/com/gemstone/gemfire/management/internal/beans/DistributedSystemBridge.java b/geode-core/src/main/java/com/gemstone/gemfire/management/internal/beans/DistributedSystemBridge.java index d95de82d0786..bcacc41bfe82 100644 --- a/geode-core/src/main/java/com/gemstone/gemfire/management/internal/beans/DistributedSystemBridge.java +++ b/geode-core/src/main/java/com/gemstone/gemfire/management/internal/beans/DistributedSystemBridge.java @@ -102,7 +102,6 @@ * * * - * @author rishim * */ public class DistributedSystemBridge { @@ -1707,7 +1706,6 @@ public void setQueryCollectionsDepth(int queryCollectionsDepth) { /** * User defined notification handler * - * @author rishim * */ private class DistributedSystemNotifListener implements NotificationListener { diff --git a/geode-core/src/main/java/com/gemstone/gemfire/management/internal/beans/DistributedSystemMBean.java b/geode-core/src/main/java/com/gemstone/gemfire/management/internal/beans/DistributedSystemMBean.java index 617ee4804152..bd92f9f2cd4b 100644 --- a/geode-core/src/main/java/com/gemstone/gemfire/management/internal/beans/DistributedSystemMBean.java +++ b/geode-core/src/main/java/com/gemstone/gemfire/management/internal/beans/DistributedSystemMBean.java @@ -35,7 +35,6 @@ * * It is provided with one bridge reference which acts as an intermediate for * JMX and GemFire. - * @author rishim * */ public class DistributedSystemMBean extends NotificationBroadcasterSupport diff --git a/geode-core/src/main/java/com/gemstone/gemfire/management/internal/beans/GatewayReceiverMBean.java b/geode-core/src/main/java/com/gemstone/gemfire/management/internal/beans/GatewayReceiverMBean.java index adf58532d736..900bd0abf5c1 100644 --- a/geode-core/src/main/java/com/gemstone/gemfire/management/internal/beans/GatewayReceiverMBean.java +++ b/geode-core/src/main/java/com/gemstone/gemfire/management/internal/beans/GatewayReceiverMBean.java @@ -22,7 +22,6 @@ /** * - * @author rishim * */ public class GatewayReceiverMBean extends NotificationBroadcasterSupport diff --git a/geode-core/src/main/java/com/gemstone/gemfire/management/internal/beans/GatewayReceiverMBeanBridge.java b/geode-core/src/main/java/com/gemstone/gemfire/management/internal/beans/GatewayReceiverMBeanBridge.java index 490251a8bfe0..c51efca8d8d8 100644 --- a/geode-core/src/main/java/com/gemstone/gemfire/management/internal/beans/GatewayReceiverMBeanBridge.java +++ b/geode-core/src/main/java/com/gemstone/gemfire/management/internal/beans/GatewayReceiverMBeanBridge.java @@ -34,7 +34,6 @@ /** * - * @author rishim * */ public class GatewayReceiverMBeanBridge extends ServerBridge{ diff --git a/geode-core/src/main/java/com/gemstone/gemfire/management/internal/beans/GatewaySenderMBean.java b/geode-core/src/main/java/com/gemstone/gemfire/management/internal/beans/GatewaySenderMBean.java index 4497f6826f64..4b226f48eb46 100644 --- a/geode-core/src/main/java/com/gemstone/gemfire/management/internal/beans/GatewaySenderMBean.java +++ b/geode-core/src/main/java/com/gemstone/gemfire/management/internal/beans/GatewaySenderMBean.java @@ -23,7 +23,6 @@ /** * - * @author rishim * */ public class GatewaySenderMBean extends NotificationBroadcasterSupport diff --git a/geode-core/src/main/java/com/gemstone/gemfire/management/internal/beans/GatewaySenderMBeanBridge.java b/geode-core/src/main/java/com/gemstone/gemfire/management/internal/beans/GatewaySenderMBeanBridge.java index 938d326d3634..7502389dc528 100644 --- a/geode-core/src/main/java/com/gemstone/gemfire/management/internal/beans/GatewaySenderMBeanBridge.java +++ b/geode-core/src/main/java/com/gemstone/gemfire/management/internal/beans/GatewaySenderMBeanBridge.java @@ -34,7 +34,6 @@ /** * - * @author rishim * */ public class GatewaySenderMBeanBridge { diff --git a/geode-core/src/main/java/com/gemstone/gemfire/management/internal/beans/HDFSRegionBridge.java b/geode-core/src/main/java/com/gemstone/gemfire/management/internal/beans/HDFSRegionBridge.java index c5aedc3147b9..29bc24681d21 100644 --- a/geode-core/src/main/java/com/gemstone/gemfire/management/internal/beans/HDFSRegionBridge.java +++ b/geode-core/src/main/java/com/gemstone/gemfire/management/internal/beans/HDFSRegionBridge.java @@ -32,7 +32,6 @@ /** * - * @author rishim * * MBean Bridge for HDFS region which is a type of Partitioned Region */ diff --git a/geode-core/src/main/java/com/gemstone/gemfire/management/internal/beans/LocatorMBean.java b/geode-core/src/main/java/com/gemstone/gemfire/management/internal/beans/LocatorMBean.java index 74cb9acc7ade..4a7671a97eff 100644 --- a/geode-core/src/main/java/com/gemstone/gemfire/management/internal/beans/LocatorMBean.java +++ b/geode-core/src/main/java/com/gemstone/gemfire/management/internal/beans/LocatorMBean.java @@ -22,7 +22,6 @@ /** * - * @author rishim * */ public class LocatorMBean extends NotificationBroadcasterSupport implements diff --git a/geode-core/src/main/java/com/gemstone/gemfire/management/internal/beans/LocatorMBeanBridge.java b/geode-core/src/main/java/com/gemstone/gemfire/management/internal/beans/LocatorMBeanBridge.java index ee7cbedee1e8..b2c7295c3f7c 100644 --- a/geode-core/src/main/java/com/gemstone/gemfire/management/internal/beans/LocatorMBeanBridge.java +++ b/geode-core/src/main/java/com/gemstone/gemfire/management/internal/beans/LocatorMBeanBridge.java @@ -35,7 +35,6 @@ /** * - * @author rishim * */ public class LocatorMBeanBridge { diff --git a/geode-core/src/main/java/com/gemstone/gemfire/management/internal/beans/LockServiceMBean.java b/geode-core/src/main/java/com/gemstone/gemfire/management/internal/beans/LockServiceMBean.java index e021c5ffd244..795cfb1de1d0 100644 --- a/geode-core/src/main/java/com/gemstone/gemfire/management/internal/beans/LockServiceMBean.java +++ b/geode-core/src/main/java/com/gemstone/gemfire/management/internal/beans/LockServiceMBean.java @@ -25,7 +25,6 @@ /** * Management API to manage a Lock Service MBean * - * @author rishim * */ public class LockServiceMBean extends NotificationBroadcasterSupport implements diff --git a/geode-core/src/main/java/com/gemstone/gemfire/management/internal/beans/LockServiceMBeanBridge.java b/geode-core/src/main/java/com/gemstone/gemfire/management/internal/beans/LockServiceMBeanBridge.java index 1ae6c7a74d72..64ad741616c9 100644 --- a/geode-core/src/main/java/com/gemstone/gemfire/management/internal/beans/LockServiceMBeanBridge.java +++ b/geode-core/src/main/java/com/gemstone/gemfire/management/internal/beans/LockServiceMBeanBridge.java @@ -29,7 +29,6 @@ /** * This class acts as a Bridge between JMX layer and GemFire layer * - * @author rishim * */ public class LockServiceMBeanBridge { diff --git a/geode-core/src/main/java/com/gemstone/gemfire/management/internal/beans/MBeanAggregator.java b/geode-core/src/main/java/com/gemstone/gemfire/management/internal/beans/MBeanAggregator.java index a64e7f7d36b6..5f4ba4ff5e52 100644 --- a/geode-core/src/main/java/com/gemstone/gemfire/management/internal/beans/MBeanAggregator.java +++ b/geode-core/src/main/java/com/gemstone/gemfire/management/internal/beans/MBeanAggregator.java @@ -41,7 +41,6 @@ * acts as a ProxyListener and add/remove/update the corresponding MBean * aggregates accordingly. * - * @author rishim * */ public class MBeanAggregator implements ProxyListener { @@ -195,7 +194,6 @@ public void afterPseudoCreateProxy(ObjectName objectName, Class interfaceClass, * System MBean As of today there wont be any Distributed counterpart of Cache * Server MBean * - * @author rishim * */ private class CacheServerHandler implements AggregateHandler { @@ -232,7 +230,6 @@ public void handlePseudoCreateProxy(ObjectName objectName, Class interfaceClass, * Distributed System MBean As of today there wont be any Distributed * counterpart of GatewayReceiverHandler MBean * - * @author rishim * */ private class GatewayReceiverHandler implements AggregateHandler { @@ -271,7 +268,6 @@ public void handlePseudoCreateProxy(ObjectName objectName, Class interfaceClass, * Handler class for GatewayReceiverHandler MBeans only to provide data to Distributed System MBean * As of today there wont be any Distributed counterpart of GatewayReceiverHandler MBean * - * @author rishim * */ private class GatewaySenderHandler implements AggregateHandler { @@ -305,7 +301,6 @@ public void handlePseudoCreateProxy(ObjectName objectName, Class interfaceClass, /** * Handler class for DistributedRegion * - * @author rishim * */ private class RegionHandler implements AggregateHandler { @@ -339,7 +334,6 @@ public void handlePseudoCreateProxy(ObjectName objectName, Class interfaceClass, /** * Handler class for Distributed System * - * @author rishim * */ private class MemberHandler implements AggregateHandler { @@ -374,7 +368,6 @@ public void handlePseudoCreateProxy(ObjectName objectName, Class interfaceClass, /** * Handler class for Distributed Lock Service * - * @author rishim * */ private class LockServiceHandler implements AggregateHandler { diff --git a/geode-core/src/main/java/com/gemstone/gemfire/management/internal/beans/ManagementAdapter.java b/geode-core/src/main/java/com/gemstone/gemfire/management/internal/beans/ManagementAdapter.java index 65e8c9f4ca27..b1cc9fc88569 100644 --- a/geode-core/src/main/java/com/gemstone/gemfire/management/internal/beans/ManagementAdapter.java +++ b/geode-core/src/main/java/com/gemstone/gemfire/management/internal/beans/ManagementAdapter.java @@ -84,7 +84,6 @@ * of the system and contains some state itself. * * - * @author rishim * */ public class ManagementAdapter { diff --git a/geode-core/src/main/java/com/gemstone/gemfire/management/internal/beans/ManagementListener.java b/geode-core/src/main/java/com/gemstone/gemfire/management/internal/beans/ManagementListener.java index 4a102899c3c9..5947727983f9 100644 --- a/geode-core/src/main/java/com/gemstone/gemfire/management/internal/beans/ManagementListener.java +++ b/geode-core/src/main/java/com/gemstone/gemfire/management/internal/beans/ManagementListener.java @@ -37,7 +37,6 @@ * This Listener listens on various resource creation in GemFire and * create/destroys GemFire specific MBeans accordingly * - * @author rishim * */ public class ManagementListener implements ResourceEventsListener{ diff --git a/geode-core/src/main/java/com/gemstone/gemfire/management/internal/beans/ManagerMBean.java b/geode-core/src/main/java/com/gemstone/gemfire/management/internal/beans/ManagerMBean.java index 29c1e422e5d6..9194d1d0c497 100644 --- a/geode-core/src/main/java/com/gemstone/gemfire/management/internal/beans/ManagerMBean.java +++ b/geode-core/src/main/java/com/gemstone/gemfire/management/internal/beans/ManagerMBean.java @@ -22,7 +22,6 @@ /** * - * @author rishim * */ public class ManagerMBean implements ManagerMXBean { diff --git a/geode-core/src/main/java/com/gemstone/gemfire/management/internal/beans/ManagerMBeanBridge.java b/geode-core/src/main/java/com/gemstone/gemfire/management/internal/beans/ManagerMBeanBridge.java index 636dab5371d1..adf0f9b29735 100644 --- a/geode-core/src/main/java/com/gemstone/gemfire/management/internal/beans/ManagerMBeanBridge.java +++ b/geode-core/src/main/java/com/gemstone/gemfire/management/internal/beans/ManagerMBeanBridge.java @@ -23,7 +23,6 @@ /** * Bridge for ManagerMBean - * @author rishim * */ public class ManagerMBeanBridge { diff --git a/geode-core/src/main/java/com/gemstone/gemfire/management/internal/beans/MemberMBean.java b/geode-core/src/main/java/com/gemstone/gemfire/management/internal/beans/MemberMBean.java index 5a999296e25c..21d71406fa4e 100644 --- a/geode-core/src/main/java/com/gemstone/gemfire/management/internal/beans/MemberMBean.java +++ b/geode-core/src/main/java/com/gemstone/gemfire/management/internal/beans/MemberMBean.java @@ -31,7 +31,6 @@ /** * This MBean is a gateway to cache and a member * - * @author rishim * */ public class MemberMBean extends NotificationBroadcasterSupport implements diff --git a/geode-core/src/main/java/com/gemstone/gemfire/management/internal/beans/MemberMBeanBridge.java b/geode-core/src/main/java/com/gemstone/gemfire/management/internal/beans/MemberMBeanBridge.java index 61e328d0d632..79884b0a9c46 100644 --- a/geode-core/src/main/java/com/gemstone/gemfire/management/internal/beans/MemberMBeanBridge.java +++ b/geode-core/src/main/java/com/gemstone/gemfire/management/internal/beans/MemberMBeanBridge.java @@ -136,7 +136,6 @@ * This class acts as an Bridge between MemberMBean and GemFire Cache and * Distributed System * - * @author rishim * */ public class MemberMBeanBridge { diff --git a/geode-core/src/main/java/com/gemstone/gemfire/management/internal/beans/MetricsCalculator.java b/geode-core/src/main/java/com/gemstone/gemfire/management/internal/beans/MetricsCalculator.java index bb7cbc054090..c43cfe35a22a 100644 --- a/geode-core/src/main/java/com/gemstone/gemfire/management/internal/beans/MetricsCalculator.java +++ b/geode-core/src/main/java/com/gemstone/gemfire/management/internal/beans/MetricsCalculator.java @@ -24,7 +24,6 @@ /** * This is a utility class to calculate various type of Metrics out of raw stats * - * @author rishim * */ public class MetricsCalculator { diff --git a/geode-core/src/main/java/com/gemstone/gemfire/management/internal/beans/PartitionedRegionBridge.java b/geode-core/src/main/java/com/gemstone/gemfire/management/internal/beans/PartitionedRegionBridge.java index e75e06dbe867..3a8440a8722b 100644 --- a/geode-core/src/main/java/com/gemstone/gemfire/management/internal/beans/PartitionedRegionBridge.java +++ b/geode-core/src/main/java/com/gemstone/gemfire/management/internal/beans/PartitionedRegionBridge.java @@ -35,7 +35,6 @@ /** * - * @author rishim */ public class PartitionedRegionBridge extends RegionMBeanBridge { diff --git a/geode-core/src/main/java/com/gemstone/gemfire/management/internal/beans/QueryDataFunction.java b/geode-core/src/main/java/com/gemstone/gemfire/management/internal/beans/QueryDataFunction.java index 4b3dda8f0b4e..890d9574bc38 100644 --- a/geode-core/src/main/java/com/gemstone/gemfire/management/internal/beans/QueryDataFunction.java +++ b/geode-core/src/main/java/com/gemstone/gemfire/management/internal/beans/QueryDataFunction.java @@ -71,7 +71,6 @@ * This function is executed on one or multiple members based on the member * input to DistributedSystemMXBean.queryData() * - * @author rishim * */ public class QueryDataFunction extends FunctionAdapter implements InternalEntity { @@ -484,7 +483,6 @@ public static Set compileQuery(Cache cache, String query) throws QueryIn * Function to gather data locally. This function is required to execute query * with region context * - * @author rishim * */ private class LocalQueryFunction extends FunctionAdapter { diff --git a/geode-core/src/main/java/com/gemstone/gemfire/management/internal/beans/RegionMBean.java b/geode-core/src/main/java/com/gemstone/gemfire/management/internal/beans/RegionMBean.java index 4d3f8ba0f101..1c7dcf7613f1 100644 --- a/geode-core/src/main/java/com/gemstone/gemfire/management/internal/beans/RegionMBean.java +++ b/geode-core/src/main/java/com/gemstone/gemfire/management/internal/beans/RegionMBean.java @@ -32,7 +32,6 @@ * It extends NotificationBroadcasterSupport for any future implementation of * notification. * - * @author rishim * */ public class RegionMBean extends NotificationBroadcasterSupport implements diff --git a/geode-core/src/main/java/com/gemstone/gemfire/management/internal/beans/RegionMBeanBridge.java b/geode-core/src/main/java/com/gemstone/gemfire/management/internal/beans/RegionMBeanBridge.java index 3776e8468ecc..cd3cb9016c9e 100644 --- a/geode-core/src/main/java/com/gemstone/gemfire/management/internal/beans/RegionMBeanBridge.java +++ b/geode-core/src/main/java/com/gemstone/gemfire/management/internal/beans/RegionMBeanBridge.java @@ -48,7 +48,6 @@ * This class acts as a bridge between a Region and RegionMBean This also * listens for statistics changes and update its value accordingly * - * @author rishim * * @param * @param diff --git a/geode-core/src/main/java/com/gemstone/gemfire/management/internal/beans/RegionMBeanCompositeDataFactory.java b/geode-core/src/main/java/com/gemstone/gemfire/management/internal/beans/RegionMBeanCompositeDataFactory.java index e45cd7daffc5..b9034d5e497f 100644 --- a/geode-core/src/main/java/com/gemstone/gemfire/management/internal/beans/RegionMBeanCompositeDataFactory.java +++ b/geode-core/src/main/java/com/gemstone/gemfire/management/internal/beans/RegionMBeanCompositeDataFactory.java @@ -37,7 +37,6 @@ /** * Utility class to create CompositeDataTypes for RegionMXBean * - * @author rishim * */ public class RegionMBeanCompositeDataFactory { diff --git a/geode-core/src/main/java/com/gemstone/gemfire/management/internal/beans/SequenceNumber.java b/geode-core/src/main/java/com/gemstone/gemfire/management/internal/beans/SequenceNumber.java index 61afbb01e81b..14d4187aaa3a 100644 --- a/geode-core/src/main/java/com/gemstone/gemfire/management/internal/beans/SequenceNumber.java +++ b/geode-core/src/main/java/com/gemstone/gemfire/management/internal/beans/SequenceNumber.java @@ -21,7 +21,6 @@ /** * Class to give a consistent sequence number to notifications * - * @author rishim * */ public class SequenceNumber { diff --git a/geode-core/src/main/java/com/gemstone/gemfire/management/internal/beans/stats/AggregateRegionStatsMonitor.java b/geode-core/src/main/java/com/gemstone/gemfire/management/internal/beans/stats/AggregateRegionStatsMonitor.java index e68478919315..524af440d1b3 100644 --- a/geode-core/src/main/java/com/gemstone/gemfire/management/internal/beans/stats/AggregateRegionStatsMonitor.java +++ b/geode-core/src/main/java/com/gemstone/gemfire/management/internal/beans/stats/AggregateRegionStatsMonitor.java @@ -31,7 +31,6 @@ /** * - * @author rishim * */ public class AggregateRegionStatsMonitor extends MBeanStatsMonitor{ diff --git a/geode-core/src/main/java/com/gemstone/gemfire/management/internal/beans/stats/GCStatsMonitor.java b/geode-core/src/main/java/com/gemstone/gemfire/management/internal/beans/stats/GCStatsMonitor.java index 74b191b567b8..aa6d73345fce 100644 --- a/geode-core/src/main/java/com/gemstone/gemfire/management/internal/beans/stats/GCStatsMonitor.java +++ b/geode-core/src/main/java/com/gemstone/gemfire/management/internal/beans/stats/GCStatsMonitor.java @@ -24,7 +24,6 @@ /** * - * @author rishim * */ public class GCStatsMonitor extends MBeanStatsMonitor { diff --git a/geode-core/src/main/java/com/gemstone/gemfire/management/internal/beans/stats/GatewayReceiverClusterStatsMonitor.java b/geode-core/src/main/java/com/gemstone/gemfire/management/internal/beans/stats/GatewayReceiverClusterStatsMonitor.java index 39234f0e1f9b..e1a3543a5bff 100644 --- a/geode-core/src/main/java/com/gemstone/gemfire/management/internal/beans/stats/GatewayReceiverClusterStatsMonitor.java +++ b/geode-core/src/main/java/com/gemstone/gemfire/management/internal/beans/stats/GatewayReceiverClusterStatsMonitor.java @@ -23,7 +23,6 @@ /** * - * @author rishim * */ public class GatewayReceiverClusterStatsMonitor { diff --git a/geode-core/src/main/java/com/gemstone/gemfire/management/internal/beans/stats/GatewaySenderClusterStatsMonitor.java b/geode-core/src/main/java/com/gemstone/gemfire/management/internal/beans/stats/GatewaySenderClusterStatsMonitor.java index e66a6454e921..9f4825ed94e2 100644 --- a/geode-core/src/main/java/com/gemstone/gemfire/management/internal/beans/stats/GatewaySenderClusterStatsMonitor.java +++ b/geode-core/src/main/java/com/gemstone/gemfire/management/internal/beans/stats/GatewaySenderClusterStatsMonitor.java @@ -23,7 +23,6 @@ /** * - * @author rishim * */ public class GatewaySenderClusterStatsMonitor { diff --git a/geode-core/src/main/java/com/gemstone/gemfire/management/internal/beans/stats/MBeanStatsMonitor.java b/geode-core/src/main/java/com/gemstone/gemfire/management/internal/beans/stats/MBeanStatsMonitor.java index 2074147db734..3b9c4ae3c960 100644 --- a/geode-core/src/main/java/com/gemstone/gemfire/management/internal/beans/stats/MBeanStatsMonitor.java +++ b/geode-core/src/main/java/com/gemstone/gemfire/management/internal/beans/stats/MBeanStatsMonitor.java @@ -32,7 +32,6 @@ /** * Class to get mappings of stats name to their values * - * @author rishim * */ public class MBeanStatsMonitor implements StatisticsListener { diff --git a/geode-core/src/main/java/com/gemstone/gemfire/management/internal/beans/stats/MemberClusterStatsMonitor.java b/geode-core/src/main/java/com/gemstone/gemfire/management/internal/beans/stats/MemberClusterStatsMonitor.java index 3f5187f94566..e4ce559ecb05 100644 --- a/geode-core/src/main/java/com/gemstone/gemfire/management/internal/beans/stats/MemberClusterStatsMonitor.java +++ b/geode-core/src/main/java/com/gemstone/gemfire/management/internal/beans/stats/MemberClusterStatsMonitor.java @@ -26,7 +26,6 @@ /** * - * @author rishim * */ public class MemberClusterStatsMonitor { diff --git a/geode-core/src/main/java/com/gemstone/gemfire/management/internal/beans/stats/MemberLevelDiskMonitor.java b/geode-core/src/main/java/com/gemstone/gemfire/management/internal/beans/stats/MemberLevelDiskMonitor.java index e0525f02af81..a3af3ba686ff 100644 --- a/geode-core/src/main/java/com/gemstone/gemfire/management/internal/beans/stats/MemberLevelDiskMonitor.java +++ b/geode-core/src/main/java/com/gemstone/gemfire/management/internal/beans/stats/MemberLevelDiskMonitor.java @@ -31,7 +31,6 @@ /** * - * @author rishim * */ public class MemberLevelDiskMonitor extends MBeanStatsMonitor{ diff --git a/geode-core/src/main/java/com/gemstone/gemfire/management/internal/beans/stats/RegionClusterStatsMonitor.java b/geode-core/src/main/java/com/gemstone/gemfire/management/internal/beans/stats/RegionClusterStatsMonitor.java index 87c9425b4ccf..c855171b376c 100644 --- a/geode-core/src/main/java/com/gemstone/gemfire/management/internal/beans/stats/RegionClusterStatsMonitor.java +++ b/geode-core/src/main/java/com/gemstone/gemfire/management/internal/beans/stats/RegionClusterStatsMonitor.java @@ -25,7 +25,6 @@ /** * Not only statistics we can set different attributes also * - * @author rishim * */ public class RegionClusterStatsMonitor { diff --git a/geode-core/src/main/java/com/gemstone/gemfire/management/internal/beans/stats/ServerClusterStatsMonitor.java b/geode-core/src/main/java/com/gemstone/gemfire/management/internal/beans/stats/ServerClusterStatsMonitor.java index 105e652948f1..a884ad0cca0e 100644 --- a/geode-core/src/main/java/com/gemstone/gemfire/management/internal/beans/stats/ServerClusterStatsMonitor.java +++ b/geode-core/src/main/java/com/gemstone/gemfire/management/internal/beans/stats/ServerClusterStatsMonitor.java @@ -23,7 +23,6 @@ /** * - * @author rishim * */ public class ServerClusterStatsMonitor { diff --git a/geode-core/src/main/java/com/gemstone/gemfire/management/internal/beans/stats/StatType.java b/geode-core/src/main/java/com/gemstone/gemfire/management/internal/beans/stats/StatType.java index 9bd9ce739fca..4e507b7ab4a7 100644 --- a/geode-core/src/main/java/com/gemstone/gemfire/management/internal/beans/stats/StatType.java +++ b/geode-core/src/main/java/com/gemstone/gemfire/management/internal/beans/stats/StatType.java @@ -18,7 +18,6 @@ /** * - * @author rishim * */ public enum StatType { diff --git a/geode-core/src/main/java/com/gemstone/gemfire/management/internal/beans/stats/StatsAggregator.java b/geode-core/src/main/java/com/gemstone/gemfire/management/internal/beans/stats/StatsAggregator.java index 132e3dd74a36..d3ba1618a0b3 100644 --- a/geode-core/src/main/java/com/gemstone/gemfire/management/internal/beans/stats/StatsAggregator.java +++ b/geode-core/src/main/java/com/gemstone/gemfire/management/internal/beans/stats/StatsAggregator.java @@ -28,7 +28,6 @@ /** * - * @author rishim * */ public class StatsAggregator { diff --git a/geode-core/src/main/java/com/gemstone/gemfire/management/internal/beans/stats/StatsAverageLatency.java b/geode-core/src/main/java/com/gemstone/gemfire/management/internal/beans/stats/StatsAverageLatency.java index c34298ebdd40..f79dc9d50835 100644 --- a/geode-core/src/main/java/com/gemstone/gemfire/management/internal/beans/stats/StatsAverageLatency.java +++ b/geode-core/src/main/java/com/gemstone/gemfire/management/internal/beans/stats/StatsAverageLatency.java @@ -20,7 +20,6 @@ /** * - * @author rishim * */ public class StatsAverageLatency { diff --git a/geode-core/src/main/java/com/gemstone/gemfire/management/internal/beans/stats/StatsKey.java b/geode-core/src/main/java/com/gemstone/gemfire/management/internal/beans/stats/StatsKey.java index 05dfd5e9b785..65a956bfba2b 100644 --- a/geode-core/src/main/java/com/gemstone/gemfire/management/internal/beans/stats/StatsKey.java +++ b/geode-core/src/main/java/com/gemstone/gemfire/management/internal/beans/stats/StatsKey.java @@ -18,7 +18,6 @@ /** * All the stats name which we will require from various MBean - * @author rishim * */ public class StatsKey { diff --git a/geode-core/src/main/java/com/gemstone/gemfire/management/internal/beans/stats/StatsLatency.java b/geode-core/src/main/java/com/gemstone/gemfire/management/internal/beans/stats/StatsLatency.java index a0cf93330105..ae408ea7d532 100644 --- a/geode-core/src/main/java/com/gemstone/gemfire/management/internal/beans/stats/StatsLatency.java +++ b/geode-core/src/main/java/com/gemstone/gemfire/management/internal/beans/stats/StatsLatency.java @@ -20,7 +20,6 @@ /** * - * @author rishim * */ public class StatsLatency { diff --git a/geode-core/src/main/java/com/gemstone/gemfire/management/internal/beans/stats/StatsRate.java b/geode-core/src/main/java/com/gemstone/gemfire/management/internal/beans/stats/StatsRate.java index c2a778f29edd..413d635682aa 100644 --- a/geode-core/src/main/java/com/gemstone/gemfire/management/internal/beans/stats/StatsRate.java +++ b/geode-core/src/main/java/com/gemstone/gemfire/management/internal/beans/stats/StatsRate.java @@ -20,7 +20,6 @@ /** * - * @author rishim * */ public class StatsRate { diff --git a/geode-core/src/main/java/com/gemstone/gemfire/management/internal/beans/stats/VMStatsMonitor.java b/geode-core/src/main/java/com/gemstone/gemfire/management/internal/beans/stats/VMStatsMonitor.java index 0098d9868ba1..5f54f2a33f9f 100644 --- a/geode-core/src/main/java/com/gemstone/gemfire/management/internal/beans/stats/VMStatsMonitor.java +++ b/geode-core/src/main/java/com/gemstone/gemfire/management/internal/beans/stats/VMStatsMonitor.java @@ -29,7 +29,6 @@ * This class acts as a monitor and listen for VM stats update on behalf of * MemberMBean. * - * @author rishim * */ public final class VMStatsMonitor extends MBeanStatsMonitor { diff --git a/geode-core/src/main/java/com/gemstone/gemfire/management/internal/cli/AbstractCliAroundInterceptor.java b/geode-core/src/main/java/com/gemstone/gemfire/management/internal/cli/AbstractCliAroundInterceptor.java index 8ab041168c92..8edcb23c84a9 100644 --- a/geode-core/src/main/java/com/gemstone/gemfire/management/internal/cli/AbstractCliAroundInterceptor.java +++ b/geode-core/src/main/java/com/gemstone/gemfire/management/internal/cli/AbstractCliAroundInterceptor.java @@ -23,7 +23,6 @@ /** * Semi-complete implementation of {@link CliAroundInterceptor} for convenience for implementors. * - * @author Abhishek Chaudhari * * @since 7.0 */ diff --git a/geode-core/src/main/java/com/gemstone/gemfire/management/internal/cli/CliAroundInterceptor.java b/geode-core/src/main/java/com/gemstone/gemfire/management/internal/cli/CliAroundInterceptor.java index 3e4222976a4f..050785a59b40 100644 --- a/geode-core/src/main/java/com/gemstone/gemfire/management/internal/cli/CliAroundInterceptor.java +++ b/geode-core/src/main/java/com/gemstone/gemfire/management/internal/cli/CliAroundInterceptor.java @@ -23,7 +23,6 @@ * Interceptor interface which {@link GfshExecutionStrategy} can use to * intercept before & after actual command execution. * - * @author Abhishek Chaudhari * * @since 7.0 */ diff --git a/geode-core/src/main/java/com/gemstone/gemfire/management/internal/cli/CliUtil.java b/geode-core/src/main/java/com/gemstone/gemfire/management/internal/cli/CliUtil.java index 09f8bd851b4f..1a886d1c7d82 100755 --- a/geode-core/src/main/java/com/gemstone/gemfire/management/internal/cli/CliUtil.java +++ b/geode-core/src/main/java/com/gemstone/gemfire/management/internal/cli/CliUtil.java @@ -73,7 +73,6 @@ * This class contains utility methods used by classes used to build the Command * Line Interface (CLI). * - * @author Abhishek Chaudhari * * @since 7.0 */ @@ -661,7 +660,6 @@ public static String decodeWithDefaultCharSet(String urlToDecode) { * a String value specifying the file system pathname to resolve. * @return a String specifying a path relative to Gfsh. */ - // Moved form LauncherLifeCycleCommands @author jblum public static String resolvePathname(final String pathname) { return (StringUtils.isBlank(pathname) ? pathname : IOUtils.tryGetCanonicalPathElseGetAbsolutePath(new File(pathname))); } diff --git a/geode-core/src/main/java/com/gemstone/gemfire/management/internal/cli/CommandManager.java b/geode-core/src/main/java/com/gemstone/gemfire/management/internal/cli/CommandManager.java index 7f6970f29dba..42539db86032 100644 --- a/geode-core/src/main/java/com/gemstone/gemfire/management/internal/cli/CommandManager.java +++ b/geode-core/src/main/java/com/gemstone/gemfire/management/internal/cli/CommandManager.java @@ -58,8 +58,6 @@ /** * - * @author Abhishek Chaudhari - * @author Nikhil Jadhav * @since 7.0 */ public class CommandManager { diff --git a/geode-core/src/main/java/com/gemstone/gemfire/management/internal/cli/CommandRequest.java b/geode-core/src/main/java/com/gemstone/gemfire/management/internal/cli/CommandRequest.java index 5be21b38d158..e1a4f2cb97e6 100644 --- a/geode-core/src/main/java/com/gemstone/gemfire/management/internal/cli/CommandRequest.java +++ b/geode-core/src/main/java/com/gemstone/gemfire/management/internal/cli/CommandRequest.java @@ -25,7 +25,6 @@ /** * The CommandRequest class encapsulates information pertaining to the command the user entered in Gfsh. *

    - * @author John Blum * @see com.gemstone.gemfire.management.internal.cli.GfshParseResult * @since 8.0 */ diff --git a/geode-core/src/main/java/com/gemstone/gemfire/management/internal/cli/CommandResponse.java b/geode-core/src/main/java/com/gemstone/gemfire/management/internal/cli/CommandResponse.java index cab5a0c4763e..27aba1fc0371 100644 --- a/geode-core/src/main/java/com/gemstone/gemfire/management/internal/cli/CommandResponse.java +++ b/geode-core/src/main/java/com/gemstone/gemfire/management/internal/cli/CommandResponse.java @@ -23,7 +23,6 @@ /** * - * @author Abhishek Chaudhari * @since 7.0 */ public class CommandResponse { diff --git a/geode-core/src/main/java/com/gemstone/gemfire/management/internal/cli/CommandResponseBuilder.java b/geode-core/src/main/java/com/gemstone/gemfire/management/internal/cli/CommandResponseBuilder.java index 30d0db813792..c54895d6ea05 100644 --- a/geode-core/src/main/java/com/gemstone/gemfire/management/internal/cli/CommandResponseBuilder.java +++ b/geode-core/src/main/java/com/gemstone/gemfire/management/internal/cli/CommandResponseBuilder.java @@ -23,7 +23,6 @@ /** * - * @author Abhishek Chaudhari * @since 7.0 */ public class CommandResponseBuilder { diff --git a/geode-core/src/main/java/com/gemstone/gemfire/management/internal/cli/CommandResponseWriter.java b/geode-core/src/main/java/com/gemstone/gemfire/management/internal/cli/CommandResponseWriter.java index 89f0f017e15a..405800949555 100644 --- a/geode-core/src/main/java/com/gemstone/gemfire/management/internal/cli/CommandResponseWriter.java +++ b/geode-core/src/main/java/com/gemstone/gemfire/management/internal/cli/CommandResponseWriter.java @@ -28,7 +28,6 @@ * {@link com.gemstone.gemfire.management.internal.cli.remote.CommandExecutionContext#WRITER_WRAPPER}. * NOTE: Not thread safe * - * @author Abhishek Chaudhari * * @since 7.0 */ diff --git a/geode-core/src/main/java/com/gemstone/gemfire/management/internal/cli/GfshParseResult.java b/geode-core/src/main/java/com/gemstone/gemfire/management/internal/cli/GfshParseResult.java index 80c218dd1d7d..87a60503a2bf 100755 --- a/geode-core/src/main/java/com/gemstone/gemfire/management/internal/cli/GfshParseResult.java +++ b/geode-core/src/main/java/com/gemstone/gemfire/management/internal/cli/GfshParseResult.java @@ -39,7 +39,6 @@ * {@link GfshExecutionStrategy} will detect whether the command is a remote * command and send it to ManagementMBean via {@link OperationInvoker}. * - * @author Abhishek Chaudhari * * @since 7.0 */ diff --git a/geode-core/src/main/java/com/gemstone/gemfire/management/internal/cli/GfshParser.java b/geode-core/src/main/java/com/gemstone/gemfire/management/internal/cli/GfshParser.java index e28ded03a8a2..ce23263732de 100755 --- a/geode-core/src/main/java/com/gemstone/gemfire/management/internal/cli/GfshParser.java +++ b/geode-core/src/main/java/com/gemstone/gemfire/management/internal/cli/GfshParser.java @@ -67,8 +67,6 @@ * Implementation of the {@link Parser} interface for GemFire SHell (gfsh) * requirements. * - * @author Nikhil Jadhav - * @author Abhishek Chaudhari * @since 7.0 */ public class GfshParser implements Parser { diff --git a/geode-core/src/main/java/com/gemstone/gemfire/management/internal/cli/Launcher.java b/geode-core/src/main/java/com/gemstone/gemfire/management/internal/cli/Launcher.java index 12e2c5025803..fe806f67957f 100755 --- a/geode-core/src/main/java/com/gemstone/gemfire/management/internal/cli/Launcher.java +++ b/geode-core/src/main/java/com/gemstone/gemfire/management/internal/cli/Launcher.java @@ -63,8 +63,6 @@ * * * - * @author Abhishek Chaudhari - * @author David Hoots * @since 7.0 */ public final class Launcher { diff --git a/geode-core/src/main/java/com/gemstone/gemfire/management/internal/cli/LogWrapper.java b/geode-core/src/main/java/com/gemstone/gemfire/management/internal/cli/LogWrapper.java index 5be0aac1cc34..81aa6753db0a 100644 --- a/geode-core/src/main/java/com/gemstone/gemfire/management/internal/cli/LogWrapper.java +++ b/geode-core/src/main/java/com/gemstone/gemfire/management/internal/cli/LogWrapper.java @@ -41,8 +41,6 @@ * 2. on a Manager "if" log is required to be sent back to gfsh too. For * logging only on manager use, cache.getLogger() * - * @author Abhishek Chaudhari - * @author John Blum * @since 7.0 */ public class LogWrapper { @@ -301,7 +299,6 @@ public void finest(String message, Throwable t) { /** * - * @author Abhishek Chaudhari * @since 7.0 */ // Formatter code "copied" from LogWriterImpl @@ -414,7 +411,6 @@ private String formatDate(Date date) { /** * Handler to write to CommandResponseWriter * - * @author Abhishek Chaudhari * @since 7.0 */ static class CommandResponseWriterHandler extends Handler { diff --git a/geode-core/src/main/java/com/gemstone/gemfire/management/internal/cli/MultipleValueConverter.java b/geode-core/src/main/java/com/gemstone/gemfire/management/internal/cli/MultipleValueConverter.java index e0f57357466d..4b04e3e5f575 100644 --- a/geode-core/src/main/java/com/gemstone/gemfire/management/internal/cli/MultipleValueConverter.java +++ b/geode-core/src/main/java/com/gemstone/gemfire/management/internal/cli/MultipleValueConverter.java @@ -25,7 +25,6 @@ /** * Extends {@link Converter} to add multiple value support * - * @author Nikhil Jadhav * * @param */ diff --git a/geode-core/src/main/java/com/gemstone/gemfire/management/internal/cli/annotation/CliArgument.java b/geode-core/src/main/java/com/gemstone/gemfire/management/internal/cli/annotation/CliArgument.java index 7afe76d2a7a5..8c2ae3c2e79c 100644 --- a/geode-core/src/main/java/com/gemstone/gemfire/management/internal/cli/annotation/CliArgument.java +++ b/geode-core/src/main/java/com/gemstone/gemfire/management/internal/cli/annotation/CliArgument.java @@ -27,7 +27,6 @@ /** * Annotation for Argument of a Command * - * @author Nikhil Jadhav * @since 7.0 */ @Retention(RetentionPolicy.RUNTIME) diff --git a/geode-core/src/main/java/com/gemstone/gemfire/management/internal/cli/commands/AbstractCommandsSupport.java b/geode-core/src/main/java/com/gemstone/gemfire/management/internal/cli/commands/AbstractCommandsSupport.java index 4618d60ba7bf..c99816d5dd07 100644 --- a/geode-core/src/main/java/com/gemstone/gemfire/management/internal/cli/commands/AbstractCommandsSupport.java +++ b/geode-core/src/main/java/com/gemstone/gemfire/management/internal/cli/commands/AbstractCommandsSupport.java @@ -40,7 +40,6 @@ * The AbstractCommandsSupport class is an abstract base class encapsulating common functionality for implementing * command classes with command for the GemFire shell (gfsh). *

    - * @author John Blum * @see com.gemstone.gemfire.cache.Cache * @see com.gemstone.gemfire.cache.execute.FunctionService * @see com.gemstone.gemfire.distributed.DistributedMember diff --git a/geode-core/src/main/java/com/gemstone/gemfire/management/internal/cli/commands/ClientCommands.java b/geode-core/src/main/java/com/gemstone/gemfire/management/internal/cli/commands/ClientCommands.java index e02202a17ff5..a330added4e6 100644 --- a/geode-core/src/main/java/com/gemstone/gemfire/management/internal/cli/commands/ClientCommands.java +++ b/geode-core/src/main/java/com/gemstone/gemfire/management/internal/cli/commands/ClientCommands.java @@ -55,7 +55,6 @@ /** * - * @author ajayp * @since 8.0 */ diff --git a/geode-core/src/main/java/com/gemstone/gemfire/management/internal/cli/commands/ConfigCommands.java b/geode-core/src/main/java/com/gemstone/gemfire/management/internal/cli/commands/ConfigCommands.java index aa4be819dbad..a53790cf5cbb 100644 --- a/geode-core/src/main/java/com/gemstone/gemfire/management/internal/cli/commands/ConfigCommands.java +++ b/geode-core/src/main/java/com/gemstone/gemfire/management/internal/cli/commands/ConfigCommands.java @@ -64,7 +64,6 @@ import com.gemstone.gemfire.management.internal.configuration.domain.XmlEntity; /**** * - * @author David Hoots * Sourabh Bansod * @since 7.0 * diff --git a/geode-core/src/main/java/com/gemstone/gemfire/management/internal/cli/commands/CreateAlterDestroyRegionCommands.java b/geode-core/src/main/java/com/gemstone/gemfire/management/internal/cli/commands/CreateAlterDestroyRegionCommands.java index bf1fdf0f60d2..ce656b910ff5 100644 --- a/geode-core/src/main/java/com/gemstone/gemfire/management/internal/cli/commands/CreateAlterDestroyRegionCommands.java +++ b/geode-core/src/main/java/com/gemstone/gemfire/management/internal/cli/commands/CreateAlterDestroyRegionCommands.java @@ -86,7 +86,6 @@ /** * - * @author Abhishek Chaudhari * @since 7.0 */ public class CreateAlterDestroyRegionCommands extends AbstractCommandsSupport { diff --git a/geode-core/src/main/java/com/gemstone/gemfire/management/internal/cli/commands/DataCommands.java b/geode-core/src/main/java/com/gemstone/gemfire/management/internal/cli/commands/DataCommands.java index 78f8bd05fcc1..94d5810fb7f6 100644 --- a/geode-core/src/main/java/com/gemstone/gemfire/management/internal/cli/commands/DataCommands.java +++ b/geode-core/src/main/java/com/gemstone/gemfire/management/internal/cli/commands/DataCommands.java @@ -83,8 +83,6 @@ /** * - * @author ajayp - * @author tushark * @since 7.0 */ public class DataCommands implements CommandMarker { diff --git a/geode-core/src/main/java/com/gemstone/gemfire/management/internal/cli/commands/DeployCommands.java b/geode-core/src/main/java/com/gemstone/gemfire/management/internal/cli/commands/DeployCommands.java index da9ac8cc0518..51663df4573b 100644 --- a/geode-core/src/main/java/com/gemstone/gemfire/management/internal/cli/commands/DeployCommands.java +++ b/geode-core/src/main/java/com/gemstone/gemfire/management/internal/cli/commands/DeployCommands.java @@ -52,7 +52,6 @@ /** * Commands for deploying, un-deploying and listing files deployed using the command line shell. *

    - * @author David Hoots * @see com.gemstone.gemfire.management.internal.cli.commands.AbstractCommandsSupport * @since 7.0 */ diff --git a/geode-core/src/main/java/com/gemstone/gemfire/management/internal/cli/commands/DiskStoreCommands.java b/geode-core/src/main/java/com/gemstone/gemfire/management/internal/cli/commands/DiskStoreCommands.java index f724921aa0c7..19fea2df1ddc 100644 --- a/geode-core/src/main/java/com/gemstone/gemfire/management/internal/cli/commands/DiskStoreCommands.java +++ b/geode-core/src/main/java/com/gemstone/gemfire/management/internal/cli/commands/DiskStoreCommands.java @@ -98,11 +98,6 @@ /** * The DiskStoreCommands class encapsulates all GemFire Disk Store commands in Gfsh. *

    - * @author Nikhil Jadhav - * @author John Blum - * @author Abhishek Chaudhari - * @author Sourabh Bansod - * @author David Hoots * @see com.gemstone.gemfire.management.internal.cli.commands.AbstractCommandsSupport * @since 7.0 */ diff --git a/geode-core/src/main/java/com/gemstone/gemfire/management/internal/cli/commands/DurableClientCommands.java b/geode-core/src/main/java/com/gemstone/gemfire/management/internal/cli/commands/DurableClientCommands.java index b844e854f06a..9e078298c47e 100644 --- a/geode-core/src/main/java/com/gemstone/gemfire/management/internal/cli/commands/DurableClientCommands.java +++ b/geode-core/src/main/java/com/gemstone/gemfire/management/internal/cli/commands/DurableClientCommands.java @@ -61,8 +61,6 @@ * The DurableClientCommands class encapsulates all GemFire shell (Gfsh) commands related to * durable clients and cqs defined in GemFire. *

    - * @author jhuynh - * @author bansods */ @SuppressWarnings("unused") public class DurableClientCommands extends AbstractCommandsSupport { diff --git a/geode-core/src/main/java/com/gemstone/gemfire/management/internal/cli/commands/ExportImportSharedConfigurationCommands.java b/geode-core/src/main/java/com/gemstone/gemfire/management/internal/cli/commands/ExportImportSharedConfigurationCommands.java index 2e8447a6c069..88308a6743df 100644 --- a/geode-core/src/main/java/com/gemstone/gemfire/management/internal/cli/commands/ExportImportSharedConfigurationCommands.java +++ b/geode-core/src/main/java/com/gemstone/gemfire/management/internal/cli/commands/ExportImportSharedConfigurationCommands.java @@ -50,7 +50,6 @@ /**** * Commands for the shared configuration - * @author bansods * */ @SuppressWarnings("unused") diff --git a/geode-core/src/main/java/com/gemstone/gemfire/management/internal/cli/commands/FunctionCommands.java b/geode-core/src/main/java/com/gemstone/gemfire/management/internal/cli/commands/FunctionCommands.java index 7930e1eddf84..9ea5a4c11150 100644 --- a/geode-core/src/main/java/com/gemstone/gemfire/management/internal/cli/commands/FunctionCommands.java +++ b/geode-core/src/main/java/com/gemstone/gemfire/management/internal/cli/commands/FunctionCommands.java @@ -65,7 +65,6 @@ import com.gemstone.gemfire.management.internal.cli.shell.Gfsh; /** - * @author David Hoots * * @since 7.0 */ diff --git a/geode-core/src/main/java/com/gemstone/gemfire/management/internal/cli/commands/GfshHelpCommands.java b/geode-core/src/main/java/com/gemstone/gemfire/management/internal/cli/commands/GfshHelpCommands.java index 24fd1175fa29..9fcc1325462e 100644 --- a/geode-core/src/main/java/com/gemstone/gemfire/management/internal/cli/commands/GfshHelpCommands.java +++ b/geode-core/src/main/java/com/gemstone/gemfire/management/internal/cli/commands/GfshHelpCommands.java @@ -38,8 +38,6 @@ /** * - * @author Nikhil Jadhav - * @author Abhishek Chaudhari * * @since 7.0 */ diff --git a/geode-core/src/main/java/com/gemstone/gemfire/management/internal/cli/commands/IndexCommands.java b/geode-core/src/main/java/com/gemstone/gemfire/management/internal/cli/commands/IndexCommands.java index df09580907eb..b3c67bffc376 100644 --- a/geode-core/src/main/java/com/gemstone/gemfire/management/internal/cli/commands/IndexCommands.java +++ b/geode-core/src/main/java/com/gemstone/gemfire/management/internal/cli/commands/IndexCommands.java @@ -65,7 +65,6 @@ /** * The IndexCommands class encapsulates all GemFire shell (Gfsh) commands related to indexes defined in GemFire. *

    - * @author John Blum * @see com.gemstone.gemfire.management.internal.cli.commands.AbstractCommandsSupport * @see com.gemstone.gemfire.management.internal.cli.domain.IndexDetails * @see com.gemstone.gemfire.management.internal.cli.functions.ListIndexFunction diff --git a/geode-core/src/main/java/com/gemstone/gemfire/management/internal/cli/commands/MemberCommands.java b/geode-core/src/main/java/com/gemstone/gemfire/management/internal/cli/commands/MemberCommands.java index 78880e1353b3..2c73581fa03c 100644 --- a/geode-core/src/main/java/com/gemstone/gemfire/management/internal/cli/commands/MemberCommands.java +++ b/geode-core/src/main/java/com/gemstone/gemfire/management/internal/cli/commands/MemberCommands.java @@ -50,7 +50,6 @@ /*** * - * @author Sourabh Bansod * * @since 7.0 */ diff --git a/geode-core/src/main/java/com/gemstone/gemfire/management/internal/cli/commands/MiscellaneousCommands.java b/geode-core/src/main/java/com/gemstone/gemfire/management/internal/cli/commands/MiscellaneousCommands.java index dc9f5deaf939..b3a183bf2df9 100644 --- a/geode-core/src/main/java/com/gemstone/gemfire/management/internal/cli/commands/MiscellaneousCommands.java +++ b/geode-core/src/main/java/com/gemstone/gemfire/management/internal/cli/commands/MiscellaneousCommands.java @@ -124,9 +124,6 @@ /** * - * @author Sourabh Bansod - * @author Abhishek Chaudhari - * @author Ajay Pande * @since 7.0 */ public class MiscellaneousCommands implements CommandMarker { diff --git a/geode-core/src/main/java/com/gemstone/gemfire/management/internal/cli/commands/QueueCommands.java b/geode-core/src/main/java/com/gemstone/gemfire/management/internal/cli/commands/QueueCommands.java index f594c39b19f7..3e67f658458b 100644 --- a/geode-core/src/main/java/com/gemstone/gemfire/management/internal/cli/commands/QueueCommands.java +++ b/geode-core/src/main/java/com/gemstone/gemfire/management/internal/cli/commands/QueueCommands.java @@ -49,7 +49,6 @@ /** * The QueueCommands class encapsulates all GemFire Queue commands in Gfsh. *

    - * @author David Hoots * * @since 8.0 */ diff --git a/geode-core/src/main/java/com/gemstone/gemfire/management/internal/cli/commands/RegionCommands.java b/geode-core/src/main/java/com/gemstone/gemfire/management/internal/cli/commands/RegionCommands.java index 1c972a58e4e5..4e8956477f06 100644 --- a/geode-core/src/main/java/com/gemstone/gemfire/management/internal/cli/commands/RegionCommands.java +++ b/geode-core/src/main/java/com/gemstone/gemfire/management/internal/cli/commands/RegionCommands.java @@ -62,7 +62,6 @@ *
  • describe region * * - * @author Sourabh Bansod * @since 7.0 */ public class RegionCommands implements CommandMarker { diff --git a/geode-core/src/main/java/com/gemstone/gemfire/management/internal/cli/commands/ShellCommands.java b/geode-core/src/main/java/com/gemstone/gemfire/management/internal/cli/commands/ShellCommands.java index 1bd769246f09..daffa80ab06c 100644 --- a/geode-core/src/main/java/com/gemstone/gemfire/management/internal/cli/commands/ShellCommands.java +++ b/geode-core/src/main/java/com/gemstone/gemfire/management/internal/cli/commands/ShellCommands.java @@ -88,7 +88,6 @@ import com.gemstone.gemfire.management.internal.web.shell.RestHttpOperationInvoker; /** - * @author Abhishek Chaudhari * * @since 7.0 */ diff --git a/geode-core/src/main/java/com/gemstone/gemfire/management/internal/cli/commands/StatusCommands.java b/geode-core/src/main/java/com/gemstone/gemfire/management/internal/cli/commands/StatusCommands.java index a6557b16aeeb..3f4e8215f665 100644 --- a/geode-core/src/main/java/com/gemstone/gemfire/management/internal/cli/commands/StatusCommands.java +++ b/geode-core/src/main/java/com/gemstone/gemfire/management/internal/cli/commands/StatusCommands.java @@ -40,7 +40,6 @@ /******** * - * @author bansods * */ diff --git a/geode-core/src/main/java/com/gemstone/gemfire/management/internal/cli/converters/BooleanConverter.java b/geode-core/src/main/java/com/gemstone/gemfire/management/internal/cli/converters/BooleanConverter.java index 2be51731befd..aab023355ac6 100644 --- a/geode-core/src/main/java/com/gemstone/gemfire/management/internal/cli/converters/BooleanConverter.java +++ b/geode-core/src/main/java/com/gemstone/gemfire/management/internal/cli/converters/BooleanConverter.java @@ -27,7 +27,6 @@ * SHL's BooleanConverter. Removed completion & conversion for values like 0, 1, * yes, no. * - * @author Abhishek Chaudhari * @since 7.0 */ public class BooleanConverter implements Converter { diff --git a/geode-core/src/main/java/com/gemstone/gemfire/management/internal/cli/converters/ClusterMemberIdNameConverter.java b/geode-core/src/main/java/com/gemstone/gemfire/management/internal/cli/converters/ClusterMemberIdNameConverter.java index 2321630fbf02..d0062d1df326 100644 --- a/geode-core/src/main/java/com/gemstone/gemfire/management/internal/cli/converters/ClusterMemberIdNameConverter.java +++ b/geode-core/src/main/java/com/gemstone/gemfire/management/internal/cli/converters/ClusterMemberIdNameConverter.java @@ -30,7 +30,6 @@ /** * - * @author Abhishek Chaudhari * * @since 8.0 */ diff --git a/geode-core/src/main/java/com/gemstone/gemfire/management/internal/cli/converters/ConnectionEndpointConverter.java b/geode-core/src/main/java/com/gemstone/gemfire/management/internal/cli/converters/ConnectionEndpointConverter.java index 90315812a80d..463ba72afbbe 100644 --- a/geode-core/src/main/java/com/gemstone/gemfire/management/internal/cli/converters/ConnectionEndpointConverter.java +++ b/geode-core/src/main/java/com/gemstone/gemfire/management/internal/cli/converters/ConnectionEndpointConverter.java @@ -28,7 +28,6 @@ import com.gemstone.gemfire.management.internal.cli.util.ConnectionEndpoint; /** - * @author abhishek * */ public class ConnectionEndpointConverter implements Converter { diff --git a/geode-core/src/main/java/com/gemstone/gemfire/management/internal/cli/converters/DirConverter.java b/geode-core/src/main/java/com/gemstone/gemfire/management/internal/cli/converters/DirConverter.java index 17a613008b45..6e538d767922 100644 --- a/geode-core/src/main/java/com/gemstone/gemfire/management/internal/cli/converters/DirConverter.java +++ b/geode-core/src/main/java/com/gemstone/gemfire/management/internal/cli/converters/DirConverter.java @@ -29,7 +29,6 @@ import com.gemstone.gemfire.management.internal.cli.shell.Gfsh; /** - * @author Nikhil Jadhav * * @since 7.0 * diff --git a/geode-core/src/main/java/com/gemstone/gemfire/management/internal/cli/converters/DirPathConverter.java b/geode-core/src/main/java/com/gemstone/gemfire/management/internal/cli/converters/DirPathConverter.java index dd8edcb02510..5d5dfb3e960f 100644 --- a/geode-core/src/main/java/com/gemstone/gemfire/management/internal/cli/converters/DirPathConverter.java +++ b/geode-core/src/main/java/com/gemstone/gemfire/management/internal/cli/converters/DirPathConverter.java @@ -29,7 +29,6 @@ /** * - * @author Abhishek Chaudhari * @since 7.0 */ public class DirPathConverter implements Converter { diff --git a/geode-core/src/main/java/com/gemstone/gemfire/management/internal/cli/converters/DiskStoreNameConverter.java b/geode-core/src/main/java/com/gemstone/gemfire/management/internal/cli/converters/DiskStoreNameConverter.java index 101a4512a2a1..66d254b102cb 100644 --- a/geode-core/src/main/java/com/gemstone/gemfire/management/internal/cli/converters/DiskStoreNameConverter.java +++ b/geode-core/src/main/java/com/gemstone/gemfire/management/internal/cli/converters/DiskStoreNameConverter.java @@ -33,7 +33,6 @@ /** * - * @author Abhishek Chaudhari * * @since 7.0 */ diff --git a/geode-core/src/main/java/com/gemstone/gemfire/management/internal/cli/converters/EnumConverter.java b/geode-core/src/main/java/com/gemstone/gemfire/management/internal/cli/converters/EnumConverter.java index 0e8f30d684e7..8e30e82dee5f 100644 --- a/geode-core/src/main/java/com/gemstone/gemfire/management/internal/cli/converters/EnumConverter.java +++ b/geode-core/src/main/java/com/gemstone/gemfire/management/internal/cli/converters/EnumConverter.java @@ -25,7 +25,6 @@ /** * {@link Converter} for {@link Enum}. * - * @author Abhishek Chaudhari * @since 7.0 */ /* diff --git a/geode-core/src/main/java/com/gemstone/gemfire/management/internal/cli/converters/FilePathConverter.java b/geode-core/src/main/java/com/gemstone/gemfire/management/internal/cli/converters/FilePathConverter.java index 3d9a5c51ec10..09289dc6f018 100644 --- a/geode-core/src/main/java/com/gemstone/gemfire/management/internal/cli/converters/FilePathConverter.java +++ b/geode-core/src/main/java/com/gemstone/gemfire/management/internal/cli/converters/FilePathConverter.java @@ -29,7 +29,6 @@ /** * - * @author Abhishek Chaudhari * @since 7.0 */ public class FilePathConverter implements Converter { diff --git a/geode-core/src/main/java/com/gemstone/gemfire/management/internal/cli/converters/FilePathStringConverter.java b/geode-core/src/main/java/com/gemstone/gemfire/management/internal/cli/converters/FilePathStringConverter.java index 35b588ccb7f8..3e2875b084d9 100644 --- a/geode-core/src/main/java/com/gemstone/gemfire/management/internal/cli/converters/FilePathStringConverter.java +++ b/geode-core/src/main/java/com/gemstone/gemfire/management/internal/cli/converters/FilePathStringConverter.java @@ -29,7 +29,6 @@ /** * - * @author Abhishek Chaudhari * @since 7.0 */ public class FilePathStringConverter implements Converter { diff --git a/geode-core/src/main/java/com/gemstone/gemfire/management/internal/cli/converters/GatewaySenderIdConverter.java b/geode-core/src/main/java/com/gemstone/gemfire/management/internal/cli/converters/GatewaySenderIdConverter.java index 2fbdad6604c0..147520d89ba7 100644 --- a/geode-core/src/main/java/com/gemstone/gemfire/management/internal/cli/converters/GatewaySenderIdConverter.java +++ b/geode-core/src/main/java/com/gemstone/gemfire/management/internal/cli/converters/GatewaySenderIdConverter.java @@ -32,7 +32,6 @@ /** * - * @author Sourabh Bansod * @since 7.0 */ public class GatewaySenderIdConverter implements Converter { diff --git a/geode-core/src/main/java/com/gemstone/gemfire/management/internal/cli/converters/HelpConverter.java b/geode-core/src/main/java/com/gemstone/gemfire/management/internal/cli/converters/HelpConverter.java index a40dd4c4b9b8..5cd0bb66e3c0 100644 --- a/geode-core/src/main/java/com/gemstone/gemfire/management/internal/cli/converters/HelpConverter.java +++ b/geode-core/src/main/java/com/gemstone/gemfire/management/internal/cli/converters/HelpConverter.java @@ -29,7 +29,6 @@ /** * {@link Converter} for {@link GfshHelpCommands#obtainHelp(String)} * - * @author Nikhil Jadhav * * @since 7.0 */ diff --git a/geode-core/src/main/java/com/gemstone/gemfire/management/internal/cli/converters/HintTopicConverter.java b/geode-core/src/main/java/com/gemstone/gemfire/management/internal/cli/converters/HintTopicConverter.java index bbeea808382d..faccd439fed6 100644 --- a/geode-core/src/main/java/com/gemstone/gemfire/management/internal/cli/converters/HintTopicConverter.java +++ b/geode-core/src/main/java/com/gemstone/gemfire/management/internal/cli/converters/HintTopicConverter.java @@ -28,7 +28,6 @@ /** * - * @author Abhishek Chaudhari * @since 7.0 */ public class HintTopicConverter implements Converter { diff --git a/geode-core/src/main/java/com/gemstone/gemfire/management/internal/cli/converters/IndexTypeConverter.java b/geode-core/src/main/java/com/gemstone/gemfire/management/internal/cli/converters/IndexTypeConverter.java index edea3ba47ec1..63d107728fdc 100644 --- a/geode-core/src/main/java/com/gemstone/gemfire/management/internal/cli/converters/IndexTypeConverter.java +++ b/geode-core/src/main/java/com/gemstone/gemfire/management/internal/cli/converters/IndexTypeConverter.java @@ -26,7 +26,6 @@ /*** * Added converter to enable auto-completion for index-type - * @author Sourabh Bansod * */ public class IndexTypeConverter implements Converter{ diff --git a/geode-core/src/main/java/com/gemstone/gemfire/management/internal/cli/converters/LocatorDiscoveryConfigConverter.java b/geode-core/src/main/java/com/gemstone/gemfire/management/internal/cli/converters/LocatorDiscoveryConfigConverter.java index d492fe5d1082..8f7cf8de9820 100644 --- a/geode-core/src/main/java/com/gemstone/gemfire/management/internal/cli/converters/LocatorDiscoveryConfigConverter.java +++ b/geode-core/src/main/java/com/gemstone/gemfire/management/internal/cli/converters/LocatorDiscoveryConfigConverter.java @@ -30,7 +30,6 @@ /** * - * @author Abhishek Chaudhari * * @since 8.0 */ diff --git a/geode-core/src/main/java/com/gemstone/gemfire/management/internal/cli/converters/LocatorIdNameConverter.java b/geode-core/src/main/java/com/gemstone/gemfire/management/internal/cli/converters/LocatorIdNameConverter.java index 5e580d12d99a..873061b617dc 100644 --- a/geode-core/src/main/java/com/gemstone/gemfire/management/internal/cli/converters/LocatorIdNameConverter.java +++ b/geode-core/src/main/java/com/gemstone/gemfire/management/internal/cli/converters/LocatorIdNameConverter.java @@ -30,7 +30,6 @@ /** * - * @author Abhishek Chaudhari * * @since 8.0 */ diff --git a/geode-core/src/main/java/com/gemstone/gemfire/management/internal/cli/converters/LogLevelConverter.java b/geode-core/src/main/java/com/gemstone/gemfire/management/internal/cli/converters/LogLevelConverter.java index 45369182dbb4..c00c2666ab53 100644 --- a/geode-core/src/main/java/com/gemstone/gemfire/management/internal/cli/converters/LogLevelConverter.java +++ b/geode-core/src/main/java/com/gemstone/gemfire/management/internal/cli/converters/LogLevelConverter.java @@ -29,7 +29,6 @@ /** * - * @author Sourabh Bansod * @since 7.0 */ public class LogLevelConverter implements Converter { diff --git a/geode-core/src/main/java/com/gemstone/gemfire/management/internal/cli/converters/MemberGroupConverter.java b/geode-core/src/main/java/com/gemstone/gemfire/management/internal/cli/converters/MemberGroupConverter.java index 1ea167b01406..cdab7edb0549 100644 --- a/geode-core/src/main/java/com/gemstone/gemfire/management/internal/cli/converters/MemberGroupConverter.java +++ b/geode-core/src/main/java/com/gemstone/gemfire/management/internal/cli/converters/MemberGroupConverter.java @@ -30,7 +30,6 @@ /** * - * @author Abhishek Chaudhari * @since 7.0 */ public class MemberGroupConverter implements Converter { diff --git a/geode-core/src/main/java/com/gemstone/gemfire/management/internal/cli/converters/MemberIdNameConverter.java b/geode-core/src/main/java/com/gemstone/gemfire/management/internal/cli/converters/MemberIdNameConverter.java index 17c3d582a99a..088c7fb7201b 100644 --- a/geode-core/src/main/java/com/gemstone/gemfire/management/internal/cli/converters/MemberIdNameConverter.java +++ b/geode-core/src/main/java/com/gemstone/gemfire/management/internal/cli/converters/MemberIdNameConverter.java @@ -30,7 +30,6 @@ /** * - * @author Abhishek Chaudhari * * @since 7.0 */ diff --git a/geode-core/src/main/java/com/gemstone/gemfire/management/internal/cli/converters/RegionPathConverter.java b/geode-core/src/main/java/com/gemstone/gemfire/management/internal/cli/converters/RegionPathConverter.java index 4ea6a844cf87..27893bcac3fa 100644 --- a/geode-core/src/main/java/com/gemstone/gemfire/management/internal/cli/converters/RegionPathConverter.java +++ b/geode-core/src/main/java/com/gemstone/gemfire/management/internal/cli/converters/RegionPathConverter.java @@ -30,7 +30,6 @@ /** * - * @author Abhishek Chaudhari * @since 7.0 */ public class RegionPathConverter implements Converter { diff --git a/geode-core/src/main/java/com/gemstone/gemfire/management/internal/cli/converters/StringArrayConverter.java b/geode-core/src/main/java/com/gemstone/gemfire/management/internal/cli/converters/StringArrayConverter.java index ac6e7d37f243..8e1e5a49c1fe 100644 --- a/geode-core/src/main/java/com/gemstone/gemfire/management/internal/cli/converters/StringArrayConverter.java +++ b/geode-core/src/main/java/com/gemstone/gemfire/management/internal/cli/converters/StringArrayConverter.java @@ -25,7 +25,6 @@ import com.gemstone.gemfire.management.internal.cli.MultipleValueAdapter; /** - * @author Nikhil Jadhav * * @since 7.0 * diff --git a/geode-core/src/main/java/com/gemstone/gemfire/management/internal/cli/converters/StringListConverter.java b/geode-core/src/main/java/com/gemstone/gemfire/management/internal/cli/converters/StringListConverter.java index 216cf24cf20d..15df1b8a7abc 100644 --- a/geode-core/src/main/java/com/gemstone/gemfire/management/internal/cli/converters/StringListConverter.java +++ b/geode-core/src/main/java/com/gemstone/gemfire/management/internal/cli/converters/StringListConverter.java @@ -28,7 +28,6 @@ /** * - * @author Abhishek Chaudhari * * @since 7.0 */ diff --git a/geode-core/src/main/java/com/gemstone/gemfire/management/internal/cli/domain/AsyncEventQueueDetails.java b/geode-core/src/main/java/com/gemstone/gemfire/management/internal/cli/domain/AsyncEventQueueDetails.java index 9157ffc89f02..1e387683ca41 100644 --- a/geode-core/src/main/java/com/gemstone/gemfire/management/internal/cli/domain/AsyncEventQueueDetails.java +++ b/geode-core/src/main/java/com/gemstone/gemfire/management/internal/cli/domain/AsyncEventQueueDetails.java @@ -20,7 +20,6 @@ * Used to transfer information about an AsyncEventQueue from a function * being executed on a server back to the manager that invoked the function. * - * @author David Hoots * @since 8.0 */ import java.io.Serializable; diff --git a/geode-core/src/main/java/com/gemstone/gemfire/management/internal/cli/domain/ConnectToLocatorResult.java b/geode-core/src/main/java/com/gemstone/gemfire/management/internal/cli/domain/ConnectToLocatorResult.java index 4b59e9295852..cd327851622a 100644 --- a/geode-core/src/main/java/com/gemstone/gemfire/management/internal/cli/domain/ConnectToLocatorResult.java +++ b/geode-core/src/main/java/com/gemstone/gemfire/management/internal/cli/domain/ConnectToLocatorResult.java @@ -20,7 +20,6 @@ /** * - * @author Sourabh Bansod * * @since 7.0 */ diff --git a/geode-core/src/main/java/com/gemstone/gemfire/management/internal/cli/domain/DataCommandRequest.java b/geode-core/src/main/java/com/gemstone/gemfire/management/internal/cli/domain/DataCommandRequest.java index 07197133cf91..92d457915301 100644 --- a/geode-core/src/main/java/com/gemstone/gemfire/management/internal/cli/domain/DataCommandRequest.java +++ b/geode-core/src/main/java/com/gemstone/gemfire/management/internal/cli/domain/DataCommandRequest.java @@ -26,7 +26,6 @@ /** * Domain object used for Data Commands Functions - * @author tushark * * TODO : Implement DataSerializable * diff --git a/geode-core/src/main/java/com/gemstone/gemfire/management/internal/cli/domain/DataCommandResult.java b/geode-core/src/main/java/com/gemstone/gemfire/management/internal/cli/domain/DataCommandResult.java index 6f8a569f26b9..d3638cc517f2 100644 --- a/geode-core/src/main/java/com/gemstone/gemfire/management/internal/cli/domain/DataCommandResult.java +++ b/geode-core/src/main/java/com/gemstone/gemfire/management/internal/cli/domain/DataCommandResult.java @@ -45,7 +45,6 @@ /** * Domain object used for Data Commands Functions - * @author tushark * * TODO : Implement DataSerializable * diff --git a/geode-core/src/main/java/com/gemstone/gemfire/management/internal/cli/domain/DiskStoreDetails.java b/geode-core/src/main/java/com/gemstone/gemfire/management/internal/cli/domain/DiskStoreDetails.java index c75cc18c09e3..f23622dd4b06 100644 --- a/geode-core/src/main/java/com/gemstone/gemfire/management/internal/cli/domain/DiskStoreDetails.java +++ b/geode-core/src/main/java/com/gemstone/gemfire/management/internal/cli/domain/DiskStoreDetails.java @@ -34,7 +34,6 @@ * The DiskStoreDetails class captures information about a particular disk store for a GemFire distributed system * member. Each disk store for a member should be captured in separate instance of this class. *

    - * @author John Blum * @see com.gemstone.gemfire.cache.DiskStore * @see com.gemstone.gemfire.cache.DiskStoreFactory * @see com.gemstone.gemfire.lang.Identifiable diff --git a/geode-core/src/main/java/com/gemstone/gemfire/management/internal/cli/domain/IndexDetails.java b/geode-core/src/main/java/com/gemstone/gemfire/management/internal/cli/domain/IndexDetails.java index d44d1a6366b1..7b80ba32000b 100644 --- a/geode-core/src/main/java/com/gemstone/gemfire/management/internal/cli/domain/IndexDetails.java +++ b/geode-core/src/main/java/com/gemstone/gemfire/management/internal/cli/domain/IndexDetails.java @@ -28,7 +28,6 @@ /** * The IndexDetails class encapsulates information for an Index on a Region in the GemFire Cache. *

    - * @author John Blum * @see com.gemstone.gemfire.cache.query.Index * @see com.gemstone.gemfire.cache.query.IndexStatistics * @see com.gemstone.gemfire.cache.query.IndexType diff --git a/geode-core/src/main/java/com/gemstone/gemfire/management/internal/cli/domain/IndexInfo.java b/geode-core/src/main/java/com/gemstone/gemfire/management/internal/cli/domain/IndexInfo.java index 6a1832a9f01b..e3070beb80ce 100644 --- a/geode-core/src/main/java/com/gemstone/gemfire/management/internal/cli/domain/IndexInfo.java +++ b/geode-core/src/main/java/com/gemstone/gemfire/management/internal/cli/domain/IndexInfo.java @@ -21,7 +21,6 @@ /*** * Data class used to pass index related information to * functions that create or destroy indexes - * @author bansods * */ public class IndexInfo implements Serializable { diff --git a/geode-core/src/main/java/com/gemstone/gemfire/management/internal/cli/domain/MemberInformation.java b/geode-core/src/main/java/com/gemstone/gemfire/management/internal/cli/domain/MemberInformation.java index de367fe53dd0..3880c3e3fa2c 100644 --- a/geode-core/src/main/java/com/gemstone/gemfire/management/internal/cli/domain/MemberInformation.java +++ b/geode-core/src/main/java/com/gemstone/gemfire/management/internal/cli/domain/MemberInformation.java @@ -26,7 +26,6 @@ /*** * Data class to hold the information of the member * Used in describe member command - * @author bansods * */ public class MemberInformation implements Serializable{ diff --git a/geode-core/src/main/java/com/gemstone/gemfire/management/internal/cli/domain/MemberResult.java b/geode-core/src/main/java/com/gemstone/gemfire/management/internal/cli/domain/MemberResult.java index b7d4d828a08f..ce58ddf87930 100644 --- a/geode-core/src/main/java/com/gemstone/gemfire/management/internal/cli/domain/MemberResult.java +++ b/geode-core/src/main/java/com/gemstone/gemfire/management/internal/cli/domain/MemberResult.java @@ -22,7 +22,6 @@ * Data class used to return the result of a function on a member. * Typically to return the status of an action on a member. * Not suitable if you wish to return specific data from member - * @author bansods * */ public class MemberResult implements Serializable { diff --git a/geode-core/src/main/java/com/gemstone/gemfire/management/internal/cli/domain/PartitionAttributesInfo.java b/geode-core/src/main/java/com/gemstone/gemfire/management/internal/cli/domain/PartitionAttributesInfo.java index d65597e9c22f..6f5ed4f75905 100644 --- a/geode-core/src/main/java/com/gemstone/gemfire/management/internal/cli/domain/PartitionAttributesInfo.java +++ b/geode-core/src/main/java/com/gemstone/gemfire/management/internal/cli/domain/PartitionAttributesInfo.java @@ -32,7 +32,6 @@ /*** * Data class containing the PartitionAttributes for a region on a certain member - * @author bansods * */ public class PartitionAttributesInfo implements Serializable { diff --git a/geode-core/src/main/java/com/gemstone/gemfire/management/internal/cli/domain/RegionDescription.java b/geode-core/src/main/java/com/gemstone/gemfire/management/internal/cli/domain/RegionDescription.java index d7b6e11593e2..7cfd6fca4194 100644 --- a/geode-core/src/main/java/com/gemstone/gemfire/management/internal/cli/domain/RegionDescription.java +++ b/geode-core/src/main/java/com/gemstone/gemfire/management/internal/cli/domain/RegionDescription.java @@ -33,7 +33,6 @@ * Data class which contains description of a region and provides the aggregated * view of the region Used by describe region command * - * @author Sourabh Bansod * */ public class RegionDescription implements Serializable { diff --git a/geode-core/src/main/java/com/gemstone/gemfire/management/internal/cli/domain/RegionInformation.java b/geode-core/src/main/java/com/gemstone/gemfire/management/internal/cli/domain/RegionInformation.java index 02d80cd1394c..20f63e1fb225 100644 --- a/geode-core/src/main/java/com/gemstone/gemfire/management/internal/cli/domain/RegionInformation.java +++ b/geode-core/src/main/java/com/gemstone/gemfire/management/internal/cli/domain/RegionInformation.java @@ -26,7 +26,6 @@ /*** * Gives the most basic common information of a region * Used by the GetRegionsFunction for 'list region' command - * @author bansods * since 7.0 */ public class RegionInformation implements Serializable { diff --git a/geode-core/src/main/java/com/gemstone/gemfire/management/internal/cli/domain/SubscriptionQueueSizeResult.java b/geode-core/src/main/java/com/gemstone/gemfire/management/internal/cli/domain/SubscriptionQueueSizeResult.java index 4ccafc7e8be7..7143fa75b1ac 100644 --- a/geode-core/src/main/java/com/gemstone/gemfire/management/internal/cli/domain/SubscriptionQueueSizeResult.java +++ b/geode-core/src/main/java/com/gemstone/gemfire/management/internal/cli/domain/SubscriptionQueueSizeResult.java @@ -18,7 +18,6 @@ /*** *Data class used for sending back subscription-queue-size for a client or a cq - * @author bansods * */ public class SubscriptionQueueSizeResult extends MemberResult { diff --git a/geode-core/src/main/java/com/gemstone/gemfire/management/internal/cli/exceptions/CreateSubregionException.java b/geode-core/src/main/java/com/gemstone/gemfire/management/internal/cli/exceptions/CreateSubregionException.java index e08820df1fe5..3af3af3157d0 100644 --- a/geode-core/src/main/java/com/gemstone/gemfire/management/internal/cli/exceptions/CreateSubregionException.java +++ b/geode-core/src/main/java/com/gemstone/gemfire/management/internal/cli/exceptions/CreateSubregionException.java @@ -19,7 +19,6 @@ /** * Indicates inability to create a Subregion of a region. * - * @author Abhishek Chaudhari * @since 8.0 */ // TODO - Abhishek - Include in GemFire Exception Enhancements diff --git a/geode-core/src/main/java/com/gemstone/gemfire/management/internal/cli/exceptions/ExceptionGenerator.java b/geode-core/src/main/java/com/gemstone/gemfire/management/internal/cli/exceptions/ExceptionGenerator.java index 96c227cab4f1..68247352892e 100644 --- a/geode-core/src/main/java/com/gemstone/gemfire/management/internal/cli/exceptions/ExceptionGenerator.java +++ b/geode-core/src/main/java/com/gemstone/gemfire/management/internal/cli/exceptions/ExceptionGenerator.java @@ -23,7 +23,6 @@ import joptsimple.UnrecognizedOptionException; /** - * @author njadhav * * Converts joptsimple exceptions into corresponding exceptions for cli * diff --git a/geode-core/src/main/java/com/gemstone/gemfire/management/internal/cli/exceptions/ExceptionHandler.java b/geode-core/src/main/java/com/gemstone/gemfire/management/internal/cli/exceptions/ExceptionHandler.java index 01e47a112333..1a3997b29427 100644 --- a/geode-core/src/main/java/com/gemstone/gemfire/management/internal/cli/exceptions/ExceptionHandler.java +++ b/geode-core/src/main/java/com/gemstone/gemfire/management/internal/cli/exceptions/ExceptionHandler.java @@ -21,7 +21,6 @@ import com.gemstone.gemfire.management.internal.cli.parser.SyntaxConstants; import com.gemstone.gemfire.management.internal.cli.util.CLIConsoleBufferUtil; /** - * @author njadhav * * Prints the warning according the CliException * diff --git a/geode-core/src/main/java/com/gemstone/gemfire/management/internal/cli/functions/AlterRuntimeConfigFunction.java b/geode-core/src/main/java/com/gemstone/gemfire/management/internal/cli/functions/AlterRuntimeConfigFunction.java index 2bad89c1e9d8..c031ca0b4cd9 100644 --- a/geode-core/src/main/java/com/gemstone/gemfire/management/internal/cli/functions/AlterRuntimeConfigFunction.java +++ b/geode-core/src/main/java/com/gemstone/gemfire/management/internal/cli/functions/AlterRuntimeConfigFunction.java @@ -34,7 +34,6 @@ /**** * - * @author Sourabh Bansod * */ public class AlterRuntimeConfigFunction extends FunctionAdapter implements diff --git a/geode-core/src/main/java/com/gemstone/gemfire/management/internal/cli/functions/ChangeLogLevelFunction.java b/geode-core/src/main/java/com/gemstone/gemfire/management/internal/cli/functions/ChangeLogLevelFunction.java index b270d0db5c4c..04b9299b5742 100644 --- a/geode-core/src/main/java/com/gemstone/gemfire/management/internal/cli/functions/ChangeLogLevelFunction.java +++ b/geode-core/src/main/java/com/gemstone/gemfire/management/internal/cli/functions/ChangeLogLevelFunction.java @@ -37,7 +37,6 @@ * * Class for change log level function * - * @author apande * since 8.0 * */ diff --git a/geode-core/src/main/java/com/gemstone/gemfire/management/internal/cli/functions/CloseDurableClientFunction.java b/geode-core/src/main/java/com/gemstone/gemfire/management/internal/cli/functions/CloseDurableClientFunction.java index a7081d92fb58..24069c8183a2 100644 --- a/geode-core/src/main/java/com/gemstone/gemfire/management/internal/cli/functions/CloseDurableClientFunction.java +++ b/geode-core/src/main/java/com/gemstone/gemfire/management/internal/cli/functions/CloseDurableClientFunction.java @@ -29,7 +29,6 @@ /*** * Function to close a durable client - * @author bansods * */ public class CloseDurableClientFunction extends FunctionAdapter implements diff --git a/geode-core/src/main/java/com/gemstone/gemfire/management/internal/cli/functions/CloseDurableCqFunction.java b/geode-core/src/main/java/com/gemstone/gemfire/management/internal/cli/functions/CloseDurableCqFunction.java index f88ec8722e9e..69565864e545 100644 --- a/geode-core/src/main/java/com/gemstone/gemfire/management/internal/cli/functions/CloseDurableCqFunction.java +++ b/geode-core/src/main/java/com/gemstone/gemfire/management/internal/cli/functions/CloseDurableCqFunction.java @@ -29,7 +29,6 @@ /*** * Function to close a durable cq - * @author bansods * */ public class CloseDurableCqFunction extends FunctionAdapter implements diff --git a/geode-core/src/main/java/com/gemstone/gemfire/management/internal/cli/functions/ContunuousQueryFunction.java b/geode-core/src/main/java/com/gemstone/gemfire/management/internal/cli/functions/ContunuousQueryFunction.java index 60c990e84f97..d4451eaf866c 100644 --- a/geode-core/src/main/java/com/gemstone/gemfire/management/internal/cli/functions/ContunuousQueryFunction.java +++ b/geode-core/src/main/java/com/gemstone/gemfire/management/internal/cli/functions/ContunuousQueryFunction.java @@ -36,7 +36,6 @@ /** * - * @author ajayp * @since 8.0 */ diff --git a/geode-core/src/main/java/com/gemstone/gemfire/management/internal/cli/functions/CreateAsyncEventQueueFunction.java b/geode-core/src/main/java/com/gemstone/gemfire/management/internal/cli/functions/CreateAsyncEventQueueFunction.java index 619e87aae399..7481c0e70b07 100644 --- a/geode-core/src/main/java/com/gemstone/gemfire/management/internal/cli/functions/CreateAsyncEventQueueFunction.java +++ b/geode-core/src/main/java/com/gemstone/gemfire/management/internal/cli/functions/CreateAsyncEventQueueFunction.java @@ -20,7 +20,6 @@ * Function used by the 'create async-event-queue' gfsh command to create an * asynchronous event queue on a member. * - * @author David Hoots * @since 8.0 */ import java.util.HashMap; diff --git a/geode-core/src/main/java/com/gemstone/gemfire/management/internal/cli/functions/CreateDiskStoreFunction.java b/geode-core/src/main/java/com/gemstone/gemfire/management/internal/cli/functions/CreateDiskStoreFunction.java index 5f45c800a670..9e52e43707e5 100644 --- a/geode-core/src/main/java/com/gemstone/gemfire/management/internal/cli/functions/CreateDiskStoreFunction.java +++ b/geode-core/src/main/java/com/gemstone/gemfire/management/internal/cli/functions/CreateDiskStoreFunction.java @@ -20,7 +20,6 @@ * Function used by the 'create disk-store' gfsh command to create a disk store * on each member. * - * @author David Hoots * @since 8.0 */ import org.apache.logging.log4j.Logger; diff --git a/geode-core/src/main/java/com/gemstone/gemfire/management/internal/cli/functions/CreateIndexFunction.java b/geode-core/src/main/java/com/gemstone/gemfire/management/internal/cli/functions/CreateIndexFunction.java index 4bfd98cdd6a5..999eeb95852c 100644 --- a/geode-core/src/main/java/com/gemstone/gemfire/management/internal/cli/functions/CreateIndexFunction.java +++ b/geode-core/src/main/java/com/gemstone/gemfire/management/internal/cli/functions/CreateIndexFunction.java @@ -34,7 +34,6 @@ /*** * Function to create index in a member, based on different arguments passed to it - * @author bansods * */ public class CreateIndexFunction extends FunctionAdapter implements diff --git a/geode-core/src/main/java/com/gemstone/gemfire/management/internal/cli/functions/DataCommandFunction.java b/geode-core/src/main/java/com/gemstone/gemfire/management/internal/cli/functions/DataCommandFunction.java index af849f85f065..b4e73406c534 100644 --- a/geode-core/src/main/java/com/gemstone/gemfire/management/internal/cli/functions/DataCommandFunction.java +++ b/geode-core/src/main/java/com/gemstone/gemfire/management/internal/cli/functions/DataCommandFunction.java @@ -81,7 +81,6 @@ /*** * - * @author tushark * since 7.0 */ diff --git a/geode-core/src/main/java/com/gemstone/gemfire/management/internal/cli/functions/DescribeDiskStoreFunction.java b/geode-core/src/main/java/com/gemstone/gemfire/management/internal/cli/functions/DescribeDiskStoreFunction.java index 0bdfbd931cef..ee4f45e09b16 100644 --- a/geode-core/src/main/java/com/gemstone/gemfire/management/internal/cli/functions/DescribeDiskStoreFunction.java +++ b/geode-core/src/main/java/com/gemstone/gemfire/management/internal/cli/functions/DescribeDiskStoreFunction.java @@ -49,7 +49,6 @@ * The DescribeDiskStoreFunction class is an implementation of a GemFire Function used to collect information * and details about a particular disk store for a particular GemFire distributed system member. * - * @author jblum * @see com.gemstone.gemfire.cache.DiskStore * @see com.gemstone.gemfire.cache.execute.Function * @see com.gemstone.gemfire.cache.execute.FunctionAdapter diff --git a/geode-core/src/main/java/com/gemstone/gemfire/management/internal/cli/functions/DescribeHDFSStoreFunction.java b/geode-core/src/main/java/com/gemstone/gemfire/management/internal/cli/functions/DescribeHDFSStoreFunction.java index e20f7b9fb4ce..e6828bc3e58c 100644 --- a/geode-core/src/main/java/com/gemstone/gemfire/management/internal/cli/functions/DescribeHDFSStoreFunction.java +++ b/geode-core/src/main/java/com/gemstone/gemfire/management/internal/cli/functions/DescribeHDFSStoreFunction.java @@ -35,7 +35,6 @@ * Function used by the 'describe hdfs-store' gfsh command to collect information * and details about a particular hdfs store for a particular GemFire distributed system member. * - * @author Namrata Thanvi */ public class DescribeHDFSStoreFunction extends FunctionAdapter implements InternalEntity { private static final long serialVersionUID = 1L; diff --git a/geode-core/src/main/java/com/gemstone/gemfire/management/internal/cli/functions/DestroyDiskStoreFunction.java b/geode-core/src/main/java/com/gemstone/gemfire/management/internal/cli/functions/DestroyDiskStoreFunction.java index aca9e5e6b9d3..5c91577ee537 100644 --- a/geode-core/src/main/java/com/gemstone/gemfire/management/internal/cli/functions/DestroyDiskStoreFunction.java +++ b/geode-core/src/main/java/com/gemstone/gemfire/management/internal/cli/functions/DestroyDiskStoreFunction.java @@ -35,7 +35,6 @@ * Function used by the 'destroy disk-store' gfsh command to destroy a disk * store on each member. * - * @author David Hoots * @since 8.0 */ diff --git a/geode-core/src/main/java/com/gemstone/gemfire/management/internal/cli/functions/ExportDataFunction.java b/geode-core/src/main/java/com/gemstone/gemfire/management/internal/cli/functions/ExportDataFunction.java index 2499550b69ff..be3eacfc0d76 100644 --- a/geode-core/src/main/java/com/gemstone/gemfire/management/internal/cli/functions/ExportDataFunction.java +++ b/geode-core/src/main/java/com/gemstone/gemfire/management/internal/cli/functions/ExportDataFunction.java @@ -32,7 +32,6 @@ * Function which carries out the export of a region to a file on a member. * Uses the RegionSnapshotService to export the data * - * @author Sourabh Bansod * */ public class ExportDataFunction extends FunctionAdapter implements diff --git a/geode-core/src/main/java/com/gemstone/gemfire/management/internal/cli/functions/FetchRegionAttributesFunction.java b/geode-core/src/main/java/com/gemstone/gemfire/management/internal/cli/functions/FetchRegionAttributesFunction.java index 5c4900b31a6e..c69303930832 100644 --- a/geode-core/src/main/java/com/gemstone/gemfire/management/internal/cli/functions/FetchRegionAttributesFunction.java +++ b/geode-core/src/main/java/com/gemstone/gemfire/management/internal/cli/functions/FetchRegionAttributesFunction.java @@ -35,7 +35,6 @@ /** * - * @author Abhishek Chaudhari * @since 7.0 */ public class FetchRegionAttributesFunction extends FunctionAdapter { diff --git a/geode-core/src/main/java/com/gemstone/gemfire/management/internal/cli/functions/GarbageCollectionFunction.java b/geode-core/src/main/java/com/gemstone/gemfire/management/internal/cli/functions/GarbageCollectionFunction.java index 15d2d1799997..7474d1ec2859 100644 --- a/geode-core/src/main/java/com/gemstone/gemfire/management/internal/cli/functions/GarbageCollectionFunction.java +++ b/geode-core/src/main/java/com/gemstone/gemfire/management/internal/cli/functions/GarbageCollectionFunction.java @@ -30,7 +30,6 @@ * * Class for Garbage collection function * - * @author apande * * */ diff --git a/geode-core/src/main/java/com/gemstone/gemfire/management/internal/cli/functions/GetMemberConfigInformationFunction.java b/geode-core/src/main/java/com/gemstone/gemfire/management/internal/cli/functions/GetMemberConfigInformationFunction.java index 347e4935e26c..5caacab7ff18 100644 --- a/geode-core/src/main/java/com/gemstone/gemfire/management/internal/cli/functions/GetMemberConfigInformationFunction.java +++ b/geode-core/src/main/java/com/gemstone/gemfire/management/internal/cli/functions/GetMemberConfigInformationFunction.java @@ -44,7 +44,6 @@ /**** * - * @author bansods * */ public class GetMemberConfigInformationFunction extends FunctionAdapter implements InternalEntity { diff --git a/geode-core/src/main/java/com/gemstone/gemfire/management/internal/cli/functions/GetMemberInformationFunction.java b/geode-core/src/main/java/com/gemstone/gemfire/management/internal/cli/functions/GetMemberInformationFunction.java index cc6af0d94075..a3af1f7c2f74 100644 --- a/geode-core/src/main/java/com/gemstone/gemfire/management/internal/cli/functions/GetMemberInformationFunction.java +++ b/geode-core/src/main/java/com/gemstone/gemfire/management/internal/cli/functions/GetMemberInformationFunction.java @@ -42,7 +42,6 @@ /*** * - * @author bansods * since 7.0 */ diff --git a/geode-core/src/main/java/com/gemstone/gemfire/management/internal/cli/functions/GetRegionsFunction.java b/geode-core/src/main/java/com/gemstone/gemfire/management/internal/cli/functions/GetRegionsFunction.java index a9fbe4c8d0d8..40a85f2fced5 100644 --- a/geode-core/src/main/java/com/gemstone/gemfire/management/internal/cli/functions/GetRegionsFunction.java +++ b/geode-core/src/main/java/com/gemstone/gemfire/management/internal/cli/functions/GetRegionsFunction.java @@ -30,7 +30,6 @@ /** * Function that retrieves regions hosted on every member - * @author bansods * */ public class GetRegionsFunction extends FunctionAdapter implements InternalEntity { diff --git a/geode-core/src/main/java/com/gemstone/gemfire/management/internal/cli/functions/GetSubscriptionQueueSizeFunction.java b/geode-core/src/main/java/com/gemstone/gemfire/management/internal/cli/functions/GetSubscriptionQueueSizeFunction.java index e53e867c9bf9..978c64484d72 100644 --- a/geode-core/src/main/java/com/gemstone/gemfire/management/internal/cli/functions/GetSubscriptionQueueSizeFunction.java +++ b/geode-core/src/main/java/com/gemstone/gemfire/management/internal/cli/functions/GetSubscriptionQueueSizeFunction.java @@ -32,7 +32,6 @@ /*** * Function to get subscription-queue-size - * @author bansods * */ public class GetSubscriptionQueueSizeFunction extends FunctionAdapter implements diff --git a/geode-core/src/main/java/com/gemstone/gemfire/management/internal/cli/functions/ImportDataFunction.java b/geode-core/src/main/java/com/gemstone/gemfire/management/internal/cli/functions/ImportDataFunction.java index 377a7e109263..3a518c221a1d 100644 --- a/geode-core/src/main/java/com/gemstone/gemfire/management/internal/cli/functions/ImportDataFunction.java +++ b/geode-core/src/main/java/com/gemstone/gemfire/management/internal/cli/functions/ImportDataFunction.java @@ -31,7 +31,6 @@ /**** * Function which carries out the import of a region to a file on a member. * Uses the RegionSnapshotService to import the data - * @author Sourabh Bansod * */ public class ImportDataFunction extends FunctionAdapter implements diff --git a/geode-core/src/main/java/com/gemstone/gemfire/management/internal/cli/functions/ImportSharedConfigurationArtifactsFunction.java b/geode-core/src/main/java/com/gemstone/gemfire/management/internal/cli/functions/ImportSharedConfigurationArtifactsFunction.java index eed613fd28f9..7b9764013d78 100644 --- a/geode-core/src/main/java/com/gemstone/gemfire/management/internal/cli/functions/ImportSharedConfigurationArtifactsFunction.java +++ b/geode-core/src/main/java/com/gemstone/gemfire/management/internal/cli/functions/ImportSharedConfigurationArtifactsFunction.java @@ -30,7 +30,6 @@ /****** * This function copies the zipped shared configuration, renames the existing shared configuration directory * and unzips the shared configuration. - * @author bansods * */ public class ImportSharedConfigurationArtifactsFunction extends FunctionAdapter implements InternalEntity { diff --git a/geode-core/src/main/java/com/gemstone/gemfire/management/internal/cli/functions/ListAsyncEventQueuesFunction.java b/geode-core/src/main/java/com/gemstone/gemfire/management/internal/cli/functions/ListAsyncEventQueuesFunction.java index 872345b0d864..b4106112739d 100644 --- a/geode-core/src/main/java/com/gemstone/gemfire/management/internal/cli/functions/ListAsyncEventQueuesFunction.java +++ b/geode-core/src/main/java/com/gemstone/gemfire/management/internal/cli/functions/ListAsyncEventQueuesFunction.java @@ -41,7 +41,6 @@ * async event queues that exist for the entire cache, distributed across the * GemFire distributed system.

    * - * @author David Hoots * @since 8.0 */ public class ListAsyncEventQueuesFunction extends FunctionAdapter implements InternalEntity { diff --git a/geode-core/src/main/java/com/gemstone/gemfire/management/internal/cli/functions/ListDiskStoresFunction.java b/geode-core/src/main/java/com/gemstone/gemfire/management/internal/cli/functions/ListDiskStoresFunction.java index c04be31f0d9b..427b6c1ec439 100644 --- a/geode-core/src/main/java/com/gemstone/gemfire/management/internal/cli/functions/ListDiskStoresFunction.java +++ b/geode-core/src/main/java/com/gemstone/gemfire/management/internal/cli/functions/ListDiskStoresFunction.java @@ -35,7 +35,6 @@ * The ListDiskStoresFunction class is an implementation of GemFire Function interface used to determine all the * disk stores that exist for the entire cache, distributed across the GemFire distributed system. *

    - * @author jblum * @see com.gemstone.gemfire.cache.DiskStore * @see com.gemstone.gemfire.cache.execute.Function * @see com.gemstone.gemfire.cache.execute.FunctionAdapter diff --git a/geode-core/src/main/java/com/gemstone/gemfire/management/internal/cli/functions/ListDurableCqNamesFunction.java b/geode-core/src/main/java/com/gemstone/gemfire/management/internal/cli/functions/ListDurableCqNamesFunction.java index 451512637293..fb49df87e84b 100644 --- a/geode-core/src/main/java/com/gemstone/gemfire/management/internal/cli/functions/ListDurableCqNamesFunction.java +++ b/geode-core/src/main/java/com/gemstone/gemfire/management/internal/cli/functions/ListDurableCqNamesFunction.java @@ -38,8 +38,6 @@ * The ListDurableCqs class is a GemFire function used to collect all the durable client names * on the server *

    - * @author jhuynh - * @author bansods * @see com.gemstone.gemfire.cache.Cache * @see com.gemstone.gemfire.cache.execute.Function * @see com.gemstone.gemfire.cache.execute.FunctionAdapter diff --git a/geode-core/src/main/java/com/gemstone/gemfire/management/internal/cli/functions/ListIndexFunction.java b/geode-core/src/main/java/com/gemstone/gemfire/management/internal/cli/functions/ListIndexFunction.java index aaa396f0f29a..350a001201fe 100644 --- a/geode-core/src/main/java/com/gemstone/gemfire/management/internal/cli/functions/ListIndexFunction.java +++ b/geode-core/src/main/java/com/gemstone/gemfire/management/internal/cli/functions/ListIndexFunction.java @@ -33,7 +33,6 @@ * The ListIndexFunction class is a GemFire function used to collect all the index information on all Regions across * the entire GemFire Cache (distributed system). *

    - * @author John Blum * @see com.gemstone.gemfire.cache.Cache * @see com.gemstone.gemfire.cache.execute.Function * @see com.gemstone.gemfire.cache.execute.FunctionAdapter diff --git a/geode-core/src/main/java/com/gemstone/gemfire/management/internal/cli/functions/LoadSharedConfigurationFunction.java b/geode-core/src/main/java/com/gemstone/gemfire/management/internal/cli/functions/LoadSharedConfigurationFunction.java index cbaf8e57dadf..e4ba8896000b 100644 --- a/geode-core/src/main/java/com/gemstone/gemfire/management/internal/cli/functions/LoadSharedConfigurationFunction.java +++ b/geode-core/src/main/java/com/gemstone/gemfire/management/internal/cli/functions/LoadSharedConfigurationFunction.java @@ -26,7 +26,6 @@ /*** * Function to load the shared configuration (already imported) from the disk. - * @author bansods * */ public class LoadSharedConfigurationFunction extends FunctionAdapter implements diff --git a/geode-core/src/main/java/com/gemstone/gemfire/management/internal/cli/functions/LogFileFunction.java b/geode-core/src/main/java/com/gemstone/gemfire/management/internal/cli/functions/LogFileFunction.java index 7d086b6d42ab..870f6bea8ba2 100644 --- a/geode-core/src/main/java/com/gemstone/gemfire/management/internal/cli/functions/LogFileFunction.java +++ b/geode-core/src/main/java/com/gemstone/gemfire/management/internal/cli/functions/LogFileFunction.java @@ -46,7 +46,6 @@ // TODO:LOG:CONVERT: supports log-file only -- update to support Log4J 2 as well? /** * - * @author Ajay Pande * @since 7.0 */ public class LogFileFunction implements Function, InternalEntity { diff --git a/geode-core/src/main/java/com/gemstone/gemfire/management/internal/cli/functions/MembersForRegionFunction.java b/geode-core/src/main/java/com/gemstone/gemfire/management/internal/cli/functions/MembersForRegionFunction.java index 78c80180711e..4581cd266693 100644 --- a/geode-core/src/main/java/com/gemstone/gemfire/management/internal/cli/functions/MembersForRegionFunction.java +++ b/geode-core/src/main/java/com/gemstone/gemfire/management/internal/cli/functions/MembersForRegionFunction.java @@ -32,7 +32,6 @@ /** * - * @author ajayp * @since 8.0 */ diff --git a/geode-core/src/main/java/com/gemstone/gemfire/management/internal/cli/functions/NetstatFunction.java b/geode-core/src/main/java/com/gemstone/gemfire/management/internal/cli/functions/NetstatFunction.java index 838b6e3593c5..4d04806b321d 100644 --- a/geode-core/src/main/java/com/gemstone/gemfire/management/internal/cli/functions/NetstatFunction.java +++ b/geode-core/src/main/java/com/gemstone/gemfire/management/internal/cli/functions/NetstatFunction.java @@ -36,7 +36,6 @@ /** * Executes 'netstat' OS command & returns the result as compressed bytes. * - * @author Abhishek Chaudhari * @since 7.0 */ public class NetstatFunction implements Function, InternalEntity { diff --git a/geode-core/src/main/java/com/gemstone/gemfire/management/internal/cli/functions/RegionAlterFunction.java b/geode-core/src/main/java/com/gemstone/gemfire/management/internal/cli/functions/RegionAlterFunction.java index abb06fc1fbfa..1c119291898f 100644 --- a/geode-core/src/main/java/com/gemstone/gemfire/management/internal/cli/functions/RegionAlterFunction.java +++ b/geode-core/src/main/java/com/gemstone/gemfire/management/internal/cli/functions/RegionAlterFunction.java @@ -47,7 +47,6 @@ * Function used by the 'alter region' gfsh command to alter a region on each * member. * - * @author David Hoots * @since 8.0 */ public class RegionAlterFunction extends FunctionAdapter implements InternalEntity { diff --git a/geode-core/src/main/java/com/gemstone/gemfire/management/internal/cli/functions/RegionCreateFunction.java b/geode-core/src/main/java/com/gemstone/gemfire/management/internal/cli/functions/RegionCreateFunction.java index 309f76153501..fd5db5931048 100644 --- a/geode-core/src/main/java/com/gemstone/gemfire/management/internal/cli/functions/RegionCreateFunction.java +++ b/geode-core/src/main/java/com/gemstone/gemfire/management/internal/cli/functions/RegionCreateFunction.java @@ -51,7 +51,6 @@ /** * - * @author Abhishek Chaudhari * @since 7.0 */ public class RegionCreateFunction extends FunctionAdapter implements InternalEntity { diff --git a/geode-core/src/main/java/com/gemstone/gemfire/management/internal/cli/functions/RegionDestroyFunction.java b/geode-core/src/main/java/com/gemstone/gemfire/management/internal/cli/functions/RegionDestroyFunction.java index 12a36a0faaf4..e0fd6e638c7d 100644 --- a/geode-core/src/main/java/com/gemstone/gemfire/management/internal/cli/functions/RegionDestroyFunction.java +++ b/geode-core/src/main/java/com/gemstone/gemfire/management/internal/cli/functions/RegionDestroyFunction.java @@ -28,7 +28,6 @@ /** * - * @author Abhishek Chaudhari * @since 7.0 */ public class RegionDestroyFunction implements Function, InternalEntity { diff --git a/geode-core/src/main/java/com/gemstone/gemfire/management/internal/cli/functions/RegionFunctionArgs.java b/geode-core/src/main/java/com/gemstone/gemfire/management/internal/cli/functions/RegionFunctionArgs.java index 9dc8fab6aa3e..98bde7e72438 100644 --- a/geode-core/src/main/java/com/gemstone/gemfire/management/internal/cli/functions/RegionFunctionArgs.java +++ b/geode-core/src/main/java/com/gemstone/gemfire/management/internal/cli/functions/RegionFunctionArgs.java @@ -19,8 +19,6 @@ * Used to carry arguments between gfsh region command implementations and the functions * that do the work for those commands. * - * @author Abhishek Chaudhari - * @author David Hoots * @since 7.0 */ package com.gemstone.gemfire.management.internal.cli.functions; diff --git a/geode-core/src/main/java/com/gemstone/gemfire/management/internal/cli/functions/ShutDownFunction.java b/geode-core/src/main/java/com/gemstone/gemfire/management/internal/cli/functions/ShutDownFunction.java index be18403384bd..90b582b778e4 100644 --- a/geode-core/src/main/java/com/gemstone/gemfire/management/internal/cli/functions/ShutDownFunction.java +++ b/geode-core/src/main/java/com/gemstone/gemfire/management/internal/cli/functions/ShutDownFunction.java @@ -31,7 +31,6 @@ * * Class for Shutdown function * - * @author apande * * */ diff --git a/geode-core/src/main/java/com/gemstone/gemfire/management/internal/cli/functions/UnregisterFunction.java b/geode-core/src/main/java/com/gemstone/gemfire/management/internal/cli/functions/UnregisterFunction.java index 0fb9bfb8b3e1..7787ced80839 100644 --- a/geode-core/src/main/java/com/gemstone/gemfire/management/internal/cli/functions/UnregisterFunction.java +++ b/geode-core/src/main/java/com/gemstone/gemfire/management/internal/cli/functions/UnregisterFunction.java @@ -29,7 +29,6 @@ * * Class for Unregister function * - * @author apande * * */ diff --git a/geode-core/src/main/java/com/gemstone/gemfire/management/internal/cli/functions/UserFunctionExecution.java b/geode-core/src/main/java/com/gemstone/gemfire/management/internal/cli/functions/UserFunctionExecution.java index 1d2390e4593e..1bf6cc85748c 100644 --- a/geode-core/src/main/java/com/gemstone/gemfire/management/internal/cli/functions/UserFunctionExecution.java +++ b/geode-core/src/main/java/com/gemstone/gemfire/management/internal/cli/functions/UserFunctionExecution.java @@ -37,7 +37,6 @@ import com.gemstone.gemfire.management.internal.cli.i18n.CliStrings; /** - * @author Ajay Pande * * @since 7.0 */ diff --git a/geode-core/src/main/java/com/gemstone/gemfire/management/internal/cli/help/CliTopic.java b/geode-core/src/main/java/com/gemstone/gemfire/management/internal/cli/help/CliTopic.java index e2970a584229..8aa1f79b5c46 100644 --- a/geode-core/src/main/java/com/gemstone/gemfire/management/internal/cli/help/CliTopic.java +++ b/geode-core/src/main/java/com/gemstone/gemfire/management/internal/cli/help/CliTopic.java @@ -27,7 +27,6 @@ /** * - * @author Abhishek Chaudhari * * @since 7.0 */ diff --git a/geode-core/src/main/java/com/gemstone/gemfire/management/internal/cli/help/format/Block.java b/geode-core/src/main/java/com/gemstone/gemfire/management/internal/cli/help/format/Block.java index 5d6796e1b82e..8253181b7898 100644 --- a/geode-core/src/main/java/com/gemstone/gemfire/management/internal/cli/help/format/Block.java +++ b/geode-core/src/main/java/com/gemstone/gemfire/management/internal/cli/help/format/Block.java @@ -17,7 +17,6 @@ package com.gemstone.gemfire.management.internal.cli.help.format; /** - * @author Nikhil Jadhav * */ public class Block { diff --git a/geode-core/src/main/java/com/gemstone/gemfire/management/internal/cli/help/format/DataNode.java b/geode-core/src/main/java/com/gemstone/gemfire/management/internal/cli/help/format/DataNode.java index a266035fb50f..f8190f3d60fa 100644 --- a/geode-core/src/main/java/com/gemstone/gemfire/management/internal/cli/help/format/DataNode.java +++ b/geode-core/src/main/java/com/gemstone/gemfire/management/internal/cli/help/format/DataNode.java @@ -19,7 +19,6 @@ import java.util.List; /** - * @author Nikhil Jadhav * */ public class DataNode { diff --git a/geode-core/src/main/java/com/gemstone/gemfire/management/internal/cli/help/format/Help.java b/geode-core/src/main/java/com/gemstone/gemfire/management/internal/cli/help/format/Help.java index fcb7eec01cbd..4874d477a89d 100644 --- a/geode-core/src/main/java/com/gemstone/gemfire/management/internal/cli/help/format/Help.java +++ b/geode-core/src/main/java/com/gemstone/gemfire/management/internal/cli/help/format/Help.java @@ -17,7 +17,6 @@ package com.gemstone.gemfire.management.internal.cli.help.format; /** - * @author Nikhil Jadhav * */ public class Help { diff --git a/geode-core/src/main/java/com/gemstone/gemfire/management/internal/cli/help/format/NewHelp.java b/geode-core/src/main/java/com/gemstone/gemfire/management/internal/cli/help/format/NewHelp.java index 3d66b4490c84..f4535ab173fa 100644 --- a/geode-core/src/main/java/com/gemstone/gemfire/management/internal/cli/help/format/NewHelp.java +++ b/geode-core/src/main/java/com/gemstone/gemfire/management/internal/cli/help/format/NewHelp.java @@ -21,7 +21,6 @@ /** * - * @author Nikhil Jadhav * @since 7.0 */ public class NewHelp { diff --git a/geode-core/src/main/java/com/gemstone/gemfire/management/internal/cli/help/utils/HelpUtils.java b/geode-core/src/main/java/com/gemstone/gemfire/management/internal/cli/help/utils/HelpUtils.java index 3d0c04876c01..d632dff4bcef 100644 --- a/geode-core/src/main/java/com/gemstone/gemfire/management/internal/cli/help/utils/HelpUtils.java +++ b/geode-core/src/main/java/com/gemstone/gemfire/management/internal/cli/help/utils/HelpUtils.java @@ -34,7 +34,6 @@ import com.gemstone.gemfire.management.internal.cli.parser.SyntaxConstants; /** - * @author Nikhil Jadhav * @since 7.0 */ public class HelpUtils { diff --git a/geode-core/src/main/java/com/gemstone/gemfire/management/internal/cli/json/GfJsonArray.java b/geode-core/src/main/java/com/gemstone/gemfire/management/internal/cli/json/GfJsonArray.java index d014b56ee5fc..cd5e0002c5c8 100644 --- a/geode-core/src/main/java/com/gemstone/gemfire/management/internal/cli/json/GfJsonArray.java +++ b/geode-core/src/main/java/com/gemstone/gemfire/management/internal/cli/json/GfJsonArray.java @@ -26,7 +26,6 @@ /** * Wrapper over JSONArray. * - * @author Abhishek Chaudhari * * @since 7.0 */ diff --git a/geode-core/src/main/java/com/gemstone/gemfire/management/internal/cli/json/GfJsonException.java b/geode-core/src/main/java/com/gemstone/gemfire/management/internal/cli/json/GfJsonException.java index 0b01187f3acd..09fe5456da21 100644 --- a/geode-core/src/main/java/com/gemstone/gemfire/management/internal/cli/json/GfJsonException.java +++ b/geode-core/src/main/java/com/gemstone/gemfire/management/internal/cli/json/GfJsonException.java @@ -20,7 +20,6 @@ * Wraps GemFire JSON Exceptions * * - * @author Abhishek Chaudhari * * @since 7.0 */ diff --git a/geode-core/src/main/java/com/gemstone/gemfire/management/internal/cli/json/GfJsonObject.java b/geode-core/src/main/java/com/gemstone/gemfire/management/internal/cli/json/GfJsonObject.java index b0de808dbc4d..83899e853770 100644 --- a/geode-core/src/main/java/com/gemstone/gemfire/management/internal/cli/json/GfJsonObject.java +++ b/geode-core/src/main/java/com/gemstone/gemfire/management/internal/cli/json/GfJsonObject.java @@ -29,7 +29,6 @@ /** * Wrapper over JSONObject. * - * @author Abhishek Chaudhari * * @since 7.0 */ diff --git a/geode-core/src/main/java/com/gemstone/gemfire/management/internal/cli/json/TypedJson.java b/geode-core/src/main/java/com/gemstone/gemfire/management/internal/cli/json/TypedJson.java index 23bcbee23243..dee80c08a8a8 100644 --- a/geode-core/src/main/java/com/gemstone/gemfire/management/internal/cli/json/TypedJson.java +++ b/geode-core/src/main/java/com/gemstone/gemfire/management/internal/cli/json/TypedJson.java @@ -46,7 +46,6 @@ * Although it has limited functionality,still a simple use of add() method * should suffice for most of the simple JSON use cases. * - * @author rishim * */ public class TypedJson { diff --git a/geode-core/src/main/java/com/gemstone/gemfire/management/internal/cli/multistep/CLIMultiStepHelper.java b/geode-core/src/main/java/com/gemstone/gemfire/management/internal/cli/multistep/CLIMultiStepHelper.java index f1a2eded5bb5..393f09bc7d92 100644 --- a/geode-core/src/main/java/com/gemstone/gemfire/management/internal/cli/multistep/CLIMultiStepHelper.java +++ b/geode-core/src/main/java/com/gemstone/gemfire/management/internal/cli/multistep/CLIMultiStepHelper.java @@ -46,7 +46,6 @@ * Utility class to abstract CompositeResultData for Multi-step commands * Also contain execution strategy for multi-step commands * - * @author tushark * */ public class CLIMultiStepHelper { diff --git a/geode-core/src/main/java/com/gemstone/gemfire/management/internal/cli/multistep/CLIRemoteStep.java b/geode-core/src/main/java/com/gemstone/gemfire/management/internal/cli/multistep/CLIRemoteStep.java index 1d8f386a80da..6cc8b2641f08 100644 --- a/geode-core/src/main/java/com/gemstone/gemfire/management/internal/cli/multistep/CLIRemoteStep.java +++ b/geode-core/src/main/java/com/gemstone/gemfire/management/internal/cli/multistep/CLIRemoteStep.java @@ -28,7 +28,6 @@ * are iterating through the result(the state) to and fro, first * step has to create the state on the manager. * - * @author tushark */ public interface CLIRemoteStep extends CLIStep, Serializable{ diff --git a/geode-core/src/main/java/com/gemstone/gemfire/management/internal/cli/multistep/CLIStep.java b/geode-core/src/main/java/com/gemstone/gemfire/management/internal/cli/multistep/CLIStep.java index 6f2a0ced45c4..f54a8a79ecdc 100644 --- a/geode-core/src/main/java/com/gemstone/gemfire/management/internal/cli/multistep/CLIStep.java +++ b/geode-core/src/main/java/com/gemstone/gemfire/management/internal/cli/multistep/CLIStep.java @@ -22,7 +22,6 @@ /** * * - * @author tushark * */ public interface CLIStep { diff --git a/geode-core/src/main/java/com/gemstone/gemfire/management/internal/cli/multistep/MultiStepCommand.java b/geode-core/src/main/java/com/gemstone/gemfire/management/internal/cli/multistep/MultiStepCommand.java index 7140e0a6fc77..de2b3cc287ab 100644 --- a/geode-core/src/main/java/com/gemstone/gemfire/management/internal/cli/multistep/MultiStepCommand.java +++ b/geode-core/src/main/java/com/gemstone/gemfire/management/internal/cli/multistep/MultiStepCommand.java @@ -23,7 +23,6 @@ /*** * Just a marker interface to identify interactive command from other regular commands - * @author tushark * */ diff --git a/geode-core/src/main/java/com/gemstone/gemfire/management/internal/cli/parser/Argument.java b/geode-core/src/main/java/com/gemstone/gemfire/management/internal/cli/parser/Argument.java index aec16213fa0a..6ca7fa12821c 100644 --- a/geode-core/src/main/java/com/gemstone/gemfire/management/internal/cli/parser/Argument.java +++ b/geode-core/src/main/java/com/gemstone/gemfire/management/internal/cli/parser/Argument.java @@ -19,7 +19,6 @@ /** * Argument of a Command * - * @author Nikhil Jadhav * @since 7.0 * */ diff --git a/geode-core/src/main/java/com/gemstone/gemfire/management/internal/cli/parser/AvailabilityTarget.java b/geode-core/src/main/java/com/gemstone/gemfire/management/internal/cli/parser/AvailabilityTarget.java index 0952607ac5bf..572fbf60cf3d 100644 --- a/geode-core/src/main/java/com/gemstone/gemfire/management/internal/cli/parser/AvailabilityTarget.java +++ b/geode-core/src/main/java/com/gemstone/gemfire/management/internal/cli/parser/AvailabilityTarget.java @@ -25,7 +25,6 @@ /** * Used for checking availability of a command * - * @author Nikhil Jadhav * @since 7.0 */ public class AvailabilityTarget { diff --git a/geode-core/src/main/java/com/gemstone/gemfire/management/internal/cli/parser/CommandTarget.java b/geode-core/src/main/java/com/gemstone/gemfire/management/internal/cli/parser/CommandTarget.java index 94e187990e5c..faa44ffc74f9 100644 --- a/geode-core/src/main/java/com/gemstone/gemfire/management/internal/cli/parser/CommandTarget.java +++ b/geode-core/src/main/java/com/gemstone/gemfire/management/internal/cli/parser/CommandTarget.java @@ -23,7 +23,6 @@ /** * Used by {@link GfshParser} to store details of a command * - * @author Nikhil Jadhav * @since 7.0 * */ diff --git a/geode-core/src/main/java/com/gemstone/gemfire/management/internal/cli/parser/GfshMethodTarget.java b/geode-core/src/main/java/com/gemstone/gemfire/management/internal/cli/parser/GfshMethodTarget.java index 8675085e7caf..9ba520a5cc71 100644 --- a/geode-core/src/main/java/com/gemstone/gemfire/management/internal/cli/parser/GfshMethodTarget.java +++ b/geode-core/src/main/java/com/gemstone/gemfire/management/internal/cli/parser/GfshMethodTarget.java @@ -25,7 +25,6 @@ /** * A method that can be executed via a shell command. * - * @author Nikhil Jadhav * @since 7.0 */ public class GfshMethodTarget { diff --git a/geode-core/src/main/java/com/gemstone/gemfire/management/internal/cli/parser/GfshOptionParser.java b/geode-core/src/main/java/com/gemstone/gemfire/management/internal/cli/parser/GfshOptionParser.java index de3b69c62031..2712712d29c6 100644 --- a/geode-core/src/main/java/com/gemstone/gemfire/management/internal/cli/parser/GfshOptionParser.java +++ b/geode-core/src/main/java/com/gemstone/gemfire/management/internal/cli/parser/GfshOptionParser.java @@ -24,7 +24,6 @@ /** * Delegate used for parsing by {@link GfshParser} * - * @author Nikhil Jadhav * @since 7.0 */ public interface GfshOptionParser { diff --git a/geode-core/src/main/java/com/gemstone/gemfire/management/internal/cli/parser/MethodParameter.java b/geode-core/src/main/java/com/gemstone/gemfire/management/internal/cli/parser/MethodParameter.java index 9e7ee64c053b..1e79bf7668ac 100644 --- a/geode-core/src/main/java/com/gemstone/gemfire/management/internal/cli/parser/MethodParameter.java +++ b/geode-core/src/main/java/com/gemstone/gemfire/management/internal/cli/parser/MethodParameter.java @@ -19,7 +19,6 @@ /** * Object used for ordering method parameters * - * @author Nikhil Jadhav * @since 7.0 * */ diff --git a/geode-core/src/main/java/com/gemstone/gemfire/management/internal/cli/parser/Option.java b/geode-core/src/main/java/com/gemstone/gemfire/management/internal/cli/parser/Option.java index ad35486894f3..09aabd885b6f 100644 --- a/geode-core/src/main/java/com/gemstone/gemfire/management/internal/cli/parser/Option.java +++ b/geode-core/src/main/java/com/gemstone/gemfire/management/internal/cli/parser/Option.java @@ -24,7 +24,6 @@ /** * Option of a Command * - * @author Nikhil Jadhav * @since 7.0 * */ diff --git a/geode-core/src/main/java/com/gemstone/gemfire/management/internal/cli/parser/OptionSet.java b/geode-core/src/main/java/com/gemstone/gemfire/management/internal/cli/parser/OptionSet.java index 132377ede3db..f39daf7de669 100644 --- a/geode-core/src/main/java/com/gemstone/gemfire/management/internal/cli/parser/OptionSet.java +++ b/geode-core/src/main/java/com/gemstone/gemfire/management/internal/cli/parser/OptionSet.java @@ -23,7 +23,6 @@ /** * Stores the result after parsing * - * @author Nikhil Jadhav * @since 7.0 * */ diff --git a/geode-core/src/main/java/com/gemstone/gemfire/management/internal/cli/parser/Parameter.java b/geode-core/src/main/java/com/gemstone/gemfire/management/internal/cli/parser/Parameter.java index 903bdd9a2573..bb478eb619aa 100644 --- a/geode-core/src/main/java/com/gemstone/gemfire/management/internal/cli/parser/Parameter.java +++ b/geode-core/src/main/java/com/gemstone/gemfire/management/internal/cli/parser/Parameter.java @@ -23,7 +23,6 @@ /** * Parameter of a Command * - * @author Nikhil Jadhav * @since 7.0 */ public abstract class Parameter { diff --git a/geode-core/src/main/java/com/gemstone/gemfire/management/internal/cli/parser/ParserUtils.java b/geode-core/src/main/java/com/gemstone/gemfire/management/internal/cli/parser/ParserUtils.java index 61f2b762f7e0..1ccaff0b6a46 100644 --- a/geode-core/src/main/java/com/gemstone/gemfire/management/internal/cli/parser/ParserUtils.java +++ b/geode-core/src/main/java/com/gemstone/gemfire/management/internal/cli/parser/ParserUtils.java @@ -29,7 +29,6 @@ * The methods herein always ensure that the syntax is proper before performing * the desired operation * - * @author Nikhil Jadhav * @since 7.0 */ public class ParserUtils { diff --git a/geode-core/src/main/java/com/gemstone/gemfire/management/internal/cli/parser/SyntaxConstants.java b/geode-core/src/main/java/com/gemstone/gemfire/management/internal/cli/parser/SyntaxConstants.java index 5c2cb55e0956..db8540f2c85b 100644 --- a/geode-core/src/main/java/com/gemstone/gemfire/management/internal/cli/parser/SyntaxConstants.java +++ b/geode-core/src/main/java/com/gemstone/gemfire/management/internal/cli/parser/SyntaxConstants.java @@ -19,7 +19,6 @@ /** * Syntax constants for the parser * - * @author Nikhil Jadhav * @since 7.0 * */ diff --git a/geode-core/src/main/java/com/gemstone/gemfire/management/internal/cli/parser/jopt/JoptOptionParser.java b/geode-core/src/main/java/com/gemstone/gemfire/management/internal/cli/parser/jopt/JoptOptionParser.java index 6a1a828b30d9..6e56bf4233e5 100644 --- a/geode-core/src/main/java/com/gemstone/gemfire/management/internal/cli/parser/jopt/JoptOptionParser.java +++ b/geode-core/src/main/java/com/gemstone/gemfire/management/internal/cli/parser/jopt/JoptOptionParser.java @@ -45,7 +45,6 @@ * Implementation of {@link GfshOptionParser} which internally makes use of * {@link joptsimple.OptionParser} * - * @author Nikhil Jadhav * @since 7.0 * */ diff --git a/geode-core/src/main/java/com/gemstone/gemfire/management/internal/cli/parser/preprocessor/EnclosingCharacters.java b/geode-core/src/main/java/com/gemstone/gemfire/management/internal/cli/parser/preprocessor/EnclosingCharacters.java index 13b38602437b..e965bcceea52 100644 --- a/geode-core/src/main/java/com/gemstone/gemfire/management/internal/cli/parser/preprocessor/EnclosingCharacters.java +++ b/geode-core/src/main/java/com/gemstone/gemfire/management/internal/cli/parser/preprocessor/EnclosingCharacters.java @@ -19,7 +19,6 @@ /** * Used for Supporting enclosed input * - * @author Nikhil Jadhav * @since 7.0 * */ diff --git a/geode-core/src/main/java/com/gemstone/gemfire/management/internal/cli/parser/preprocessor/Preprocessor.java b/geode-core/src/main/java/com/gemstone/gemfire/management/internal/cli/parser/preprocessor/Preprocessor.java index b096d67d6d02..518c59594cb2 100644 --- a/geode-core/src/main/java/com/gemstone/gemfire/management/internal/cli/parser/preprocessor/Preprocessor.java +++ b/geode-core/src/main/java/com/gemstone/gemfire/management/internal/cli/parser/preprocessor/Preprocessor.java @@ -30,9 +30,6 @@ * It will split the user input into an array of strings as per the specifications of the command for e.g; Different * command might require different value separators, different value specifiers and many more customizations * - * @author Nikhil Jadhav - * @author David Hoots - * @author Abhishek Chaudhari * @since 7.0 * */ diff --git a/geode-core/src/main/java/com/gemstone/gemfire/management/internal/cli/parser/preprocessor/PreprocessorUtils.java b/geode-core/src/main/java/com/gemstone/gemfire/management/internal/cli/parser/preprocessor/PreprocessorUtils.java index 137d211eabb4..f1669b52b11c 100644 --- a/geode-core/src/main/java/com/gemstone/gemfire/management/internal/cli/parser/preprocessor/PreprocessorUtils.java +++ b/geode-core/src/main/java/com/gemstone/gemfire/management/internal/cli/parser/preprocessor/PreprocessorUtils.java @@ -28,7 +28,6 @@ * The methods in this class will be used by the {@link Preprocessor} class to * perform various trivial operations * - * @author Nikhil Jadhav * @since 7.0 */ public class PreprocessorUtils { diff --git a/geode-core/src/main/java/com/gemstone/gemfire/management/internal/cli/parser/preprocessor/Stack.java b/geode-core/src/main/java/com/gemstone/gemfire/management/internal/cli/parser/preprocessor/Stack.java index 1c26410f3046..bf210bb0dbd3 100644 --- a/geode-core/src/main/java/com/gemstone/gemfire/management/internal/cli/parser/preprocessor/Stack.java +++ b/geode-core/src/main/java/com/gemstone/gemfire/management/internal/cli/parser/preprocessor/Stack.java @@ -23,7 +23,6 @@ * Basic Stack implementation, used by * {@link PreprocessorUtils#isSyntaxValid(String)} for detecting valid syntax * - * @author Nikhil Jadhav * * @param */ diff --git a/geode-core/src/main/java/com/gemstone/gemfire/management/internal/cli/parser/preprocessor/TrimmedInput.java b/geode-core/src/main/java/com/gemstone/gemfire/management/internal/cli/parser/preprocessor/TrimmedInput.java index d4e2bc17b6c0..e5b30b70593c 100644 --- a/geode-core/src/main/java/com/gemstone/gemfire/management/internal/cli/parser/preprocessor/TrimmedInput.java +++ b/geode-core/src/main/java/com/gemstone/gemfire/management/internal/cli/parser/preprocessor/TrimmedInput.java @@ -19,7 +19,6 @@ /** * Used for trimming input before Pre-processing * - * @author Nikhil Jadhav * @since 7.0 * */ diff --git a/geode-core/src/main/java/com/gemstone/gemfire/management/internal/cli/remote/CommandExecutionContext.java b/geode-core/src/main/java/com/gemstone/gemfire/management/internal/cli/remote/CommandExecutionContext.java index 3b40da4f2d6d..a426ea6558fc 100644 --- a/geode-core/src/main/java/com/gemstone/gemfire/management/internal/cli/remote/CommandExecutionContext.java +++ b/geode-core/src/main/java/com/gemstone/gemfire/management/internal/cli/remote/CommandExecutionContext.java @@ -25,7 +25,6 @@ /** * - * @author Abhishek Chaudhari * @since 7.0 */ public class CommandExecutionContext { diff --git a/geode-core/src/main/java/com/gemstone/gemfire/management/internal/cli/remote/CommandProcessor.java b/geode-core/src/main/java/com/gemstone/gemfire/management/internal/cli/remote/CommandProcessor.java index 7189ec0eeb64..a8d1839d1fe0 100755 --- a/geode-core/src/main/java/com/gemstone/gemfire/management/internal/cli/remote/CommandProcessor.java +++ b/geode-core/src/main/java/com/gemstone/gemfire/management/internal/cli/remote/CommandProcessor.java @@ -34,7 +34,6 @@ /** * - * @author Abhishek Chaudhari * * @since 7.0 */ diff --git a/geode-core/src/main/java/com/gemstone/gemfire/management/internal/cli/remote/CommandStatementImpl.java b/geode-core/src/main/java/com/gemstone/gemfire/management/internal/cli/remote/CommandStatementImpl.java index 3651ea910bbb..a5d3466eabe1 100644 --- a/geode-core/src/main/java/com/gemstone/gemfire/management/internal/cli/remote/CommandStatementImpl.java +++ b/geode-core/src/main/java/com/gemstone/gemfire/management/internal/cli/remote/CommandStatementImpl.java @@ -26,7 +26,6 @@ /** * - * @author Abhishek Chaudhari * * @since 7.0 */ diff --git a/geode-core/src/main/java/com/gemstone/gemfire/management/internal/cli/remote/MemberCommandService.java b/geode-core/src/main/java/com/gemstone/gemfire/management/internal/cli/remote/MemberCommandService.java index 0afe923f4763..937277a7cbb1 100644 --- a/geode-core/src/main/java/com/gemstone/gemfire/management/internal/cli/remote/MemberCommandService.java +++ b/geode-core/src/main/java/com/gemstone/gemfire/management/internal/cli/remote/MemberCommandService.java @@ -26,7 +26,6 @@ import com.gemstone.gemfire.management.cli.Result; /** - * @author Abhishek Chaudhari */ public class MemberCommandService extends CommandService { private final Object modLock = new Object(); diff --git a/geode-core/src/main/java/com/gemstone/gemfire/management/internal/cli/remote/RemoteExecutionStrategy.java b/geode-core/src/main/java/com/gemstone/gemfire/management/internal/cli/remote/RemoteExecutionStrategy.java index 375a387e6ac2..b4fe52e6e023 100644 --- a/geode-core/src/main/java/com/gemstone/gemfire/management/internal/cli/remote/RemoteExecutionStrategy.java +++ b/geode-core/src/main/java/com/gemstone/gemfire/management/internal/cli/remote/RemoteExecutionStrategy.java @@ -39,7 +39,6 @@ /** * - * @author Abhishek Chaudhari * * @since 7.0 */ diff --git a/geode-core/src/main/java/com/gemstone/gemfire/management/internal/cli/remote/WrapperThreadLocal.java b/geode-core/src/main/java/com/gemstone/gemfire/management/internal/cli/remote/WrapperThreadLocal.java index 3ac1c5a7ccbb..7b883cb59a5e 100644 --- a/geode-core/src/main/java/com/gemstone/gemfire/management/internal/cli/remote/WrapperThreadLocal.java +++ b/geode-core/src/main/java/com/gemstone/gemfire/management/internal/cli/remote/WrapperThreadLocal.java @@ -18,7 +18,6 @@ /** * - * @author Abhishek Chaudhari * * @param * Type of ThreadLocal variable diff --git a/geode-core/src/main/java/com/gemstone/gemfire/management/internal/cli/result/AbstractResultData.java b/geode-core/src/main/java/com/gemstone/gemfire/management/internal/cli/result/AbstractResultData.java index 1e649f90e897..d79a55641718 100644 --- a/geode-core/src/main/java/com/gemstone/gemfire/management/internal/cli/result/AbstractResultData.java +++ b/geode-core/src/main/java/com/gemstone/gemfire/management/internal/cli/result/AbstractResultData.java @@ -36,7 +36,6 @@ /** * - * @author Abhishek Chaudhari * * @since 7.0 */ diff --git a/geode-core/src/main/java/com/gemstone/gemfire/management/internal/cli/result/CliJsonSerializable.java b/geode-core/src/main/java/com/gemstone/gemfire/management/internal/cli/result/CliJsonSerializable.java index f5613e1b4359..f7525869af1e 100644 --- a/geode-core/src/main/java/com/gemstone/gemfire/management/internal/cli/result/CliJsonSerializable.java +++ b/geode-core/src/main/java/com/gemstone/gemfire/management/internal/cli/result/CliJsonSerializable.java @@ -22,7 +22,6 @@ /** * - * @author Abhishek Chaudhari * * @since 7.0 */ diff --git a/geode-core/src/main/java/com/gemstone/gemfire/management/internal/cli/result/CliJsonSerializableIds.java b/geode-core/src/main/java/com/gemstone/gemfire/management/internal/cli/result/CliJsonSerializableIds.java index be44ca9ad5b7..76ee65664b83 100644 --- a/geode-core/src/main/java/com/gemstone/gemfire/management/internal/cli/result/CliJsonSerializableIds.java +++ b/geode-core/src/main/java/com/gemstone/gemfire/management/internal/cli/result/CliJsonSerializableIds.java @@ -18,7 +18,6 @@ /** * - * @author Abhishek Chaudhari * * @since 7.0 */ diff --git a/geode-core/src/main/java/com/gemstone/gemfire/management/internal/cli/result/CommandResult.java b/geode-core/src/main/java/com/gemstone/gemfire/management/internal/cli/result/CommandResult.java index 2dba77b6135e..98e8fec8a8b7 100644 --- a/geode-core/src/main/java/com/gemstone/gemfire/management/internal/cli/result/CommandResult.java +++ b/geode-core/src/main/java/com/gemstone/gemfire/management/internal/cli/result/CommandResult.java @@ -38,7 +38,6 @@ /** * Wraps the Result of a command execution. * - * @author Abhishek Chaudhari * @since 7.0 */ //Should this have info about the command String?? diff --git a/geode-core/src/main/java/com/gemstone/gemfire/management/internal/cli/result/CommandResultException.java b/geode-core/src/main/java/com/gemstone/gemfire/management/internal/cli/result/CommandResultException.java index a36f7ce1c040..2e4b2e10700e 100644 --- a/geode-core/src/main/java/com/gemstone/gemfire/management/internal/cli/result/CommandResultException.java +++ b/geode-core/src/main/java/com/gemstone/gemfire/management/internal/cli/result/CommandResultException.java @@ -21,7 +21,6 @@ /** * Exception wrapper around a command result. * - * @author David Hoots * @since 7.0 */ public class CommandResultException extends Exception { diff --git a/geode-core/src/main/java/com/gemstone/gemfire/management/internal/cli/result/CompositeResultData.java b/geode-core/src/main/java/com/gemstone/gemfire/management/internal/cli/result/CompositeResultData.java index 82cfd2dcd40e..17db3e6dfc6f 100644 --- a/geode-core/src/main/java/com/gemstone/gemfire/management/internal/cli/result/CompositeResultData.java +++ b/geode-core/src/main/java/com/gemstone/gemfire/management/internal/cli/result/CompositeResultData.java @@ -24,7 +24,6 @@ /** * - * @author Abhishek Chaudhari * * @since 7.0 */ @@ -133,7 +132,6 @@ public SectionResultData retrieveSection(String keyToRetrieve) { /** * - * @author Abhishek Chaudhari * @since 7.0 */ public static class SectionResultData /*extends AbstractResultData*/ { diff --git a/geode-core/src/main/java/com/gemstone/gemfire/management/internal/cli/result/ErrorResultData.java b/geode-core/src/main/java/com/gemstone/gemfire/management/internal/cli/result/ErrorResultData.java index a4187586bf29..f8db1d3b2b2d 100644 --- a/geode-core/src/main/java/com/gemstone/gemfire/management/internal/cli/result/ErrorResultData.java +++ b/geode-core/src/main/java/com/gemstone/gemfire/management/internal/cli/result/ErrorResultData.java @@ -22,7 +22,6 @@ /** * - * @author Abhishek Chaudhari * * @since 7.0 */ diff --git a/geode-core/src/main/java/com/gemstone/gemfire/management/internal/cli/result/FileResult.java b/geode-core/src/main/java/com/gemstone/gemfire/management/internal/cli/result/FileResult.java index 8703d7e8510d..07a66d8eae23 100644 --- a/geode-core/src/main/java/com/gemstone/gemfire/management/internal/cli/result/FileResult.java +++ b/geode-core/src/main/java/com/gemstone/gemfire/management/internal/cli/result/FileResult.java @@ -24,7 +24,6 @@ /** * - * @author Abhishek Chaudhari * * @since 7.0 */ diff --git a/geode-core/src/main/java/com/gemstone/gemfire/management/internal/cli/result/InfoResultData.java b/geode-core/src/main/java/com/gemstone/gemfire/management/internal/cli/result/InfoResultData.java index 02fcea93e8d3..82265cec8a93 100644 --- a/geode-core/src/main/java/com/gemstone/gemfire/management/internal/cli/result/InfoResultData.java +++ b/geode-core/src/main/java/com/gemstone/gemfire/management/internal/cli/result/InfoResultData.java @@ -21,7 +21,6 @@ /** * - * @author Abhishek Chaudhari * * @since 7.0 */ diff --git a/geode-core/src/main/java/com/gemstone/gemfire/management/internal/cli/result/ObjectResultData.java b/geode-core/src/main/java/com/gemstone/gemfire/management/internal/cli/result/ObjectResultData.java index bcfec922df36..186156e12a10 100644 --- a/geode-core/src/main/java/com/gemstone/gemfire/management/internal/cli/result/ObjectResultData.java +++ b/geode-core/src/main/java/com/gemstone/gemfire/management/internal/cli/result/ObjectResultData.java @@ -26,7 +26,6 @@ /** * - * @author Abhishek Chaudhari * * @since 7.0 */ diff --git a/geode-core/src/main/java/com/gemstone/gemfire/management/internal/cli/result/ResultBuilder.java b/geode-core/src/main/java/com/gemstone/gemfire/management/internal/cli/result/ResultBuilder.java index a12180548162..16d3f7061231 100755 --- a/geode-core/src/main/java/com/gemstone/gemfire/management/internal/cli/result/ResultBuilder.java +++ b/geode-core/src/main/java/com/gemstone/gemfire/management/internal/cli/result/ResultBuilder.java @@ -27,7 +27,6 @@ /** * - * @author Abhishek Chaudhari * * @since 7.0 */ diff --git a/geode-core/src/main/java/com/gemstone/gemfire/management/internal/cli/result/ResultData.java b/geode-core/src/main/java/com/gemstone/gemfire/management/internal/cli/result/ResultData.java index 64c498786401..b121b23d215e 100644 --- a/geode-core/src/main/java/com/gemstone/gemfire/management/internal/cli/result/ResultData.java +++ b/geode-core/src/main/java/com/gemstone/gemfire/management/internal/cli/result/ResultData.java @@ -21,7 +21,6 @@ /** * - * @author Abhishek Chaudhari * * @since 7.0 */ diff --git a/geode-core/src/main/java/com/gemstone/gemfire/management/internal/cli/result/ResultDataException.java b/geode-core/src/main/java/com/gemstone/gemfire/management/internal/cli/result/ResultDataException.java index 2fb3b8d01b5a..f0c01da00841 100644 --- a/geode-core/src/main/java/com/gemstone/gemfire/management/internal/cli/result/ResultDataException.java +++ b/geode-core/src/main/java/com/gemstone/gemfire/management/internal/cli/result/ResultDataException.java @@ -18,7 +18,6 @@ /** * - * @author Abhishek Chaudhari * @since 7.0 */ public class ResultDataException extends RuntimeException { diff --git a/geode-core/src/main/java/com/gemstone/gemfire/management/internal/cli/result/TableBuilder.java b/geode-core/src/main/java/com/gemstone/gemfire/management/internal/cli/result/TableBuilder.java index dfa4b3e118f0..86869536ab23 100644 --- a/geode-core/src/main/java/com/gemstone/gemfire/management/internal/cli/result/TableBuilder.java +++ b/geode-core/src/main/java/com/gemstone/gemfire/management/internal/cli/result/TableBuilder.java @@ -56,7 +56,6 @@ * * * - * @author David Hoots * * @since 7.0 */ @@ -173,7 +172,6 @@ public String toString() { * when built will automatically be set to the length of the longest value in * the column. * - * @author David Hoots * @since 7.0 */ public static class RowGroup { diff --git a/geode-core/src/main/java/com/gemstone/gemfire/management/internal/cli/result/TableBuilderHelper.java b/geode-core/src/main/java/com/gemstone/gemfire/management/internal/cli/result/TableBuilderHelper.java index aa4029f8e045..ff5ee271c251 100644 --- a/geode-core/src/main/java/com/gemstone/gemfire/management/internal/cli/result/TableBuilderHelper.java +++ b/geode-core/src/main/java/com/gemstone/gemfire/management/internal/cli/result/TableBuilderHelper.java @@ -25,7 +25,6 @@ /** * Helps table builder for adjusting result width according to screen width - * @author tushark * */ diff --git a/geode-core/src/main/java/com/gemstone/gemfire/management/internal/cli/result/TabularResultData.java b/geode-core/src/main/java/com/gemstone/gemfire/management/internal/cli/result/TabularResultData.java index e28426adcba5..307fb68059c2 100644 --- a/geode-core/src/main/java/com/gemstone/gemfire/management/internal/cli/result/TabularResultData.java +++ b/geode-core/src/main/java/com/gemstone/gemfire/management/internal/cli/result/TabularResultData.java @@ -29,7 +29,6 @@ /** * - * @author Abhishek Chaudhari * * @since 7.0 */ diff --git a/geode-core/src/main/java/com/gemstone/gemfire/management/internal/cli/shell/Gfsh.java b/geode-core/src/main/java/com/gemstone/gemfire/management/internal/cli/shell/Gfsh.java index 67a8ccbf461b..60283962271e 100755 --- a/geode-core/src/main/java/com/gemstone/gemfire/management/internal/cli/shell/Gfsh.java +++ b/geode-core/src/main/java/com/gemstone/gemfire/management/internal/cli/shell/Gfsh.java @@ -87,8 +87,6 @@ * Additionally, this class is used to maintain GemFire SHell (gfsh) specific * information like: environment TODO * - * @author Abhishek Chaudhari - * @author Nikhil Jadhav * * @since 7.0 */ diff --git a/geode-core/src/main/java/com/gemstone/gemfire/management/internal/cli/shell/GfshConfig.java b/geode-core/src/main/java/com/gemstone/gemfire/management/internal/cli/shell/GfshConfig.java index d3faea0fa19e..9ee0284496ff 100644 --- a/geode-core/src/main/java/com/gemstone/gemfire/management/internal/cli/shell/GfshConfig.java +++ b/geode-core/src/main/java/com/gemstone/gemfire/management/internal/cli/shell/GfshConfig.java @@ -24,7 +24,6 @@ /** * - * @author Abhishek Chaudhari * @since 7.0 */ // According to 8.0 discussions, gfsh should have as less confing as possible diff --git a/geode-core/src/main/java/com/gemstone/gemfire/management/internal/cli/shell/GfshExecutionStrategy.java b/geode-core/src/main/java/com/gemstone/gemfire/management/internal/cli/shell/GfshExecutionStrategy.java index f259ca155651..c5ebe9af351a 100755 --- a/geode-core/src/main/java/com/gemstone/gemfire/management/internal/cli/shell/GfshExecutionStrategy.java +++ b/geode-core/src/main/java/com/gemstone/gemfire/management/internal/cli/shell/GfshExecutionStrategy.java @@ -47,7 +47,6 @@ * Defines the {@link ExecutionStrategy} for commands that are executed in * GemFire SHell (gfsh). * - * @author Abhishek Chaudhari * * @since 7.0 */ diff --git a/geode-core/src/main/java/com/gemstone/gemfire/management/internal/cli/shell/JMXConnectionException.java b/geode-core/src/main/java/com/gemstone/gemfire/management/internal/cli/shell/JMXConnectionException.java index 79753b56d0df..cd06e52fb3fe 100644 --- a/geode-core/src/main/java/com/gemstone/gemfire/management/internal/cli/shell/JMXConnectionException.java +++ b/geode-core/src/main/java/com/gemstone/gemfire/management/internal/cli/shell/JMXConnectionException.java @@ -19,7 +19,6 @@ /** * RuntimeException to wrap JMX Connection Error/Exception. * - * @author Abhishek Chaudhari * @since 7.0 */ public class JMXConnectionException extends RuntimeException { diff --git a/geode-core/src/main/java/com/gemstone/gemfire/management/internal/cli/shell/JMXInvocationException.java b/geode-core/src/main/java/com/gemstone/gemfire/management/internal/cli/shell/JMXInvocationException.java index 65b9e5967d4c..5cb565a0af00 100644 --- a/geode-core/src/main/java/com/gemstone/gemfire/management/internal/cli/shell/JMXInvocationException.java +++ b/geode-core/src/main/java/com/gemstone/gemfire/management/internal/cli/shell/JMXInvocationException.java @@ -20,7 +20,6 @@ * RuntimeException to wrap all the exception that could occur for JMX * operations/attributes. * - * @author Abhishek Chaudhari * @since 7.0 */ public class JMXInvocationException extends RuntimeException { diff --git a/geode-core/src/main/java/com/gemstone/gemfire/management/internal/cli/shell/JmxOperationInvoker.java b/geode-core/src/main/java/com/gemstone/gemfire/management/internal/cli/shell/JmxOperationInvoker.java index c2a1b2ff7686..faf8c529393a 100644 --- a/geode-core/src/main/java/com/gemstone/gemfire/management/internal/cli/shell/JmxOperationInvoker.java +++ b/geode-core/src/main/java/com/gemstone/gemfire/management/internal/cli/shell/JmxOperationInvoker.java @@ -55,7 +55,6 @@ /** * OperationInvoker JMX Implementation * - * @author Abhishek Chaudhari * * @since 7.0 */ @@ -387,7 +386,6 @@ public static String checkAndConvertToCompatibleIPv6Syntax(String hostAddress) { * A Connection Notification Listener. Notifies Gfsh when a connection gets * terminated abruptly. * - * @author Abhishek Chaudhari * @since 7.0 */ class JMXConnectionListener implements NotificationListener { diff --git a/geode-core/src/main/java/com/gemstone/gemfire/management/internal/cli/shell/MultiCommandHelper.java b/geode-core/src/main/java/com/gemstone/gemfire/management/internal/cli/shell/MultiCommandHelper.java index 766f2da5307c..1708a1b79332 100644 --- a/geode-core/src/main/java/com/gemstone/gemfire/management/internal/cli/shell/MultiCommandHelper.java +++ b/geode-core/src/main/java/com/gemstone/gemfire/management/internal/cli/shell/MultiCommandHelper.java @@ -25,7 +25,6 @@ /** * - * @author tushark * */ public class MultiCommandHelper { diff --git a/geode-core/src/main/java/com/gemstone/gemfire/management/internal/cli/shell/OperationInvoker.java b/geode-core/src/main/java/com/gemstone/gemfire/management/internal/cli/shell/OperationInvoker.java index 1c061b3e4082..17513f7fe87c 100755 --- a/geode-core/src/main/java/com/gemstone/gemfire/management/internal/cli/shell/OperationInvoker.java +++ b/geode-core/src/main/java/com/gemstone/gemfire/management/internal/cli/shell/OperationInvoker.java @@ -30,8 +30,6 @@ * There could be many different implementations of OperationInvoker based on different protocols like JMX, HTTP * and so on. *

    - * @author Abhishek Chaudhari - * @author John Blum * @since 7.0 */ public interface OperationInvoker { diff --git a/geode-core/src/main/java/com/gemstone/gemfire/management/internal/cli/shell/jline/ANSIBuffer.java b/geode-core/src/main/java/com/gemstone/gemfire/management/internal/cli/shell/jline/ANSIBuffer.java index 572f89926d68..9bad0a2e63f7 100644 --- a/geode-core/src/main/java/com/gemstone/gemfire/management/internal/cli/shell/jline/ANSIBuffer.java +++ b/geode-core/src/main/java/com/gemstone/gemfire/management/internal/cli/shell/jline/ANSIBuffer.java @@ -14,7 +14,6 @@ /** * A buffer that can contain ANSI text. * - * @author Marc Prud'hommeaux */ public class ANSIBuffer { private boolean ansiEnabled = true; diff --git a/geode-core/src/main/java/com/gemstone/gemfire/management/internal/cli/shell/jline/ANSIHandler.java b/geode-core/src/main/java/com/gemstone/gemfire/management/internal/cli/shell/jline/ANSIHandler.java index c8102ae0cb5d..cbe4448e322a 100644 --- a/geode-core/src/main/java/com/gemstone/gemfire/management/internal/cli/shell/jline/ANSIHandler.java +++ b/geode-core/src/main/java/com/gemstone/gemfire/management/internal/cli/shell/jline/ANSIHandler.java @@ -21,7 +21,6 @@ /** * Overrides jline.History to add History without newline characters. * - * @author Abhishek Chaudhari * @since 7.0 */ public class ANSIHandler { diff --git a/geode-core/src/main/java/com/gemstone/gemfire/management/internal/cli/shell/jline/CygwinMinttyTerminal.java b/geode-core/src/main/java/com/gemstone/gemfire/management/internal/cli/shell/jline/CygwinMinttyTerminal.java index f486774103b5..9b622fed5acc 100644 --- a/geode-core/src/main/java/com/gemstone/gemfire/management/internal/cli/shell/jline/CygwinMinttyTerminal.java +++ b/geode-core/src/main/java/com/gemstone/gemfire/management/internal/cli/shell/jline/CygwinMinttyTerminal.java @@ -32,7 +32,6 @@ * * To know exact changed please see UnixTerminal code. * - * @author tushark * */ public class CygwinMinttyTerminal extends UnixTerminal { diff --git a/geode-core/src/main/java/com/gemstone/gemfire/management/internal/cli/shell/jline/GfshHistory.java b/geode-core/src/main/java/com/gemstone/gemfire/management/internal/cli/shell/jline/GfshHistory.java index 5d0d8dcb2181..7bfc9375a0b3 100644 --- a/geode-core/src/main/java/com/gemstone/gemfire/management/internal/cli/shell/jline/GfshHistory.java +++ b/geode-core/src/main/java/com/gemstone/gemfire/management/internal/cli/shell/jline/GfshHistory.java @@ -28,7 +28,6 @@ /** * Overrides jline.History to add History without newline characters. * - * @author Abhishek Chaudhari * @since 7.0 */ public class GfshHistory extends MemoryHistory { diff --git a/geode-core/src/main/java/com/gemstone/gemfire/management/internal/cli/shell/jline/GfshUnsupportedTerminal.java b/geode-core/src/main/java/com/gemstone/gemfire/management/internal/cli/shell/jline/GfshUnsupportedTerminal.java index 3bc839e1dd4a..08e4b2476580 100644 --- a/geode-core/src/main/java/com/gemstone/gemfire/management/internal/cli/shell/jline/GfshUnsupportedTerminal.java +++ b/geode-core/src/main/java/com/gemstone/gemfire/management/internal/cli/shell/jline/GfshUnsupportedTerminal.java @@ -22,7 +22,6 @@ * Used when gfsh is run in Head Less mode. * Doesn't support ANSI. * - * @author Abhishek Chaudhari * @since 7.0 */ public class GfshUnsupportedTerminal extends UnsupportedTerminal { diff --git a/geode-core/src/main/java/com/gemstone/gemfire/management/internal/cli/shell/unsafe/GfshSignalHandler.java b/geode-core/src/main/java/com/gemstone/gemfire/management/internal/cli/shell/unsafe/GfshSignalHandler.java index cc8b3698688c..ecd8bac66308 100644 --- a/geode-core/src/main/java/com/gemstone/gemfire/management/internal/cli/shell/unsafe/GfshSignalHandler.java +++ b/geode-core/src/main/java/com/gemstone/gemfire/management/internal/cli/shell/unsafe/GfshSignalHandler.java @@ -30,8 +30,6 @@ * This class externalizes signal handling in order to make the GemFire build process a bit cleaner - for example * we have to have exceptions for sun.misc classes when building javadocs. *

    - * @author jdeppe - * @author jblum * @see com.gemstone.gemfire.internal.process.signal.AbstractSignalNotificationHandler * @see com.gemstone.gemfire.internal.process.signal.Signal * @see sun.misc.Signal diff --git a/geode-core/src/main/java/com/gemstone/gemfire/management/internal/cli/util/CauseFinder.java b/geode-core/src/main/java/com/gemstone/gemfire/management/internal/cli/util/CauseFinder.java index f4da1dcb4300..74d8caf76dcb 100644 --- a/geode-core/src/main/java/com/gemstone/gemfire/management/internal/cli/util/CauseFinder.java +++ b/geode-core/src/main/java/com/gemstone/gemfire/management/internal/cli/util/CauseFinder.java @@ -26,7 +26,6 @@ *
  • find a cause by specific type * * - * @author Abhishek Chaudhari * @since 7.0 */ public class CauseFinder { diff --git a/geode-core/src/main/java/com/gemstone/gemfire/management/internal/cli/util/ClasspathScanLoadHelper.java b/geode-core/src/main/java/com/gemstone/gemfire/management/internal/cli/util/ClasspathScanLoadHelper.java index cae9a66db7df..39170e4e9de2 100644 --- a/geode-core/src/main/java/com/gemstone/gemfire/management/internal/cli/util/ClasspathScanLoadHelper.java +++ b/geode-core/src/main/java/com/gemstone/gemfire/management/internal/cli/util/ClasspathScanLoadHelper.java @@ -37,7 +37,6 @@ /** * Utility class to scan class-path & load classes. * - * @author Abhishek Chaudhari * * @since 7.0 */ @@ -243,7 +242,6 @@ public static String[] getClassNames(String jarPath, String packageName) /** * FileFilter to filter out GemFire Test Code. * - * @author Abhishek Chaudhari * @since 7.0 */ static class TestClassFilter implements FileFilter { diff --git a/geode-core/src/main/java/com/gemstone/gemfire/management/internal/cli/util/CommandStringBuilder.java b/geode-core/src/main/java/com/gemstone/gemfire/management/internal/cli/util/CommandStringBuilder.java index de031b0b89b9..4be381f3baa6 100644 --- a/geode-core/src/main/java/com/gemstone/gemfire/management/internal/cli/util/CommandStringBuilder.java +++ b/geode-core/src/main/java/com/gemstone/gemfire/management/internal/cli/util/CommandStringBuilder.java @@ -26,7 +26,6 @@ * Helper class to build command strings, used in the Dunits for testing gfsh * commands * - * @author Saurabh Bansod * * @since 7.0 */ diff --git a/geode-core/src/main/java/com/gemstone/gemfire/management/internal/cli/util/CommentSkipHelper.java b/geode-core/src/main/java/com/gemstone/gemfire/management/internal/cli/util/CommentSkipHelper.java index d1b056823408..2d46c18e288c 100644 --- a/geode-core/src/main/java/com/gemstone/gemfire/management/internal/cli/util/CommentSkipHelper.java +++ b/geode-core/src/main/java/com/gemstone/gemfire/management/internal/cli/util/CommentSkipHelper.java @@ -22,7 +22,6 @@ * Utility based on code extracted from * {@link org.springframework.shell.core.AbstractShell#executeCommand(String)} * - * @author Abhishek Chaudhari * @since 7.0 */ // @original-author Ben Alex diff --git a/geode-core/src/main/java/com/gemstone/gemfire/management/internal/cli/util/ConnectionEndpoint.java b/geode-core/src/main/java/com/gemstone/gemfire/management/internal/cli/util/ConnectionEndpoint.java index 303c823f0422..a6e676c93987 100644 --- a/geode-core/src/main/java/com/gemstone/gemfire/management/internal/cli/util/ConnectionEndpoint.java +++ b/geode-core/src/main/java/com/gemstone/gemfire/management/internal/cli/util/ConnectionEndpoint.java @@ -21,7 +21,6 @@ /** * - * @author abhishek * */ public class ConnectionEndpoint { diff --git a/geode-core/src/main/java/com/gemstone/gemfire/management/internal/cli/util/DiskStoreCompacter.java b/geode-core/src/main/java/com/gemstone/gemfire/management/internal/cli/util/DiskStoreCompacter.java index d74905536ad1..513ca3d420f5 100644 --- a/geode-core/src/main/java/com/gemstone/gemfire/management/internal/cli/util/DiskStoreCompacter.java +++ b/geode-core/src/main/java/com/gemstone/gemfire/management/internal/cli/util/DiskStoreCompacter.java @@ -32,7 +32,6 @@ /** * - * @author Abhishek Chaudhari * * @since 7.0 */ diff --git a/geode-core/src/main/java/com/gemstone/gemfire/management/internal/cli/util/DiskStoreNotFoundException.java b/geode-core/src/main/java/com/gemstone/gemfire/management/internal/cli/util/DiskStoreNotFoundException.java index 06ead2fb0acb..f9e68545f45a 100644 --- a/geode-core/src/main/java/com/gemstone/gemfire/management/internal/cli/util/DiskStoreNotFoundException.java +++ b/geode-core/src/main/java/com/gemstone/gemfire/management/internal/cli/util/DiskStoreNotFoundException.java @@ -23,7 +23,6 @@ * The DiskStoreNotFoundException is a GemFireException class indicating that a disk store by name could not be found * on a member specified by name! *

    - * @author jblum * @see com.gemstone.gemfire.GemFireException * @since 7.0 */ diff --git a/geode-core/src/main/java/com/gemstone/gemfire/management/internal/cli/util/DiskStoreValidater.java b/geode-core/src/main/java/com/gemstone/gemfire/management/internal/cli/util/DiskStoreValidater.java index 4665f0e1a8b3..c19fd6073931 100644 --- a/geode-core/src/main/java/com/gemstone/gemfire/management/internal/cli/util/DiskStoreValidater.java +++ b/geode-core/src/main/java/com/gemstone/gemfire/management/internal/cli/util/DiskStoreValidater.java @@ -22,7 +22,6 @@ import com.gemstone.gemfire.management.internal.cli.i18n.CliStrings; /** - * @author Ajay Pande * @since 7.0 */ diff --git a/geode-core/src/main/java/com/gemstone/gemfire/management/internal/cli/util/GfshConsoleReader.java b/geode-core/src/main/java/com/gemstone/gemfire/management/internal/cli/util/GfshConsoleReader.java index 788a39d978ba..5cd1dda94c89 100644 --- a/geode-core/src/main/java/com/gemstone/gemfire/management/internal/cli/util/GfshConsoleReader.java +++ b/geode-core/src/main/java/com/gemstone/gemfire/management/internal/cli/util/GfshConsoleReader.java @@ -30,7 +30,6 @@ * * TODO - Abhishek: Investigate if stty settings can avoid this? * - * @author Abhishek Chaudhari * @since 7.0.1 */ public class GfshConsoleReader extends GfeConsoleReader { diff --git a/geode-core/src/main/java/com/gemstone/gemfire/management/internal/cli/util/JConsoleNotFoundException.java b/geode-core/src/main/java/com/gemstone/gemfire/management/internal/cli/util/JConsoleNotFoundException.java index 32220ab0c325..2657cb03296b 100644 --- a/geode-core/src/main/java/com/gemstone/gemfire/management/internal/cli/util/JConsoleNotFoundException.java +++ b/geode-core/src/main/java/com/gemstone/gemfire/management/internal/cli/util/JConsoleNotFoundException.java @@ -23,7 +23,6 @@ * The JConsoleNotFoundException class is a RuntimeException class that indicates that the JDK JConsole tool could * not be located in the file system. *

    - * @author John Blum * @see com.gemstone.gemfire.GemFireException * @since 7.0 */ diff --git a/geode-core/src/main/java/com/gemstone/gemfire/management/internal/cli/util/JsonUtil.java b/geode-core/src/main/java/com/gemstone/gemfire/management/internal/cli/util/JsonUtil.java index 436bef7c6fea..07b3c168a5ab 100644 --- a/geode-core/src/main/java/com/gemstone/gemfire/management/internal/cli/util/JsonUtil.java +++ b/geode-core/src/main/java/com/gemstone/gemfire/management/internal/cli/util/JsonUtil.java @@ -44,7 +44,6 @@ * This class contains utility methods for JSON (http://www.json.org/) which is * used by classes used for the Command Line Interface (CLI). * - * @author Abhishek Chaudhari * * @since 7.0 */ diff --git a/geode-core/src/main/java/com/gemstone/gemfire/management/internal/cli/util/MemberInformation.java b/geode-core/src/main/java/com/gemstone/gemfire/management/internal/cli/util/MemberInformation.java index 6a91c29a377e..e2715355046e 100644 --- a/geode-core/src/main/java/com/gemstone/gemfire/management/internal/cli/util/MemberInformation.java +++ b/geode-core/src/main/java/com/gemstone/gemfire/management/internal/cli/util/MemberInformation.java @@ -22,7 +22,6 @@ /*** * Data class to hold the information of the member * Used in describe member command - * @author bansods * */ public class MemberInformation implements Serializable{ diff --git a/geode-core/src/main/java/com/gemstone/gemfire/management/internal/cli/util/MemberNotFoundException.java b/geode-core/src/main/java/com/gemstone/gemfire/management/internal/cli/util/MemberNotFoundException.java index 083a3ce43ec3..6abeef5a77be 100644 --- a/geode-core/src/main/java/com/gemstone/gemfire/management/internal/cli/util/MemberNotFoundException.java +++ b/geode-core/src/main/java/com/gemstone/gemfire/management/internal/cli/util/MemberNotFoundException.java @@ -23,7 +23,6 @@ * The MemberNotFoundException is a GemFirException indicating that a member by name could not be found in the GemFire * distributed system. *

    - * @author jblum * @see com.gemstone.gemfire.GemFireException * @since 7.0 */ diff --git a/geode-core/src/main/java/com/gemstone/gemfire/management/internal/cli/util/MergeLogs.java b/geode-core/src/main/java/com/gemstone/gemfire/management/internal/cli/util/MergeLogs.java index 58267d9b1e29..625ff24b28cf 100644 --- a/geode-core/src/main/java/com/gemstone/gemfire/management/internal/cli/util/MergeLogs.java +++ b/geode-core/src/main/java/com/gemstone/gemfire/management/internal/cli/util/MergeLogs.java @@ -30,7 +30,6 @@ /** * - * @author Ajay Pande * @since 7.0 */ diff --git a/geode-core/src/main/java/com/gemstone/gemfire/management/internal/cli/util/ReadWriteFile.java b/geode-core/src/main/java/com/gemstone/gemfire/management/internal/cli/util/ReadWriteFile.java index 1690d5c7111a..ff4d1dee2e95 100644 --- a/geode-core/src/main/java/com/gemstone/gemfire/management/internal/cli/util/ReadWriteFile.java +++ b/geode-core/src/main/java/com/gemstone/gemfire/management/internal/cli/util/ReadWriteFile.java @@ -35,7 +35,6 @@ /** * - * @author Ajay Pande * * @since 7.0 */ diff --git a/geode-core/src/main/java/com/gemstone/gemfire/management/internal/cli/util/RegionAttributesDefault.java b/geode-core/src/main/java/com/gemstone/gemfire/management/internal/cli/util/RegionAttributesDefault.java index ced346631fd6..c08907617fba 100644 --- a/geode-core/src/main/java/com/gemstone/gemfire/management/internal/cli/util/RegionAttributesDefault.java +++ b/geode-core/src/main/java/com/gemstone/gemfire/management/internal/cli/util/RegionAttributesDefault.java @@ -30,7 +30,6 @@ /*** * Contains the default values for the region attributes - * @author bansods * */ public final class RegionAttributesDefault { diff --git a/geode-core/src/main/java/com/gemstone/gemfire/management/internal/cli/util/RegionAttributesNames.java b/geode-core/src/main/java/com/gemstone/gemfire/management/internal/cli/util/RegionAttributesNames.java index f6656560e8b7..e842bee67161 100644 --- a/geode-core/src/main/java/com/gemstone/gemfire/management/internal/cli/util/RegionAttributesNames.java +++ b/geode-core/src/main/java/com/gemstone/gemfire/management/internal/cli/util/RegionAttributesNames.java @@ -19,7 +19,6 @@ /*** * Contains the names for the region attributes * used by describe region command - * @author bansods * */ public class RegionAttributesNames { diff --git a/geode-core/src/main/java/com/gemstone/gemfire/management/internal/cli/util/RegionPath.java b/geode-core/src/main/java/com/gemstone/gemfire/management/internal/cli/util/RegionPath.java index 41837255b535..d40efc668f94 100644 --- a/geode-core/src/main/java/com/gemstone/gemfire/management/internal/cli/util/RegionPath.java +++ b/geode-core/src/main/java/com/gemstone/gemfire/management/internal/cli/util/RegionPath.java @@ -26,7 +26,6 @@ /** * Class to handle Region path. * - * @author Abhishek Chaudhari * @since 7.0 */ public class RegionPath { diff --git a/geode-core/src/main/java/com/gemstone/gemfire/management/internal/cli/util/VisualVmNotFoundException.java b/geode-core/src/main/java/com/gemstone/gemfire/management/internal/cli/util/VisualVmNotFoundException.java index 4c2d9cb8e46b..ca716c8de39c 100644 --- a/geode-core/src/main/java/com/gemstone/gemfire/management/internal/cli/util/VisualVmNotFoundException.java +++ b/geode-core/src/main/java/com/gemstone/gemfire/management/internal/cli/util/VisualVmNotFoundException.java @@ -23,7 +23,6 @@ * The VisualVmNotFoundException class is a GemFireException (RuntimeException) indicating that the JDK jvisualvm * tool could not be found on the system. *

    - * @author John Blum * @see com.gemstone.gemfire.GemFireException * @since 7.0 */ diff --git a/geode-core/src/main/java/com/gemstone/gemfire/management/internal/configuration/SharedConfigurationWriter.java b/geode-core/src/main/java/com/gemstone/gemfire/management/internal/configuration/SharedConfigurationWriter.java index d8c574b10692..cc91a0a07773 100644 --- a/geode-core/src/main/java/com/gemstone/gemfire/management/internal/configuration/SharedConfigurationWriter.java +++ b/geode-core/src/main/java/com/gemstone/gemfire/management/internal/configuration/SharedConfigurationWriter.java @@ -41,7 +41,6 @@ * Class for writing configuration changes to the Shared Configuration at the Locator(s). * This class is used in the Gfsh commands, to persist the configuration changes to the shared configuration hosted on locators. * - * @author bansods * */ public class SharedConfigurationWriter { diff --git a/geode-core/src/main/java/com/gemstone/gemfire/management/internal/configuration/callbacks/ConfigurationChangeListener.java b/geode-core/src/main/java/com/gemstone/gemfire/management/internal/configuration/callbacks/ConfigurationChangeListener.java index 66165bdbc492..cd75e21a3872 100644 --- a/geode-core/src/main/java/com/gemstone/gemfire/management/internal/configuration/callbacks/ConfigurationChangeListener.java +++ b/geode-core/src/main/java/com/gemstone/gemfire/management/internal/configuration/callbacks/ConfigurationChangeListener.java @@ -25,7 +25,6 @@ import com.gemstone.gemfire.management.internal.configuration.domain.Configuration; /**** * CacheListener on ConfigRegion to write the configuration changes to file-system. - * @author bansods * */ public class ConfigurationChangeListener extends CacheListenerAdapter { diff --git a/geode-core/src/main/java/com/gemstone/gemfire/management/internal/configuration/domain/CacheElement.java b/geode-core/src/main/java/com/gemstone/gemfire/management/internal/configuration/domain/CacheElement.java index 7779d0f3496a..2da57968d08b 100644 --- a/geode-core/src/main/java/com/gemstone/gemfire/management/internal/configuration/domain/CacheElement.java +++ b/geode-core/src/main/java/com/gemstone/gemfire/management/internal/configuration/domain/CacheElement.java @@ -47,7 +47,6 @@ * Domain class to determine the order of an element Currently being used to * store order information of child elements of "cache" * - * @author bansods * */ // UnitTest CacheElementJUnitTest diff --git a/geode-core/src/main/java/com/gemstone/gemfire/management/internal/configuration/domain/Configuration.java b/geode-core/src/main/java/com/gemstone/gemfire/management/internal/configuration/domain/Configuration.java index 7c429329fa42..54b2312f5428 100644 --- a/geode-core/src/main/java/com/gemstone/gemfire/management/internal/configuration/domain/Configuration.java +++ b/geode-core/src/main/java/com/gemstone/gemfire/management/internal/configuration/domain/Configuration.java @@ -29,7 +29,6 @@ /** * Domain object for all the configuration related data. - * @author bansods * */ public class Configuration implements DataSerializable{ diff --git a/geode-core/src/main/java/com/gemstone/gemfire/management/internal/configuration/domain/SharedConfigurationStatus.java b/geode-core/src/main/java/com/gemstone/gemfire/management/internal/configuration/domain/SharedConfigurationStatus.java index f714d7a69bd5..5b8734bde205 100644 --- a/geode-core/src/main/java/com/gemstone/gemfire/management/internal/configuration/domain/SharedConfigurationStatus.java +++ b/geode-core/src/main/java/com/gemstone/gemfire/management/internal/configuration/domain/SharedConfigurationStatus.java @@ -18,7 +18,6 @@ /*** * - * @author bansods * */ public enum SharedConfigurationStatus { diff --git a/geode-core/src/main/java/com/gemstone/gemfire/management/internal/configuration/domain/XmlEntity.java b/geode-core/src/main/java/com/gemstone/gemfire/management/internal/configuration/domain/XmlEntity.java index 209e19f94d17..8517fc61175e 100644 --- a/geode-core/src/main/java/com/gemstone/gemfire/management/internal/configuration/domain/XmlEntity.java +++ b/geode-core/src/main/java/com/gemstone/gemfire/management/internal/configuration/domain/XmlEntity.java @@ -55,8 +55,6 @@ /**** * Domain class for defining a GemFire entity in XML. * - * @author bansods - * @author David Hoots * */ public class XmlEntity implements DataSerializable { @@ -406,7 +404,6 @@ public static final XmlEntityBuilder builder() { * Builder for {@link XmlEntity}. Default values are as described in * {@link XmlEntity}. * - * @author jbarrett@pivotal.io * * @since 8.1 */ diff --git a/geode-core/src/main/java/com/gemstone/gemfire/management/internal/configuration/handlers/ConfigurationRequestHandler.java b/geode-core/src/main/java/com/gemstone/gemfire/management/internal/configuration/handlers/ConfigurationRequestHandler.java index b32b392a2a4f..5251d19bda2a 100644 --- a/geode-core/src/main/java/com/gemstone/gemfire/management/internal/configuration/handlers/ConfigurationRequestHandler.java +++ b/geode-core/src/main/java/com/gemstone/gemfire/management/internal/configuration/handlers/ConfigurationRequestHandler.java @@ -32,7 +32,6 @@ /*** * Handler for {@link ConfigurationRequest} request message. * Processes the {@link ConfigurationRequest}, sends the {@link ConfigurationResponse} containing the requested configuration. - * @author bansods * */ public class ConfigurationRequestHandler implements TcpHandler{ diff --git a/geode-core/src/main/java/com/gemstone/gemfire/management/internal/configuration/messages/ConfigurationRequest.java b/geode-core/src/main/java/com/gemstone/gemfire/management/internal/configuration/messages/ConfigurationRequest.java index 32cb96f8710b..d544f63a1b05 100644 --- a/geode-core/src/main/java/com/gemstone/gemfire/management/internal/configuration/messages/ConfigurationRequest.java +++ b/geode-core/src/main/java/com/gemstone/gemfire/management/internal/configuration/messages/ConfigurationRequest.java @@ -30,7 +30,6 @@ /*** * Request sent by a member to the locator requesting the shared configuration - * @author bansods * */ public class ConfigurationRequest implements DataSerializableFixedID{ diff --git a/geode-core/src/main/java/com/gemstone/gemfire/management/internal/configuration/messages/ConfigurationResponse.java b/geode-core/src/main/java/com/gemstone/gemfire/management/internal/configuration/messages/ConfigurationResponse.java index 56c85f5b85aa..7398310bb06e 100644 --- a/geode-core/src/main/java/com/gemstone/gemfire/management/internal/configuration/messages/ConfigurationResponse.java +++ b/geode-core/src/main/java/com/gemstone/gemfire/management/internal/configuration/messages/ConfigurationResponse.java @@ -41,7 +41,6 @@ /*** * Response containing the configuration requested by the {@link ConfigurationRequest} - * @author bansods */ public class ConfigurationResponse implements DataSerializableFixedID { diff --git a/geode-core/src/main/java/com/gemstone/gemfire/management/internal/configuration/messages/SharedConfigurationStatusRequest.java b/geode-core/src/main/java/com/gemstone/gemfire/management/internal/configuration/messages/SharedConfigurationStatusRequest.java index 3dcdf4707aee..ea3fa3c8db98 100644 --- a/geode-core/src/main/java/com/gemstone/gemfire/management/internal/configuration/messages/SharedConfigurationStatusRequest.java +++ b/geode-core/src/main/java/com/gemstone/gemfire/management/internal/configuration/messages/SharedConfigurationStatusRequest.java @@ -24,7 +24,6 @@ /**** * - * @author bansods * */ public class SharedConfigurationStatusRequest implements DataSerializable { diff --git a/geode-core/src/main/java/com/gemstone/gemfire/management/internal/configuration/messages/SharedConfigurationStatusResponse.java b/geode-core/src/main/java/com/gemstone/gemfire/management/internal/configuration/messages/SharedConfigurationStatusResponse.java index c056ec5c4075..5aecf6c1f7f4 100644 --- a/geode-core/src/main/java/com/gemstone/gemfire/management/internal/configuration/messages/SharedConfigurationStatusResponse.java +++ b/geode-core/src/main/java/com/gemstone/gemfire/management/internal/configuration/messages/SharedConfigurationStatusResponse.java @@ -32,7 +32,6 @@ /***** * - * @author bansods * */ public class SharedConfigurationStatusResponse implements DataSerializable { diff --git a/geode-core/src/main/java/com/gemstone/gemfire/management/internal/configuration/utils/DtdResolver.java b/geode-core/src/main/java/com/gemstone/gemfire/management/internal/configuration/utils/DtdResolver.java index b9fd3317ff4b..83ed68c63f6c 100644 --- a/geode-core/src/main/java/com/gemstone/gemfire/management/internal/configuration/utils/DtdResolver.java +++ b/geode-core/src/main/java/com/gemstone/gemfire/management/internal/configuration/utils/DtdResolver.java @@ -32,7 +32,6 @@ * This class is used to resolve the location of DTD. * During development time the dtd for the latest version is not published * on the www.gemstone.com , then the dtd should be picked up as a resource from the Jar file. - * @author bansods * * @deprecated As of 8.1 use {@link CacheXml} */ diff --git a/geode-core/src/main/java/com/gemstone/gemfire/management/internal/configuration/utils/XmlConstants.java b/geode-core/src/main/java/com/gemstone/gemfire/management/internal/configuration/utils/XmlConstants.java index 5a1e50a4ee82..88327bc99c89 100644 --- a/geode-core/src/main/java/com/gemstone/gemfire/management/internal/configuration/utils/XmlConstants.java +++ b/geode-core/src/main/java/com/gemstone/gemfire/management/internal/configuration/utils/XmlConstants.java @@ -20,7 +20,6 @@ import javax.xml.XMLConstants; /** - * @author jbarrett@pivotal.io * * @since 8.1 */ diff --git a/geode-core/src/main/java/com/gemstone/gemfire/management/internal/configuration/utils/XmlUtils.java b/geode-core/src/main/java/com/gemstone/gemfire/management/internal/configuration/utils/XmlUtils.java index d614c4ca225f..37b7321b6513 100644 --- a/geode-core/src/main/java/com/gemstone/gemfire/management/internal/configuration/utils/XmlUtils.java +++ b/geode-core/src/main/java/com/gemstone/gemfire/management/internal/configuration/utils/XmlUtils.java @@ -360,7 +360,6 @@ public static NodeList getNodes(Document doc, XmlEntity xmlEntity) throws XPathE * An object used by an XPath query that maps namespaces to uris. * * @see NamespaceContext - * @author dsmith * */ public static class XPathContext implements NamespaceContext { diff --git a/geode-core/src/main/java/com/gemstone/gemfire/management/internal/configuration/utils/ZipUtils.java b/geode-core/src/main/java/com/gemstone/gemfire/management/internal/configuration/utils/ZipUtils.java index 485173d958b0..18b4949f7467 100644 --- a/geode-core/src/main/java/com/gemstone/gemfire/management/internal/configuration/utils/ZipUtils.java +++ b/geode-core/src/main/java/com/gemstone/gemfire/management/internal/configuration/utils/ZipUtils.java @@ -35,7 +35,6 @@ /**** * Utilities class to zip/unzip folder - * @author bansods * */ public class ZipUtils { diff --git a/geode-core/src/main/java/com/gemstone/gemfire/management/internal/messages/CompactRequest.java b/geode-core/src/main/java/com/gemstone/gemfire/management/internal/messages/CompactRequest.java index d18567eada15..7d4ddd8306cf 100644 --- a/geode-core/src/main/java/com/gemstone/gemfire/management/internal/messages/CompactRequest.java +++ b/geode-core/src/main/java/com/gemstone/gemfire/management/internal/messages/CompactRequest.java @@ -48,7 +48,6 @@ * An instruction to all members with cache that they should * compact their disk stores. * - * @author Abhishek Chaudhari * * @since 7.0 */ diff --git a/geode-core/src/main/java/com/gemstone/gemfire/management/internal/messages/CompactResponse.java b/geode-core/src/main/java/com/gemstone/gemfire/management/internal/messages/CompactResponse.java index bb73c591ea86..84f6ee5640df 100644 --- a/geode-core/src/main/java/com/gemstone/gemfire/management/internal/messages/CompactResponse.java +++ b/geode-core/src/main/java/com/gemstone/gemfire/management/internal/messages/CompactResponse.java @@ -27,7 +27,6 @@ /** * - * @author Abhishek Chaudhari * * @since 7.0 */ diff --git a/geode-core/src/main/java/com/gemstone/gemfire/management/internal/unsafe/ReadOpFileAccessController.java b/geode-core/src/main/java/com/gemstone/gemfire/management/internal/unsafe/ReadOpFileAccessController.java index 0e3ef923c7ce..a3cd8c7fff0c 100644 --- a/geode-core/src/main/java/com/gemstone/gemfire/management/internal/unsafe/ReadOpFileAccessController.java +++ b/geode-core/src/main/java/com/gemstone/gemfire/management/internal/unsafe/ReadOpFileAccessController.java @@ -33,7 +33,6 @@ * payloads of those attribute. These attributes are exposed as operations but require * readOnly access. This class filter those methods for read access. * - * @author tushark */ diff --git a/geode-core/src/main/java/com/gemstone/gemfire/management/internal/web/controllers/AbstractCommandsController.java b/geode-core/src/main/java/com/gemstone/gemfire/management/internal/web/controllers/AbstractCommandsController.java index 41a890a610fe..3915e0c398fd 100644 --- a/geode-core/src/main/java/com/gemstone/gemfire/management/internal/web/controllers/AbstractCommandsController.java +++ b/geode-core/src/main/java/com/gemstone/gemfire/management/internal/web/controllers/AbstractCommandsController.java @@ -64,7 +64,6 @@ * Management Controller classes that expose REST API web service endpoints (URLs/URIs) for GemFire shell (Gfsh) * commands. * - * @author John Blum * @see com.gemstone.gemfire.management.MemberMXBean * @see com.gemstone.gemfire.management.internal.cli.shell.Gfsh * @see org.springframework.stereotype.Controller diff --git a/geode-core/src/main/java/com/gemstone/gemfire/management/internal/web/controllers/AbstractMultiPartCommandsController.java b/geode-core/src/main/java/com/gemstone/gemfire/management/internal/web/controllers/AbstractMultiPartCommandsController.java index 969eed2e76d5..32187a97222d 100644 --- a/geode-core/src/main/java/com/gemstone/gemfire/management/internal/web/controllers/AbstractMultiPartCommandsController.java +++ b/geode-core/src/main/java/com/gemstone/gemfire/management/internal/web/controllers/AbstractMultiPartCommandsController.java @@ -29,7 +29,6 @@ * The AbstractMultiPartCommandsController class is a abstract base class encapsulating all common functionality for * handling multi-part (file upload) HTTP requests. *

    - * @author John Blum * @see com.gemstone.gemfire.management.internal.web.controllers.AbstractCommandsController * @since 8.0 */ diff --git a/geode-core/src/main/java/com/gemstone/gemfire/management/internal/web/controllers/ClientCommandsController.java b/geode-core/src/main/java/com/gemstone/gemfire/management/internal/web/controllers/ClientCommandsController.java index 5e954ade4357..327c3a4f921b 100644 --- a/geode-core/src/main/java/com/gemstone/gemfire/management/internal/web/controllers/ClientCommandsController.java +++ b/geode-core/src/main/java/com/gemstone/gemfire/management/internal/web/controllers/ClientCommandsController.java @@ -28,7 +28,6 @@ /** * The ShellCommandsController class implements GemFire REST API calls for Gfsh Shell Commands. *

    - * @author John Blum * @see com.gemstone.gemfire.management.internal.cli.commands.ClientCommands * @see com.gemstone.gemfire.management.internal.web.controllers.AbstractCommandsController * @see org.springframework.stereotype.Controller diff --git a/geode-core/src/main/java/com/gemstone/gemfire/management/internal/web/controllers/ClusterCommandsController.java b/geode-core/src/main/java/com/gemstone/gemfire/management/internal/web/controllers/ClusterCommandsController.java index 132be92e766e..a896966e7a67 100644 --- a/geode-core/src/main/java/com/gemstone/gemfire/management/internal/web/controllers/ClusterCommandsController.java +++ b/geode-core/src/main/java/com/gemstone/gemfire/management/internal/web/controllers/ClusterCommandsController.java @@ -27,7 +27,6 @@ * The ClusterCommandsController class implements GemFire REST API web service calls for the Gfsh Cluster * (System)-based commands. * - * @author John Blum * @see org.springframework.stereotype.Controller * @see org.springframework.web.bind.annotation.RequestMapping * @see org.springframework.web.bind.annotation.RequestMethod diff --git a/geode-core/src/main/java/com/gemstone/gemfire/management/internal/web/controllers/ConfigCommandsController.java b/geode-core/src/main/java/com/gemstone/gemfire/management/internal/web/controllers/ConfigCommandsController.java index fae54d82ea68..cd53c51831ff 100644 --- a/geode-core/src/main/java/com/gemstone/gemfire/management/internal/web/controllers/ConfigCommandsController.java +++ b/geode-core/src/main/java/com/gemstone/gemfire/management/internal/web/controllers/ConfigCommandsController.java @@ -38,7 +38,6 @@ * The ConfigCommandsController class implements GemFire Management REST API web service endpoints for the Gfsh * Config Commands. *

    - * @author John Blum * @see com.gemstone.gemfire.management.internal.cli.commands.ConfigCommands * @see com.gemstone.gemfire.management.internal.web.controllers.AbstractMultiPartCommandsController * @see org.springframework.stereotype.Controller diff --git a/geode-core/src/main/java/com/gemstone/gemfire/management/internal/web/controllers/DataCommandsController.java b/geode-core/src/main/java/com/gemstone/gemfire/management/internal/web/controllers/DataCommandsController.java index 2e8127286fec..9a27d6b4381a 100644 --- a/geode-core/src/main/java/com/gemstone/gemfire/management/internal/web/controllers/DataCommandsController.java +++ b/geode-core/src/main/java/com/gemstone/gemfire/management/internal/web/controllers/DataCommandsController.java @@ -36,7 +36,6 @@ * The DataCommandsController class implements GemFire Management REST API web service endpoints for the * Gfsh Data Commands. *

    - * @author John Blum * @see com.gemstone.gemfire.management.internal.cli.commands.DataCommands * @see com.gemstone.gemfire.management.internal.web.controllers.AbstractCommandsController * @see org.springframework.stereotype.Controller diff --git a/geode-core/src/main/java/com/gemstone/gemfire/management/internal/web/controllers/DeployCommandsController.java b/geode-core/src/main/java/com/gemstone/gemfire/management/internal/web/controllers/DeployCommandsController.java index df55ed742965..30091b7fa12d 100644 --- a/geode-core/src/main/java/com/gemstone/gemfire/management/internal/web/controllers/DeployCommandsController.java +++ b/geode-core/src/main/java/com/gemstone/gemfire/management/internal/web/controllers/DeployCommandsController.java @@ -34,7 +34,6 @@ * The DeployCommandsController class implements the GemFire Management REST API web service endpoints for the * Gfsh Deploy Commands. *

    - * @author John Blum * @see com.gemstone.gemfire.management.internal.cli.commands.ConfigCommands * @see com.gemstone.gemfire.management.internal.web.controllers.AbstractMultiPartCommandsController * @see org.springframework.stereotype.Controller diff --git a/geode-core/src/main/java/com/gemstone/gemfire/management/internal/web/controllers/DiskStoreCommandsController.java b/geode-core/src/main/java/com/gemstone/gemfire/management/internal/web/controllers/DiskStoreCommandsController.java index e537a291f403..7b9922891edc 100644 --- a/geode-core/src/main/java/com/gemstone/gemfire/management/internal/web/controllers/DiskStoreCommandsController.java +++ b/geode-core/src/main/java/com/gemstone/gemfire/management/internal/web/controllers/DiskStoreCommandsController.java @@ -35,7 +35,6 @@ * The DiskStoreCommandsController class implements GemFire Management REST API web service endpoints for the * Gfsh Disk Store Commands. *

    - * @author John Blum * @see com.gemstone.gemfire.management.internal.cli.commands.DiskStoreCommands * @see com.gemstone.gemfire.management.internal.web.controllers.AbstractCommandsController * @see org.springframework.stereotype.Controller diff --git a/geode-core/src/main/java/com/gemstone/gemfire/management/internal/web/controllers/DurableClientCommandsController.java b/geode-core/src/main/java/com/gemstone/gemfire/management/internal/web/controllers/DurableClientCommandsController.java index 74189eee211e..fe00c634530f 100644 --- a/geode-core/src/main/java/com/gemstone/gemfire/management/internal/web/controllers/DurableClientCommandsController.java +++ b/geode-core/src/main/java/com/gemstone/gemfire/management/internal/web/controllers/DurableClientCommandsController.java @@ -31,7 +31,6 @@ * The DurableClientCommandsController class implements GemFire Management REST API web service endpoints for the * durable client/CQs Gfsh commands. *

    - * @author John Blum * @see com.gemstone.gemfire.management.internal.cli.commands.DurableClientCommands * @see com.gemstone.gemfire.management.internal.web.controllers.AbstractCommandsController * @see org.springframework.stereotype.Controller diff --git a/geode-core/src/main/java/com/gemstone/gemfire/management/internal/web/controllers/FunctionCommandsController.java b/geode-core/src/main/java/com/gemstone/gemfire/management/internal/web/controllers/FunctionCommandsController.java index 8a932a069022..6aff6724523b 100644 --- a/geode-core/src/main/java/com/gemstone/gemfire/management/internal/web/controllers/FunctionCommandsController.java +++ b/geode-core/src/main/java/com/gemstone/gemfire/management/internal/web/controllers/FunctionCommandsController.java @@ -35,7 +35,6 @@ * The FunctionCommandsController class implements GemFire Management REST API web service endpoints for the * Gfsh Function Commands. *

    - * @author John Blum * @see com.gemstone.gemfire.management.internal.cli.commands.FunctionCommands * @see com.gemstone.gemfire.management.internal.web.controllers.AbstractCommandsController * @see org.springframework.stereotype.Controller diff --git a/geode-core/src/main/java/com/gemstone/gemfire/management/internal/web/controllers/IndexCommandsController.java b/geode-core/src/main/java/com/gemstone/gemfire/management/internal/web/controllers/IndexCommandsController.java index ba5e89e27bbd..aef1eb1afeae 100644 --- a/geode-core/src/main/java/com/gemstone/gemfire/management/internal/web/controllers/IndexCommandsController.java +++ b/geode-core/src/main/java/com/gemstone/gemfire/management/internal/web/controllers/IndexCommandsController.java @@ -29,7 +29,6 @@ /** * The IndexCommandsController class implements the REST API calls for the Gfsh Index commands. *

    - * @author John Blum * @see com.gemstone.gemfire.management.internal.cli.commands.IndexCommands * @see com.gemstone.gemfire.management.internal.cli.util.CommandStringBuilder * @see com.gemstone.gemfire.management.internal.web.controllers.AbstractCommandsController diff --git a/geode-core/src/main/java/com/gemstone/gemfire/management/internal/web/controllers/LauncherLifecycleCommandsController.java b/geode-core/src/main/java/com/gemstone/gemfire/management/internal/web/controllers/LauncherLifecycleCommandsController.java index 1cd03a2937e2..4e49f3393149 100644 --- a/geode-core/src/main/java/com/gemstone/gemfire/management/internal/web/controllers/LauncherLifecycleCommandsController.java +++ b/geode-core/src/main/java/com/gemstone/gemfire/management/internal/web/controllers/LauncherLifecycleCommandsController.java @@ -25,7 +25,6 @@ /** * The LauncherLifecycleCommandsController class implements REST API calls for the Gfsh Launcher Lifecycle commands. *

    - * @author John Blum * @see com.gemstone.gemfire.management.internal.cli.commands.LauncherLifecycleCommands * @see com.gemstone.gemfire.management.internal.web.controllers.AbstractCommandsController * @see org.springframework.stereotype.Controller diff --git a/geode-core/src/main/java/com/gemstone/gemfire/management/internal/web/controllers/MemberCommandsController.java b/geode-core/src/main/java/com/gemstone/gemfire/management/internal/web/controllers/MemberCommandsController.java index 8d228907f7a0..b9ab3e83f22d 100644 --- a/geode-core/src/main/java/com/gemstone/gemfire/management/internal/web/controllers/MemberCommandsController.java +++ b/geode-core/src/main/java/com/gemstone/gemfire/management/internal/web/controllers/MemberCommandsController.java @@ -30,7 +30,6 @@ * The MemberCommandsController class implements GemFire Management REST API web service endpoints for the * Gfsh Member Commands. *

    - * @author John Blum * @see com.gemstone.gemfire.management.internal.cli.commands.MemberCommands * @see com.gemstone.gemfire.management.internal.web.controllers.AbstractCommandsController * @see org.springframework.stereotype.Controller diff --git a/geode-core/src/main/java/com/gemstone/gemfire/management/internal/web/controllers/MiscellaneousCommandsController.java b/geode-core/src/main/java/com/gemstone/gemfire/management/internal/web/controllers/MiscellaneousCommandsController.java index 05af2fede23a..3e8a4f0ca3e1 100644 --- a/geode-core/src/main/java/com/gemstone/gemfire/management/internal/web/controllers/MiscellaneousCommandsController.java +++ b/geode-core/src/main/java/com/gemstone/gemfire/management/internal/web/controllers/MiscellaneousCommandsController.java @@ -35,7 +35,6 @@ * The MiscellaneousCommandsController class implements GemFire Management REST API web service endpoints for the * Gfsh Miscellaneous Commands. *

    - * @author John Blum * @see com.gemstone.gemfire.management.internal.cli.commands.MiscellaneousCommands * @see com.gemstone.gemfire.management.internal.web.controllers.AbstractCommandsController * @see org.springframework.stereotype.Controller diff --git a/geode-core/src/main/java/com/gemstone/gemfire/management/internal/web/controllers/PdxCommandsController.java b/geode-core/src/main/java/com/gemstone/gemfire/management/internal/web/controllers/PdxCommandsController.java index 2234ce420a8f..88557fbda5b0 100644 --- a/geode-core/src/main/java/com/gemstone/gemfire/management/internal/web/controllers/PdxCommandsController.java +++ b/geode-core/src/main/java/com/gemstone/gemfire/management/internal/web/controllers/PdxCommandsController.java @@ -29,7 +29,6 @@ /** * The PdxCommandsController class implements GemFire Management REST API web service endpoints for Gfsh PDX Commands. * - * @author John Blum * @see com.gemstone.gemfire.management.internal.cli.commands.PDXCommands * @see com.gemstone.gemfire.management.internal.web.controllers.AbstractCommandsController * @see org.springframework.stereotype.Controller diff --git a/geode-core/src/main/java/com/gemstone/gemfire/management/internal/web/controllers/QueueCommandsController.java b/geode-core/src/main/java/com/gemstone/gemfire/management/internal/web/controllers/QueueCommandsController.java index 95be15c4303d..b8353fa2189c 100644 --- a/geode-core/src/main/java/com/gemstone/gemfire/management/internal/web/controllers/QueueCommandsController.java +++ b/geode-core/src/main/java/com/gemstone/gemfire/management/internal/web/controllers/QueueCommandsController.java @@ -30,7 +30,6 @@ * The QueueCommandsController class implements GemFire Management REST API web service endpoints for the * Gfsh Queue Commands. *

    - * @author John Blum * @see com.gemstone.gemfire.management.internal.cli.commands.QueueCommands * @see com.gemstone.gemfire.management.internal.web.controllers.AbstractCommandsController * @see org.springframework.stereotype.Controller diff --git a/geode-core/src/main/java/com/gemstone/gemfire/management/internal/web/controllers/RegionCommandsController.java b/geode-core/src/main/java/com/gemstone/gemfire/management/internal/web/controllers/RegionCommandsController.java index b044569e90e5..67bbdecb9c34 100644 --- a/geode-core/src/main/java/com/gemstone/gemfire/management/internal/web/controllers/RegionCommandsController.java +++ b/geode-core/src/main/java/com/gemstone/gemfire/management/internal/web/controllers/RegionCommandsController.java @@ -31,7 +31,6 @@ /** * The RegionCommands class implements GemFire Management REST API web service endpoints for the Gfsh Region Commands. *

    - * @author John Blum * @see com.gemstone.gemfire.management.internal.cli.commands.RegionCommands * @see com.gemstone.gemfire.management.internal.web.controllers.AbstractCommandsController * @see org.springframework.stereotype.Controller diff --git a/geode-core/src/main/java/com/gemstone/gemfire/management/internal/web/controllers/ShellCommandsController.java b/geode-core/src/main/java/com/gemstone/gemfire/management/internal/web/controllers/ShellCommandsController.java index 0bac797d1fee..c41f747ff434 100644 --- a/geode-core/src/main/java/com/gemstone/gemfire/management/internal/web/controllers/ShellCommandsController.java +++ b/geode-core/src/main/java/com/gemstone/gemfire/management/internal/web/controllers/ShellCommandsController.java @@ -47,7 +47,6 @@ /** * The ShellCommandsController class implements GemFire REST API calls for Gfsh Shell Commands. * - * @author John Blum * @see com.gemstone.gemfire.management.internal.cli.commands.ShellCommands * @see com.gemstone.gemfire.management.internal.web.controllers.AbstractCommandsController * @see org.springframework.stereotype.Controller diff --git a/geode-core/src/main/java/com/gemstone/gemfire/management/internal/web/controllers/WanCommandsController.java b/geode-core/src/main/java/com/gemstone/gemfire/management/internal/web/controllers/WanCommandsController.java index 784139296ae4..486b5e391a47 100644 --- a/geode-core/src/main/java/com/gemstone/gemfire/management/internal/web/controllers/WanCommandsController.java +++ b/geode-core/src/main/java/com/gemstone/gemfire/management/internal/web/controllers/WanCommandsController.java @@ -32,8 +32,6 @@ * The WanCommandsController class implements the GemFire Management REST API web service endpoints for the * Gfsh WAN Commands. * - * @author John Blum - * @author bolgesby * @see com.gemstone.gemfire.management.internal.cli.commands.WanCommands * @see com.gemstone.gemfire.management.internal.web.controllers.AbstractCommandsController * @see org.springframework.stereotype.Controller diff --git a/geode-core/src/main/java/com/gemstone/gemfire/management/internal/web/controllers/support/EnvironmentVariablesHandlerInterceptor.java b/geode-core/src/main/java/com/gemstone/gemfire/management/internal/web/controllers/support/EnvironmentVariablesHandlerInterceptor.java index 2ba50ada837c..80773a507080 100644 --- a/geode-core/src/main/java/com/gemstone/gemfire/management/internal/web/controllers/support/EnvironmentVariablesHandlerInterceptor.java +++ b/geode-core/src/main/java/com/gemstone/gemfire/management/internal/web/controllers/support/EnvironmentVariablesHandlerInterceptor.java @@ -29,7 +29,6 @@ * The GetEnvironmentHandlerInterceptor class handles extracting Gfsh environment variables encoded in the HTTP request * message as request parameters. *

    - * @author John Blum * @see javax.servlet.http.HttpServletRequest * @see javax.servlet.http.HttpServletResponse * @see org.springframework.web.servlet.handler.HandlerInterceptorAdapter diff --git a/geode-core/src/main/java/com/gemstone/gemfire/management/internal/web/controllers/support/MemberMXBeanAdapter.java b/geode-core/src/main/java/com/gemstone/gemfire/management/internal/web/controllers/support/MemberMXBeanAdapter.java index 263ae86c8ced..f1e0d7add768 100644 --- a/geode-core/src/main/java/com/gemstone/gemfire/management/internal/web/controllers/support/MemberMXBeanAdapter.java +++ b/geode-core/src/main/java/com/gemstone/gemfire/management/internal/web/controllers/support/MemberMXBeanAdapter.java @@ -26,7 +26,6 @@ /** * The MemberMXBeanAdapter class is an abstract adapter class to the MemberMXBean interface. *

    - * @author John Blum * @see com.gemstone.gemfire.management.MemberMXBean * @since 8.0 */ diff --git a/geode-core/src/main/java/com/gemstone/gemfire/management/internal/web/domain/Link.java b/geode-core/src/main/java/com/gemstone/gemfire/management/internal/web/domain/Link.java index 92677d622f5e..be7342d06017 100644 --- a/geode-core/src/main/java/com/gemstone/gemfire/management/internal/web/domain/Link.java +++ b/geode-core/src/main/java/com/gemstone/gemfire/management/internal/web/domain/Link.java @@ -29,7 +29,6 @@ /** * The Link class models hypermedia controls/link relations. *

    - * @author John Blum * @see java.lang.Comparable * @see java.io.Serializable * @see java.net.URI diff --git a/geode-core/src/main/java/com/gemstone/gemfire/management/internal/web/domain/LinkIndex.java b/geode-core/src/main/java/com/gemstone/gemfire/management/internal/web/domain/LinkIndex.java index 5bfb529fe816..a1b063a60c15 100644 --- a/geode-core/src/main/java/com/gemstone/gemfire/management/internal/web/domain/LinkIndex.java +++ b/geode-core/src/main/java/com/gemstone/gemfire/management/internal/web/domain/LinkIndex.java @@ -33,7 +33,6 @@ /** * The LinkIndex class is abstraction for modeling an index of Links. *

    - * @author John Blum * @see javax.xml.bind.annotation.XmlRootElement * @see com.gemstone.gemfire.management.internal.web.domain.Link * @since 8.0 diff --git a/geode-core/src/main/java/com/gemstone/gemfire/management/internal/web/domain/QueryParameterSource.java b/geode-core/src/main/java/com/gemstone/gemfire/management/internal/web/domain/QueryParameterSource.java index 87c7604e09ec..8ffda44ca582 100644 --- a/geode-core/src/main/java/com/gemstone/gemfire/management/internal/web/domain/QueryParameterSource.java +++ b/geode-core/src/main/java/com/gemstone/gemfire/management/internal/web/domain/QueryParameterSource.java @@ -23,7 +23,6 @@ /** * The QueryParameterSource class encapsulates details in order to perform a query on an JMX MBean server. *

    - * @author John Blum * @see java.io.Serializable * @see javax.management.ObjectName * @see javax.management.QueryExp diff --git a/geode-core/src/main/java/com/gemstone/gemfire/management/internal/web/http/ClientHttpRequest.java b/geode-core/src/main/java/com/gemstone/gemfire/management/internal/web/http/ClientHttpRequest.java index 1b8f42ff91cf..f6e5731780fe 100644 --- a/geode-core/src/main/java/com/gemstone/gemfire/management/internal/web/http/ClientHttpRequest.java +++ b/geode-core/src/main/java/com/gemstone/gemfire/management/internal/web/http/ClientHttpRequest.java @@ -51,7 +51,6 @@ * org.springframework.http.client.ClientHttpRequest interface, which is often created by factory using a specific * HTTP client technology, like the Java HttpURLConnection or Apache's HTTP components, and so on. *

    - * @author John Blum * @see java.net.URI * @see com.gemstone.gemfire.management.internal.web.http.HttpHeader * @see com.gemstone.gemfire.management.internal.web.http.HttpMethod diff --git a/geode-core/src/main/java/com/gemstone/gemfire/management/internal/web/http/HttpHeader.java b/geode-core/src/main/java/com/gemstone/gemfire/management/internal/web/http/HttpHeader.java index 4e1750311bfb..931eaa09efde 100644 --- a/geode-core/src/main/java/com/gemstone/gemfire/management/internal/web/http/HttpHeader.java +++ b/geode-core/src/main/java/com/gemstone/gemfire/management/internal/web/http/HttpHeader.java @@ -21,7 +21,6 @@ /** * The HttpHeader enum is an enumeration of all HTTP request/response header names. *

    - * @author John Blum * @see http://www.w3.org/Protocols/rfc2616/rfc2616-sec14.html * @since 8.0 */ diff --git a/geode-core/src/main/java/com/gemstone/gemfire/management/internal/web/http/HttpMethod.java b/geode-core/src/main/java/com/gemstone/gemfire/management/internal/web/http/HttpMethod.java index 822d213339bd..197cfd78e928 100644 --- a/geode-core/src/main/java/com/gemstone/gemfire/management/internal/web/http/HttpMethod.java +++ b/geode-core/src/main/java/com/gemstone/gemfire/management/internal/web/http/HttpMethod.java @@ -19,7 +19,6 @@ /** * The HttpMethod enum is an enumeration of all HTTP methods (POST, GET, PUT, DELETE, HEADERS, etc). *

    - * @author John Blum * @since 8.0 */ @SuppressWarnings("unused") diff --git a/geode-core/src/main/java/com/gemstone/gemfire/management/internal/web/http/converter/SerializableObjectHttpMessageConverter.java b/geode-core/src/main/java/com/gemstone/gemfire/management/internal/web/http/converter/SerializableObjectHttpMessageConverter.java index 81d7f9176ecb..a5972bd5e03c 100644 --- a/geode-core/src/main/java/com/gemstone/gemfire/management/internal/web/http/converter/SerializableObjectHttpMessageConverter.java +++ b/geode-core/src/main/java/com/gemstone/gemfire/management/internal/web/http/converter/SerializableObjectHttpMessageConverter.java @@ -35,7 +35,6 @@ * The SerializableObjectHttpMessageConverter class is a Spring HttpMessageConverter for converting bytes streams to/from * Serializable Objects. *

    - * @author John Blum * @see java.io.Serializable * @see org.springframework.http.HttpInputMessage * @see org.springframework.http.HttpMessage diff --git a/geode-core/src/main/java/com/gemstone/gemfire/management/internal/web/http/support/SimpleHttpRequester.java b/geode-core/src/main/java/com/gemstone/gemfire/management/internal/web/http/support/SimpleHttpRequester.java index 7d155e66aa48..3e110c9f8e8c 100644 --- a/geode-core/src/main/java/com/gemstone/gemfire/management/internal/web/http/support/SimpleHttpRequester.java +++ b/geode-core/src/main/java/com/gemstone/gemfire/management/internal/web/http/support/SimpleHttpRequester.java @@ -27,7 +27,6 @@ * The SimpleHttpRequester class is a Adapter/facade for the Spring RestTemplate class for abstracting HTTP requests * and operations. *

    - * @author John Blum * @see org.springframework.http.client.SimpleClientHttpRequestFactory * @see org.springframework.web.client.RestTemplate * @since 8.0 diff --git a/geode-core/src/main/java/com/gemstone/gemfire/management/internal/web/io/MultipartFileAdapter.java b/geode-core/src/main/java/com/gemstone/gemfire/management/internal/web/io/MultipartFileAdapter.java index 9a06814451bb..33b354985e53 100644 --- a/geode-core/src/main/java/com/gemstone/gemfire/management/internal/web/io/MultipartFileAdapter.java +++ b/geode-core/src/main/java/com/gemstone/gemfire/management/internal/web/io/MultipartFileAdapter.java @@ -26,7 +26,6 @@ * The MultipartFileAdapter class is an Adapter built for extension in order to implement the MultipartFile interface * overriding behavior applicable to the implementation. *

    - * @author John Blum * @see org.springframework.web.multipart.MultipartFile * @since 8.0 */ diff --git a/geode-core/src/main/java/com/gemstone/gemfire/management/internal/web/io/MultipartFileResourceAdapter.java b/geode-core/src/main/java/com/gemstone/gemfire/management/internal/web/io/MultipartFileResourceAdapter.java index 0f6127260255..1d964ad5f501 100644 --- a/geode-core/src/main/java/com/gemstone/gemfire/management/internal/web/io/MultipartFileResourceAdapter.java +++ b/geode-core/src/main/java/com/gemstone/gemfire/management/internal/web/io/MultipartFileResourceAdapter.java @@ -26,7 +26,6 @@ * The MultipartFileResourceAdapter class is an Adapter for adapting the MultipartFile interface into an instance of * the Resource interface in the context where a Resource object is required instead. *

    - * @author John Blum * @see org.springframework.core.io.AbstractResource * @see org.springframework.core.io.Resource * @see org.springframework.web.multipart.MultipartFile diff --git a/geode-core/src/main/java/com/gemstone/gemfire/management/internal/web/shell/AbstractHttpOperationInvoker.java b/geode-core/src/main/java/com/gemstone/gemfire/management/internal/web/shell/AbstractHttpOperationInvoker.java index 425c77973308..76253541111d 100644 --- a/geode-core/src/main/java/com/gemstone/gemfire/management/internal/web/shell/AbstractHttpOperationInvoker.java +++ b/geode-core/src/main/java/com/gemstone/gemfire/management/internal/web/shell/AbstractHttpOperationInvoker.java @@ -63,7 +63,6 @@ * The AbstractHttpOperationInvoker class is an abstract base class encapsulating common functionality for all * HTTP-based OperationInvoker implementations. * - * @author John Blum * @see com.gemstone.gemfire.management.internal.cli.shell.Gfsh * @see com.gemstone.gemfire.management.internal.cli.shell.OperationInvoker * @see com.gemstone.gemfire.management.internal.web.shell.HttpOperationInvoker diff --git a/geode-core/src/main/java/com/gemstone/gemfire/management/internal/web/shell/HttpOperationInvoker.java b/geode-core/src/main/java/com/gemstone/gemfire/management/internal/web/shell/HttpOperationInvoker.java index 885ec01cd432..59355a8881da 100644 --- a/geode-core/src/main/java/com/gemstone/gemfire/management/internal/web/shell/HttpOperationInvoker.java +++ b/geode-core/src/main/java/com/gemstone/gemfire/management/internal/web/shell/HttpOperationInvoker.java @@ -21,7 +21,6 @@ /** * The HttpOperationInvoker interface is a marker interface for HTTP-based OperationInvokers. *

    - * @author John Blum * @see com.gemstone.gemfire.management.internal.cli.shell.OperationInvoker * @since 8.0 */ diff --git a/geode-core/src/main/java/com/gemstone/gemfire/management/internal/web/shell/MBeanAccessException.java b/geode-core/src/main/java/com/gemstone/gemfire/management/internal/web/shell/MBeanAccessException.java index 40c8ccb7c709..d9687ab8063c 100644 --- a/geode-core/src/main/java/com/gemstone/gemfire/management/internal/web/shell/MBeanAccessException.java +++ b/geode-core/src/main/java/com/gemstone/gemfire/management/internal/web/shell/MBeanAccessException.java @@ -20,7 +20,6 @@ * The MBeanAccessException class is a RuntimeException indicating that an attempt to access an MBean attribute or * invocation of an MBean operation failed. *

    - * @author John Blum * @see java.lang.RuntimeException * @since 8.0 */ diff --git a/geode-core/src/main/java/com/gemstone/gemfire/management/internal/web/shell/RestApiCallForCommandNotFoundException.java b/geode-core/src/main/java/com/gemstone/gemfire/management/internal/web/shell/RestApiCallForCommandNotFoundException.java index 24bc1f6264ff..d06fb4a34d07 100644 --- a/geode-core/src/main/java/com/gemstone/gemfire/management/internal/web/shell/RestApiCallForCommandNotFoundException.java +++ b/geode-core/src/main/java/com/gemstone/gemfire/management/internal/web/shell/RestApiCallForCommandNotFoundException.java @@ -19,7 +19,6 @@ /** * The NoRestApiCallForCommandException class... *

    - * @author John Blum * @see java.lang.RuntimeException * @since 8.0 */ diff --git a/geode-core/src/main/java/com/gemstone/gemfire/management/internal/web/shell/RestHttpOperationInvoker.java b/geode-core/src/main/java/com/gemstone/gemfire/management/internal/web/shell/RestHttpOperationInvoker.java index aba05ca82d40..59510106dd57 100644 --- a/geode-core/src/main/java/com/gemstone/gemfire/management/internal/web/shell/RestHttpOperationInvoker.java +++ b/geode-core/src/main/java/com/gemstone/gemfire/management/internal/web/shell/RestHttpOperationInvoker.java @@ -50,7 +50,6 @@ * GemFire shell command invocations into HTTP requests to a corresponding REST API call hosted by the GemFire Manager's * HTTP service using the Spring RestTemplate. * - * @author John Blum * @see com.gemstone.gemfire.internal.lang.Initable * @see com.gemstone.gemfire.management.internal.cli.shell.Gfsh * @see com.gemstone.gemfire.management.internal.cli.shell.OperationInvoker diff --git a/geode-core/src/main/java/com/gemstone/gemfire/management/internal/web/shell/SimpleHttpOperationInvoker.java b/geode-core/src/main/java/com/gemstone/gemfire/management/internal/web/shell/SimpleHttpOperationInvoker.java index c01e0c632403..7dc8c3b6a306 100644 --- a/geode-core/src/main/java/com/gemstone/gemfire/management/internal/web/shell/SimpleHttpOperationInvoker.java +++ b/geode-core/src/main/java/com/gemstone/gemfire/management/internal/web/shell/SimpleHttpOperationInvoker.java @@ -34,7 +34,6 @@ * to the GemFire Manager via HTTP. The SimpleHttpOperationInvoker uses a single URL web service endpoint to process * commands and return responses. * - * @author John Blum * @see java.net.URI * @see com.gemstone.gemfire.management.internal.cli.shell.Gfsh * @see com.gemstone.gemfire.management.internal.cli.shell.OperationInvoker diff --git a/geode-core/src/main/java/com/gemstone/gemfire/management/internal/web/shell/support/HttpInvocationHandler.java b/geode-core/src/main/java/com/gemstone/gemfire/management/internal/web/shell/support/HttpInvocationHandler.java index 038f88f865d4..7cc1364f7320 100644 --- a/geode-core/src/main/java/com/gemstone/gemfire/management/internal/web/shell/support/HttpInvocationHandler.java +++ b/geode-core/src/main/java/com/gemstone/gemfire/management/internal/web/shell/support/HttpInvocationHandler.java @@ -28,7 +28,6 @@ * The HttpInvocationHandler class is an implementation of InvocationHandler serving as a proxy that uses HTTP remoting * for the actual method invocation on the target resource. *

    - * @author John Blum * @see java.lang.reflect.InvocationHandler * @see javax.management.ObjectName * @see com.gemstone.gemfire.management.internal.web.shell.HttpOperationInvoker diff --git a/geode-core/src/main/java/com/gemstone/gemfire/management/internal/web/shell/support/HttpMBeanProxyFactory.java b/geode-core/src/main/java/com/gemstone/gemfire/management/internal/web/shell/support/HttpMBeanProxyFactory.java index ed8414da16ed..cabd907cf62f 100644 --- a/geode-core/src/main/java/com/gemstone/gemfire/management/internal/web/shell/support/HttpMBeanProxyFactory.java +++ b/geode-core/src/main/java/com/gemstone/gemfire/management/internal/web/shell/support/HttpMBeanProxyFactory.java @@ -24,7 +24,6 @@ /** * The HttpMBeanProxyFactory class is an abstract factory for creating *

    - * @author John Blum * @see java.lang.reflect.Proxy * @see com.gemstone.gemfire.management.internal.web.shell.HttpOperationInvoker * @since 8.0 diff --git a/geode-core/src/main/java/com/gemstone/gemfire/management/internal/web/util/ConvertUtils.java b/geode-core/src/main/java/com/gemstone/gemfire/management/internal/web/util/ConvertUtils.java index 10cec144c07e..86634d1dd989 100644 --- a/geode-core/src/main/java/com/gemstone/gemfire/management/internal/web/util/ConvertUtils.java +++ b/geode-core/src/main/java/com/gemstone/gemfire/management/internal/web/util/ConvertUtils.java @@ -33,7 +33,6 @@ * The ConvertUtils class is a support class for performing conversions used by the GemFire web application * and REST interface. *

    - * @author John Blum * @see com.gemstone.gemfire.management.internal.cli.CliUtil * @since 8.0 */ diff --git a/geode-core/src/main/java/com/gemstone/gemfire/management/internal/web/util/UriUtils.java b/geode-core/src/main/java/com/gemstone/gemfire/management/internal/web/util/UriUtils.java index 33b05870fc9d..98fee1b4af9f 100644 --- a/geode-core/src/main/java/com/gemstone/gemfire/management/internal/web/util/UriUtils.java +++ b/geode-core/src/main/java/com/gemstone/gemfire/management/internal/web/util/UriUtils.java @@ -26,7 +26,6 @@ /** * The UriUtils is a utility class for processing URIs and URLs. *

    - * @author John Blum * @see java.net.URLDecoder * @see java.net.URLEncoder * @since 8.0 diff --git a/geode-core/src/main/java/com/gemstone/gemfire/management/membership/ClientMembership.java b/geode-core/src/main/java/com/gemstone/gemfire/management/membership/ClientMembership.java index f266c37751de..1d64a9f1e284 100644 --- a/geode-core/src/main/java/com/gemstone/gemfire/management/membership/ClientMembership.java +++ b/geode-core/src/main/java/com/gemstone/gemfire/management/membership/ClientMembership.java @@ -22,7 +22,6 @@ * Provides utility methods for registering and unregistering * ClientMembershipListeners in this process. * - * @author rishim * @since 8.0 */ public final class ClientMembership { diff --git a/geode-core/src/main/java/com/gemstone/gemfire/management/membership/ClientMembershipEvent.java b/geode-core/src/main/java/com/gemstone/gemfire/management/membership/ClientMembershipEvent.java index a70577950bd5..6be3faa4bd76 100644 --- a/geode-core/src/main/java/com/gemstone/gemfire/management/membership/ClientMembershipEvent.java +++ b/geode-core/src/main/java/com/gemstone/gemfire/management/membership/ClientMembershipEvent.java @@ -22,7 +22,6 @@ * An event delivered to a {@link ClientMembershipListener} when this process * detects connection changes to ClientServers or clients. * - * @author rishim * @since 8.0 */ public interface ClientMembershipEvent { diff --git a/geode-core/src/main/java/com/gemstone/gemfire/management/membership/ClientMembershipListener.java b/geode-core/src/main/java/com/gemstone/gemfire/management/membership/ClientMembershipListener.java index 1d7d0738da16..4788e085588c 100644 --- a/geode-core/src/main/java/com/gemstone/gemfire/management/membership/ClientMembershipListener.java +++ b/geode-core/src/main/java/com/gemstone/gemfire/management/membership/ClientMembershipListener.java @@ -22,7 +22,6 @@ * * @see ClientMembership#registerClientMembershipListener * - * @author rishim * @since 8.0 */ public interface ClientMembershipListener { diff --git a/geode-core/src/main/java/com/gemstone/gemfire/management/membership/ClientMembershipListenerAdapter.java b/geode-core/src/main/java/com/gemstone/gemfire/management/membership/ClientMembershipListenerAdapter.java index bdac373cf348..cf148de2f579 100644 --- a/geode-core/src/main/java/com/gemstone/gemfire/management/membership/ClientMembershipListenerAdapter.java +++ b/geode-core/src/main/java/com/gemstone/gemfire/management/membership/ClientMembershipListenerAdapter.java @@ -23,7 +23,6 @@ * Applications can subclass this class and only override the methods for the * events of interest. * - * @author rishim * @since 8.0 */ public abstract class ClientMembershipListenerAdapter implements ClientMembershipListener { diff --git a/geode-core/src/main/java/com/gemstone/gemfire/management/membership/MembershipEvent.java b/geode-core/src/main/java/com/gemstone/gemfire/management/membership/MembershipEvent.java index e26344bfff13..f7e1e0a8a1f6 100644 --- a/geode-core/src/main/java/com/gemstone/gemfire/management/membership/MembershipEvent.java +++ b/geode-core/src/main/java/com/gemstone/gemfire/management/membership/MembershipEvent.java @@ -23,7 +23,6 @@ * Instances of this are delivered to a {@link MembershipListener} when a member * has joined or left the distributed system. * - * @author rishim * @since 8.0 */ public interface MembershipEvent { diff --git a/geode-core/src/main/java/com/gemstone/gemfire/management/membership/MembershipListener.java b/geode-core/src/main/java/com/gemstone/gemfire/management/membership/MembershipListener.java index 58857a35bcac..209f2fa2ea5c 100644 --- a/geode-core/src/main/java/com/gemstone/gemfire/management/membership/MembershipListener.java +++ b/geode-core/src/main/java/com/gemstone/gemfire/management/membership/MembershipListener.java @@ -22,7 +22,6 @@ * * @see com.gemstone.gemfire.management.ManagementService#addMembershipListener * - * @author rishim * @since 8.0 */ public interface MembershipListener { diff --git a/geode-core/src/main/java/com/gemstone/gemfire/management/membership/UniversalMembershipListenerAdapter.java b/geode-core/src/main/java/com/gemstone/gemfire/management/membership/UniversalMembershipListenerAdapter.java index 5d68a6001e09..fa8000780d5e 100644 --- a/geode-core/src/main/java/com/gemstone/gemfire/management/membership/UniversalMembershipListenerAdapter.java +++ b/geode-core/src/main/java/com/gemstone/gemfire/management/membership/UniversalMembershipListenerAdapter.java @@ -145,7 +145,6 @@ *

    * * - * @author rishim * @since 8.0 */ public abstract class UniversalMembershipListenerAdapter implements MembershipListener{ diff --git a/geode-core/src/main/java/com/gemstone/gemfire/memcached/GemFireMemcachedServer.java b/geode-core/src/main/java/com/gemstone/gemfire/memcached/GemFireMemcachedServer.java index ad545a51acbc..ba0b479afb86 100644 --- a/geode-core/src/main/java/com/gemstone/gemfire/memcached/GemFireMemcachedServer.java +++ b/geode-core/src/main/java/com/gemstone/gemfire/memcached/GemFireMemcachedServer.java @@ -55,7 +55,6 @@ * This class has a Main method that can be used to * start the server. * - * @author Swapnil Bawaskar * */ public class GemFireMemcachedServer { diff --git a/geode-core/src/main/java/com/gemstone/gemfire/pdx/FieldType.java b/geode-core/src/main/java/com/gemstone/gemfire/pdx/FieldType.java index a5d83ba1a537..5c7bb7750e55 100644 --- a/geode-core/src/main/java/com/gemstone/gemfire/pdx/FieldType.java +++ b/geode-core/src/main/java/com/gemstone/gemfire/pdx/FieldType.java @@ -30,7 +30,6 @@ * Some field types are always serialized with a certain number of bytes; these are called "fixed-width". * Others are serialized with a variable number of bytes; these are called "variable-width". * - * @author darrel * @since 6.6.2 */ public enum FieldType { diff --git a/geode-core/src/main/java/com/gemstone/gemfire/pdx/JSONFormatter.java b/geode-core/src/main/java/com/gemstone/gemfire/pdx/JSONFormatter.java index 4e9658e3e659..220deafec31d 100755 --- a/geode-core/src/main/java/com/gemstone/gemfire/pdx/JSONFormatter.java +++ b/geode-core/src/main/java/com/gemstone/gemfire/pdx/JSONFormatter.java @@ -46,7 +46,6 @@ * JSON objects are converted into PdxInstance * JSON arrays are converted into List. * - * @author hiteshk */ public class JSONFormatter { diff --git a/geode-core/src/main/java/com/gemstone/gemfire/pdx/NonPortableClassException.java b/geode-core/src/main/java/com/gemstone/gemfire/pdx/NonPortableClassException.java index 904631ea189b..948f97c2ea1c 100644 --- a/geode-core/src/main/java/com/gemstone/gemfire/pdx/NonPortableClassException.java +++ b/geode-core/src/main/java/com/gemstone/gemfire/pdx/NonPortableClassException.java @@ -20,7 +20,6 @@ * Thrown if "check-portability" is enabled and an attempt is made to * pdx serialize a class that is not portable to non-java platforms. * - * @author darrel * @since 6.6.2 */ public class NonPortableClassException extends PdxSerializationException { diff --git a/geode-core/src/main/java/com/gemstone/gemfire/pdx/PdxConfigurationException.java b/geode-core/src/main/java/com/gemstone/gemfire/pdx/PdxConfigurationException.java index acc70cf0c158..e19e384c3a3a 100644 --- a/geode-core/src/main/java/com/gemstone/gemfire/pdx/PdxConfigurationException.java +++ b/geode-core/src/main/java/com/gemstone/gemfire/pdx/PdxConfigurationException.java @@ -23,7 +23,6 @@ /** * Thrown when a configuration that is now allowed by PDX is detected. - * @author darrel * @since 6.6 * */ diff --git a/geode-core/src/main/java/com/gemstone/gemfire/pdx/PdxFieldAlreadyExistsException.java b/geode-core/src/main/java/com/gemstone/gemfire/pdx/PdxFieldAlreadyExistsException.java index fecdcaacbfed..62b27470cd26 100644 --- a/geode-core/src/main/java/com/gemstone/gemfire/pdx/PdxFieldAlreadyExistsException.java +++ b/geode-core/src/main/java/com/gemstone/gemfire/pdx/PdxFieldAlreadyExistsException.java @@ -29,7 +29,6 @@ *

    It can also be caused by {@link PdxWriter#writeUnreadFields(PdxUnreadFields) writeUnreadFields} * being called after a field is written. * - * @author darrel * @since 6.6 * */ diff --git a/geode-core/src/main/java/com/gemstone/gemfire/pdx/PdxFieldDoesNotExistException.java b/geode-core/src/main/java/com/gemstone/gemfire/pdx/PdxFieldDoesNotExistException.java index 0fa5f16b250f..2ca51c06c6da 100644 --- a/geode-core/src/main/java/com/gemstone/gemfire/pdx/PdxFieldDoesNotExistException.java +++ b/geode-core/src/main/java/com/gemstone/gemfire/pdx/PdxFieldDoesNotExistException.java @@ -24,7 +24,6 @@ /** * Thrown when a PDX field does not exist and the current operation requires its existence. * PDX fields exist after they are written by one of the writeXXX methods on {@link PdxWriter}. - * @author darrel * @since 6.6 * */ diff --git a/geode-core/src/main/java/com/gemstone/gemfire/pdx/PdxFieldTypeMismatchException.java b/geode-core/src/main/java/com/gemstone/gemfire/pdx/PdxFieldTypeMismatchException.java index c44acecd36c4..739746b704d6 100644 --- a/geode-core/src/main/java/com/gemstone/gemfire/pdx/PdxFieldTypeMismatchException.java +++ b/geode-core/src/main/java/com/gemstone/gemfire/pdx/PdxFieldTypeMismatchException.java @@ -29,7 +29,6 @@ * The writeXXX methods on {@link PdxWriter} define the field type. *

    This exception can also be caused by {@link WritablePdxInstance#setField(String, Object) setField} * trying to set a value whose type is not compatible with the field. - * @author darrel * @since 6.6 * */ diff --git a/geode-core/src/main/java/com/gemstone/gemfire/pdx/PdxInitializationException.java b/geode-core/src/main/java/com/gemstone/gemfire/pdx/PdxInitializationException.java index 1a176ba0de6d..0d1e655f6c23 100644 --- a/geode-core/src/main/java/com/gemstone/gemfire/pdx/PdxInitializationException.java +++ b/geode-core/src/main/java/com/gemstone/gemfire/pdx/PdxInitializationException.java @@ -24,7 +24,6 @@ /** * Thrown if the PDX system could not be successfully initialized. * The cause will give the detailed reason why initialization failed. - * @author darrel * @since 6.6 * */ diff --git a/geode-core/src/main/java/com/gemstone/gemfire/pdx/PdxInstance.java b/geode-core/src/main/java/com/gemstone/gemfire/pdx/PdxInstance.java index 7f6b8310303f..1a46d34115ab 100644 --- a/geode-core/src/main/java/com/gemstone/gemfire/pdx/PdxInstance.java +++ b/geode-core/src/main/java/com/gemstone/gemfire/pdx/PdxInstance.java @@ -48,7 +48,6 @@ * PdxReader will return a default value for the added field even though version 1 * has no knowledge of it. * - * @author darrel * @since 6.6 */ public interface PdxInstance extends java.io.Serializable { diff --git a/geode-core/src/main/java/com/gemstone/gemfire/pdx/PdxInstanceFactory.java b/geode-core/src/main/java/com/gemstone/gemfire/pdx/PdxInstanceFactory.java index 6708c9f0c3ea..88e588f437e2 100644 --- a/geode-core/src/main/java/com/gemstone/gemfire/pdx/PdxInstanceFactory.java +++ b/geode-core/src/main/java/com/gemstone/gemfire/pdx/PdxInstanceFactory.java @@ -29,7 +29,6 @@ * multiple factories or use {@link PdxInstance#createWriter()} to create subsequent instances. * Using {@link PdxInstance#createWriter()} is usually faster. * - * @author darrel * @since 6.6.2 */ public interface PdxInstanceFactory { diff --git a/geode-core/src/main/java/com/gemstone/gemfire/pdx/PdxReader.java b/geode-core/src/main/java/com/gemstone/gemfire/pdx/PdxReader.java index 7ad545908e3c..24db2f3cb7b3 100644 --- a/geode-core/src/main/java/com/gemstone/gemfire/pdx/PdxReader.java +++ b/geode-core/src/main/java/com/gemstone/gemfire/pdx/PdxReader.java @@ -31,7 +31,6 @@ *

    The methods on this interface are not thread safe so do not * call them concurrently, on the same instance, from more than one thread. * - * @author darrel * @since 6.6 */ public interface PdxReader { diff --git a/geode-core/src/main/java/com/gemstone/gemfire/pdx/PdxSerializable.java b/geode-core/src/main/java/com/gemstone/gemfire/pdx/PdxSerializable.java index e423693ffc83..c1f129410dc8 100644 --- a/geode-core/src/main/java/com/gemstone/gemfire/pdx/PdxSerializable.java +++ b/geode-core/src/main/java/com/gemstone/gemfire/pdx/PdxSerializable.java @@ -51,7 +51,6 @@ public void fromData(PdxReader in) { } * * - * @author darrel * @since 6.6 */ diff --git a/geode-core/src/main/java/com/gemstone/gemfire/pdx/PdxSerializationException.java b/geode-core/src/main/java/com/gemstone/gemfire/pdx/PdxSerializationException.java index 51ccc4b54ba4..413d656fa246 100644 --- a/geode-core/src/main/java/com/gemstone/gemfire/pdx/PdxSerializationException.java +++ b/geode-core/src/main/java/com/gemstone/gemfire/pdx/PdxSerializationException.java @@ -26,7 +26,6 @@ * or deserialization of a PDX. In most cases consult the cause for * a description of the problem. * - * @author darrel * @since 6.6 */ public class PdxSerializationException extends SerializationException { diff --git a/geode-core/src/main/java/com/gemstone/gemfire/pdx/PdxSerializer.java b/geode-core/src/main/java/com/gemstone/gemfire/pdx/PdxSerializer.java index f270752911f3..5ece0d896122 100644 --- a/geode-core/src/main/java/com/gemstone/gemfire/pdx/PdxSerializer.java +++ b/geode-core/src/main/java/com/gemstone/gemfire/pdx/PdxSerializer.java @@ -66,7 +66,6 @@ public Object fromData(Class clazz, PdxReader in) { } * * - * @author darrel * @since 6.6 */ public interface PdxSerializer { diff --git a/geode-core/src/main/java/com/gemstone/gemfire/pdx/PdxUnreadFields.java b/geode-core/src/main/java/com/gemstone/gemfire/pdx/PdxUnreadFields.java index 17654f077c91..6b7d4dc7714b 100644 --- a/geode-core/src/main/java/com/gemstone/gemfire/pdx/PdxUnreadFields.java +++ b/geode-core/src/main/java/com/gemstone/gemfire/pdx/PdxUnreadFields.java @@ -34,7 +34,6 @@ * but to reduce the performance and memory overhead of automatic preservation it is recommended * that use {@link PdxReader#readUnreadFields() readUnreadFields} if possible. * - * @author darrel * @since 6.6 * */ diff --git a/geode-core/src/main/java/com/gemstone/gemfire/pdx/PdxWriter.java b/geode-core/src/main/java/com/gemstone/gemfire/pdx/PdxWriter.java index 8f7e0f041960..64956eb24356 100644 --- a/geode-core/src/main/java/com/gemstone/gemfire/pdx/PdxWriter.java +++ b/geode-core/src/main/java/com/gemstone/gemfire/pdx/PdxWriter.java @@ -32,7 +32,6 @@ *

    All methods on this interface return itself to allow method calls to be * chained together. * - * @author darrel * @since 6.6 */ public interface PdxWriter { diff --git a/geode-core/src/main/java/com/gemstone/gemfire/pdx/ReflectionBasedAutoSerializer.java b/geode-core/src/main/java/com/gemstone/gemfire/pdx/ReflectionBasedAutoSerializer.java index 3654a40ae80f..e505ebe74363 100644 --- a/geode-core/src/main/java/com/gemstone/gemfire/pdx/ReflectionBasedAutoSerializer.java +++ b/geode-core/src/main/java/com/gemstone/gemfire/pdx/ReflectionBasedAutoSerializer.java @@ -62,8 +62,6 @@ * for additional details on the format of the parameter string. * * @since 6.6 - * @author jens - * @author darrel */ public class ReflectionBasedAutoSerializer implements PdxSerializer, Declarable { diff --git a/geode-core/src/main/java/com/gemstone/gemfire/pdx/WritablePdxInstance.java b/geode-core/src/main/java/com/gemstone/gemfire/pdx/WritablePdxInstance.java index f2f0375b42e1..6c1441d36daa 100644 --- a/geode-core/src/main/java/com/gemstone/gemfire/pdx/WritablePdxInstance.java +++ b/geode-core/src/main/java/com/gemstone/gemfire/pdx/WritablePdxInstance.java @@ -22,7 +22,6 @@ * using the {@link #setField setField} method. * To get a WritablePdxInstance call {@link PdxInstance#createWriter createWriter}. * - * @author darrel * @since 6.6 */ diff --git a/geode-core/src/main/java/com/gemstone/gemfire/pdx/internal/AutoSerializableManager.java b/geode-core/src/main/java/com/gemstone/gemfire/pdx/internal/AutoSerializableManager.java index 5d763347ecb0..11df1a49480e 100644 --- a/geode-core/src/main/java/com/gemstone/gemfire/pdx/internal/AutoSerializableManager.java +++ b/geode-core/src/main/java/com/gemstone/gemfire/pdx/internal/AutoSerializableManager.java @@ -62,8 +62,6 @@ * will have its own instance of this class. We allow instances of this class to be found * so that tests can access internal apis that are not exposed on the public ReflectionBasedAutoSerializer. * - * @author jens - * @author darrel * @since 6.6 */ @@ -2008,7 +2006,6 @@ private boolean fieldMatches(Field field, /** * Holds meta information about a class that we have auto serialized. - * @author darrel * */ public static class AutoClassInfo { diff --git a/geode-core/src/main/java/com/gemstone/gemfire/pdx/internal/ClientTypeRegistration.java b/geode-core/src/main/java/com/gemstone/gemfire/pdx/internal/ClientTypeRegistration.java index 0751eff98ce2..4b4830e45676 100644 --- a/geode-core/src/main/java/com/gemstone/gemfire/pdx/internal/ClientTypeRegistration.java +++ b/geode-core/src/main/java/com/gemstone/gemfire/pdx/internal/ClientTypeRegistration.java @@ -44,7 +44,6 @@ import com.gemstone.gemfire.pdx.PdxInitializationException; /** - * @author dsmith * */ public class ClientTypeRegistration implements TypeRegistration { diff --git a/geode-core/src/main/java/com/gemstone/gemfire/pdx/internal/DataSize.java b/geode-core/src/main/java/com/gemstone/gemfire/pdx/internal/DataSize.java index 5721978294d8..da41b11d2bf8 100644 --- a/geode-core/src/main/java/com/gemstone/gemfire/pdx/internal/DataSize.java +++ b/geode-core/src/main/java/com/gemstone/gemfire/pdx/internal/DataSize.java @@ -20,7 +20,6 @@ * This is a helper class that defines the size of the * primitive java types. * - * @author agingade * @since 6.6 */ public class DataSize { diff --git a/geode-core/src/main/java/com/gemstone/gemfire/pdx/internal/DefaultPdxField.java b/geode-core/src/main/java/com/gemstone/gemfire/pdx/internal/DefaultPdxField.java index 22d29462c324..f990a9f4aebc 100644 --- a/geode-core/src/main/java/com/gemstone/gemfire/pdx/internal/DefaultPdxField.java +++ b/geode-core/src/main/java/com/gemstone/gemfire/pdx/internal/DefaultPdxField.java @@ -24,7 +24,6 @@ /** * Used by {@link PdxInstanceImpl#equals(Object)} to act as if it has * a field whose value is always the default. - * @author darrel * */ public class DefaultPdxField extends PdxField { diff --git a/geode-core/src/main/java/com/gemstone/gemfire/pdx/internal/InternalPdxReader.java b/geode-core/src/main/java/com/gemstone/gemfire/pdx/internal/InternalPdxReader.java index 5d94c7c16acd..1dd3985b0171 100644 --- a/geode-core/src/main/java/com/gemstone/gemfire/pdx/internal/InternalPdxReader.java +++ b/geode-core/src/main/java/com/gemstone/gemfire/pdx/internal/InternalPdxReader.java @@ -25,7 +25,6 @@ /** * Adds additional methods for reading pdx fields for internal use. - * @author darrel * @since 6.6.2 */ public interface InternalPdxReader extends PdxReader { diff --git a/geode-core/src/main/java/com/gemstone/gemfire/pdx/internal/LonerTypeRegistration.java b/geode-core/src/main/java/com/gemstone/gemfire/pdx/internal/LonerTypeRegistration.java index 649c63826d0e..f49f3595d793 100644 --- a/geode-core/src/main/java/com/gemstone/gemfire/pdx/internal/LonerTypeRegistration.java +++ b/geode-core/src/main/java/com/gemstone/gemfire/pdx/internal/LonerTypeRegistration.java @@ -27,7 +27,6 @@ * loner case, we'll try to be helpful and not decide * what type registration to give the user until they actually * use it. - * @author dsmith * */ public class LonerTypeRegistration implements TypeRegistration { diff --git a/geode-core/src/main/java/com/gemstone/gemfire/pdx/internal/NullTypeRegistration.java b/geode-core/src/main/java/com/gemstone/gemfire/pdx/internal/NullTypeRegistration.java index e7da6190bdd2..096b83bfefc2 100644 --- a/geode-core/src/main/java/com/gemstone/gemfire/pdx/internal/NullTypeRegistration.java +++ b/geode-core/src/main/java/com/gemstone/gemfire/pdx/internal/NullTypeRegistration.java @@ -25,7 +25,6 @@ /** * A type registration that does nothing. Used if the user * explicity disables the type registry - * @author dsmith * */ public class NullTypeRegistration implements TypeRegistration { diff --git a/geode-core/src/main/java/com/gemstone/gemfire/pdx/internal/PdxInstanceEnum.java b/geode-core/src/main/java/com/gemstone/gemfire/pdx/internal/PdxInstanceEnum.java index 90410ee9f14a..4faf4e50515a 100644 --- a/geode-core/src/main/java/com/gemstone/gemfire/pdx/internal/PdxInstanceEnum.java +++ b/geode-core/src/main/java/com/gemstone/gemfire/pdx/internal/PdxInstanceEnum.java @@ -36,7 +36,6 @@ import com.gemstone.gemfire.pdx.internal.EnumInfo.PdxInstanceEnumInfo; /** * Used to represent an enum value as a PdxInstance - * @author darrel * @since 6.6.2 */ public class PdxInstanceEnum implements PdxInstance, Sendable, ConvertableToBytes, ComparableEnum { diff --git a/geode-core/src/main/java/com/gemstone/gemfire/pdx/internal/PdxInstanceFactoryImpl.java b/geode-core/src/main/java/com/gemstone/gemfire/pdx/internal/PdxInstanceFactoryImpl.java index 438a2972e3a6..c687feb70582 100644 --- a/geode-core/src/main/java/com/gemstone/gemfire/pdx/internal/PdxInstanceFactoryImpl.java +++ b/geode-core/src/main/java/com/gemstone/gemfire/pdx/internal/PdxInstanceFactoryImpl.java @@ -35,7 +35,6 @@ * The way it defines a PdxType is expensive since it can never figure out it is * already defined without doing an expensive check in the type registry. * We should optimize this before making this a public feature. - * @author darrel * */ public class PdxInstanceFactoryImpl implements diff --git a/geode-core/src/main/java/com/gemstone/gemfire/pdx/internal/PdxInstanceImpl.java b/geode-core/src/main/java/com/gemstone/gemfire/pdx/internal/PdxInstanceImpl.java index fa7b961ef17f..d759c49155f2 100644 --- a/geode-core/src/main/java/com/gemstone/gemfire/pdx/internal/PdxInstanceImpl.java +++ b/geode-core/src/main/java/com/gemstone/gemfire/pdx/internal/PdxInstanceImpl.java @@ -57,7 +57,6 @@ * We do not use this normal java io serialization * when serializing this class in GemFire because Sendable takes precedence over Serializable. * - * @author darrel * */ public class PdxInstanceImpl extends PdxReaderImpl implements PdxInstance, Sendable, ConvertableToBytes { diff --git a/geode-core/src/main/java/com/gemstone/gemfire/pdx/internal/PdxInstanceInputStream.java b/geode-core/src/main/java/com/gemstone/gemfire/pdx/internal/PdxInstanceInputStream.java index 40d54239d2fc..26355148ccdd 100644 --- a/geode-core/src/main/java/com/gemstone/gemfire/pdx/internal/PdxInstanceInputStream.java +++ b/geode-core/src/main/java/com/gemstone/gemfire/pdx/internal/PdxInstanceInputStream.java @@ -23,7 +23,6 @@ * Fixed width fields on this implementation do not change the position * but instead use absolute positions. * - * @author darrel * @since 6.6.2 */ public class PdxInstanceInputStream extends PdxInputStream { diff --git a/geode-core/src/main/java/com/gemstone/gemfire/pdx/internal/PdxOutputStream.java b/geode-core/src/main/java/com/gemstone/gemfire/pdx/internal/PdxOutputStream.java index 4c7bb5201039..0b362e405f3c 100644 --- a/geode-core/src/main/java/com/gemstone/gemfire/pdx/internal/PdxOutputStream.java +++ b/geode-core/src/main/java/com/gemstone/gemfire/pdx/internal/PdxOutputStream.java @@ -34,7 +34,6 @@ /** * Used by PdxWriterImpl to manage the raw data of a PDX. - * @author darrel * */ public class PdxOutputStream implements ByteBufferWriter { diff --git a/geode-core/src/main/java/com/gemstone/gemfire/pdx/internal/PdxString.java b/geode-core/src/main/java/com/gemstone/gemfire/pdx/internal/PdxString.java index 957c578ea14b..cbe76d616b70 100644 --- a/geode-core/src/main/java/com/gemstone/gemfire/pdx/internal/PdxString.java +++ b/geode-core/src/main/java/com/gemstone/gemfire/pdx/internal/PdxString.java @@ -30,7 +30,6 @@ * A class that references the String offset in PdxInstance * Used as Index keys for PdxInstances and * query evaluation for PdxInstances - * @author Tejas Nomulwar * @since 7.0 */ public class PdxString implements Comparable, Sendable { diff --git a/geode-core/src/main/java/com/gemstone/gemfire/pdx/internal/PdxUnreadData.java b/geode-core/src/main/java/com/gemstone/gemfire/pdx/internal/PdxUnreadData.java index 7d01c15aae7a..d32c90ecc047 100644 --- a/geode-core/src/main/java/com/gemstone/gemfire/pdx/internal/PdxUnreadData.java +++ b/geode-core/src/main/java/com/gemstone/gemfire/pdx/internal/PdxUnreadData.java @@ -25,7 +25,6 @@ /** * - * @author darrel * @since 6.6 */ public class PdxUnreadData implements PdxUnreadFields { diff --git a/geode-core/src/main/java/com/gemstone/gemfire/pdx/internal/PeerTypeRegistration.java b/geode-core/src/main/java/com/gemstone/gemfire/pdx/internal/PeerTypeRegistration.java index 6199f4fcd456..db55ee3a803b 100644 --- a/geode-core/src/main/java/com/gemstone/gemfire/pdx/internal/PeerTypeRegistration.java +++ b/geode-core/src/main/java/com/gemstone/gemfire/pdx/internal/PeerTypeRegistration.java @@ -66,7 +66,6 @@ import com.gemstone.gemfire.pdx.PdxRegistryMismatchException; /** - * @author dsmith * */ public class PeerTypeRegistration implements TypeRegistration { diff --git a/geode-core/src/main/java/com/gemstone/gemfire/pdx/internal/TrackingPdxReaderImpl.java b/geode-core/src/main/java/com/gemstone/gemfire/pdx/internal/TrackingPdxReaderImpl.java index 6c469e8d0748..8607fb481c19 100644 --- a/geode-core/src/main/java/com/gemstone/gemfire/pdx/internal/TrackingPdxReaderImpl.java +++ b/geode-core/src/main/java/com/gemstone/gemfire/pdx/internal/TrackingPdxReaderImpl.java @@ -29,7 +29,6 @@ * Used to track what fields are actually read by the user's code. * We want to know what fields are not read so that we can preserve them. * - * @author darrel * @since 6.6 */ public class TrackingPdxReaderImpl implements InternalPdxReader { diff --git a/geode-core/src/main/java/com/gemstone/gemfire/pdx/internal/TypeRegistration.java b/geode-core/src/main/java/com/gemstone/gemfire/pdx/internal/TypeRegistration.java index f5c5f21dca6d..cc5e16f6020b 100644 --- a/geode-core/src/main/java/com/gemstone/gemfire/pdx/internal/TypeRegistration.java +++ b/geode-core/src/main/java/com/gemstone/gemfire/pdx/internal/TypeRegistration.java @@ -23,7 +23,6 @@ /** * Interface for the part of the type registry * that interacts with remote members - * @author dsmith * */ public interface TypeRegistration { diff --git a/geode-core/src/main/java/com/gemstone/gemfire/pdx/internal/UnreadPdxType.java b/geode-core/src/main/java/com/gemstone/gemfire/pdx/internal/UnreadPdxType.java index 826ae9350a5c..19de6064fb02 100644 --- a/geode-core/src/main/java/com/gemstone/gemfire/pdx/internal/UnreadPdxType.java +++ b/geode-core/src/main/java/com/gemstone/gemfire/pdx/internal/UnreadPdxType.java @@ -23,7 +23,6 @@ * Note that instances of the class are only kept locally so I didn't add code * to serialize unreadFieldIndexes. * - * @author darrel * @since 6.6 */ public class UnreadPdxType extends PdxType { diff --git a/geode-core/src/main/java/com/gemstone/gemfire/pdx/internal/WeakConcurrentIdentityHashMap.java b/geode-core/src/main/java/com/gemstone/gemfire/pdx/internal/WeakConcurrentIdentityHashMap.java index 9981bcdd5e2d..c349535c2c5a 100644 --- a/geode-core/src/main/java/com/gemstone/gemfire/pdx/internal/WeakConcurrentIdentityHashMap.java +++ b/geode-core/src/main/java/com/gemstone/gemfire/pdx/internal/WeakConcurrentIdentityHashMap.java @@ -47,7 +47,6 @@ *

    * Note: this code came from the jdk from the package: com.sun.jmx.mbeanserver. * I modified it to use a ConcurrentMap. - * @author darrel * @since 6.6 */ class WeakConcurrentIdentityHashMap { diff --git a/geode-core/src/main/java/com/gemstone/gemfire/pdx/internal/unsafe/UnsafeWrapper.java b/geode-core/src/main/java/com/gemstone/gemfire/pdx/internal/unsafe/UnsafeWrapper.java index 0cd178394566..f957acce337e 100644 --- a/geode-core/src/main/java/com/gemstone/gemfire/pdx/internal/unsafe/UnsafeWrapper.java +++ b/geode-core/src/main/java/com/gemstone/gemfire/pdx/internal/unsafe/UnsafeWrapper.java @@ -24,7 +24,6 @@ * This class wraps the sun.misc.Unsafe class which is only available on Sun JVMs. * It is also available on other JVMs (like IBM). * - * @author darrel * */ public class UnsafeWrapper { diff --git a/geode-core/src/main/java/com/gemstone/gemfire/redis/GemFireRedisServer.java b/geode-core/src/main/java/com/gemstone/gemfire/redis/GemFireRedisServer.java index 1f7e7a9f0f0f..1114a6810f75 100644 --- a/geode-core/src/main/java/com/gemstone/gemfire/redis/GemFireRedisServer.java +++ b/geode-core/src/main/java/com/gemstone/gemfire/redis/GemFireRedisServer.java @@ -138,7 +138,6 @@ * Also, you cannot watch or unwatch keys as all keys within a GemFire * transaction are watched by default.

  • * - * @author Vitaliy Gavrilov * */ diff --git a/geode-core/src/main/java/com/gemstone/gemfire/security/AccessControl.java b/geode-core/src/main/java/com/gemstone/gemfire/security/AccessControl.java index 214d8f06949b..92e6258fedf1 100644 --- a/geode-core/src/main/java/com/gemstone/gemfire/security/AccessControl.java +++ b/geode-core/src/main/java/com/gemstone/gemfire/security/AccessControl.java @@ -36,7 +36,6 @@ * class is created for each connection from the client/peer and the * authorizeOperation method invoked before/after each operation. * - * @author Sumedh Wale * @since 5.5 */ public interface AccessControl extends CacheCallback { diff --git a/geode-core/src/main/java/com/gemstone/gemfire/security/AuthInitialize.java b/geode-core/src/main/java/com/gemstone/gemfire/security/AuthInitialize.java index d749d2fc42d1..8848063c1b15 100644 --- a/geode-core/src/main/java/com/gemstone/gemfire/security/AuthInitialize.java +++ b/geode-core/src/main/java/com/gemstone/gemfire/security/AuthInitialize.java @@ -34,7 +34,6 @@ * security-peer-auth-init system property on peers and as the * security-client-auth-init system property on clients. * - * @author Neeraj Kumar * @since 5.5 */ public interface AuthInitialize extends CacheCallback { diff --git a/geode-core/src/main/java/com/gemstone/gemfire/security/AuthenticationFailedException.java b/geode-core/src/main/java/com/gemstone/gemfire/security/AuthenticationFailedException.java index e8165f197a18..7647e5c6fa9b 100644 --- a/geode-core/src/main/java/com/gemstone/gemfire/security/AuthenticationFailedException.java +++ b/geode-core/src/main/java/com/gemstone/gemfire/security/AuthenticationFailedException.java @@ -20,7 +20,6 @@ /** * Thrown if authentication of this client/peer fails. * - * @author Sumedh Wale * @since 5.5 */ public class AuthenticationFailedException extends GemFireSecurityException { diff --git a/geode-core/src/main/java/com/gemstone/gemfire/security/AuthenticationRequiredException.java b/geode-core/src/main/java/com/gemstone/gemfire/security/AuthenticationRequiredException.java index 59288bb15868..65ed6ce202d7 100644 --- a/geode-core/src/main/java/com/gemstone/gemfire/security/AuthenticationRequiredException.java +++ b/geode-core/src/main/java/com/gemstone/gemfire/security/AuthenticationRequiredException.java @@ -21,7 +21,6 @@ * Thrown if the distributed system is in secure mode and this client/peer has * not set the security credentials. * - * @author Sumedh Wale * @since 5.5 */ public class AuthenticationRequiredException extends GemFireSecurityException { diff --git a/geode-core/src/main/java/com/gemstone/gemfire/security/Authenticator.java b/geode-core/src/main/java/com/gemstone/gemfire/security/Authenticator.java index dcf3e7cb729d..d3fa05b1d6f1 100644 --- a/geode-core/src/main/java/com/gemstone/gemfire/security/Authenticator.java +++ b/geode-core/src/main/java/com/gemstone/gemfire/security/Authenticator.java @@ -40,7 +40,6 @@ * public static Authenticator [method-name](); i.e. it should be * a zero argument function. * - * @author Sumedh Wale * @since 5.5 */ public interface Authenticator extends CacheCallback { diff --git a/geode-core/src/main/java/com/gemstone/gemfire/security/GemFireSecurityException.java b/geode-core/src/main/java/com/gemstone/gemfire/security/GemFireSecurityException.java index 1f97420ba80e..81d1a1d6cda2 100644 --- a/geode-core/src/main/java/com/gemstone/gemfire/security/GemFireSecurityException.java +++ b/geode-core/src/main/java/com/gemstone/gemfire/security/GemFireSecurityException.java @@ -23,7 +23,6 @@ * The base class for all com.gemstone.gemfire.security package related * exceptions. * - * @author Sumedh Wale * @since 5.5 */ public class GemFireSecurityException extends GemFireException { diff --git a/geode-core/src/main/java/com/gemstone/gemfire/security/NotAuthorizedException.java b/geode-core/src/main/java/com/gemstone/gemfire/security/NotAuthorizedException.java index c6165a6f6455..7364586d4c31 100644 --- a/geode-core/src/main/java/com/gemstone/gemfire/security/NotAuthorizedException.java +++ b/geode-core/src/main/java/com/gemstone/gemfire/security/NotAuthorizedException.java @@ -22,7 +22,6 @@ /** * Thrown when a client/peer is unauthorized to perform a requested operation. * - * @author Neeraj Kumar * @since 5.5 */ public class NotAuthorizedException extends GemFireSecurityException { diff --git a/geode-core/src/test/java/batterytest/greplogs/ExpectedStrings.java b/geode-core/src/test/java/batterytest/greplogs/ExpectedStrings.java index 6abb29e8878a..219c87e53c1b 100644 --- a/geode-core/src/test/java/batterytest/greplogs/ExpectedStrings.java +++ b/geode-core/src/test/java/batterytest/greplogs/ExpectedStrings.java @@ -24,7 +24,6 @@ import java.util.regex.Pattern; /** - * @author kbanks * */ public class ExpectedStrings { diff --git a/geode-core/src/test/java/cacheRunner/Portfolio.java b/geode-core/src/test/java/cacheRunner/Portfolio.java index 5f81737030b0..fb0de204bc13 100644 --- a/geode-core/src/test/java/cacheRunner/Portfolio.java +++ b/geode-core/src/test/java/cacheRunner/Portfolio.java @@ -34,7 +34,6 @@ * this class is Declarable, we can describe instances of * it in a GemFire cache.xml file. * - * @author GemStone Systems, Inc. * @since 4.0 */ public class Portfolio implements Declarable, Serializable { diff --git a/geode-core/src/test/java/cacheRunner/Position.java b/geode-core/src/test/java/cacheRunner/Position.java index 13b2efaef996..24d044a51d3b 100644 --- a/geode-core/src/test/java/cacheRunner/Position.java +++ b/geode-core/src/test/java/cacheRunner/Position.java @@ -31,7 +31,6 @@ * this class is Declarable, we can describe instances of * it in a GemFire cache.xml file. * - * @author GemStone Systems, Inc. * @since 4.0 */ public class Position implements Declarable, Serializable { diff --git a/geode-core/src/test/java/com/company/app/Customer.java b/geode-core/src/test/java/com/company/app/Customer.java index d84a65cf5c00..e9c4131d7f5a 100644 --- a/geode-core/src/test/java/com/company/app/Customer.java +++ b/geode-core/src/test/java/com/company/app/Customer.java @@ -21,7 +21,6 @@ /** * A class that is Declarable * - * @author David Whitlock * @since 3.2.1 */ public class Customer implements Declarable { diff --git a/geode-core/src/test/java/com/company/app/DBLoader.java b/geode-core/src/test/java/com/company/app/DBLoader.java index ac08f3060cf3..a8034d938515 100644 --- a/geode-core/src/test/java/com/company/app/DBLoader.java +++ b/geode-core/src/test/java/com/company/app/DBLoader.java @@ -23,7 +23,6 @@ /** * A CacheLoader that is Declarable * - * @author David Whitlock * @since 3.2.1 */ public class DBLoader implements CacheLoader, Declarable { diff --git a/geode-core/src/test/java/com/company/app/OrdersCacheListener.java b/geode-core/src/test/java/com/company/app/OrdersCacheListener.java index 885dfb784f4d..8c4c67f93c05 100755 --- a/geode-core/src/test/java/com/company/app/OrdersCacheListener.java +++ b/geode-core/src/test/java/com/company/app/OrdersCacheListener.java @@ -21,7 +21,6 @@ /** * com.company.app.OrdersCacheListener. Cache listener impl for CacheXmlxxTest * - * @author Kirk Lund * @since 5.0 */ public class OrdersCacheListener implements CacheListener, Declarable { diff --git a/geode-core/src/test/java/com/company/data/DatabaseLoader.java b/geode-core/src/test/java/com/company/data/DatabaseLoader.java index db3e10c7b4d4..6e070f432497 100644 --- a/geode-core/src/test/java/com/company/data/DatabaseLoader.java +++ b/geode-core/src/test/java/com/company/data/DatabaseLoader.java @@ -21,7 +21,6 @@ /** * A CacheLoader that is Declarable * - * @author David Whitlock * @since 3.2.1 */ public class DatabaseLoader implements CacheLoader, Declarable { diff --git a/geode-core/src/test/java/com/company/data/MyDeclarable.java b/geode-core/src/test/java/com/company/data/MyDeclarable.java index 7a4f0e32f6b4..d6e24bd8aebe 100644 --- a/geode-core/src/test/java/com/company/data/MyDeclarable.java +++ b/geode-core/src/test/java/com/company/data/MyDeclarable.java @@ -21,7 +21,6 @@ /** * A Declarable object * - * @author David Whitlock * @since 3.2.1 */ public class MyDeclarable implements Declarable { diff --git a/geode-core/src/test/java/com/company/data/MySizer.java b/geode-core/src/test/java/com/company/data/MySizer.java index 8b485c249289..6f624f33d791 100644 --- a/geode-core/src/test/java/com/company/data/MySizer.java +++ b/geode-core/src/test/java/com/company/data/MySizer.java @@ -18,7 +18,6 @@ /** * A Declarable ObjectSizer for used for XML testing * - * @author Mitch Thomas * @since 5.0 */ import java.util.Properties; diff --git a/geode-core/src/test/java/com/company/data/MyTransactionListener.java b/geode-core/src/test/java/com/company/data/MyTransactionListener.java index c0260da33695..6d57e3834f1b 100644 --- a/geode-core/src/test/java/com/company/data/MyTransactionListener.java +++ b/geode-core/src/test/java/com/company/data/MyTransactionListener.java @@ -21,7 +21,6 @@ /** * A TransactionListener that is Declarable * - * @author Mitch Thomas * @since 4.0 */ public class MyTransactionListener implements TransactionListener, Declarable { diff --git a/geode-core/src/test/java/com/examples/LinkNode.java b/geode-core/src/test/java/com/examples/LinkNode.java index b16c118475d9..29a3aee04090 100644 --- a/geode-core/src/test/java/com/examples/LinkNode.java +++ b/geode-core/src/test/java/com/examples/LinkNode.java @@ -21,7 +21,6 @@ * non-Serializable objects handle back references * correctly. * - * @author David Whitlock * * @since 3.5 */ diff --git a/geode-core/src/test/java/com/examples/SuperClass.java b/geode-core/src/test/java/com/examples/SuperClass.java index 4b59ca229628..7b99ad5e8a92 100644 --- a/geode-core/src/test/java/com/examples/SuperClass.java +++ b/geode-core/src/test/java/com/examples/SuperClass.java @@ -22,7 +22,6 @@ * The super class of another class. Neither is * Serializable. * - * @author David Whitlock * * @since 3.5 */ diff --git a/geode-core/src/test/java/com/examples/TestObject.java b/geode-core/src/test/java/com/examples/TestObject.java index 0eb5d4a255c7..fb72dec993fe 100644 --- a/geode-core/src/test/java/com/examples/TestObject.java +++ b/geode-core/src/test/java/com/examples/TestObject.java @@ -22,7 +22,6 @@ * (this test no longer exists?) * that must be in a non-com.gemstone package. * - * @author David Whitlock * * @since 3.5 */ diff --git a/geode-core/src/test/java/com/examples/ds/PutDataSerializables.java b/geode-core/src/test/java/com/examples/ds/PutDataSerializables.java index 2a5e8910fabb..65541c861b3e 100644 --- a/geode-core/src/test/java/com/examples/ds/PutDataSerializables.java +++ b/geode-core/src/test/java/com/examples/ds/PutDataSerializables.java @@ -27,7 +27,6 @@ * Among other things, this is used to test bug 31573. * * @since 3.5 - * @author David Whitlock */ public class PutDataSerializables { diff --git a/geode-core/src/test/java/com/examples/snapshot/MyObject.java b/geode-core/src/test/java/com/examples/snapshot/MyObject.java index 2a26b1aa2c69..1a7c0f3f95e4 100644 --- a/geode-core/src/test/java/com/examples/snapshot/MyObject.java +++ b/geode-core/src/test/java/com/examples/snapshot/MyObject.java @@ -23,7 +23,6 @@ /** * Data class for testing snapshots, cannot be located in com.gemstone.*. * - * @author bakera */ public class MyObject implements Serializable { protected long f1; diff --git a/geode-core/src/test/java/com/gemstone/gemfire/CopyJUnitTest.java b/geode-core/src/test/java/com/gemstone/gemfire/CopyJUnitTest.java index 1af9f713278d..11aa2fd5e85a 100644 --- a/geode-core/src/test/java/com/gemstone/gemfire/CopyJUnitTest.java +++ b/geode-core/src/test/java/com/gemstone/gemfire/CopyJUnitTest.java @@ -37,7 +37,6 @@ * Tests the functionality of the {@link CopyHelper#copy} method * and the builtin copy-on-get Cache functions. * - * @author Darrel Schneider * @since 4.0 * */ diff --git a/geode-core/src/test/java/com/gemstone/gemfire/GemFireTestCase.java b/geode-core/src/test/java/com/gemstone/gemfire/GemFireTestCase.java index 885799282a47..5e55ac04a477 100644 --- a/geode-core/src/test/java/com/gemstone/gemfire/GemFireTestCase.java +++ b/geode-core/src/test/java/com/gemstone/gemfire/GemFireTestCase.java @@ -33,7 +33,6 @@ * has setUp() and tearDown() methods that create and initialize a * GemFire connection. * - * @author davidw * */ public abstract class GemFireTestCase { diff --git a/geode-core/src/test/java/com/gemstone/gemfire/Invariant.java b/geode-core/src/test/java/com/gemstone/gemfire/Invariant.java index 42285d1838c0..1c712d2fa5d6 100644 --- a/geode-core/src/test/java/com/gemstone/gemfire/Invariant.java +++ b/geode-core/src/test/java/com/gemstone/gemfire/Invariant.java @@ -18,7 +18,6 @@ /** * Interface used for testing an invariant - * @author ericz * */ public interface Invariant { diff --git a/geode-core/src/test/java/com/gemstone/gemfire/InvariantResult.java b/geode-core/src/test/java/com/gemstone/gemfire/InvariantResult.java index efc891686878..272e02644713 100644 --- a/geode-core/src/test/java/com/gemstone/gemfire/InvariantResult.java +++ b/geode-core/src/test/java/com/gemstone/gemfire/InvariantResult.java @@ -19,7 +19,6 @@ /** * Used as result of verifying an Invariant * @see Invariant -* @author ericz * */ public class InvariantResult { diff --git a/geode-core/src/test/java/com/gemstone/gemfire/JtaNoninvolvementJUnitTest.java b/geode-core/src/test/java/com/gemstone/gemfire/JtaNoninvolvementJUnitTest.java index cebcd92b5fc7..0ee17c5436a6 100644 --- a/geode-core/src/test/java/com/gemstone/gemfire/JtaNoninvolvementJUnitTest.java +++ b/geode-core/src/test/java/com/gemstone/gemfire/JtaNoninvolvementJUnitTest.java @@ -40,7 +40,6 @@ /** * Ensure that the ignoreJTA Region setting works * - * @author Bruce Schuchardt * @since 4.1.1 */ @SuppressWarnings("deprecation") diff --git a/geode-core/src/test/java/com/gemstone/gemfire/StatisticsTypeJUnitTest.java b/geode-core/src/test/java/com/gemstone/gemfire/StatisticsTypeJUnitTest.java index 2ae15233a307..1d221a27a8b0 100644 --- a/geode-core/src/test/java/com/gemstone/gemfire/StatisticsTypeJUnitTest.java +++ b/geode-core/src/test/java/com/gemstone/gemfire/StatisticsTypeJUnitTest.java @@ -27,7 +27,6 @@ /** * Tests the functionality of the {@link StatisticsType} class. * - * @author David Whitlock * */ @Category(IntegrationTest.class) diff --git a/geode-core/src/test/java/com/gemstone/gemfire/TXExpiryJUnitTest.java b/geode-core/src/test/java/com/gemstone/gemfire/TXExpiryJUnitTest.java index d3968779860b..937d8e438563 100644 --- a/geode-core/src/test/java/com/gemstone/gemfire/TXExpiryJUnitTest.java +++ b/geode-core/src/test/java/com/gemstone/gemfire/TXExpiryJUnitTest.java @@ -58,7 +58,6 @@ /** * Tests transaction expiration functionality * - * @author Mitch Thomas * @since 4.0 * */ diff --git a/geode-core/src/test/java/com/gemstone/gemfire/TXJUnitTest.java b/geode-core/src/test/java/com/gemstone/gemfire/TXJUnitTest.java index 625d7be18611..ff24d24dad07 100644 --- a/geode-core/src/test/java/com/gemstone/gemfire/TXJUnitTest.java +++ b/geode-core/src/test/java/com/gemstone/gemfire/TXJUnitTest.java @@ -104,7 +104,6 @@ /** * Tests basic transaction functionality * - * @author Darrel Schneider * @since 4.0 * */ diff --git a/geode-core/src/test/java/com/gemstone/gemfire/TXWriterOOMEJUnitTest.java b/geode-core/src/test/java/com/gemstone/gemfire/TXWriterOOMEJUnitTest.java index 5ba0bd8ab865..43439532cf3f 100644 --- a/geode-core/src/test/java/com/gemstone/gemfire/TXWriterOOMEJUnitTest.java +++ b/geode-core/src/test/java/com/gemstone/gemfire/TXWriterOOMEJUnitTest.java @@ -34,7 +34,6 @@ * test suite to fail due to suspect strings from SystemFailure Watchdog sending * output to STDERR. * - * @author Kirk Lund */ @Category(IntegrationTest.class) public class TXWriterOOMEJUnitTest extends TXWriterTestCase { diff --git a/geode-core/src/test/java/com/gemstone/gemfire/TXWriterTestCase.java b/geode-core/src/test/java/com/gemstone/gemfire/TXWriterTestCase.java index c14639524d8a..1dff222eaabe 100644 --- a/geode-core/src/test/java/com/gemstone/gemfire/TXWriterTestCase.java +++ b/geode-core/src/test/java/com/gemstone/gemfire/TXWriterTestCase.java @@ -44,7 +44,6 @@ /** * Extracted from TXWriterJUnitTest to share with TXWriterOOMEJUnitTest. * - * @author Kirk Lund */ @SuppressWarnings("deprecation") public class TXWriterTestCase { diff --git a/geode-core/src/test/java/com/gemstone/gemfire/TestDataSerializer.java b/geode-core/src/test/java/com/gemstone/gemfire/TestDataSerializer.java index 57e7717356f5..1eba6ca5a916 100644 --- a/geode-core/src/test/java/com/gemstone/gemfire/TestDataSerializer.java +++ b/geode-core/src/test/java/com/gemstone/gemfire/TestDataSerializer.java @@ -28,7 +28,6 @@ import com.gemstone.gemfire.internal.cache.tier.sockets.DataSerializerPropogationDUnitTest; /** - * @author ashetkar * */ public class TestDataSerializer extends DataSerializer { diff --git a/geode-core/src/test/java/com/gemstone/gemfire/UnitTestDoclet.java b/geode-core/src/test/java/com/gemstone/gemfire/UnitTestDoclet.java index 508045e870bd..e238e327f9e8 100644 --- a/geode-core/src/test/java/com/gemstone/gemfire/UnitTestDoclet.java +++ b/geode-core/src/test/java/com/gemstone/gemfire/UnitTestDoclet.java @@ -36,7 +36,6 @@ * * @see com.sun.javadoc.Doclet * - * @author David Whitlock * * @since 3.0 */ diff --git a/geode-core/src/test/java/com/gemstone/gemfire/admin/internal/BindDistributedSystemJUnitTest.java b/geode-core/src/test/java/com/gemstone/gemfire/admin/internal/BindDistributedSystemJUnitTest.java index e95e5ef4e7fe..26d1a22521f4 100755 --- a/geode-core/src/test/java/com/gemstone/gemfire/admin/internal/BindDistributedSystemJUnitTest.java +++ b/geode-core/src/test/java/com/gemstone/gemfire/admin/internal/BindDistributedSystemJUnitTest.java @@ -41,7 +41,6 @@ /** * Tests {@link com.gemstone.gemfire.admin.internal.AdminDistributedSystemImpl}. * - * @author Kirk Lund * @created August 30, 2004 * @since 3.5 */ diff --git a/geode-core/src/test/java/com/gemstone/gemfire/admin/internal/CacheHealthEvaluatorJUnitTest.java b/geode-core/src/test/java/com/gemstone/gemfire/admin/internal/CacheHealthEvaluatorJUnitTest.java index e08dc37fec8f..bd6ce0919ca6 100644 --- a/geode-core/src/test/java/com/gemstone/gemfire/admin/internal/CacheHealthEvaluatorJUnitTest.java +++ b/geode-core/src/test/java/com/gemstone/gemfire/admin/internal/CacheHealthEvaluatorJUnitTest.java @@ -33,7 +33,6 @@ /** * Contains simple tests for the {@link CacheHealthEvaluator} * - * @author David Whitlock * * @since 3.5 */ diff --git a/geode-core/src/test/java/com/gemstone/gemfire/admin/internal/DistributedSystemTestCase.java b/geode-core/src/test/java/com/gemstone/gemfire/admin/internal/DistributedSystemTestCase.java index d51c1745149b..8dae015c70ae 100755 --- a/geode-core/src/test/java/com/gemstone/gemfire/admin/internal/DistributedSystemTestCase.java +++ b/geode-core/src/test/java/com/gemstone/gemfire/admin/internal/DistributedSystemTestCase.java @@ -26,7 +26,6 @@ /** * Provides common setUp and tearDown for testing the Admin API. * - * @author Kirk Lund * @since 3.5 */ public abstract class DistributedSystemTestCase { diff --git a/geode-core/src/test/java/com/gemstone/gemfire/admin/internal/HealthEvaluatorTestCase.java b/geode-core/src/test/java/com/gemstone/gemfire/admin/internal/HealthEvaluatorTestCase.java index 45ef98250705..0c44e080c796 100644 --- a/geode-core/src/test/java/com/gemstone/gemfire/admin/internal/HealthEvaluatorTestCase.java +++ b/geode-core/src/test/java/com/gemstone/gemfire/admin/internal/HealthEvaluatorTestCase.java @@ -29,7 +29,6 @@ * com.gemstone.gemfire.admin.internal.AbstractHealthEvaluator health * evaluator} classes. * - * @author David Whitlock * * @since 3.5 */ diff --git a/geode-core/src/test/java/com/gemstone/gemfire/admin/internal/MemberHealthEvaluatorJUnitTest.java b/geode-core/src/test/java/com/gemstone/gemfire/admin/internal/MemberHealthEvaluatorJUnitTest.java index 1fc56b4bb047..60d0a3ab749b 100644 --- a/geode-core/src/test/java/com/gemstone/gemfire/admin/internal/MemberHealthEvaluatorJUnitTest.java +++ b/geode-core/src/test/java/com/gemstone/gemfire/admin/internal/MemberHealthEvaluatorJUnitTest.java @@ -36,7 +36,6 @@ /** * Contains simple tests for the {@link MemberHealthEvaluator}. * - * @author David Whitlock * * @since 3.5 */ diff --git a/geode-core/src/test/java/com/gemstone/gemfire/cache/AttributesFactoryJUnitTest.java b/geode-core/src/test/java/com/gemstone/gemfire/cache/AttributesFactoryJUnitTest.java index 76c004bb94af..a1d374f53705 100644 --- a/geode-core/src/test/java/com/gemstone/gemfire/cache/AttributesFactoryJUnitTest.java +++ b/geode-core/src/test/java/com/gemstone/gemfire/cache/AttributesFactoryJUnitTest.java @@ -31,7 +31,6 @@ /** * Tests the functionality of the {@link AttributesFactory} class. * - * @author David Whitlock * * @since 3.0 */ diff --git a/geode-core/src/test/java/com/gemstone/gemfire/cache/Bug42039JUnitTest.java b/geode-core/src/test/java/com/gemstone/gemfire/cache/Bug42039JUnitTest.java index dc023a9446ba..e3be06696235 100644 --- a/geode-core/src/test/java/com/gemstone/gemfire/cache/Bug42039JUnitTest.java +++ b/geode-core/src/test/java/com/gemstone/gemfire/cache/Bug42039JUnitTest.java @@ -37,7 +37,6 @@ * with a locator configured. Since the locator is not running * expect the connect to fail. * See if threads leak because of the repeated calls - * @author Darrel Schneider * @since 5.0 */ @Category(IntegrationTest.class) diff --git a/geode-core/src/test/java/com/gemstone/gemfire/cache/Bug52289JUnitTest.java b/geode-core/src/test/java/com/gemstone/gemfire/cache/Bug52289JUnitTest.java index 6e04b2b402d2..0ba5154157b7 100644 --- a/geode-core/src/test/java/com/gemstone/gemfire/cache/Bug52289JUnitTest.java +++ b/geode-core/src/test/java/com/gemstone/gemfire/cache/Bug52289JUnitTest.java @@ -42,7 +42,6 @@ * This test and its corrections can be removed after the release of JDK * 1.8.0u60 if we choose to not support 1.8.0u20 - 1.8.0u45 inclusive. * - * @author jbarrett@pivotal.io * * @since 8.2 * diff --git a/geode-core/src/test/java/com/gemstone/gemfire/cache/CacheListenerJUnitTest.java b/geode-core/src/test/java/com/gemstone/gemfire/cache/CacheListenerJUnitTest.java index 523dd6bf7ec4..00ad6bcbafa5 100644 --- a/geode-core/src/test/java/com/gemstone/gemfire/cache/CacheListenerJUnitTest.java +++ b/geode-core/src/test/java/com/gemstone/gemfire/cache/CacheListenerJUnitTest.java @@ -34,7 +34,6 @@ * NOTE: these tests using a loner DistributedSystem and local scope regions * so all the listener features tested are for local listeners being invoked * for local operations. - * @author Darrel Schneider * @since 5.0 */ @Category(IntegrationTest.class) diff --git a/geode-core/src/test/java/com/gemstone/gemfire/cache/CacheRegionClearStatsDUnitTest.java b/geode-core/src/test/java/com/gemstone/gemfire/cache/CacheRegionClearStatsDUnitTest.java index 88a32a3f52b5..34a0b5cba8a6 100755 --- a/geode-core/src/test/java/com/gemstone/gemfire/cache/CacheRegionClearStatsDUnitTest.java +++ b/geode-core/src/test/java/com/gemstone/gemfire/cache/CacheRegionClearStatsDUnitTest.java @@ -33,7 +33,6 @@ /** * verifies the count of clear operation * - * @author aingle */ public class CacheRegionClearStatsDUnitTest extends DistributedTestCase { /** the cache */ diff --git a/geode-core/src/test/java/com/gemstone/gemfire/cache/ClientHelper.java b/geode-core/src/test/java/com/gemstone/gemfire/cache/ClientHelper.java index a9adcf86e9c2..c3f9a01fcb39 100644 --- a/geode-core/src/test/java/com/gemstone/gemfire/cache/ClientHelper.java +++ b/geode-core/src/test/java/com/gemstone/gemfire/cache/ClientHelper.java @@ -30,7 +30,6 @@ * bridge client and connection proxies used by a * region. * - * @author dsmith * */ public class ClientHelper { diff --git a/geode-core/src/test/java/com/gemstone/gemfire/cache/ConnectionPoolAndLoaderDUnitTest.java b/geode-core/src/test/java/com/gemstone/gemfire/cache/ConnectionPoolAndLoaderDUnitTest.java index ee382abb1702..ac20ce073f65 100644 --- a/geode-core/src/test/java/com/gemstone/gemfire/cache/ConnectionPoolAndLoaderDUnitTest.java +++ b/geode-core/src/test/java/com/gemstone/gemfire/cache/ConnectionPoolAndLoaderDUnitTest.java @@ -36,7 +36,6 @@ /** * This tests cases where we have both * a connection pool and a bridge loader. - * @author dsmith * */ public class ConnectionPoolAndLoaderDUnitTest extends CacheTestCase { diff --git a/geode-core/src/test/java/com/gemstone/gemfire/cache/PoolManagerJUnitTest.java b/geode-core/src/test/java/com/gemstone/gemfire/cache/PoolManagerJUnitTest.java index 47017bc8603a..12628915c655 100644 --- a/geode-core/src/test/java/com/gemstone/gemfire/cache/PoolManagerJUnitTest.java +++ b/geode-core/src/test/java/com/gemstone/gemfire/cache/PoolManagerJUnitTest.java @@ -34,7 +34,6 @@ /** * Tests PoolManager - * @author darrel * @since 5.7 */ @Category(IntegrationTest.class) diff --git a/geode-core/src/test/java/com/gemstone/gemfire/cache/ProxyJUnitTest.java b/geode-core/src/test/java/com/gemstone/gemfire/cache/ProxyJUnitTest.java index 373c10d79f3e..cb11b6f5b627 100644 --- a/geode-core/src/test/java/com/gemstone/gemfire/cache/ProxyJUnitTest.java +++ b/geode-core/src/test/java/com/gemstone/gemfire/cache/ProxyJUnitTest.java @@ -38,7 +38,6 @@ /** * Unit test for basic DataPolicy.EMPTY feature. * NOTE: these tests using a loner DistributedSystem and local scope regions - * @author Darrel Schneider * @since 5.0 */ @Category(IntegrationTest.class) diff --git a/geode-core/src/test/java/com/gemstone/gemfire/cache/RegionFactoryJUnitTest.java b/geode-core/src/test/java/com/gemstone/gemfire/cache/RegionFactoryJUnitTest.java index 2726bce49c37..e49e23a447cd 100644 --- a/geode-core/src/test/java/com/gemstone/gemfire/cache/RegionFactoryJUnitTest.java +++ b/geode-core/src/test/java/com/gemstone/gemfire/cache/RegionFactoryJUnitTest.java @@ -47,7 +47,6 @@ /** * Unit test for the RegionFactory class - * @author Mitch Thomas * @since 5.0 */ @Category(IntegrationTest.class) diff --git a/geode-core/src/test/java/com/gemstone/gemfire/cache/client/ClientCacheFactoryJUnitTest.java b/geode-core/src/test/java/com/gemstone/gemfire/cache/client/ClientCacheFactoryJUnitTest.java index 6c190188bc22..521dc516f997 100644 --- a/geode-core/src/test/java/com/gemstone/gemfire/cache/client/ClientCacheFactoryJUnitTest.java +++ b/geode-core/src/test/java/com/gemstone/gemfire/cache/client/ClientCacheFactoryJUnitTest.java @@ -57,7 +57,6 @@ /** * Unit test for the ClientCacheFactory class - * @author darrel * @since 6.5 */ @FixMethodOrder(NAME_ASCENDING) diff --git a/geode-core/src/test/java/com/gemstone/gemfire/cache/client/ClientRegionFactoryJUnitTest.java b/geode-core/src/test/java/com/gemstone/gemfire/cache/client/ClientRegionFactoryJUnitTest.java index ac46296722bc..502eccf14125 100644 --- a/geode-core/src/test/java/com/gemstone/gemfire/cache/client/ClientRegionFactoryJUnitTest.java +++ b/geode-core/src/test/java/com/gemstone/gemfire/cache/client/ClientRegionFactoryJUnitTest.java @@ -54,7 +54,6 @@ /** * Unit test for the ClientRegionFactory class - * @author darrel * @since 6.5 */ @Category(IntegrationTest.class) diff --git a/geode-core/src/test/java/com/gemstone/gemfire/cache/client/ClientServerRegisterInterestsDUnitTest.java b/geode-core/src/test/java/com/gemstone/gemfire/cache/client/ClientServerRegisterInterestsDUnitTest.java index 58844b09c48e..d4881a0b9836 100644 --- a/geode-core/src/test/java/com/gemstone/gemfire/cache/client/ClientServerRegisterInterestsDUnitTest.java +++ b/geode-core/src/test/java/com/gemstone/gemfire/cache/client/ClientServerRegisterInterestsDUnitTest.java @@ -44,7 +44,6 @@ * The ClientServerRegisterInterestsDUnitTest class is a test suite of test cases testing the interaction between a * client and a server in a Register Interests scenario. * - * @author John Blum * @see com.gemstone.gemfire.test.dunit.DistributedTestCase * @since 8.0 */ diff --git a/geode-core/src/test/java/com/gemstone/gemfire/cache/client/internal/AutoConnectionSourceDUnitTest.java b/geode-core/src/test/java/com/gemstone/gemfire/cache/client/internal/AutoConnectionSourceDUnitTest.java index 03368de781d0..3e49284fac90 100644 --- a/geode-core/src/test/java/com/gemstone/gemfire/cache/client/internal/AutoConnectionSourceDUnitTest.java +++ b/geode-core/src/test/java/com/gemstone/gemfire/cache/client/internal/AutoConnectionSourceDUnitTest.java @@ -48,7 +48,6 @@ * Tests cases that are particular for the auto connection source * - dynamically discovering servers, locators, handling * locator disappearance, etc. - * @author dsmith * */ public class AutoConnectionSourceDUnitTest extends LocatorTestBase { diff --git a/geode-core/src/test/java/com/gemstone/gemfire/cache/client/internal/AutoConnectionSourceImplJUnitTest.java b/geode-core/src/test/java/com/gemstone/gemfire/cache/client/internal/AutoConnectionSourceImplJUnitTest.java index d0b5f9f32c07..8deedc18491c 100644 --- a/geode-core/src/test/java/com/gemstone/gemfire/cache/client/internal/AutoConnectionSourceImplJUnitTest.java +++ b/geode-core/src/test/java/com/gemstone/gemfire/cache/client/internal/AutoConnectionSourceImplJUnitTest.java @@ -61,7 +61,6 @@ import com.gemstone.gemfire.test.junit.categories.IntegrationTest; /** - * @author dsmith * */ @SuppressWarnings("deprecation") diff --git a/geode-core/src/test/java/com/gemstone/gemfire/cache/client/internal/CacheServerSSLConnectionDUnitTest.java b/geode-core/src/test/java/com/gemstone/gemfire/cache/client/internal/CacheServerSSLConnectionDUnitTest.java index 5fa4fc4d4ee5..f20588c5161c 100644 --- a/geode-core/src/test/java/com/gemstone/gemfire/cache/client/internal/CacheServerSSLConnectionDUnitTest.java +++ b/geode-core/src/test/java/com/gemstone/gemfire/cache/client/internal/CacheServerSSLConnectionDUnitTest.java @@ -41,7 +41,6 @@ /** * Tests cacheserver ssl support added. See https://svn.gemstone.com/trac/gemfire/ticket/48995 for details - * @author tushark * */ public class CacheServerSSLConnectionDUnitTest extends DistributedTestCase { diff --git a/geode-core/src/test/java/com/gemstone/gemfire/cache/client/internal/ConnectionPoolImplJUnitTest.java b/geode-core/src/test/java/com/gemstone/gemfire/cache/client/internal/ConnectionPoolImplJUnitTest.java index 6cebdf75a24b..532f51412aac 100644 --- a/geode-core/src/test/java/com/gemstone/gemfire/cache/client/internal/ConnectionPoolImplJUnitTest.java +++ b/geode-core/src/test/java/com/gemstone/gemfire/cache/client/internal/ConnectionPoolImplJUnitTest.java @@ -41,7 +41,6 @@ import com.gemstone.gemfire.test.junit.categories.IntegrationTest; /** - * @author dsmith * */ @Category(IntegrationTest.class) diff --git a/geode-core/src/test/java/com/gemstone/gemfire/cache/client/internal/LocatorLoadBalancingDUnitTest.java b/geode-core/src/test/java/com/gemstone/gemfire/cache/client/internal/LocatorLoadBalancingDUnitTest.java index 6f4d40410696..9ef87d275068 100644 --- a/geode-core/src/test/java/com/gemstone/gemfire/cache/client/internal/LocatorLoadBalancingDUnitTest.java +++ b/geode-core/src/test/java/com/gemstone/gemfire/cache/client/internal/LocatorLoadBalancingDUnitTest.java @@ -57,7 +57,6 @@ import com.gemstone.gemfire.test.dunit.WaitCriterion; /** - * @author dsmith * */ public class LocatorLoadBalancingDUnitTest extends LocatorTestBase { diff --git a/geode-core/src/test/java/com/gemstone/gemfire/cache/client/internal/LocatorTestBase.java b/geode-core/src/test/java/com/gemstone/gemfire/cache/client/internal/LocatorTestBase.java index a89d64896bb5..04132be7d8e8 100644 --- a/geode-core/src/test/java/com/gemstone/gemfire/cache/client/internal/LocatorTestBase.java +++ b/geode-core/src/test/java/com/gemstone/gemfire/cache/client/internal/LocatorTestBase.java @@ -53,7 +53,6 @@ import com.gemstone.gemfire.test.dunit.VM; /** - * @author dsmith * */ public abstract class LocatorTestBase extends DistributedTestCase { diff --git a/geode-core/src/test/java/com/gemstone/gemfire/cache/client/internal/OpExecutorImplJUnitTest.java b/geode-core/src/test/java/com/gemstone/gemfire/cache/client/internal/OpExecutorImplJUnitTest.java index 7b9fa5cc7c34..8171c67ff1f5 100644 --- a/geode-core/src/test/java/com/gemstone/gemfire/cache/client/internal/OpExecutorImplJUnitTest.java +++ b/geode-core/src/test/java/com/gemstone/gemfire/cache/client/internal/OpExecutorImplJUnitTest.java @@ -47,7 +47,6 @@ import com.gemstone.gemfire.test.junit.categories.UnitTest; /** - * @author dsmith * */ @Category(UnitTest.class) diff --git a/geode-core/src/test/java/com/gemstone/gemfire/cache/client/internal/QueueManagerJUnitTest.java b/geode-core/src/test/java/com/gemstone/gemfire/cache/client/internal/QueueManagerJUnitTest.java index 93961028e93b..c2872e798cec 100644 --- a/geode-core/src/test/java/com/gemstone/gemfire/cache/client/internal/QueueManagerJUnitTest.java +++ b/geode-core/src/test/java/com/gemstone/gemfire/cache/client/internal/QueueManagerJUnitTest.java @@ -56,7 +56,6 @@ import com.gemstone.gemfire.test.junit.categories.IntegrationTest; /** - * @author dsmith * */ @Category(IntegrationTest.class) diff --git a/geode-core/src/test/java/com/gemstone/gemfire/cache/client/internal/ServerBlackListJUnitTest.java b/geode-core/src/test/java/com/gemstone/gemfire/cache/client/internal/ServerBlackListJUnitTest.java index 8ae2e8b89f3e..8a9d7a172649 100644 --- a/geode-core/src/test/java/com/gemstone/gemfire/cache/client/internal/ServerBlackListJUnitTest.java +++ b/geode-core/src/test/java/com/gemstone/gemfire/cache/client/internal/ServerBlackListJUnitTest.java @@ -36,7 +36,6 @@ import com.gemstone.gemfire.test.junit.categories.UnitTest; /** - * @author dsmith * */ @Category(UnitTest.class) diff --git a/geode-core/src/test/java/com/gemstone/gemfire/cache/client/internal/locator/LocatorStatusResponseJUnitTest.java b/geode-core/src/test/java/com/gemstone/gemfire/cache/client/internal/locator/LocatorStatusResponseJUnitTest.java index 92284f0cf088..f7a960b98b5e 100644 --- a/geode-core/src/test/java/com/gemstone/gemfire/cache/client/internal/locator/LocatorStatusResponseJUnitTest.java +++ b/geode-core/src/test/java/com/gemstone/gemfire/cache/client/internal/locator/LocatorStatusResponseJUnitTest.java @@ -34,7 +34,6 @@ * The LocatorStatusResponseJUnitTest class is a test suite of test cases testing the contract and functionality of the * LocatorStatusResponse class. *

    - * @author John Blum * @see com.gemstone.gemfire.cache.client.internal.locator.LocatorStatusResponse * @see org.junit.Assert * @see org.junit.Test diff --git a/geode-core/src/test/java/com/gemstone/gemfire/cache/client/internal/pooling/ConnectionManagerJUnitTest.java b/geode-core/src/test/java/com/gemstone/gemfire/cache/client/internal/pooling/ConnectionManagerJUnitTest.java index d0b2991a544f..7c5efe9827c5 100644 --- a/geode-core/src/test/java/com/gemstone/gemfire/cache/client/internal/pooling/ConnectionManagerJUnitTest.java +++ b/geode-core/src/test/java/com/gemstone/gemfire/cache/client/internal/pooling/ConnectionManagerJUnitTest.java @@ -65,7 +65,6 @@ import com.gemstone.gemfire.test.junit.categories.IntegrationTest; /** - * @author dsmith * */ @Category(IntegrationTest.class) diff --git a/geode-core/src/test/java/com/gemstone/gemfire/cache/hdfs/internal/SortedListForAsyncQueueJUnitTest.java b/geode-core/src/test/java/com/gemstone/gemfire/cache/hdfs/internal/SortedListForAsyncQueueJUnitTest.java index 0477893daac6..fc0232f9b656 100644 --- a/geode-core/src/test/java/com/gemstone/gemfire/cache/hdfs/internal/SortedListForAsyncQueueJUnitTest.java +++ b/geode-core/src/test/java/com/gemstone/gemfire/cache/hdfs/internal/SortedListForAsyncQueueJUnitTest.java @@ -55,7 +55,6 @@ /** * A test class for testing whether the functionalities of sorted Aysync Queue. * - * @author Hemant Bhanawat */ @Category({IntegrationTest.class}) public class SortedListForAsyncQueueJUnitTest extends TestCase { diff --git a/geode-core/src/test/java/com/gemstone/gemfire/cache/management/MemoryThresholdsDUnitTest.java b/geode-core/src/test/java/com/gemstone/gemfire/cache/management/MemoryThresholdsDUnitTest.java index c93848b7d13c..72afdc6fe32a 100644 --- a/geode-core/src/test/java/com/gemstone/gemfire/cache/management/MemoryThresholdsDUnitTest.java +++ b/geode-core/src/test/java/com/gemstone/gemfire/cache/management/MemoryThresholdsDUnitTest.java @@ -96,8 +96,6 @@ /** * Tests the Heap Memory thresholds of {@link ResourceManager} - * @author sbawaska - * @author Mitch Thomas * @since 6.0 */ public class MemoryThresholdsDUnitTest extends ClientServerTestCase { @@ -2316,7 +2314,6 @@ public Object call() throws Exception { /** * Used to return and report remote CacheServer port info. - * @author rholmes */ private static final class ServerPorts implements Serializable { private final int port; diff --git a/geode-core/src/test/java/com/gemstone/gemfire/cache/management/MemoryThresholdsOffHeapDUnitTest.java b/geode-core/src/test/java/com/gemstone/gemfire/cache/management/MemoryThresholdsOffHeapDUnitTest.java index 3cf7b09d9136..18ac2dd26bad 100644 --- a/geode-core/src/test/java/com/gemstone/gemfire/cache/management/MemoryThresholdsOffHeapDUnitTest.java +++ b/geode-core/src/test/java/com/gemstone/gemfire/cache/management/MemoryThresholdsOffHeapDUnitTest.java @@ -86,7 +86,6 @@ /** * Tests the Off-Heap Memory thresholds of {@link ResourceManager} * - * @author David Hoots * @since 9.0 */ public class MemoryThresholdsOffHeapDUnitTest extends ClientServerTestCase { diff --git a/geode-core/src/test/java/com/gemstone/gemfire/cache/management/ResourceManagerDUnitTest.java b/geode-core/src/test/java/com/gemstone/gemfire/cache/management/ResourceManagerDUnitTest.java index 05959489e0e7..8c455d45f632 100644 --- a/geode-core/src/test/java/com/gemstone/gemfire/cache/management/ResourceManagerDUnitTest.java +++ b/geode-core/src/test/java/com/gemstone/gemfire/cache/management/ResourceManagerDUnitTest.java @@ -73,7 +73,6 @@ * TODO: javadoc this test properly and cleanup the helper methods to be * more flexible and understandable * - * @author Kirk Lund */ public class ResourceManagerDUnitTest extends CacheTestCase { private static final Logger logger = LogService.getLogger(); diff --git a/geode-core/src/test/java/com/gemstone/gemfire/cache/query/BaseLineAndCompareQueryPerfJUnitTest.java b/geode-core/src/test/java/com/gemstone/gemfire/cache/query/BaseLineAndCompareQueryPerfJUnitTest.java index d6accb05e510..ccfc72d30d00 100755 --- a/geode-core/src/test/java/com/gemstone/gemfire/cache/query/BaseLineAndCompareQueryPerfJUnitTest.java +++ b/geode-core/src/test/java/com/gemstone/gemfire/cache/query/BaseLineAndCompareQueryPerfJUnitTest.java @@ -38,7 +38,6 @@ /** * This test is to baseline and compare the performance figures for index usage benchmarks. - * @author prafulla */ @Category(IntegrationTest.class) public class BaseLineAndCompareQueryPerfJUnitTest { diff --git a/geode-core/src/test/java/com/gemstone/gemfire/cache/query/Bug32947ValueConstraintJUnitTest.java b/geode-core/src/test/java/com/gemstone/gemfire/cache/query/Bug32947ValueConstraintJUnitTest.java index b428919affd0..dbc45f06c4a4 100644 --- a/geode-core/src/test/java/com/gemstone/gemfire/cache/query/Bug32947ValueConstraintJUnitTest.java +++ b/geode-core/src/test/java/com/gemstone/gemfire/cache/query/Bug32947ValueConstraintJUnitTest.java @@ -43,7 +43,6 @@ /** * Junit test for checking the value constraint region attributes. - * @author kdeshpan */ @Category(IntegrationTest.class) public class Bug32947ValueConstraintJUnitTest { diff --git a/geode-core/src/test/java/com/gemstone/gemfire/cache/query/BugJUnitTest.java b/geode-core/src/test/java/com/gemstone/gemfire/cache/query/BugJUnitTest.java index 7a193210159c..25491cc38db2 100644 --- a/geode-core/src/test/java/com/gemstone/gemfire/cache/query/BugJUnitTest.java +++ b/geode-core/src/test/java/com/gemstone/gemfire/cache/query/BugJUnitTest.java @@ -47,7 +47,6 @@ /** * Tests reported bugs - * @author ericz */ @Category(IntegrationTest.class) public class BugJUnitTest { @@ -256,7 +255,6 @@ public void testBug32624() throws Exception { /** * This bug was occuring in simulation of Outer Join query for Schwab - *@author Asif */ @Test public void testBugResultMismatch() { @@ -317,7 +315,6 @@ public void testBug36659() throws Exception /** * Tests the Bug 38422 where the index results intersection results in * incorrect size - * @author asif */ @Test public void testBug38422() { diff --git a/geode-core/src/test/java/com/gemstone/gemfire/cache/query/CacheUtils.java b/geode-core/src/test/java/com/gemstone/gemfire/cache/query/CacheUtils.java index 256d142761d0..88d0e30dc237 100644 --- a/geode-core/src/test/java/com/gemstone/gemfire/cache/query/CacheUtils.java +++ b/geode-core/src/test/java/com/gemstone/gemfire/cache/query/CacheUtils.java @@ -43,8 +43,6 @@ /** * - * @author vaibhav - * @author asif */ public class CacheUtils { diff --git a/geode-core/src/test/java/com/gemstone/gemfire/cache/query/PdxStringQueryJUnitTest.java b/geode-core/src/test/java/com/gemstone/gemfire/cache/query/PdxStringQueryJUnitTest.java index cddcd4042a17..f08817047610 100644 --- a/geode-core/src/test/java/com/gemstone/gemfire/cache/query/PdxStringQueryJUnitTest.java +++ b/geode-core/src/test/java/com/gemstone/gemfire/cache/query/PdxStringQueryJUnitTest.java @@ -52,7 +52,6 @@ /** * - * @author Tejas Nomulwar * */ @Category(IntegrationTest.class) diff --git a/geode-core/src/test/java/com/gemstone/gemfire/cache/query/PerfQuery.java b/geode-core/src/test/java/com/gemstone/gemfire/cache/query/PerfQuery.java index 5cd5861bba71..dc77418ef56b 100644 --- a/geode-core/src/test/java/com/gemstone/gemfire/cache/query/PerfQuery.java +++ b/geode-core/src/test/java/com/gemstone/gemfire/cache/query/PerfQuery.java @@ -38,7 +38,6 @@ /** * - * @author Eric Zoerner */ public class PerfQuery { private static int NUM_ITERATIONS = 20000; diff --git a/geode-core/src/test/java/com/gemstone/gemfire/cache/query/QueryJUnitTest.java b/geode-core/src/test/java/com/gemstone/gemfire/cache/query/QueryJUnitTest.java index fa61f347ed6f..455cb322faa0 100644 --- a/geode-core/src/test/java/com/gemstone/gemfire/cache/query/QueryJUnitTest.java +++ b/geode-core/src/test/java/com/gemstone/gemfire/cache/query/QueryJUnitTest.java @@ -58,7 +58,6 @@ /** * - * @author vaibhav */ @FixMethodOrder(NAME_ASCENDING) @Category(IntegrationTest.class) diff --git a/geode-core/src/test/java/com/gemstone/gemfire/cache/query/QueryServiceJUnitTest.java b/geode-core/src/test/java/com/gemstone/gemfire/cache/query/QueryServiceJUnitTest.java index fdb402d53ac9..0c34de7d7655 100644 --- a/geode-core/src/test/java/com/gemstone/gemfire/cache/query/QueryServiceJUnitTest.java +++ b/geode-core/src/test/java/com/gemstone/gemfire/cache/query/QueryServiceJUnitTest.java @@ -38,7 +38,6 @@ /** * - * @author vaibhav */ @Category(IntegrationTest.class) public class QueryServiceJUnitTest { diff --git a/geode-core/src/test/java/com/gemstone/gemfire/cache/query/QueryTestUtils.java b/geode-core/src/test/java/com/gemstone/gemfire/cache/query/QueryTestUtils.java index ce7c9fd41ce4..76a36d5acbf1 100644 --- a/geode-core/src/test/java/com/gemstone/gemfire/cache/query/QueryTestUtils.java +++ b/geode-core/src/test/java/com/gemstone/gemfire/cache/query/QueryTestUtils.java @@ -49,7 +49,6 @@ /** * Utility class for testing supported queries * - * @author Tejas Nomulwar * */ public class QueryTestUtils implements Serializable { diff --git a/geode-core/src/test/java/com/gemstone/gemfire/cache/query/QueryTestUtilsJUnitTest.java b/geode-core/src/test/java/com/gemstone/gemfire/cache/query/QueryTestUtilsJUnitTest.java index 0358aad6ce9f..b8afc69c8805 100644 --- a/geode-core/src/test/java/com/gemstone/gemfire/cache/query/QueryTestUtilsJUnitTest.java +++ b/geode-core/src/test/java/com/gemstone/gemfire/cache/query/QueryTestUtilsJUnitTest.java @@ -36,7 +36,6 @@ /** * A sample test class using the QueryTestUtils * - * @author Tejas Nomulwar * */ @Category(IntegrationTest.class) diff --git a/geode-core/src/test/java/com/gemstone/gemfire/cache/query/RegionJUnitTest.java b/geode-core/src/test/java/com/gemstone/gemfire/cache/query/RegionJUnitTest.java index 4b79e3e6f6ef..9564a5f8525d 100644 --- a/geode-core/src/test/java/com/gemstone/gemfire/cache/query/RegionJUnitTest.java +++ b/geode-core/src/test/java/com/gemstone/gemfire/cache/query/RegionJUnitTest.java @@ -43,7 +43,6 @@ * * Created on January 31, 2005, 3:54 PM * - * @author vaibhav */ @Category(IntegrationTest.class) public class RegionJUnitTest{ diff --git a/geode-core/src/test/java/com/gemstone/gemfire/cache/query/TypedIteratorJUnitTest.java b/geode-core/src/test/java/com/gemstone/gemfire/cache/query/TypedIteratorJUnitTest.java index 12ef8309049f..3c4282269601 100644 --- a/geode-core/src/test/java/com/gemstone/gemfire/cache/query/TypedIteratorJUnitTest.java +++ b/geode-core/src/test/java/com/gemstone/gemfire/cache/query/TypedIteratorJUnitTest.java @@ -39,7 +39,6 @@ /** * - * @author ericz */ @Category(IntegrationTest.class) public class TypedIteratorJUnitTest { diff --git a/geode-core/src/test/java/com/gemstone/gemfire/cache/query/Utils.java b/geode-core/src/test/java/com/gemstone/gemfire/cache/query/Utils.java index 607aea24a854..ddd3a164e1bf 100644 --- a/geode-core/src/test/java/com/gemstone/gemfire/cache/query/Utils.java +++ b/geode-core/src/test/java/com/gemstone/gemfire/cache/query/Utils.java @@ -27,7 +27,6 @@ /** * - * @author vaibhav */ public class Utils { public static String printResult(Object r){ diff --git a/geode-core/src/test/java/com/gemstone/gemfire/cache/query/cq/dunit/CqQueryTestListener.java b/geode-core/src/test/java/com/gemstone/gemfire/cache/query/cq/dunit/CqQueryTestListener.java index e4026715fe7c..043f39717b80 100644 --- a/geode-core/src/test/java/com/gemstone/gemfire/cache/query/cq/dunit/CqQueryTestListener.java +++ b/geode-core/src/test/java/com/gemstone/gemfire/cache/query/cq/dunit/CqQueryTestListener.java @@ -34,7 +34,6 @@ import com.gemstone.gemfire.test.dunit.WaitCriterion; /** - * @author rmadduri * */ public class CqQueryTestListener implements CqStatusListener { diff --git a/geode-core/src/test/java/com/gemstone/gemfire/cache/query/data/Address.java b/geode-core/src/test/java/com/gemstone/gemfire/cache/query/data/Address.java index b6ab0b26b241..f1a6fbd0a4cc 100644 --- a/geode-core/src/test/java/com/gemstone/gemfire/cache/query/data/Address.java +++ b/geode-core/src/test/java/com/gemstone/gemfire/cache/query/data/Address.java @@ -27,7 +27,6 @@ /** * - * @author vikramj */ public class Address { public String zipCode; diff --git a/geode-core/src/test/java/com/gemstone/gemfire/cache/query/data/City.java b/geode-core/src/test/java/com/gemstone/gemfire/cache/query/data/City.java index cad7070bb6de..1ed99a9ae9c3 100644 --- a/geode-core/src/test/java/com/gemstone/gemfire/cache/query/data/City.java +++ b/geode-core/src/test/java/com/gemstone/gemfire/cache/query/data/City.java @@ -25,7 +25,6 @@ /** * - * @author prafulla */ import java.io.*; diff --git a/geode-core/src/test/java/com/gemstone/gemfire/cache/query/data/CollectionHolder.java b/geode-core/src/test/java/com/gemstone/gemfire/cache/query/data/CollectionHolder.java index a3ed9481e716..0673b2515757 100644 --- a/geode-core/src/test/java/com/gemstone/gemfire/cache/query/data/CollectionHolder.java +++ b/geode-core/src/test/java/com/gemstone/gemfire/cache/query/data/CollectionHolder.java @@ -30,7 +30,6 @@ /** * - * @author kdeshpan */ public class CollectionHolder implements Serializable, DataSerializable { diff --git a/geode-core/src/test/java/com/gemstone/gemfire/cache/query/data/ComparableWrapper.java b/geode-core/src/test/java/com/gemstone/gemfire/cache/query/data/ComparableWrapper.java index 47b3ac9dd992..7399edcfb162 100755 --- a/geode-core/src/test/java/com/gemstone/gemfire/cache/query/data/ComparableWrapper.java +++ b/geode-core/src/test/java/com/gemstone/gemfire/cache/query/data/ComparableWrapper.java @@ -27,7 +27,6 @@ /** * - * @author vikramj */ public class ComparableWrapper implements Comparable, Serializable { private int val; diff --git a/geode-core/src/test/java/com/gemstone/gemfire/cache/query/data/Country.java b/geode-core/src/test/java/com/gemstone/gemfire/cache/query/data/Country.java index db92d480cd19..fe9e24779375 100755 --- a/geode-core/src/test/java/com/gemstone/gemfire/cache/query/data/Country.java +++ b/geode-core/src/test/java/com/gemstone/gemfire/cache/query/data/Country.java @@ -27,7 +27,6 @@ /** * - * @author prafulla */ public class Country implements Serializable{ public String name; diff --git a/geode-core/src/test/java/com/gemstone/gemfire/cache/query/data/Data.java b/geode-core/src/test/java/com/gemstone/gemfire/cache/query/data/Data.java index fc007a49dec8..9411442fe109 100644 --- a/geode-core/src/test/java/com/gemstone/gemfire/cache/query/data/Data.java +++ b/geode-core/src/test/java/com/gemstone/gemfire/cache/query/data/Data.java @@ -25,7 +25,6 @@ /** * - * @author vaibhav */ public class Data { diff --git a/geode-core/src/test/java/com/gemstone/gemfire/cache/query/data/District.java b/geode-core/src/test/java/com/gemstone/gemfire/cache/query/data/District.java index 289bcae0b430..799fe8a60a69 100644 --- a/geode-core/src/test/java/com/gemstone/gemfire/cache/query/data/District.java +++ b/geode-core/src/test/java/com/gemstone/gemfire/cache/query/data/District.java @@ -28,7 +28,6 @@ /** * - * @author prafulla */ public class District implements Serializable{ public String name; diff --git a/geode-core/src/test/java/com/gemstone/gemfire/cache/query/data/Employee.java b/geode-core/src/test/java/com/gemstone/gemfire/cache/query/data/Employee.java index a67420025d45..456c6fc82d26 100644 --- a/geode-core/src/test/java/com/gemstone/gemfire/cache/query/data/Employee.java +++ b/geode-core/src/test/java/com/gemstone/gemfire/cache/query/data/Employee.java @@ -24,7 +24,6 @@ import java.util.*; /** * - * @author vikramj */ public class Employee { private String name; diff --git a/geode-core/src/test/java/com/gemstone/gemfire/cache/query/data/Keywords.java b/geode-core/src/test/java/com/gemstone/gemfire/cache/query/data/Keywords.java index 8d4118488dae..e07c223a001e 100644 --- a/geode-core/src/test/java/com/gemstone/gemfire/cache/query/data/Keywords.java +++ b/geode-core/src/test/java/com/gemstone/gemfire/cache/query/data/Keywords.java @@ -22,7 +22,6 @@ package com.gemstone.gemfire.cache.query.data; /** - * @author vaibhav */ public class Keywords { diff --git a/geode-core/src/test/java/com/gemstone/gemfire/cache/query/data/Manager.java b/geode-core/src/test/java/com/gemstone/gemfire/cache/query/data/Manager.java index eb8e32374345..60b4d6ed8a51 100755 --- a/geode-core/src/test/java/com/gemstone/gemfire/cache/query/data/Manager.java +++ b/geode-core/src/test/java/com/gemstone/gemfire/cache/query/data/Manager.java @@ -24,7 +24,6 @@ import java.util.Set; /** - * @author vikramj */ public class Manager extends Employee { diff --git a/geode-core/src/test/java/com/gemstone/gemfire/cache/query/data/Numbers.java b/geode-core/src/test/java/com/gemstone/gemfire/cache/query/data/Numbers.java index 2eb82bc8527c..a44a305fdf75 100755 --- a/geode-core/src/test/java/com/gemstone/gemfire/cache/query/data/Numbers.java +++ b/geode-core/src/test/java/com/gemstone/gemfire/cache/query/data/Numbers.java @@ -24,7 +24,6 @@ /** * - * @author prafulla */ import java.io.Serializable; diff --git a/geode-core/src/test/java/com/gemstone/gemfire/cache/query/data/PhoneNo.java b/geode-core/src/test/java/com/gemstone/gemfire/cache/query/data/PhoneNo.java index 9be015925498..91a1aa080105 100644 --- a/geode-core/src/test/java/com/gemstone/gemfire/cache/query/data/PhoneNo.java +++ b/geode-core/src/test/java/com/gemstone/gemfire/cache/query/data/PhoneNo.java @@ -24,7 +24,6 @@ /** * - * @author vjadhav */ public class PhoneNo { public int phoneNo1; diff --git a/geode-core/src/test/java/com/gemstone/gemfire/cache/query/data/Quote.java b/geode-core/src/test/java/com/gemstone/gemfire/cache/query/data/Quote.java index 9e2811cc21bf..b0bf4d12f761 100644 --- a/geode-core/src/test/java/com/gemstone/gemfire/cache/query/data/Quote.java +++ b/geode-core/src/test/java/com/gemstone/gemfire/cache/query/data/Quote.java @@ -24,7 +24,6 @@ /** * - * @author prafulla */ import java.util.*; import java.io.Serializable; diff --git a/geode-core/src/test/java/com/gemstone/gemfire/cache/query/data/Restricted.java b/geode-core/src/test/java/com/gemstone/gemfire/cache/query/data/Restricted.java index 942cd6dd1100..d4b62745674f 100644 --- a/geode-core/src/test/java/com/gemstone/gemfire/cache/query/data/Restricted.java +++ b/geode-core/src/test/java/com/gemstone/gemfire/cache/query/data/Restricted.java @@ -24,7 +24,6 @@ /** * - * @author prafulla */ import java.io.Serializable; diff --git a/geode-core/src/test/java/com/gemstone/gemfire/cache/query/data/State.java b/geode-core/src/test/java/com/gemstone/gemfire/cache/query/data/State.java index ba092ed86eff..5584e781d310 100644 --- a/geode-core/src/test/java/com/gemstone/gemfire/cache/query/data/State.java +++ b/geode-core/src/test/java/com/gemstone/gemfire/cache/query/data/State.java @@ -29,7 +29,6 @@ /** * - * @author prafulla */ public class State implements Serializable{ public String name; diff --git a/geode-core/src/test/java/com/gemstone/gemfire/cache/query/data/Street.java b/geode-core/src/test/java/com/gemstone/gemfire/cache/query/data/Street.java index 9eb24ddf73aa..d023498591c2 100644 --- a/geode-core/src/test/java/com/gemstone/gemfire/cache/query/data/Street.java +++ b/geode-core/src/test/java/com/gemstone/gemfire/cache/query/data/Street.java @@ -24,7 +24,6 @@ /** * - * @author vjadhav */ public class Street { public String street; diff --git a/geode-core/src/test/java/com/gemstone/gemfire/cache/query/data/Student.java b/geode-core/src/test/java/com/gemstone/gemfire/cache/query/data/Student.java index 0426abbd4c8a..3744ad43de3e 100644 --- a/geode-core/src/test/java/com/gemstone/gemfire/cache/query/data/Student.java +++ b/geode-core/src/test/java/com/gemstone/gemfire/cache/query/data/Student.java @@ -26,7 +26,6 @@ import java.util.List; /** - * @author ashahid * * */ diff --git a/geode-core/src/test/java/com/gemstone/gemfire/cache/query/data/Vehicle.java b/geode-core/src/test/java/com/gemstone/gemfire/cache/query/data/Vehicle.java index cf61c8f21647..a274bb476537 100644 --- a/geode-core/src/test/java/com/gemstone/gemfire/cache/query/data/Vehicle.java +++ b/geode-core/src/test/java/com/gemstone/gemfire/cache/query/data/Vehicle.java @@ -24,7 +24,6 @@ /** * - * @author vjadhav */ // Added for the Test IUMRCompositeIteratorTest diff --git a/geode-core/src/test/java/com/gemstone/gemfire/cache/query/data/Village.java b/geode-core/src/test/java/com/gemstone/gemfire/cache/query/data/Village.java index 74724c29a179..4271d220b01c 100644 --- a/geode-core/src/test/java/com/gemstone/gemfire/cache/query/data/Village.java +++ b/geode-core/src/test/java/com/gemstone/gemfire/cache/query/data/Village.java @@ -24,7 +24,6 @@ /** * - * @author prafulla */ import java.io.*; diff --git a/geode-core/src/test/java/com/gemstone/gemfire/cache/query/dunit/CqTimeTestListener.java b/geode-core/src/test/java/com/gemstone/gemfire/cache/query/dunit/CqTimeTestListener.java index 3d3a2e4a4876..64e4e8f7bee3 100644 --- a/geode-core/src/test/java/com/gemstone/gemfire/cache/query/dunit/CqTimeTestListener.java +++ b/geode-core/src/test/java/com/gemstone/gemfire/cache/query/dunit/CqTimeTestListener.java @@ -29,7 +29,6 @@ import com.gemstone.gemfire.test.dunit.WaitCriterion; /** - * @author anil. * */ public class CqTimeTestListener implements CqListener { diff --git a/geode-core/src/test/java/com/gemstone/gemfire/cache/query/dunit/GroupByDUnitImpl.java b/geode-core/src/test/java/com/gemstone/gemfire/cache/query/dunit/GroupByDUnitImpl.java index 25d8c8070bb8..06636e937460 100644 --- a/geode-core/src/test/java/com/gemstone/gemfire/cache/query/dunit/GroupByDUnitImpl.java +++ b/geode-core/src/test/java/com/gemstone/gemfire/cache/query/dunit/GroupByDUnitImpl.java @@ -32,7 +32,6 @@ /** * - * @author ashahid * */ public abstract class GroupByDUnitImpl extends CacheTestCase implements GroupByTestInterface{ diff --git a/geode-core/src/test/java/com/gemstone/gemfire/cache/query/dunit/GroupByPartitionedQueryDUnitTest.java b/geode-core/src/test/java/com/gemstone/gemfire/cache/query/dunit/GroupByPartitionedQueryDUnitTest.java index c1f1cecb13b1..b0054635c32e 100644 --- a/geode-core/src/test/java/com/gemstone/gemfire/cache/query/dunit/GroupByPartitionedQueryDUnitTest.java +++ b/geode-core/src/test/java/com/gemstone/gemfire/cache/query/dunit/GroupByPartitionedQueryDUnitTest.java @@ -36,7 +36,6 @@ /** * - * @author ashahid * */ @Category(DistributedTest.class) diff --git a/geode-core/src/test/java/com/gemstone/gemfire/cache/query/dunit/GroupByQueryDUnitTest.java b/geode-core/src/test/java/com/gemstone/gemfire/cache/query/dunit/GroupByQueryDUnitTest.java index 095142a64977..b9ff7cb8e591 100644 --- a/geode-core/src/test/java/com/gemstone/gemfire/cache/query/dunit/GroupByQueryDUnitTest.java +++ b/geode-core/src/test/java/com/gemstone/gemfire/cache/query/dunit/GroupByQueryDUnitTest.java @@ -44,7 +44,6 @@ /** * - * @author ashahid * */ @Category(DistributedTest.class) diff --git a/geode-core/src/test/java/com/gemstone/gemfire/cache/query/dunit/NonDistinctOrderByPartitionedDUnitTest.java b/geode-core/src/test/java/com/gemstone/gemfire/cache/query/dunit/NonDistinctOrderByPartitionedDUnitTest.java index a87df2eb1f74..619a29b2de65 100644 --- a/geode-core/src/test/java/com/gemstone/gemfire/cache/query/dunit/NonDistinctOrderByPartitionedDUnitTest.java +++ b/geode-core/src/test/java/com/gemstone/gemfire/cache/query/dunit/NonDistinctOrderByPartitionedDUnitTest.java @@ -37,7 +37,6 @@ /** * - * @author ashahid * */ @Category(DistributedTest.class) diff --git a/geode-core/src/test/java/com/gemstone/gemfire/cache/query/dunit/QueryAPITestPartitionResolver.java b/geode-core/src/test/java/com/gemstone/gemfire/cache/query/dunit/QueryAPITestPartitionResolver.java index c3fab566c0ce..ccd14ccae154 100644 --- a/geode-core/src/test/java/com/gemstone/gemfire/cache/query/dunit/QueryAPITestPartitionResolver.java +++ b/geode-core/src/test/java/com/gemstone/gemfire/cache/query/dunit/QueryAPITestPartitionResolver.java @@ -23,7 +23,6 @@ /** * This resolver is used in QueryUsingFunctionContextDUnitTest. - * @author shobhit * */ public class QueryAPITestPartitionResolver implements PartitionResolver { diff --git a/geode-core/src/test/java/com/gemstone/gemfire/cache/query/dunit/QueryAuthorization.java b/geode-core/src/test/java/com/gemstone/gemfire/cache/query/dunit/QueryAuthorization.java index fc60068bfce9..c4b32406d9e2 100644 --- a/geode-core/src/test/java/com/gemstone/gemfire/cache/query/dunit/QueryAuthorization.java +++ b/geode-core/src/test/java/com/gemstone/gemfire/cache/query/dunit/QueryAuthorization.java @@ -32,7 +32,6 @@ * Test authorization class for testing the accessibility of query bind * parameters from QueryOperationContext * - * @author tnomulwar * */ public class QueryAuthorization extends TestCase implements AccessControl { diff --git a/geode-core/src/test/java/com/gemstone/gemfire/cache/query/dunit/QueryDataInconsistencyDUnitTest.java b/geode-core/src/test/java/com/gemstone/gemfire/cache/query/dunit/QueryDataInconsistencyDUnitTest.java index 0227836954a1..4f685f7ee7c3 100644 --- a/geode-core/src/test/java/com/gemstone/gemfire/cache/query/dunit/QueryDataInconsistencyDUnitTest.java +++ b/geode-core/src/test/java/com/gemstone/gemfire/cache/query/dunit/QueryDataInconsistencyDUnitTest.java @@ -54,7 +54,6 @@ * This tests the data inconsistency during update on an index and querying the * same UNLOCKED index. * - * @author shobhit * */ public class QueryDataInconsistencyDUnitTest extends CacheTestCase { diff --git a/geode-core/src/test/java/com/gemstone/gemfire/cache/query/dunit/QueryParamsAuthorizationDUnitTest.java b/geode-core/src/test/java/com/gemstone/gemfire/cache/query/dunit/QueryParamsAuthorizationDUnitTest.java index 598457635050..bd9bc4b45839 100644 --- a/geode-core/src/test/java/com/gemstone/gemfire/cache/query/dunit/QueryParamsAuthorizationDUnitTest.java +++ b/geode-core/src/test/java/com/gemstone/gemfire/cache/query/dunit/QueryParamsAuthorizationDUnitTest.java @@ -39,7 +39,6 @@ /** * Test for accessing query bind parameters from authorization callbacks * - * @author tnomulwar * */ public class QueryParamsAuthorizationDUnitTest extends CacheTestCase { diff --git a/geode-core/src/test/java/com/gemstone/gemfire/cache/query/dunit/QueryUsingFunctionContextDUnitTest.java b/geode-core/src/test/java/com/gemstone/gemfire/cache/query/dunit/QueryUsingFunctionContextDUnitTest.java index 1e3e97327689..0d10ca180069 100644 --- a/geode-core/src/test/java/com/gemstone/gemfire/cache/query/dunit/QueryUsingFunctionContextDUnitTest.java +++ b/geode-core/src/test/java/com/gemstone/gemfire/cache/query/dunit/QueryUsingFunctionContextDUnitTest.java @@ -69,7 +69,6 @@ * (routing keys) to run the query on subset of buckets "locally". If query * includes buckets * - * @author shobhit * */ public class QueryUsingFunctionContextDUnitTest extends CacheTestCase { diff --git a/geode-core/src/test/java/com/gemstone/gemfire/cache/query/dunit/QueryUsingPoolDUnitTest.java b/geode-core/src/test/java/com/gemstone/gemfire/cache/query/dunit/QueryUsingPoolDUnitTest.java index 4df1f816618a..0b0db9312af3 100644 --- a/geode-core/src/test/java/com/gemstone/gemfire/cache/query/dunit/QueryUsingPoolDUnitTest.java +++ b/geode-core/src/test/java/com/gemstone/gemfire/cache/query/dunit/QueryUsingPoolDUnitTest.java @@ -62,8 +62,6 @@ /** * Tests remote (client/server) query execution. * - * @author Barry Oglesby - * @author Asif * @since 5.0.1 */ public class QueryUsingPoolDUnitTest extends CacheTestCase { diff --git a/geode-core/src/test/java/com/gemstone/gemfire/cache/query/dunit/RemoteQueryDUnitTest.java b/geode-core/src/test/java/com/gemstone/gemfire/cache/query/dunit/RemoteQueryDUnitTest.java index 09fd94591458..227b10f978d4 100644 --- a/geode-core/src/test/java/com/gemstone/gemfire/cache/query/dunit/RemoteQueryDUnitTest.java +++ b/geode-core/src/test/java/com/gemstone/gemfire/cache/query/dunit/RemoteQueryDUnitTest.java @@ -57,8 +57,6 @@ /** * Tests remote (client/server) query execution. * - * @author Barry Oglesby - * @author Asif * @since 5.0.1 */ public class RemoteQueryDUnitTest extends CacheTestCase { diff --git a/geode-core/src/test/java/com/gemstone/gemfire/cache/query/dunit/SelectStarQueryDUnitTest.java b/geode-core/src/test/java/com/gemstone/gemfire/cache/query/dunit/SelectStarQueryDUnitTest.java index 90ee7f77e4d9..b92426a11684 100644 --- a/geode-core/src/test/java/com/gemstone/gemfire/cache/query/dunit/SelectStarQueryDUnitTest.java +++ b/geode-core/src/test/java/com/gemstone/gemfire/cache/query/dunit/SelectStarQueryDUnitTest.java @@ -51,7 +51,6 @@ * Test for #44807 to eliminate unnecessary serialization/deserialization in * select * queries * - * @author Tejas Nomulwar * */ public class SelectStarQueryDUnitTest extends CacheTestCase { diff --git a/geode-core/src/test/java/com/gemstone/gemfire/cache/query/functional/ComparisonOperatorsJUnitTest.java b/geode-core/src/test/java/com/gemstone/gemfire/cache/query/functional/ComparisonOperatorsJUnitTest.java index f4c04aefb04c..433e4e749941 100644 --- a/geode-core/src/test/java/com/gemstone/gemfire/cache/query/functional/ComparisonOperatorsJUnitTest.java +++ b/geode-core/src/test/java/com/gemstone/gemfire/cache/query/functional/ComparisonOperatorsJUnitTest.java @@ -44,7 +44,6 @@ /** * - * @author vaibhav */ @Category(IntegrationTest.class) public class ComparisonOperatorsJUnitTest { diff --git a/geode-core/src/test/java/com/gemstone/gemfire/cache/query/functional/ConstantsJUnitTest.java b/geode-core/src/test/java/com/gemstone/gemfire/cache/query/functional/ConstantsJUnitTest.java index 4577ec6df687..d1ecff67dd46 100644 --- a/geode-core/src/test/java/com/gemstone/gemfire/cache/query/functional/ConstantsJUnitTest.java +++ b/geode-core/src/test/java/com/gemstone/gemfire/cache/query/functional/ConstantsJUnitTest.java @@ -42,7 +42,6 @@ /** * - * @author vaibhav */ @Category(IntegrationTest.class) public class ConstantsJUnitTest { diff --git a/geode-core/src/test/java/com/gemstone/gemfire/cache/query/functional/CountStarJUnitTest.java b/geode-core/src/test/java/com/gemstone/gemfire/cache/query/functional/CountStarJUnitTest.java index 922c5a44742b..b6d7af05b088 100644 --- a/geode-core/src/test/java/com/gemstone/gemfire/cache/query/functional/CountStarJUnitTest.java +++ b/geode-core/src/test/java/com/gemstone/gemfire/cache/query/functional/CountStarJUnitTest.java @@ -49,7 +49,6 @@ * This test runs {Select COUNT(*) from /regionName [where clause]} queries * on different types of regions with and without multiple indexes. * - * @author shobhit * */ @Category(IntegrationTest.class) diff --git a/geode-core/src/test/java/com/gemstone/gemfire/cache/query/functional/DistinctResultsWithDupValuesInRegionJUnitTest.java b/geode-core/src/test/java/com/gemstone/gemfire/cache/query/functional/DistinctResultsWithDupValuesInRegionJUnitTest.java index 4a351aab64cd..313758166efe 100644 --- a/geode-core/src/test/java/com/gemstone/gemfire/cache/query/functional/DistinctResultsWithDupValuesInRegionJUnitTest.java +++ b/geode-core/src/test/java/com/gemstone/gemfire/cache/query/functional/DistinctResultsWithDupValuesInRegionJUnitTest.java @@ -44,7 +44,6 @@ import com.gemstone.gemfire.test.junit.categories.IntegrationTest; /** - * @author shobhit * */ @Category(IntegrationTest.class) diff --git a/geode-core/src/test/java/com/gemstone/gemfire/cache/query/functional/FunctionJUnitTest.java b/geode-core/src/test/java/com/gemstone/gemfire/cache/query/functional/FunctionJUnitTest.java index 340feccd866c..f2a17433847f 100644 --- a/geode-core/src/test/java/com/gemstone/gemfire/cache/query/functional/FunctionJUnitTest.java +++ b/geode-core/src/test/java/com/gemstone/gemfire/cache/query/functional/FunctionJUnitTest.java @@ -51,8 +51,6 @@ /** * - * @author vaibhav - * @author kdeshpan */ @Category(IntegrationTest.class) public class FunctionJUnitTest { diff --git a/geode-core/src/test/java/com/gemstone/gemfire/cache/query/functional/GroupByPartitionedJUnitTest.java b/geode-core/src/test/java/com/gemstone/gemfire/cache/query/functional/GroupByPartitionedJUnitTest.java index c1a8178eb7e0..97fca882ec9f 100644 --- a/geode-core/src/test/java/com/gemstone/gemfire/cache/query/functional/GroupByPartitionedJUnitTest.java +++ b/geode-core/src/test/java/com/gemstone/gemfire/cache/query/functional/GroupByPartitionedJUnitTest.java @@ -26,7 +26,6 @@ /** * - * @author ashahid * */ @Category(IntegrationTest.class) diff --git a/geode-core/src/test/java/com/gemstone/gemfire/cache/query/functional/GroupByReplicatedJUnitTest.java b/geode-core/src/test/java/com/gemstone/gemfire/cache/query/functional/GroupByReplicatedJUnitTest.java index a9fe25a62325..bf6ded2c2ea8 100644 --- a/geode-core/src/test/java/com/gemstone/gemfire/cache/query/functional/GroupByReplicatedJUnitTest.java +++ b/geode-core/src/test/java/com/gemstone/gemfire/cache/query/functional/GroupByReplicatedJUnitTest.java @@ -24,7 +24,6 @@ /** * - * @author ashahid * */ @Category(IntegrationTest.class) diff --git a/geode-core/src/test/java/com/gemstone/gemfire/cache/query/functional/GroupByTestImpl.java b/geode-core/src/test/java/com/gemstone/gemfire/cache/query/functional/GroupByTestImpl.java index a577a1485b26..8842d6b259b7 100644 --- a/geode-core/src/test/java/com/gemstone/gemfire/cache/query/functional/GroupByTestImpl.java +++ b/geode-core/src/test/java/com/gemstone/gemfire/cache/query/functional/GroupByTestImpl.java @@ -49,7 +49,6 @@ /** * Tests the group by queries with or without aggreagte functions * - * @author Asif * * */ diff --git a/geode-core/src/test/java/com/gemstone/gemfire/cache/query/functional/INOperatorJUnitTest.java b/geode-core/src/test/java/com/gemstone/gemfire/cache/query/functional/INOperatorJUnitTest.java index 64754911e622..fbc887ce0e9f 100644 --- a/geode-core/src/test/java/com/gemstone/gemfire/cache/query/functional/INOperatorJUnitTest.java +++ b/geode-core/src/test/java/com/gemstone/gemfire/cache/query/functional/INOperatorJUnitTest.java @@ -47,7 +47,6 @@ /** * - * @author vikramj */ @Category(IntegrationTest.class) public class INOperatorJUnitTest { @@ -79,7 +78,6 @@ public void tearDown() throws Exception { /** * Test the decomposition of IN SET(..) that gets decomposed * into ORs so an index can be used - * @author Eric Zoerner */ public void _testInDecompositionWithFunctionalIndex() throws Exception { diff --git a/geode-core/src/test/java/com/gemstone/gemfire/cache/query/functional/IUMJUnitTest.java b/geode-core/src/test/java/com/gemstone/gemfire/cache/query/functional/IUMJUnitTest.java index 1422754ccbbf..1bc76929ab80 100755 --- a/geode-core/src/test/java/com/gemstone/gemfire/cache/query/functional/IUMJUnitTest.java +++ b/geode-core/src/test/java/com/gemstone/gemfire/cache/query/functional/IUMJUnitTest.java @@ -16,7 +16,6 @@ */ /* * IUMJUnitTest.java - *@author vikramj *@ TASK IUM 4 & IUM 3 * Created on April 29, 2005, 10:14 AM */ diff --git a/geode-core/src/test/java/com/gemstone/gemfire/cache/query/functional/IUMRCompositeIteratorJUnitTest.java b/geode-core/src/test/java/com/gemstone/gemfire/cache/query/functional/IUMRCompositeIteratorJUnitTest.java index c26f6a4efe9d..7c627c129977 100644 --- a/geode-core/src/test/java/com/gemstone/gemfire/cache/query/functional/IUMRCompositeIteratorJUnitTest.java +++ b/geode-core/src/test/java/com/gemstone/gemfire/cache/query/functional/IUMRCompositeIteratorJUnitTest.java @@ -53,7 +53,6 @@ /** * - * @author vjadhav */ @Category(IntegrationTest.class) public class IUMRCompositeIteratorJUnitTest { diff --git a/geode-core/src/test/java/com/gemstone/gemfire/cache/query/functional/IUMRMultiIndexesMultiRegionJUnitTest.java b/geode-core/src/test/java/com/gemstone/gemfire/cache/query/functional/IUMRMultiIndexesMultiRegionJUnitTest.java index 60160ef80a17..c12d82068602 100644 --- a/geode-core/src/test/java/com/gemstone/gemfire/cache/query/functional/IUMRMultiIndexesMultiRegionJUnitTest.java +++ b/geode-core/src/test/java/com/gemstone/gemfire/cache/query/functional/IUMRMultiIndexesMultiRegionJUnitTest.java @@ -56,7 +56,6 @@ /** * - * @author vjadhav */ @Category(IntegrationTest.class) public class IUMRMultiIndexesMultiRegionJUnitTest { @@ -782,7 +781,6 @@ public void testBasicCompositeIndexUsage() throws Exception { * * For expected results correct parenthesis must be used as in next query. * - * @author Shobhit */ {"SELECT pf.status, emp.empId, pf.getType() FROM /portfolio pf, /employee emp WHERE pf.ID = emp.empId AND pf.status='active' OR pf.ID > 0", ""+999001}, {"SELECT * FROM /portfolio pf, /employee emp WHERE pf.ID = emp.empId AND (pf.status='active' OR pf.ID > 499)", ""+750}, diff --git a/geode-core/src/test/java/com/gemstone/gemfire/cache/query/functional/IUMRShuffleIteratorsJUnitTest.java b/geode-core/src/test/java/com/gemstone/gemfire/cache/query/functional/IUMRShuffleIteratorsJUnitTest.java index d8c9d1282c85..c4042dab6e66 100644 --- a/geode-core/src/test/java/com/gemstone/gemfire/cache/query/functional/IUMRShuffleIteratorsJUnitTest.java +++ b/geode-core/src/test/java/com/gemstone/gemfire/cache/query/functional/IUMRShuffleIteratorsJUnitTest.java @@ -53,7 +53,6 @@ /** * - * @author vjadhav */ @Category(IntegrationTest.class) public class IUMRShuffleIteratorsJUnitTest { diff --git a/geode-core/src/test/java/com/gemstone/gemfire/cache/query/functional/IUMRSingleRegionJUnitTest.java b/geode-core/src/test/java/com/gemstone/gemfire/cache/query/functional/IUMRSingleRegionJUnitTest.java index fda56d25fdb5..03e90f2fe480 100644 --- a/geode-core/src/test/java/com/gemstone/gemfire/cache/query/functional/IUMRSingleRegionJUnitTest.java +++ b/geode-core/src/test/java/com/gemstone/gemfire/cache/query/functional/IUMRSingleRegionJUnitTest.java @@ -59,7 +59,6 @@ import com.gemstone.gemfire.test.junit.categories.IntegrationTest; /** - * @author vjadhav */ @Category(IntegrationTest.class) public class IUMRSingleRegionJUnitTest { diff --git a/geode-core/src/test/java/com/gemstone/gemfire/cache/query/functional/IndependentOperandsInWhereClause2JUnitTest.java b/geode-core/src/test/java/com/gemstone/gemfire/cache/query/functional/IndependentOperandsInWhereClause2JUnitTest.java index e8a750bc6fb5..82f32fac27d3 100755 --- a/geode-core/src/test/java/com/gemstone/gemfire/cache/query/functional/IndependentOperandsInWhereClause2JUnitTest.java +++ b/geode-core/src/test/java/com/gemstone/gemfire/cache/query/functional/IndependentOperandsInWhereClause2JUnitTest.java @@ -46,7 +46,6 @@ /** * - * @author kdeshpan */ @Category(IntegrationTest.class) public class IndependentOperandsInWhereClause2JUnitTest { diff --git a/geode-core/src/test/java/com/gemstone/gemfire/cache/query/functional/IndexCreationDeadLockJUnitTest.java b/geode-core/src/test/java/com/gemstone/gemfire/cache/query/functional/IndexCreationDeadLockJUnitTest.java index 57846a8721ea..3a2d9da46524 100644 --- a/geode-core/src/test/java/com/gemstone/gemfire/cache/query/functional/IndexCreationDeadLockJUnitTest.java +++ b/geode-core/src/test/java/com/gemstone/gemfire/cache/query/functional/IndexCreationDeadLockJUnitTest.java @@ -51,8 +51,6 @@ /** * -* @author prafulla -* @author Asif */ @Category(IntegrationTest.class) public class IndexCreationDeadLockJUnitTest @@ -98,7 +96,6 @@ public void tearDown() throws java.lang.Exception /** * Tests Index creation and maintenance deadlock scenario for in memory region - * @author ashahid * */ @Test @@ -112,7 +109,6 @@ public void testIndexCreationDeadLock() throws Exception /** * Tests Index creation and maintenance deadlock scenario for Persistent only disk region - * @author ashahid */ @Test public void testIndexCreationDeadLockForDiskOnlyRegion() @@ -140,7 +136,6 @@ public void testIndexCreationDeadLockForDiskOnlyRegion() /** * Tests Index creation and maintenance deadlock scenario for a region with stats enabled * - * @author Asif */ @Test public void testIndexCreationDeadLockForStatsEnabledRegion() @@ -160,7 +155,6 @@ public void testIndexCreationDeadLockForStatsEnabledRegion() /** * Tests inability to create index on a region which overflows to disk * - * @author Asif */ @Test public void testIndexCreationDeadLockForOverflowToDiskRegion() diff --git a/geode-core/src/test/java/com/gemstone/gemfire/cache/query/functional/IndexCreationJUnitTest.java b/geode-core/src/test/java/com/gemstone/gemfire/cache/query/functional/IndexCreationJUnitTest.java index 61cdc5424bc9..654a6c90b4db 100755 --- a/geode-core/src/test/java/com/gemstone/gemfire/cache/query/functional/IndexCreationJUnitTest.java +++ b/geode-core/src/test/java/com/gemstone/gemfire/cache/query/functional/IndexCreationJUnitTest.java @@ -23,7 +23,6 @@ /** - * @author vikramj */ package com.gemstone.gemfire.cache.query.functional; @@ -504,7 +503,6 @@ public void testIndexCreationOnRegionEntry() throws Exception { * Creation of index on a path derived from Region.Entry object obtained * via entrySet , fails as that function was not supported in the * QRegion & DummyQRegion - * @author Asif */ @Test public void testBug36823() { @@ -529,7 +527,6 @@ public void testBug36823() { * Creation of index on key path derived from Region.Entry object obtained * via keySet , fails as that function was not supported in the * QRegion & DummyQRegion - * @author Asif */ @Test public void testBug36590() { @@ -553,7 +550,6 @@ public void testBug36590() { * The Index maiantenance has a bug as it does not re-evaluate the * index maintenance collection in the IMQEvaluator when an entry * gets modified & so the index resultset is messed up - * @author Asif */ @Test public void testBug36591() { @@ -579,7 +575,6 @@ public void testBug36591() { * Creation of index on a path derived from Region.Entry object obtained * via entrySet , fails as that function was not supported in the * QRegion & DummyQRegion - * @author Asif */ @Test public void testBug43519() { @@ -613,7 +608,6 @@ public void testBug43519() { /** * Test the Index maiantenance as it may use the method keys() of QRegion * instead of DummyQRegion while running an IndexMaintenanceQuery - * @author Asif */ @Test public void testIMQFailureAsMethodKeysNAInDummyQRegion() { diff --git a/geode-core/src/test/java/com/gemstone/gemfire/cache/query/functional/IndexMaintenanceAsynchJUnitTest.java b/geode-core/src/test/java/com/gemstone/gemfire/cache/query/functional/IndexMaintenanceAsynchJUnitTest.java index ac3b8bb6c457..168bb579d5d9 100755 --- a/geode-core/src/test/java/com/gemstone/gemfire/cache/query/functional/IndexMaintenanceAsynchJUnitTest.java +++ b/geode-core/src/test/java/com/gemstone/gemfire/cache/query/functional/IndexMaintenanceAsynchJUnitTest.java @@ -51,7 +51,6 @@ /** * - * @author Ketan */ @Category(IntegrationTest.class) public class IndexMaintenanceAsynchJUnitTest { diff --git a/geode-core/src/test/java/com/gemstone/gemfire/cache/query/functional/IndexOperatorJUnitTest.java b/geode-core/src/test/java/com/gemstone/gemfire/cache/query/functional/IndexOperatorJUnitTest.java index 13f14c8cdf3c..f59961062f5f 100644 --- a/geode-core/src/test/java/com/gemstone/gemfire/cache/query/functional/IndexOperatorJUnitTest.java +++ b/geode-core/src/test/java/com/gemstone/gemfire/cache/query/functional/IndexOperatorJUnitTest.java @@ -42,7 +42,6 @@ /** * - * @author vikramj */ @Category(IntegrationTest.class) public class IndexOperatorJUnitTest { diff --git a/geode-core/src/test/java/com/gemstone/gemfire/cache/query/functional/IndexPrimaryKeyUsageJUnitTest.java b/geode-core/src/test/java/com/gemstone/gemfire/cache/query/functional/IndexPrimaryKeyUsageJUnitTest.java index 02924af0e7c7..f9744064594f 100755 --- a/geode-core/src/test/java/com/gemstone/gemfire/cache/query/functional/IndexPrimaryKeyUsageJUnitTest.java +++ b/geode-core/src/test/java/com/gemstone/gemfire/cache/query/functional/IndexPrimaryKeyUsageJUnitTest.java @@ -50,7 +50,6 @@ /** * - * @author vikramj */ @Category(IntegrationTest.class) public class IndexPrimaryKeyUsageJUnitTest { diff --git a/geode-core/src/test/java/com/gemstone/gemfire/cache/query/functional/IndexUsageInNestedQueryJUnitTest.java b/geode-core/src/test/java/com/gemstone/gemfire/cache/query/functional/IndexUsageInNestedQueryJUnitTest.java index 798bd5f7e889..8136dd0b6ee3 100755 --- a/geode-core/src/test/java/com/gemstone/gemfire/cache/query/functional/IndexUsageInNestedQueryJUnitTest.java +++ b/geode-core/src/test/java/com/gemstone/gemfire/cache/query/functional/IndexUsageInNestedQueryJUnitTest.java @@ -46,7 +46,6 @@ /** * - * @author vikramj */ @Category(IntegrationTest.class) public class IndexUsageInNestedQueryJUnitTest { diff --git a/geode-core/src/test/java/com/gemstone/gemfire/cache/query/functional/IndexUsageWithAliasAsProjAtrbt.java b/geode-core/src/test/java/com/gemstone/gemfire/cache/query/functional/IndexUsageWithAliasAsProjAtrbt.java index be5e0a7e0211..0ba43ddcf3fc 100755 --- a/geode-core/src/test/java/com/gemstone/gemfire/cache/query/functional/IndexUsageWithAliasAsProjAtrbt.java +++ b/geode-core/src/test/java/com/gemstone/gemfire/cache/query/functional/IndexUsageWithAliasAsProjAtrbt.java @@ -18,7 +18,6 @@ * IndexUsageWithAliasAsProjAtrbt.java * * Created on May 4, 2005, 11:10 AM - *@author vikramj */ package com.gemstone.gemfire.cache.query.functional; diff --git a/geode-core/src/test/java/com/gemstone/gemfire/cache/query/functional/IndexUsageWithAliasAsProjAtrbtJUnitTest.java b/geode-core/src/test/java/com/gemstone/gemfire/cache/query/functional/IndexUsageWithAliasAsProjAtrbtJUnitTest.java index 990b97e29f7a..08b76e795c99 100755 --- a/geode-core/src/test/java/com/gemstone/gemfire/cache/query/functional/IndexUsageWithAliasAsProjAtrbtJUnitTest.java +++ b/geode-core/src/test/java/com/gemstone/gemfire/cache/query/functional/IndexUsageWithAliasAsProjAtrbtJUnitTest.java @@ -18,7 +18,6 @@ * IndexUsageWithAliasAsProjAtrbtJUnitTest.java * * Created on May 4, 2005, 11:10 AM - *@author vikramj */ package com.gemstone.gemfire.cache.query.functional; diff --git a/geode-core/src/test/java/com/gemstone/gemfire/cache/query/functional/IndexUseMultFrmSnglCondJUnitTest.java b/geode-core/src/test/java/com/gemstone/gemfire/cache/query/functional/IndexUseMultFrmSnglCondJUnitTest.java index e79344ee62c9..4c7462013c68 100755 --- a/geode-core/src/test/java/com/gemstone/gemfire/cache/query/functional/IndexUseMultFrmSnglCondJUnitTest.java +++ b/geode-core/src/test/java/com/gemstone/gemfire/cache/query/functional/IndexUseMultFrmSnglCondJUnitTest.java @@ -18,7 +18,6 @@ * CompareIndexUsageTest.java * * Created on April 20, 2005, 5:33 PM - * @author vikramj */ package com.gemstone.gemfire.cache.query.functional; diff --git a/geode-core/src/test/java/com/gemstone/gemfire/cache/query/functional/IndexWithSngleFrmAndMultCondQryJUnitTest.java b/geode-core/src/test/java/com/gemstone/gemfire/cache/query/functional/IndexWithSngleFrmAndMultCondQryJUnitTest.java index fa3761489095..1f978ceadac4 100755 --- a/geode-core/src/test/java/com/gemstone/gemfire/cache/query/functional/IndexWithSngleFrmAndMultCondQryJUnitTest.java +++ b/geode-core/src/test/java/com/gemstone/gemfire/cache/query/functional/IndexWithSngleFrmAndMultCondQryJUnitTest.java @@ -23,7 +23,6 @@ /** * - * @author vikramj */ package com.gemstone.gemfire.cache.query.functional; @@ -455,7 +454,6 @@ public void afterIndexLookup(Collection results) { * Test index usage on PR region & Local region if the total number of indexes * created are more than the fields used in the where clause of the * query and the number of from clause iterators are two - * @author ashahid */ @Test public void testIndexUsageIfIndexesGreaterThanFieldsInQueryWhereClauseWithTwoIterators() throws Exception { @@ -607,7 +605,6 @@ private void executeQuery(Region region, boolean checkReferentialIntegrity) thro * Test index usage on PR region & Local region if the total number of indexes * created are more than the fields used in the where clause of the * query and the number of from clause iterators is One - * @author ashahid */ @Test public void testIndexUsageIfIndexesGreaterThanFieldsInQueryWhereClauseWithOneIterator() throws Exception { @@ -774,7 +771,6 @@ private void executeQuery_1(Region region, boolean checkReferentialIntegrity) th * Test index usage on PR region & Local region if the where clause contains three conditions but * only one condition is indexed & the total number of from clause iterators is 1. * - * @author ashahid */ @Test public void testIndexUsageIfOneFieldIndexedAndMoreThanOneUnindexed_Bug38032() throws Exception { @@ -987,7 +983,6 @@ private void executeQuery_2(Region region, boolean checkReferentialIntegrity) th /** * Test index usage on PR region & Local region if the where clause contains three conditions with * two conditions indexed & the total number of from clause iterators is 1. - * @author ashahid */ @Test public void testIndexUsageIfTwoFieldsIndexedAndOneUnindexed() throws Exception { diff --git a/geode-core/src/test/java/com/gemstone/gemfire/cache/query/functional/IteratorTypeDefEmpJUnitTest.java b/geode-core/src/test/java/com/gemstone/gemfire/cache/query/functional/IteratorTypeDefEmpJUnitTest.java index c7f3cba10fb9..a2290f9aa058 100755 --- a/geode-core/src/test/java/com/gemstone/gemfire/cache/query/functional/IteratorTypeDefEmpJUnitTest.java +++ b/geode-core/src/test/java/com/gemstone/gemfire/cache/query/functional/IteratorTypeDefEmpJUnitTest.java @@ -21,7 +21,6 @@ */ /* * - * @author vikramj */ package com.gemstone.gemfire.cache.query.functional; diff --git a/geode-core/src/test/java/com/gemstone/gemfire/cache/query/functional/IteratorTypeDefJUnitTest.java b/geode-core/src/test/java/com/gemstone/gemfire/cache/query/functional/IteratorTypeDefJUnitTest.java index 903d63eb5fd1..d2440c1be4d2 100755 --- a/geode-core/src/test/java/com/gemstone/gemfire/cache/query/functional/IteratorTypeDefJUnitTest.java +++ b/geode-core/src/test/java/com/gemstone/gemfire/cache/query/functional/IteratorTypeDefJUnitTest.java @@ -21,7 +21,6 @@ */ /* * - * @author vikramj */ package com.gemstone.gemfire.cache.query.functional; diff --git a/geode-core/src/test/java/com/gemstone/gemfire/cache/query/functional/IteratorTypeDefaultTypesJUnitTest.java b/geode-core/src/test/java/com/gemstone/gemfire/cache/query/functional/IteratorTypeDefaultTypesJUnitTest.java index 317561bcee30..3fbb48f564f7 100755 --- a/geode-core/src/test/java/com/gemstone/gemfire/cache/query/functional/IteratorTypeDefaultTypesJUnitTest.java +++ b/geode-core/src/test/java/com/gemstone/gemfire/cache/query/functional/IteratorTypeDefaultTypesJUnitTest.java @@ -22,7 +22,6 @@ /** * - * @author vikramj */ package com.gemstone.gemfire.cache.query.functional; diff --git a/geode-core/src/test/java/com/gemstone/gemfire/cache/query/functional/IumMultConditionJUnitTest.java b/geode-core/src/test/java/com/gemstone/gemfire/cache/query/functional/IumMultConditionJUnitTest.java index e828fa5609d3..913ca2347c40 100755 --- a/geode-core/src/test/java/com/gemstone/gemfire/cache/query/functional/IumMultConditionJUnitTest.java +++ b/geode-core/src/test/java/com/gemstone/gemfire/cache/query/functional/IumMultConditionJUnitTest.java @@ -16,7 +16,6 @@ */ /* * IumMultConditionJUnitTest.java - * @author vikramj * Created on April 29, 2005, 2:30 PM *Task IUM 5 And IUM 6 */ diff --git a/geode-core/src/test/java/com/gemstone/gemfire/cache/query/functional/LikePredicateJUnitTest.java b/geode-core/src/test/java/com/gemstone/gemfire/cache/query/functional/LikePredicateJUnitTest.java index 0bfad5eb026b..1bb33e7c04ec 100644 --- a/geode-core/src/test/java/com/gemstone/gemfire/cache/query/functional/LikePredicateJUnitTest.java +++ b/geode-core/src/test/java/com/gemstone/gemfire/cache/query/functional/LikePredicateJUnitTest.java @@ -62,7 +62,6 @@ /** * - * @author asif */ @Category(IntegrationTest.class) public class LikePredicateJUnitTest { diff --git a/geode-core/src/test/java/com/gemstone/gemfire/cache/query/functional/LimitClauseJUnitTest.java b/geode-core/src/test/java/com/gemstone/gemfire/cache/query/functional/LimitClauseJUnitTest.java index f400991c72a2..c8f08a13315b 100644 --- a/geode-core/src/test/java/com/gemstone/gemfire/cache/query/functional/LimitClauseJUnitTest.java +++ b/geode-core/src/test/java/com/gemstone/gemfire/cache/query/functional/LimitClauseJUnitTest.java @@ -54,7 +54,6 @@ import com.gemstone.gemfire.test.junit.categories.IntegrationTest; /** - * @author asif * */ @Category(IntegrationTest.class) diff --git a/geode-core/src/test/java/com/gemstone/gemfire/cache/query/functional/LogicalOperatorsJUnitTest.java b/geode-core/src/test/java/com/gemstone/gemfire/cache/query/functional/LogicalOperatorsJUnitTest.java index 86a7047cded1..acc032ea4919 100644 --- a/geode-core/src/test/java/com/gemstone/gemfire/cache/query/functional/LogicalOperatorsJUnitTest.java +++ b/geode-core/src/test/java/com/gemstone/gemfire/cache/query/functional/LogicalOperatorsJUnitTest.java @@ -39,7 +39,6 @@ /** * - * @author vaibhav */ @Category(IntegrationTest.class) public class LogicalOperatorsJUnitTest { diff --git a/geode-core/src/test/java/com/gemstone/gemfire/cache/query/functional/MiscJUnitTest.java b/geode-core/src/test/java/com/gemstone/gemfire/cache/query/functional/MiscJUnitTest.java index d4a69f7f082b..cb2a5f173e0f 100644 --- a/geode-core/src/test/java/com/gemstone/gemfire/cache/query/functional/MiscJUnitTest.java +++ b/geode-core/src/test/java/com/gemstone/gemfire/cache/query/functional/MiscJUnitTest.java @@ -63,8 +63,6 @@ import junit.framework.*; /** - * @author vaibhav - * @author Asif */ @Category(IntegrationTest.class) public class MiscJUnitTest { diff --git a/geode-core/src/test/java/com/gemstone/gemfire/cache/query/functional/MultiRegionIndexUsageJUnitTest.java b/geode-core/src/test/java/com/gemstone/gemfire/cache/query/functional/MultiRegionIndexUsageJUnitTest.java index 227759d88246..4354b89dde9e 100644 --- a/geode-core/src/test/java/com/gemstone/gemfire/cache/query/functional/MultiRegionIndexUsageJUnitTest.java +++ b/geode-core/src/test/java/com/gemstone/gemfire/cache/query/functional/MultiRegionIndexUsageJUnitTest.java @@ -60,7 +60,6 @@ //TODO:TEST clean this up and add assertions /** - * @author prafulla */ @Category(IntegrationTest.class) public class MultiRegionIndexUsageJUnitTest { diff --git a/geode-core/src/test/java/com/gemstone/gemfire/cache/query/functional/MultipleRegionsJUnitTest.java b/geode-core/src/test/java/com/gemstone/gemfire/cache/query/functional/MultipleRegionsJUnitTest.java index 9d566a796b09..28d7bc766ab2 100755 --- a/geode-core/src/test/java/com/gemstone/gemfire/cache/query/functional/MultipleRegionsJUnitTest.java +++ b/geode-core/src/test/java/com/gemstone/gemfire/cache/query/functional/MultipleRegionsJUnitTest.java @@ -41,7 +41,6 @@ /** * - * @author vikram */ @Category(IntegrationTest.class) public class MultipleRegionsJUnitTest { diff --git a/geode-core/src/test/java/com/gemstone/gemfire/cache/query/functional/NegativeNumberQueriesJUnitTest.java b/geode-core/src/test/java/com/gemstone/gemfire/cache/query/functional/NegativeNumberQueriesJUnitTest.java index 3b9329339254..711199741585 100755 --- a/geode-core/src/test/java/com/gemstone/gemfire/cache/query/functional/NegativeNumberQueriesJUnitTest.java +++ b/geode-core/src/test/java/com/gemstone/gemfire/cache/query/functional/NegativeNumberQueriesJUnitTest.java @@ -46,7 +46,6 @@ // TODO:TEST clean this up and add assertions /** - * @author prafulla */ @Category(IntegrationTest.class) public class NegativeNumberQueriesJUnitTest { diff --git a/geode-core/src/test/java/com/gemstone/gemfire/cache/query/functional/NestedQueryJUnitTest.java b/geode-core/src/test/java/com/gemstone/gemfire/cache/query/functional/NestedQueryJUnitTest.java index c271c545cde2..11dcb0e169ff 100644 --- a/geode-core/src/test/java/com/gemstone/gemfire/cache/query/functional/NestedQueryJUnitTest.java +++ b/geode-core/src/test/java/com/gemstone/gemfire/cache/query/functional/NestedQueryJUnitTest.java @@ -58,7 +58,6 @@ /** * - * @author vaibhav */ @Category(IntegrationTest.class) public class NestedQueryJUnitTest { diff --git a/geode-core/src/test/java/com/gemstone/gemfire/cache/query/functional/NonDistinctOrderByPartitionedJUnitTest.java b/geode-core/src/test/java/com/gemstone/gemfire/cache/query/functional/NonDistinctOrderByPartitionedJUnitTest.java index 99eb6c091065..c54d23b779c9 100644 --- a/geode-core/src/test/java/com/gemstone/gemfire/cache/query/functional/NonDistinctOrderByPartitionedJUnitTest.java +++ b/geode-core/src/test/java/com/gemstone/gemfire/cache/query/functional/NonDistinctOrderByPartitionedJUnitTest.java @@ -40,7 +40,6 @@ /** * - * @author ashahid * */ @Category(IntegrationTest.class) diff --git a/geode-core/src/test/java/com/gemstone/gemfire/cache/query/functional/NonDistinctOrderByReplicatedJUnitTest.java b/geode-core/src/test/java/com/gemstone/gemfire/cache/query/functional/NonDistinctOrderByReplicatedJUnitTest.java index 257385c2482f..9f8ef4fde5e1 100644 --- a/geode-core/src/test/java/com/gemstone/gemfire/cache/query/functional/NonDistinctOrderByReplicatedJUnitTest.java +++ b/geode-core/src/test/java/com/gemstone/gemfire/cache/query/functional/NonDistinctOrderByReplicatedJUnitTest.java @@ -49,7 +49,6 @@ /** * - * @author ashahid * */ @Category(IntegrationTest.class) diff --git a/geode-core/src/test/java/com/gemstone/gemfire/cache/query/functional/NonDistinctOrderByTestImplementation.java b/geode-core/src/test/java/com/gemstone/gemfire/cache/query/functional/NonDistinctOrderByTestImplementation.java index 65883cf44b35..41e0413e2864 100644 --- a/geode-core/src/test/java/com/gemstone/gemfire/cache/query/functional/NonDistinctOrderByTestImplementation.java +++ b/geode-core/src/test/java/com/gemstone/gemfire/cache/query/functional/NonDistinctOrderByTestImplementation.java @@ -51,7 +51,6 @@ /** * - * @author ashahid * */ public abstract class NonDistinctOrderByTestImplementation { diff --git a/geode-core/src/test/java/com/gemstone/gemfire/cache/query/functional/NumericQueryJUnitTest.java b/geode-core/src/test/java/com/gemstone/gemfire/cache/query/functional/NumericQueryJUnitTest.java index 6186de1137dc..3487ab907de0 100644 --- a/geode-core/src/test/java/com/gemstone/gemfire/cache/query/functional/NumericQueryJUnitTest.java +++ b/geode-core/src/test/java/com/gemstone/gemfire/cache/query/functional/NumericQueryJUnitTest.java @@ -50,7 +50,6 @@ /** * - * @author jhuynh * */ @Category(IntegrationTest.class) diff --git a/geode-core/src/test/java/com/gemstone/gemfire/cache/query/functional/OrderByPartitionedJUnitTest.java b/geode-core/src/test/java/com/gemstone/gemfire/cache/query/functional/OrderByPartitionedJUnitTest.java index 0d062e3cdc53..e1469e4ebd5b 100644 --- a/geode-core/src/test/java/com/gemstone/gemfire/cache/query/functional/OrderByPartitionedJUnitTest.java +++ b/geode-core/src/test/java/com/gemstone/gemfire/cache/query/functional/OrderByPartitionedJUnitTest.java @@ -48,7 +48,6 @@ /** * - * @author ashahid * */ @Category(IntegrationTest.class) diff --git a/geode-core/src/test/java/com/gemstone/gemfire/cache/query/functional/OrderByTestImplementation.java b/geode-core/src/test/java/com/gemstone/gemfire/cache/query/functional/OrderByTestImplementation.java index f34a94b3b8c5..71e2c6d6a93a 100644 --- a/geode-core/src/test/java/com/gemstone/gemfire/cache/query/functional/OrderByTestImplementation.java +++ b/geode-core/src/test/java/com/gemstone/gemfire/cache/query/functional/OrderByTestImplementation.java @@ -53,7 +53,6 @@ /** * - * @author ashahid * */ public abstract class OrderByTestImplementation { diff --git a/geode-core/src/test/java/com/gemstone/gemfire/cache/query/functional/ParameterBindingJUnitTest.java b/geode-core/src/test/java/com/gemstone/gemfire/cache/query/functional/ParameterBindingJUnitTest.java index fb42f0a44d64..710a9d438fbe 100644 --- a/geode-core/src/test/java/com/gemstone/gemfire/cache/query/functional/ParameterBindingJUnitTest.java +++ b/geode-core/src/test/java/com/gemstone/gemfire/cache/query/functional/ParameterBindingJUnitTest.java @@ -49,7 +49,6 @@ /** * - * @author vaibhav */ @Category(IntegrationTest.class) public class ParameterBindingJUnitTest { diff --git a/geode-core/src/test/java/com/gemstone/gemfire/cache/query/functional/QRegionInterfaceJUnitTest.java b/geode-core/src/test/java/com/gemstone/gemfire/cache/query/functional/QRegionInterfaceJUnitTest.java index 63c5c779dbd2..0a3052f1dbc0 100644 --- a/geode-core/src/test/java/com/gemstone/gemfire/cache/query/functional/QRegionInterfaceJUnitTest.java +++ b/geode-core/src/test/java/com/gemstone/gemfire/cache/query/functional/QRegionInterfaceJUnitTest.java @@ -42,7 +42,6 @@ /** * - * @author vaibhav */ @Category(IntegrationTest.class) public class QRegionInterfaceJUnitTest { diff --git a/geode-core/src/test/java/com/gemstone/gemfire/cache/query/functional/QueryREUpdateInProgressJUnitTest.java b/geode-core/src/test/java/com/gemstone/gemfire/cache/query/functional/QueryREUpdateInProgressJUnitTest.java index b2bf9adc964a..677321f20a76 100644 --- a/geode-core/src/test/java/com/gemstone/gemfire/cache/query/functional/QueryREUpdateInProgressJUnitTest.java +++ b/geode-core/src/test/java/com/gemstone/gemfire/cache/query/functional/QueryREUpdateInProgressJUnitTest.java @@ -53,7 +53,6 @@ * their results to test DataInconsistency changes for Bug #41010 * and #42757. * - * @author shobhit * */ @Category(IntegrationTest.class) diff --git a/geode-core/src/test/java/com/gemstone/gemfire/cache/query/functional/ReservedKeywordsJUnitTest.java b/geode-core/src/test/java/com/gemstone/gemfire/cache/query/functional/ReservedKeywordsJUnitTest.java index 0327ab3dd900..022916328500 100644 --- a/geode-core/src/test/java/com/gemstone/gemfire/cache/query/functional/ReservedKeywordsJUnitTest.java +++ b/geode-core/src/test/java/com/gemstone/gemfire/cache/query/functional/ReservedKeywordsJUnitTest.java @@ -39,7 +39,6 @@ import com.gemstone.gemfire.test.junit.categories.IntegrationTest; /** - * @author vaibhav */ @Category(IntegrationTest.class) public class ReservedKeywordsJUnitTest { diff --git a/geode-core/src/test/java/com/gemstone/gemfire/cache/query/functional/ResultsDataSerializabilityJUnitTest.java b/geode-core/src/test/java/com/gemstone/gemfire/cache/query/functional/ResultsDataSerializabilityJUnitTest.java index 2f5a80a5f97d..cb45bad86b9d 100644 --- a/geode-core/src/test/java/com/gemstone/gemfire/cache/query/functional/ResultsDataSerializabilityJUnitTest.java +++ b/geode-core/src/test/java/com/gemstone/gemfire/cache/query/functional/ResultsDataSerializabilityJUnitTest.java @@ -62,7 +62,6 @@ /** * Test whether query results are DataSerializable * - * @author ezoerner */ @Category(IntegrationTest.class) public class ResultsDataSerializabilityJUnitTest { diff --git a/geode-core/src/test/java/com/gemstone/gemfire/cache/query/functional/StructMemberAccessJUnitTest.java b/geode-core/src/test/java/com/gemstone/gemfire/cache/query/functional/StructMemberAccessJUnitTest.java index 91a05b1059b2..57206b9b663c 100644 --- a/geode-core/src/test/java/com/gemstone/gemfire/cache/query/functional/StructMemberAccessJUnitTest.java +++ b/geode-core/src/test/java/com/gemstone/gemfire/cache/query/functional/StructMemberAccessJUnitTest.java @@ -51,7 +51,6 @@ import com.gemstone.gemfire.test.junit.categories.IntegrationTest; /** - * @author vaibhav */ @Category(IntegrationTest.class) public class StructMemberAccessJUnitTest { diff --git a/geode-core/src/test/java/com/gemstone/gemfire/cache/query/functional/StructSetOrResultsSet.java b/geode-core/src/test/java/com/gemstone/gemfire/cache/query/functional/StructSetOrResultsSet.java index c92b941b63e4..fe5aa4f666ef 100755 --- a/geode-core/src/test/java/com/gemstone/gemfire/cache/query/functional/StructSetOrResultsSet.java +++ b/geode-core/src/test/java/com/gemstone/gemfire/cache/query/functional/StructSetOrResultsSet.java @@ -57,7 +57,6 @@ import com.gemstone.gemfire.internal.util.ArrayUtils; /** - * @author vikramj, shobhit */ public class StructSetOrResultsSet extends TestCase { diff --git a/geode-core/src/test/java/com/gemstone/gemfire/cache/query/functional/TestNewFunctionSSorRS.java b/geode-core/src/test/java/com/gemstone/gemfire/cache/query/functional/TestNewFunctionSSorRS.java index 97ab46274718..38b4a07e0bb7 100755 --- a/geode-core/src/test/java/com/gemstone/gemfire/cache/query/functional/TestNewFunctionSSorRS.java +++ b/geode-core/src/test/java/com/gemstone/gemfire/cache/query/functional/TestNewFunctionSSorRS.java @@ -37,7 +37,6 @@ /** * - * @author Ketand */ public class TestNewFunctionSSorRS extends TestCase { diff --git a/geode-core/src/test/java/com/gemstone/gemfire/cache/query/internal/CompiledAggregateFunctionJUnitTest.java b/geode-core/src/test/java/com/gemstone/gemfire/cache/query/internal/CompiledAggregateFunctionJUnitTest.java index f4760128a98c..fc793bf55016 100644 --- a/geode-core/src/test/java/com/gemstone/gemfire/cache/query/internal/CompiledAggregateFunctionJUnitTest.java +++ b/geode-core/src/test/java/com/gemstone/gemfire/cache/query/internal/CompiledAggregateFunctionJUnitTest.java @@ -47,7 +47,6 @@ /** * - * @author ashahid * */ @Category(UnitTest.class) diff --git a/geode-core/src/test/java/com/gemstone/gemfire/cache/query/internal/CompiledGroupBySelectJUnitTest.java b/geode-core/src/test/java/com/gemstone/gemfire/cache/query/internal/CompiledGroupBySelectJUnitTest.java index e787db7812bc..93cfc5ff3859 100644 --- a/geode-core/src/test/java/com/gemstone/gemfire/cache/query/internal/CompiledGroupBySelectJUnitTest.java +++ b/geode-core/src/test/java/com/gemstone/gemfire/cache/query/internal/CompiledGroupBySelectJUnitTest.java @@ -36,7 +36,6 @@ /** * - * @author ashahid * */ @Category(IntegrationTest.class) diff --git a/geode-core/src/test/java/com/gemstone/gemfire/cache/query/internal/CompiledJunctionInternalsJUnitTest.java b/geode-core/src/test/java/com/gemstone/gemfire/cache/query/internal/CompiledJunctionInternalsJUnitTest.java index 7647f6cb3f4c..c3e1a459804a 100644 --- a/geode-core/src/test/java/com/gemstone/gemfire/cache/query/internal/CompiledJunctionInternalsJUnitTest.java +++ b/geode-core/src/test/java/com/gemstone/gemfire/cache/query/internal/CompiledJunctionInternalsJUnitTest.java @@ -53,7 +53,6 @@ import com.gemstone.gemfire.test.junit.categories.IntegrationTest; /** - * @author ashahid * * */ diff --git a/geode-core/src/test/java/com/gemstone/gemfire/cache/query/internal/CopyOnReadQueryJUnitTest.java b/geode-core/src/test/java/com/gemstone/gemfire/cache/query/internal/CopyOnReadQueryJUnitTest.java index ffa0d742acee..523b52806cc3 100644 --- a/geode-core/src/test/java/com/gemstone/gemfire/cache/query/internal/CopyOnReadQueryJUnitTest.java +++ b/geode-core/src/test/java/com/gemstone/gemfire/cache/query/internal/CopyOnReadQueryJUnitTest.java @@ -37,7 +37,6 @@ /** * - * @author jhuynh * */ @Category(IntegrationTest.class) diff --git a/geode-core/src/test/java/com/gemstone/gemfire/cache/query/internal/ExecutionContextJUnitTest.java b/geode-core/src/test/java/com/gemstone/gemfire/cache/query/internal/ExecutionContextJUnitTest.java index 41d6d6217d35..9d84bd148a0a 100644 --- a/geode-core/src/test/java/com/gemstone/gemfire/cache/query/internal/ExecutionContextJUnitTest.java +++ b/geode-core/src/test/java/com/gemstone/gemfire/cache/query/internal/ExecutionContextJUnitTest.java @@ -48,7 +48,6 @@ import com.gemstone.gemfire.test.junit.categories.IntegrationTest; /** - * @author Asif * * */ diff --git a/geode-core/src/test/java/com/gemstone/gemfire/cache/query/internal/IndexManagerJUnitTest.java b/geode-core/src/test/java/com/gemstone/gemfire/cache/query/internal/IndexManagerJUnitTest.java index 71c5ebadf283..c7633ea05b0f 100644 --- a/geode-core/src/test/java/com/gemstone/gemfire/cache/query/internal/IndexManagerJUnitTest.java +++ b/geode-core/src/test/java/com/gemstone/gemfire/cache/query/internal/IndexManagerJUnitTest.java @@ -15,7 +15,6 @@ * limitations under the License. */ /** - * @author Asif */ package com.gemstone.gemfire.cache.query.internal; diff --git a/geode-core/src/test/java/com/gemstone/gemfire/cache/query/internal/NWayMergeResultsJUnitTest.java b/geode-core/src/test/java/com/gemstone/gemfire/cache/query/internal/NWayMergeResultsJUnitTest.java index af00162ad545..a4043f010fd3 100644 --- a/geode-core/src/test/java/com/gemstone/gemfire/cache/query/internal/NWayMergeResultsJUnitTest.java +++ b/geode-core/src/test/java/com/gemstone/gemfire/cache/query/internal/NWayMergeResultsJUnitTest.java @@ -42,7 +42,6 @@ /** * - * @author asif * */ @Category(UnitTest.class) diff --git a/geode-core/src/test/java/com/gemstone/gemfire/cache/query/internal/ProjectionAttributeJUnitTest.java b/geode-core/src/test/java/com/gemstone/gemfire/cache/query/internal/ProjectionAttributeJUnitTest.java index c7a8afc4424c..67e7de2f6693 100644 --- a/geode-core/src/test/java/com/gemstone/gemfire/cache/query/internal/ProjectionAttributeJUnitTest.java +++ b/geode-core/src/test/java/com/gemstone/gemfire/cache/query/internal/ProjectionAttributeJUnitTest.java @@ -50,7 +50,6 @@ import com.gemstone.gemfire.test.junit.categories.IntegrationTest; /** - * @author Asif * * */ diff --git a/geode-core/src/test/java/com/gemstone/gemfire/cache/query/internal/QCompilerJUnitTest.java b/geode-core/src/test/java/com/gemstone/gemfire/cache/query/internal/QCompilerJUnitTest.java index dd714d3cd875..bcf0b658490d 100644 --- a/geode-core/src/test/java/com/gemstone/gemfire/cache/query/internal/QCompilerJUnitTest.java +++ b/geode-core/src/test/java/com/gemstone/gemfire/cache/query/internal/QCompilerJUnitTest.java @@ -39,7 +39,6 @@ import com.gemstone.gemfire.test.junit.categories.IntegrationTest; /** - * @author Asif * * */ diff --git a/geode-core/src/test/java/com/gemstone/gemfire/cache/query/internal/QueryFromClauseCanonicalizationJUnitTest.java b/geode-core/src/test/java/com/gemstone/gemfire/cache/query/internal/QueryFromClauseCanonicalizationJUnitTest.java index f62fb8ad8026..22bdf3902385 100644 --- a/geode-core/src/test/java/com/gemstone/gemfire/cache/query/internal/QueryFromClauseCanonicalizationJUnitTest.java +++ b/geode-core/src/test/java/com/gemstone/gemfire/cache/query/internal/QueryFromClauseCanonicalizationJUnitTest.java @@ -43,7 +43,6 @@ /** * - * @author Asif */ @Category(IntegrationTest.class) public class QueryFromClauseCanonicalizationJUnitTest diff --git a/geode-core/src/test/java/com/gemstone/gemfire/cache/query/internal/QueryObjectSerializationJUnitTest.java b/geode-core/src/test/java/com/gemstone/gemfire/cache/query/internal/QueryObjectSerializationJUnitTest.java index 6c9e6c763e6f..8da72df032af 100644 --- a/geode-core/src/test/java/com/gemstone/gemfire/cache/query/internal/QueryObjectSerializationJUnitTest.java +++ b/geode-core/src/test/java/com/gemstone/gemfire/cache/query/internal/QueryObjectSerializationJUnitTest.java @@ -39,7 +39,6 @@ /** * Tests the Serialization of the Query related class. * - * @author kbanks * @since 3.0 */ @Category(UnitTest.class) diff --git a/geode-core/src/test/java/com/gemstone/gemfire/cache/query/internal/QueryObserverCallbackJUnitTest.java b/geode-core/src/test/java/com/gemstone/gemfire/cache/query/internal/QueryObserverCallbackJUnitTest.java index ce19d5ac16d7..eb3b2b0d65c2 100644 --- a/geode-core/src/test/java/com/gemstone/gemfire/cache/query/internal/QueryObserverCallbackJUnitTest.java +++ b/geode-core/src/test/java/com/gemstone/gemfire/cache/query/internal/QueryObserverCallbackJUnitTest.java @@ -49,7 +49,6 @@ import com.gemstone.gemfire.test.junit.categories.IntegrationTest; /** - * @author ashahid * * */ diff --git a/geode-core/src/test/java/com/gemstone/gemfire/cache/query/internal/QueryTraceJUnitTest.java b/geode-core/src/test/java/com/gemstone/gemfire/cache/query/internal/QueryTraceJUnitTest.java index 841e377c5e5f..60be767fc2d4 100644 --- a/geode-core/src/test/java/com/gemstone/gemfire/cache/query/internal/QueryTraceJUnitTest.java +++ b/geode-core/src/test/java/com/gemstone/gemfire/cache/query/internal/QueryTraceJUnitTest.java @@ -49,7 +49,6 @@ import com.gemstone.gemfire.test.junit.categories.IntegrationTest; /** - * @author shobhit * */ @Category(IntegrationTest.class) diff --git a/geode-core/src/test/java/com/gemstone/gemfire/cache/query/internal/QueryUtilsJUnitTest.java b/geode-core/src/test/java/com/gemstone/gemfire/cache/query/internal/QueryUtilsJUnitTest.java index c844d4bfb89b..bf596fbc71a5 100644 --- a/geode-core/src/test/java/com/gemstone/gemfire/cache/query/internal/QueryUtilsJUnitTest.java +++ b/geode-core/src/test/java/com/gemstone/gemfire/cache/query/internal/QueryUtilsJUnitTest.java @@ -47,7 +47,6 @@ import com.gemstone.gemfire.test.junit.categories.IntegrationTest; /** - * @author Asif * * */ diff --git a/geode-core/src/test/java/com/gemstone/gemfire/cache/query/internal/ResultsBagJUnitTest.java b/geode-core/src/test/java/com/gemstone/gemfire/cache/query/internal/ResultsBagJUnitTest.java index 9758e04f29f0..181bb8251bf3 100644 --- a/geode-core/src/test/java/com/gemstone/gemfire/cache/query/internal/ResultsBagJUnitTest.java +++ b/geode-core/src/test/java/com/gemstone/gemfire/cache/query/internal/ResultsBagJUnitTest.java @@ -32,7 +32,6 @@ /** * Test ResultsBag, including null elements - * @author ezoerner */ @Category(UnitTest.class) public class ResultsBagJUnitTest extends TestCase { diff --git a/geode-core/src/test/java/com/gemstone/gemfire/cache/query/internal/ResultsBagLimitBehaviourJUnitTest.java b/geode-core/src/test/java/com/gemstone/gemfire/cache/query/internal/ResultsBagLimitBehaviourJUnitTest.java index 3208f55968f4..aacb00efcd84 100644 --- a/geode-core/src/test/java/com/gemstone/gemfire/cache/query/internal/ResultsBagLimitBehaviourJUnitTest.java +++ b/geode-core/src/test/java/com/gemstone/gemfire/cache/query/internal/ResultsBagLimitBehaviourJUnitTest.java @@ -41,7 +41,6 @@ /** * Test ResultsBag Limit behaviour * - * @author Asif */ @Category(UnitTest.class) public class ResultsBagLimitBehaviourJUnitTest extends TestCase { diff --git a/geode-core/src/test/java/com/gemstone/gemfire/cache/query/internal/ResultsCollectionWrapperLimitJUnitTest.java b/geode-core/src/test/java/com/gemstone/gemfire/cache/query/internal/ResultsCollectionWrapperLimitJUnitTest.java index d3894051f3cd..b24da54c4edf 100644 --- a/geode-core/src/test/java/com/gemstone/gemfire/cache/query/internal/ResultsCollectionWrapperLimitJUnitTest.java +++ b/geode-core/src/test/java/com/gemstone/gemfire/cache/query/internal/ResultsCollectionWrapperLimitJUnitTest.java @@ -36,7 +36,6 @@ import junit.framework.TestCase; /** - * @author Asif * */ @Category(UnitTest.class) diff --git a/geode-core/src/test/java/com/gemstone/gemfire/cache/query/internal/SelectResultsComparatorJUnitTest.java b/geode-core/src/test/java/com/gemstone/gemfire/cache/query/internal/SelectResultsComparatorJUnitTest.java index e3aa2a6ce9da..d8c291338aa6 100644 --- a/geode-core/src/test/java/com/gemstone/gemfire/cache/query/internal/SelectResultsComparatorJUnitTest.java +++ b/geode-core/src/test/java/com/gemstone/gemfire/cache/query/internal/SelectResultsComparatorJUnitTest.java @@ -34,7 +34,6 @@ import junit.framework.TestCase; /** - * @author kdeshpan * */ @Category(UnitTest.class) diff --git a/geode-core/src/test/java/com/gemstone/gemfire/cache/query/internal/StructBagLimitBehaviourJUnitTest.java b/geode-core/src/test/java/com/gemstone/gemfire/cache/query/internal/StructBagLimitBehaviourJUnitTest.java index 44e238c687a1..ea4f5f74f7e4 100644 --- a/geode-core/src/test/java/com/gemstone/gemfire/cache/query/internal/StructBagLimitBehaviourJUnitTest.java +++ b/geode-core/src/test/java/com/gemstone/gemfire/cache/query/internal/StructBagLimitBehaviourJUnitTest.java @@ -32,7 +32,6 @@ /** * Test StructsBag Limit behaviour * - * @author Asif */ @Category(UnitTest.class) public class StructBagLimitBehaviourJUnitTest extends ResultsBagLimitBehaviourJUnitTest { diff --git a/geode-core/src/test/java/com/gemstone/gemfire/cache/query/internal/StructSetJUnitTest.java b/geode-core/src/test/java/com/gemstone/gemfire/cache/query/internal/StructSetJUnitTest.java index 6c38ffb73569..fd66df82559e 100644 --- a/geode-core/src/test/java/com/gemstone/gemfire/cache/query/internal/StructSetJUnitTest.java +++ b/geode-core/src/test/java/com/gemstone/gemfire/cache/query/internal/StructSetJUnitTest.java @@ -37,7 +37,6 @@ /** * - * @author ericz */ @Category(UnitTest.class) public class StructSetJUnitTest extends TestCase { diff --git a/geode-core/src/test/java/com/gemstone/gemfire/cache/query/internal/aggregate/AggregatorJUnitTest.java b/geode-core/src/test/java/com/gemstone/gemfire/cache/query/internal/aggregate/AggregatorJUnitTest.java index 0fc7dd623571..9645b4e8e5cf 100644 --- a/geode-core/src/test/java/com/gemstone/gemfire/cache/query/internal/aggregate/AggregatorJUnitTest.java +++ b/geode-core/src/test/java/com/gemstone/gemfire/cache/query/internal/aggregate/AggregatorJUnitTest.java @@ -28,7 +28,6 @@ /** * - * @author ashahid * */ @Category(UnitTest.class) diff --git a/geode-core/src/test/java/com/gemstone/gemfire/cache/query/internal/index/AsyncIndexUpdaterThreadShutdownJUnitTest.java b/geode-core/src/test/java/com/gemstone/gemfire/cache/query/internal/index/AsyncIndexUpdaterThreadShutdownJUnitTest.java index db421c80034d..8c3d09b7caec 100644 --- a/geode-core/src/test/java/com/gemstone/gemfire/cache/query/internal/index/AsyncIndexUpdaterThreadShutdownJUnitTest.java +++ b/geode-core/src/test/java/com/gemstone/gemfire/cache/query/internal/index/AsyncIndexUpdaterThreadShutdownJUnitTest.java @@ -44,7 +44,6 @@ * close {@link IndexUpdaterThread} is shutdown for each region * (Replicated/Bucket). * - * @author shobhit * */ @Category(IntegrationTest.class) diff --git a/geode-core/src/test/java/com/gemstone/gemfire/cache/query/internal/index/AsynchIndexMaintenanceJUnitTest.java b/geode-core/src/test/java/com/gemstone/gemfire/cache/query/internal/index/AsynchIndexMaintenanceJUnitTest.java index eeaa36c129ca..18bc54cdb4c8 100644 --- a/geode-core/src/test/java/com/gemstone/gemfire/cache/query/internal/index/AsynchIndexMaintenanceJUnitTest.java +++ b/geode-core/src/test/java/com/gemstone/gemfire/cache/query/internal/index/AsynchIndexMaintenanceJUnitTest.java @@ -46,7 +46,6 @@ import junit.framework.TestCase; /** - * @author Asif * */ @Category(IntegrationTest.class) diff --git a/geode-core/src/test/java/com/gemstone/gemfire/cache/query/internal/index/CompactRangeIndexJUnitTest.java b/geode-core/src/test/java/com/gemstone/gemfire/cache/query/internal/index/CompactRangeIndexJUnitTest.java index 68a946c0a49f..67224b20653d 100644 --- a/geode-core/src/test/java/com/gemstone/gemfire/cache/query/internal/index/CompactRangeIndexJUnitTest.java +++ b/geode-core/src/test/java/com/gemstone/gemfire/cache/query/internal/index/CompactRangeIndexJUnitTest.java @@ -49,7 +49,6 @@ /** * - * @author Tejas Nomulwar * */ @Category(IntegrationTest.class) diff --git a/geode-core/src/test/java/com/gemstone/gemfire/cache/query/internal/index/ConcurrentIndexInitOnOverflowRegionDUnitTest.java b/geode-core/src/test/java/com/gemstone/gemfire/cache/query/internal/index/ConcurrentIndexInitOnOverflowRegionDUnitTest.java index ca90f004d5ea..19b1dfb7db9d 100644 --- a/geode-core/src/test/java/com/gemstone/gemfire/cache/query/internal/index/ConcurrentIndexInitOnOverflowRegionDUnitTest.java +++ b/geode-core/src/test/java/com/gemstone/gemfire/cache/query/internal/index/ConcurrentIndexInitOnOverflowRegionDUnitTest.java @@ -54,7 +54,6 @@ import com.gemstone.gemfire.test.dunit.Wait; /** - * @author shobhit * */ public class ConcurrentIndexInitOnOverflowRegionDUnitTest extends CacheTestCase { diff --git a/geode-core/src/test/java/com/gemstone/gemfire/cache/query/internal/index/ConcurrentIndexOperationsOnOverflowRegionDUnitTest.java b/geode-core/src/test/java/com/gemstone/gemfire/cache/query/internal/index/ConcurrentIndexOperationsOnOverflowRegionDUnitTest.java index 81482b40a329..25e41661a9f7 100644 --- a/geode-core/src/test/java/com/gemstone/gemfire/cache/query/internal/index/ConcurrentIndexOperationsOnOverflowRegionDUnitTest.java +++ b/geode-core/src/test/java/com/gemstone/gemfire/cache/query/internal/index/ConcurrentIndexOperationsOnOverflowRegionDUnitTest.java @@ -59,7 +59,6 @@ * taking early locks on compact indexes and remove the requirement of the * system property gemfire.index.acquireCompactIndexLocksWithRegionEntryLocks. * - * @author shobhit * */ public class ConcurrentIndexOperationsOnOverflowRegionDUnitTest extends diff --git a/geode-core/src/test/java/com/gemstone/gemfire/cache/query/internal/index/ConcurrentIndexUpdateWithInplaceObjectModFalseDUnitTest.java b/geode-core/src/test/java/com/gemstone/gemfire/cache/query/internal/index/ConcurrentIndexUpdateWithInplaceObjectModFalseDUnitTest.java index 6cbbef24d80f..517effb056ac 100644 --- a/geode-core/src/test/java/com/gemstone/gemfire/cache/query/internal/index/ConcurrentIndexUpdateWithInplaceObjectModFalseDUnitTest.java +++ b/geode-core/src/test/java/com/gemstone/gemfire/cache/query/internal/index/ConcurrentIndexUpdateWithInplaceObjectModFalseDUnitTest.java @@ -59,7 +59,6 @@ * During validation all region operations are paused for a while. Validation * happens multiple time during one test run on a fixed time interval. * - * @author shobhit * */ public class ConcurrentIndexUpdateWithInplaceObjectModFalseDUnitTest extends @@ -332,7 +331,6 @@ public void testRangeIndexOnPR() { * This validator will iterate over RegionEntries and verify their corresponding * index key and entry presence in index valuesToEntriesMap. * - * @author shobhit * */ public class IndexValidator { diff --git a/geode-core/src/test/java/com/gemstone/gemfire/cache/query/internal/index/ConcurrentIndexUpdateWithoutWLDUnitTest.java b/geode-core/src/test/java/com/gemstone/gemfire/cache/query/internal/index/ConcurrentIndexUpdateWithoutWLDUnitTest.java index 2ac564ae9db1..cc00744b4fcf 100644 --- a/geode-core/src/test/java/com/gemstone/gemfire/cache/query/internal/index/ConcurrentIndexUpdateWithoutWLDUnitTest.java +++ b/geode-core/src/test/java/com/gemstone/gemfire/cache/query/internal/index/ConcurrentIndexUpdateWithoutWLDUnitTest.java @@ -57,7 +57,6 @@ * During validation all region operations are paused for a while. Validation * happens multiple time during one test run on a fixed time interval. * - * @author shobhit * */ public class ConcurrentIndexUpdateWithoutWLDUnitTest extends @@ -419,7 +418,6 @@ public void testMultiIndexOnPR() { * This validator will iterate over RegionEntries and verify their corresponding * index key and entry presence in index valuesToEntriesMap. * - * @author shobhit * */ public class IndexValidator { diff --git a/geode-core/src/test/java/com/gemstone/gemfire/cache/query/internal/index/CopyOnReadIndexJUnitTest.java b/geode-core/src/test/java/com/gemstone/gemfire/cache/query/internal/index/CopyOnReadIndexJUnitTest.java index 23466f2c06f6..31f4dc1c77d3 100644 --- a/geode-core/src/test/java/com/gemstone/gemfire/cache/query/internal/index/CopyOnReadIndexJUnitTest.java +++ b/geode-core/src/test/java/com/gemstone/gemfire/cache/query/internal/index/CopyOnReadIndexJUnitTest.java @@ -37,7 +37,6 @@ /** * - * @author jhuynh * */ @Category(IntegrationTest.class) diff --git a/geode-core/src/test/java/com/gemstone/gemfire/cache/query/internal/index/DeclarativeIndexCreationJUnitTest.java b/geode-core/src/test/java/com/gemstone/gemfire/cache/query/internal/index/DeclarativeIndexCreationJUnitTest.java index 1d275bb07422..e22129ca6bc1 100644 --- a/geode-core/src/test/java/com/gemstone/gemfire/cache/query/internal/index/DeclarativeIndexCreationJUnitTest.java +++ b/geode-core/src/test/java/com/gemstone/gemfire/cache/query/internal/index/DeclarativeIndexCreationJUnitTest.java @@ -40,7 +40,6 @@ import com.gemstone.gemfire.test.junit.categories.IntegrationTest; /** - * @author asifs * * To change the template for this generated type comment go to Window - * Preferences - Java - Code Generation - Code and Comments diff --git a/geode-core/src/test/java/com/gemstone/gemfire/cache/query/internal/index/IndexCreationInternalsJUnitTest.java b/geode-core/src/test/java/com/gemstone/gemfire/cache/query/internal/index/IndexCreationInternalsJUnitTest.java index 7df9a5bf7301..df1e258f4c32 100644 --- a/geode-core/src/test/java/com/gemstone/gemfire/cache/query/internal/index/IndexCreationInternalsJUnitTest.java +++ b/geode-core/src/test/java/com/gemstone/gemfire/cache/query/internal/index/IndexCreationInternalsJUnitTest.java @@ -50,7 +50,6 @@ /** * - * @author ericz */ @Category(IntegrationTest.class) public class IndexCreationInternalsJUnitTest { diff --git a/geode-core/src/test/java/com/gemstone/gemfire/cache/query/internal/index/IndexJUnitTest.java b/geode-core/src/test/java/com/gemstone/gemfire/cache/query/internal/index/IndexJUnitTest.java index 2992e3c7efca..07a11cd61821 100644 --- a/geode-core/src/test/java/com/gemstone/gemfire/cache/query/internal/index/IndexJUnitTest.java +++ b/geode-core/src/test/java/com/gemstone/gemfire/cache/query/internal/index/IndexJUnitTest.java @@ -39,8 +39,6 @@ import com.gemstone.gemfire.test.junit.categories.IntegrationTest; /** - * @author vaibhav - * @author Kirk Lund */ @Category(IntegrationTest.class) public class IndexJUnitTest { diff --git a/geode-core/src/test/java/com/gemstone/gemfire/cache/query/internal/index/IndexMaintainceJUnitTest.java b/geode-core/src/test/java/com/gemstone/gemfire/cache/query/internal/index/IndexMaintainceJUnitTest.java index c1d39b98143a..3ee758bcf4c8 100644 --- a/geode-core/src/test/java/com/gemstone/gemfire/cache/query/internal/index/IndexMaintainceJUnitTest.java +++ b/geode-core/src/test/java/com/gemstone/gemfire/cache/query/internal/index/IndexMaintainceJUnitTest.java @@ -56,7 +56,6 @@ /** * - * @author vaibhav */ @FixMethodOrder(MethodSorters.NAME_ASCENDING) @Category(IntegrationTest.class) diff --git a/geode-core/src/test/java/com/gemstone/gemfire/cache/query/internal/index/IndexMaintenanceJUnitTest.java b/geode-core/src/test/java/com/gemstone/gemfire/cache/query/internal/index/IndexMaintenanceJUnitTest.java index 29b6ef14683f..561607829dac 100644 --- a/geode-core/src/test/java/com/gemstone/gemfire/cache/query/internal/index/IndexMaintenanceJUnitTest.java +++ b/geode-core/src/test/java/com/gemstone/gemfire/cache/query/internal/index/IndexMaintenanceJUnitTest.java @@ -67,7 +67,6 @@ /** * - * @author Asif */ @Category(IntegrationTest.class) public class IndexMaintenanceJUnitTest @@ -116,7 +115,6 @@ public void tearDown() throws Exception { /** * Tests Index maintenance on heterogenous objects - * @author Asif */ @Test public void testIndexMaintenanceWithHeterogenousObjects() { @@ -210,7 +208,6 @@ public void testIndexMaintenanceWithHeterogenousObjects() { /** * Tests query on region containing heterogenous objects - * @author Asif */ @Test public void testQueryOnHeterogenousObjects() { @@ -298,7 +295,6 @@ public void endQuery() { /** * Tests Index maintenance on method Keys() as iterator ( with focus on * behaviour if not implemented in DummyQRegion - * @author Asif */ @Test public void testIndexMaintenanceWithIndexOnMethodKeys() { @@ -322,7 +318,6 @@ public void testIndexMaintenanceWithIndexOnMethodKeys() { /** * Tests Index maintenance on method asList() as iterator ( with focus on * behaviour if not implemented in DummyQRegion - * @author Asif */ @Test public void testIndexMaintenanceWithIndexOnMethodAsList() { @@ -345,7 +340,6 @@ public void testIndexMaintenanceWithIndexOnMethodAsList() { /** * Tests Index maintenance on method values() as iterator ( with focus on * behaviour if not implemented in DummyQRegion - * @author Asif */ @Test public void testIndexMaintenanceWithIndexOnMethodValues() { @@ -369,7 +363,6 @@ public void testIndexMaintenanceWithIndexOnMethodValues() { /** * Tests Index maintenance on method getValues() as iterator ( with focus on * behaviour if not implemented in DummyQRegion - * @author Asif */ @Test public void testIndexMaintenanceWithIndexOnMethodGetValues() { @@ -393,7 +386,6 @@ public void testIndexMaintenanceWithIndexOnMethodGetValues() { /** * Tests Index maintenance on method toArray() as iterator ( with focus on * behaviour if not implemented in DummyQRegion - * @author Asif */ @Test public void testIndexMaintenanceWithIndexOnMethodtoArray() { @@ -417,7 +409,6 @@ public void testIndexMaintenanceWithIndexOnMethodtoArray() { /** * Tests Index maintenance on method asSet() as iterator ( with focus on * behaviour if not implemented in DummyQRegion - * @author Asif */ @Test public void testIndexMaintenanceWithIndexOnMethodAsSet() { @@ -440,7 +431,6 @@ public void testIndexMaintenanceWithIndexOnMethodAsSet() { /** * Tests Index maintenance on method keySet() as iterator ( with focus on * behaviour if not implemented in DummyQRegion - * @author Asif */ @Test public void testIndexMaintenanceWithIndexOnMethodKeySet() { @@ -463,7 +453,6 @@ public void testIndexMaintenanceWithIndexOnMethodKeySet() { /** * Tests Index maintenance on method getKeys() as iterator ( with focus on * behaviour if not implemented in DummyQRegion - * @author Asif */ @Test public void testIndexMaintenanceWithIndexOnMethodGetKeys() { @@ -486,7 +475,6 @@ public void testIndexMaintenanceWithIndexOnMethodGetKeys() { /** * Tests Index maintenance on method entrySet() as iterator ( with focus on * behaviour if not implemented in DummyQRegion - * @author Asif */ @Test public void testIndexMaintenanceWithIndexOnMethodEntrySet() { @@ -509,7 +497,6 @@ public void testIndexMaintenanceWithIndexOnMethodEntrySet() { /** * Tests Index maintenance on method entries(boolean ) as iterator ( with focus on * behaviour if not implemented in DummyQRegion - * @author Asif */ @Test public void testIndexMaintenanceWithIndexOnMethodEntries() { @@ -532,7 +519,6 @@ public void testIndexMaintenanceWithIndexOnMethodEntries() { /** * Tests Index maintenance on method getEntries( ) as iterator ( with focus on * behaviour if not implemented in DummyQRegion - * @author Asif */ @Test public void testIndexMaintenanceWithIndexOnMethodGetEntries() { @@ -1230,7 +1216,6 @@ public void testMapIndexRecreationForAllKeys() throws Exception /** * Tests Index maintenance on data loaded via cache loader - * @author Asif */ @Test public void testIndexMaintenanceOnCacheLoadedData() { @@ -1274,7 +1259,6 @@ public void close() { /** * Tests Index maintenance on data loaded via cache loader - * @author Asif */ @Test public void testIndexMaintenanceOnPutAll() { diff --git a/geode-core/src/test/java/com/gemstone/gemfire/cache/query/internal/index/IndexStatisticsJUnitTest.java b/geode-core/src/test/java/com/gemstone/gemfire/cache/query/internal/index/IndexStatisticsJUnitTest.java index a6e87b1ee918..58d966e51611 100644 --- a/geode-core/src/test/java/com/gemstone/gemfire/cache/query/internal/index/IndexStatisticsJUnitTest.java +++ b/geode-core/src/test/java/com/gemstone/gemfire/cache/query/internal/index/IndexStatisticsJUnitTest.java @@ -46,7 +46,6 @@ import com.gemstone.gemfire.test.junit.categories.IntegrationTest; /** - * @author shobhit * */ @Category(IntegrationTest.class) diff --git a/geode-core/src/test/java/com/gemstone/gemfire/cache/query/internal/index/IndexTrackingQueryObserverDUnitTest.java b/geode-core/src/test/java/com/gemstone/gemfire/cache/query/internal/index/IndexTrackingQueryObserverDUnitTest.java index d9b0d5ee0427..02a6f079423a 100644 --- a/geode-core/src/test/java/com/gemstone/gemfire/cache/query/internal/index/IndexTrackingQueryObserverDUnitTest.java +++ b/geode-core/src/test/java/com/gemstone/gemfire/cache/query/internal/index/IndexTrackingQueryObserverDUnitTest.java @@ -52,7 +52,6 @@ import com.gemstone.gemfire.test.dunit.WaitCriterion; /** - * @author shobhit * */ public class IndexTrackingQueryObserverDUnitTest extends CacheTestCase { @@ -283,7 +282,6 @@ public String description() { return asyncInv; } /** - * @author shobhit * TODO: Not implemented fully for all the hooks. * */ diff --git a/geode-core/src/test/java/com/gemstone/gemfire/cache/query/internal/index/IndexTrackingQueryObserverJUnitTest.java b/geode-core/src/test/java/com/gemstone/gemfire/cache/query/internal/index/IndexTrackingQueryObserverJUnitTest.java index 101f2c8434b5..c993b93cc37b 100644 --- a/geode-core/src/test/java/com/gemstone/gemfire/cache/query/internal/index/IndexTrackingQueryObserverJUnitTest.java +++ b/geode-core/src/test/java/com/gemstone/gemfire/cache/query/internal/index/IndexTrackingQueryObserverJUnitTest.java @@ -48,7 +48,6 @@ import com.gemstone.gemfire.test.junit.categories.IntegrationTest; /** - * @author shobhit * */ @Category(IntegrationTest.class) diff --git a/geode-core/src/test/java/com/gemstone/gemfire/cache/query/internal/index/IndexedMergeEquiJoinScenariosJUnitTest.java b/geode-core/src/test/java/com/gemstone/gemfire/cache/query/internal/index/IndexedMergeEquiJoinScenariosJUnitTest.java index 6d9889c2937e..c8321774dd14 100644 --- a/geode-core/src/test/java/com/gemstone/gemfire/cache/query/internal/index/IndexedMergeEquiJoinScenariosJUnitTest.java +++ b/geode-core/src/test/java/com/gemstone/gemfire/cache/query/internal/index/IndexedMergeEquiJoinScenariosJUnitTest.java @@ -50,7 +50,6 @@ import com.gemstone.gemfire.test.junit.categories.IntegrationTest; /** - * @author kdeshpan * */ @Category(IntegrationTest.class) diff --git a/geode-core/src/test/java/com/gemstone/gemfire/cache/query/internal/index/InitializeIndexEntryDestroyQueryDUnitTest.java b/geode-core/src/test/java/com/gemstone/gemfire/cache/query/internal/index/InitializeIndexEntryDestroyQueryDUnitTest.java index bfc431e27c64..6463e88d3f83 100644 --- a/geode-core/src/test/java/com/gemstone/gemfire/cache/query/internal/index/InitializeIndexEntryDestroyQueryDUnitTest.java +++ b/geode-core/src/test/java/com/gemstone/gemfire/cache/query/internal/index/InitializeIndexEntryDestroyQueryDUnitTest.java @@ -47,7 +47,6 @@ * Then destroys and puts back entries in separated thread in the same region and runs * query parallely and checks for UNDEFINED values in result set of the query. * - * @author shobhit * */ public class InitializeIndexEntryDestroyQueryDUnitTest extends CacheTestCase { diff --git a/geode-core/src/test/java/com/gemstone/gemfire/cache/query/internal/index/MapIndexStoreJUnitTest.java b/geode-core/src/test/java/com/gemstone/gemfire/cache/query/internal/index/MapIndexStoreJUnitTest.java index bc8ef40a7b3a..2d5e60a7f01a 100644 --- a/geode-core/src/test/java/com/gemstone/gemfire/cache/query/internal/index/MapIndexStoreJUnitTest.java +++ b/geode-core/src/test/java/com/gemstone/gemfire/cache/query/internal/index/MapIndexStoreJUnitTest.java @@ -46,7 +46,6 @@ /** * Test class that will be extended to provide the IndexStorage structure to test * Tests apis of the IndexStorage - * @author jhuynh * */ @Category(IntegrationTest.class) diff --git a/geode-core/src/test/java/com/gemstone/gemfire/cache/query/internal/index/MapRangeIndexMaintenanceJUnitTest.java b/geode-core/src/test/java/com/gemstone/gemfire/cache/query/internal/index/MapRangeIndexMaintenanceJUnitTest.java index 88425096d9eb..e346522efc24 100644 --- a/geode-core/src/test/java/com/gemstone/gemfire/cache/query/internal/index/MapRangeIndexMaintenanceJUnitTest.java +++ b/geode-core/src/test/java/com/gemstone/gemfire/cache/query/internal/index/MapRangeIndexMaintenanceJUnitTest.java @@ -43,7 +43,6 @@ import com.gemstone.gemfire.test.junit.categories.IntegrationTest; /** - * @author shobhit * */ @Category(IntegrationTest.class) @@ -366,7 +365,6 @@ public void testNullMapValuesInIndexOnLocalRegionForMap() throws Exception{ /** * TestObject with wrong comareTo() implementation implementation. * Which throws NullPointer while removing mapping from a MapRangeIndex. - * @author shobhit * */ public class TestObject implements Cloneable, Comparable { diff --git a/geode-core/src/test/java/com/gemstone/gemfire/cache/query/internal/index/NewDeclarativeIndexCreationJUnitTest.java b/geode-core/src/test/java/com/gemstone/gemfire/cache/query/internal/index/NewDeclarativeIndexCreationJUnitTest.java index 746ec0acfb4f..70e3bfc21b0c 100644 --- a/geode-core/src/test/java/com/gemstone/gemfire/cache/query/internal/index/NewDeclarativeIndexCreationJUnitTest.java +++ b/geode-core/src/test/java/com/gemstone/gemfire/cache/query/internal/index/NewDeclarativeIndexCreationJUnitTest.java @@ -40,7 +40,6 @@ import com.gemstone.gemfire.test.junit.categories.IntegrationTest; /** - * @author shobhit * * @since 6.6.1 */ diff --git a/geode-core/src/test/java/com/gemstone/gemfire/cache/query/internal/index/ProgRegionCreationIndexUpdateTypeJUnitTest.java b/geode-core/src/test/java/com/gemstone/gemfire/cache/query/internal/index/ProgRegionCreationIndexUpdateTypeJUnitTest.java index c93fce8ad165..cee26ef0cbed 100644 --- a/geode-core/src/test/java/com/gemstone/gemfire/cache/query/internal/index/ProgRegionCreationIndexUpdateTypeJUnitTest.java +++ b/geode-core/src/test/java/com/gemstone/gemfire/cache/query/internal/index/ProgRegionCreationIndexUpdateTypeJUnitTest.java @@ -38,7 +38,6 @@ import com.gemstone.gemfire.test.junit.categories.IntegrationTest; /** - * @author asifs * * */ diff --git a/geode-core/src/test/java/com/gemstone/gemfire/cache/query/internal/index/PutAllWithIndexPerfDUnitTest.java b/geode-core/src/test/java/com/gemstone/gemfire/cache/query/internal/index/PutAllWithIndexPerfDUnitTest.java index 960bd4e125b3..3c2482dd98ed 100644 --- a/geode-core/src/test/java/com/gemstone/gemfire/cache/query/internal/index/PutAllWithIndexPerfDUnitTest.java +++ b/geode-core/src/test/java/com/gemstone/gemfire/cache/query/internal/index/PutAllWithIndexPerfDUnitTest.java @@ -47,7 +47,6 @@ import com.gemstone.gemfire.test.junit.categories.DistributedTest; /** - * @author shobhit * */ @Category(DistributedTest.class) diff --git a/geode-core/src/test/java/com/gemstone/gemfire/cache/query/internal/index/RangeIndexAPIJUnitTest.java b/geode-core/src/test/java/com/gemstone/gemfire/cache/query/internal/index/RangeIndexAPIJUnitTest.java index d543871da820..7cc2c12f80ba 100644 --- a/geode-core/src/test/java/com/gemstone/gemfire/cache/query/internal/index/RangeIndexAPIJUnitTest.java +++ b/geode-core/src/test/java/com/gemstone/gemfire/cache/query/internal/index/RangeIndexAPIJUnitTest.java @@ -55,7 +55,6 @@ import com.gemstone.gemfire.test.junit.categories.IntegrationTest; /** - * @author asif * */ @Category(IntegrationTest.class) diff --git a/geode-core/src/test/java/com/gemstone/gemfire/cache/query/partitioned/PRBasicIndexCreationDUnitTest.java b/geode-core/src/test/java/com/gemstone/gemfire/cache/query/partitioned/PRBasicIndexCreationDUnitTest.java index 30a5d6f60093..3ce195225fa9 100755 --- a/geode-core/src/test/java/com/gemstone/gemfire/cache/query/partitioned/PRBasicIndexCreationDUnitTest.java +++ b/geode-core/src/test/java/com/gemstone/gemfire/cache/query/partitioned/PRBasicIndexCreationDUnitTest.java @@ -34,7 +34,6 @@ import com.gemstone.gemfire.test.dunit.VM; /** - * @author rdubey * */ public class PRBasicIndexCreationDUnitTest extends diff --git a/geode-core/src/test/java/com/gemstone/gemfire/cache/query/partitioned/PRBasicIndexCreationDeadlockDUnitTest.java b/geode-core/src/test/java/com/gemstone/gemfire/cache/query/partitioned/PRBasicIndexCreationDeadlockDUnitTest.java index b09eb31a1466..6782deebffc1 100644 --- a/geode-core/src/test/java/com/gemstone/gemfire/cache/query/partitioned/PRBasicIndexCreationDeadlockDUnitTest.java +++ b/geode-core/src/test/java/com/gemstone/gemfire/cache/query/partitioned/PRBasicIndexCreationDeadlockDUnitTest.java @@ -37,7 +37,6 @@ import com.gemstone.gemfire.test.dunit.Wait; /** - * @author rdubey * */ public class PRBasicIndexCreationDeadlockDUnitTest extends diff --git a/geode-core/src/test/java/com/gemstone/gemfire/cache/query/partitioned/PRBasicQueryDUnitTest.java b/geode-core/src/test/java/com/gemstone/gemfire/cache/query/partitioned/PRBasicQueryDUnitTest.java index 147ed4d92b39..44cec383b090 100755 --- a/geode-core/src/test/java/com/gemstone/gemfire/cache/query/partitioned/PRBasicQueryDUnitTest.java +++ b/geode-core/src/test/java/com/gemstone/gemfire/cache/query/partitioned/PRBasicQueryDUnitTest.java @@ -35,7 +35,6 @@ * This tests creates partition regions with 1 Datastore & 1 Accessor node, * firing a simple query and validating the ResultSet size and Contents. * - * @author pbatra */ public class PRBasicQueryDUnitTest extends PartitionedRegionDUnitTestCase diff --git a/geode-core/src/test/java/com/gemstone/gemfire/cache/query/partitioned/PRBasicRemoveIndexDUnitTest.java b/geode-core/src/test/java/com/gemstone/gemfire/cache/query/partitioned/PRBasicRemoveIndexDUnitTest.java index 81ee3bf3d459..33ca1ac9fc23 100755 --- a/geode-core/src/test/java/com/gemstone/gemfire/cache/query/partitioned/PRBasicRemoveIndexDUnitTest.java +++ b/geode-core/src/test/java/com/gemstone/gemfire/cache/query/partitioned/PRBasicRemoveIndexDUnitTest.java @@ -24,7 +24,6 @@ /** * Basic funtional test for removing index from a partitioned region system. - * @author rdubey * */ public class PRBasicRemoveIndexDUnitTest extends PartitionedRegionDUnitTestCase diff --git a/geode-core/src/test/java/com/gemstone/gemfire/cache/query/partitioned/PRColocatedEquiJoinDUnitTest.java b/geode-core/src/test/java/com/gemstone/gemfire/cache/query/partitioned/PRColocatedEquiJoinDUnitTest.java index e6b17e7fe4a3..25c239339977 100644 --- a/geode-core/src/test/java/com/gemstone/gemfire/cache/query/partitioned/PRColocatedEquiJoinDUnitTest.java +++ b/geode-core/src/test/java/com/gemstone/gemfire/cache/query/partitioned/PRColocatedEquiJoinDUnitTest.java @@ -60,7 +60,6 @@ import com.gemstone.gemfire.test.dunit.Wait; /** - * @author shobhit * */ public class PRColocatedEquiJoinDUnitTest extends PartitionedRegionDUnitTestCase { diff --git a/geode-core/src/test/java/com/gemstone/gemfire/cache/query/partitioned/PRIndexStatisticsJUnitTest.java b/geode-core/src/test/java/com/gemstone/gemfire/cache/query/partitioned/PRIndexStatisticsJUnitTest.java index 0ce6577e6064..98da0a841d6f 100644 --- a/geode-core/src/test/java/com/gemstone/gemfire/cache/query/partitioned/PRIndexStatisticsJUnitTest.java +++ b/geode-core/src/test/java/com/gemstone/gemfire/cache/query/partitioned/PRIndexStatisticsJUnitTest.java @@ -44,7 +44,6 @@ import com.gemstone.gemfire.test.junit.categories.IntegrationTest; /** - * @author shobhit * */ @Category(IntegrationTest.class) diff --git a/geode-core/src/test/java/com/gemstone/gemfire/cache/query/partitioned/PRInvalidQueryJUnitTest.java b/geode-core/src/test/java/com/gemstone/gemfire/cache/query/partitioned/PRInvalidQueryJUnitTest.java index 47e7b21df86f..669aa2005aa7 100755 --- a/geode-core/src/test/java/com/gemstone/gemfire/cache/query/partitioned/PRInvalidQueryJUnitTest.java +++ b/geode-core/src/test/java/com/gemstone/gemfire/cache/query/partitioned/PRInvalidQueryJUnitTest.java @@ -34,7 +34,6 @@ * single VM.,As region#query doesn't support Select Query for Local Querying it * should throw QueryInvalidException * - * @author pbatra * */ @Category(IntegrationTest.class) diff --git a/geode-core/src/test/java/com/gemstone/gemfire/cache/query/partitioned/PRQueryCacheCloseDUnitTest.java b/geode-core/src/test/java/com/gemstone/gemfire/cache/query/partitioned/PRQueryCacheCloseDUnitTest.java index 6c6c36f79196..60fd6ffdf62c 100755 --- a/geode-core/src/test/java/com/gemstone/gemfire/cache/query/partitioned/PRQueryCacheCloseDUnitTest.java +++ b/geode-core/src/test/java/com/gemstone/gemfire/cache/query/partitioned/PRQueryCacheCloseDUnitTest.java @@ -23,7 +23,6 @@ * 1, and cache close is done randomly on one of the data stores and then * recreated, thus avoiding any data loss. * - * @author pbatra */ import java.util.LinkedList; diff --git a/geode-core/src/test/java/com/gemstone/gemfire/cache/query/partitioned/PRQueryCacheClosedJUnitTest.java b/geode-core/src/test/java/com/gemstone/gemfire/cache/query/partitioned/PRQueryCacheClosedJUnitTest.java index da64dafcaf55..0b36b8135d2a 100755 --- a/geode-core/src/test/java/com/gemstone/gemfire/cache/query/partitioned/PRQueryCacheClosedJUnitTest.java +++ b/geode-core/src/test/java/com/gemstone/gemfire/cache/query/partitioned/PRQueryCacheClosedJUnitTest.java @@ -41,7 +41,6 @@ * Test verifies Region#query()for PartitionedRegion on a single VM with * Region#destroyRegion() being called on the same with some delay. * - * @author pbatra * */ @Category(IntegrationTest.class) diff --git a/geode-core/src/test/java/com/gemstone/gemfire/cache/query/partitioned/PRQueryDUnitHelper.java b/geode-core/src/test/java/com/gemstone/gemfire/cache/query/partitioned/PRQueryDUnitHelper.java index 18600384898f..680aa0b70faa 100755 --- a/geode-core/src/test/java/com/gemstone/gemfire/cache/query/partitioned/PRQueryDUnitHelper.java +++ b/geode-core/src/test/java/com/gemstone/gemfire/cache/query/partitioned/PRQueryDUnitHelper.java @@ -94,7 +94,6 @@ /** * This is a helper class for the various Partitioned Query DUnit Test Cases * - * @author pbatra */ public class PRQueryDUnitHelper extends PartitionedRegionDUnitTestCase diff --git a/geode-core/src/test/java/com/gemstone/gemfire/cache/query/partitioned/PRQueryDUnitTest.java b/geode-core/src/test/java/com/gemstone/gemfire/cache/query/partitioned/PRQueryDUnitTest.java index 098a8815d52b..c305531a9063 100755 --- a/geode-core/src/test/java/com/gemstone/gemfire/cache/query/partitioned/PRQueryDUnitTest.java +++ b/geode-core/src/test/java/com/gemstone/gemfire/cache/query/partitioned/PRQueryDUnitTest.java @@ -22,7 +22,6 @@ * one of the VM executes Queries both on Local Region & PR's & compare * ResultSets * - * @author pbatra */ import java.util.ArrayList; diff --git a/geode-core/src/test/java/com/gemstone/gemfire/cache/query/partitioned/PRQueryJUnitTest.java b/geode-core/src/test/java/com/gemstone/gemfire/cache/query/partitioned/PRQueryJUnitTest.java index 67c57fec0988..926bddca489b 100644 --- a/geode-core/src/test/java/com/gemstone/gemfire/cache/query/partitioned/PRQueryJUnitTest.java +++ b/geode-core/src/test/java/com/gemstone/gemfire/cache/query/partitioned/PRQueryJUnitTest.java @@ -42,7 +42,6 @@ * Class verifies Region#query(String predicate) API for PartitionedRegion on a * single VM. * - * @author rreja * */ @Category(IntegrationTest.class) diff --git a/geode-core/src/test/java/com/gemstone/gemfire/cache/query/partitioned/PRQueryNumThreadsJUnitTest.java b/geode-core/src/test/java/com/gemstone/gemfire/cache/query/partitioned/PRQueryNumThreadsJUnitTest.java index a240686b77c5..ebaa687d5fbd 100644 --- a/geode-core/src/test/java/com/gemstone/gemfire/cache/query/partitioned/PRQueryNumThreadsJUnitTest.java +++ b/geode-core/src/test/java/com/gemstone/gemfire/cache/query/partitioned/PRQueryNumThreadsJUnitTest.java @@ -38,7 +38,6 @@ * Class verifies Region#query(String predicate) API for PartitionedRegion on a * single VM. * - * @author rreja * */ @Category(IntegrationTest.class) diff --git a/geode-core/src/test/java/com/gemstone/gemfire/cache/query/partitioned/PRQueryPerfDUnitTest.java b/geode-core/src/test/java/com/gemstone/gemfire/cache/query/partitioned/PRQueryPerfDUnitTest.java index 609c1a39720d..c67cefe4df10 100755 --- a/geode-core/src/test/java/com/gemstone/gemfire/cache/query/partitioned/PRQueryPerfDUnitTest.java +++ b/geode-core/src/test/java/com/gemstone/gemfire/cache/query/partitioned/PRQueryPerfDUnitTest.java @@ -32,7 +32,6 @@ * encompassing various permutations of the PR attributes * like Redundancy / No. of D.S / No. of Accessors etc * - * @author pbatra */ public class PRQueryPerfDUnitTest extends PartitionedRegionDUnitTestCase { diff --git a/geode-core/src/test/java/com/gemstone/gemfire/cache/query/partitioned/PRQueryRegionCloseDUnitTest.java b/geode-core/src/test/java/com/gemstone/gemfire/cache/query/partitioned/PRQueryRegionCloseDUnitTest.java index 8641f489b964..5240ebc1c406 100755 --- a/geode-core/src/test/java/com/gemstone/gemfire/cache/query/partitioned/PRQueryRegionCloseDUnitTest.java +++ b/geode-core/src/test/java/com/gemstone/gemfire/cache/query/partitioned/PRQueryRegionCloseDUnitTest.java @@ -22,7 +22,6 @@ * Calls region.close() on one of the data stores while the query is being * executed and recreates the PR on the VM and verifies the results. * - * @author pbatra */ import java.util.LinkedList; diff --git a/geode-core/src/test/java/com/gemstone/gemfire/cache/query/partitioned/PRQueryRegionClosedJUnitTest.java b/geode-core/src/test/java/com/gemstone/gemfire/cache/query/partitioned/PRQueryRegionClosedJUnitTest.java index 0a804af78561..5ea9bcfc4970 100755 --- a/geode-core/src/test/java/com/gemstone/gemfire/cache/query/partitioned/PRQueryRegionClosedJUnitTest.java +++ b/geode-core/src/test/java/com/gemstone/gemfire/cache/query/partitioned/PRQueryRegionClosedJUnitTest.java @@ -40,7 +40,6 @@ * Test verifies Region#query()for PartitionedRegion on a single VM with * Region#close() being called on the same with some delay and then recreating the region instantly. * - * @author pbatra * */ @Category(IntegrationTest.class) diff --git a/geode-core/src/test/java/com/gemstone/gemfire/cache/query/partitioned/PRQueryRegionDestroyedDUnitTest.java b/geode-core/src/test/java/com/gemstone/gemfire/cache/query/partitioned/PRQueryRegionDestroyedDUnitTest.java index c3a37dd52e8f..40bac7b21457 100755 --- a/geode-core/src/test/java/com/gemstone/gemfire/cache/query/partitioned/PRQueryRegionDestroyedDUnitTest.java +++ b/geode-core/src/test/java/com/gemstone/gemfire/cache/query/partitioned/PRQueryRegionDestroyedDUnitTest.java @@ -22,7 +22,6 @@ * Calls region.destroy() on one of the data stores while the query is being * executed and recreates the PR on the VM and verifies the results. * - * @author pbatra */ import java.util.LinkedList; diff --git a/geode-core/src/test/java/com/gemstone/gemfire/cache/query/partitioned/PRQueryRegionDestroyedJUnitTest.java b/geode-core/src/test/java/com/gemstone/gemfire/cache/query/partitioned/PRQueryRegionDestroyedJUnitTest.java index 314d4a408802..6ae8f09a51b6 100755 --- a/geode-core/src/test/java/com/gemstone/gemfire/cache/query/partitioned/PRQueryRegionDestroyedJUnitTest.java +++ b/geode-core/src/test/java/com/gemstone/gemfire/cache/query/partitioned/PRQueryRegionDestroyedJUnitTest.java @@ -41,7 +41,6 @@ * Test verifies Region#query()for PartitionedRegion on a single VM with * Region#destroyRegion() being called on the same with some delay. * - * @author pbatra * */ @Category(IntegrationTest.class) diff --git a/geode-core/src/test/java/com/gemstone/gemfire/cache/query/partitioned/PRQueryRemoteNodeExceptionDUnitTest.java b/geode-core/src/test/java/com/gemstone/gemfire/cache/query/partitioned/PRQueryRemoteNodeExceptionDUnitTest.java index 07807c823fe5..a112e2ab4f8f 100644 --- a/geode-core/src/test/java/com/gemstone/gemfire/cache/query/partitioned/PRQueryRemoteNodeExceptionDUnitTest.java +++ b/geode-core/src/test/java/com/gemstone/gemfire/cache/query/partitioned/PRQueryRemoteNodeExceptionDUnitTest.java @@ -52,7 +52,6 @@ /** * This test verifies exception handling on coordinator node for remote as * well as local querying. - * @author shobhit * */ public class PRQueryRemoteNodeExceptionDUnitTest extends PartitionedRegionDUnitTestCase { diff --git a/geode-core/src/test/java/com/gemstone/gemfire/cache/server/internal/ConnectionCountProbeJUnitTest.java b/geode-core/src/test/java/com/gemstone/gemfire/cache/server/internal/ConnectionCountProbeJUnitTest.java index 0b1fc22baf51..5522ae5ce8ad 100644 --- a/geode-core/src/test/java/com/gemstone/gemfire/cache/server/internal/ConnectionCountProbeJUnitTest.java +++ b/geode-core/src/test/java/com/gemstone/gemfire/cache/server/internal/ConnectionCountProbeJUnitTest.java @@ -25,7 +25,6 @@ import com.gemstone.gemfire.test.junit.categories.UnitTest; /** - * @author dsmith * */ @Category(UnitTest.class) diff --git a/geode-core/src/test/java/com/gemstone/gemfire/cache30/Bug34387DUnitTest.java b/geode-core/src/test/java/com/gemstone/gemfire/cache30/Bug34387DUnitTest.java index 879600dc476d..94ac2f6d5b3c 100644 --- a/geode-core/src/test/java/com/gemstone/gemfire/cache30/Bug34387DUnitTest.java +++ b/geode-core/src/test/java/com/gemstone/gemfire/cache30/Bug34387DUnitTest.java @@ -35,7 +35,6 @@ /** * Test create + localDestroy for bug 34387 * - * @author darrel * @since 5.0 */ public class Bug34387DUnitTest extends CacheTestCase { diff --git a/geode-core/src/test/java/com/gemstone/gemfire/cache30/Bug34948DUnitTest.java b/geode-core/src/test/java/com/gemstone/gemfire/cache30/Bug34948DUnitTest.java index eb55ce210161..b754905cea4e 100644 --- a/geode-core/src/test/java/com/gemstone/gemfire/cache30/Bug34948DUnitTest.java +++ b/geode-core/src/test/java/com/gemstone/gemfire/cache30/Bug34948DUnitTest.java @@ -39,7 +39,6 @@ /** * Test to make sure cache values are lazily deserialized * - * @author darrel * @since 5.0 */ public class Bug34948DUnitTest extends CacheTestCase { diff --git a/geode-core/src/test/java/com/gemstone/gemfire/cache30/Bug35214DUnitTest.java b/geode-core/src/test/java/com/gemstone/gemfire/cache30/Bug35214DUnitTest.java index 7f6d29a35116..e90227a55222 100644 --- a/geode-core/src/test/java/com/gemstone/gemfire/cache30/Bug35214DUnitTest.java +++ b/geode-core/src/test/java/com/gemstone/gemfire/cache30/Bug35214DUnitTest.java @@ -41,7 +41,6 @@ /** * Make sure entry expiration does not happen during gii for bug 35214 * - * @author darrel * @since 5.0 */ public class Bug35214DUnitTest extends CacheTestCase { diff --git a/geode-core/src/test/java/com/gemstone/gemfire/cache30/Bug38013DUnitTest.java b/geode-core/src/test/java/com/gemstone/gemfire/cache30/Bug38013DUnitTest.java index a7595c737ace..1c4b95d0fa2e 100644 --- a/geode-core/src/test/java/com/gemstone/gemfire/cache30/Bug38013DUnitTest.java +++ b/geode-core/src/test/java/com/gemstone/gemfire/cache30/Bug38013DUnitTest.java @@ -38,7 +38,6 @@ /** * Test to make sure PR cache values are lazily deserialized * - * @author darrel * @since 5.0 */ public class Bug38013DUnitTest extends CacheTestCase { diff --git a/geode-core/src/test/java/com/gemstone/gemfire/cache30/Bug38741DUnitTest.java b/geode-core/src/test/java/com/gemstone/gemfire/cache30/Bug38741DUnitTest.java index d1a8bb42a4ae..f1b97464541e 100644 --- a/geode-core/src/test/java/com/gemstone/gemfire/cache30/Bug38741DUnitTest.java +++ b/geode-core/src/test/java/com/gemstone/gemfire/cache30/Bug38741DUnitTest.java @@ -59,7 +59,6 @@ /** * - * @author Mitch Thomas * @since bugfix5.7 */ public class Bug38741DUnitTest extends ClientServerTestCase { diff --git a/geode-core/src/test/java/com/gemstone/gemfire/cache30/Bug40255JUnitTest.java b/geode-core/src/test/java/com/gemstone/gemfire/cache30/Bug40255JUnitTest.java index 92bfbe7964bf..771cd3015777 100644 --- a/geode-core/src/test/java/com/gemstone/gemfire/cache30/Bug40255JUnitTest.java +++ b/geode-core/src/test/java/com/gemstone/gemfire/cache30/Bug40255JUnitTest.java @@ -36,7 +36,6 @@ import com.gemstone.gemfire.test.junit.categories.IntegrationTest; /** - * @author Shobhit Agarwal * */ @Category(IntegrationTest.class) diff --git a/geode-core/src/test/java/com/gemstone/gemfire/cache30/Bug40662JUnitTest.java b/geode-core/src/test/java/com/gemstone/gemfire/cache30/Bug40662JUnitTest.java index afdb671d6b5e..92b2490f0b20 100644 --- a/geode-core/src/test/java/com/gemstone/gemfire/cache30/Bug40662JUnitTest.java +++ b/geode-core/src/test/java/com/gemstone/gemfire/cache30/Bug40662JUnitTest.java @@ -40,7 +40,6 @@ * attributes by CacheXmlParser when cache.xml has eviction attributes with no * eviction action specified. which was being set to EvictionAction.NONE * - * @author shoagarwal * @since 6.6 */ @Category(IntegrationTest.class) diff --git a/geode-core/src/test/java/com/gemstone/gemfire/cache30/Bug44418JUnitTest.java b/geode-core/src/test/java/com/gemstone/gemfire/cache30/Bug44418JUnitTest.java index 2a15a0c67f27..ccd9df0e271b 100644 --- a/geode-core/src/test/java/com/gemstone/gemfire/cache30/Bug44418JUnitTest.java +++ b/geode-core/src/test/java/com/gemstone/gemfire/cache30/Bug44418JUnitTest.java @@ -43,7 +43,6 @@ /** * Test for Bug 44418. * - * @author darrel * @since 7.0 */ @Category(IntegrationTest.class) diff --git a/geode-core/src/test/java/com/gemstone/gemfire/cache30/CacheCloseDUnitTest.java b/geode-core/src/test/java/com/gemstone/gemfire/cache30/CacheCloseDUnitTest.java index 1938483d84eb..0705dd9be5f9 100644 --- a/geode-core/src/test/java/com/gemstone/gemfire/cache30/CacheCloseDUnitTest.java +++ b/geode-core/src/test/java/com/gemstone/gemfire/cache30/CacheCloseDUnitTest.java @@ -30,7 +30,6 @@ /** * Test to make sure cache close is working. * - * @author darrel * @since 3.0 */ public class CacheCloseDUnitTest extends CacheTestCase { diff --git a/geode-core/src/test/java/com/gemstone/gemfire/cache30/CacheListenerTestCase.java b/geode-core/src/test/java/com/gemstone/gemfire/cache30/CacheListenerTestCase.java index a8df712dabba..92e5bdfe6bb0 100644 --- a/geode-core/src/test/java/com/gemstone/gemfire/cache30/CacheListenerTestCase.java +++ b/geode-core/src/test/java/com/gemstone/gemfire/cache30/CacheListenerTestCase.java @@ -33,7 +33,6 @@ * * @see MultiVMRegionTestCase#testRemoteCacheWriter * - * @author David Whitlock * * @since 3.0 */ diff --git a/geode-core/src/test/java/com/gemstone/gemfire/cache30/CacheLoaderTestCase.java b/geode-core/src/test/java/com/gemstone/gemfire/cache30/CacheLoaderTestCase.java index 2e1def853565..bb8bc5e18011 100644 --- a/geode-core/src/test/java/com/gemstone/gemfire/cache30/CacheLoaderTestCase.java +++ b/geode-core/src/test/java/com/gemstone/gemfire/cache30/CacheLoaderTestCase.java @@ -35,7 +35,6 @@ * * @see MultiVMRegionTestCase#testRemoteCacheLoader * - * @author David Whitlock * @since 3.0 */ public abstract class CacheLoaderTestCase diff --git a/geode-core/src/test/java/com/gemstone/gemfire/cache30/CacheLogRollDUnitTest.java b/geode-core/src/test/java/com/gemstone/gemfire/cache30/CacheLogRollDUnitTest.java index 26890965e376..3e5994d5ef9d 100644 --- a/geode-core/src/test/java/com/gemstone/gemfire/cache30/CacheLogRollDUnitTest.java +++ b/geode-core/src/test/java/com/gemstone/gemfire/cache30/CacheLogRollDUnitTest.java @@ -32,7 +32,6 @@ /** * Test to make sure cache close is working. * - * @author gregp * @since 6.5 */ public class CacheLogRollDUnitTest extends CacheTestCase { diff --git a/geode-core/src/test/java/com/gemstone/gemfire/cache30/CacheSerializableRunnable.java b/geode-core/src/test/java/com/gemstone/gemfire/cache30/CacheSerializableRunnable.java index 8b80defddca4..3eeaf998ef74 100644 --- a/geode-core/src/test/java/com/gemstone/gemfire/cache30/CacheSerializableRunnable.java +++ b/geode-core/src/test/java/com/gemstone/gemfire/cache30/CacheSerializableRunnable.java @@ -30,7 +30,6 @@ * CacheException}. This way, we don't need to have a lot of * try/catch code in the tests. * - * @author David Whitlock * * @since 3.0 */ diff --git a/geode-core/src/test/java/com/gemstone/gemfire/cache30/CacheStatisticsDUnitTest.java b/geode-core/src/test/java/com/gemstone/gemfire/cache30/CacheStatisticsDUnitTest.java index 422dbe98f6aa..ff635b0cb836 100644 --- a/geode-core/src/test/java/com/gemstone/gemfire/cache30/CacheStatisticsDUnitTest.java +++ b/geode-core/src/test/java/com/gemstone/gemfire/cache30/CacheStatisticsDUnitTest.java @@ -33,7 +33,6 @@ * Tests the {@link CacheStatistics} that are maintained by a {@link * Region} and a {@link com.gemstone.gemfire.cache.Region.Entry}. * - * @author David Whitlock * * @since 3.0 */ diff --git a/geode-core/src/test/java/com/gemstone/gemfire/cache30/CacheTestCase.java b/geode-core/src/test/java/com/gemstone/gemfire/cache30/CacheTestCase.java index c228e5c2ad88..03ac45a4d087 100644 --- a/geode-core/src/test/java/com/gemstone/gemfire/cache30/CacheTestCase.java +++ b/geode-core/src/test/java/com/gemstone/gemfire/cache30/CacheTestCase.java @@ -68,7 +68,6 @@ * The abstract superclass of tests that require the creation of a * {@link Cache}. * - * @author David Whitlock * @since 3.0 */ public abstract class CacheTestCase extends DistributedTestCase { diff --git a/geode-core/src/test/java/com/gemstone/gemfire/cache30/CacheWriterTestCase.java b/geode-core/src/test/java/com/gemstone/gemfire/cache30/CacheWriterTestCase.java index 53ffe2c7893f..8af208919e49 100644 --- a/geode-core/src/test/java/com/gemstone/gemfire/cache30/CacheWriterTestCase.java +++ b/geode-core/src/test/java/com/gemstone/gemfire/cache30/CacheWriterTestCase.java @@ -26,7 +26,6 @@ * * @see MultiVMRegionTestCase#testRemoteCacheWriter * - * @author David Whitlock * * @since 3.0 */ diff --git a/geode-core/src/test/java/com/gemstone/gemfire/cache30/CacheXml30DUnitTest.java b/geode-core/src/test/java/com/gemstone/gemfire/cache30/CacheXml30DUnitTest.java index 85fa8a430d7b..7648c260a841 100644 --- a/geode-core/src/test/java/com/gemstone/gemfire/cache30/CacheXml30DUnitTest.java +++ b/geode-core/src/test/java/com/gemstone/gemfire/cache30/CacheXml30DUnitTest.java @@ -77,7 +77,6 @@ * 3.X (3.0, 3.2, 3.5). Tests for syntax added in subsequent releases * is tested by subclasses of this class. * - * @author David Whitlock * @since 3.0 */ public class CacheXml30DUnitTest extends CacheXmlTestCase { diff --git a/geode-core/src/test/java/com/gemstone/gemfire/cache30/CacheXml40DUnitTest.java b/geode-core/src/test/java/com/gemstone/gemfire/cache30/CacheXml40DUnitTest.java index 0bb6a1889b52..5b16a814406c 100644 --- a/geode-core/src/test/java/com/gemstone/gemfire/cache30/CacheXml40DUnitTest.java +++ b/geode-core/src/test/java/com/gemstone/gemfire/cache30/CacheXml40DUnitTest.java @@ -29,7 +29,6 @@ * Tests the declarative caching functionality introduced in GemFire * 4.0. * - * @author David Whitlock * @since 4.0 */ public class CacheXml40DUnitTest extends CacheXml30DUnitTest { diff --git a/geode-core/src/test/java/com/gemstone/gemfire/cache30/CacheXml41DUnitTest.java b/geode-core/src/test/java/com/gemstone/gemfire/cache30/CacheXml41DUnitTest.java index 7fffce57ee23..4835691dc977 100644 --- a/geode-core/src/test/java/com/gemstone/gemfire/cache30/CacheXml41DUnitTest.java +++ b/geode-core/src/test/java/com/gemstone/gemfire/cache30/CacheXml41DUnitTest.java @@ -48,7 +48,6 @@ /** * Tests the declarative caching functionality introduced in GemFire 4.1. * - * @author David Whitlock * @since 4.1 */ diff --git a/geode-core/src/test/java/com/gemstone/gemfire/cache30/CacheXml45DUnitTest.java b/geode-core/src/test/java/com/gemstone/gemfire/cache30/CacheXml45DUnitTest.java index 19dc89fdc615..f76821874237 100644 --- a/geode-core/src/test/java/com/gemstone/gemfire/cache30/CacheXml45DUnitTest.java +++ b/geode-core/src/test/java/com/gemstone/gemfire/cache30/CacheXml45DUnitTest.java @@ -33,7 +33,6 @@ * Tests the declarative caching functionality introduced in GemFire * 5.0 (i.e. congo1). Don't be confused by the 45 in my name :-) * - * @author Darrel Schneider * @since 5.0 */ public class CacheXml45DUnitTest extends CacheXml41DUnitTest { diff --git a/geode-core/src/test/java/com/gemstone/gemfire/cache30/CacheXml51DUnitTest.java b/geode-core/src/test/java/com/gemstone/gemfire/cache30/CacheXml51DUnitTest.java index 00d2fd59e99e..a1f60ab59d0d 100644 --- a/geode-core/src/test/java/com/gemstone/gemfire/cache30/CacheXml51DUnitTest.java +++ b/geode-core/src/test/java/com/gemstone/gemfire/cache30/CacheXml51DUnitTest.java @@ -30,7 +30,6 @@ * Tests the declarative caching functionality introduced in the GemFire * 5.0 (i.e. congo1). Don't be confused by the 45 in my name :-) * - * @author Mitch Thomas * @since 5.0 */ diff --git a/geode-core/src/test/java/com/gemstone/gemfire/cache30/CacheXml55DUnitTest.java b/geode-core/src/test/java/com/gemstone/gemfire/cache30/CacheXml55DUnitTest.java index 90ea3183add7..808c3a42054b 100644 --- a/geode-core/src/test/java/com/gemstone/gemfire/cache30/CacheXml55DUnitTest.java +++ b/geode-core/src/test/java/com/gemstone/gemfire/cache30/CacheXml55DUnitTest.java @@ -23,7 +23,6 @@ * Tests the declarative caching functionality introduced in the GemFire * 5.0 (i.e. congo1). Don't be confused by the 45 in my name :-) * - * @author Mitch Thomas * @since 5.0 */ diff --git a/geode-core/src/test/java/com/gemstone/gemfire/cache30/CacheXml57DUnitTest.java b/geode-core/src/test/java/com/gemstone/gemfire/cache30/CacheXml57DUnitTest.java index f2eddd6ba737..6b37acc884fe 100644 --- a/geode-core/src/test/java/com/gemstone/gemfire/cache30/CacheXml57DUnitTest.java +++ b/geode-core/src/test/java/com/gemstone/gemfire/cache30/CacheXml57DUnitTest.java @@ -64,7 +64,6 @@ /** * Tests 5.7 cache.xml features. * - * @author darrel * @since 5.7 */ diff --git a/geode-core/src/test/java/com/gemstone/gemfire/cache30/CacheXml58DUnitTest.java b/geode-core/src/test/java/com/gemstone/gemfire/cache30/CacheXml58DUnitTest.java index c44d90845f83..2b2242b26f78 100644 --- a/geode-core/src/test/java/com/gemstone/gemfire/cache30/CacheXml58DUnitTest.java +++ b/geode-core/src/test/java/com/gemstone/gemfire/cache30/CacheXml58DUnitTest.java @@ -49,7 +49,6 @@ /** * Tests 5.8 cache.xml features. * - * @author skumar * @since 5.8 */ diff --git a/geode-core/src/test/java/com/gemstone/gemfire/cache30/CacheXml60DUnitTest.java b/geode-core/src/test/java/com/gemstone/gemfire/cache30/CacheXml60DUnitTest.java index 39edee39fc39..1a4bab77b4e0 100644 --- a/geode-core/src/test/java/com/gemstone/gemfire/cache30/CacheXml60DUnitTest.java +++ b/geode-core/src/test/java/com/gemstone/gemfire/cache30/CacheXml60DUnitTest.java @@ -42,7 +42,6 @@ /** * Tests 6.0 cache.xml features. * - * @author skumar * @since 6.0 */ diff --git a/geode-core/src/test/java/com/gemstone/gemfire/cache30/CacheXml61DUnitTest.java b/geode-core/src/test/java/com/gemstone/gemfire/cache30/CacheXml61DUnitTest.java index f462025b24de..acddbeabc216 100644 --- a/geode-core/src/test/java/com/gemstone/gemfire/cache30/CacheXml61DUnitTest.java +++ b/geode-core/src/test/java/com/gemstone/gemfire/cache30/CacheXml61DUnitTest.java @@ -53,7 +53,6 @@ /** * Tests 6.1 cache.xml features. * - * @author aingle, skumar * @since 6.1 */ diff --git a/geode-core/src/test/java/com/gemstone/gemfire/cache30/CacheXml65DUnitTest.java b/geode-core/src/test/java/com/gemstone/gemfire/cache30/CacheXml65DUnitTest.java index 40718e12a70b..c50d6d6988df 100644 --- a/geode-core/src/test/java/com/gemstone/gemfire/cache30/CacheXml65DUnitTest.java +++ b/geode-core/src/test/java/com/gemstone/gemfire/cache30/CacheXml65DUnitTest.java @@ -66,7 +66,6 @@ /** * Tests 6.5 cache.xml features. * - * @author gregp, skumar, darrel * @since 6.5 */ public class CacheXml65DUnitTest extends CacheXml61DUnitTest { diff --git a/geode-core/src/test/java/com/gemstone/gemfire/cache30/CacheXml66DUnitTest.java b/geode-core/src/test/java/com/gemstone/gemfire/cache30/CacheXml66DUnitTest.java index 63a92024a87a..4c2f62d242be 100644 --- a/geode-core/src/test/java/com/gemstone/gemfire/cache30/CacheXml66DUnitTest.java +++ b/geode-core/src/test/java/com/gemstone/gemfire/cache30/CacheXml66DUnitTest.java @@ -47,7 +47,6 @@ /** * Tests 7.0 cache.xml feature : Fixed Partitioning. * - * @author kbachhav * @since 6.6 */ public class CacheXml66DUnitTest extends CacheXml65DUnitTest{ diff --git a/geode-core/src/test/java/com/gemstone/gemfire/cache30/CacheXml70DUnitTest.java b/geode-core/src/test/java/com/gemstone/gemfire/cache30/CacheXml70DUnitTest.java index 0b31965e6f9a..f502396773b8 100644 --- a/geode-core/src/test/java/com/gemstone/gemfire/cache30/CacheXml70DUnitTest.java +++ b/geode-core/src/test/java/com/gemstone/gemfire/cache30/CacheXml70DUnitTest.java @@ -42,7 +42,6 @@ import com.gemstone.gemfire.internal.cache.xmlcache.RegionAttributesCreation; /** - * @author bruce * */ public class CacheXml70DUnitTest extends CacheXml66DUnitTest { diff --git a/geode-core/src/test/java/com/gemstone/gemfire/cache30/CacheXml80DUnitTest.java b/geode-core/src/test/java/com/gemstone/gemfire/cache30/CacheXml80DUnitTest.java index 98134ce0657e..c0197f230e53 100644 --- a/geode-core/src/test/java/com/gemstone/gemfire/cache30/CacheXml80DUnitTest.java +++ b/geode-core/src/test/java/com/gemstone/gemfire/cache30/CacheXml80DUnitTest.java @@ -50,7 +50,6 @@ import com.gemstone.gemfire.test.dunit.Assert; /** - * @author dsmith * */ public class CacheXml80DUnitTest extends CacheXml70DUnitTest { diff --git a/geode-core/src/test/java/com/gemstone/gemfire/cache30/CacheXml81DUnitTest.java b/geode-core/src/test/java/com/gemstone/gemfire/cache30/CacheXml81DUnitTest.java index 0a41b10ada29..143150d1eb95 100644 --- a/geode-core/src/test/java/com/gemstone/gemfire/cache30/CacheXml81DUnitTest.java +++ b/geode-core/src/test/java/com/gemstone/gemfire/cache30/CacheXml81DUnitTest.java @@ -37,7 +37,6 @@ * Tests 8.1 schema based configuration. From this point all config test cases * should extend this test case where {@link #getUseSchema()} will return true. * - * @author jbarrett@pivotal.io * * @since 8.1 */ diff --git a/geode-core/src/test/java/com/gemstone/gemfire/cache30/CachedAllEventsDUnitTest.java b/geode-core/src/test/java/com/gemstone/gemfire/cache30/CachedAllEventsDUnitTest.java index c3f97f70ad1f..a3f66f636d40 100644 --- a/geode-core/src/test/java/com/gemstone/gemfire/cache30/CachedAllEventsDUnitTest.java +++ b/geode-core/src/test/java/com/gemstone/gemfire/cache30/CachedAllEventsDUnitTest.java @@ -32,7 +32,6 @@ * Make sure that create are distributed and done in * remote regions that are CACHED_ALL_EVENTS*. * - * @author darrel * @since 5.0 */ public class CachedAllEventsDUnitTest extends CacheTestCase { diff --git a/geode-core/src/test/java/com/gemstone/gemfire/cache30/CallbackArgDUnitTest.java b/geode-core/src/test/java/com/gemstone/gemfire/cache30/CallbackArgDUnitTest.java index f0bae93995c7..8a1c4ce3c3cd 100644 --- a/geode-core/src/test/java/com/gemstone/gemfire/cache30/CallbackArgDUnitTest.java +++ b/geode-core/src/test/java/com/gemstone/gemfire/cache30/CallbackArgDUnitTest.java @@ -42,7 +42,6 @@ /** * Test the getCallbackArgument in light of bug 34075. * - * @author darrel * @since 5.0 */ public class CallbackArgDUnitTest extends CacheTestCase { diff --git a/geode-core/src/test/java/com/gemstone/gemfire/cache30/ClearMultiVmCallBkDUnitTest.java b/geode-core/src/test/java/com/gemstone/gemfire/cache30/ClearMultiVmCallBkDUnitTest.java index e748a4209843..b1292c8542b4 100644 --- a/geode-core/src/test/java/com/gemstone/gemfire/cache30/ClearMultiVmCallBkDUnitTest.java +++ b/geode-core/src/test/java/com/gemstone/gemfire/cache30/ClearMultiVmCallBkDUnitTest.java @@ -42,7 +42,6 @@ /** * - * @author prafulla/vjadhav */ public class ClearMultiVmCallBkDUnitTest extends DistributedTestCase{ diff --git a/geode-core/src/test/java/com/gemstone/gemfire/cache30/ClearMultiVmDUnitTest.java b/geode-core/src/test/java/com/gemstone/gemfire/cache30/ClearMultiVmDUnitTest.java index 5f9450b11c15..7207109bda35 100644 --- a/geode-core/src/test/java/com/gemstone/gemfire/cache30/ClearMultiVmDUnitTest.java +++ b/geode-core/src/test/java/com/gemstone/gemfire/cache30/ClearMultiVmDUnitTest.java @@ -47,7 +47,6 @@ /** * - * @author prafulla */ public class ClearMultiVmDUnitTest extends DistributedTestCase{ diff --git a/geode-core/src/test/java/com/gemstone/gemfire/cache30/ClientMembershipDUnitTest.java b/geode-core/src/test/java/com/gemstone/gemfire/cache30/ClientMembershipDUnitTest.java index 23386a7a2d17..7467c8eb09a0 100755 --- a/geode-core/src/test/java/com/gemstone/gemfire/cache30/ClientMembershipDUnitTest.java +++ b/geode-core/src/test/java/com/gemstone/gemfire/cache30/ClientMembershipDUnitTest.java @@ -66,7 +66,6 @@ /** * Tests the ClientMembership API including ClientMembershipListener. * - * @author Kirk Lund * @since 4.2.1 */ public class ClientMembershipDUnitTest extends ClientServerTestCase { diff --git a/geode-core/src/test/java/com/gemstone/gemfire/cache30/ClientMembershipSelectorDUnitTest.java b/geode-core/src/test/java/com/gemstone/gemfire/cache30/ClientMembershipSelectorDUnitTest.java index 9f2ea95bc84c..4bbc3312141a 100644 --- a/geode-core/src/test/java/com/gemstone/gemfire/cache30/ClientMembershipSelectorDUnitTest.java +++ b/geode-core/src/test/java/com/gemstone/gemfire/cache30/ClientMembershipSelectorDUnitTest.java @@ -19,7 +19,6 @@ /** * Same as parent but uses selector in server * - * @author darrel * @since 5.1 */ public class ClientMembershipSelectorDUnitTest extends ClientMembershipDUnitTest { diff --git a/geode-core/src/test/java/com/gemstone/gemfire/cache30/ClientRegisterInterestDUnitTest.java b/geode-core/src/test/java/com/gemstone/gemfire/cache30/ClientRegisterInterestDUnitTest.java index f7e22778ab45..98b7cc1a5c72 100644 --- a/geode-core/src/test/java/com/gemstone/gemfire/cache30/ClientRegisterInterestDUnitTest.java +++ b/geode-core/src/test/java/com/gemstone/gemfire/cache30/ClientRegisterInterestDUnitTest.java @@ -36,7 +36,6 @@ /** * Tests the client register interest * - * @author Kirk Lund * @since 4.2.3 */ public class ClientRegisterInterestDUnitTest extends ClientServerTestCase { diff --git a/geode-core/src/test/java/com/gemstone/gemfire/cache30/ClientRegisterInterestSelectorDUnitTest.java b/geode-core/src/test/java/com/gemstone/gemfire/cache30/ClientRegisterInterestSelectorDUnitTest.java index b171303e9e38..430ada3b5914 100644 --- a/geode-core/src/test/java/com/gemstone/gemfire/cache30/ClientRegisterInterestSelectorDUnitTest.java +++ b/geode-core/src/test/java/com/gemstone/gemfire/cache30/ClientRegisterInterestSelectorDUnitTest.java @@ -19,7 +19,6 @@ /** * Same as parent but uses selector in server * - * @author darrel * @since 5.1 */ public class ClientRegisterInterestSelectorDUnitTest extends ClientRegisterInterestDUnitTest { diff --git a/geode-core/src/test/java/com/gemstone/gemfire/cache30/ClientServerCCEDUnitTest.java b/geode-core/src/test/java/com/gemstone/gemfire/cache30/ClientServerCCEDUnitTest.java index fb319b60b5c1..deff6403e88f 100644 --- a/geode-core/src/test/java/com/gemstone/gemfire/cache30/ClientServerCCEDUnitTest.java +++ b/geode-core/src/test/java/com/gemstone/gemfire/cache30/ClientServerCCEDUnitTest.java @@ -57,7 +57,6 @@ /** * concurrency-control tests for client/server * - * @author bruce * */ public class ClientServerCCEDUnitTest extends CacheTestCase { diff --git a/geode-core/src/test/java/com/gemstone/gemfire/cache30/ClientServerTestCase.java b/geode-core/src/test/java/com/gemstone/gemfire/cache30/ClientServerTestCase.java index 5c2f8a23a9c3..3b745ee291fe 100644 --- a/geode-core/src/test/java/com/gemstone/gemfire/cache30/ClientServerTestCase.java +++ b/geode-core/src/test/java/com/gemstone/gemfire/cache30/ClientServerTestCase.java @@ -45,7 +45,6 @@ * test case was created by refactoring methods from ConnectionPoolDUnitTest into * this class. * - * @author Kirk Lund * @since 4.2.1 */ public class ClientServerTestCase extends CacheTestCase { diff --git a/geode-core/src/test/java/com/gemstone/gemfire/cache30/DiskDistributedNoAckAsyncOverflowRegionDUnitTest.java b/geode-core/src/test/java/com/gemstone/gemfire/cache30/DiskDistributedNoAckAsyncOverflowRegionDUnitTest.java index c8c7d0e331e6..32712d3cd7d3 100644 --- a/geode-core/src/test/java/com/gemstone/gemfire/cache30/DiskDistributedNoAckAsyncOverflowRegionDUnitTest.java +++ b/geode-core/src/test/java/com/gemstone/gemfire/cache30/DiskDistributedNoAckAsyncOverflowRegionDUnitTest.java @@ -28,7 +28,6 @@ /** * - * @author Eric Zoerner * */ public class DiskDistributedNoAckAsyncOverflowRegionDUnitTest extends DiskDistributedNoAckRegionTestCase { diff --git a/geode-core/src/test/java/com/gemstone/gemfire/cache30/DiskDistributedNoAckAsyncRegionDUnitTest.java b/geode-core/src/test/java/com/gemstone/gemfire/cache30/DiskDistributedNoAckAsyncRegionDUnitTest.java index 4dce1e509e15..464b61c3632d 100644 --- a/geode-core/src/test/java/com/gemstone/gemfire/cache30/DiskDistributedNoAckAsyncRegionDUnitTest.java +++ b/geode-core/src/test/java/com/gemstone/gemfire/cache30/DiskDistributedNoAckAsyncRegionDUnitTest.java @@ -22,7 +22,6 @@ /** * - * @author Eric Zoerner * */ public class DiskDistributedNoAckAsyncRegionDUnitTest extends DiskDistributedNoAckRegionTestCase { diff --git a/geode-core/src/test/java/com/gemstone/gemfire/cache30/DiskDistributedNoAckRegionTestCase.java b/geode-core/src/test/java/com/gemstone/gemfire/cache30/DiskDistributedNoAckRegionTestCase.java index 27b141618d23..426a8da8e65c 100644 --- a/geode-core/src/test/java/com/gemstone/gemfire/cache30/DiskDistributedNoAckRegionTestCase.java +++ b/geode-core/src/test/java/com/gemstone/gemfire/cache30/DiskDistributedNoAckRegionTestCase.java @@ -20,7 +20,6 @@ /** * - * @author Eric Zoerner * */ public abstract class DiskDistributedNoAckRegionTestCase extends DistributedNoAckRegionDUnitTest { diff --git a/geode-core/src/test/java/com/gemstone/gemfire/cache30/DiskDistributedNoAckSyncOverflowRegionDUnitTest.java b/geode-core/src/test/java/com/gemstone/gemfire/cache30/DiskDistributedNoAckSyncOverflowRegionDUnitTest.java index 32790105547a..8c3ead3a470a 100644 --- a/geode-core/src/test/java/com/gemstone/gemfire/cache30/DiskDistributedNoAckSyncOverflowRegionDUnitTest.java +++ b/geode-core/src/test/java/com/gemstone/gemfire/cache30/DiskDistributedNoAckSyncOverflowRegionDUnitTest.java @@ -29,7 +29,6 @@ /** * - * @author Eric Zoerner * */ public class DiskDistributedNoAckSyncOverflowRegionDUnitTest extends DiskDistributedNoAckRegionTestCase { diff --git a/geode-core/src/test/java/com/gemstone/gemfire/cache30/DiskRegionDUnitTest.java b/geode-core/src/test/java/com/gemstone/gemfire/cache30/DiskRegionDUnitTest.java index 817943af97b4..d7e1255d608f 100644 --- a/geode-core/src/test/java/com/gemstone/gemfire/cache30/DiskRegionDUnitTest.java +++ b/geode-core/src/test/java/com/gemstone/gemfire/cache30/DiskRegionDUnitTest.java @@ -59,7 +59,6 @@ * Tests the functionality of cache regions whose contents may be * written to disk. * - * @author David Whitlock * * @since 3.2 */ diff --git a/geode-core/src/test/java/com/gemstone/gemfire/cache30/DiskRegionTestImpl.java b/geode-core/src/test/java/com/gemstone/gemfire/cache30/DiskRegionTestImpl.java index 974bebb9c466..ec2a430bfb46 100644 --- a/geode-core/src/test/java/com/gemstone/gemfire/cache30/DiskRegionTestImpl.java +++ b/geode-core/src/test/java/com/gemstone/gemfire/cache30/DiskRegionTestImpl.java @@ -35,7 +35,6 @@ * An instance of this class is delegated to by test classes that test * disk regions. * - * @author Eric Zoerner * */ public class DiskRegionTestImpl implements Serializable { diff --git a/geode-core/src/test/java/com/gemstone/gemfire/cache30/DistAckMapMethodsDUnitTest.java b/geode-core/src/test/java/com/gemstone/gemfire/cache30/DistAckMapMethodsDUnitTest.java index cf6226ded48b..e033c3fecc67 100644 --- a/geode-core/src/test/java/com/gemstone/gemfire/cache30/DistAckMapMethodsDUnitTest.java +++ b/geode-core/src/test/java/com/gemstone/gemfire/cache30/DistAckMapMethodsDUnitTest.java @@ -50,7 +50,6 @@ /** * - * @author prafulla */ public class DistAckMapMethodsDUnitTest extends DistributedTestCase{ static Cache cache; diff --git a/geode-core/src/test/java/com/gemstone/gemfire/cache30/DistributedAckOverflowRegionCCEOffHeapDUnitTest.java b/geode-core/src/test/java/com/gemstone/gemfire/cache30/DistributedAckOverflowRegionCCEOffHeapDUnitTest.java index 2323b0efbeda..de452af240ed 100755 --- a/geode-core/src/test/java/com/gemstone/gemfire/cache30/DistributedAckOverflowRegionCCEOffHeapDUnitTest.java +++ b/geode-core/src/test/java/com/gemstone/gemfire/cache30/DistributedAckOverflowRegionCCEOffHeapDUnitTest.java @@ -28,7 +28,6 @@ /** * Tests Distributed Ack Overflow Region with ConcurrencyChecksEnabled and OffHeap memory. * - * @author Kirk Lund * @since 9.0 */ @SuppressWarnings({ "deprecation", "serial" }) diff --git a/geode-core/src/test/java/com/gemstone/gemfire/cache30/DistributedAckPersistentRegionCCEDUnitTest.java b/geode-core/src/test/java/com/gemstone/gemfire/cache30/DistributedAckPersistentRegionCCEDUnitTest.java index aaae52b699ca..27f5e36517d0 100644 --- a/geode-core/src/test/java/com/gemstone/gemfire/cache30/DistributedAckPersistentRegionCCEDUnitTest.java +++ b/geode-core/src/test/java/com/gemstone/gemfire/cache30/DistributedAckPersistentRegionCCEDUnitTest.java @@ -48,7 +48,6 @@ import junit.framework.Assert; /** - * @author Xiaojian Zhou * */ public class DistributedAckPersistentRegionCCEDUnitTest extends DistributedAckRegionCCEDUnitTest { diff --git a/geode-core/src/test/java/com/gemstone/gemfire/cache30/DistributedAckPersistentRegionCCEOffHeapDUnitTest.java b/geode-core/src/test/java/com/gemstone/gemfire/cache30/DistributedAckPersistentRegionCCEOffHeapDUnitTest.java index 52a43132cfda..ac7e9d05f683 100755 --- a/geode-core/src/test/java/com/gemstone/gemfire/cache30/DistributedAckPersistentRegionCCEOffHeapDUnitTest.java +++ b/geode-core/src/test/java/com/gemstone/gemfire/cache30/DistributedAckPersistentRegionCCEOffHeapDUnitTest.java @@ -28,7 +28,6 @@ /** * Tests Distributed Ack Persistent Region with ConcurrencyChecksEnabled and OffHeap memory. * - * @author Kirk Lund * @since 9.0 */ @SuppressWarnings({ "deprecation", "serial" }) diff --git a/geode-core/src/test/java/com/gemstone/gemfire/cache30/DistributedAckRegionCCEDUnitTest.java b/geode-core/src/test/java/com/gemstone/gemfire/cache30/DistributedAckRegionCCEDUnitTest.java index a29a569db529..c9b9ac8cb9ca 100644 --- a/geode-core/src/test/java/com/gemstone/gemfire/cache30/DistributedAckRegionCCEDUnitTest.java +++ b/geode-core/src/test/java/com/gemstone/gemfire/cache30/DistributedAckRegionCCEDUnitTest.java @@ -71,7 +71,6 @@ import com.gemstone.gemfire.test.dunit.WaitCriterion; /** - * @author Bruce Schuchardt * */ public class DistributedAckRegionCCEDUnitTest extends DistributedAckRegionDUnitTest { diff --git a/geode-core/src/test/java/com/gemstone/gemfire/cache30/DistributedAckRegionCCEOffHeapDUnitTest.java b/geode-core/src/test/java/com/gemstone/gemfire/cache30/DistributedAckRegionCCEOffHeapDUnitTest.java index 1c1cbaf4b9dc..8329938757f1 100755 --- a/geode-core/src/test/java/com/gemstone/gemfire/cache30/DistributedAckRegionCCEOffHeapDUnitTest.java +++ b/geode-core/src/test/java/com/gemstone/gemfire/cache30/DistributedAckRegionCCEOffHeapDUnitTest.java @@ -28,7 +28,6 @@ /** * Tests Distributed Ack Region with ConcurrencyChecksEnabled and OffHeap memory. * - * @author Kirk Lund * @since 9.0 */ @SuppressWarnings({ "deprecation", "serial" }) diff --git a/geode-core/src/test/java/com/gemstone/gemfire/cache30/DistributedAckRegionCompressionDUnitTest.java b/geode-core/src/test/java/com/gemstone/gemfire/cache30/DistributedAckRegionCompressionDUnitTest.java index 192a3754089c..1ad48691ab63 100644 --- a/geode-core/src/test/java/com/gemstone/gemfire/cache30/DistributedAckRegionCompressionDUnitTest.java +++ b/geode-core/src/test/java/com/gemstone/gemfire/cache30/DistributedAckRegionCompressionDUnitTest.java @@ -25,7 +25,6 @@ /** * Tests Distributed Ack Region with compression. * - * @author rholmes * @since 8.0 */ @SuppressWarnings({ "deprecation", "serial" }) diff --git a/geode-core/src/test/java/com/gemstone/gemfire/cache30/DistributedAckRegionDUnitTest.java b/geode-core/src/test/java/com/gemstone/gemfire/cache30/DistributedAckRegionDUnitTest.java index f957e4965ff0..26f09836dde6 100755 --- a/geode-core/src/test/java/com/gemstone/gemfire/cache30/DistributedAckRegionDUnitTest.java +++ b/geode-core/src/test/java/com/gemstone/gemfire/cache30/DistributedAckRegionDUnitTest.java @@ -35,8 +35,6 @@ * This class tests the functionality of a cache {@link Region region} * that has a scope of {@link Scope#DISTRIBUTED_ACK distributed ACK}. * - * @author David Whitlock - * @author Bruce Schuchardt * @since 3.0 */ public class DistributedAckRegionDUnitTest extends MultiVMRegionTestCase { diff --git a/geode-core/src/test/java/com/gemstone/gemfire/cache30/DistributedAckRegionOffHeapDUnitTest.java b/geode-core/src/test/java/com/gemstone/gemfire/cache30/DistributedAckRegionOffHeapDUnitTest.java index cbf836775f40..c7cb3ce4711e 100755 --- a/geode-core/src/test/java/com/gemstone/gemfire/cache30/DistributedAckRegionOffHeapDUnitTest.java +++ b/geode-core/src/test/java/com/gemstone/gemfire/cache30/DistributedAckRegionOffHeapDUnitTest.java @@ -28,7 +28,6 @@ /** * Tests Distributed Ack Region with OffHeap memory. * - * @author Kirk Lund * @since 9.0 */ @SuppressWarnings({ "deprecation", "serial" }) diff --git a/geode-core/src/test/java/com/gemstone/gemfire/cache30/DistributedNoAckRegionCCEOffHeapDUnitTest.java b/geode-core/src/test/java/com/gemstone/gemfire/cache30/DistributedNoAckRegionCCEOffHeapDUnitTest.java index c068876a98ea..7ae5f6da294f 100755 --- a/geode-core/src/test/java/com/gemstone/gemfire/cache30/DistributedNoAckRegionCCEOffHeapDUnitTest.java +++ b/geode-core/src/test/java/com/gemstone/gemfire/cache30/DistributedNoAckRegionCCEOffHeapDUnitTest.java @@ -28,7 +28,6 @@ /** * Tests Distributed Ack Region with ConcurrencyChecksEnabled and OffHeap memory. * - * @author Kirk Lund * @since 9.0 */ @SuppressWarnings({ "deprecation", "serial" }) diff --git a/geode-core/src/test/java/com/gemstone/gemfire/cache30/DistributedNoAckRegionDUnitTest.java b/geode-core/src/test/java/com/gemstone/gemfire/cache30/DistributedNoAckRegionDUnitTest.java index 1d680f04e208..538132c20c98 100644 --- a/geode-core/src/test/java/com/gemstone/gemfire/cache30/DistributedNoAckRegionDUnitTest.java +++ b/geode-core/src/test/java/com/gemstone/gemfire/cache30/DistributedNoAckRegionDUnitTest.java @@ -43,7 +43,6 @@ * that has a scope of {@link Scope#DISTRIBUTED_NO_ACK distributed no * ACK}. * - * @author David Whitlock * @since 3.0 */ public class DistributedNoAckRegionDUnitTest diff --git a/geode-core/src/test/java/com/gemstone/gemfire/cache30/DistributedNoAckRegionOffHeapDUnitTest.java b/geode-core/src/test/java/com/gemstone/gemfire/cache30/DistributedNoAckRegionOffHeapDUnitTest.java index e668d3ff5c91..b831a2338c39 100755 --- a/geode-core/src/test/java/com/gemstone/gemfire/cache30/DistributedNoAckRegionOffHeapDUnitTest.java +++ b/geode-core/src/test/java/com/gemstone/gemfire/cache30/DistributedNoAckRegionOffHeapDUnitTest.java @@ -28,7 +28,6 @@ /** * Tests Distributed NoAck Region with OffHeap memory. * - * @author Kirk Lund * @since 9.0 */ @SuppressWarnings({ "deprecation", "serial" }) diff --git a/geode-core/src/test/java/com/gemstone/gemfire/cache30/DynamicRegionDUnitTest.java b/geode-core/src/test/java/com/gemstone/gemfire/cache30/DynamicRegionDUnitTest.java index 19d2bb7cdbf1..9be7b4ac4d85 100644 --- a/geode-core/src/test/java/com/gemstone/gemfire/cache30/DynamicRegionDUnitTest.java +++ b/geode-core/src/test/java/com/gemstone/gemfire/cache30/DynamicRegionDUnitTest.java @@ -38,7 +38,6 @@ /** * Test to make sure dynamic regions work * - * @author darrel * @since 4.3 */ public class DynamicRegionDUnitTest extends CacheTestCase { diff --git a/geode-core/src/test/java/com/gemstone/gemfire/cache30/GlobalRegionCCEDUnitTest.java b/geode-core/src/test/java/com/gemstone/gemfire/cache30/GlobalRegionCCEDUnitTest.java index c32899529abf..3c8b6e5183fd 100644 --- a/geode-core/src/test/java/com/gemstone/gemfire/cache30/GlobalRegionCCEDUnitTest.java +++ b/geode-core/src/test/java/com/gemstone/gemfire/cache30/GlobalRegionCCEDUnitTest.java @@ -45,7 +45,6 @@ * This test is only for GLOBAL REPLICATE Regions. Tests are * similar to {@link DistributedAckRegionCCEDUnitTest}. * - * @author Shobhit Agarwal * */ public class GlobalRegionCCEDUnitTest extends GlobalRegionDUnitTest { diff --git a/geode-core/src/test/java/com/gemstone/gemfire/cache30/GlobalRegionCCEOffHeapDUnitTest.java b/geode-core/src/test/java/com/gemstone/gemfire/cache30/GlobalRegionCCEOffHeapDUnitTest.java index 653cab2e3a2a..564e86848655 100755 --- a/geode-core/src/test/java/com/gemstone/gemfire/cache30/GlobalRegionCCEOffHeapDUnitTest.java +++ b/geode-core/src/test/java/com/gemstone/gemfire/cache30/GlobalRegionCCEOffHeapDUnitTest.java @@ -28,7 +28,6 @@ /** * Tests Global Region with ConcurrencyChecksEnabled and OffHeap memory. * - * @author Kirk Lund * @since 9.0 */ @SuppressWarnings({ "deprecation", "serial" }) diff --git a/geode-core/src/test/java/com/gemstone/gemfire/cache30/GlobalRegionDUnitTest.java b/geode-core/src/test/java/com/gemstone/gemfire/cache30/GlobalRegionDUnitTest.java index 008f951c2f62..0a3d3d80ff07 100644 --- a/geode-core/src/test/java/com/gemstone/gemfire/cache30/GlobalRegionDUnitTest.java +++ b/geode-core/src/test/java/com/gemstone/gemfire/cache30/GlobalRegionDUnitTest.java @@ -43,7 +43,6 @@ * This class tests the functionality of a cache {@link Region region} * that has a scope of {@link Scope#GLOBAL global}. * - * @author David Whitlock * @since 3.0 */ public class GlobalRegionDUnitTest extends MultiVMRegionTestCase { diff --git a/geode-core/src/test/java/com/gemstone/gemfire/cache30/GlobalRegionOffHeapDUnitTest.java b/geode-core/src/test/java/com/gemstone/gemfire/cache30/GlobalRegionOffHeapDUnitTest.java index c652c55c90d6..d32e11efa32f 100755 --- a/geode-core/src/test/java/com/gemstone/gemfire/cache30/GlobalRegionOffHeapDUnitTest.java +++ b/geode-core/src/test/java/com/gemstone/gemfire/cache30/GlobalRegionOffHeapDUnitTest.java @@ -28,7 +28,6 @@ /** * Tests Global Region with OffHeap memory. * - * @author Kirk Lund * @since 9.0 */ @SuppressWarnings({ "deprecation", "serial" }) diff --git a/geode-core/src/test/java/com/gemstone/gemfire/cache30/LRUEvictionControllerDUnitTest.java b/geode-core/src/test/java/com/gemstone/gemfire/cache30/LRUEvictionControllerDUnitTest.java index b3a85bcbed08..c07de8681f44 100644 --- a/geode-core/src/test/java/com/gemstone/gemfire/cache30/LRUEvictionControllerDUnitTest.java +++ b/geode-core/src/test/java/com/gemstone/gemfire/cache30/LRUEvictionControllerDUnitTest.java @@ -53,7 +53,6 @@ * Tests the basic functionality of the lru eviction * controller and its statistics. * - * @author David Whitlock * * @since 3.2 */ diff --git a/geode-core/src/test/java/com/gemstone/gemfire/cache30/LocalRegionDUnitTest.java b/geode-core/src/test/java/com/gemstone/gemfire/cache30/LocalRegionDUnitTest.java index 2ed532b9fbd8..188adbc5e6de 100644 --- a/geode-core/src/test/java/com/gemstone/gemfire/cache30/LocalRegionDUnitTest.java +++ b/geode-core/src/test/java/com/gemstone/gemfire/cache30/LocalRegionDUnitTest.java @@ -34,7 +34,6 @@ * though this test is a {@link com.gemstone.gemfire.test.dunit.DistributedTestCase}, it does * not perform any distribution. * - * @author David Whitlock * @since 3.0 */ public class LocalRegionDUnitTest extends CacheListenerTestCase { diff --git a/geode-core/src/test/java/com/gemstone/gemfire/cache30/MemLRUEvictionControllerDUnitTest.java b/geode-core/src/test/java/com/gemstone/gemfire/cache30/MemLRUEvictionControllerDUnitTest.java index e6ff7f1b3c18..51613fc2f9b2 100644 --- a/geode-core/src/test/java/com/gemstone/gemfire/cache30/MemLRUEvictionControllerDUnitTest.java +++ b/geode-core/src/test/java/com/gemstone/gemfire/cache30/MemLRUEvictionControllerDUnitTest.java @@ -39,7 +39,6 @@ * Tests the basic functionality of the memory lru eviction controller * and its statistics. * - * @author David Whitlock * * @since 3.2 */ @@ -209,7 +208,6 @@ public void testEntryOverHead() throws Exception /** Class used in testCustomObjectSizer * - * @author mthomas * @since 5.0 */ class CustomObjectSizer implements ObjectSizer diff --git a/geode-core/src/test/java/com/gemstone/gemfire/cache30/OffHeapLRUEvictionControllerDUnitTest.java b/geode-core/src/test/java/com/gemstone/gemfire/cache30/OffHeapLRUEvictionControllerDUnitTest.java index 0caa7bdec985..599342e44c62 100644 --- a/geode-core/src/test/java/com/gemstone/gemfire/cache30/OffHeapLRUEvictionControllerDUnitTest.java +++ b/geode-core/src/test/java/com/gemstone/gemfire/cache30/OffHeapLRUEvictionControllerDUnitTest.java @@ -30,7 +30,6 @@ * Tests the basic functionality of the lru eviction * controller and its statistics using off-heap regions. * - * @author rholmes * @since 9.0 */ public class OffHeapLRUEvictionControllerDUnitTest extends diff --git a/geode-core/src/test/java/com/gemstone/gemfire/cache30/PRBucketSynchronizationDUnitTest.java b/geode-core/src/test/java/com/gemstone/gemfire/cache30/PRBucketSynchronizationDUnitTest.java index a68bd469c2a3..3a202c6a49b8 100644 --- a/geode-core/src/test/java/com/gemstone/gemfire/cache30/PRBucketSynchronizationDUnitTest.java +++ b/geode-core/src/test/java/com/gemstone/gemfire/cache30/PRBucketSynchronizationDUnitTest.java @@ -52,7 +52,6 @@ /** * concurrency-control tests for client/server * - * @author bruce * */ public class PRBucketSynchronizationDUnitTest extends CacheTestCase { diff --git a/geode-core/src/test/java/com/gemstone/gemfire/cache30/PartitionedRegionCompressionDUnitTest.java b/geode-core/src/test/java/com/gemstone/gemfire/cache30/PartitionedRegionCompressionDUnitTest.java index dddd3f5b0c5c..f433c24f0fdd 100644 --- a/geode-core/src/test/java/com/gemstone/gemfire/cache30/PartitionedRegionCompressionDUnitTest.java +++ b/geode-core/src/test/java/com/gemstone/gemfire/cache30/PartitionedRegionCompressionDUnitTest.java @@ -24,7 +24,6 @@ /** * Tests Partitioned Region with compression. * - * @author rholmes * @since 8.0 */ public class PartitionedRegionCompressionDUnitTest extends diff --git a/geode-core/src/test/java/com/gemstone/gemfire/cache30/PartitionedRegionDUnitTest.java b/geode-core/src/test/java/com/gemstone/gemfire/cache30/PartitionedRegionDUnitTest.java index bc631bd99f65..1599271ab362 100644 --- a/geode-core/src/test/java/com/gemstone/gemfire/cache30/PartitionedRegionDUnitTest.java +++ b/geode-core/src/test/java/com/gemstone/gemfire/cache30/PartitionedRegionDUnitTest.java @@ -52,7 +52,6 @@ * that has a scope of {@link Scope#DISTRIBUTED_ACK distributed ACK} * and {@link PartitionAttributes partition-attributes}. * - * @author Bruce Schuchardt * @since 5.1 */ public class PartitionedRegionDUnitTest extends MultiVMRegionTestCase { diff --git a/geode-core/src/test/java/com/gemstone/gemfire/cache30/PartitionedRegionMembershipListenerDUnitTest.java b/geode-core/src/test/java/com/gemstone/gemfire/cache30/PartitionedRegionMembershipListenerDUnitTest.java index a1e480aad7bb..8876fd7bbbfb 100644 --- a/geode-core/src/test/java/com/gemstone/gemfire/cache30/PartitionedRegionMembershipListenerDUnitTest.java +++ b/geode-core/src/test/java/com/gemstone/gemfire/cache30/PartitionedRegionMembershipListenerDUnitTest.java @@ -34,7 +34,6 @@ import com.gemstone.gemfire.test.dunit.VM; /** - * @author Mitch Thomas * @since 6.0 */ public class PartitionedRegionMembershipListenerDUnitTest extends diff --git a/geode-core/src/test/java/com/gemstone/gemfire/cache30/PartitionedRegionOffHeapDUnitTest.java b/geode-core/src/test/java/com/gemstone/gemfire/cache30/PartitionedRegionOffHeapDUnitTest.java index efd42add44d7..c18921d13e80 100755 --- a/geode-core/src/test/java/com/gemstone/gemfire/cache30/PartitionedRegionOffHeapDUnitTest.java +++ b/geode-core/src/test/java/com/gemstone/gemfire/cache30/PartitionedRegionOffHeapDUnitTest.java @@ -28,7 +28,6 @@ /** * Tests Partitioned Region with OffHeap memory. * - * @author Kirk Lund * @since 9.0 */ public class PartitionedRegionOffHeapDUnitTest extends PartitionedRegionDUnitTest { diff --git a/geode-core/src/test/java/com/gemstone/gemfire/cache30/PreloadedRegionTestCase.java b/geode-core/src/test/java/com/gemstone/gemfire/cache30/PreloadedRegionTestCase.java index 86dfcc737a10..38be7282e2b9 100644 --- a/geode-core/src/test/java/com/gemstone/gemfire/cache30/PreloadedRegionTestCase.java +++ b/geode-core/src/test/java/com/gemstone/gemfire/cache30/PreloadedRegionTestCase.java @@ -31,7 +31,6 @@ * This class tests the functionality of a cache {@link Region region} * that has a scope of {@link Scope#DISTRIBUTED_ACK distributed ACK}. * - * @author David Whitlock * @since 3.0 */ public class PreloadedRegionTestCase extends MultiVMRegionTestCase { diff --git a/geode-core/src/test/java/com/gemstone/gemfire/cache30/ProxyDUnitTest.java b/geode-core/src/test/java/com/gemstone/gemfire/cache30/ProxyDUnitTest.java index 8d6c14cc57ce..7b0488a64582 100644 --- a/geode-core/src/test/java/com/gemstone/gemfire/cache30/ProxyDUnitTest.java +++ b/geode-core/src/test/java/com/gemstone/gemfire/cache30/ProxyDUnitTest.java @@ -48,7 +48,6 @@ * Make sure that operations are distributed and done in * regions remote from a PROXY * - * @author darrel * @since 5.0 */ public class ProxyDUnitTest extends CacheTestCase { diff --git a/geode-core/src/test/java/com/gemstone/gemfire/cache30/PutAllCallBkRemoteVMDUnitTest.java b/geode-core/src/test/java/com/gemstone/gemfire/cache30/PutAllCallBkRemoteVMDUnitTest.java index 01a1f42156fe..9bdfa9be3590 100644 --- a/geode-core/src/test/java/com/gemstone/gemfire/cache30/PutAllCallBkRemoteVMDUnitTest.java +++ b/geode-core/src/test/java/com/gemstone/gemfire/cache30/PutAllCallBkRemoteVMDUnitTest.java @@ -49,7 +49,6 @@ /** * - * @author vjadhav */ public class PutAllCallBkRemoteVMDUnitTest extends DistributedTestCase { diff --git a/geode-core/src/test/java/com/gemstone/gemfire/cache30/PutAllMultiVmDUnitTest.java b/geode-core/src/test/java/com/gemstone/gemfire/cache30/PutAllMultiVmDUnitTest.java index 4ec80544da95..99f914923013 100644 --- a/geode-core/src/test/java/com/gemstone/gemfire/cache30/PutAllMultiVmDUnitTest.java +++ b/geode-core/src/test/java/com/gemstone/gemfire/cache30/PutAllMultiVmDUnitTest.java @@ -46,7 +46,6 @@ /** * - * @author prafulla */ public class PutAllMultiVmDUnitTest extends DistributedTestCase{ diff --git a/geode-core/src/test/java/com/gemstone/gemfire/cache30/QueueMsgDUnitTest.java b/geode-core/src/test/java/com/gemstone/gemfire/cache30/QueueMsgDUnitTest.java index 82d5205e6d92..ae0c3f21f0fe 100644 --- a/geode-core/src/test/java/com/gemstone/gemfire/cache30/QueueMsgDUnitTest.java +++ b/geode-core/src/test/java/com/gemstone/gemfire/cache30/QueueMsgDUnitTest.java @@ -44,7 +44,6 @@ /** * Test to make sure message queuing works. * - * @author Darrel Schneider * @since 5.0 */ public class QueueMsgDUnitTest extends ReliabilityTestCase { diff --git a/geode-core/src/test/java/com/gemstone/gemfire/cache30/RRSynchronizationDUnitTest.java b/geode-core/src/test/java/com/gemstone/gemfire/cache30/RRSynchronizationDUnitTest.java index 916634b76625..fe39484e9628 100644 --- a/geode-core/src/test/java/com/gemstone/gemfire/cache30/RRSynchronizationDUnitTest.java +++ b/geode-core/src/test/java/com/gemstone/gemfire/cache30/RRSynchronizationDUnitTest.java @@ -56,7 +56,6 @@ /** * concurrency-control tests for client/server * - * @author bruce * */ public class RRSynchronizationDUnitTest extends CacheTestCase { diff --git a/geode-core/src/test/java/com/gemstone/gemfire/cache30/RegionAttributesTestCase.java b/geode-core/src/test/java/com/gemstone/gemfire/cache30/RegionAttributesTestCase.java index 5b1fc0e2bf41..fe705827bdfe 100644 --- a/geode-core/src/test/java/com/gemstone/gemfire/cache30/RegionAttributesTestCase.java +++ b/geode-core/src/test/java/com/gemstone/gemfire/cache30/RegionAttributesTestCase.java @@ -31,7 +31,6 @@ * {@link RegionAttributes}, {@link AttributesFactory}, and {@link * AttributesMutator}. * - * @author David Whitlock * * @since 3.0 */ diff --git a/geode-core/src/test/java/com/gemstone/gemfire/cache30/RegionMembershipListenerDUnitTest.java b/geode-core/src/test/java/com/gemstone/gemfire/cache30/RegionMembershipListenerDUnitTest.java index 0572c7686a98..db5206ff6762 100644 --- a/geode-core/src/test/java/com/gemstone/gemfire/cache30/RegionMembershipListenerDUnitTest.java +++ b/geode-core/src/test/java/com/gemstone/gemfire/cache30/RegionMembershipListenerDUnitTest.java @@ -46,7 +46,6 @@ /** * Test {@link RegionMembershipListener} * - * @author darrel * @since 5.0 */ public class RegionMembershipListenerDUnitTest extends CacheTestCase { diff --git a/geode-core/src/test/java/com/gemstone/gemfire/cache30/RegionReliabilityDistAckDUnitTest.java b/geode-core/src/test/java/com/gemstone/gemfire/cache30/RegionReliabilityDistAckDUnitTest.java index aa9bfca877fa..6bbee087fc66 100644 --- a/geode-core/src/test/java/com/gemstone/gemfire/cache30/RegionReliabilityDistAckDUnitTest.java +++ b/geode-core/src/test/java/com/gemstone/gemfire/cache30/RegionReliabilityDistAckDUnitTest.java @@ -22,7 +22,6 @@ * Tests region reliability defined by MembershipAttributes using * DISTRIBUTED_ACK scope. * - * @author Kirk Lund * @since 5.0 */ public class RegionReliabilityDistAckDUnitTest extends RegionReliabilityTestCase { diff --git a/geode-core/src/test/java/com/gemstone/gemfire/cache30/RegionReliabilityDistNoAckDUnitTest.java b/geode-core/src/test/java/com/gemstone/gemfire/cache30/RegionReliabilityDistNoAckDUnitTest.java index 82268e77556b..31f0897849ce 100644 --- a/geode-core/src/test/java/com/gemstone/gemfire/cache30/RegionReliabilityDistNoAckDUnitTest.java +++ b/geode-core/src/test/java/com/gemstone/gemfire/cache30/RegionReliabilityDistNoAckDUnitTest.java @@ -22,7 +22,6 @@ * Tests region reliability defined by MembershipAttributes using * DISTRIBUTED_NO_ACK scope. * - * @author Kirk Lund * @since 5.0 */ public class RegionReliabilityDistNoAckDUnitTest extends RegionReliabilityTestCase { diff --git a/geode-core/src/test/java/com/gemstone/gemfire/cache30/RegionReliabilityGlobalDUnitTest.java b/geode-core/src/test/java/com/gemstone/gemfire/cache30/RegionReliabilityGlobalDUnitTest.java index d894f29d11ee..4e3be2e8f134 100644 --- a/geode-core/src/test/java/com/gemstone/gemfire/cache30/RegionReliabilityGlobalDUnitTest.java +++ b/geode-core/src/test/java/com/gemstone/gemfire/cache30/RegionReliabilityGlobalDUnitTest.java @@ -22,7 +22,6 @@ * Tests region reliability defined by MembershipAttributes using * GLOBAL scope. * - * @author Kirk Lund * @since 5.0 */ public class RegionReliabilityGlobalDUnitTest extends RegionReliabilityTestCase { diff --git a/geode-core/src/test/java/com/gemstone/gemfire/cache30/RegionReliabilityListenerDUnitTest.java b/geode-core/src/test/java/com/gemstone/gemfire/cache30/RegionReliabilityListenerDUnitTest.java index 66a873d50705..dfb2470457ff 100644 --- a/geode-core/src/test/java/com/gemstone/gemfire/cache30/RegionReliabilityListenerDUnitTest.java +++ b/geode-core/src/test/java/com/gemstone/gemfire/cache30/RegionReliabilityListenerDUnitTest.java @@ -39,7 +39,6 @@ /** * Tests the functionality of the {@link RegionRoleListener} class. * - * @author Kirk Lund * @since 5.0 */ public class RegionReliabilityListenerDUnitTest extends ReliabilityTestCase { diff --git a/geode-core/src/test/java/com/gemstone/gemfire/cache30/RegionReliabilityTestCase.java b/geode-core/src/test/java/com/gemstone/gemfire/cache30/RegionReliabilityTestCase.java index 8cc65d36b654..0b40e4d5eded 100644 --- a/geode-core/src/test/java/com/gemstone/gemfire/cache30/RegionReliabilityTestCase.java +++ b/geode-core/src/test/java/com/gemstone/gemfire/cache30/RegionReliabilityTestCase.java @@ -75,7 +75,6 @@ /** * Tests region reliability defined by MembershipAttributes. * - * @author Kirk Lund * @since 5.0 */ public abstract class RegionReliabilityTestCase extends ReliabilityTestCase { diff --git a/geode-core/src/test/java/com/gemstone/gemfire/cache30/RegionTestCase.java b/geode-core/src/test/java/com/gemstone/gemfire/cache30/RegionTestCase.java index ed89a13ba14e..23e6968ce566 100644 --- a/geode-core/src/test/java/com/gemstone/gemfire/cache30/RegionTestCase.java +++ b/geode-core/src/test/java/com/gemstone/gemfire/cache30/RegionTestCase.java @@ -77,7 +77,6 @@ * See {@link #getRegionAttributes}. * * - * @author David Whitlock * @since 3.0 */ public abstract class RegionTestCase extends CacheTestCase { diff --git a/geode-core/src/test/java/com/gemstone/gemfire/cache30/ReliabilityTestCase.java b/geode-core/src/test/java/com/gemstone/gemfire/cache30/ReliabilityTestCase.java index 477f9426054e..e170a0ac748e 100644 --- a/geode-core/src/test/java/com/gemstone/gemfire/cache30/ReliabilityTestCase.java +++ b/geode-core/src/test/java/com/gemstone/gemfire/cache30/ReliabilityTestCase.java @@ -23,7 +23,6 @@ /** * Provides functionality helpful to testing Reliability and RequiredRoles. * - * @author Kirk Lund * @since 5.0 */ public abstract class ReliabilityTestCase extends CacheTestCase { diff --git a/geode-core/src/test/java/com/gemstone/gemfire/cache30/RemoveAllMultiVmDUnitTest.java b/geode-core/src/test/java/com/gemstone/gemfire/cache30/RemoveAllMultiVmDUnitTest.java index cfd1ce8b4f92..7e128e6d6ca6 100644 --- a/geode-core/src/test/java/com/gemstone/gemfire/cache30/RemoveAllMultiVmDUnitTest.java +++ b/geode-core/src/test/java/com/gemstone/gemfire/cache30/RemoveAllMultiVmDUnitTest.java @@ -44,7 +44,6 @@ /** * - * @author darrel */ public class RemoveAllMultiVmDUnitTest extends DistributedTestCase { diff --git a/geode-core/src/test/java/com/gemstone/gemfire/cache30/RequiredRolesDUnitTest.java b/geode-core/src/test/java/com/gemstone/gemfire/cache30/RequiredRolesDUnitTest.java index 1e69266401cb..8700c7f437f3 100644 --- a/geode-core/src/test/java/com/gemstone/gemfire/cache30/RequiredRolesDUnitTest.java +++ b/geode-core/src/test/java/com/gemstone/gemfire/cache30/RequiredRolesDUnitTest.java @@ -44,7 +44,6 @@ /** * Tests the functionality of the {@link RequiredRoles} class. * - * @author Kirk Lund * @since 5.0 */ public class RequiredRolesDUnitTest extends ReliabilityTestCase { diff --git a/geode-core/src/test/java/com/gemstone/gemfire/cache30/RolePerformanceDUnitTest.java b/geode-core/src/test/java/com/gemstone/gemfire/cache30/RolePerformanceDUnitTest.java index babbf126befa..d8530b96511f 100644 --- a/geode-core/src/test/java/com/gemstone/gemfire/cache30/RolePerformanceDUnitTest.java +++ b/geode-core/src/test/java/com/gemstone/gemfire/cache30/RolePerformanceDUnitTest.java @@ -32,7 +32,6 @@ /** * Tests the performance of Regions when Roles are assigned. * - * @author Kirk Lund * @since 5.0 */ public class RolePerformanceDUnitTest extends CacheTestCase { diff --git a/geode-core/src/test/java/com/gemstone/gemfire/cache30/SlowRecDUnitTest.java b/geode-core/src/test/java/com/gemstone/gemfire/cache30/SlowRecDUnitTest.java index 899fbb19ffda..920cbf4fe224 100644 --- a/geode-core/src/test/java/com/gemstone/gemfire/cache30/SlowRecDUnitTest.java +++ b/geode-core/src/test/java/com/gemstone/gemfire/cache30/SlowRecDUnitTest.java @@ -51,7 +51,6 @@ /** * Test to make sure slow receiver queuing is working * - * @author darrel * @since 4.2.1 */ @Category(DistributedTest.class) diff --git a/geode-core/src/test/java/com/gemstone/gemfire/cache30/TXDistributedDUnitTest.java b/geode-core/src/test/java/com/gemstone/gemfire/cache30/TXDistributedDUnitTest.java index 720da566db72..d3b96f7defe1 100644 --- a/geode-core/src/test/java/com/gemstone/gemfire/cache30/TXDistributedDUnitTest.java +++ b/geode-core/src/test/java/com/gemstone/gemfire/cache30/TXDistributedDUnitTest.java @@ -22,7 +22,6 @@ * MultiVMRegionTestCase. * * - * @author Mitch Thomas * @since 4.0 * @see MultiVMRegionTestCase * diff --git a/geode-core/src/test/java/com/gemstone/gemfire/cache30/TXOrderDUnitTest.java b/geode-core/src/test/java/com/gemstone/gemfire/cache30/TXOrderDUnitTest.java index b1d7bab34a9f..faf287355194 100644 --- a/geode-core/src/test/java/com/gemstone/gemfire/cache30/TXOrderDUnitTest.java +++ b/geode-core/src/test/java/com/gemstone/gemfire/cache30/TXOrderDUnitTest.java @@ -59,7 +59,6 @@ /** * Test the order of operations done on the farside of a tx. * - * @author darrel * @since 5.0 */ public class TXOrderDUnitTest extends CacheTestCase { diff --git a/geode-core/src/test/java/com/gemstone/gemfire/cache30/TXRestrictionsDUnitTest.java b/geode-core/src/test/java/com/gemstone/gemfire/cache30/TXRestrictionsDUnitTest.java index d1ec415a3394..7d969c8a991b 100644 --- a/geode-core/src/test/java/com/gemstone/gemfire/cache30/TXRestrictionsDUnitTest.java +++ b/geode-core/src/test/java/com/gemstone/gemfire/cache30/TXRestrictionsDUnitTest.java @@ -20,7 +20,6 @@ * MultiVMRegionTestCase. * * - * @author Mitch Thomas * @since 4.0 * @see MultiVMRegionTestCase * diff --git a/geode-core/src/test/java/com/gemstone/gemfire/cache30/TestCacheCallback.java b/geode-core/src/test/java/com/gemstone/gemfire/cache30/TestCacheCallback.java index b28089a590a6..3f67027e61ea 100644 --- a/geode-core/src/test/java/com/gemstone/gemfire/cache30/TestCacheCallback.java +++ b/geode-core/src/test/java/com/gemstone/gemfire/cache30/TestCacheCallback.java @@ -26,7 +26,6 @@ * * @see #wasInvoked * - * @author David Whitlock * @since 3.0 */ public abstract class TestCacheCallback implements CacheCallback { diff --git a/geode-core/src/test/java/com/gemstone/gemfire/cache30/TestCacheListener.java b/geode-core/src/test/java/com/gemstone/gemfire/cache30/TestCacheListener.java index 25cd6411bc0c..9fca34574a1f 100644 --- a/geode-core/src/test/java/com/gemstone/gemfire/cache30/TestCacheListener.java +++ b/geode-core/src/test/java/com/gemstone/gemfire/cache30/TestCacheListener.java @@ -27,7 +27,6 @@ * * @see #wasInvoked * - * @author David Whitlock * @since 3.0 */ public abstract class TestCacheListener extends TestCacheCallback diff --git a/geode-core/src/test/java/com/gemstone/gemfire/cache30/TestCacheLoader.java b/geode-core/src/test/java/com/gemstone/gemfire/cache30/TestCacheLoader.java index ac6adadcd118..48e529d07760 100644 --- a/geode-core/src/test/java/com/gemstone/gemfire/cache30/TestCacheLoader.java +++ b/geode-core/src/test/java/com/gemstone/gemfire/cache30/TestCacheLoader.java @@ -25,7 +25,6 @@ * @see #wasInvoked * @see TestCacheWriter * - * @author David Whitlock * * @since 3.0 */ diff --git a/geode-core/src/test/java/com/gemstone/gemfire/cache30/TestCacheWriter.java b/geode-core/src/test/java/com/gemstone/gemfire/cache30/TestCacheWriter.java index 498a10939a0b..dffae19920cb 100644 --- a/geode-core/src/test/java/com/gemstone/gemfire/cache30/TestCacheWriter.java +++ b/geode-core/src/test/java/com/gemstone/gemfire/cache30/TestCacheWriter.java @@ -26,7 +26,6 @@ * * @see #wasInvoked * - * @author David Whitlock * * @since 3.0 */ diff --git a/geode-core/src/test/java/com/gemstone/gemfire/cache30/TestDiskRegion.java b/geode-core/src/test/java/com/gemstone/gemfire/cache30/TestDiskRegion.java index f33950eaad7e..2d1b25c383f5 100644 --- a/geode-core/src/test/java/com/gemstone/gemfire/cache30/TestDiskRegion.java +++ b/geode-core/src/test/java/com/gemstone/gemfire/cache30/TestDiskRegion.java @@ -41,7 +41,6 @@ /** * A little test program for testing (and debugging) disk regions. * - * @author David Whitlock * * @since 3.2 */ diff --git a/geode-core/src/test/java/com/gemstone/gemfire/cache30/TestPdxSerializer.java b/geode-core/src/test/java/com/gemstone/gemfire/cache30/TestPdxSerializer.java index 0d28d291bb2a..392436155053 100644 --- a/geode-core/src/test/java/com/gemstone/gemfire/cache30/TestPdxSerializer.java +++ b/geode-core/src/test/java/com/gemstone/gemfire/cache30/TestPdxSerializer.java @@ -26,7 +26,6 @@ import com.gemstone.gemfire.pdx.PdxWriter; /** - * @author dsmith * */ public class TestPdxSerializer implements PdxSerializer, Declarable2 { diff --git a/geode-core/src/test/java/com/gemstone/gemfire/cache30/TestTransactionListener.java b/geode-core/src/test/java/com/gemstone/gemfire/cache30/TestTransactionListener.java index 35a631dcdfef..50b57670a509 100644 --- a/geode-core/src/test/java/com/gemstone/gemfire/cache30/TestTransactionListener.java +++ b/geode-core/src/test/java/com/gemstone/gemfire/cache30/TestTransactionListener.java @@ -26,7 +26,6 @@ * * @see #wasInvoked * - * @author Mitch Thomas * @since 4.0 */ public abstract class TestTransactionListener extends TestCacheCallback diff --git a/geode-core/src/test/java/com/gemstone/gemfire/codeAnalysis/ClassAndMethodDetails.java b/geode-core/src/test/java/com/gemstone/gemfire/codeAnalysis/ClassAndMethodDetails.java index 0731a6d61c19..a5dfb1230bcd 100644 --- a/geode-core/src/test/java/com/gemstone/gemfire/codeAnalysis/ClassAndMethodDetails.java +++ b/geode-core/src/test/java/com/gemstone/gemfire/codeAnalysis/ClassAndMethodDetails.java @@ -34,7 +34,6 @@ * A class used to store the names of dataserializable classes and the sizes * of their toData/fromData methods. * - * @author bruces * */ public class ClassAndMethodDetails implements Comparable { diff --git a/geode-core/src/test/java/com/gemstone/gemfire/codeAnalysis/ClassAndVariableDetails.java b/geode-core/src/test/java/com/gemstone/gemfire/codeAnalysis/ClassAndVariableDetails.java index c4f59e47c830..1d3f9c0b2996 100755 --- a/geode-core/src/test/java/com/gemstone/gemfire/codeAnalysis/ClassAndVariableDetails.java +++ b/geode-core/src/test/java/com/gemstone/gemfire/codeAnalysis/ClassAndVariableDetails.java @@ -31,7 +31,6 @@ * A class used to store the names of dataserializable classes and the sizes * of their toData/fromData methods. * - * @author bruces * */ public class ClassAndVariableDetails implements Comparable { diff --git a/geode-core/src/test/java/com/gemstone/gemfire/distributed/AbstractLauncherJUnitTest.java b/geode-core/src/test/java/com/gemstone/gemfire/distributed/AbstractLauncherJUnitTest.java index 6e192345058c..f5867d4fadd3 100644 --- a/geode-core/src/test/java/com/gemstone/gemfire/distributed/AbstractLauncherJUnitTest.java +++ b/geode-core/src/test/java/com/gemstone/gemfire/distributed/AbstractLauncherJUnitTest.java @@ -34,8 +34,6 @@ * The AbstractLauncherJUnitTest class is a test suite of unit tests testing the contract and functionality * of the AbstractLauncher class. *

    - * @author John Blum - * @author Kirk Lund * @see com.gemstone.gemfire.distributed.AbstractLauncher * @see org.junit.Assert * @see org.junit.Test diff --git a/geode-core/src/test/java/com/gemstone/gemfire/distributed/AbstractLauncherJUnitTestCase.java b/geode-core/src/test/java/com/gemstone/gemfire/distributed/AbstractLauncherJUnitTestCase.java index 38accdaf54fa..77961e078f79 100755 --- a/geode-core/src/test/java/com/gemstone/gemfire/distributed/AbstractLauncherJUnitTestCase.java +++ b/geode-core/src/test/java/com/gemstone/gemfire/distributed/AbstractLauncherJUnitTestCase.java @@ -48,7 +48,6 @@ import com.gemstone.gemfire.internal.util.StopWatch; /** - * @author Kirk Lund * @since 8.0 */ public abstract class AbstractLauncherJUnitTestCase { diff --git a/geode-core/src/test/java/com/gemstone/gemfire/distributed/AbstractLauncherServiceStatusJUnitTest.java b/geode-core/src/test/java/com/gemstone/gemfire/distributed/AbstractLauncherServiceStatusJUnitTest.java index 10ce616b5836..ca24a4e2c300 100755 --- a/geode-core/src/test/java/com/gemstone/gemfire/distributed/AbstractLauncherServiceStatusJUnitTest.java +++ b/geode-core/src/test/java/com/gemstone/gemfire/distributed/AbstractLauncherServiceStatusJUnitTest.java @@ -42,7 +42,6 @@ /** * Tests marshaling of ServiceStatus to and from JSON. * - * @author Kirk Lund * @since 7.0 */ @Category(UnitTest.class) diff --git a/geode-core/src/test/java/com/gemstone/gemfire/distributed/AbstractLocatorLauncherJUnitTestCase.java b/geode-core/src/test/java/com/gemstone/gemfire/distributed/AbstractLocatorLauncherJUnitTestCase.java index 071afd4d3e97..62c4d86470be 100755 --- a/geode-core/src/test/java/com/gemstone/gemfire/distributed/AbstractLocatorLauncherJUnitTestCase.java +++ b/geode-core/src/test/java/com/gemstone/gemfire/distributed/AbstractLocatorLauncherJUnitTestCase.java @@ -31,7 +31,6 @@ import com.gemstone.gemfire.internal.DistributionLocator; /** - * @author Kirk Lund * @since 8.0 */ public abstract class AbstractLocatorLauncherJUnitTestCase extends AbstractLauncherJUnitTestCase { diff --git a/geode-core/src/test/java/com/gemstone/gemfire/distributed/AbstractServerLauncherJUnitTestCase.java b/geode-core/src/test/java/com/gemstone/gemfire/distributed/AbstractServerLauncherJUnitTestCase.java index 31300ddc8b34..0ee3e7cfc0c7 100755 --- a/geode-core/src/test/java/com/gemstone/gemfire/distributed/AbstractServerLauncherJUnitTestCase.java +++ b/geode-core/src/test/java/com/gemstone/gemfire/distributed/AbstractServerLauncherJUnitTestCase.java @@ -33,7 +33,6 @@ import com.gemstone.gemfire.internal.cache.AbstractCacheServer; /** - * @author Kirk Lund * @since 8.0 */ public abstract class AbstractServerLauncherJUnitTestCase extends AbstractLauncherJUnitTestCase { diff --git a/geode-core/src/test/java/com/gemstone/gemfire/distributed/DistributedMemberDUnitTest.java b/geode-core/src/test/java/com/gemstone/gemfire/distributed/DistributedMemberDUnitTest.java index 3dc6d75ab6e7..722ae50045c9 100755 --- a/geode-core/src/test/java/com/gemstone/gemfire/distributed/DistributedMemberDUnitTest.java +++ b/geode-core/src/test/java/com/gemstone/gemfire/distributed/DistributedMemberDUnitTest.java @@ -43,7 +43,6 @@ /** * Tests the functionality of the {@link DistributedMember} class. * - * @author Kirk Lund * @since 5.0 */ public class DistributedMemberDUnitTest extends DistributedTestCase { diff --git a/geode-core/src/test/java/com/gemstone/gemfire/distributed/DistributedSystemDUnitTest.java b/geode-core/src/test/java/com/gemstone/gemfire/distributed/DistributedSystemDUnitTest.java index fcaaa2d54ee5..95d6638f5167 100644 --- a/geode-core/src/test/java/com/gemstone/gemfire/distributed/DistributedSystemDUnitTest.java +++ b/geode-core/src/test/java/com/gemstone/gemfire/distributed/DistributedSystemDUnitTest.java @@ -55,7 +55,6 @@ * * @see InternalDistributedSystemJUnitTest * - * @author David Whitlock */ public class DistributedSystemDUnitTest extends DistributedTestCase { diff --git a/geode-core/src/test/java/com/gemstone/gemfire/distributed/DistributedTestSuite.java b/geode-core/src/test/java/com/gemstone/gemfire/distributed/DistributedTestSuite.java index 696551125b4f..58b8d2ab1a53 100755 --- a/geode-core/src/test/java/com/gemstone/gemfire/distributed/DistributedTestSuite.java +++ b/geode-core/src/test/java/com/gemstone/gemfire/distributed/DistributedTestSuite.java @@ -30,7 +30,6 @@ /** * Suite of tests for distributed membership dunit tests. * - * @author Kirk Lund */ public class DistributedTestSuite { } diff --git a/geode-core/src/test/java/com/gemstone/gemfire/distributed/HostedLocatorsDUnitTest.java b/geode-core/src/test/java/com/gemstone/gemfire/distributed/HostedLocatorsDUnitTest.java index fe2202fd5a93..ece2829cecdd 100644 --- a/geode-core/src/test/java/com/gemstone/gemfire/distributed/HostedLocatorsDUnitTest.java +++ b/geode-core/src/test/java/com/gemstone/gemfire/distributed/HostedLocatorsDUnitTest.java @@ -41,7 +41,6 @@ /** * Extracted from LocatorLauncherLocalJUnitTest. * - * @author Kirk Lund * @since 8.0 */ public class HostedLocatorsDUnitTest extends DistributedTestCase { diff --git a/geode-core/src/test/java/com/gemstone/gemfire/distributed/LauncherMemberMXBeanJUnitTest.java b/geode-core/src/test/java/com/gemstone/gemfire/distributed/LauncherMemberMXBeanJUnitTest.java index e76001e9460c..30e21e115b59 100755 --- a/geode-core/src/test/java/com/gemstone/gemfire/distributed/LauncherMemberMXBeanJUnitTest.java +++ b/geode-core/src/test/java/com/gemstone/gemfire/distributed/LauncherMemberMXBeanJUnitTest.java @@ -44,7 +44,6 @@ * Tests querying of MemberMXBean which is used by MBeanProcessController to * control GemFire ControllableProcesses. * - * @author Kirk Lund * @since 8.0 */ @Category(IntegrationTest.class) diff --git a/geode-core/src/test/java/com/gemstone/gemfire/distributed/LauncherTestSuite.java b/geode-core/src/test/java/com/gemstone/gemfire/distributed/LauncherTestSuite.java index 73a23374b82f..91af24e3e388 100644 --- a/geode-core/src/test/java/com/gemstone/gemfire/distributed/LauncherTestSuite.java +++ b/geode-core/src/test/java/com/gemstone/gemfire/distributed/LauncherTestSuite.java @@ -42,7 +42,6 @@ /** * Suite of tests for the Launcher classes. * - * @author Kirk Lund */ public class LauncherTestSuite { } diff --git a/geode-core/src/test/java/com/gemstone/gemfire/distributed/LocatorLauncherJUnitTest.java b/geode-core/src/test/java/com/gemstone/gemfire/distributed/LocatorLauncherJUnitTest.java index 556bf4f7ccee..a8ddd6a03788 100644 --- a/geode-core/src/test/java/com/gemstone/gemfire/distributed/LocatorLauncherJUnitTest.java +++ b/geode-core/src/test/java/com/gemstone/gemfire/distributed/LocatorLauncherJUnitTest.java @@ -39,8 +39,6 @@ * The LocatorLauncherJUnitTest class is a test suite of test cases for testing the contract and functionality of * launching a GemFire Locator. * - * @author John Blum - * @author Kirk Lund * @see com.gemstone.gemfire.distributed.LocatorLauncher * @see com.gemstone.gemfire.distributed.LocatorLauncher.Builder * @see com.gemstone.gemfire.distributed.LocatorLauncher.Command diff --git a/geode-core/src/test/java/com/gemstone/gemfire/distributed/LocatorLauncherLocalFileJUnitTest.java b/geode-core/src/test/java/com/gemstone/gemfire/distributed/LocatorLauncherLocalFileJUnitTest.java index ffaf2121d120..7dc54523b8d7 100755 --- a/geode-core/src/test/java/com/gemstone/gemfire/distributed/LocatorLauncherLocalFileJUnitTest.java +++ b/geode-core/src/test/java/com/gemstone/gemfire/distributed/LocatorLauncherLocalFileJUnitTest.java @@ -29,7 +29,6 @@ * the Attach API which is in the JDK tools.jar. As a result LocatorLauncher * ends up using the FileProcessController implementation. * - * @author Kirk Lund * @since 8.0 */ public class LocatorLauncherLocalFileJUnitTest extends LocatorLauncherLocalJUnitTest { diff --git a/geode-core/src/test/java/com/gemstone/gemfire/distributed/LocatorLauncherLocalJUnitTest.java b/geode-core/src/test/java/com/gemstone/gemfire/distributed/LocatorLauncherLocalJUnitTest.java index ee8e2208cd4b..bfed4d0f5d1b 100755 --- a/geode-core/src/test/java/com/gemstone/gemfire/distributed/LocatorLauncherLocalJUnitTest.java +++ b/geode-core/src/test/java/com/gemstone/gemfire/distributed/LocatorLauncherLocalJUnitTest.java @@ -47,7 +47,6 @@ /** * Tests usage of LocatorLauncher as a local API in existing JVM. * - * @author Kirk Lund * @since 8.0 */ @Category(IntegrationTest.class) diff --git a/geode-core/src/test/java/com/gemstone/gemfire/distributed/LocatorLauncherRemoteFileJUnitTest.java b/geode-core/src/test/java/com/gemstone/gemfire/distributed/LocatorLauncherRemoteFileJUnitTest.java index fd02cae77a96..d3edcae9fa13 100755 --- a/geode-core/src/test/java/com/gemstone/gemfire/distributed/LocatorLauncherRemoteFileJUnitTest.java +++ b/geode-core/src/test/java/com/gemstone/gemfire/distributed/LocatorLauncherRemoteFileJUnitTest.java @@ -41,7 +41,6 @@ * the Attach API which is in the JDK tools.jar. As a result LocatorLauncher * ends up using the FileProcessController implementation. * - * @author Kirk Lund * @since 8.0 */ @Category(IntegrationTest.class) diff --git a/geode-core/src/test/java/com/gemstone/gemfire/distributed/LocatorLauncherRemoteJUnitTest.java b/geode-core/src/test/java/com/gemstone/gemfire/distributed/LocatorLauncherRemoteJUnitTest.java index 2b57ca4214a8..52ebe24793ff 100755 --- a/geode-core/src/test/java/com/gemstone/gemfire/distributed/LocatorLauncherRemoteJUnitTest.java +++ b/geode-core/src/test/java/com/gemstone/gemfire/distributed/LocatorLauncherRemoteJUnitTest.java @@ -53,7 +53,6 @@ /** * Integration tests for launching a Locator in a forked process. * - * @author Kirk Lund * @since 8.0 */ @Category(IntegrationTest.class) diff --git a/geode-core/src/test/java/com/gemstone/gemfire/distributed/RoleDUnitTest.java b/geode-core/src/test/java/com/gemstone/gemfire/distributed/RoleDUnitTest.java index eb36cdc38918..8ec5a08fdc23 100755 --- a/geode-core/src/test/java/com/gemstone/gemfire/distributed/RoleDUnitTest.java +++ b/geode-core/src/test/java/com/gemstone/gemfire/distributed/RoleDUnitTest.java @@ -32,7 +32,6 @@ /** * Tests the functionality of the {@link DistributedMember} class. * - * @author Kirk Lund * @since 5.0 */ public class RoleDUnitTest extends DistributedTestCase { diff --git a/geode-core/src/test/java/com/gemstone/gemfire/distributed/ServerLauncherJUnitTest.java b/geode-core/src/test/java/com/gemstone/gemfire/distributed/ServerLauncherJUnitTest.java index 2de4589ca9a1..d3a705074900 100644 --- a/geode-core/src/test/java/com/gemstone/gemfire/distributed/ServerLauncherJUnitTest.java +++ b/geode-core/src/test/java/com/gemstone/gemfire/distributed/ServerLauncherJUnitTest.java @@ -56,8 +56,6 @@ * The ServerLauncherJUnitTest class is a test suite of unit tests testing the contract, functionality and invariants * of the ServerLauncher class. * - * @author John Blum - * @author Kirk Lund * @see com.gemstone.gemfire.distributed.ServerLauncher * @see com.gemstone.gemfire.distributed.ServerLauncher.Builder * @see com.gemstone.gemfire.distributed.ServerLauncher.Command diff --git a/geode-core/src/test/java/com/gemstone/gemfire/distributed/ServerLauncherLocalFileJUnitTest.java b/geode-core/src/test/java/com/gemstone/gemfire/distributed/ServerLauncherLocalFileJUnitTest.java index 41ce8484d2e6..bda05c414b72 100755 --- a/geode-core/src/test/java/com/gemstone/gemfire/distributed/ServerLauncherLocalFileJUnitTest.java +++ b/geode-core/src/test/java/com/gemstone/gemfire/distributed/ServerLauncherLocalFileJUnitTest.java @@ -31,7 +31,6 @@ * the Attach API which is in the JDK tools.jar. As a result ServerLauncher * ends up using the FileProcessController implementation. * - * @author Kirk Lund * @since 8.0 */ @Category(IntegrationTest.class) diff --git a/geode-core/src/test/java/com/gemstone/gemfire/distributed/ServerLauncherLocalJUnitTest.java b/geode-core/src/test/java/com/gemstone/gemfire/distributed/ServerLauncherLocalJUnitTest.java index a472d6a7e544..fd7d80687b45 100755 --- a/geode-core/src/test/java/com/gemstone/gemfire/distributed/ServerLauncherLocalJUnitTest.java +++ b/geode-core/src/test/java/com/gemstone/gemfire/distributed/ServerLauncherLocalJUnitTest.java @@ -55,9 +55,6 @@ /** * Integration tests for ServerLauncher as a local API in the local JVM. * - * @author Kirk Lund - * @author David Hoots - * @author John Blum * @see com.gemstone.gemfire.distributed.AbstractLauncher * @see com.gemstone.gemfire.distributed.ServerLauncher * @see com.gemstone.gemfire.distributed.ServerLauncher.Builder diff --git a/geode-core/src/test/java/com/gemstone/gemfire/distributed/ServerLauncherRemoteFileJUnitTest.java b/geode-core/src/test/java/com/gemstone/gemfire/distributed/ServerLauncherRemoteFileJUnitTest.java index 2ee0dab13b39..d8e318f954cc 100755 --- a/geode-core/src/test/java/com/gemstone/gemfire/distributed/ServerLauncherRemoteFileJUnitTest.java +++ b/geode-core/src/test/java/com/gemstone/gemfire/distributed/ServerLauncherRemoteFileJUnitTest.java @@ -41,7 +41,6 @@ * the Attach API which is in the JDK tools.jar. As a result ServerLauncher * ends up using the FileProcessController implementation. * - * @author Kirk Lund * @since 8.0 */ @Category(IntegrationTest.class) diff --git a/geode-core/src/test/java/com/gemstone/gemfire/distributed/ServerLauncherRemoteJUnitTest.java b/geode-core/src/test/java/com/gemstone/gemfire/distributed/ServerLauncherRemoteJUnitTest.java index 21dd654633af..5eeb04e5830d 100755 --- a/geode-core/src/test/java/com/gemstone/gemfire/distributed/ServerLauncherRemoteJUnitTest.java +++ b/geode-core/src/test/java/com/gemstone/gemfire/distributed/ServerLauncherRemoteJUnitTest.java @@ -65,9 +65,6 @@ /** * Integration tests for launching a Server in a forked process. * - * @author Kirk Lund - * @author David Hoots - * @author John Blum * @see com.gemstone.gemfire.distributed.AbstractLauncher * @see com.gemstone.gemfire.distributed.ServerLauncher * @see com.gemstone.gemfire.distributed.ServerLauncher.Builder diff --git a/geode-core/src/test/java/com/gemstone/gemfire/distributed/ServerLauncherWithSpringJUnitTest.java b/geode-core/src/test/java/com/gemstone/gemfire/distributed/ServerLauncherWithSpringJUnitTest.java index bf82af8268f0..7a5415e93737 100644 --- a/geode-core/src/test/java/com/gemstone/gemfire/distributed/ServerLauncherWithSpringJUnitTest.java +++ b/geode-core/src/test/java/com/gemstone/gemfire/distributed/ServerLauncherWithSpringJUnitTest.java @@ -38,8 +38,6 @@ /** * Extracted from ServerLauncherLocalJUnitTest. * - * @author John Blum - * @author Kirk Lund */ @Category(IntegrationTest.class) public class ServerLauncherWithSpringJUnitTest extends AbstractServerLauncherJUnitTestCase { diff --git a/geode-core/src/test/java/com/gemstone/gemfire/distributed/internal/AtomicLongWithTerminalStateJUnitTest.java b/geode-core/src/test/java/com/gemstone/gemfire/distributed/internal/AtomicLongWithTerminalStateJUnitTest.java index 8f4ec0cafcb4..aca687444aa5 100644 --- a/geode-core/src/test/java/com/gemstone/gemfire/distributed/internal/AtomicLongWithTerminalStateJUnitTest.java +++ b/geode-core/src/test/java/com/gemstone/gemfire/distributed/internal/AtomicLongWithTerminalStateJUnitTest.java @@ -23,7 +23,6 @@ import junit.framework.TestCase; /** - * @author dsmith * */ @Category(UnitTest.class) diff --git a/geode-core/src/test/java/com/gemstone/gemfire/distributed/internal/DistributionAdvisorDUnitTest.java b/geode-core/src/test/java/com/gemstone/gemfire/distributed/internal/DistributionAdvisorDUnitTest.java index 8e238acd4d01..824713699958 100644 --- a/geode-core/src/test/java/com/gemstone/gemfire/distributed/internal/DistributionAdvisorDUnitTest.java +++ b/geode-core/src/test/java/com/gemstone/gemfire/distributed/internal/DistributionAdvisorDUnitTest.java @@ -30,7 +30,6 @@ /** * - * @author Eric Zoerner * */ public class DistributionAdvisorDUnitTest extends DistributedTestCase { diff --git a/geode-core/src/test/java/com/gemstone/gemfire/distributed/internal/InternalDistributedSystemJUnitTest.java b/geode-core/src/test/java/com/gemstone/gemfire/distributed/internal/InternalDistributedSystemJUnitTest.java index 61bfd2f27826..2024bf211f63 100644 --- a/geode-core/src/test/java/com/gemstone/gemfire/distributed/internal/InternalDistributedSystemJUnitTest.java +++ b/geode-core/src/test/java/com/gemstone/gemfire/distributed/internal/InternalDistributedSystemJUnitTest.java @@ -52,7 +52,6 @@ * Tests the functionality of the {@link InternalDistributedSystem} * class. Mostly checks configuration error checking. * - * @author David Whitlock * * @since 2.1 */ diff --git a/geode-core/src/test/java/com/gemstone/gemfire/distributed/internal/LocatorLoadSnapshotJUnitTest.java b/geode-core/src/test/java/com/gemstone/gemfire/distributed/internal/LocatorLoadSnapshotJUnitTest.java index c1b7aff3ee6f..710550b35219 100644 --- a/geode-core/src/test/java/com/gemstone/gemfire/distributed/internal/LocatorLoadSnapshotJUnitTest.java +++ b/geode-core/src/test/java/com/gemstone/gemfire/distributed/internal/LocatorLoadSnapshotJUnitTest.java @@ -38,7 +38,6 @@ * is the data structure that is used in the locator to compare * the load between multiple servers. * - * @author dsmith */ @Category(UnitTest.class) public class LocatorLoadSnapshotJUnitTest { diff --git a/geode-core/src/test/java/com/gemstone/gemfire/distributed/internal/ServerLocatorJUnitTest.java b/geode-core/src/test/java/com/gemstone/gemfire/distributed/internal/ServerLocatorJUnitTest.java index f441bd83c6db..7690c870786c 100644 --- a/geode-core/src/test/java/com/gemstone/gemfire/distributed/internal/ServerLocatorJUnitTest.java +++ b/geode-core/src/test/java/com/gemstone/gemfire/distributed/internal/ServerLocatorJUnitTest.java @@ -34,7 +34,6 @@ * The ServerLocatorJUnitTest class is a test suite of test cases testing the contract and functionality of the * ServerLocator class. *

    - * @author John Blum * @see com.gemstone.gemfire.distributed.internal.ServerLocator * @see org.junit.Assert * @see org.junit.Test diff --git a/geode-core/src/test/java/com/gemstone/gemfire/distributed/internal/SharedConfigurationJUnitTest.java b/geode-core/src/test/java/com/gemstone/gemfire/distributed/internal/SharedConfigurationJUnitTest.java index c0246d861b42..963f7ce55189 100644 --- a/geode-core/src/test/java/com/gemstone/gemfire/distributed/internal/SharedConfigurationJUnitTest.java +++ b/geode-core/src/test/java/com/gemstone/gemfire/distributed/internal/SharedConfigurationJUnitTest.java @@ -32,7 +32,6 @@ /** * Unit tests for {@link SharedConfiguration}. * - * @author jbarrett@pivotal.io * * @since 8.1 */ diff --git a/geode-core/src/test/java/com/gemstone/gemfire/distributed/internal/StartupMessageDataJUnitTest.java b/geode-core/src/test/java/com/gemstone/gemfire/distributed/internal/StartupMessageDataJUnitTest.java index 07fcb6355890..aa0a88e16d82 100755 --- a/geode-core/src/test/java/com/gemstone/gemfire/distributed/internal/StartupMessageDataJUnitTest.java +++ b/geode-core/src/test/java/com/gemstone/gemfire/distributed/internal/StartupMessageDataJUnitTest.java @@ -38,7 +38,6 @@ /** * Tests {@link StartupMessageData}. * - * @author Kirk Lund * @since 7.0 */ @Category(UnitTest.class) diff --git a/geode-core/src/test/java/com/gemstone/gemfire/distributed/internal/deadlock/DeadlockDetectorJUnitTest.java b/geode-core/src/test/java/com/gemstone/gemfire/distributed/internal/deadlock/DeadlockDetectorJUnitTest.java index d9f5dd54ee5b..d27aa2cbe19c 100644 --- a/geode-core/src/test/java/com/gemstone/gemfire/distributed/internal/deadlock/DeadlockDetectorJUnitTest.java +++ b/geode-core/src/test/java/com/gemstone/gemfire/distributed/internal/deadlock/DeadlockDetectorJUnitTest.java @@ -39,7 +39,6 @@ import com.gemstone.gemfire.test.junit.categories.UnitTest; /** - * @author dsmith * */ @Category(UnitTest.class) @@ -301,7 +300,6 @@ public void run() { /** * A fake dependency monitor. - * @author dsmith * */ private static class MockDependencyMonitor implements DependencyMonitor { diff --git a/geode-core/src/test/java/com/gemstone/gemfire/distributed/internal/deadlock/DependencyGraphJUnitTest.java b/geode-core/src/test/java/com/gemstone/gemfire/distributed/internal/deadlock/DependencyGraphJUnitTest.java index 282214ffadac..b93ea096280e 100644 --- a/geode-core/src/test/java/com/gemstone/gemfire/distributed/internal/deadlock/DependencyGraphJUnitTest.java +++ b/geode-core/src/test/java/com/gemstone/gemfire/distributed/internal/deadlock/DependencyGraphJUnitTest.java @@ -26,7 +26,6 @@ import junit.framework.TestCase; /** - * @author dsmith * */ @Category(UnitTest.class) diff --git a/geode-core/src/test/java/com/gemstone/gemfire/distributed/internal/deadlock/GemFireDeadlockDetectorDUnitTest.java b/geode-core/src/test/java/com/gemstone/gemfire/distributed/internal/deadlock/GemFireDeadlockDetectorDUnitTest.java index bc3bee6af1ed..603533c182a6 100644 --- a/geode-core/src/test/java/com/gemstone/gemfire/distributed/internal/deadlock/GemFireDeadlockDetectorDUnitTest.java +++ b/geode-core/src/test/java/com/gemstone/gemfire/distributed/internal/deadlock/GemFireDeadlockDetectorDUnitTest.java @@ -43,7 +43,6 @@ import com.gemstone.gemfire.test.dunit.VM; /** - * @author dsmith * */ public class GemFireDeadlockDetectorDUnitTest extends CacheTestCase { diff --git a/geode-core/src/test/java/com/gemstone/gemfire/distributed/internal/deadlock/UnsafeThreadLocalJUnitTest.java b/geode-core/src/test/java/com/gemstone/gemfire/distributed/internal/deadlock/UnsafeThreadLocalJUnitTest.java index 442106df0fd8..7c7a7fc1fda5 100644 --- a/geode-core/src/test/java/com/gemstone/gemfire/distributed/internal/deadlock/UnsafeThreadLocalJUnitTest.java +++ b/geode-core/src/test/java/com/gemstone/gemfire/distributed/internal/deadlock/UnsafeThreadLocalJUnitTest.java @@ -25,7 +25,6 @@ import junit.framework.TestCase; /** - * @author dsmith * */ @Category(UnitTest.class) diff --git a/geode-core/src/test/java/com/gemstone/gemfire/distributed/internal/locks/CollaborationJUnitTest.java b/geode-core/src/test/java/com/gemstone/gemfire/distributed/internal/locks/CollaborationJUnitTest.java index 6985044fd490..ee79e1efd2e1 100755 --- a/geode-core/src/test/java/com/gemstone/gemfire/distributed/internal/locks/CollaborationJUnitTest.java +++ b/geode-core/src/test/java/com/gemstone/gemfire/distributed/internal/locks/CollaborationJUnitTest.java @@ -39,7 +39,6 @@ /** * Tests the Collaboration Lock used internally by dlock service. * - * @author Kirk Lund * @since 4.1.1 */ @Category(IntegrationTest.class) diff --git a/geode-core/src/test/java/com/gemstone/gemfire/distributed/internal/locks/DLockGrantorHelper.java b/geode-core/src/test/java/com/gemstone/gemfire/distributed/internal/locks/DLockGrantorHelper.java index a07edcf0a537..2ab6dd6285da 100755 --- a/geode-core/src/test/java/com/gemstone/gemfire/distributed/internal/locks/DLockGrantorHelper.java +++ b/geode-core/src/test/java/com/gemstone/gemfire/distributed/internal/locks/DLockGrantorHelper.java @@ -23,7 +23,6 @@ * DLockGrantorHelper provides testing operations that are not normally * exposed in the DLockGrantor. * - * @author Kirk Lund * @since 5.0 */ public class DLockGrantorHelper { diff --git a/geode-core/src/test/java/com/gemstone/gemfire/distributed/internal/membership/gms/MembershipManagerHelper.java b/geode-core/src/test/java/com/gemstone/gemfire/distributed/internal/membership/gms/MembershipManagerHelper.java index e44d7612ca7c..a433a4a98b46 100644 --- a/geode-core/src/test/java/com/gemstone/gemfire/distributed/internal/membership/gms/MembershipManagerHelper.java +++ b/geode-core/src/test/java/com/gemstone/gemfire/distributed/internal/membership/gms/MembershipManagerHelper.java @@ -32,7 +32,6 @@ /** * This helper class provides access to membership manager information that * is not otherwise public - * @author bruce * @since 5.5 */ public class MembershipManagerHelper diff --git a/geode-core/src/test/java/com/gemstone/gemfire/distributed/internal/tcpserver/TcpServerBackwardCompatDUnitTest.java b/geode-core/src/test/java/com/gemstone/gemfire/distributed/internal/tcpserver/TcpServerBackwardCompatDUnitTest.java index a66367b6c898..e524e516118f 100644 --- a/geode-core/src/test/java/com/gemstone/gemfire/distributed/internal/tcpserver/TcpServerBackwardCompatDUnitTest.java +++ b/geode-core/src/test/java/com/gemstone/gemfire/distributed/internal/tcpserver/TcpServerBackwardCompatDUnitTest.java @@ -47,7 +47,6 @@ * This tests the rolling upgrade for locators with * different GOSSIPVERSION. * - * @author shobhit * */ @Category(DistributedTest.class) diff --git a/geode-core/src/test/java/com/gemstone/gemfire/distributed/support/DistributedSystemAdapter.java b/geode-core/src/test/java/com/gemstone/gemfire/distributed/support/DistributedSystemAdapter.java index a7e52603b8b0..d0937e5dac4f 100644 --- a/geode-core/src/test/java/com/gemstone/gemfire/distributed/support/DistributedSystemAdapter.java +++ b/geode-core/src/test/java/com/gemstone/gemfire/distributed/support/DistributedSystemAdapter.java @@ -35,7 +35,6 @@ * The DistributedSystemAdapter class is an adapter extending DistributedSystem to provide default behavior for the * abstract methods when testing. *

    - * @author John Blum * @see com.gemstone.gemfire.distributed.DistributedSystem * @since 8.0 */ diff --git a/geode-core/src/test/java/com/gemstone/gemfire/disttx/DistTXDistributedTestSuite.java b/geode-core/src/test/java/com/gemstone/gemfire/disttx/DistTXDistributedTestSuite.java index 3b829c1fc83b..bc73eaf370c3 100644 --- a/geode-core/src/test/java/com/gemstone/gemfire/disttx/DistTXDistributedTestSuite.java +++ b/geode-core/src/test/java/com/gemstone/gemfire/disttx/DistTXDistributedTestSuite.java @@ -35,7 +35,6 @@ /** * Suite of tests for distributed transactions dunit tests - * @author shirishd */ public class DistTXDistributedTestSuite { diff --git a/geode-core/src/test/java/com/gemstone/gemfire/disttx/DistributedTransactionDUnitTest.java b/geode-core/src/test/java/com/gemstone/gemfire/disttx/DistributedTransactionDUnitTest.java index ab8fad47e899..ecaefce9cdfa 100644 --- a/geode-core/src/test/java/com/gemstone/gemfire/disttx/DistributedTransactionDUnitTest.java +++ b/geode-core/src/test/java/com/gemstone/gemfire/disttx/DistributedTransactionDUnitTest.java @@ -67,7 +67,6 @@ /** * Port of GemFireXD's corresponding test for distributed transactions * - * @author sjigyasu * */ @SuppressWarnings("deprecation") diff --git a/geode-core/src/test/java/com/gemstone/gemfire/internal/AvailablePortJUnitTest.java b/geode-core/src/test/java/com/gemstone/gemfire/internal/AvailablePortJUnitTest.java index 103e46563730..25184dec0829 100644 --- a/geode-core/src/test/java/com/gemstone/gemfire/internal/AvailablePortJUnitTest.java +++ b/geode-core/src/test/java/com/gemstone/gemfire/internal/AvailablePortJUnitTest.java @@ -33,8 +33,6 @@ import org.junit.experimental.categories.Category; /** - * @author dsmith - * @author klund */ @Category(UnitTest.class) public class AvailablePortJUnitTest { diff --git a/geode-core/src/test/java/com/gemstone/gemfire/internal/BackwardCompatibilitySerializationDUnitTest.java b/geode-core/src/test/java/com/gemstone/gemfire/internal/BackwardCompatibilitySerializationDUnitTest.java index f1e5dda1f296..a205e84a0a44 100755 --- a/geode-core/src/test/java/com/gemstone/gemfire/internal/BackwardCompatibilitySerializationDUnitTest.java +++ b/geode-core/src/test/java/com/gemstone/gemfire/internal/BackwardCompatibilitySerializationDUnitTest.java @@ -39,7 +39,6 @@ /** * Test the DSFID serialization framework added for rolling upgrades in 7.1 * - * @author tnomulwar * * */ diff --git a/geode-core/src/test/java/com/gemstone/gemfire/internal/ByteArrayData.java b/geode-core/src/test/java/com/gemstone/gemfire/internal/ByteArrayData.java index 76a41dee84eb..e043978e2c6d 100755 --- a/geode-core/src/test/java/com/gemstone/gemfire/internal/ByteArrayData.java +++ b/geode-core/src/test/java/com/gemstone/gemfire/internal/ByteArrayData.java @@ -29,7 +29,6 @@ * {@link #getDataOutput()} to get DataInput or DataOutput as needed for * testing. * - * @author Kirk Lund * @since 7.0 */ public class ByteArrayData { diff --git a/geode-core/src/test/java/com/gemstone/gemfire/internal/ClassBuilder.java b/geode-core/src/test/java/com/gemstone/gemfire/internal/ClassBuilder.java index 6854d3be65fe..118ad86a316c 100644 --- a/geode-core/src/test/java/com/gemstone/gemfire/internal/ClassBuilder.java +++ b/geode-core/src/test/java/com/gemstone/gemfire/internal/ClassBuilder.java @@ -40,7 +40,6 @@ /** * Test framework utility class to programatically create classes, JARs and ClassLoaders that include the classes. * - * @author David Hoots * @since 7.0 */ public class ClassBuilder implements Serializable { diff --git a/geode-core/src/test/java/com/gemstone/gemfire/internal/ClassNotFoundExceptionDUnitTest.java b/geode-core/src/test/java/com/gemstone/gemfire/internal/ClassNotFoundExceptionDUnitTest.java index 8ab0b2c0682f..b61be01a61ad 100644 --- a/geode-core/src/test/java/com/gemstone/gemfire/internal/ClassNotFoundExceptionDUnitTest.java +++ b/geode-core/src/test/java/com/gemstone/gemfire/internal/ClassNotFoundExceptionDUnitTest.java @@ -46,7 +46,6 @@ import com.gemstone.gemfire.test.dunit.VM; /** - * @author dsmith * */ public class ClassNotFoundExceptionDUnitTest extends CacheTestCase { diff --git a/geode-core/src/test/java/com/gemstone/gemfire/internal/ClassPathLoaderJUnitTest.java b/geode-core/src/test/java/com/gemstone/gemfire/internal/ClassPathLoaderJUnitTest.java index 3af4acf6e3bd..2a1db5294116 100755 --- a/geode-core/src/test/java/com/gemstone/gemfire/internal/ClassPathLoaderJUnitTest.java +++ b/geode-core/src/test/java/com/gemstone/gemfire/internal/ClassPathLoaderJUnitTest.java @@ -40,7 +40,6 @@ /** * Test the {@link ClassPathLoader}. * - * @author Kirk Lund * @since 6.5.1.4 */ @Category(UnitTest.class) diff --git a/geode-core/src/test/java/com/gemstone/gemfire/internal/CopyOnWriteHashSetJUnitTest.java b/geode-core/src/test/java/com/gemstone/gemfire/internal/CopyOnWriteHashSetJUnitTest.java index 0b6804ff74aa..09df931142d7 100644 --- a/geode-core/src/test/java/com/gemstone/gemfire/internal/CopyOnWriteHashSetJUnitTest.java +++ b/geode-core/src/test/java/com/gemstone/gemfire/internal/CopyOnWriteHashSetJUnitTest.java @@ -32,7 +32,6 @@ import junit.framework.TestCase; /** - * @author dsmith * */ @Category(UnitTest.class) diff --git a/geode-core/src/test/java/com/gemstone/gemfire/internal/DataSerializableJUnitTest.java b/geode-core/src/test/java/com/gemstone/gemfire/internal/DataSerializableJUnitTest.java index 1a8597a5cdee..f1574bc2b11b 100644 --- a/geode-core/src/test/java/com/gemstone/gemfire/internal/DataSerializableJUnitTest.java +++ b/geode-core/src/test/java/com/gemstone/gemfire/internal/DataSerializableJUnitTest.java @@ -43,7 +43,6 @@ /** * Tests the functionality of the {@link DataSerializable} class. * - * @author David Whitlock * @since 3.0 */ @Category(UnitTest.class) diff --git a/geode-core/src/test/java/com/gemstone/gemfire/internal/FileUtilJUnitTest.java b/geode-core/src/test/java/com/gemstone/gemfire/internal/FileUtilJUnitTest.java index 2c9b0c81e379..38995e511568 100644 --- a/geode-core/src/test/java/com/gemstone/gemfire/internal/FileUtilJUnitTest.java +++ b/geode-core/src/test/java/com/gemstone/gemfire/internal/FileUtilJUnitTest.java @@ -33,7 +33,6 @@ import com.gemstone.gemfire.test.junit.categories.UnitTest; /** - * @author dsmith * */ @Category(UnitTest.class) diff --git a/geode-core/src/test/java/com/gemstone/gemfire/internal/GemFireStatSamplerJUnitTest.java b/geode-core/src/test/java/com/gemstone/gemfire/internal/GemFireStatSamplerJUnitTest.java index 457a8383bce6..eadf942fd46a 100644 --- a/geode-core/src/test/java/com/gemstone/gemfire/internal/GemFireStatSamplerJUnitTest.java +++ b/geode-core/src/test/java/com/gemstone/gemfire/internal/GemFireStatSamplerJUnitTest.java @@ -54,7 +54,6 @@ /** * Integration tests for GemFireStatSampler. * - * @author Kirk Lund * @since 7.0 */ @Category(IntegrationTest.class) diff --git a/geode-core/src/test/java/com/gemstone/gemfire/internal/JarDeployerDUnitTest.java b/geode-core/src/test/java/com/gemstone/gemfire/internal/JarDeployerDUnitTest.java index 5895a7df954d..7ccc748a28dd 100644 --- a/geode-core/src/test/java/com/gemstone/gemfire/internal/JarDeployerDUnitTest.java +++ b/geode-core/src/test/java/com/gemstone/gemfire/internal/JarDeployerDUnitTest.java @@ -53,7 +53,6 @@ /** * Unit tests for the JarDeployer class * - * @author David Hoots * @since 7.0 */ public class JarDeployerDUnitTest extends CacheTestCase { diff --git a/geode-core/src/test/java/com/gemstone/gemfire/internal/JavaExec.java b/geode-core/src/test/java/com/gemstone/gemfire/internal/JavaExec.java index 27d789942e99..2e0c79103163 100644 --- a/geode-core/src/test/java/com/gemstone/gemfire/internal/JavaExec.java +++ b/geode-core/src/test/java/com/gemstone/gemfire/internal/JavaExec.java @@ -22,7 +22,6 @@ /** * Used to exec a java main class in its own vm * - * @author darrel * */ public class JavaExec { diff --git a/geode-core/src/test/java/com/gemstone/gemfire/internal/LineWrapUnitJUnitTest.java b/geode-core/src/test/java/com/gemstone/gemfire/internal/LineWrapUnitJUnitTest.java index 376ab15ef6ac..93d55dcea515 100644 --- a/geode-core/src/test/java/com/gemstone/gemfire/internal/LineWrapUnitJUnitTest.java +++ b/geode-core/src/test/java/com/gemstone/gemfire/internal/LineWrapUnitJUnitTest.java @@ -26,7 +26,6 @@ import junit.framework.TestCase; /** - * @author dsmith * */ @Category(UnitTest.class) diff --git a/geode-core/src/test/java/com/gemstone/gemfire/internal/NanoTimerJUnitTest.java b/geode-core/src/test/java/com/gemstone/gemfire/internal/NanoTimerJUnitTest.java index e37fb1dea3f8..6ecd9f291907 100755 --- a/geode-core/src/test/java/com/gemstone/gemfire/internal/NanoTimerJUnitTest.java +++ b/geode-core/src/test/java/com/gemstone/gemfire/internal/NanoTimerJUnitTest.java @@ -28,7 +28,6 @@ /** * Unit tests for NanoTimer. * - * @author Kirk Lund * @since 7.0 */ @Category(UnitTest.class) diff --git a/geode-core/src/test/java/com/gemstone/gemfire/internal/OneTaskOnlyDecoratorJUnitTest.java b/geode-core/src/test/java/com/gemstone/gemfire/internal/OneTaskOnlyDecoratorJUnitTest.java index 5c80f111dc55..dc71a8531f06 100644 --- a/geode-core/src/test/java/com/gemstone/gemfire/internal/OneTaskOnlyDecoratorJUnitTest.java +++ b/geode-core/src/test/java/com/gemstone/gemfire/internal/OneTaskOnlyDecoratorJUnitTest.java @@ -30,7 +30,6 @@ import junit.framework.TestCase; /** - * @author dsmith * */ @SuppressWarnings("synthetic-access") diff --git a/geode-core/src/test/java/com/gemstone/gemfire/internal/ScheduledThreadPoolExecutorWithKeepAliveJUnitTest.java b/geode-core/src/test/java/com/gemstone/gemfire/internal/ScheduledThreadPoolExecutorWithKeepAliveJUnitTest.java index 2b3543b0c791..2ed0152873a9 100644 --- a/geode-core/src/test/java/com/gemstone/gemfire/internal/ScheduledThreadPoolExecutorWithKeepAliveJUnitTest.java +++ b/geode-core/src/test/java/com/gemstone/gemfire/internal/ScheduledThreadPoolExecutorWithKeepAliveJUnitTest.java @@ -37,7 +37,6 @@ import com.gemstone.gemfire.test.junit.categories.IntegrationTest; /** - * @author dsmith * */ @Category(IntegrationTest.class) diff --git a/geode-core/src/test/java/com/gemstone/gemfire/internal/SimpleStatSamplerJUnitTest.java b/geode-core/src/test/java/com/gemstone/gemfire/internal/SimpleStatSamplerJUnitTest.java index 1b17141ae6a7..2f618473d39c 100755 --- a/geode-core/src/test/java/com/gemstone/gemfire/internal/SimpleStatSamplerJUnitTest.java +++ b/geode-core/src/test/java/com/gemstone/gemfire/internal/SimpleStatSamplerJUnitTest.java @@ -39,7 +39,6 @@ /** * Integration tests for SimpleStatSampler. * - * @author Kirk Lund * @since 7.0 */ @Category(IntegrationTest.class) diff --git a/geode-core/src/test/java/com/gemstone/gemfire/internal/StatArchiveWriterReaderJUnitTest.java b/geode-core/src/test/java/com/gemstone/gemfire/internal/StatArchiveWriterReaderJUnitTest.java index 6e908cc67ead..f2d4bea98a56 100755 --- a/geode-core/src/test/java/com/gemstone/gemfire/internal/StatArchiveWriterReaderJUnitTest.java +++ b/geode-core/src/test/java/com/gemstone/gemfire/internal/StatArchiveWriterReaderJUnitTest.java @@ -62,7 +62,6 @@ * Integration tests for StatArchiveWriter and StatArchiveReader. The tests * are very redundant and desperately need refactoring. * - * @author Kirk Lund * @since 7.0 */ @Category(IntegrationTest.class) diff --git a/geode-core/src/test/java/com/gemstone/gemfire/internal/StatSamplerJUnitTest.java b/geode-core/src/test/java/com/gemstone/gemfire/internal/StatSamplerJUnitTest.java index 0dea951a36e6..b35c851aa543 100755 --- a/geode-core/src/test/java/com/gemstone/gemfire/internal/StatSamplerJUnitTest.java +++ b/geode-core/src/test/java/com/gemstone/gemfire/internal/StatSamplerJUnitTest.java @@ -42,7 +42,6 @@ import com.gemstone.gemfire.test.junit.categories.UnitTest; /** - * @author Kirk Lund * @since 7.0 */ @Category(UnitTest.class) diff --git a/geode-core/src/test/java/com/gemstone/gemfire/internal/StatSamplerTestCase.java b/geode-core/src/test/java/com/gemstone/gemfire/internal/StatSamplerTestCase.java index f0f89f21dc7b..f98106310b74 100755 --- a/geode-core/src/test/java/com/gemstone/gemfire/internal/StatSamplerTestCase.java +++ b/geode-core/src/test/java/com/gemstone/gemfire/internal/StatSamplerTestCase.java @@ -35,7 +35,6 @@ /** * Integration TestCase for StatSampler. * - * @author Kirk Lund * @since 7.0 */ public abstract class StatSamplerTestCase { diff --git a/geode-core/src/test/java/com/gemstone/gemfire/internal/UniqueIdGeneratorJUnitTest.java b/geode-core/src/test/java/com/gemstone/gemfire/internal/UniqueIdGeneratorJUnitTest.java index b2ec0ee45f69..16bf32c6278e 100644 --- a/geode-core/src/test/java/com/gemstone/gemfire/internal/UniqueIdGeneratorJUnitTest.java +++ b/geode-core/src/test/java/com/gemstone/gemfire/internal/UniqueIdGeneratorJUnitTest.java @@ -25,7 +25,6 @@ /** * Tests UniqueIdGenerator. - * @author Darrel * @since 5.0.2 (cbb5x_PerfScale) */ @Category(UnitTest.class) diff --git a/geode-core/src/test/java/com/gemstone/gemfire/internal/cache/AbstractRegionJUnitTest.java b/geode-core/src/test/java/com/gemstone/gemfire/internal/cache/AbstractRegionJUnitTest.java index 128dc93983a8..ca486cd6dde0 100644 --- a/geode-core/src/test/java/com/gemstone/gemfire/internal/cache/AbstractRegionJUnitTest.java +++ b/geode-core/src/test/java/com/gemstone/gemfire/internal/cache/AbstractRegionJUnitTest.java @@ -55,7 +55,6 @@ /** * Unit tests for {@link AbstractRegion}. * - * @author jbarrett@pivotal.io * * @since 8.1 */ diff --git a/geode-core/src/test/java/com/gemstone/gemfire/internal/cache/BackupDUnitTest.java b/geode-core/src/test/java/com/gemstone/gemfire/internal/cache/BackupDUnitTest.java index 3ad768e3ad06..9b270c50da7f 100755 --- a/geode-core/src/test/java/com/gemstone/gemfire/internal/cache/BackupDUnitTest.java +++ b/geode-core/src/test/java/com/gemstone/gemfire/internal/cache/BackupDUnitTest.java @@ -66,7 +66,6 @@ import com.gemstone.gemfire.test.dunit.VM; /** - * @author dsmith * */ public class BackupDUnitTest extends PersistentPartitionedRegionTestBase { diff --git a/geode-core/src/test/java/com/gemstone/gemfire/internal/cache/BackupJUnitTest.java b/geode-core/src/test/java/com/gemstone/gemfire/internal/cache/BackupJUnitTest.java index 31f594769310..a95315501547 100644 --- a/geode-core/src/test/java/com/gemstone/gemfire/internal/cache/BackupJUnitTest.java +++ b/geode-core/src/test/java/com/gemstone/gemfire/internal/cache/BackupJUnitTest.java @@ -55,7 +55,6 @@ import com.gemstone.gemfire.test.junit.categories.IntegrationTest; /** - * @author dsmith * */ @Category(IntegrationTest.class) diff --git a/geode-core/src/test/java/com/gemstone/gemfire/internal/cache/Bug33359DUnitTest.java b/geode-core/src/test/java/com/gemstone/gemfire/internal/cache/Bug33359DUnitTest.java index df09027641f3..51f53556ed1a 100644 --- a/geode-core/src/test/java/com/gemstone/gemfire/internal/cache/Bug33359DUnitTest.java +++ b/geode-core/src/test/java/com/gemstone/gemfire/internal/cache/Bug33359DUnitTest.java @@ -41,7 +41,6 @@ /** * - * @author vjadhav */ public class Bug33359DUnitTest extends DistributedTestCase { diff --git a/geode-core/src/test/java/com/gemstone/gemfire/internal/cache/Bug34583JUnitTest.java b/geode-core/src/test/java/com/gemstone/gemfire/internal/cache/Bug34583JUnitTest.java index d618cabd6676..7f3081a4d7cf 100644 --- a/geode-core/src/test/java/com/gemstone/gemfire/internal/cache/Bug34583JUnitTest.java +++ b/geode-core/src/test/java/com/gemstone/gemfire/internal/cache/Bug34583JUnitTest.java @@ -36,7 +36,6 @@ /** * Confirm that bug 34583 is fixed. Cause of bug is recursion is * entries iterator that causes stack overflow. - * @author darrel */ @Category(IntegrationTest.class) public class Bug34583JUnitTest { diff --git a/geode-core/src/test/java/com/gemstone/gemfire/internal/cache/Bug37244JUnitTest.java b/geode-core/src/test/java/com/gemstone/gemfire/internal/cache/Bug37244JUnitTest.java index cedda478740c..d6b6e2e314e9 100644 --- a/geode-core/src/test/java/com/gemstone/gemfire/internal/cache/Bug37244JUnitTest.java +++ b/geode-core/src/test/java/com/gemstone/gemfire/internal/cache/Bug37244JUnitTest.java @@ -46,7 +46,6 @@ /** * Test for simluating the deadLock condition as in bug#37244 * - * @author pbatra * */ @Category(IntegrationTest.class) @@ -151,8 +150,6 @@ public void testPutWhileclear() * Test Implementation class of NewLRUClockHand for bug37244. * * - * @author pbatra - * @author pallavis * */ diff --git a/geode-core/src/test/java/com/gemstone/gemfire/internal/cache/Bug37377DUnitTest.java b/geode-core/src/test/java/com/gemstone/gemfire/internal/cache/Bug37377DUnitTest.java index 766ecd4f2a1f..b6ed32366250 100644 --- a/geode-core/src/test/java/com/gemstone/gemfire/internal/cache/Bug37377DUnitTest.java +++ b/geode-core/src/test/java/com/gemstone/gemfire/internal/cache/Bug37377DUnitTest.java @@ -46,7 +46,6 @@ * after the entry gets written to the disk, The Test verifies the existence of * the scenario. * - * @author pbatra */ public class Bug37377DUnitTest extends CacheTestCase diff --git a/geode-core/src/test/java/com/gemstone/gemfire/internal/cache/Bug37500JUnitTest.java b/geode-core/src/test/java/com/gemstone/gemfire/internal/cache/Bug37500JUnitTest.java index e1acb029f185..1a7cbfa27d82 100644 --- a/geode-core/src/test/java/com/gemstone/gemfire/internal/cache/Bug37500JUnitTest.java +++ b/geode-core/src/test/java/com/gemstone/gemfire/internal/cache/Bug37500JUnitTest.java @@ -33,8 +33,6 @@ /** * This is a bugtest for bug 37500. * - * @author Dinesh Patel - * @author Mitul Bid * */ @Category(IntegrationTest.class) diff --git a/geode-core/src/test/java/com/gemstone/gemfire/internal/cache/Bug39079DUnitTest.java b/geode-core/src/test/java/com/gemstone/gemfire/internal/cache/Bug39079DUnitTest.java index 81e603c091ae..2374b2891c0a 100644 --- a/geode-core/src/test/java/com/gemstone/gemfire/internal/cache/Bug39079DUnitTest.java +++ b/geode-core/src/test/java/com/gemstone/gemfire/internal/cache/Bug39079DUnitTest.java @@ -52,7 +52,6 @@ /** * Tests that if a node doing GII experiences DiskAccessException, it should * also not try to recover from the disk - * @author Asif * */ public class Bug39079DUnitTest extends CacheTestCase { diff --git a/geode-core/src/test/java/com/gemstone/gemfire/internal/cache/Bug40299DUnitTest.java b/geode-core/src/test/java/com/gemstone/gemfire/internal/cache/Bug40299DUnitTest.java index 60f9bd56a95a..4154642bdd06 100755 --- a/geode-core/src/test/java/com/gemstone/gemfire/internal/cache/Bug40299DUnitTest.java +++ b/geode-core/src/test/java/com/gemstone/gemfire/internal/cache/Bug40299DUnitTest.java @@ -51,7 +51,6 @@ * eventually destroy region. * The Test verifies that fix prevents this. * - * @author pallavis */ public class Bug40299DUnitTest extends CacheTestCase diff --git a/geode-core/src/test/java/com/gemstone/gemfire/internal/cache/Bug40632DUnitTest.java b/geode-core/src/test/java/com/gemstone/gemfire/internal/cache/Bug40632DUnitTest.java index 9443c9addf64..80d5ce420896 100644 --- a/geode-core/src/test/java/com/gemstone/gemfire/internal/cache/Bug40632DUnitTest.java +++ b/geode-core/src/test/java/com/gemstone/gemfire/internal/cache/Bug40632DUnitTest.java @@ -58,7 +58,6 @@ import com.gemstone.gemfire.test.dunit.VM; /** - * @author dsmith * */ public class Bug40632DUnitTest extends CacheTestCase { diff --git a/geode-core/src/test/java/com/gemstone/gemfire/internal/cache/Bug41091DUnitTest.java b/geode-core/src/test/java/com/gemstone/gemfire/internal/cache/Bug41091DUnitTest.java index a03f035e2cab..f52890a289e9 100644 --- a/geode-core/src/test/java/com/gemstone/gemfire/internal/cache/Bug41091DUnitTest.java +++ b/geode-core/src/test/java/com/gemstone/gemfire/internal/cache/Bug41091DUnitTest.java @@ -45,7 +45,6 @@ * * This class tests that bucket regions can handle * a failure of the GII target during GII. - * @author dsmith * */ public class Bug41091DUnitTest extends CacheTestCase { diff --git a/geode-core/src/test/java/com/gemstone/gemfire/internal/cache/Bug41733DUnitTest.java b/geode-core/src/test/java/com/gemstone/gemfire/internal/cache/Bug41733DUnitTest.java index cbd503f15536..5983ba80d44e 100644 --- a/geode-core/src/test/java/com/gemstone/gemfire/internal/cache/Bug41733DUnitTest.java +++ b/geode-core/src/test/java/com/gemstone/gemfire/internal/cache/Bug41733DUnitTest.java @@ -43,7 +43,6 @@ import com.gemstone.gemfire.test.dunit.VM; /** - * @author dsmith * * Test to make sure that we can handle * a crash of the member directing bucket creation. diff --git a/geode-core/src/test/java/com/gemstone/gemfire/internal/cache/Bug41957DUnitTest.java b/geode-core/src/test/java/com/gemstone/gemfire/internal/cache/Bug41957DUnitTest.java index a16a9c324540..f60eac55ec80 100644 --- a/geode-core/src/test/java/com/gemstone/gemfire/internal/cache/Bug41957DUnitTest.java +++ b/geode-core/src/test/java/com/gemstone/gemfire/internal/cache/Bug41957DUnitTest.java @@ -46,7 +46,6 @@ * do a register interest with key&values and see if we end up with more entries * in the client than the eviction limit. * - * @author darrel * @since 6.5 */ public class Bug41957DUnitTest extends ClientServerTestCase { diff --git a/geode-core/src/test/java/com/gemstone/gemfire/internal/cache/Bug42055DUnitTest.java b/geode-core/src/test/java/com/gemstone/gemfire/internal/cache/Bug42055DUnitTest.java index 6871acfa3f3e..c68c5eb9715e 100644 --- a/geode-core/src/test/java/com/gemstone/gemfire/internal/cache/Bug42055DUnitTest.java +++ b/geode-core/src/test/java/com/gemstone/gemfire/internal/cache/Bug42055DUnitTest.java @@ -33,7 +33,6 @@ /** * Test that the bucket size does not go negative when * we fault out and in a delta object. - * @author dsmith * */ public class Bug42055DUnitTest extends CacheTestCase { diff --git a/geode-core/src/test/java/com/gemstone/gemfire/internal/cache/Bug48182JUnitTest.java b/geode-core/src/test/java/com/gemstone/gemfire/internal/cache/Bug48182JUnitTest.java index fa22f9077daa..efac0bcd77da 100644 --- a/geode-core/src/test/java/com/gemstone/gemfire/internal/cache/Bug48182JUnitTest.java +++ b/geode-core/src/test/java/com/gemstone/gemfire/internal/cache/Bug48182JUnitTest.java @@ -37,7 +37,6 @@ * TestCase that emulates the conditions that produce defect 48182 and ensures that the fix works under those conditions. * 48182: Unexpected EntryNotFoundException while shutting down members with off-heap * https://svn.gemstone.com/trac/gemfire/ticket/48182 - * @author rholmes */ @Category(IntegrationTest.class) public class Bug48182JUnitTest { diff --git a/geode-core/src/test/java/com/gemstone/gemfire/internal/cache/CacheAdvisorDUnitTest.java b/geode-core/src/test/java/com/gemstone/gemfire/internal/cache/CacheAdvisorDUnitTest.java index eb64e93cb89a..0812081eb56d 100644 --- a/geode-core/src/test/java/com/gemstone/gemfire/internal/cache/CacheAdvisorDUnitTest.java +++ b/geode-core/src/test/java/com/gemstone/gemfire/internal/cache/CacheAdvisorDUnitTest.java @@ -46,7 +46,6 @@ /** * Tests the use of CacheDistributionAdvisor in createSubRegion * - * @author Eric Zoerner * */ public class CacheAdvisorDUnitTest extends CacheTestCase { diff --git a/geode-core/src/test/java/com/gemstone/gemfire/internal/cache/CacheLifecycleListenerJUnitTest.java b/geode-core/src/test/java/com/gemstone/gemfire/internal/cache/CacheLifecycleListenerJUnitTest.java index 2c4d09327546..f2a4a8d19999 100755 --- a/geode-core/src/test/java/com/gemstone/gemfire/internal/cache/CacheLifecycleListenerJUnitTest.java +++ b/geode-core/src/test/java/com/gemstone/gemfire/internal/cache/CacheLifecycleListenerJUnitTest.java @@ -36,7 +36,6 @@ /** * Tests notifications of CacheLifecycleListener from GemFireCacheImpl. * - * @author Kirk Lund */ @Category(IntegrationTest.class) public class CacheLifecycleListenerJUnitTest { diff --git a/geode-core/src/test/java/com/gemstone/gemfire/internal/cache/ClearDAckDUnitTest.java b/geode-core/src/test/java/com/gemstone/gemfire/internal/cache/ClearDAckDUnitTest.java index 7c8327e56d6c..f4473f7732f4 100644 --- a/geode-core/src/test/java/com/gemstone/gemfire/internal/cache/ClearDAckDUnitTest.java +++ b/geode-core/src/test/java/com/gemstone/gemfire/internal/cache/ClearDAckDUnitTest.java @@ -45,7 +45,6 @@ /** * - * @author vjadhav */ public class ClearDAckDUnitTest extends DistributedTestCase { diff --git a/geode-core/src/test/java/com/gemstone/gemfire/internal/cache/ClientMessagesRegionCreationAndDestroyJUnitTest.java b/geode-core/src/test/java/com/gemstone/gemfire/internal/cache/ClientMessagesRegionCreationAndDestroyJUnitTest.java index e1d20cf372ae..f0d00f5fed3b 100755 --- a/geode-core/src/test/java/com/gemstone/gemfire/internal/cache/ClientMessagesRegionCreationAndDestroyJUnitTest.java +++ b/geode-core/src/test/java/com/gemstone/gemfire/internal/cache/ClientMessagesRegionCreationAndDestroyJUnitTest.java @@ -44,7 +44,6 @@ * Test to verify that each bridge sever creates its own client_messages_region * at its start and destroys it when it stops. * - * @author aingle * @since 5.7 */ @Category(IntegrationTest.class) diff --git a/geode-core/src/test/java/com/gemstone/gemfire/internal/cache/ClientServerGetAllDUnitTest.java b/geode-core/src/test/java/com/gemstone/gemfire/internal/cache/ClientServerGetAllDUnitTest.java index f7f633cb78f5..16be9a219b99 100755 --- a/geode-core/src/test/java/com/gemstone/gemfire/internal/cache/ClientServerGetAllDUnitTest.java +++ b/geode-core/src/test/java/com/gemstone/gemfire/internal/cache/ClientServerGetAllDUnitTest.java @@ -51,7 +51,6 @@ /** * Class ClientServerGetAllDUnitTest test client/server getAll. * - * @author Barry Oglesby * @since 5.7 */ public class ClientServerGetAllDUnitTest extends ClientServerTestCase { diff --git a/geode-core/src/test/java/com/gemstone/gemfire/internal/cache/ClientServerInvalidAndDestroyedEntryDUnitTest.java b/geode-core/src/test/java/com/gemstone/gemfire/internal/cache/ClientServerInvalidAndDestroyedEntryDUnitTest.java index e5ec30130ee0..7760c10f4165 100755 --- a/geode-core/src/test/java/com/gemstone/gemfire/internal/cache/ClientServerInvalidAndDestroyedEntryDUnitTest.java +++ b/geode-core/src/test/java/com/gemstone/gemfire/internal/cache/ClientServerInvalidAndDestroyedEntryDUnitTest.java @@ -52,7 +52,6 @@ * also tests that tombstones are treated in a similar manner. The ticket * complains that a client that does a get(K) does not end up with the entry * in its cache if K is invalid on the server. - * @author bruces * */ public class ClientServerInvalidAndDestroyedEntryDUnitTest extends CacheTestCase { diff --git a/geode-core/src/test/java/com/gemstone/gemfire/internal/cache/ClientServerTransactionCCEDUnitTest.java b/geode-core/src/test/java/com/gemstone/gemfire/internal/cache/ClientServerTransactionCCEDUnitTest.java index 6f76fc8237a6..3ebee9b215a3 100644 --- a/geode-core/src/test/java/com/gemstone/gemfire/internal/cache/ClientServerTransactionCCEDUnitTest.java +++ b/geode-core/src/test/java/com/gemstone/gemfire/internal/cache/ClientServerTransactionCCEDUnitTest.java @@ -31,7 +31,6 @@ /** * test client initiated transactions with concurrency checks enabled. - * @author sbawaska */ public class ClientServerTransactionCCEDUnitTest extends ClientServerTransactionDUnitTest { diff --git a/geode-core/src/test/java/com/gemstone/gemfire/internal/cache/ClientServerTransactionDUnitTest.java b/geode-core/src/test/java/com/gemstone/gemfire/internal/cache/ClientServerTransactionDUnitTest.java index add43a0457ac..8836b2a87d37 100644 --- a/geode-core/src/test/java/com/gemstone/gemfire/internal/cache/ClientServerTransactionDUnitTest.java +++ b/geode-core/src/test/java/com/gemstone/gemfire/internal/cache/ClientServerTransactionDUnitTest.java @@ -98,7 +98,6 @@ /** * Tests the basic client-server transaction functionality - * @author sbawaska */ public class ClientServerTransactionDUnitTest extends RemoteTransactionDUnitTest { diff --git a/geode-core/src/test/java/com/gemstone/gemfire/internal/cache/ComplexDiskRegionJUnitTest.java b/geode-core/src/test/java/com/gemstone/gemfire/internal/cache/ComplexDiskRegionJUnitTest.java index 17f3b67ae610..bc33f3aede60 100755 --- a/geode-core/src/test/java/com/gemstone/gemfire/internal/cache/ComplexDiskRegionJUnitTest.java +++ b/geode-core/src/test/java/com/gemstone/gemfire/internal/cache/ComplexDiskRegionJUnitTest.java @@ -31,7 +31,6 @@ /** * Unit testing for ComplexDiskRegion API's * - * @author Mitul Bid * * */ diff --git a/geode-core/src/test/java/com/gemstone/gemfire/internal/cache/ConcurrentDestroySubRegionDUnitTest.java b/geode-core/src/test/java/com/gemstone/gemfire/internal/cache/ConcurrentDestroySubRegionDUnitTest.java index 2a7c0b5209a1..200becc7acb9 100644 --- a/geode-core/src/test/java/com/gemstone/gemfire/internal/cache/ConcurrentDestroySubRegionDUnitTest.java +++ b/geode-core/src/test/java/com/gemstone/gemfire/internal/cache/ConcurrentDestroySubRegionDUnitTest.java @@ -30,7 +30,6 @@ import com.gemstone.gemfire.test.dunit.VM; /** - * @author dsmith * */ public class ConcurrentDestroySubRegionDUnitTest extends CacheTestCase { diff --git a/geode-core/src/test/java/com/gemstone/gemfire/internal/cache/ConcurrentFlushingAndRegionOperationsJUnitTest.java b/geode-core/src/test/java/com/gemstone/gemfire/internal/cache/ConcurrentFlushingAndRegionOperationsJUnitTest.java index 3a359d8c545b..0cab6f973a76 100755 --- a/geode-core/src/test/java/com/gemstone/gemfire/internal/cache/ConcurrentFlushingAndRegionOperationsJUnitTest.java +++ b/geode-core/src/test/java/com/gemstone/gemfire/internal/cache/ConcurrentFlushingAndRegionOperationsJUnitTest.java @@ -37,8 +37,6 @@ * just been rolled and the region operation is verified to have been correctly * executed. * - * @author Mitul Bid - * @author Asif * */ @Category(IntegrationTest.class) diff --git a/geode-core/src/test/java/com/gemstone/gemfire/internal/cache/ConcurrentMapOpsDUnitTest.java b/geode-core/src/test/java/com/gemstone/gemfire/internal/cache/ConcurrentMapOpsDUnitTest.java index 44b89decd16c..da2cc9532a0a 100644 --- a/geode-core/src/test/java/com/gemstone/gemfire/internal/cache/ConcurrentMapOpsDUnitTest.java +++ b/geode-core/src/test/java/com/gemstone/gemfire/internal/cache/ConcurrentMapOpsDUnitTest.java @@ -60,7 +60,6 @@ /** * tests for the concurrentMapOperations. there are more tests in ClientServerMiscDUnitTest - * @author sbawaska * */ public class ConcurrentMapOpsDUnitTest extends CacheTestCase { diff --git a/geode-core/src/test/java/com/gemstone/gemfire/internal/cache/ConcurrentRegionOperationsJUnitTest.java b/geode-core/src/test/java/com/gemstone/gemfire/internal/cache/ConcurrentRegionOperationsJUnitTest.java index 833ef110a4b3..754fb34f97e9 100755 --- a/geode-core/src/test/java/com/gemstone/gemfire/internal/cache/ConcurrentRegionOperationsJUnitTest.java +++ b/geode-core/src/test/java/com/gemstone/gemfire/internal/cache/ConcurrentRegionOperationsJUnitTest.java @@ -61,7 +61,6 @@ * * This test is run for all modes persist, persist+overflow, overflow only in * syn and async mode. * - * @author Mitul Bid * */ @Category(IntegrationTest.class) @@ -335,7 +334,6 @@ public void testNVPersistAndOverflowAsyncSmallQueueConcurrency() * Tests the bug where a get operation on an evicted entry fails to get value * as the oplog is deleted by the roller, but the entry was not rolled. * - * @author Asif * */ @Test @@ -779,7 +777,6 @@ void clear() { * actually joined with the new thread ( different from the one on which * notification was issued to exit). * - * @author Asif * */ @Test diff --git a/geode-core/src/test/java/com/gemstone/gemfire/internal/cache/ConcurrentRollingAndRegionOperationsJUnitTest.java b/geode-core/src/test/java/com/gemstone/gemfire/internal/cache/ConcurrentRollingAndRegionOperationsJUnitTest.java index b95fa4eeb7bd..4a8210f05fc5 100755 --- a/geode-core/src/test/java/com/gemstone/gemfire/internal/cache/ConcurrentRollingAndRegionOperationsJUnitTest.java +++ b/geode-core/src/test/java/com/gemstone/gemfire/internal/cache/ConcurrentRollingAndRegionOperationsJUnitTest.java @@ -52,7 +52,6 @@ * just been rolled and the region operation is verified to have been correctly * executed. * - * @author Mitul Bid * */ @Category(IntegrationTest.class) @@ -784,7 +783,6 @@ public void afterHavingCompacted() * destroyed & the get operation sees the file length zero or it may encounter * null pointer exception while retrieving the oplog. * - * @author Asif * */ @Test diff --git a/geode-core/src/test/java/com/gemstone/gemfire/internal/cache/ConflationJUnitTest.java b/geode-core/src/test/java/com/gemstone/gemfire/internal/cache/ConflationJUnitTest.java index 3a4660c7da9c..d7493de4b127 100755 --- a/geode-core/src/test/java/com/gemstone/gemfire/internal/cache/ConflationJUnitTest.java +++ b/geode-core/src/test/java/com/gemstone/gemfire/internal/cache/ConflationJUnitTest.java @@ -48,7 +48,6 @@ * * The test is done for persist only, overflow only and persist + overflow only (async modes). * - * @author Mitul Bid * */ @Category(IntegrationTest.class) diff --git a/geode-core/src/test/java/com/gemstone/gemfire/internal/cache/DeltaFaultInDUnitTest.java b/geode-core/src/test/java/com/gemstone/gemfire/internal/cache/DeltaFaultInDUnitTest.java index 12de353121a7..a1fca4cab898 100644 --- a/geode-core/src/test/java/com/gemstone/gemfire/internal/cache/DeltaFaultInDUnitTest.java +++ b/geode-core/src/test/java/com/gemstone/gemfire/internal/cache/DeltaFaultInDUnitTest.java @@ -33,7 +33,6 @@ /** * Test that the bucket size does not go negative when * we fault out and in a delta object. - * @author dsmith * */ public class DeltaFaultInDUnitTest extends CacheTestCase { diff --git a/geode-core/src/test/java/com/gemstone/gemfire/internal/cache/DeltaPropagationStatsDUnitTest.java b/geode-core/src/test/java/com/gemstone/gemfire/internal/cache/DeltaPropagationStatsDUnitTest.java index f3831993de12..7d06bd2aca0d 100755 --- a/geode-core/src/test/java/com/gemstone/gemfire/internal/cache/DeltaPropagationStatsDUnitTest.java +++ b/geode-core/src/test/java/com/gemstone/gemfire/internal/cache/DeltaPropagationStatsDUnitTest.java @@ -50,7 +50,6 @@ import com.gemstone.gemfire.test.dunit.WaitCriterion; /** - * @author ashetkar * */ public class DeltaPropagationStatsDUnitTest extends DistributedTestCase { diff --git a/geode-core/src/test/java/com/gemstone/gemfire/internal/cache/DeltaSizingDUnitTest.java b/geode-core/src/test/java/com/gemstone/gemfire/internal/cache/DeltaSizingDUnitTest.java index 4de9daf04de7..94aeccd16b7c 100644 --- a/geode-core/src/test/java/com/gemstone/gemfire/internal/cache/DeltaSizingDUnitTest.java +++ b/geode-core/src/test/java/com/gemstone/gemfire/internal/cache/DeltaSizingDUnitTest.java @@ -37,7 +37,6 @@ import com.gemstone.gemfire.test.dunit.VM; /** - * @author dsmith * */ public class DeltaSizingDUnitTest extends CacheTestCase { diff --git a/geode-core/src/test/java/com/gemstone/gemfire/internal/cache/DiskIFJUnitTest.java b/geode-core/src/test/java/com/gemstone/gemfire/internal/cache/DiskIFJUnitTest.java index 78fc9113e0af..716b3064f5a9 100644 --- a/geode-core/src/test/java/com/gemstone/gemfire/internal/cache/DiskIFJUnitTest.java +++ b/geode-core/src/test/java/com/gemstone/gemfire/internal/cache/DiskIFJUnitTest.java @@ -39,7 +39,6 @@ /** * Tests DiskRegion's IF file. - * @author darrel * */ @Category(IntegrationTest.class) diff --git a/geode-core/src/test/java/com/gemstone/gemfire/internal/cache/DiskIdJUnitTest.java b/geode-core/src/test/java/com/gemstone/gemfire/internal/cache/DiskIdJUnitTest.java index 348c667924eb..14c25efb740a 100755 --- a/geode-core/src/test/java/com/gemstone/gemfire/internal/cache/DiskIdJUnitTest.java +++ b/geode-core/src/test/java/com/gemstone/gemfire/internal/cache/DiskIdJUnitTest.java @@ -26,7 +26,6 @@ * * Test verifies the setting and getting of disk id values are correctly * - * @author Mitul Bid * */ @Category(UnitTest.class) diff --git a/geode-core/src/test/java/com/gemstone/gemfire/internal/cache/DiskOfflineCompactionJUnitTest.java b/geode-core/src/test/java/com/gemstone/gemfire/internal/cache/DiskOfflineCompactionJUnitTest.java index 9334f1879943..4ab45440f151 100644 --- a/geode-core/src/test/java/com/gemstone/gemfire/internal/cache/DiskOfflineCompactionJUnitTest.java +++ b/geode-core/src/test/java/com/gemstone/gemfire/internal/cache/DiskOfflineCompactionJUnitTest.java @@ -52,7 +52,6 @@ /** * Tests offline compaction * - * @author darrel * */ @Category(IntegrationTest.class) diff --git a/geode-core/src/test/java/com/gemstone/gemfire/internal/cache/DiskOldAPIsJUnitTest.java b/geode-core/src/test/java/com/gemstone/gemfire/internal/cache/DiskOldAPIsJUnitTest.java index a4de435dd8a4..7d2cc991ee6c 100644 --- a/geode-core/src/test/java/com/gemstone/gemfire/internal/cache/DiskOldAPIsJUnitTest.java +++ b/geode-core/src/test/java/com/gemstone/gemfire/internal/cache/DiskOldAPIsJUnitTest.java @@ -37,7 +37,6 @@ * Tests the old disk apis to make sure they do the correct thing. * Once we drop these old deprecated disk apis then this unit test can be removed. * - * @author darrel * */ @Category(IntegrationTest.class) diff --git a/geode-core/src/test/java/com/gemstone/gemfire/internal/cache/DiskRandomOperationsAndRecoveryJUnitTest.java b/geode-core/src/test/java/com/gemstone/gemfire/internal/cache/DiskRandomOperationsAndRecoveryJUnitTest.java index b6d0fccea324..93e87319e59a 100644 --- a/geode-core/src/test/java/com/gemstone/gemfire/internal/cache/DiskRandomOperationsAndRecoveryJUnitTest.java +++ b/geode-core/src/test/java/com/gemstone/gemfire/internal/cache/DiskRandomOperationsAndRecoveryJUnitTest.java @@ -40,7 +40,6 @@ import com.gemstone.gemfire.test.junit.categories.IntegrationTest; /** * - * @author Asif * */ @Category(IntegrationTest.class) @@ -598,7 +597,6 @@ public int processRegionData() throws Exception * Delete some entries. 3) Recreate the deleted entries Close the Cache * 3: * Again Create cache. 4) check if the region creation is successful * - * @author Asif */ public int startOperations( final int startKey, final Object value) throws Exception { diff --git a/geode-core/src/test/java/com/gemstone/gemfire/internal/cache/DiskRegByteArrayDUnitTest.java b/geode-core/src/test/java/com/gemstone/gemfire/internal/cache/DiskRegByteArrayDUnitTest.java index a49dbec66d42..e07b5812f0b9 100644 --- a/geode-core/src/test/java/com/gemstone/gemfire/internal/cache/DiskRegByteArrayDUnitTest.java +++ b/geode-core/src/test/java/com/gemstone/gemfire/internal/cache/DiskRegByteArrayDUnitTest.java @@ -42,7 +42,6 @@ * The value when obtained from the disk ,locally , * should be correctly obtained as ByteArrray. * - * @author Vikram Jadhav */ public class DiskRegByteArrayDUnitTest extends CacheTestCase { diff --git a/geode-core/src/test/java/com/gemstone/gemfire/internal/cache/DiskRegCacheXmlJUnitTest.java b/geode-core/src/test/java/com/gemstone/gemfire/internal/cache/DiskRegCacheXmlJUnitTest.java index d7cca894b9c9..9c6f7f45637b 100644 --- a/geode-core/src/test/java/com/gemstone/gemfire/internal/cache/DiskRegCacheXmlJUnitTest.java +++ b/geode-core/src/test/java/com/gemstone/gemfire/internal/cache/DiskRegCacheXmlJUnitTest.java @@ -41,7 +41,6 @@ * A cache and region are created using an xml. The regions are then verified to make sure * that all the attributes have been correctly set * - * @author Vikram Jadhav * @since 5.1 */ @Category(IntegrationTest.class) diff --git a/geode-core/src/test/java/com/gemstone/gemfire/internal/cache/DiskRegCbkChkJUnitTest.java b/geode-core/src/test/java/com/gemstone/gemfire/internal/cache/DiskRegCbkChkJUnitTest.java index c1bd79177926..34d540dee797 100755 --- a/geode-core/src/test/java/com/gemstone/gemfire/internal/cache/DiskRegCbkChkJUnitTest.java +++ b/geode-core/src/test/java/com/gemstone/gemfire/internal/cache/DiskRegCbkChkJUnitTest.java @@ -33,7 +33,6 @@ * * Tests if callbacks are getting invoked correctly * * for 'create', 'update' and 'destroy' of disk region entries * * with concurrent 'clear' - * * @author Pallavi Sontakke * * */ @Category(IntegrationTest.class) diff --git a/geode-core/src/test/java/com/gemstone/gemfire/internal/cache/DiskRegRecoveryJUnitTest.java b/geode-core/src/test/java/com/gemstone/gemfire/internal/cache/DiskRegRecoveryJUnitTest.java index 087389e217dd..e4aa7069e791 100644 --- a/geode-core/src/test/java/com/gemstone/gemfire/internal/cache/DiskRegRecoveryJUnitTest.java +++ b/geode-core/src/test/java/com/gemstone/gemfire/internal/cache/DiskRegRecoveryJUnitTest.java @@ -42,7 +42,6 @@ /** * Disk region recovery tests * - * @author Vikram Jadhav * @since 5.1 */ @Category(IntegrationTest.class) @@ -84,7 +83,6 @@ public void tearDown() throws Exception * cache. Create Region with the same name as that of in STEP 1. Get and * verify the entries put in STEP 1 and STEP 2. * - * @author Vikram Jadhav */ @Test public void testDiskRegRecovery() @@ -323,7 +321,6 @@ public void testDiskRegRecovery() * 3: Again Create cache. Create Region with the same name as that of in STEP * 4) Verify that the entries got deleted * - * @author Asif */ @Test public void testBug39989_1() @@ -425,7 +422,6 @@ public void testBug39989_1() * 3: Again Create cache. * 4) check if the region creation is successful * - * @author Asif */ @Test public void testBug39989_2() diff --git a/geode-core/src/test/java/com/gemstone/gemfire/internal/cache/DiskRegionAsyncRecoveryJUnitTest.java b/geode-core/src/test/java/com/gemstone/gemfire/internal/cache/DiskRegionAsyncRecoveryJUnitTest.java index 6daa9eb92b0a..350a588484bb 100644 --- a/geode-core/src/test/java/com/gemstone/gemfire/internal/cache/DiskRegionAsyncRecoveryJUnitTest.java +++ b/geode-core/src/test/java/com/gemstone/gemfire/internal/cache/DiskRegionAsyncRecoveryJUnitTest.java @@ -38,7 +38,6 @@ import com.gemstone.gemfire.test.junit.categories.IntegrationTest; /** - * @author dsmith * */ @Category(IntegrationTest.class) diff --git a/geode-core/src/test/java/com/gemstone/gemfire/internal/cache/DiskRegionChangingRegionAttributesJUnitTest.java b/geode-core/src/test/java/com/gemstone/gemfire/internal/cache/DiskRegionChangingRegionAttributesJUnitTest.java index 163d963ca36f..07bd273873f7 100755 --- a/geode-core/src/test/java/com/gemstone/gemfire/internal/cache/DiskRegionChangingRegionAttributesJUnitTest.java +++ b/geode-core/src/test/java/com/gemstone/gemfire/internal/cache/DiskRegionChangingRegionAttributesJUnitTest.java @@ -33,7 +33,6 @@ * * The behaviour should be predictable * - * @author Mitul Bid * */ @Category(IntegrationTest.class) diff --git a/geode-core/src/test/java/com/gemstone/gemfire/internal/cache/DiskRegionHelperFactory.java b/geode-core/src/test/java/com/gemstone/gemfire/internal/cache/DiskRegionHelperFactory.java index b7cc3a7ea438..918aa1305b55 100755 --- a/geode-core/src/test/java/com/gemstone/gemfire/internal/cache/DiskRegionHelperFactory.java +++ b/geode-core/src/test/java/com/gemstone/gemfire/internal/cache/DiskRegionHelperFactory.java @@ -24,7 +24,6 @@ * * A testing helper factory to get a disk region with the desired configuration * - * @author Mitul Bid * */ public class DiskRegionHelperFactory diff --git a/geode-core/src/test/java/com/gemstone/gemfire/internal/cache/DiskRegionIllegalArguementsJUnitTest.java b/geode-core/src/test/java/com/gemstone/gemfire/internal/cache/DiskRegionIllegalArguementsJUnitTest.java index fb691e384019..b9bfa176bd50 100755 --- a/geode-core/src/test/java/com/gemstone/gemfire/internal/cache/DiskRegionIllegalArguementsJUnitTest.java +++ b/geode-core/src/test/java/com/gemstone/gemfire/internal/cache/DiskRegionIllegalArguementsJUnitTest.java @@ -37,7 +37,6 @@ * creation of the DWA object should throw a relevant exception if the * arguements specified are incorrect. * - * @author mbid * */ @Category(IntegrationTest.class) diff --git a/geode-core/src/test/java/com/gemstone/gemfire/internal/cache/DiskRegionIllegalCacheXMLvaluesJUnitTest.java b/geode-core/src/test/java/com/gemstone/gemfire/internal/cache/DiskRegionIllegalCacheXMLvaluesJUnitTest.java index eee1173b66d8..6787d1035890 100755 --- a/geode-core/src/test/java/com/gemstone/gemfire/internal/cache/DiskRegionIllegalCacheXMLvaluesJUnitTest.java +++ b/geode-core/src/test/java/com/gemstone/gemfire/internal/cache/DiskRegionIllegalCacheXMLvaluesJUnitTest.java @@ -40,7 +40,6 @@ * create disk regions. The creation of the DWA object should * throw a relevant exception if the arguements specified are incorrect. * - * @author mbid * */ @Category(IntegrationTest.class) diff --git a/geode-core/src/test/java/com/gemstone/gemfire/internal/cache/DiskRegionJUnitTest.java b/geode-core/src/test/java/com/gemstone/gemfire/internal/cache/DiskRegionJUnitTest.java index 94e6ec640014..4d88f435fcd9 100755 --- a/geode-core/src/test/java/com/gemstone/gemfire/internal/cache/DiskRegionJUnitTest.java +++ b/geode-core/src/test/java/com/gemstone/gemfire/internal/cache/DiskRegionJUnitTest.java @@ -546,7 +546,6 @@ public void run() * Oplog to be rolled is added after function call of obtaining nextDir , a * dead lock occurs * - * @author ashahid */ @Test @@ -1703,7 +1702,6 @@ public void testDiskAccessExceptionNotThrown() throws Exception * updating the LRULiist, then that deleted entry should not go into the * LRUList * - * @author Asif */ @Test public void testClearInteractionWithLRUList_Bug37605() @@ -1758,7 +1756,6 @@ public void afterCreate(EntryEvent event) * we would not be able to detect the conflict. The fix was to first clear the * region map & then reset the Htree Ref. * - * @author Asif */ @Test public void testClearInteractionWithCreateOperation_Bug37606() diff --git a/geode-core/src/test/java/com/gemstone/gemfire/internal/cache/DiskRegionProperties.java b/geode-core/src/test/java/com/gemstone/gemfire/internal/cache/DiskRegionProperties.java index bf69e291a2dc..3d5c2f6530d2 100755 --- a/geode-core/src/test/java/com/gemstone/gemfire/internal/cache/DiskRegionProperties.java +++ b/geode-core/src/test/java/com/gemstone/gemfire/internal/cache/DiskRegionProperties.java @@ -31,7 +31,6 @@ * A properties object used to create persistent/overflow regions for * testing objects * - * @author Mitul * @since 5.1 * */ diff --git a/geode-core/src/test/java/com/gemstone/gemfire/internal/cache/DiskRegionTestingBase.java b/geode-core/src/test/java/com/gemstone/gemfire/internal/cache/DiskRegionTestingBase.java index 5c405b5ddf2a..75eb9dbea267 100644 --- a/geode-core/src/test/java/com/gemstone/gemfire/internal/cache/DiskRegionTestingBase.java +++ b/geode-core/src/test/java/com/gemstone/gemfire/internal/cache/DiskRegionTestingBase.java @@ -53,7 +53,6 @@ * All disk region unit tests extend this base class , common method to be used in * all tests are present here. * - * @author Mitul * @since 5.1 * */ diff --git a/geode-core/src/test/java/com/gemstone/gemfire/internal/cache/DiskStoreFactoryJUnitTest.java b/geode-core/src/test/java/com/gemstone/gemfire/internal/cache/DiskStoreFactoryJUnitTest.java index 6f61b1e1bd1b..38a1c5f9705b 100644 --- a/geode-core/src/test/java/com/gemstone/gemfire/internal/cache/DiskStoreFactoryJUnitTest.java +++ b/geode-core/src/test/java/com/gemstone/gemfire/internal/cache/DiskStoreFactoryJUnitTest.java @@ -36,7 +36,6 @@ /** * Tests DiskStoreFactory * - * @author darrel * */ @Category(IntegrationTest.class) diff --git a/geode-core/src/test/java/com/gemstone/gemfire/internal/cache/DiskWriteAttributesJUnitTest.java b/geode-core/src/test/java/com/gemstone/gemfire/internal/cache/DiskWriteAttributesJUnitTest.java index e16a204fa39d..d7d07f96085f 100755 --- a/geode-core/src/test/java/com/gemstone/gemfire/internal/cache/DiskWriteAttributesJUnitTest.java +++ b/geode-core/src/test/java/com/gemstone/gemfire/internal/cache/DiskWriteAttributesJUnitTest.java @@ -29,7 +29,6 @@ * Tests if DiskWriteAttributeFactory returns the correct DWA object with the * desired values * - * @author Mitul Bid * */ @Category(UnitTest.class) @@ -146,7 +145,6 @@ public void testGetDefaultNonRollingAsync() /** * Tests the behaviour of DiskWriteAttributesFactory & DiskWritesAttrbutes with * various combinations of time interval & buffer size. - * @author Asif */ public void testDiskWriteAttributesCreation() { DiskWriteAttributesFactory dwaf = new DiskWriteAttributesFactory(); diff --git a/geode-core/src/test/java/com/gemstone/gemfire/internal/cache/EnumListenerEventJUnitTest.java b/geode-core/src/test/java/com/gemstone/gemfire/internal/cache/EnumListenerEventJUnitTest.java index 1650bdba46bf..1687db71414c 100755 --- a/geode-core/src/test/java/com/gemstone/gemfire/internal/cache/EnumListenerEventJUnitTest.java +++ b/geode-core/src/test/java/com/gemstone/gemfire/internal/cache/EnumListenerEventJUnitTest.java @@ -24,8 +24,6 @@ import junit.framework.TestCase; /** - * @author Mitul Bid - * @author Vishal Rao * */ @Category(UnitTest.class) diff --git a/geode-core/src/test/java/com/gemstone/gemfire/internal/cache/EventTrackerDUnitTest.java b/geode-core/src/test/java/com/gemstone/gemfire/internal/cache/EventTrackerDUnitTest.java index 5fbc53741405..b3f4afe91e15 100755 --- a/geode-core/src/test/java/com/gemstone/gemfire/internal/cache/EventTrackerDUnitTest.java +++ b/geode-core/src/test/java/com/gemstone/gemfire/internal/cache/EventTrackerDUnitTest.java @@ -50,7 +50,6 @@ /** * Tests EventTracker management. * - * @author Barry Oglesby * * @since 6.5 */ diff --git a/geode-core/src/test/java/com/gemstone/gemfire/internal/cache/FaultingInJUnitTest.java b/geode-core/src/test/java/com/gemstone/gemfire/internal/cache/FaultingInJUnitTest.java index de74e26ce402..76d8bc90e5d2 100755 --- a/geode-core/src/test/java/com/gemstone/gemfire/internal/cache/FaultingInJUnitTest.java +++ b/geode-core/src/test/java/com/gemstone/gemfire/internal/cache/FaultingInJUnitTest.java @@ -29,7 +29,6 @@ * Tests faulting in from current oplog, old oplog * and htree for different modes (overflow only, persist+overflow : Sync/Async) * - * @author Mitul Bid * */ @Category(IntegrationTest.class) diff --git a/geode-core/src/test/java/com/gemstone/gemfire/internal/cache/GIIDeltaDUnitTest.java b/geode-core/src/test/java/com/gemstone/gemfire/internal/cache/GIIDeltaDUnitTest.java index e8dbe562d777..6af48aad4055 100644 --- a/geode-core/src/test/java/com/gemstone/gemfire/internal/cache/GIIDeltaDUnitTest.java +++ b/geode-core/src/test/java/com/gemstone/gemfire/internal/cache/GIIDeltaDUnitTest.java @@ -75,7 +75,6 @@ /** - * @author Xiaojian Zhou (Gester) * */ public class GIIDeltaDUnitTest extends CacheTestCase { diff --git a/geode-core/src/test/java/com/gemstone/gemfire/internal/cache/GIIFlowControlDUnitTest.java b/geode-core/src/test/java/com/gemstone/gemfire/internal/cache/GIIFlowControlDUnitTest.java index e2d4af68855f..bded551c2bc6 100644 --- a/geode-core/src/test/java/com/gemstone/gemfire/internal/cache/GIIFlowControlDUnitTest.java +++ b/geode-core/src/test/java/com/gemstone/gemfire/internal/cache/GIIFlowControlDUnitTest.java @@ -41,7 +41,6 @@ import com.gemstone.gemfire.test.dunit.WaitCriterion; /** - * @author dsmith * */ public class GIIFlowControlDUnitTest extends CacheTestCase { diff --git a/geode-core/src/test/java/com/gemstone/gemfire/internal/cache/GridAdvisorDUnitTest.java b/geode-core/src/test/java/com/gemstone/gemfire/internal/cache/GridAdvisorDUnitTest.java index f12333f2f34e..aae593b25ce3 100644 --- a/geode-core/src/test/java/com/gemstone/gemfire/internal/cache/GridAdvisorDUnitTest.java +++ b/geode-core/src/test/java/com/gemstone/gemfire/internal/cache/GridAdvisorDUnitTest.java @@ -44,7 +44,6 @@ /** * Tests the GridAdvisor * - * @author darrel * @since 5.7 */ public class GridAdvisorDUnitTest extends DistributedTestCase { diff --git a/geode-core/src/test/java/com/gemstone/gemfire/internal/cache/HAOverflowMemObjectSizerDUnitTest.java b/geode-core/src/test/java/com/gemstone/gemfire/internal/cache/HAOverflowMemObjectSizerDUnitTest.java index 69f73ec9dff1..820d70bab1e1 100755 --- a/geode-core/src/test/java/com/gemstone/gemfire/internal/cache/HAOverflowMemObjectSizerDUnitTest.java +++ b/geode-core/src/test/java/com/gemstone/gemfire/internal/cache/HAOverflowMemObjectSizerDUnitTest.java @@ -46,7 +46,6 @@ /** * Tests the size of clientUpdateMessageImpl with the size calculated by * {@link com.gemstone.gemfire.internal.cache.lru.MemLRUCapacityController} for HA overFlow - * @author aingle * @since 5.7 */ public class HAOverflowMemObjectSizerDUnitTest extends DistributedTestCase { diff --git a/geode-core/src/test/java/com/gemstone/gemfire/internal/cache/IncrementalBackupDUnitTest.java b/geode-core/src/test/java/com/gemstone/gemfire/internal/cache/IncrementalBackupDUnitTest.java index c8f0933cba4c..0dbaf00c4b7f 100644 --- a/geode-core/src/test/java/com/gemstone/gemfire/internal/cache/IncrementalBackupDUnitTest.java +++ b/geode-core/src/test/java/com/gemstone/gemfire/internal/cache/IncrementalBackupDUnitTest.java @@ -60,7 +60,6 @@ /** * Tests for the incremental backup feature. - * @author rholmes */ @SuppressWarnings("serial") public class IncrementalBackupDUnitTest extends CacheTestCase { diff --git a/geode-core/src/test/java/com/gemstone/gemfire/internal/cache/IteratorDUnitTest.java b/geode-core/src/test/java/com/gemstone/gemfire/internal/cache/IteratorDUnitTest.java index 41fc8d611326..8d5184c4b8d7 100644 --- a/geode-core/src/test/java/com/gemstone/gemfire/internal/cache/IteratorDUnitTest.java +++ b/geode-core/src/test/java/com/gemstone/gemfire/internal/cache/IteratorDUnitTest.java @@ -30,7 +30,6 @@ /** * Test that keys iterator do not returned keys with removed token as its values - * @author sbawaska * */ public class IteratorDUnitTest extends CacheTestCase { diff --git a/geode-core/src/test/java/com/gemstone/gemfire/internal/cache/LIFOEvictionAlgoEnabledRegionJUnitTest.java b/geode-core/src/test/java/com/gemstone/gemfire/internal/cache/LIFOEvictionAlgoEnabledRegionJUnitTest.java index 9a0779b0b9c8..9df246802092 100755 --- a/geode-core/src/test/java/com/gemstone/gemfire/internal/cache/LIFOEvictionAlgoEnabledRegionJUnitTest.java +++ b/geode-core/src/test/java/com/gemstone/gemfire/internal/cache/LIFOEvictionAlgoEnabledRegionJUnitTest.java @@ -49,7 +49,6 @@ * This is a test verifies region is LIFO enabled by ENTRY COUNT verifies correct stats updating * and faultin is not evicting another entry - not strict LIFO * - * @author aingle * @since 5.7 */ @Category(IntegrationTest.class) diff --git a/geode-core/src/test/java/com/gemstone/gemfire/internal/cache/LIFOEvictionAlgoMemoryEnabledRegionJUnitTest.java b/geode-core/src/test/java/com/gemstone/gemfire/internal/cache/LIFOEvictionAlgoMemoryEnabledRegionJUnitTest.java index c8ffd7c95038..b8876b2bd8a5 100755 --- a/geode-core/src/test/java/com/gemstone/gemfire/internal/cache/LIFOEvictionAlgoMemoryEnabledRegionJUnitTest.java +++ b/geode-core/src/test/java/com/gemstone/gemfire/internal/cache/LIFOEvictionAlgoMemoryEnabledRegionJUnitTest.java @@ -53,7 +53,6 @@ * This is a test verifies region is LIFO enabled by MEMORY verifies correct * stats updating and faultin is not evicting another entry - not strict LIFO * - * @author aingle * @since 5.7 */ @FixMethodOrder(MethodSorters.NAME_ASCENDING) diff --git a/geode-core/src/test/java/com/gemstone/gemfire/internal/cache/MapClearGIIDUnitTest.java b/geode-core/src/test/java/com/gemstone/gemfire/internal/cache/MapClearGIIDUnitTest.java index 9343e605f0ff..7c27e8f0e730 100644 --- a/geode-core/src/test/java/com/gemstone/gemfire/internal/cache/MapClearGIIDUnitTest.java +++ b/geode-core/src/test/java/com/gemstone/gemfire/internal/cache/MapClearGIIDUnitTest.java @@ -43,7 +43,6 @@ import com.gemstone.gemfire.test.dunit.WaitCriterion; /** - * @author ashahid * * */ diff --git a/geode-core/src/test/java/com/gemstone/gemfire/internal/cache/MapInterface2JUnitTest.java b/geode-core/src/test/java/com/gemstone/gemfire/internal/cache/MapInterface2JUnitTest.java index 0129ec6eb754..1ad7787cb871 100644 --- a/geode-core/src/test/java/com/gemstone/gemfire/internal/cache/MapInterface2JUnitTest.java +++ b/geode-core/src/test/java/com/gemstone/gemfire/internal/cache/MapInterface2JUnitTest.java @@ -45,7 +45,6 @@ import com.gemstone.gemfire.test.junit.categories.IntegrationTest; /** - * @author asif * * */ diff --git a/geode-core/src/test/java/com/gemstone/gemfire/internal/cache/MultipleOplogsRollingFeatureJUnitTest.java b/geode-core/src/test/java/com/gemstone/gemfire/internal/cache/MultipleOplogsRollingFeatureJUnitTest.java index 71defebfff0a..6ac9e602674d 100755 --- a/geode-core/src/test/java/com/gemstone/gemfire/internal/cache/MultipleOplogsRollingFeatureJUnitTest.java +++ b/geode-core/src/test/java/com/gemstone/gemfire/internal/cache/MultipleOplogsRollingFeatureJUnitTest.java @@ -30,7 +30,6 @@ * 1. Multiple oplogs are being rolled at once
    * 2. The Number of entries getting logged to the HTree are taking care of creation * - * @author Pratik Batra */ @Category(IntegrationTest.class) public class MultipleOplogsRollingFeatureJUnitTest extends diff --git a/geode-core/src/test/java/com/gemstone/gemfire/internal/cache/NetSearchMessagingDUnitTest.java b/geode-core/src/test/java/com/gemstone/gemfire/internal/cache/NetSearchMessagingDUnitTest.java index f49a4c692376..71a95c50472f 100644 --- a/geode-core/src/test/java/com/gemstone/gemfire/internal/cache/NetSearchMessagingDUnitTest.java +++ b/geode-core/src/test/java/com/gemstone/gemfire/internal/cache/NetSearchMessagingDUnitTest.java @@ -44,7 +44,6 @@ import com.gemstone.gemfire.test.dunit.WaitCriterion; /** - * @author dsmith * */ public class NetSearchMessagingDUnitTest extends CacheTestCase { diff --git a/geode-core/src/test/java/com/gemstone/gemfire/internal/cache/OffHeapEvictionDUnitTest.java b/geode-core/src/test/java/com/gemstone/gemfire/internal/cache/OffHeapEvictionDUnitTest.java index 708b983f213a..d7c6fbe4d898 100644 --- a/geode-core/src/test/java/com/gemstone/gemfire/internal/cache/OffHeapEvictionDUnitTest.java +++ b/geode-core/src/test/java/com/gemstone/gemfire/internal/cache/OffHeapEvictionDUnitTest.java @@ -35,7 +35,6 @@ /** * Performs eviction dunit tests for off-heap memory. - * @author rholmes */ public class OffHeapEvictionDUnitTest extends EvictionDUnitTest { public OffHeapEvictionDUnitTest(String name) { diff --git a/geode-core/src/test/java/com/gemstone/gemfire/internal/cache/OffHeapEvictionStatsDUnitTest.java b/geode-core/src/test/java/com/gemstone/gemfire/internal/cache/OffHeapEvictionStatsDUnitTest.java index f574e99a8158..66118493edef 100644 --- a/geode-core/src/test/java/com/gemstone/gemfire/internal/cache/OffHeapEvictionStatsDUnitTest.java +++ b/geode-core/src/test/java/com/gemstone/gemfire/internal/cache/OffHeapEvictionStatsDUnitTest.java @@ -28,7 +28,6 @@ /** * Performs eviction stat dunit tests for off-heap regions. - * @author rholmes * @since 9.0 */ public class OffHeapEvictionStatsDUnitTest extends EvictionStatsDUnitTest { diff --git a/geode-core/src/test/java/com/gemstone/gemfire/internal/cache/OplogEntryIdMapJUnitTest.java b/geode-core/src/test/java/com/gemstone/gemfire/internal/cache/OplogEntryIdMapJUnitTest.java index 71509b2cd87d..9cd0cf76f988 100644 --- a/geode-core/src/test/java/com/gemstone/gemfire/internal/cache/OplogEntryIdMapJUnitTest.java +++ b/geode-core/src/test/java/com/gemstone/gemfire/internal/cache/OplogEntryIdMapJUnitTest.java @@ -26,7 +26,6 @@ /** * Tests DiskStoreImpl.OplogEntryIdMap * - * @author darrel * */ @Category(UnitTest.class) diff --git a/geode-core/src/test/java/com/gemstone/gemfire/internal/cache/OplogEntryIdSetJUnitTest.java b/geode-core/src/test/java/com/gemstone/gemfire/internal/cache/OplogEntryIdSetJUnitTest.java index 0405717080b3..9413c3b5571c 100644 --- a/geode-core/src/test/java/com/gemstone/gemfire/internal/cache/OplogEntryIdSetJUnitTest.java +++ b/geode-core/src/test/java/com/gemstone/gemfire/internal/cache/OplogEntryIdSetJUnitTest.java @@ -26,7 +26,6 @@ /** * Tests DiskStoreImpl.OplogEntryIdSet * - * @author darrel * */ @Category(UnitTest.class) diff --git a/geode-core/src/test/java/com/gemstone/gemfire/internal/cache/OplogJUnitTest.java b/geode-core/src/test/java/com/gemstone/gemfire/internal/cache/OplogJUnitTest.java index 1d9213e51f73..ad7b3a54180f 100755 --- a/geode-core/src/test/java/com/gemstone/gemfire/internal/cache/OplogJUnitTest.java +++ b/geode-core/src/test/java/com/gemstone/gemfire/internal/cache/OplogJUnitTest.java @@ -66,8 +66,6 @@ /** * Testing Oplog API's * - * @author Asif - * @author Mitul */ @Category(IntegrationTest.class) public class OplogJUnitTest extends DiskRegionTestingBase @@ -536,7 +534,6 @@ public void testRemove() * This tests the final ByteBuffer object that gets created for synch/Asynch * operation for a create / modify & Delete operation * - * @author Asif */ // @Test // public void testByteBufferCreationForCreateModifyAndDeleteOperation() @@ -624,7 +621,6 @@ public void testRemove() /** * Tests whether the data is written in the right format on the disk * - * @author Asif */ @Test public void testFaultInOfValuesFromDisk() @@ -681,7 +677,6 @@ public void testFaultInOfValuesFromDisk() * Tests the termination of asynch writer for an Oplog after the switch has * been made * - * @author Asif */ // @Test // public void testAsynchWriterTerminationOnSwitch() @@ -736,7 +731,6 @@ public void testFaultInOfValuesFromDisk() * Tests the original ByteBufferPool gets transferred to the new Oplog for * synch mode * - * @author Asif */ @Test public void testByteBufferPoolTransferForSynchMode() @@ -786,7 +780,6 @@ public void testByteBufferPoolTransferForSynchMode() * bytebuffers which will always be free. Thus if the asynch writer had * initially 8 byte buffers only 4 will be released * - * @author Asif */ // @Test // public void testByteBufferPoolUsageForAsynchMode() @@ -979,7 +972,6 @@ public void testByteBufferPoolTransferForSynchMode() // give the new oplog record format it is too hard for the test to calculate // the expected size // /** -// * @author Asif // */ // @Test // public void testSynchModeConcurrentOperations() @@ -1350,7 +1342,6 @@ static int evaluateSizeOfOperationForPersist(Object key, byte[] val, // * Tests whether the switching of Oplog happens correctly without size // * violation in case of concurrent region operations for asynch mode. // * -// * @author Asif // */ // @Test // public void testSwitchingForConcurrentASynchedOperations() @@ -1460,7 +1451,6 @@ static int evaluateSizeOfOperationForPersist(Object key, byte[] val, // } // /** -// * @author Asif // */ // @Test // public void testAsyncWriterTerminationAfterSwitch() @@ -1535,7 +1525,6 @@ static int evaluateSizeOfOperationForPersist(Object key, byte[] val, // } // /** -// * @author Asif // */ // @Test // public void testMultipleByteBuffersASynchOperations() @@ -1648,7 +1637,6 @@ static int evaluateSizeOfOperationForPersist(Object key, byte[] val, * operation is followed by destroy but before destroy proceeds some other * operation causes oplog switching * - * @author Asif */ @Test public void testBug34615() @@ -1693,7 +1681,6 @@ public void run() } /** - * @author Asif */ @Test public void testConflation() throws Exception { @@ -1781,7 +1768,6 @@ public void testConflation() throws Exception { /** * This tests the retrieval of empty byte array when present in asynch buffers * - * @author Asif */ @Test public void testGetEmptyByteArrayInAsynchBuffer() @@ -1813,7 +1799,6 @@ public void testGetEmptyByteArrayInAsynchBuffer() /** * This tests the retrieval of empty byte array in synch mode * - * @author Asif */ @Test public void testGetEmptyByteArrayInSynchMode() @@ -1848,7 +1833,6 @@ public void testGetEmptyByteArrayInSynchMode() * roller thread obtains the iterator of the concurrent region map before the * remove * - * @author Asif */ @Test public void testBug34702() @@ -1944,7 +1928,6 @@ public void afterHavingCompacted() * not be able to acquire the lock on the entry as the switching thread has * already taken a lock on it. * - * @author Asif */ @Test public void testRollingDeadlockSituation() @@ -1978,7 +1961,6 @@ public void testRollingDeadlockSituation() * should also get added. Similary during recover from HTree as well as Oplog , * the empty byte array should be read correctly * - * @author Asif */ @Test public void testEmptyByteArrayPutAndRecovery() @@ -2055,7 +2037,6 @@ public void afterConflation(ByteBuffer origBB, ByteBuffer conflatedBB) * readlock in DiskRegion to record the same. If the Oplog has switched during * that duration , the bug would appear * - * @author Asif */ @Test @@ -2115,7 +2096,6 @@ public void run() { * asynch) . Pls refer to the class documentation ( Oplog.ByteBufferPool) for * the exact behaviour of the class * - * @author Asif */ // @Test // public void testByteBufferPoolParameters() @@ -2226,7 +2206,6 @@ public void run() { * objects being put vary in size & hence use ByteBuffer Pools present at * different indexes * - * @author Asif */ // @Test // public void testByteBufferPoolReleaseBugTest() @@ -2250,7 +2229,6 @@ public void run() { * Tests if buffer size & time are not set , the asynch writer gets awakened * on time basis of default 1 second * - * @author Asif */ @Test public void testAsynchWriterAttribBehaviour1() @@ -2321,7 +2299,6 @@ public void goingToFlush() * Tests if buffer size is set but time is not set , the asynch writer gets * awakened on buffer size basis * - * @author Asif */ public void DARREL_DISABLE_testAsynchWriterAttribBehaviour2() { @@ -2393,7 +2370,6 @@ public void goingToFlush() * Tests if buffer size & time interval are explicitly set to zero then the * flush will occur due to asynchForceFlush or due to switching of Oplog * - * @author Asif */ @Test public void testAsynchWriterAttribBehaviour3() @@ -2471,7 +2447,6 @@ public void goingToFlush() * available so that preblowing results in IOException , is able to recover * without problem * - * @author Asif */ //Now we preallocate spaces for if files and also crfs and drfs. So the below test is not valid // any more. See revision: r42359 and r42320. So disabling this test. @@ -2526,7 +2501,6 @@ public void _testPreblowErrorCondition() /** * Tests if the byte buffer pool in asynch mode tries to contain the pool size * - * @author Asif */ @Test public void testByteBufferPoolContainment() @@ -2727,7 +2701,6 @@ public String description() { /** * Tests delayed creation of DiskID in overflow only mode * - * @author Asif */ @Test public void testDelayedDiskIdCreationInOverflowOnlyMode() @@ -2757,7 +2730,6 @@ public void testDelayedDiskIdCreationInOverflowOnlyMode() /** * Tests immediate creation of DiskID in overflow With Persistence mode * - * @author Asif */ @Test public void testImmediateDiskIdCreationInOverflowWithPersistMode() @@ -2788,7 +2760,6 @@ public void testImmediateDiskIdCreationInOverflowWithPersistMode() * An entry which is evicted to disk will have the flag already written to * disk, appropriately set * - * @author Asif */ @Test public void testEntryAlreadyWrittenIsCorrectlyUnmarkedForOverflowOnly() @@ -2858,7 +2829,6 @@ public void testEntryAlreadyWrittenIsCorrectlyUnmarkedForOverflowOnly() * An persistent or overflow with persistence entry which is evicted to disk, * will have the flag already written to disk, appropriately set * - * @author Asif */ @Test public void testEntryAlreadyWrittenIsCorrectlyUnmarkedForOverflowWithPersistence() diff --git a/geode-core/src/test/java/com/gemstone/gemfire/internal/cache/PRBadToDataDUnitTest.java b/geode-core/src/test/java/com/gemstone/gemfire/internal/cache/PRBadToDataDUnitTest.java index 8249d2b0db75..e26b0ae2a37e 100644 --- a/geode-core/src/test/java/com/gemstone/gemfire/internal/cache/PRBadToDataDUnitTest.java +++ b/geode-core/src/test/java/com/gemstone/gemfire/internal/cache/PRBadToDataDUnitTest.java @@ -35,7 +35,6 @@ * This test does a put with the bad to data from an accessor * to see if it will keep trying to resend the put to the data store * - * @author darrel * */ public class PRBadToDataDUnitTest extends CacheTestCase { diff --git a/geode-core/src/test/java/com/gemstone/gemfire/internal/cache/PRConcurrentMapOpsJUnitTest.java b/geode-core/src/test/java/com/gemstone/gemfire/internal/cache/PRConcurrentMapOpsJUnitTest.java index 95be383220fd..e1f6c504e688 100644 --- a/geode-core/src/test/java/com/gemstone/gemfire/internal/cache/PRConcurrentMapOpsJUnitTest.java +++ b/geode-core/src/test/java/com/gemstone/gemfire/internal/cache/PRConcurrentMapOpsJUnitTest.java @@ -43,7 +43,6 @@ /** * Tests ConcurrentMap operations on a PartitionedRegion on a single node. * - * @author Eric Zoerner */ @Category(IntegrationTest.class) diff --git a/geode-core/src/test/java/com/gemstone/gemfire/internal/cache/PRDataStoreMemoryJUnitTest.java b/geode-core/src/test/java/com/gemstone/gemfire/internal/cache/PRDataStoreMemoryJUnitTest.java index e03a74f25482..31c8db88578c 100644 --- a/geode-core/src/test/java/com/gemstone/gemfire/internal/cache/PRDataStoreMemoryJUnitTest.java +++ b/geode-core/src/test/java/com/gemstone/gemfire/internal/cache/PRDataStoreMemoryJUnitTest.java @@ -40,7 +40,6 @@ /** * Tests memory allocation operations on a PartitionedRegion on a single node. * - * @author rreja, modified by Girish */ @Category(IntegrationTest.class) public class PRDataStoreMemoryJUnitTest { diff --git a/geode-core/src/test/java/com/gemstone/gemfire/internal/cache/PRDataStoreMemoryOffHeapJUnitTest.java b/geode-core/src/test/java/com/gemstone/gemfire/internal/cache/PRDataStoreMemoryOffHeapJUnitTest.java index c76903c732e6..d08d80b7f379 100755 --- a/geode-core/src/test/java/com/gemstone/gemfire/internal/cache/PRDataStoreMemoryOffHeapJUnitTest.java +++ b/geode-core/src/test/java/com/gemstone/gemfire/internal/cache/PRDataStoreMemoryOffHeapJUnitTest.java @@ -28,7 +28,6 @@ /** * Tests PartitionedRegion DataStore currentAllocatedMemory operation. * - * @author Kirk Lund * @since 9.0 */ @Category(IntegrationTest.class) diff --git a/geode-core/src/test/java/com/gemstone/gemfire/internal/cache/PRTXJUnitTest.java b/geode-core/src/test/java/com/gemstone/gemfire/internal/cache/PRTXJUnitTest.java index 904d3ba7dd1a..5a6ad666f3d9 100644 --- a/geode-core/src/test/java/com/gemstone/gemfire/internal/cache/PRTXJUnitTest.java +++ b/geode-core/src/test/java/com/gemstone/gemfire/internal/cache/PRTXJUnitTest.java @@ -39,7 +39,6 @@ import com.gemstone.gemfire.test.junit.categories.IntegrationTest; /** - * @author sbawaska * */ @Category(IntegrationTest.class) diff --git a/geode-core/src/test/java/com/gemstone/gemfire/internal/cache/PartitionAttributesImplJUnitTest.java b/geode-core/src/test/java/com/gemstone/gemfire/internal/cache/PartitionAttributesImplJUnitTest.java index 108216efc60b..e75e17f6129c 100755 --- a/geode-core/src/test/java/com/gemstone/gemfire/internal/cache/PartitionAttributesImplJUnitTest.java +++ b/geode-core/src/test/java/com/gemstone/gemfire/internal/cache/PartitionAttributesImplJUnitTest.java @@ -39,7 +39,6 @@ /** * Unit test suite for PartitionAttributesImpl. * - * @author Kirk Lund */ @Category(UnitTest.class) public class PartitionAttributesImplJUnitTest { diff --git a/geode-core/src/test/java/com/gemstone/gemfire/internal/cache/PartitionedRegionAPIConserveSocketsFalseDUnitTest.java b/geode-core/src/test/java/com/gemstone/gemfire/internal/cache/PartitionedRegionAPIConserveSocketsFalseDUnitTest.java index 65e6bcb3eed8..799ca405f61d 100644 --- a/geode-core/src/test/java/com/gemstone/gemfire/internal/cache/PartitionedRegionAPIConserveSocketsFalseDUnitTest.java +++ b/geode-core/src/test/java/com/gemstone/gemfire/internal/cache/PartitionedRegionAPIConserveSocketsFalseDUnitTest.java @@ -22,7 +22,6 @@ /** * Test all the PartitionedRegion api calls when ConserveSockets is set to false - * @author mthomas * @since 5.0 * @see com.gemstone.gemfire.distributed.DistributedSystem#setThreadsSocketPolicy(boolean) */ diff --git a/geode-core/src/test/java/com/gemstone/gemfire/internal/cache/PartitionedRegionAsSubRegionDUnitTest.java b/geode-core/src/test/java/com/gemstone/gemfire/internal/cache/PartitionedRegionAsSubRegionDUnitTest.java index 94eb7750f613..d8f7c2114f42 100755 --- a/geode-core/src/test/java/com/gemstone/gemfire/internal/cache/PartitionedRegionAsSubRegionDUnitTest.java +++ b/geode-core/src/test/java/com/gemstone/gemfire/internal/cache/PartitionedRegionAsSubRegionDUnitTest.java @@ -32,7 +32,6 @@ * properly when PartitionedRegion is in * ParentRegion/ChildRegion/PartitionedRegion hierarchy. * - * @author Tushar Apshankar, Created on May 19, 2006 * */ public class PartitionedRegionAsSubRegionDUnitTest extends diff --git a/geode-core/src/test/java/com/gemstone/gemfire/internal/cache/PartitionedRegionBucketCreationDistributionDUnitTest.java b/geode-core/src/test/java/com/gemstone/gemfire/internal/cache/PartitionedRegionBucketCreationDistributionDUnitTest.java index 79669b24e665..540542e77adb 100755 --- a/geode-core/src/test/java/com/gemstone/gemfire/internal/cache/PartitionedRegionBucketCreationDistributionDUnitTest.java +++ b/geode-core/src/test/java/com/gemstone/gemfire/internal/cache/PartitionedRegionBucketCreationDistributionDUnitTest.java @@ -48,7 +48,6 @@ * * This class tests bucket Creation and distribution for the multiple Partition * regions. - * @author gthombar, modified by Tushar (for bug#35713) */ public class PartitionedRegionBucketCreationDistributionDUnitTest extends PartitionedRegionDUnitTestCase diff --git a/geode-core/src/test/java/com/gemstone/gemfire/internal/cache/PartitionedRegionCacheCloseDUnitTest.java b/geode-core/src/test/java/com/gemstone/gemfire/internal/cache/PartitionedRegionCacheCloseDUnitTest.java index 8fd6f4e75142..43252a284a5a 100644 --- a/geode-core/src/test/java/com/gemstone/gemfire/internal/cache/PartitionedRegionCacheCloseDUnitTest.java +++ b/geode-core/src/test/java/com/gemstone/gemfire/internal/cache/PartitionedRegionCacheCloseDUnitTest.java @@ -41,7 +41,6 @@ * Ops are done on both the VMs. Each bucket will be created in both the nodes * as redundantCopies is 1. * - * @author rreja * */ public class PartitionedRegionCacheCloseDUnitTest extends diff --git a/geode-core/src/test/java/com/gemstone/gemfire/internal/cache/PartitionedRegionCacheLoaderForRootRegion.java b/geode-core/src/test/java/com/gemstone/gemfire/internal/cache/PartitionedRegionCacheLoaderForRootRegion.java index b4862442d2db..3e9ac024822a 100755 --- a/geode-core/src/test/java/com/gemstone/gemfire/internal/cache/PartitionedRegionCacheLoaderForRootRegion.java +++ b/geode-core/src/test/java/com/gemstone/gemfire/internal/cache/PartitionedRegionCacheLoaderForRootRegion.java @@ -26,7 +26,6 @@ import com.gemstone.gemfire.cache.Declarable; /** - * @author gthombar * This class is CacheLoader for partition region */ public class PartitionedRegionCacheLoaderForRootRegion implements CacheLoader, diff --git a/geode-core/src/test/java/com/gemstone/gemfire/internal/cache/PartitionedRegionCacheLoaderForSubRegion.java b/geode-core/src/test/java/com/gemstone/gemfire/internal/cache/PartitionedRegionCacheLoaderForSubRegion.java index 6d06a5f8b67b..e0ba2c2a67d4 100755 --- a/geode-core/src/test/java/com/gemstone/gemfire/internal/cache/PartitionedRegionCacheLoaderForSubRegion.java +++ b/geode-core/src/test/java/com/gemstone/gemfire/internal/cache/PartitionedRegionCacheLoaderForSubRegion.java @@ -27,7 +27,6 @@ import com.gemstone.gemfire.cache.Declarable; /** - * @author gthombar * This class is cacheLoader for the partition region */ public class PartitionedRegionCacheLoaderForSubRegion implements CacheLoader, Declarable { diff --git a/geode-core/src/test/java/com/gemstone/gemfire/internal/cache/PartitionedRegionCacheXMLExampleDUnitTest.java b/geode-core/src/test/java/com/gemstone/gemfire/internal/cache/PartitionedRegionCacheXMLExampleDUnitTest.java index ee556698e64a..61f099502760 100755 --- a/geode-core/src/test/java/com/gemstone/gemfire/internal/cache/PartitionedRegionCacheXMLExampleDUnitTest.java +++ b/geode-core/src/test/java/com/gemstone/gemfire/internal/cache/PartitionedRegionCacheXMLExampleDUnitTest.java @@ -27,7 +27,6 @@ import com.gemstone.gemfire.util.test.TestUtil; /** - * @author gthombar This class tests regions created by xml files */ public class PartitionedRegionCacheXMLExampleDUnitTest extends PartitionedRegionDUnitTestCase { diff --git a/geode-core/src/test/java/com/gemstone/gemfire/internal/cache/PartitionedRegionCreationJUnitTest.java b/geode-core/src/test/java/com/gemstone/gemfire/internal/cache/PartitionedRegionCreationJUnitTest.java index b90f4baf1da8..5a5f0b1b97a6 100644 --- a/geode-core/src/test/java/com/gemstone/gemfire/internal/cache/PartitionedRegionCreationJUnitTest.java +++ b/geode-core/src/test/java/com/gemstone/gemfire/internal/cache/PartitionedRegionCreationJUnitTest.java @@ -61,7 +61,6 @@ * 4) testpartionedRegionBucketToNodeCreate - Tests the PR's BUCKET_2_NODE region creation *

    * - * @author tnegi * */ @FixMethodOrder(MethodSorters.NAME_ASCENDING) diff --git a/geode-core/src/test/java/com/gemstone/gemfire/internal/cache/PartitionedRegionDataStoreJUnitTest.java b/geode-core/src/test/java/com/gemstone/gemfire/internal/cache/PartitionedRegionDataStoreJUnitTest.java index bdfec296b8d0..ed739918e269 100644 --- a/geode-core/src/test/java/com/gemstone/gemfire/internal/cache/PartitionedRegionDataStoreJUnitTest.java +++ b/geode-core/src/test/java/com/gemstone/gemfire/internal/cache/PartitionedRegionDataStoreJUnitTest.java @@ -58,7 +58,6 @@ * * Created on Dec 23, 2005 * - * @author rreja, modified by Girish * */ @Category(IntegrationTest.class) diff --git a/geode-core/src/test/java/com/gemstone/gemfire/internal/cache/PartitionedRegionDelayedRecoveryDUnitTest.java b/geode-core/src/test/java/com/gemstone/gemfire/internal/cache/PartitionedRegionDelayedRecoveryDUnitTest.java index 337e6ce1260b..fa8d4da8c91b 100644 --- a/geode-core/src/test/java/com/gemstone/gemfire/internal/cache/PartitionedRegionDelayedRecoveryDUnitTest.java +++ b/geode-core/src/test/java/com/gemstone/gemfire/internal/cache/PartitionedRegionDelayedRecoveryDUnitTest.java @@ -34,7 +34,6 @@ import com.gemstone.gemfire.test.dunit.VM; /** - * @author dsmith * */ @SuppressWarnings("synthetic-access") diff --git a/geode-core/src/test/java/com/gemstone/gemfire/internal/cache/PartitionedRegionDestroyDUnitTest.java b/geode-core/src/test/java/com/gemstone/gemfire/internal/cache/PartitionedRegionDestroyDUnitTest.java index e5a95cdb78e4..498203d1e493 100644 --- a/geode-core/src/test/java/com/gemstone/gemfire/internal/cache/PartitionedRegionDestroyDUnitTest.java +++ b/geode-core/src/test/java/com/gemstone/gemfire/internal/cache/PartitionedRegionDestroyDUnitTest.java @@ -40,7 +40,6 @@ /** * This test aims to test the destroyRegion functionality. * - * @author rreja, Created on Jan 18, 2006 * * */ diff --git a/geode-core/src/test/java/com/gemstone/gemfire/internal/cache/PartitionedRegionEntryCountDUnitTest.java b/geode-core/src/test/java/com/gemstone/gemfire/internal/cache/PartitionedRegionEntryCountDUnitTest.java index 985656d42090..0f0583fb3686 100644 --- a/geode-core/src/test/java/com/gemstone/gemfire/internal/cache/PartitionedRegionEntryCountDUnitTest.java +++ b/geode-core/src/test/java/com/gemstone/gemfire/internal/cache/PartitionedRegionEntryCountDUnitTest.java @@ -32,7 +32,6 @@ /** * This class tests total entry count of partitioned regions. * - * @author Manish Jha * */ public class PartitionedRegionEntryCountDUnitTest extends CacheTestCase { diff --git a/geode-core/src/test/java/com/gemstone/gemfire/internal/cache/PartitionedRegionHADUnitTest.java b/geode-core/src/test/java/com/gemstone/gemfire/internal/cache/PartitionedRegionHADUnitTest.java index 3f4edf19d5d6..1676177abcb1 100644 --- a/geode-core/src/test/java/com/gemstone/gemfire/internal/cache/PartitionedRegionHADUnitTest.java +++ b/geode-core/src/test/java/com/gemstone/gemfire/internal/cache/PartitionedRegionHADUnitTest.java @@ -46,7 +46,6 @@ import com.gemstone.gemfire.test.dunit.VM; /** - * @author tapshank, Created on Jan 17, 2006 * */ public class PartitionedRegionHADUnitTest extends PartitionedRegionDUnitTestCase diff --git a/geode-core/src/test/java/com/gemstone/gemfire/internal/cache/PartitionedRegionHAFailureAndRecoveryDUnitTest.java b/geode-core/src/test/java/com/gemstone/gemfire/internal/cache/PartitionedRegionHAFailureAndRecoveryDUnitTest.java index 69bebdfe93f2..f024ebbf77cd 100755 --- a/geode-core/src/test/java/com/gemstone/gemfire/internal/cache/PartitionedRegionHAFailureAndRecoveryDUnitTest.java +++ b/geode-core/src/test/java/com/gemstone/gemfire/internal/cache/PartitionedRegionHAFailureAndRecoveryDUnitTest.java @@ -50,7 +50,6 @@ * testMetaDataCleanupOnMultiplePRNodeFail - Test for PartitionedRegion metadata * cleanup for multiple failed nodes.
    * - * @author tnegi, modified by Tushar (for bug#35713) */ public class PartitionedRegionHAFailureAndRecoveryDUnitTest extends PartitionedRegionDUnitTestCase diff --git a/geode-core/src/test/java/com/gemstone/gemfire/internal/cache/PartitionedRegionHelperJUnitTest.java b/geode-core/src/test/java/com/gemstone/gemfire/internal/cache/PartitionedRegionHelperJUnitTest.java index 3ba5fc75382e..a90447887ffd 100644 --- a/geode-core/src/test/java/com/gemstone/gemfire/internal/cache/PartitionedRegionHelperJUnitTest.java +++ b/geode-core/src/test/java/com/gemstone/gemfire/internal/cache/PartitionedRegionHelperJUnitTest.java @@ -23,7 +23,6 @@ import junit.framework.TestCase; /** - * @author dsmith * */ @Category(UnitTest.class) diff --git a/geode-core/src/test/java/com/gemstone/gemfire/internal/cache/PartitionedRegionInvalidateDUnitTest.java b/geode-core/src/test/java/com/gemstone/gemfire/internal/cache/PartitionedRegionInvalidateDUnitTest.java index 4061a136ba87..6cd4f6a21bf0 100644 --- a/geode-core/src/test/java/com/gemstone/gemfire/internal/cache/PartitionedRegionInvalidateDUnitTest.java +++ b/geode-core/src/test/java/com/gemstone/gemfire/internal/cache/PartitionedRegionInvalidateDUnitTest.java @@ -34,7 +34,6 @@ /** * This tests invalidateRegion functionality on partitioned regions - * @author sbawaska * */ public class PartitionedRegionInvalidateDUnitTest extends diff --git a/geode-core/src/test/java/com/gemstone/gemfire/internal/cache/PartitionedRegionLocalMaxMemoryDUnitTest.java b/geode-core/src/test/java/com/gemstone/gemfire/internal/cache/PartitionedRegionLocalMaxMemoryDUnitTest.java index 28e1bfb03f37..d6693deff4fc 100755 --- a/geode-core/src/test/java/com/gemstone/gemfire/internal/cache/PartitionedRegionLocalMaxMemoryDUnitTest.java +++ b/geode-core/src/test/java/com/gemstone/gemfire/internal/cache/PartitionedRegionLocalMaxMemoryDUnitTest.java @@ -42,7 +42,6 @@ * This class is to test localMaxMemory property of partition region while * creation of bucket. * - * @author gthombar, modified by Tushar (for bug#35713) */ public class PartitionedRegionLocalMaxMemoryDUnitTest extends PartitionedRegionDUnitTestCase @@ -264,7 +263,6 @@ public void run2() /** * Object used for the put() operation as key and object - * @author gthombar */ static public class TestObject1 implements DataSerializable, Sizeable { diff --git a/geode-core/src/test/java/com/gemstone/gemfire/internal/cache/PartitionedRegionLocalMaxMemoryOffHeapDUnitTest.java b/geode-core/src/test/java/com/gemstone/gemfire/internal/cache/PartitionedRegionLocalMaxMemoryOffHeapDUnitTest.java index 85085876fa6c..b20445321fcf 100755 --- a/geode-core/src/test/java/com/gemstone/gemfire/internal/cache/PartitionedRegionLocalMaxMemoryOffHeapDUnitTest.java +++ b/geode-core/src/test/java/com/gemstone/gemfire/internal/cache/PartitionedRegionLocalMaxMemoryOffHeapDUnitTest.java @@ -28,7 +28,6 @@ /** * Tests PartitionedRegion localMaxMemory with Off-Heap memory. * - * @author Kirk Lund * @since 9.0 */ @SuppressWarnings({ "deprecation", "serial" }) diff --git a/geode-core/src/test/java/com/gemstone/gemfire/internal/cache/PartitionedRegionMultipleDUnitTest.java b/geode-core/src/test/java/com/gemstone/gemfire/internal/cache/PartitionedRegionMultipleDUnitTest.java index 22d1fd71dd41..aca9ff1ba96b 100644 --- a/geode-core/src/test/java/com/gemstone/gemfire/internal/cache/PartitionedRegionMultipleDUnitTest.java +++ b/geode-core/src/test/java/com/gemstone/gemfire/internal/cache/PartitionedRegionMultipleDUnitTest.java @@ -30,7 +30,6 @@ /** * This test is dunit test for the multiple Partition Regions in 4 VMs. * - * @author gthombar, modified by Tushar (for bug#35713) * */ public class PartitionedRegionMultipleDUnitTest extends diff --git a/geode-core/src/test/java/com/gemstone/gemfire/internal/cache/PartitionedRegionPRIDDUnitTest.java b/geode-core/src/test/java/com/gemstone/gemfire/internal/cache/PartitionedRegionPRIDDUnitTest.java index f35b39a8b229..01e6a1b7cf83 100755 --- a/geode-core/src/test/java/com/gemstone/gemfire/internal/cache/PartitionedRegionPRIDDUnitTest.java +++ b/geode-core/src/test/java/com/gemstone/gemfire/internal/cache/PartitionedRegionPRIDDUnitTest.java @@ -32,7 +32,6 @@ /** * - * @author gthombar This class tests PRID generation in multiple partiton * regions on 4 VMs */ public class PartitionedRegionPRIDDUnitTest extends diff --git a/geode-core/src/test/java/com/gemstone/gemfire/internal/cache/PartitionedRegionQueryDUnitTest.java b/geode-core/src/test/java/com/gemstone/gemfire/internal/cache/PartitionedRegionQueryDUnitTest.java index 42b34ddd85cd..4c284dacc9df 100644 --- a/geode-core/src/test/java/com/gemstone/gemfire/internal/cache/PartitionedRegionQueryDUnitTest.java +++ b/geode-core/src/test/java/com/gemstone/gemfire/internal/cache/PartitionedRegionQueryDUnitTest.java @@ -67,7 +67,6 @@ import com.gemstone.gemfire.test.dunit.VM; /** - * @author dsmith * */ public class PartitionedRegionQueryDUnitTest extends CacheTestCase { diff --git a/geode-core/src/test/java/com/gemstone/gemfire/internal/cache/PartitionedRegionQueryEvaluatorJUnitTest.java b/geode-core/src/test/java/com/gemstone/gemfire/internal/cache/PartitionedRegionQueryEvaluatorJUnitTest.java index 2d30073e0314..bc8bda261618 100644 --- a/geode-core/src/test/java/com/gemstone/gemfire/internal/cache/PartitionedRegionQueryEvaluatorJUnitTest.java +++ b/geode-core/src/test/java/com/gemstone/gemfire/internal/cache/PartitionedRegionQueryEvaluatorJUnitTest.java @@ -47,7 +47,6 @@ /** * This class is junit test for PartitionedRegionQueryEvaluator class. - * @author rreja */ @Category(IntegrationTest.class) public class PartitionedRegionQueryEvaluatorJUnitTest diff --git a/geode-core/src/test/java/com/gemstone/gemfire/internal/cache/PartitionedRegionSerializableObjectJUnitTest.java b/geode-core/src/test/java/com/gemstone/gemfire/internal/cache/PartitionedRegionSerializableObjectJUnitTest.java index 53c219fcfb1e..1b2205e3cca9 100755 --- a/geode-core/src/test/java/com/gemstone/gemfire/internal/cache/PartitionedRegionSerializableObjectJUnitTest.java +++ b/geode-core/src/test/java/com/gemstone/gemfire/internal/cache/PartitionedRegionSerializableObjectJUnitTest.java @@ -21,7 +21,6 @@ * operations simutaneously on that single region. Object used while putting in * region is serializable. * - * @author gthombar */ import java.util.*; diff --git a/geode-core/src/test/java/com/gemstone/gemfire/internal/cache/PartitionedRegionSingleHopWithServerGroupDUnitTest.java b/geode-core/src/test/java/com/gemstone/gemfire/internal/cache/PartitionedRegionSingleHopWithServerGroupDUnitTest.java index 5c9e643fa2b8..a69fd55e3c6a 100644 --- a/geode-core/src/test/java/com/gemstone/gemfire/internal/cache/PartitionedRegionSingleHopWithServerGroupDUnitTest.java +++ b/geode-core/src/test/java/com/gemstone/gemfire/internal/cache/PartitionedRegionSingleHopWithServerGroupDUnitTest.java @@ -62,7 +62,6 @@ import java.util.StringTokenizer; /** - * @author skumar * */ public class PartitionedRegionSingleHopWithServerGroupDUnitTest extends CacheTestCase{ diff --git a/geode-core/src/test/java/com/gemstone/gemfire/internal/cache/PartitionedRegionSingleNodeOperationsJUnitTest.java b/geode-core/src/test/java/com/gemstone/gemfire/internal/cache/PartitionedRegionSingleNodeOperationsJUnitTest.java index e4f01ee84229..beec9c602694 100644 --- a/geode-core/src/test/java/com/gemstone/gemfire/internal/cache/PartitionedRegionSingleNodeOperationsJUnitTest.java +++ b/geode-core/src/test/java/com/gemstone/gemfire/internal/cache/PartitionedRegionSingleNodeOperationsJUnitTest.java @@ -60,7 +60,6 @@ * (1) testPut() - Tests teh put() functionality for the partitioned region. *

    * - * @author tapshank, modified by tnegi * */ @FixMethodOrder(MethodSorters.NAME_ASCENDING) diff --git a/geode-core/src/test/java/com/gemstone/gemfire/internal/cache/PartitionedRegionSizeDUnitTest.java b/geode-core/src/test/java/com/gemstone/gemfire/internal/cache/PartitionedRegionSizeDUnitTest.java index cda653ae6894..c4e4780763b8 100644 --- a/geode-core/src/test/java/com/gemstone/gemfire/internal/cache/PartitionedRegionSizeDUnitTest.java +++ b/geode-core/src/test/java/com/gemstone/gemfire/internal/cache/PartitionedRegionSizeDUnitTest.java @@ -46,7 +46,6 @@ * Redundancy (Scope DIST_ACK, Redundancy 1 AND Scope DIST_NO_ACK, Redundancy * 0). * - * @author tapshank, Created on March 03, 2006 * */ public class PartitionedRegionSizeDUnitTest extends diff --git a/geode-core/src/test/java/com/gemstone/gemfire/internal/cache/PartitionedRegionStatsDUnitTest.java b/geode-core/src/test/java/com/gemstone/gemfire/internal/cache/PartitionedRegionStatsDUnitTest.java index 2a9a040f4bb5..79a52a92eb65 100644 --- a/geode-core/src/test/java/com/gemstone/gemfire/internal/cache/PartitionedRegionStatsDUnitTest.java +++ b/geode-core/src/test/java/com/gemstone/gemfire/internal/cache/PartitionedRegionStatsDUnitTest.java @@ -38,7 +38,6 @@ import com.gemstone.gemfire.test.dunit.WaitCriterion; /** - * @author tapshank, Created on Jan 19, 2006 * */ public class PartitionedRegionStatsDUnitTest extends diff --git a/geode-core/src/test/java/com/gemstone/gemfire/internal/cache/PartitionedRegionStatsJUnitTest.java b/geode-core/src/test/java/com/gemstone/gemfire/internal/cache/PartitionedRegionStatsJUnitTest.java index c24adb71b2e8..089d7239fb2f 100644 --- a/geode-core/src/test/java/com/gemstone/gemfire/internal/cache/PartitionedRegionStatsJUnitTest.java +++ b/geode-core/src/test/java/com/gemstone/gemfire/internal/cache/PartitionedRegionStatsJUnitTest.java @@ -48,7 +48,6 @@ import com.gemstone.gemfire.test.junit.categories.IntegrationTest; /** - * @author tapshank, Created on Apr 13, 2006 * */ @Category(IntegrationTest.class) diff --git a/geode-core/src/test/java/com/gemstone/gemfire/internal/cache/PartitionedRegionTestHelper.java b/geode-core/src/test/java/com/gemstone/gemfire/internal/cache/PartitionedRegionTestHelper.java index 002c9b9a6d6c..d4b489acbb93 100644 --- a/geode-core/src/test/java/com/gemstone/gemfire/internal/cache/PartitionedRegionTestHelper.java +++ b/geode-core/src/test/java/com/gemstone/gemfire/internal/cache/PartitionedRegionTestHelper.java @@ -43,7 +43,6 @@ /** * This helper class is used by other test. This has functions to create region. * - * @author tnegi, modified by tapshank, modified by gthombar * */ diff --git a/geode-core/src/test/java/com/gemstone/gemfire/internal/cache/PartitionedRegionTestUtilsDUnitTest.java b/geode-core/src/test/java/com/gemstone/gemfire/internal/cache/PartitionedRegionTestUtilsDUnitTest.java index 0690a6dc9ebf..1daa4991dd34 100644 --- a/geode-core/src/test/java/com/gemstone/gemfire/internal/cache/PartitionedRegionTestUtilsDUnitTest.java +++ b/geode-core/src/test/java/com/gemstone/gemfire/internal/cache/PartitionedRegionTestUtilsDUnitTest.java @@ -44,7 +44,6 @@ /** * Confirm that the utils used for testing work as advertised * @since 5.0 - * @author mthomas * */ public class PartitionedRegionTestUtilsDUnitTest extends diff --git a/geode-core/src/test/java/com/gemstone/gemfire/internal/cache/PartitionedRegionWithSameNameDUnitTest.java b/geode-core/src/test/java/com/gemstone/gemfire/internal/cache/PartitionedRegionWithSameNameDUnitTest.java index d8eaf9c3d4db..a8ce5af30bcd 100644 --- a/geode-core/src/test/java/com/gemstone/gemfire/internal/cache/PartitionedRegionWithSameNameDUnitTest.java +++ b/geode-core/src/test/java/com/gemstone/gemfire/internal/cache/PartitionedRegionWithSameNameDUnitTest.java @@ -44,7 +44,6 @@ import com.gemstone.gemfire.test.dunit.VM; /** - * @author gthombar This test is to verify creation of partition region and * distributed region with same name. */ public class PartitionedRegionWithSameNameDUnitTest extends diff --git a/geode-core/src/test/java/com/gemstone/gemfire/internal/cache/PutAllDAckDUnitTest.java b/geode-core/src/test/java/com/gemstone/gemfire/internal/cache/PutAllDAckDUnitTest.java index ba8fd6648733..d72704075492 100644 --- a/geode-core/src/test/java/com/gemstone/gemfire/internal/cache/PutAllDAckDUnitTest.java +++ b/geode-core/src/test/java/com/gemstone/gemfire/internal/cache/PutAllDAckDUnitTest.java @@ -46,7 +46,6 @@ /** * - * @author vjadhav */ public class PutAllDAckDUnitTest extends DistributedTestCase { diff --git a/geode-core/src/test/java/com/gemstone/gemfire/internal/cache/PutAllGlobalDUnitTest.java b/geode-core/src/test/java/com/gemstone/gemfire/internal/cache/PutAllGlobalDUnitTest.java index 8326ec59168f..5c77b872f755 100644 --- a/geode-core/src/test/java/com/gemstone/gemfire/internal/cache/PutAllGlobalDUnitTest.java +++ b/geode-core/src/test/java/com/gemstone/gemfire/internal/cache/PutAllGlobalDUnitTest.java @@ -56,7 +56,6 @@ /** * - * @author vjadhav */ public class PutAllGlobalDUnitTest extends DistributedTestCase { /** diff --git a/geode-core/src/test/java/com/gemstone/gemfire/internal/cache/RegionEntryFlagsJUnitTest.java b/geode-core/src/test/java/com/gemstone/gemfire/internal/cache/RegionEntryFlagsJUnitTest.java index 9bc194f2c810..c2795cf341d0 100644 --- a/geode-core/src/test/java/com/gemstone/gemfire/internal/cache/RegionEntryFlagsJUnitTest.java +++ b/geode-core/src/test/java/com/gemstone/gemfire/internal/cache/RegionEntryFlagsJUnitTest.java @@ -42,7 +42,6 @@ * boolean flags in AbstractRegionEntry. * Currently a byte array is used to maintain two flags. * - * @author shobhit * */ @Category(IntegrationTest.class) diff --git a/geode-core/src/test/java/com/gemstone/gemfire/internal/cache/RemoteTransactionCCEDUnitTest.java b/geode-core/src/test/java/com/gemstone/gemfire/internal/cache/RemoteTransactionCCEDUnitTest.java index 3fe4ff74cf5d..3f5830e13d98 100644 --- a/geode-core/src/test/java/com/gemstone/gemfire/internal/cache/RemoteTransactionCCEDUnitTest.java +++ b/geode-core/src/test/java/com/gemstone/gemfire/internal/cache/RemoteTransactionCCEDUnitTest.java @@ -18,7 +18,6 @@ /** * - * @author sbawaska */ public class RemoteTransactionCCEDUnitTest extends RemoteTransactionDUnitTest { diff --git a/geode-core/src/test/java/com/gemstone/gemfire/internal/cache/RemoteTransactionDUnitTest.java b/geode-core/src/test/java/com/gemstone/gemfire/internal/cache/RemoteTransactionDUnitTest.java index 81b2a73d250b..e2ba3831a930 100644 --- a/geode-core/src/test/java/com/gemstone/gemfire/internal/cache/RemoteTransactionDUnitTest.java +++ b/geode-core/src/test/java/com/gemstone/gemfire/internal/cache/RemoteTransactionDUnitTest.java @@ -107,7 +107,6 @@ import com.gemstone.gemfire.test.dunit.WaitCriterion; /** - * @author sbawaska * */ public class RemoteTransactionDUnitTest extends CacheTestCase { diff --git a/geode-core/src/test/java/com/gemstone/gemfire/internal/cache/RemoveAllDAckDUnitTest.java b/geode-core/src/test/java/com/gemstone/gemfire/internal/cache/RemoveAllDAckDUnitTest.java index 5f51cbd9cf4d..e4ed3f00f4da 100644 --- a/geode-core/src/test/java/com/gemstone/gemfire/internal/cache/RemoveAllDAckDUnitTest.java +++ b/geode-core/src/test/java/com/gemstone/gemfire/internal/cache/RemoveAllDAckDUnitTest.java @@ -44,7 +44,6 @@ /** * Adapted from RemoveAllDAckDUnitTest - * @author darrel */ public class RemoveAllDAckDUnitTest extends DistributedTestCase { diff --git a/geode-core/src/test/java/com/gemstone/gemfire/internal/cache/RemoveDAckDUnitTest.java b/geode-core/src/test/java/com/gemstone/gemfire/internal/cache/RemoveDAckDUnitTest.java index 5f60779181da..7dbe4485f5a0 100644 --- a/geode-core/src/test/java/com/gemstone/gemfire/internal/cache/RemoveDAckDUnitTest.java +++ b/geode-core/src/test/java/com/gemstone/gemfire/internal/cache/RemoveDAckDUnitTest.java @@ -40,7 +40,6 @@ /** * - * @author vjadhav */ public class RemoveDAckDUnitTest extends DistributedTestCase { diff --git a/geode-core/src/test/java/com/gemstone/gemfire/internal/cache/RemoveGlobalDUnitTest.java b/geode-core/src/test/java/com/gemstone/gemfire/internal/cache/RemoveGlobalDUnitTest.java index c25c24d4b0cc..cbdbeefeae37 100644 --- a/geode-core/src/test/java/com/gemstone/gemfire/internal/cache/RemoveGlobalDUnitTest.java +++ b/geode-core/src/test/java/com/gemstone/gemfire/internal/cache/RemoveGlobalDUnitTest.java @@ -46,7 +46,6 @@ /** * - * @author vjadhav */ public class RemoveGlobalDUnitTest extends DistributedTestCase { diff --git a/geode-core/src/test/java/com/gemstone/gemfire/internal/cache/SimpleDiskRegionJUnitTest.java b/geode-core/src/test/java/com/gemstone/gemfire/internal/cache/SimpleDiskRegionJUnitTest.java index 2f1411971483..030033188ce6 100755 --- a/geode-core/src/test/java/com/gemstone/gemfire/internal/cache/SimpleDiskRegionJUnitTest.java +++ b/geode-core/src/test/java/com/gemstone/gemfire/internal/cache/SimpleDiskRegionJUnitTest.java @@ -40,7 +40,6 @@ /** * Testing methods for SimpleDiskRegion.java api's * - * @author Mitul Bid * @since 5.1 * */ diff --git a/geode-core/src/test/java/com/gemstone/gemfire/internal/cache/SizingFlagDUnitTest.java b/geode-core/src/test/java/com/gemstone/gemfire/internal/cache/SizingFlagDUnitTest.java index 90360ef19e09..14b1a7296fa0 100644 --- a/geode-core/src/test/java/com/gemstone/gemfire/internal/cache/SizingFlagDUnitTest.java +++ b/geode-core/src/test/java/com/gemstone/gemfire/internal/cache/SizingFlagDUnitTest.java @@ -57,7 +57,6 @@ * the actual size of objects wrapped in CacheDeserializables. * * - * @author dsmith * * TODO - I was intending to add tests that have an * index and object sizer, but it appears we don't support diff --git a/geode-core/src/test/java/com/gemstone/gemfire/internal/cache/SystemFailureDUnitTest.java b/geode-core/src/test/java/com/gemstone/gemfire/internal/cache/SystemFailureDUnitTest.java index 43fc6a5976fe..57c6fbea1202 100644 --- a/geode-core/src/test/java/com/gemstone/gemfire/internal/cache/SystemFailureDUnitTest.java +++ b/geode-core/src/test/java/com/gemstone/gemfire/internal/cache/SystemFailureDUnitTest.java @@ -39,7 +39,6 @@ * This class tests the response of GemFire to various * occurrences of {@link VirtualMachineError} * - * @author jpenney * @since 5.1 */ public class SystemFailureDUnitTest extends DistributedCacheTestCase { @@ -254,7 +253,6 @@ public void _testUnknownError() /** * This class can never be successfully loaded. * - * @author jpenney */ static class SickoClass { static private boolean threeCardMonte() { diff --git a/geode-core/src/test/java/com/gemstone/gemfire/internal/cache/TXManagerImplJUnitTest.java b/geode-core/src/test/java/com/gemstone/gemfire/internal/cache/TXManagerImplJUnitTest.java index a92d4dc52392..d24cf649dd52 100644 --- a/geode-core/src/test/java/com/gemstone/gemfire/internal/cache/TXManagerImplJUnitTest.java +++ b/geode-core/src/test/java/com/gemstone/gemfire/internal/cache/TXManagerImplJUnitTest.java @@ -45,7 +45,6 @@ /** * junit test for suspend and resume methods - * @author sbawaska */ @Category(IntegrationTest.class) public class TXManagerImplJUnitTest { diff --git a/geode-core/src/test/java/com/gemstone/gemfire/internal/cache/TestHelperForHydraTests.java b/geode-core/src/test/java/com/gemstone/gemfire/internal/cache/TestHelperForHydraTests.java index ad923a9a5e4a..733c4f82d33a 100755 --- a/geode-core/src/test/java/com/gemstone/gemfire/internal/cache/TestHelperForHydraTests.java +++ b/geode-core/src/test/java/com/gemstone/gemfire/internal/cache/TestHelperForHydraTests.java @@ -18,7 +18,6 @@ /** * This is utility class for hydra tests. * This class is used to set the values of parameters of internal classes which have local visibility. - * @author prafulla * */ diff --git a/geode-core/src/test/java/com/gemstone/gemfire/internal/cache/TestNonSizerObject.java b/geode-core/src/test/java/com/gemstone/gemfire/internal/cache/TestNonSizerObject.java index 9cedbf091134..81e6455d2a3e 100644 --- a/geode-core/src/test/java/com/gemstone/gemfire/internal/cache/TestNonSizerObject.java +++ b/geode-core/src/test/java/com/gemstone/gemfire/internal/cache/TestNonSizerObject.java @@ -21,7 +21,6 @@ /** * Test object which does not implement ObjectSizer, used as Key/Value in put operation. * - * @author arajpal * */ public class TestNonSizerObject implements Serializable { diff --git a/geode-core/src/test/java/com/gemstone/gemfire/internal/cache/TestObjectSizerImpl.java b/geode-core/src/test/java/com/gemstone/gemfire/internal/cache/TestObjectSizerImpl.java index 3ecb65fb62e9..f982ad325883 100644 --- a/geode-core/src/test/java/com/gemstone/gemfire/internal/cache/TestObjectSizerImpl.java +++ b/geode-core/src/test/java/com/gemstone/gemfire/internal/cache/TestObjectSizerImpl.java @@ -24,7 +24,6 @@ * Test object which implements ObjectSizer, used as Key/Value in put operation * as well as used as a Sizer for HeapLru testing. * - * @author arajpal * */ public class TestObjectSizerImpl implements ObjectSizer, Serializable { diff --git a/geode-core/src/test/java/com/gemstone/gemfire/internal/cache/TestUtils.java b/geode-core/src/test/java/com/gemstone/gemfire/internal/cache/TestUtils.java index b19ab38b5b90..3526eb72e719 100644 --- a/geode-core/src/test/java/com/gemstone/gemfire/internal/cache/TestUtils.java +++ b/geode-core/src/test/java/com/gemstone/gemfire/internal/cache/TestUtils.java @@ -21,7 +21,6 @@ import java.util.Set; /** - * @author dsmith * */ public class TestUtils { diff --git a/geode-core/src/test/java/com/gemstone/gemfire/internal/cache/TransactionsWithDeltaDUnitTest.java b/geode-core/src/test/java/com/gemstone/gemfire/internal/cache/TransactionsWithDeltaDUnitTest.java index fdb7ada80b01..3f556e520311 100644 --- a/geode-core/src/test/java/com/gemstone/gemfire/internal/cache/TransactionsWithDeltaDUnitTest.java +++ b/geode-core/src/test/java/com/gemstone/gemfire/internal/cache/TransactionsWithDeltaDUnitTest.java @@ -55,7 +55,6 @@ import java.util.Iterator; /** - * @author sbawaska * */ public class TransactionsWithDeltaDUnitTest extends CacheTestCase { diff --git a/geode-core/src/test/java/com/gemstone/gemfire/internal/cache/UnzipUtil.java b/geode-core/src/test/java/com/gemstone/gemfire/internal/cache/UnzipUtil.java index 8091c80687a9..dc128d3751ac 100644 --- a/geode-core/src/test/java/com/gemstone/gemfire/internal/cache/UnzipUtil.java +++ b/geode-core/src/test/java/com/gemstone/gemfire/internal/cache/UnzipUtil.java @@ -30,7 +30,6 @@ /** * Utility methods for unzipping a file. Used for backwards compatibility * test for gateway queue to handle checked in test code. - * @author dsmith * */ public class UnzipUtil { diff --git a/geode-core/src/test/java/com/gemstone/gemfire/internal/cache/UpdateVersionJUnitTest.java b/geode-core/src/test/java/com/gemstone/gemfire/internal/cache/UpdateVersionJUnitTest.java index b37cebbdb9cf..99d3973beb69 100644 --- a/geode-core/src/test/java/com/gemstone/gemfire/internal/cache/UpdateVersionJUnitTest.java +++ b/geode-core/src/test/java/com/gemstone/gemfire/internal/cache/UpdateVersionJUnitTest.java @@ -43,7 +43,6 @@ * correctly on it after various other operations have been applied on it * (Including destroy when entry is a {@link Tombstone}). * - * @author Shobhit Agarwal * @since 7.0.1 * */ diff --git a/geode-core/src/test/java/com/gemstone/gemfire/internal/cache/VLJUnitTest.java b/geode-core/src/test/java/com/gemstone/gemfire/internal/cache/VLJUnitTest.java index 253b2ccd8910..11aaa77024f4 100644 --- a/geode-core/src/test/java/com/gemstone/gemfire/internal/cache/VLJUnitTest.java +++ b/geode-core/src/test/java/com/gemstone/gemfire/internal/cache/VLJUnitTest.java @@ -33,7 +33,6 @@ /** * Test for the new variable length format - * @author dsmith * * TODO these tests need some work. I don't think they really represent * edge cases for this variable length value. diff --git a/geode-core/src/test/java/com/gemstone/gemfire/internal/cache/control/FilterByPathJUnitTest.java b/geode-core/src/test/java/com/gemstone/gemfire/internal/cache/control/FilterByPathJUnitTest.java index edb67a8a40ed..3fa2024e6e56 100644 --- a/geode-core/src/test/java/com/gemstone/gemfire/internal/cache/control/FilterByPathJUnitTest.java +++ b/geode-core/src/test/java/com/gemstone/gemfire/internal/cache/control/FilterByPathJUnitTest.java @@ -29,7 +29,6 @@ import junit.framework.TestCase; /** - * @author dsmith * */ @Category(UnitTest.class) diff --git a/geode-core/src/test/java/com/gemstone/gemfire/internal/cache/control/MemoryMonitorJUnitTest.java b/geode-core/src/test/java/com/gemstone/gemfire/internal/cache/control/MemoryMonitorJUnitTest.java index 48366b77a04f..f4a058810411 100644 --- a/geode-core/src/test/java/com/gemstone/gemfire/internal/cache/control/MemoryMonitorJUnitTest.java +++ b/geode-core/src/test/java/com/gemstone/gemfire/internal/cache/control/MemoryMonitorJUnitTest.java @@ -52,7 +52,6 @@ import com.gemstone.gemfire.test.junit.categories.IntegrationTest; /** - * @author sbawaska * */ @Category(IntegrationTest.class) diff --git a/geode-core/src/test/java/com/gemstone/gemfire/internal/cache/control/MemoryMonitorOffHeapJUnitTest.java b/geode-core/src/test/java/com/gemstone/gemfire/internal/cache/control/MemoryMonitorOffHeapJUnitTest.java index bf8be0a9655d..893bebec6528 100644 --- a/geode-core/src/test/java/com/gemstone/gemfire/internal/cache/control/MemoryMonitorOffHeapJUnitTest.java +++ b/geode-core/src/test/java/com/gemstone/gemfire/internal/cache/control/MemoryMonitorOffHeapJUnitTest.java @@ -44,7 +44,6 @@ import com.gemstone.gemfire.test.junit.categories.IntegrationTest; /** - * @author David Hoots */ @Category(IntegrationTest.class) public class MemoryMonitorOffHeapJUnitTest { diff --git a/geode-core/src/test/java/com/gemstone/gemfire/internal/cache/control/RebalanceOperationDUnitTest.java b/geode-core/src/test/java/com/gemstone/gemfire/internal/cache/control/RebalanceOperationDUnitTest.java index f7275b73e37f..20d6316a2439 100644 --- a/geode-core/src/test/java/com/gemstone/gemfire/internal/cache/control/RebalanceOperationDUnitTest.java +++ b/geode-core/src/test/java/com/gemstone/gemfire/internal/cache/control/RebalanceOperationDUnitTest.java @@ -85,7 +85,6 @@ import com.gemstone.gemfire.test.dunit.WaitCriterion; /** - * @author dsmith * */ @SuppressWarnings("synthetic-access") diff --git a/geode-core/src/test/java/com/gemstone/gemfire/internal/cache/diskPerf/DiskRegionOverflowAsyncRollingOpLogJUnitTest.java b/geode-core/src/test/java/com/gemstone/gemfire/internal/cache/diskPerf/DiskRegionOverflowAsyncRollingOpLogJUnitTest.java index 5f0a249da06a..b014cb262561 100755 --- a/geode-core/src/test/java/com/gemstone/gemfire/internal/cache/diskPerf/DiskRegionOverflowAsyncRollingOpLogJUnitTest.java +++ b/geode-core/src/test/java/com/gemstone/gemfire/internal/cache/diskPerf/DiskRegionOverflowAsyncRollingOpLogJUnitTest.java @@ -38,7 +38,6 @@ * Performance of Get operation for Entry faulting in from previous Op Log 3) * Performance of Get operation for Entry faulting in from H Tree * - * @author Vikram Jadhav * */ @Category(IntegrationTest.class) diff --git a/geode-core/src/test/java/com/gemstone/gemfire/internal/cache/execute/LocalDataSetIndexingDUnitTest.java b/geode-core/src/test/java/com/gemstone/gemfire/internal/cache/execute/LocalDataSetIndexingDUnitTest.java index 1d933e3631f2..0ef42d05c114 100644 --- a/geode-core/src/test/java/com/gemstone/gemfire/internal/cache/execute/LocalDataSetIndexingDUnitTest.java +++ b/geode-core/src/test/java/com/gemstone/gemfire/internal/cache/execute/LocalDataSetIndexingDUnitTest.java @@ -72,7 +72,6 @@ /** * - * @author ymahajan * */ public class LocalDataSetIndexingDUnitTest extends CacheTestCase { diff --git a/geode-core/src/test/java/com/gemstone/gemfire/internal/cache/execute/OnGroupsFunctionExecutionDUnitTest.java b/geode-core/src/test/java/com/gemstone/gemfire/internal/cache/execute/OnGroupsFunctionExecutionDUnitTest.java index 3cc34d8f5cb0..f96c2e107f67 100644 --- a/geode-core/src/test/java/com/gemstone/gemfire/internal/cache/execute/OnGroupsFunctionExecutionDUnitTest.java +++ b/geode-core/src/test/java/com/gemstone/gemfire/internal/cache/execute/OnGroupsFunctionExecutionDUnitTest.java @@ -55,7 +55,6 @@ /** * - * @author sbawaska */ public class OnGroupsFunctionExecutionDUnitTest extends DistributedTestCase { diff --git a/geode-core/src/test/java/com/gemstone/gemfire/internal/cache/execute/PRClientServerRegionFunctionExecutionDUnitTest.java b/geode-core/src/test/java/com/gemstone/gemfire/internal/cache/execute/PRClientServerRegionFunctionExecutionDUnitTest.java index 0104e7a43500..a826b577763d 100755 --- a/geode-core/src/test/java/com/gemstone/gemfire/internal/cache/execute/PRClientServerRegionFunctionExecutionDUnitTest.java +++ b/geode-core/src/test/java/com/gemstone/gemfire/internal/cache/execute/PRClientServerRegionFunctionExecutionDUnitTest.java @@ -1536,7 +1536,6 @@ public boolean hasResult() { /** * This class can be serialized but its deserialization will always fail - * @author darrel * */ private static class UnDeserializable implements DataSerializable { diff --git a/geode-core/src/test/java/com/gemstone/gemfire/internal/cache/execute/PRColocationDUnitTest.java b/geode-core/src/test/java/com/gemstone/gemfire/internal/cache/execute/PRColocationDUnitTest.java index 839d78c4e2db..d18d670f6768 100755 --- a/geode-core/src/test/java/com/gemstone/gemfire/internal/cache/execute/PRColocationDUnitTest.java +++ b/geode-core/src/test/java/com/gemstone/gemfire/internal/cache/execute/PRColocationDUnitTest.java @@ -74,7 +74,6 @@ * This is the test for the custom and colocated partitioning of * PartitionedRegion * - * @author Kishor */ @SuppressWarnings("synthetic-access") public class PRColocationDUnitTest extends CacheTestCase { diff --git a/geode-core/src/test/java/com/gemstone/gemfire/internal/cache/execute/PRTransactionDUnitTest.java b/geode-core/src/test/java/com/gemstone/gemfire/internal/cache/execute/PRTransactionDUnitTest.java index 15cf7530b467..cbd97d99e7d4 100644 --- a/geode-core/src/test/java/com/gemstone/gemfire/internal/cache/execute/PRTransactionDUnitTest.java +++ b/geode-core/src/test/java/com/gemstone/gemfire/internal/cache/execute/PRTransactionDUnitTest.java @@ -52,7 +52,6 @@ * Test for co-located PR transactions. * the test creates two data hosts and uses function execution to * execute transactions. - * @author sbawaska * */ public class PRTransactionDUnitTest extends PRColocationDUnitTest { diff --git a/geode-core/src/test/java/com/gemstone/gemfire/internal/cache/extension/SimpleExtensionPointJUnitTest.java b/geode-core/src/test/java/com/gemstone/gemfire/internal/cache/extension/SimpleExtensionPointJUnitTest.java index 5372be1e1e7c..5d0ee56ed114 100644 --- a/geode-core/src/test/java/com/gemstone/gemfire/internal/cache/extension/SimpleExtensionPointJUnitTest.java +++ b/geode-core/src/test/java/com/gemstone/gemfire/internal/cache/extension/SimpleExtensionPointJUnitTest.java @@ -31,7 +31,6 @@ /** * Unit tests for {@link SimpleExtensionPoint}. * - * @author jbarrett@pivotal.io * * @since 8.1 */ diff --git a/geode-core/src/test/java/com/gemstone/gemfire/internal/cache/extension/mock/AbstractMockExtension.java b/geode-core/src/test/java/com/gemstone/gemfire/internal/cache/extension/mock/AbstractMockExtension.java index a175f7c88f5e..2be704723750 100644 --- a/geode-core/src/test/java/com/gemstone/gemfire/internal/cache/extension/mock/AbstractMockExtension.java +++ b/geode-core/src/test/java/com/gemstone/gemfire/internal/cache/extension/mock/AbstractMockExtension.java @@ -26,7 +26,6 @@ /** * Base class for Mock Extension. * - * @author jbarrett@pivotal.io * * @since 8.1 */ diff --git a/geode-core/src/test/java/com/gemstone/gemfire/internal/cache/extension/mock/AbstractMockExtensionXmlGenerator.java b/geode-core/src/test/java/com/gemstone/gemfire/internal/cache/extension/mock/AbstractMockExtensionXmlGenerator.java index 6c9e1a882c8f..e28dda72fa8d 100644 --- a/geode-core/src/test/java/com/gemstone/gemfire/internal/cache/extension/mock/AbstractMockExtensionXmlGenerator.java +++ b/geode-core/src/test/java/com/gemstone/gemfire/internal/cache/extension/mock/AbstractMockExtensionXmlGenerator.java @@ -22,7 +22,6 @@ /** * Base class for Mock Extension XML Generators. * - * @author jbarrett@pivotal.io * * @since 8.1 */ diff --git a/geode-core/src/test/java/com/gemstone/gemfire/internal/cache/extension/mock/AlterMockCacheExtensionFunction.java b/geode-core/src/test/java/com/gemstone/gemfire/internal/cache/extension/mock/AlterMockCacheExtensionFunction.java index 6d4def6c4a87..fc38630a1640 100644 --- a/geode-core/src/test/java/com/gemstone/gemfire/internal/cache/extension/mock/AlterMockCacheExtensionFunction.java +++ b/geode-core/src/test/java/com/gemstone/gemfire/internal/cache/extension/mock/AlterMockCacheExtensionFunction.java @@ -37,7 +37,6 @@ /** * Function to create {@link MockCacheExtension} on a {@link Region}. * - * @author jbarrett@pivotal.io * * @since 8.1 */ diff --git a/geode-core/src/test/java/com/gemstone/gemfire/internal/cache/extension/mock/AlterMockRegionExtensionFunction.java b/geode-core/src/test/java/com/gemstone/gemfire/internal/cache/extension/mock/AlterMockRegionExtensionFunction.java index 2b0fc79a32a1..fce61ca19965 100644 --- a/geode-core/src/test/java/com/gemstone/gemfire/internal/cache/extension/mock/AlterMockRegionExtensionFunction.java +++ b/geode-core/src/test/java/com/gemstone/gemfire/internal/cache/extension/mock/AlterMockRegionExtensionFunction.java @@ -48,7 +48,6 @@ * * * - * @author jbarrett@pivotal.io * * @since 8.1 */ diff --git a/geode-core/src/test/java/com/gemstone/gemfire/internal/cache/extension/mock/CreateMockCacheExtensionFunction.java b/geode-core/src/test/java/com/gemstone/gemfire/internal/cache/extension/mock/CreateMockCacheExtensionFunction.java index c750712c5c3e..8b2e2ade0b30 100644 --- a/geode-core/src/test/java/com/gemstone/gemfire/internal/cache/extension/mock/CreateMockCacheExtensionFunction.java +++ b/geode-core/src/test/java/com/gemstone/gemfire/internal/cache/extension/mock/CreateMockCacheExtensionFunction.java @@ -36,7 +36,6 @@ /** * Function to create {@link MockCacheExtension} on a {@link Region}. * - * @author jbarrett@pivotal.io * * @since 8.1 */ diff --git a/geode-core/src/test/java/com/gemstone/gemfire/internal/cache/extension/mock/CreateMockRegionExtensionFunction.java b/geode-core/src/test/java/com/gemstone/gemfire/internal/cache/extension/mock/CreateMockRegionExtensionFunction.java index 684238db115a..6d015edd3e0b 100644 --- a/geode-core/src/test/java/com/gemstone/gemfire/internal/cache/extension/mock/CreateMockRegionExtensionFunction.java +++ b/geode-core/src/test/java/com/gemstone/gemfire/internal/cache/extension/mock/CreateMockRegionExtensionFunction.java @@ -47,7 +47,6 @@ * * * - * @author jbarrett@pivotal.io * * @since 8.1 */ diff --git a/geode-core/src/test/java/com/gemstone/gemfire/internal/cache/extension/mock/DestroyMockCacheExtensionFunction.java b/geode-core/src/test/java/com/gemstone/gemfire/internal/cache/extension/mock/DestroyMockCacheExtensionFunction.java index e0256402d434..048001714c03 100644 --- a/geode-core/src/test/java/com/gemstone/gemfire/internal/cache/extension/mock/DestroyMockCacheExtensionFunction.java +++ b/geode-core/src/test/java/com/gemstone/gemfire/internal/cache/extension/mock/DestroyMockCacheExtensionFunction.java @@ -37,7 +37,6 @@ /** * Function to create {@link MockCacheExtension} on a {@link Region}. * - * @author jbarrett@pivotal.io * * @since 8.1 */ diff --git a/geode-core/src/test/java/com/gemstone/gemfire/internal/cache/extension/mock/DestroyMockRegionExtensionFunction.java b/geode-core/src/test/java/com/gemstone/gemfire/internal/cache/extension/mock/DestroyMockRegionExtensionFunction.java index 6b7a7496255d..e4fa939b575c 100644 --- a/geode-core/src/test/java/com/gemstone/gemfire/internal/cache/extension/mock/DestroyMockRegionExtensionFunction.java +++ b/geode-core/src/test/java/com/gemstone/gemfire/internal/cache/extension/mock/DestroyMockRegionExtensionFunction.java @@ -46,7 +46,6 @@ * * * - * @author jbarrett@pivotal.io * * @since 8.1 */ diff --git a/geode-core/src/test/java/com/gemstone/gemfire/internal/cache/extension/mock/MockCacheExtension.java b/geode-core/src/test/java/com/gemstone/gemfire/internal/cache/extension/mock/MockCacheExtension.java index 05c221a5a324..5b626b383e35 100644 --- a/geode-core/src/test/java/com/gemstone/gemfire/internal/cache/extension/mock/MockCacheExtension.java +++ b/geode-core/src/test/java/com/gemstone/gemfire/internal/cache/extension/mock/MockCacheExtension.java @@ -30,7 +30,6 @@ *
    {@link com.gemstone.gemfire.cache30.CacheXml81DUnitTest}
    * * - * @author jbarrett@pivotal.io * * @since 8.1 */ diff --git a/geode-core/src/test/java/com/gemstone/gemfire/internal/cache/extension/mock/MockCacheExtensionXmlGenerator.java b/geode-core/src/test/java/com/gemstone/gemfire/internal/cache/extension/mock/MockCacheExtensionXmlGenerator.java index f939538472e9..8384f4c7aaf1 100644 --- a/geode-core/src/test/java/com/gemstone/gemfire/internal/cache/extension/mock/MockCacheExtensionXmlGenerator.java +++ b/geode-core/src/test/java/com/gemstone/gemfire/internal/cache/extension/mock/MockCacheExtensionXmlGenerator.java @@ -31,7 +31,6 @@ /** * {@link MockCacheExtension} {@link XmlGenerator}. * - * @author jbarrett@pivotal.io * * @since 8.1 */ diff --git a/geode-core/src/test/java/com/gemstone/gemfire/internal/cache/extension/mock/MockExtensionCommands.java b/geode-core/src/test/java/com/gemstone/gemfire/internal/cache/extension/mock/MockExtensionCommands.java index 3c1d4a398a39..4a08ebcca0a3 100644 --- a/geode-core/src/test/java/com/gemstone/gemfire/internal/cache/extension/mock/MockExtensionCommands.java +++ b/geode-core/src/test/java/com/gemstone/gemfire/internal/cache/extension/mock/MockExtensionCommands.java @@ -43,7 +43,6 @@ /** * Mock Extension gfsh commands. * - * @author jbarrett@pivotal.io * * @since 8.1 */ diff --git a/geode-core/src/test/java/com/gemstone/gemfire/internal/cache/extension/mock/MockExtensionXmlParser.java b/geode-core/src/test/java/com/gemstone/gemfire/internal/cache/extension/mock/MockExtensionXmlParser.java index 5794526fbc5c..01f8b0a9cd62 100644 --- a/geode-core/src/test/java/com/gemstone/gemfire/internal/cache/extension/mock/MockExtensionXmlParser.java +++ b/geode-core/src/test/java/com/gemstone/gemfire/internal/cache/extension/mock/MockExtensionXmlParser.java @@ -31,7 +31,6 @@ /** * Mock Extension {@link XmlParser}. * - * @author jbarrett@pivotal.io * * @since 8.1 */ diff --git a/geode-core/src/test/java/com/gemstone/gemfire/internal/cache/extension/mock/MockRegionExtension.java b/geode-core/src/test/java/com/gemstone/gemfire/internal/cache/extension/mock/MockRegionExtension.java index 4a8d40e4c7fe..ddad7c125532 100644 --- a/geode-core/src/test/java/com/gemstone/gemfire/internal/cache/extension/mock/MockRegionExtension.java +++ b/geode-core/src/test/java/com/gemstone/gemfire/internal/cache/extension/mock/MockRegionExtension.java @@ -24,7 +24,6 @@ /** * Mock Extension for {@link Region}. * - * @author jbarrett@pivotal.io * * @since 8.1 */ diff --git a/geode-core/src/test/java/com/gemstone/gemfire/internal/cache/extension/mock/MockRegionExtensionXmlGenerator.java b/geode-core/src/test/java/com/gemstone/gemfire/internal/cache/extension/mock/MockRegionExtensionXmlGenerator.java index a2e49a037ef1..64cb9edcd40a 100644 --- a/geode-core/src/test/java/com/gemstone/gemfire/internal/cache/extension/mock/MockRegionExtensionXmlGenerator.java +++ b/geode-core/src/test/java/com/gemstone/gemfire/internal/cache/extension/mock/MockRegionExtensionXmlGenerator.java @@ -31,7 +31,6 @@ /** * {@link MockRegionExtension} {@link XmlGenerator}. * - * @author jbarrett@pivotal.io * * @since 8.1 */ diff --git a/geode-core/src/test/java/com/gemstone/gemfire/internal/cache/ha/BlockingHARQAddOperationJUnitTest.java b/geode-core/src/test/java/com/gemstone/gemfire/internal/cache/ha/BlockingHARQAddOperationJUnitTest.java index f29939193b69..3498d651b04a 100755 --- a/geode-core/src/test/java/com/gemstone/gemfire/internal/cache/ha/BlockingHARQAddOperationJUnitTest.java +++ b/geode-core/src/test/java/com/gemstone/gemfire/internal/cache/ha/BlockingHARQAddOperationJUnitTest.java @@ -39,7 +39,6 @@ * Test runs all tests of HARQAddOperationJUnitTest using BlockingHARegionQueue * instead of HARegionQueue * - * @author Suyog Bhokare * */ @Category(IntegrationTest.class) @@ -104,7 +103,6 @@ public void testBlockingTakeConflationDisabled() throws Exception * * @throws Exception * - * @author Dinesh Patel */ @Test public void testBlockingTakeConflationEnabled() throws Exception @@ -129,7 +127,6 @@ public void testBlockingTakeConflationEnabled() throws Exception * whether conflation is enabled or not * @throws Exception * - * @author Dinesh Patel */ public void doBlockingTake(boolean conflationEnabled) throws Exception { @@ -182,7 +179,6 @@ public void run() * * @throws Exception * - * @author Dinesh Patel */ @Test public void testConcurrentBlockingTake() throws Exception diff --git a/geode-core/src/test/java/com/gemstone/gemfire/internal/cache/ha/BlockingHARQStatsJUnitTest.java b/geode-core/src/test/java/com/gemstone/gemfire/internal/cache/ha/BlockingHARQStatsJUnitTest.java index a597c6f0c846..7d778b5a3e47 100755 --- a/geode-core/src/test/java/com/gemstone/gemfire/internal/cache/ha/BlockingHARQStatsJUnitTest.java +++ b/geode-core/src/test/java/com/gemstone/gemfire/internal/cache/ha/BlockingHARQStatsJUnitTest.java @@ -27,7 +27,6 @@ * Test runs all tests of HARegionQueueStatsJUnitTest using * BlockingHARegionQueue instead of HARegionQueue * - * @author Dinesh Patel * */ @Category(IntegrationTest.class) diff --git a/geode-core/src/test/java/com/gemstone/gemfire/internal/cache/ha/BlockingHARegionJUnitTest.java b/geode-core/src/test/java/com/gemstone/gemfire/internal/cache/ha/BlockingHARegionJUnitTest.java index 9e7923968598..4b36b79647af 100755 --- a/geode-core/src/test/java/com/gemstone/gemfire/internal/cache/ha/BlockingHARegionJUnitTest.java +++ b/geode-core/src/test/java/com/gemstone/gemfire/internal/cache/ha/BlockingHARegionJUnitTest.java @@ -405,7 +405,6 @@ public void run() /** * class which does specified number of puts on the queue - * @author mbid * */ static class DoPuts extends Thread @@ -450,7 +449,6 @@ public void run() /** * class which does a specified number of takes - * @author mbid * */ static class DoTake extends Thread diff --git a/geode-core/src/test/java/com/gemstone/gemfire/internal/cache/ha/BlockingHARegionQueueJUnitTest.java b/geode-core/src/test/java/com/gemstone/gemfire/internal/cache/ha/BlockingHARegionQueueJUnitTest.java index 5d7a581bca36..ffb47714cd77 100755 --- a/geode-core/src/test/java/com/gemstone/gemfire/internal/cache/ha/BlockingHARegionQueueJUnitTest.java +++ b/geode-core/src/test/java/com/gemstone/gemfire/internal/cache/ha/BlockingHARegionQueueJUnitTest.java @@ -35,7 +35,6 @@ * Test runs all tests of HARegionQueueJUnitTest using BlockingHARegionQueue * instead of HARegionQueue. * - * @author Suyog Bhokare * */ @Category(IntegrationTest.class) @@ -80,7 +79,6 @@ protected HARegionQueue createHARegionQueue(String name, * Tests the effect of a put which is blocked because of capacity constraint & * subsequent passage because of take operation * - * @author ashahid */ @Test public void testBlockingPutAndTake() diff --git a/geode-core/src/test/java/com/gemstone/gemfire/internal/cache/ha/Bug36853EventsExpiryDUnitTest.java b/geode-core/src/test/java/com/gemstone/gemfire/internal/cache/ha/Bug36853EventsExpiryDUnitTest.java index cee0304b3110..42e418af322b 100755 --- a/geode-core/src/test/java/com/gemstone/gemfire/internal/cache/ha/Bug36853EventsExpiryDUnitTest.java +++ b/geode-core/src/test/java/com/gemstone/gemfire/internal/cache/ha/Bug36853EventsExpiryDUnitTest.java @@ -54,7 +54,6 @@ * expire before dispatcher can start picking them up for delivery to the * client. * - * @author Dinesh Patel * */ public class Bug36853EventsExpiryDUnitTest extends CacheTestCase diff --git a/geode-core/src/test/java/com/gemstone/gemfire/internal/cache/ha/ConflatableObject.java b/geode-core/src/test/java/com/gemstone/gemfire/internal/cache/ha/ConflatableObject.java index ada6aa253cc9..648ca9dc371b 100755 --- a/geode-core/src/test/java/com/gemstone/gemfire/internal/cache/ha/ConflatableObject.java +++ b/geode-core/src/test/java/com/gemstone/gemfire/internal/cache/ha/ConflatableObject.java @@ -25,7 +25,6 @@ * Implementing class for Conflatable interface. Objects of this * class will be add to the queue * - * @author Dinesh Patel * */ public class ConflatableObject implements Conflatable, Serializable diff --git a/geode-core/src/test/java/com/gemstone/gemfire/internal/cache/ha/EventIdOptimizationDUnitTest.java b/geode-core/src/test/java/com/gemstone/gemfire/internal/cache/ha/EventIdOptimizationDUnitTest.java index b4fbc5865931..9497f3f71a53 100755 --- a/geode-core/src/test/java/com/gemstone/gemfire/internal/cache/ha/EventIdOptimizationDUnitTest.java +++ b/geode-core/src/test/java/com/gemstone/gemfire/internal/cache/ha/EventIdOptimizationDUnitTest.java @@ -62,7 +62,6 @@ * It is verified that client-2 recieves the same values for thread-id and * sequence-id. * - * @author Dinesh Patel * */ public class EventIdOptimizationDUnitTest extends DistributedTestCase diff --git a/geode-core/src/test/java/com/gemstone/gemfire/internal/cache/ha/EventIdOptimizationJUnitTest.java b/geode-core/src/test/java/com/gemstone/gemfire/internal/cache/ha/EventIdOptimizationJUnitTest.java index 8db90833005f..2b81cb4711a7 100755 --- a/geode-core/src/test/java/com/gemstone/gemfire/internal/cache/ha/EventIdOptimizationJUnitTest.java +++ b/geode-core/src/test/java/com/gemstone/gemfire/internal/cache/ha/EventIdOptimizationJUnitTest.java @@ -35,7 +35,6 @@ * For distributed testing for the same , please refer * {@link EventIdOptimizationDUnitTest}. * - * @author Dinesh Patel * */ @Category(UnitTest.class) diff --git a/geode-core/src/test/java/com/gemstone/gemfire/internal/cache/ha/FailoverDUnitTest.java b/geode-core/src/test/java/com/gemstone/gemfire/internal/cache/ha/FailoverDUnitTest.java index 90e9703fc6e0..2f98712d699e 100755 --- a/geode-core/src/test/java/com/gemstone/gemfire/internal/cache/ha/FailoverDUnitTest.java +++ b/geode-core/src/test/java/com/gemstone/gemfire/internal/cache/ha/FailoverDUnitTest.java @@ -55,7 +55,6 @@ * Do some puts on S1 .The expiry is on high side. Stop S1 , the client is failing to S2.During fail over duration do some * puts on S1. The client on failing to S2 may receive duplicate events but should not miss any events. * - * @author Suyog Bhokare * */ public class FailoverDUnitTest extends DistributedTestCase diff --git a/geode-core/src/test/java/com/gemstone/gemfire/internal/cache/ha/HABugInPutDUnitTest.java b/geode-core/src/test/java/com/gemstone/gemfire/internal/cache/ha/HABugInPutDUnitTest.java index 4adb2a82739e..1375b957d633 100755 --- a/geode-core/src/test/java/com/gemstone/gemfire/internal/cache/ha/HABugInPutDUnitTest.java +++ b/geode-core/src/test/java/com/gemstone/gemfire/internal/cache/ha/HABugInPutDUnitTest.java @@ -44,7 +44,6 @@ * and NotifyBySubscription is false then it follows normal path and then again calls put of region * on which regionqueue is based. so recurssion is happening. * - * @author Girish Thombare */ public class HABugInPutDUnitTest extends DistributedTestCase diff --git a/geode-core/src/test/java/com/gemstone/gemfire/internal/cache/ha/HAClearDUnitTest.java b/geode-core/src/test/java/com/gemstone/gemfire/internal/cache/ha/HAClearDUnitTest.java index bb2ca69819de..59fe0ab776da 100755 --- a/geode-core/src/test/java/com/gemstone/gemfire/internal/cache/ha/HAClearDUnitTest.java +++ b/geode-core/src/test/java/com/gemstone/gemfire/internal/cache/ha/HAClearDUnitTest.java @@ -48,7 +48,6 @@ * This is the Dunit test to verify clear and destroyRegion operation in * Client-Server configuration. * - * @author Girish Thombare * */ diff --git a/geode-core/src/test/java/com/gemstone/gemfire/internal/cache/ha/HAConflationDUnitTest.java b/geode-core/src/test/java/com/gemstone/gemfire/internal/cache/ha/HAConflationDUnitTest.java index 212a79873613..9f1e656a179e 100755 --- a/geode-core/src/test/java/com/gemstone/gemfire/internal/cache/ha/HAConflationDUnitTest.java +++ b/geode-core/src/test/java/com/gemstone/gemfire/internal/cache/ha/HAConflationDUnitTest.java @@ -56,7 +56,6 @@ * and one for the invalidate. * 4) Do a create , update , update & destroy. The client should receive 3 callbacks ( craete , conflated update & destroy). * - * @author Girish Thombare. * */ diff --git a/geode-core/src/test/java/com/gemstone/gemfire/internal/cache/ha/HADuplicateDUnitTest.java b/geode-core/src/test/java/com/gemstone/gemfire/internal/cache/ha/HADuplicateDUnitTest.java index 1d18390d99ad..320c34d4f55e 100755 --- a/geode-core/src/test/java/com/gemstone/gemfire/internal/cache/ha/HADuplicateDUnitTest.java +++ b/geode-core/src/test/java/com/gemstone/gemfire/internal/cache/ha/HADuplicateDUnitTest.java @@ -52,7 +52,6 @@ * 3. Stop the server1 so that fail over happens * 4. Validate the duplicates received by the client1 * - * @author Girish Thombare * */ diff --git a/geode-core/src/test/java/com/gemstone/gemfire/internal/cache/ha/HAEventIdPropagationDUnitTest.java b/geode-core/src/test/java/com/gemstone/gemfire/internal/cache/ha/HAEventIdPropagationDUnitTest.java index 4753fb738f78..bdcf62f4b773 100755 --- a/geode-core/src/test/java/com/gemstone/gemfire/internal/cache/ha/HAEventIdPropagationDUnitTest.java +++ b/geode-core/src/test/java/com/gemstone/gemfire/internal/cache/ha/HAEventIdPropagationDUnitTest.java @@ -59,7 +59,6 @@ * * Test to verify correct propagation of EventID from server to client * - * @author Mitul Bid * @since 5.1 */ diff --git a/geode-core/src/test/java/com/gemstone/gemfire/internal/cache/ha/HAExpiryDUnitTest.java b/geode-core/src/test/java/com/gemstone/gemfire/internal/cache/ha/HAExpiryDUnitTest.java index 4ef9dc00d135..2c558de89da9 100755 --- a/geode-core/src/test/java/com/gemstone/gemfire/internal/cache/ha/HAExpiryDUnitTest.java +++ b/geode-core/src/test/java/com/gemstone/gemfire/internal/cache/ha/HAExpiryDUnitTest.java @@ -50,7 +50,6 @@ * 4. Waits for the period which is slightly greater than expiration period. * 5. Checks size of the regionqueue. Size of the regionqueue should be equal to 0. * - * @author Girish Thombare */ public class HAExpiryDUnitTest extends DistributedTestCase diff --git a/geode-core/src/test/java/com/gemstone/gemfire/internal/cache/ha/HAGIIBugDUnitTest.java b/geode-core/src/test/java/com/gemstone/gemfire/internal/cache/ha/HAGIIBugDUnitTest.java index 4a24378e742c..c48e3ad8da5e 100755 --- a/geode-core/src/test/java/com/gemstone/gemfire/internal/cache/ha/HAGIIBugDUnitTest.java +++ b/geode-core/src/test/java/com/gemstone/gemfire/internal/cache/ha/HAGIIBugDUnitTest.java @@ -55,7 +55,6 @@ * 4. Start vm1 and create HARegion Queue asynchronously and notify vm0 after its creation * 5. Put the data from vm0 asynchronously till HARegion Queue gets created in vm1. * 6. Validate the data. Puts happened during GII should be missed. - * @author Girish Thombare * */ diff --git a/geode-core/src/test/java/com/gemstone/gemfire/internal/cache/ha/HAGIIDUnitTest.java b/geode-core/src/test/java/com/gemstone/gemfire/internal/cache/ha/HAGIIDUnitTest.java index 4439e65dfa31..e6440c30bbdb 100755 --- a/geode-core/src/test/java/com/gemstone/gemfire/internal/cache/ha/HAGIIDUnitTest.java +++ b/geode-core/src/test/java/com/gemstone/gemfire/internal/cache/ha/HAGIIDUnitTest.java @@ -62,7 +62,6 @@ * and made available for the client. After that , S1 's server is stopped. The client fails over to * S2. The client should receive all the puts . These puts have arrived on S2 via GII of HARegion. * - * @author Suyog Bhokare * */ diff --git a/geode-core/src/test/java/com/gemstone/gemfire/internal/cache/ha/HAHelper.java b/geode-core/src/test/java/com/gemstone/gemfire/internal/cache/ha/HAHelper.java index 30234fa05055..c47cf4579a43 100755 --- a/geode-core/src/test/java/com/gemstone/gemfire/internal/cache/ha/HAHelper.java +++ b/geode-core/src/test/java/com/gemstone/gemfire/internal/cache/ha/HAHelper.java @@ -23,7 +23,6 @@ /** * Helper class to access the required functions of this package from * outside the package. - * @author Girish Thombare */ public class HAHelper diff --git a/geode-core/src/test/java/com/gemstone/gemfire/internal/cache/ha/HARQAddOperationJUnitTest.java b/geode-core/src/test/java/com/gemstone/gemfire/internal/cache/ha/HARQAddOperationJUnitTest.java index ad649d37c26d..00a906c1b303 100755 --- a/geode-core/src/test/java/com/gemstone/gemfire/internal/cache/ha/HARQAddOperationJUnitTest.java +++ b/geode-core/src/test/java/com/gemstone/gemfire/internal/cache/ha/HARQAddOperationJUnitTest.java @@ -53,8 +53,6 @@ /** * Test to verify Add operation to HARegion Queue with and without conflation. * - * @author Yogesh Mahajan - * @author Dinesh Patel */ @Category(IntegrationTest.class) diff --git a/geode-core/src/test/java/com/gemstone/gemfire/internal/cache/ha/HARQueueNewImplDUnitTest.java b/geode-core/src/test/java/com/gemstone/gemfire/internal/cache/ha/HARQueueNewImplDUnitTest.java index 91aeb980893a..689cd2182bf1 100755 --- a/geode-core/src/test/java/com/gemstone/gemfire/internal/cache/ha/HARQueueNewImplDUnitTest.java +++ b/geode-core/src/test/java/com/gemstone/gemfire/internal/cache/ha/HARQueueNewImplDUnitTest.java @@ -66,7 +66,6 @@ * This DUnit contains various tests to ensure new implementation of ha region * queues works as expected. * - * @author ashetkar * @since 5.7 * */ diff --git a/geode-core/src/test/java/com/gemstone/gemfire/internal/cache/ha/HARegionDUnitTest.java b/geode-core/src/test/java/com/gemstone/gemfire/internal/cache/ha/HARegionDUnitTest.java index 91f2ea541a33..136826e89a77 100755 --- a/geode-core/src/test/java/com/gemstone/gemfire/internal/cache/ha/HARegionDUnitTest.java +++ b/geode-core/src/test/java/com/gemstone/gemfire/internal/cache/ha/HARegionDUnitTest.java @@ -40,7 +40,6 @@ * 1)put() on a mirrored HARegion does not propagate 2)localDestroy() allowed on * a mirrored region 3) GII happens normally * - * @author Mitul Bid * */ public class HARegionDUnitTest extends DistributedTestCase diff --git a/geode-core/src/test/java/com/gemstone/gemfire/internal/cache/ha/HARegionJUnitTest.java b/geode-core/src/test/java/com/gemstone/gemfire/internal/cache/ha/HARegionJUnitTest.java index c1e021275c65..ffb0c02596c4 100755 --- a/geode-core/src/test/java/com/gemstone/gemfire/internal/cache/ha/HARegionJUnitTest.java +++ b/geode-core/src/test/java/com/gemstone/gemfire/internal/cache/ha/HARegionJUnitTest.java @@ -55,7 +55,6 @@ * Test verifies the properties of a HARegion which allows localPuts and * localDestroys on a MirroredRegion * - * @author Mitul Bid * */ @Category(IntegrationTest.class) diff --git a/geode-core/src/test/java/com/gemstone/gemfire/internal/cache/ha/HARegionQueueDUnitTest.java b/geode-core/src/test/java/com/gemstone/gemfire/internal/cache/ha/HARegionQueueDUnitTest.java index cf31493d594b..7a8b04c6cf30 100755 --- a/geode-core/src/test/java/com/gemstone/gemfire/internal/cache/ha/HARegionQueueDUnitTest.java +++ b/geode-core/src/test/java/com/gemstone/gemfire/internal/cache/ha/HARegionQueueDUnitTest.java @@ -53,8 +53,6 @@ /** * * - * @author Mitul Bid - * @author Asif * * */ @@ -655,7 +653,6 @@ public static void destroy() * take/remove occuring in all the VMs. This test is targetted to test for * hang or exceptions in non blocking queue. * - * @author Asif * */ public void testConcurrentOperationsDunitTestOnNonBlockingQueue() @@ -669,7 +666,6 @@ public void testConcurrentOperationsDunitTestOnNonBlockingQueue() * take/remove occuring in all the VMs. This test is targetted to test for * hang or exceptions in non blocking queue. * - * @author Asif * */ public void testConcurrentOperationsDunitTestOnNonBlockingQueueWithDNoAckRegion() @@ -683,7 +679,6 @@ public void testConcurrentOperationsDunitTestOnNonBlockingQueueWithDNoAckRegion( * take/remove occuring in all the VMs. This test is targetted to test for * hang or exceptions in blocking queue. * - * @author Asif * */ public void testConcurrentOperationsDunitTestOnBlockingQueue() @@ -870,7 +865,6 @@ public void run2() throws CacheException * been fully constructed but as the HARegion has got constructed , it gets * visible to QRM Message Thread. * - * @author Asif * */ public void testNPEDueToHARegionQueueEscapeInConstructor() diff --git a/geode-core/src/test/java/com/gemstone/gemfire/internal/cache/ha/HARegionQueueJUnitTest.java b/geode-core/src/test/java/com/gemstone/gemfire/internal/cache/ha/HARegionQueueJUnitTest.java index 48da63047189..b7fae408211f 100755 --- a/geode-core/src/test/java/com/gemstone/gemfire/internal/cache/ha/HARegionQueueJUnitTest.java +++ b/geode-core/src/test/java/com/gemstone/gemfire/internal/cache/ha/HARegionQueueJUnitTest.java @@ -61,9 +61,6 @@ * This is a test for the APIs of a HARegionQueue and verifies that the head, * tail and size counters are updated properly. * - * @author Dinesh Patel - * @author Mitul Bid - * @author Asif * * */ @@ -485,7 +482,6 @@ private synchronized int getCounter() /** * Thread to perform PUTs into the queue * - * @author Dinesh Patel * */ class Producer extends Thread @@ -1080,7 +1076,6 @@ public void testConflation() * Conflation Map. The events which are of ID greater than that contained in * QRM should stay * - * @author Asif */ @Test public void testQRM() @@ -1880,7 +1875,6 @@ public void run() * removing from availabel IDs , there is a potential violation. This test * will validate that behaviour * - * @author Asif * */ @Test @@ -1976,7 +1970,6 @@ public void afterInvalidate(EntryEvent event) { * This test validates that if sequence violation occurs without GII,the put * will throw an exception * - * @author Asif * * Test is commented as assertion for sequence violation is removed in the * source(HARegionQueue.putObject) is removed. - Suyog @@ -2032,7 +2025,6 @@ public void _testExceptionInPutForSequenceViolationWithoutGII() { * Tests the functionality of batch peek & remove with blocking & non blocking * HARegionQueue * - * @author Asif */ @Test public void testBatchPeekWithRemoveForNonBlockingQueue() @@ -2045,7 +2037,6 @@ public void testBatchPeekWithRemoveForNonBlockingQueue() * Tests the functionality of batch peek & remove with blocking & non blocking * HARegionQueue * - * @author Asif */ @Test public void testBatchPeekWithRemoveForBlockingQueue() diff --git a/geode-core/src/test/java/com/gemstone/gemfire/internal/cache/ha/HARegionQueueStartStopJUnitTest.java b/geode-core/src/test/java/com/gemstone/gemfire/internal/cache/ha/HARegionQueueStartStopJUnitTest.java index 649d2b9a4477..6dc2d9fd124c 100755 --- a/geode-core/src/test/java/com/gemstone/gemfire/internal/cache/ha/HARegionQueueStartStopJUnitTest.java +++ b/geode-core/src/test/java/com/gemstone/gemfire/internal/cache/ha/HARegionQueueStartStopJUnitTest.java @@ -38,7 +38,6 @@ import com.gemstone.gemfire.test.junit.categories.IntegrationTest; /** - * @author Mitul Bid * */ @Category(IntegrationTest.class) diff --git a/geode-core/src/test/java/com/gemstone/gemfire/internal/cache/ha/HARegionQueueStatsJUnitTest.java b/geode-core/src/test/java/com/gemstone/gemfire/internal/cache/ha/HARegionQueueStatsJUnitTest.java index a4d924994e72..04a2f1f26e3d 100755 --- a/geode-core/src/test/java/com/gemstone/gemfire/internal/cache/ha/HARegionQueueStatsJUnitTest.java +++ b/geode-core/src/test/java/com/gemstone/gemfire/internal/cache/ha/HARegionQueueStatsJUnitTest.java @@ -40,7 +40,6 @@ * JUnit test for verifying the proper functioning of HARegionQueue related * statistics. * - * @author Dinesh Patel * */ @Category(IntegrationTest.class) diff --git a/geode-core/src/test/java/com/gemstone/gemfire/internal/cache/ha/PutAllDUnitTest.java b/geode-core/src/test/java/com/gemstone/gemfire/internal/cache/ha/PutAllDUnitTest.java index 7f9e79f79a10..ea5325b0fc5a 100755 --- a/geode-core/src/test/java/com/gemstone/gemfire/internal/cache/ha/PutAllDUnitTest.java +++ b/geode-core/src/test/java/com/gemstone/gemfire/internal/cache/ha/PutAllDUnitTest.java @@ -53,7 +53,6 @@ * Test to verify correct propagation of operations eventID's for put all * * - * @author Mitul Bid * @since 5.1 */ diff --git a/geode-core/src/test/java/com/gemstone/gemfire/internal/cache/ha/StatsBugDUnitTest.java b/geode-core/src/test/java/com/gemstone/gemfire/internal/cache/ha/StatsBugDUnitTest.java index f26311304b81..daf9a8d19d2e 100644 --- a/geode-core/src/test/java/com/gemstone/gemfire/internal/cache/ha/StatsBugDUnitTest.java +++ b/geode-core/src/test/java/com/gemstone/gemfire/internal/cache/ha/StatsBugDUnitTest.java @@ -52,7 +52,6 @@ * closed during fail over , with the failed endpoint getting closed. This bug * has been fixed by moving the invalidate stat to be part of our implementation. * - * @author Dinesh Patel * */ @Category(DistributedTest.class) diff --git a/geode-core/src/test/java/com/gemstone/gemfire/internal/cache/ha/TestBlockingHARegionQueue.java b/geode-core/src/test/java/com/gemstone/gemfire/internal/cache/ha/TestBlockingHARegionQueue.java index 505eea8017e1..d57290ab4cdb 100755 --- a/geode-core/src/test/java/com/gemstone/gemfire/internal/cache/ha/TestBlockingHARegionQueue.java +++ b/geode-core/src/test/java/com/gemstone/gemfire/internal/cache/ha/TestBlockingHARegionQueue.java @@ -27,7 +27,6 @@ * Test class for Blocking HA region queue functionalities * * - * @author Suyog Bhokare * */ diff --git a/geode-core/src/test/java/com/gemstone/gemfire/internal/cache/partitioned/Bug39356DUnitTest.java b/geode-core/src/test/java/com/gemstone/gemfire/internal/cache/partitioned/Bug39356DUnitTest.java index 0371df7d0977..f79694573d5b 100644 --- a/geode-core/src/test/java/com/gemstone/gemfire/internal/cache/partitioned/Bug39356DUnitTest.java +++ b/geode-core/src/test/java/com/gemstone/gemfire/internal/cache/partitioned/Bug39356DUnitTest.java @@ -48,7 +48,6 @@ /** - * @author dsmith * */ public class Bug39356DUnitTest extends CacheTestCase { diff --git a/geode-core/src/test/java/com/gemstone/gemfire/internal/cache/partitioned/Bug43684DUnitTest.java b/geode-core/src/test/java/com/gemstone/gemfire/internal/cache/partitioned/Bug43684DUnitTest.java index d2a5cc3d995e..673045f416df 100644 --- a/geode-core/src/test/java/com/gemstone/gemfire/internal/cache/partitioned/Bug43684DUnitTest.java +++ b/geode-core/src/test/java/com/gemstone/gemfire/internal/cache/partitioned/Bug43684DUnitTest.java @@ -45,7 +45,6 @@ * TODO This doesn't really test the optimised RI behaviour but only that RI * works. But there must be other tests doing the same. * - * @author ashetkar * */ @SuppressWarnings("serial") diff --git a/geode-core/src/test/java/com/gemstone/gemfire/internal/cache/partitioned/Bug47388DUnitTest.java b/geode-core/src/test/java/com/gemstone/gemfire/internal/cache/partitioned/Bug47388DUnitTest.java index 193a7ddb3ca9..77f39fc6cf16 100644 --- a/geode-core/src/test/java/com/gemstone/gemfire/internal/cache/partitioned/Bug47388DUnitTest.java +++ b/geode-core/src/test/java/com/gemstone/gemfire/internal/cache/partitioned/Bug47388DUnitTest.java @@ -56,7 +56,6 @@ * client and the secondary server does process the QRMs for the EXPIRE_DESTROY * events. * - * @author ashetkar * */ @SuppressWarnings("serial") diff --git a/geode-core/src/test/java/com/gemstone/gemfire/internal/cache/partitioned/Bug51400DUnitTest.java b/geode-core/src/test/java/com/gemstone/gemfire/internal/cache/partitioned/Bug51400DUnitTest.java index c7fffe40e29e..88e2d051dcda 100644 --- a/geode-core/src/test/java/com/gemstone/gemfire/internal/cache/partitioned/Bug51400DUnitTest.java +++ b/geode-core/src/test/java/com/gemstone/gemfire/internal/cache/partitioned/Bug51400DUnitTest.java @@ -44,7 +44,6 @@ /** * - * @author ashetkar * */ public class Bug51400DUnitTest extends DistributedTestCase { diff --git a/geode-core/src/test/java/com/gemstone/gemfire/internal/cache/partitioned/ElidedPutAllDUnitTest.java b/geode-core/src/test/java/com/gemstone/gemfire/internal/cache/partitioned/ElidedPutAllDUnitTest.java index 26103c9069a8..aa038336b211 100644 --- a/geode-core/src/test/java/com/gemstone/gemfire/internal/cache/partitioned/ElidedPutAllDUnitTest.java +++ b/geode-core/src/test/java/com/gemstone/gemfire/internal/cache/partitioned/ElidedPutAllDUnitTest.java @@ -42,7 +42,6 @@ /** - * @author bruce * */ public class ElidedPutAllDUnitTest extends CacheTestCase { diff --git a/geode-core/src/test/java/com/gemstone/gemfire/internal/cache/partitioned/OfflineMembersDetailsJUnitTest.java b/geode-core/src/test/java/com/gemstone/gemfire/internal/cache/partitioned/OfflineMembersDetailsJUnitTest.java index 9edac7ecc53f..b752d9c1bc24 100644 --- a/geode-core/src/test/java/com/gemstone/gemfire/internal/cache/partitioned/OfflineMembersDetailsJUnitTest.java +++ b/geode-core/src/test/java/com/gemstone/gemfire/internal/cache/partitioned/OfflineMembersDetailsJUnitTest.java @@ -34,7 +34,6 @@ import com.gemstone.gemfire.test.junit.categories.UnitTest; /** - * @author dsmith * */ @Category(UnitTest.class) diff --git a/geode-core/src/test/java/com/gemstone/gemfire/internal/cache/partitioned/PartitionResolverDUnitTest.java b/geode-core/src/test/java/com/gemstone/gemfire/internal/cache/partitioned/PartitionResolverDUnitTest.java index 1ba824ecae8f..411d97a3087b 100644 --- a/geode-core/src/test/java/com/gemstone/gemfire/internal/cache/partitioned/PartitionResolverDUnitTest.java +++ b/geode-core/src/test/java/com/gemstone/gemfire/internal/cache/partitioned/PartitionResolverDUnitTest.java @@ -52,7 +52,6 @@ /** * Verifies that the {@link com.gemstone.gemfire.cache.PartitionResolver} is called only once on a node, * and not called while local iteration. - * @author sbawaska * */ public class PartitionResolverDUnitTest extends CacheTestCase { diff --git a/geode-core/src/test/java/com/gemstone/gemfire/internal/cache/partitioned/PartitionedRegionLoadModelJUnitTest.java b/geode-core/src/test/java/com/gemstone/gemfire/internal/cache/partitioned/PartitionedRegionLoadModelJUnitTest.java index 4954cd2074ae..35e48bcc4b51 100644 --- a/geode-core/src/test/java/com/gemstone/gemfire/internal/cache/partitioned/PartitionedRegionLoadModelJUnitTest.java +++ b/geode-core/src/test/java/com/gemstone/gemfire/internal/cache/partitioned/PartitionedRegionLoadModelJUnitTest.java @@ -53,7 +53,6 @@ import com.gemstone.gemfire.test.junit.categories.UnitTest; /** - * @author dsmith * */ @SuppressWarnings("synthetic-access") diff --git a/geode-core/src/test/java/com/gemstone/gemfire/internal/cache/partitioned/PartitionedRegionMetaDataCleanupDUnitTest.java b/geode-core/src/test/java/com/gemstone/gemfire/internal/cache/partitioned/PartitionedRegionMetaDataCleanupDUnitTest.java index 99b4ba2f846e..31b6c4812a4e 100644 --- a/geode-core/src/test/java/com/gemstone/gemfire/internal/cache/partitioned/PartitionedRegionMetaDataCleanupDUnitTest.java +++ b/geode-core/src/test/java/com/gemstone/gemfire/internal/cache/partitioned/PartitionedRegionMetaDataCleanupDUnitTest.java @@ -30,7 +30,6 @@ import com.gemstone.gemfire.test.dunit.Wait; /** - * @author dsmith * */ public class PartitionedRegionMetaDataCleanupDUnitTest extends CacheTestCase { diff --git a/geode-core/src/test/java/com/gemstone/gemfire/internal/cache/partitioned/PersistPRKRFDUnitTest.java b/geode-core/src/test/java/com/gemstone/gemfire/internal/cache/partitioned/PersistPRKRFDUnitTest.java index d74a94ba43bf..641982f1cc74 100644 --- a/geode-core/src/test/java/com/gemstone/gemfire/internal/cache/partitioned/PersistPRKRFDUnitTest.java +++ b/geode-core/src/test/java/com/gemstone/gemfire/internal/cache/partitioned/PersistPRKRFDUnitTest.java @@ -36,7 +36,6 @@ /** * Tests the basic use cases for PR persistence. - * @author dsmith * */ public class PersistPRKRFDUnitTest extends PersistentPartitionedRegionTestBase { diff --git a/geode-core/src/test/java/com/gemstone/gemfire/internal/cache/partitioned/PersistentColocatedPartitionedRegionDUnitTest.java b/geode-core/src/test/java/com/gemstone/gemfire/internal/cache/partitioned/PersistentColocatedPartitionedRegionDUnitTest.java index 901d2d6c295d..152d63764b8c 100644 --- a/geode-core/src/test/java/com/gemstone/gemfire/internal/cache/partitioned/PersistentColocatedPartitionedRegionDUnitTest.java +++ b/geode-core/src/test/java/com/gemstone/gemfire/internal/cache/partitioned/PersistentColocatedPartitionedRegionDUnitTest.java @@ -54,7 +54,6 @@ import com.gemstone.gemfire.test.dunit.WaitCriterion; /** - * @author dsmith * */ public class PersistentColocatedPartitionedRegionDUnitTest extends diff --git a/geode-core/src/test/java/com/gemstone/gemfire/internal/cache/partitioned/PersistentPartitionedRegionDUnitTest.java b/geode-core/src/test/java/com/gemstone/gemfire/internal/cache/partitioned/PersistentPartitionedRegionDUnitTest.java index abf546dd8053..e970815bebcb 100644 --- a/geode-core/src/test/java/com/gemstone/gemfire/internal/cache/partitioned/PersistentPartitionedRegionDUnitTest.java +++ b/geode-core/src/test/java/com/gemstone/gemfire/internal/cache/partitioned/PersistentPartitionedRegionDUnitTest.java @@ -90,7 +90,6 @@ /** * Tests the basic use cases for PR persistence. - * @author dsmith * */ public class PersistentPartitionedRegionDUnitTest extends PersistentPartitionedRegionTestBase { diff --git a/geode-core/src/test/java/com/gemstone/gemfire/internal/cache/partitioned/PersistentPartitionedRegionOldConfigDUnitTest.java b/geode-core/src/test/java/com/gemstone/gemfire/internal/cache/partitioned/PersistentPartitionedRegionOldConfigDUnitTest.java index 5a41df04e2e7..3912b905d58d 100644 --- a/geode-core/src/test/java/com/gemstone/gemfire/internal/cache/partitioned/PersistentPartitionedRegionOldConfigDUnitTest.java +++ b/geode-core/src/test/java/com/gemstone/gemfire/internal/cache/partitioned/PersistentPartitionedRegionOldConfigDUnitTest.java @@ -23,7 +23,6 @@ import com.gemstone.gemfire.cache.RegionAttributes; /** - * @author dsmith * */ public class PersistentPartitionedRegionOldConfigDUnitTest extends diff --git a/geode-core/src/test/java/com/gemstone/gemfire/internal/cache/partitioned/PersistentPartitionedRegionTestBase.java b/geode-core/src/test/java/com/gemstone/gemfire/internal/cache/partitioned/PersistentPartitionedRegionTestBase.java index 3b8927155aee..786b135ec1ac 100644 --- a/geode-core/src/test/java/com/gemstone/gemfire/internal/cache/partitioned/PersistentPartitionedRegionTestBase.java +++ b/geode-core/src/test/java/com/gemstone/gemfire/internal/cache/partitioned/PersistentPartitionedRegionTestBase.java @@ -67,7 +67,6 @@ import com.gemstone.gemfire.test.dunit.WaitCriterion; /** - * @author dsmith * */ public abstract class PersistentPartitionedRegionTestBase extends CacheTestCase { diff --git a/geode-core/src/test/java/com/gemstone/gemfire/internal/cache/partitioned/PersistentPartitionedRegionWithTransactionDUnitTest.java b/geode-core/src/test/java/com/gemstone/gemfire/internal/cache/partitioned/PersistentPartitionedRegionWithTransactionDUnitTest.java index 90118d1e0edb..fbd725a4f274 100644 --- a/geode-core/src/test/java/com/gemstone/gemfire/internal/cache/partitioned/PersistentPartitionedRegionWithTransactionDUnitTest.java +++ b/geode-core/src/test/java/com/gemstone/gemfire/internal/cache/partitioned/PersistentPartitionedRegionWithTransactionDUnitTest.java @@ -30,7 +30,6 @@ /** * Tests the basic use cases for PR persistence. - * @author dsmith * */ public class PersistentPartitionedRegionWithTransactionDUnitTest extends PersistentPartitionedRegionTestBase { diff --git a/geode-core/src/test/java/com/gemstone/gemfire/internal/cache/partitioned/ShutdownAllDUnitTest.java b/geode-core/src/test/java/com/gemstone/gemfire/internal/cache/partitioned/ShutdownAllDUnitTest.java index cd68c35f3b18..5ea025bb625a 100644 --- a/geode-core/src/test/java/com/gemstone/gemfire/internal/cache/partitioned/ShutdownAllDUnitTest.java +++ b/geode-core/src/test/java/com/gemstone/gemfire/internal/cache/partitioned/ShutdownAllDUnitTest.java @@ -68,7 +68,6 @@ /** * Tests the basic use cases for PR persistence. - * @author xzhou * */ public class ShutdownAllDUnitTest extends CacheTestCase { diff --git a/geode-core/src/test/java/com/gemstone/gemfire/internal/cache/partitioned/fixed/FixedPartitioningDUnitTest.java b/geode-core/src/test/java/com/gemstone/gemfire/internal/cache/partitioned/fixed/FixedPartitioningDUnitTest.java index 100e444fcc12..c7136e351182 100644 --- a/geode-core/src/test/java/com/gemstone/gemfire/internal/cache/partitioned/fixed/FixedPartitioningDUnitTest.java +++ b/geode-core/src/test/java/com/gemstone/gemfire/internal/cache/partitioned/fixed/FixedPartitioningDUnitTest.java @@ -33,7 +33,6 @@ * This Dunit test class have multiple tests to tests different validations of * static partitioning * - * @author kbachhav * */ diff --git a/geode-core/src/test/java/com/gemstone/gemfire/internal/cache/persistence/BackupInspectorJUnitTest.java b/geode-core/src/test/java/com/gemstone/gemfire/internal/cache/persistence/BackupInspectorJUnitTest.java index 429a2d81140a..342dcf5ff567 100644 --- a/geode-core/src/test/java/com/gemstone/gemfire/internal/cache/persistence/BackupInspectorJUnitTest.java +++ b/geode-core/src/test/java/com/gemstone/gemfire/internal/cache/persistence/BackupInspectorJUnitTest.java @@ -46,7 +46,6 @@ * * Tests for the BackupInspector. * - * @author rholmes */ @Category(UnitTest.class) public class BackupInspectorJUnitTest { diff --git a/geode-core/src/test/java/com/gemstone/gemfire/internal/cache/persistence/PersistentRVVRecoveryDUnitTest.java b/geode-core/src/test/java/com/gemstone/gemfire/internal/cache/persistence/PersistentRVVRecoveryDUnitTest.java index ecaa1bafc381..7e0fb4479441 100644 --- a/geode-core/src/test/java/com/gemstone/gemfire/internal/cache/persistence/PersistentRVVRecoveryDUnitTest.java +++ b/geode-core/src/test/java/com/gemstone/gemfire/internal/cache/persistence/PersistentRVVRecoveryDUnitTest.java @@ -338,7 +338,6 @@ public void run2() throws CacheException { * At this point if entry version is greater than the once received from GII * then it must not get applied. Which is Bug #45921. * - * @author shobhit */ public void testConflictChecksDuringConcurrentDeltaGIIAndOtherOp() { Host host = Host.getHost(0); diff --git a/geode-core/src/test/java/com/gemstone/gemfire/internal/cache/persistence/PersistentRecoveryOrderDUnitTest.java b/geode-core/src/test/java/com/gemstone/gemfire/internal/cache/persistence/PersistentRecoveryOrderDUnitTest.java index f20762c2cacf..321fffe20e53 100644 --- a/geode-core/src/test/java/com/gemstone/gemfire/internal/cache/persistence/PersistentRecoveryOrderDUnitTest.java +++ b/geode-core/src/test/java/com/gemstone/gemfire/internal/cache/persistence/PersistentRecoveryOrderDUnitTest.java @@ -87,7 +87,6 @@ * multiple VMs are persisting the same region, they recover * with the latest data during recovery. * - * @author dsmith * */ public class PersistentRecoveryOrderDUnitTest extends PersistentReplicatedTestBase { diff --git a/geode-core/src/test/java/com/gemstone/gemfire/internal/cache/persistence/PersistentRecoveryOrderOldConfigDUnitTest.java b/geode-core/src/test/java/com/gemstone/gemfire/internal/cache/persistence/PersistentRecoveryOrderOldConfigDUnitTest.java index 20624fc0b2b1..bddf85dbf701 100644 --- a/geode-core/src/test/java/com/gemstone/gemfire/internal/cache/persistence/PersistentRecoveryOrderOldConfigDUnitTest.java +++ b/geode-core/src/test/java/com/gemstone/gemfire/internal/cache/persistence/PersistentRecoveryOrderOldConfigDUnitTest.java @@ -30,7 +30,6 @@ import com.gemstone.gemfire.test.dunit.VM; /** - * @author dsmith * */ public class PersistentRecoveryOrderOldConfigDUnitTest extends diff --git a/geode-core/src/test/java/com/gemstone/gemfire/internal/cache/tier/Bug40396DUnitTest.java b/geode-core/src/test/java/com/gemstone/gemfire/internal/cache/tier/Bug40396DUnitTest.java index b69c973fbcfc..888455c02d1f 100755 --- a/geode-core/src/test/java/com/gemstone/gemfire/internal/cache/tier/Bug40396DUnitTest.java +++ b/geode-core/src/test/java/com/gemstone/gemfire/internal/cache/tier/Bug40396DUnitTest.java @@ -37,7 +37,6 @@ import com.gemstone.gemfire.test.dunit.VM; /** * Test delta propagation for faulty delta implementation - * @author aingle * @since 6.1 */ public class Bug40396DUnitTest extends DistributedTestCase { diff --git a/geode-core/src/test/java/com/gemstone/gemfire/internal/cache/tier/sockets/BackwardCompatibilityHigherVersionClientDUnitTest.java b/geode-core/src/test/java/com/gemstone/gemfire/internal/cache/tier/sockets/BackwardCompatibilityHigherVersionClientDUnitTest.java index 8839f9797cfd..a411f4495418 100755 --- a/geode-core/src/test/java/com/gemstone/gemfire/internal/cache/tier/sockets/BackwardCompatibilityHigherVersionClientDUnitTest.java +++ b/geode-core/src/test/java/com/gemstone/gemfire/internal/cache/tier/sockets/BackwardCompatibilityHigherVersionClientDUnitTest.java @@ -40,7 +40,6 @@ import com.gemstone.gemfire.cache.client.internal.PoolImpl; /** - * @author Pallavi * * Test to verify that server responds to a higher versioned client. */ diff --git a/geode-core/src/test/java/com/gemstone/gemfire/internal/cache/tier/sockets/Bug37210DUnitTest.java b/geode-core/src/test/java/com/gemstone/gemfire/internal/cache/tier/sockets/Bug37210DUnitTest.java index bd6d870b9467..b049ca47f403 100755 --- a/geode-core/src/test/java/com/gemstone/gemfire/internal/cache/tier/sockets/Bug37210DUnitTest.java +++ b/geode-core/src/test/java/com/gemstone/gemfire/internal/cache/tier/sockets/Bug37210DUnitTest.java @@ -46,7 +46,6 @@ * destroy was not being called on CacheClientProxy's closure. As a result, * stats were left open. * - * @author Dinesh Patel * */ public class Bug37210DUnitTest extends DistributedTestCase diff --git a/geode-core/src/test/java/com/gemstone/gemfire/internal/cache/tier/sockets/Bug37805DUnitTest.java b/geode-core/src/test/java/com/gemstone/gemfire/internal/cache/tier/sockets/Bug37805DUnitTest.java index 46e1679b9d6b..1562dc3878ba 100644 --- a/geode-core/src/test/java/com/gemstone/gemfire/internal/cache/tier/sockets/Bug37805DUnitTest.java +++ b/geode-core/src/test/java/com/gemstone/gemfire/internal/cache/tier/sockets/Bug37805DUnitTest.java @@ -35,7 +35,6 @@ /** * - * @author Deepkumar Varma * * The test is written to verify that the rootRegion() in GemfireCache.java * doesn't return any metaRegions or HA Regions. diff --git a/geode-core/src/test/java/com/gemstone/gemfire/internal/cache/tier/sockets/CacheServerMaxConnectionsJUnitTest.java b/geode-core/src/test/java/com/gemstone/gemfire/internal/cache/tier/sockets/CacheServerMaxConnectionsJUnitTest.java index ed0d7fd673e1..f86c2bfb823a 100644 --- a/geode-core/src/test/java/com/gemstone/gemfire/internal/cache/tier/sockets/CacheServerMaxConnectionsJUnitTest.java +++ b/geode-core/src/test/java/com/gemstone/gemfire/internal/cache/tier/sockets/CacheServerMaxConnectionsJUnitTest.java @@ -46,7 +46,6 @@ /** * Make sure max-connections on cache server is enforced * - * @author darrel * */ @Category(IntegrationTest.class) diff --git a/geode-core/src/test/java/com/gemstone/gemfire/internal/cache/tier/sockets/CacheServerSelectorMaxConnectionsJUnitTest.java b/geode-core/src/test/java/com/gemstone/gemfire/internal/cache/tier/sockets/CacheServerSelectorMaxConnectionsJUnitTest.java index 597b7b23c920..abdf05893ef9 100644 --- a/geode-core/src/test/java/com/gemstone/gemfire/internal/cache/tier/sockets/CacheServerSelectorMaxConnectionsJUnitTest.java +++ b/geode-core/src/test/java/com/gemstone/gemfire/internal/cache/tier/sockets/CacheServerSelectorMaxConnectionsJUnitTest.java @@ -23,7 +23,6 @@ /** * Just like its parent but enables the server thread pool (aka selector). * - * @author darrel * */ @Category(IntegrationTest.class) diff --git a/geode-core/src/test/java/com/gemstone/gemfire/internal/cache/tier/sockets/CacheServerTestUtil.java b/geode-core/src/test/java/com/gemstone/gemfire/internal/cache/tier/sockets/CacheServerTestUtil.java index 4a3cf5f4e306..108c64937ae4 100755 --- a/geode-core/src/test/java/com/gemstone/gemfire/internal/cache/tier/sockets/CacheServerTestUtil.java +++ b/geode-core/src/test/java/com/gemstone/gemfire/internal/cache/tier/sockets/CacheServerTestUtil.java @@ -57,7 +57,6 @@ import com.gemstone.gemfire.test.dunit.LogWriterUtils; /** * - * @author Yogesh Mahajan * */ public class CacheServerTestUtil extends DistributedTestCase diff --git a/geode-core/src/test/java/com/gemstone/gemfire/internal/cache/tier/sockets/CacheServerTransactionsSelectorDUnitTest.java b/geode-core/src/test/java/com/gemstone/gemfire/internal/cache/tier/sockets/CacheServerTransactionsSelectorDUnitTest.java index 13441244de13..24945eaef2aa 100644 --- a/geode-core/src/test/java/com/gemstone/gemfire/internal/cache/tier/sockets/CacheServerTransactionsSelectorDUnitTest.java +++ b/geode-core/src/test/java/com/gemstone/gemfire/internal/cache/tier/sockets/CacheServerTransactionsSelectorDUnitTest.java @@ -19,7 +19,6 @@ /** * Just like CacheServerTransactionsDUnitTest but configures bridge server * with thread pool (i.e. selector). - * @author darrel */ public class CacheServerTransactionsSelectorDUnitTest extends CacheServerTransactionsDUnitTest diff --git a/geode-core/src/test/java/com/gemstone/gemfire/internal/cache/tier/sockets/ClearPropagationDUnitTest.java b/geode-core/src/test/java/com/gemstone/gemfire/internal/cache/tier/sockets/ClearPropagationDUnitTest.java index e71bebb7c7ac..02a6c52990fc 100755 --- a/geode-core/src/test/java/com/gemstone/gemfire/internal/cache/tier/sockets/ClearPropagationDUnitTest.java +++ b/geode-core/src/test/java/com/gemstone/gemfire/internal/cache/tier/sockets/ClearPropagationDUnitTest.java @@ -51,7 +51,6 @@ * This is the DUnit Test to verify clear and DestroyRegion operation in * Client-Server Configuration. * - * @author Girish Thombare * */ diff --git a/geode-core/src/test/java/com/gemstone/gemfire/internal/cache/tier/sockets/ClientConflationDUnitTest.java b/geode-core/src/test/java/com/gemstone/gemfire/internal/cache/tier/sockets/ClientConflationDUnitTest.java index 8a7a7690d230..3a9712eb1539 100755 --- a/geode-core/src/test/java/com/gemstone/gemfire/internal/cache/tier/sockets/ClientConflationDUnitTest.java +++ b/geode-core/src/test/java/com/gemstone/gemfire/internal/cache/tier/sockets/ClientConflationDUnitTest.java @@ -53,7 +53,6 @@ * This test verifies the per-client queue conflation override functionality * Taken from the existing ConflationDUnitTest.java and modified. * - * @author Vishal Rao * @since 5.7 */ public class ClientConflationDUnitTest extends DistributedTestCase diff --git a/geode-core/src/test/java/com/gemstone/gemfire/internal/cache/tier/sockets/ClientHealthMonitorJUnitTest.java b/geode-core/src/test/java/com/gemstone/gemfire/internal/cache/tier/sockets/ClientHealthMonitorJUnitTest.java index 1a6b0380d08e..42ff29a0a498 100755 --- a/geode-core/src/test/java/com/gemstone/gemfire/internal/cache/tier/sockets/ClientHealthMonitorJUnitTest.java +++ b/geode-core/src/test/java/com/gemstone/gemfire/internal/cache/tier/sockets/ClientHealthMonitorJUnitTest.java @@ -48,7 +48,6 @@ /** * This is a functional-test for ClientHealthMonitor. * - * @author dpatel * */ @Category(IntegrationTest.class) diff --git a/geode-core/src/test/java/com/gemstone/gemfire/internal/cache/tier/sockets/ClientHealthMonitorSelectorJUnitTest.java b/geode-core/src/test/java/com/gemstone/gemfire/internal/cache/tier/sockets/ClientHealthMonitorSelectorJUnitTest.java index 6a06e1199cdf..8b72884398d1 100644 --- a/geode-core/src/test/java/com/gemstone/gemfire/internal/cache/tier/sockets/ClientHealthMonitorSelectorJUnitTest.java +++ b/geode-core/src/test/java/com/gemstone/gemfire/internal/cache/tier/sockets/ClientHealthMonitorSelectorJUnitTest.java @@ -23,7 +23,6 @@ /** * Just like its parent but enables the server thread pool (aka selector). * - * @author darrel * */ @Category(IntegrationTest.class) diff --git a/geode-core/src/test/java/com/gemstone/gemfire/internal/cache/tier/sockets/ClientInterestNotifyDUnitTest.java b/geode-core/src/test/java/com/gemstone/gemfire/internal/cache/tier/sockets/ClientInterestNotifyDUnitTest.java index 1559506d068f..9ccfdeaad3c4 100755 --- a/geode-core/src/test/java/com/gemstone/gemfire/internal/cache/tier/sockets/ClientInterestNotifyDUnitTest.java +++ b/geode-core/src/test/java/com/gemstone/gemfire/internal/cache/tier/sockets/ClientInterestNotifyDUnitTest.java @@ -53,7 +53,6 @@ * functionality along with register interest new receiveValues flag. * Taken from the existing ClientConflationDUnitTest.java and modified. * - * @author Vishal Rao * @since 6.0.3 */ public class ClientInterestNotifyDUnitTest extends DistributedTestCase diff --git a/geode-core/src/test/java/com/gemstone/gemfire/internal/cache/tier/sockets/ClientServerMiscDUnitTest.java b/geode-core/src/test/java/com/gemstone/gemfire/internal/cache/tier/sockets/ClientServerMiscDUnitTest.java index 2170ce9cb77a..e9fe2cfd6905 100755 --- a/geode-core/src/test/java/com/gemstone/gemfire/internal/cache/tier/sockets/ClientServerMiscDUnitTest.java +++ b/geode-core/src/test/java/com/gemstone/gemfire/internal/cache/tier/sockets/ClientServerMiscDUnitTest.java @@ -61,7 +61,6 @@ /** * Tests client server corner cases between Region and Pool * - * @author Yogesh Mahajan * */ public class ClientServerMiscDUnitTest extends CacheTestCase diff --git a/geode-core/src/test/java/com/gemstone/gemfire/internal/cache/tier/sockets/ClientServerMiscSelectorDUnitTest.java b/geode-core/src/test/java/com/gemstone/gemfire/internal/cache/tier/sockets/ClientServerMiscSelectorDUnitTest.java index 3c8b3a842c7e..bc021595e3c2 100644 --- a/geode-core/src/test/java/com/gemstone/gemfire/internal/cache/tier/sockets/ClientServerMiscSelectorDUnitTest.java +++ b/geode-core/src/test/java/com/gemstone/gemfire/internal/cache/tier/sockets/ClientServerMiscSelectorDUnitTest.java @@ -21,7 +21,6 @@ * Just like parent but enables server thread pool * (ie. selector) * - * @author darrel * */ public class ClientServerMiscSelectorDUnitTest extends ClientServerMiscDUnitTest diff --git a/geode-core/src/test/java/com/gemstone/gemfire/internal/cache/tier/sockets/ConflationDUnitTest.java b/geode-core/src/test/java/com/gemstone/gemfire/internal/cache/tier/sockets/ConflationDUnitTest.java index 6839e3236995..d8c693f570c4 100755 --- a/geode-core/src/test/java/com/gemstone/gemfire/internal/cache/tier/sockets/ConflationDUnitTest.java +++ b/geode-core/src/test/java/com/gemstone/gemfire/internal/cache/tier/sockets/ConflationDUnitTest.java @@ -63,8 +63,6 @@ * they share a common bridgewriter and in the second * scenario, each has a unique bridgewriter. * - * @author Mitul Bid - * @author Pratik Batra */ public class ConflationDUnitTest extends DistributedTestCase { diff --git a/geode-core/src/test/java/com/gemstone/gemfire/internal/cache/tier/sockets/ConnectionProxyJUnitTest.java b/geode-core/src/test/java/com/gemstone/gemfire/internal/cache/tier/sockets/ConnectionProxyJUnitTest.java index 4ef6e2fc9e7f..663138255048 100644 --- a/geode-core/src/test/java/com/gemstone/gemfire/internal/cache/tier/sockets/ConnectionProxyJUnitTest.java +++ b/geode-core/src/test/java/com/gemstone/gemfire/internal/cache/tier/sockets/ConnectionProxyJUnitTest.java @@ -59,7 +59,6 @@ import com.gemstone.gemfire.test.junit.categories.IntegrationTest; /** - * @author asif * * Tests the functionality of operations of AbstractConnectionProxy & its * derived classes. @@ -124,7 +123,6 @@ public void tearDown() throws Exception * 5)Verify that above exception occurs sometime after the readTimeout * configured for the client
    * - * @author Dinesh */ public void DISABLE_testListenerOnServerSitForever() { @@ -202,7 +200,6 @@ public void afterCreate(EntryEvent event) * Tests the DeadServerMonitor when identifying an * Endpoint as alive , does not create a persistent Ping connection * ( i.e sends a CLOSE protocol , if the number of connections is zero. - * @author Asif */ @Test public void testDeadServerMonitorPingNature1() { @@ -274,7 +271,6 @@ public String description() { * Endpoint as alive , does creates a persistent Ping connection * ( i.e sends a PING protocol , if the number of connections is more than * zero. - * @author Asif */ @Test public void testDeadServerMonitorPingNature2() { diff --git a/geode-core/src/test/java/com/gemstone/gemfire/internal/cache/tier/sockets/DataSerializerPropogationDUnitTest.java b/geode-core/src/test/java/com/gemstone/gemfire/internal/cache/tier/sockets/DataSerializerPropogationDUnitTest.java index 4c0c29655f99..0c1dc73319bc 100644 --- a/geode-core/src/test/java/com/gemstone/gemfire/internal/cache/tier/sockets/DataSerializerPropogationDUnitTest.java +++ b/geode-core/src/test/java/com/gemstone/gemfire/internal/cache/tier/sockets/DataSerializerPropogationDUnitTest.java @@ -1285,7 +1285,6 @@ class Bogus { /** * This data serializer can be created locally but remote guys who call * the default constructor will fail. - * @author darrel * */ class DSObjectLocalOnly extends DataSerializer { diff --git a/geode-core/src/test/java/com/gemstone/gemfire/internal/cache/tier/sockets/DeltaEOFException.java b/geode-core/src/test/java/com/gemstone/gemfire/internal/cache/tier/sockets/DeltaEOFException.java index 0ab9c5ad71f7..ba0cd51b65af 100755 --- a/geode-core/src/test/java/com/gemstone/gemfire/internal/cache/tier/sockets/DeltaEOFException.java +++ b/geode-core/src/test/java/com/gemstone/gemfire/internal/cache/tier/sockets/DeltaEOFException.java @@ -27,7 +27,6 @@ /** * Faulty delta implementation, raising EndOfFile exception as * fromDelta reads more fields then wrote by toDelta - * @author aingle * @since 6.1 */ public class DeltaEOFException extends FaultyDelta { diff --git a/geode-core/src/test/java/com/gemstone/gemfire/internal/cache/tier/sockets/DestroyEntryPropagationDUnitTest.java b/geode-core/src/test/java/com/gemstone/gemfire/internal/cache/tier/sockets/DestroyEntryPropagationDUnitTest.java index 6ca370fa6dd9..192c8424cdfa 100755 --- a/geode-core/src/test/java/com/gemstone/gemfire/internal/cache/tier/sockets/DestroyEntryPropagationDUnitTest.java +++ b/geode-core/src/test/java/com/gemstone/gemfire/internal/cache/tier/sockets/DestroyEntryPropagationDUnitTest.java @@ -57,7 +57,6 @@ /** * Tests propagation of destroy entry operation across the vms * - * @author Yogesh Mahajan * */ diff --git a/geode-core/src/test/java/com/gemstone/gemfire/internal/cache/tier/sockets/DurableClientQueueSizeDUnitTest.java b/geode-core/src/test/java/com/gemstone/gemfire/internal/cache/tier/sockets/DurableClientQueueSizeDUnitTest.java index 648718f54446..c79bc938b356 100644 --- a/geode-core/src/test/java/com/gemstone/gemfire/internal/cache/tier/sockets/DurableClientQueueSizeDUnitTest.java +++ b/geode-core/src/test/java/com/gemstone/gemfire/internal/cache/tier/sockets/DurableClientQueueSizeDUnitTest.java @@ -41,7 +41,6 @@ import com.gemstone.gemfire.test.dunit.VM; /** - * @author ashetkar * */ @SuppressWarnings("serial") diff --git a/geode-core/src/test/java/com/gemstone/gemfire/internal/cache/tier/sockets/DurableClientReconnectAutoDUnitTest.java b/geode-core/src/test/java/com/gemstone/gemfire/internal/cache/tier/sockets/DurableClientReconnectAutoDUnitTest.java index f9e7d874b6fa..1e37009e9a46 100644 --- a/geode-core/src/test/java/com/gemstone/gemfire/internal/cache/tier/sockets/DurableClientReconnectAutoDUnitTest.java +++ b/geode-core/src/test/java/com/gemstone/gemfire/internal/cache/tier/sockets/DurableClientReconnectAutoDUnitTest.java @@ -24,7 +24,6 @@ import com.gemstone.gemfire.test.dunit.NetworkUtils; /** - * @author dsmith * @since 5.7 * * Test reconnecting a durable client that is using diff --git a/geode-core/src/test/java/com/gemstone/gemfire/internal/cache/tier/sockets/DurableClientReconnectDUnitTest.java b/geode-core/src/test/java/com/gemstone/gemfire/internal/cache/tier/sockets/DurableClientReconnectDUnitTest.java index 5f25c3adbb6b..16546faa4920 100755 --- a/geode-core/src/test/java/com/gemstone/gemfire/internal/cache/tier/sockets/DurableClientReconnectDUnitTest.java +++ b/geode-core/src/test/java/com/gemstone/gemfire/internal/cache/tier/sockets/DurableClientReconnectDUnitTest.java @@ -57,7 +57,6 @@ /** * Tests for durable reconnect issue * - * @author Yogesh * @since 5.2 */ diff --git a/geode-core/src/test/java/com/gemstone/gemfire/internal/cache/tier/sockets/DurableClientStatsDUnitTest.java b/geode-core/src/test/java/com/gemstone/gemfire/internal/cache/tier/sockets/DurableClientStatsDUnitTest.java index e3e38a41dc15..3c6eedb70563 100755 --- a/geode-core/src/test/java/com/gemstone/gemfire/internal/cache/tier/sockets/DurableClientStatsDUnitTest.java +++ b/geode-core/src/test/java/com/gemstone/gemfire/internal/cache/tier/sockets/DurableClientStatsDUnitTest.java @@ -39,7 +39,6 @@ /** * - * @author Deepkumar Varma * * The DUnitTest checks whether the following Three counts are incremented * correctly or not: diff --git a/geode-core/src/test/java/com/gemstone/gemfire/internal/cache/tier/sockets/DurableRegistrationDUnitTest.java b/geode-core/src/test/java/com/gemstone/gemfire/internal/cache/tier/sockets/DurableRegistrationDUnitTest.java index 5d5e0a8b1d04..adcf2649b3aa 100644 --- a/geode-core/src/test/java/com/gemstone/gemfire/internal/cache/tier/sockets/DurableRegistrationDUnitTest.java +++ b/geode-core/src/test/java/com/gemstone/gemfire/internal/cache/tier/sockets/DurableRegistrationDUnitTest.java @@ -50,7 +50,6 @@ /** * - * @author Deepkumar Varma * * We have 2 servers and One client which registers some keys with durable * interest and some without it. We maintain queues on only One server as diff --git a/geode-core/src/test/java/com/gemstone/gemfire/internal/cache/tier/sockets/DurableResponseMatrixDUnitTest.java b/geode-core/src/test/java/com/gemstone/gemfire/internal/cache/tier/sockets/DurableResponseMatrixDUnitTest.java index bc49f9334174..dd00986b2e53 100755 --- a/geode-core/src/test/java/com/gemstone/gemfire/internal/cache/tier/sockets/DurableResponseMatrixDUnitTest.java +++ b/geode-core/src/test/java/com/gemstone/gemfire/internal/cache/tier/sockets/DurableResponseMatrixDUnitTest.java @@ -41,7 +41,6 @@ * Tests that the Matris defined in ServerResponseMatrix is * applied or not * - * @author Yogesh Mahajan * @since 5.1 * */ diff --git a/geode-core/src/test/java/com/gemstone/gemfire/internal/cache/tier/sockets/EventIDVerificationDUnitTest.java b/geode-core/src/test/java/com/gemstone/gemfire/internal/cache/tier/sockets/EventIDVerificationDUnitTest.java index 0217361965ec..2a290ab8320a 100755 --- a/geode-core/src/test/java/com/gemstone/gemfire/internal/cache/tier/sockets/EventIDVerificationDUnitTest.java +++ b/geode-core/src/test/java/com/gemstone/gemfire/internal/cache/tier/sockets/EventIDVerificationDUnitTest.java @@ -53,8 +53,6 @@ * the cache server for create, update, remove and destroy operations.It also checks * that peer nodes also get the same EventID. * - * @author Suyog Bhokare - * @author Asif * */ diff --git a/geode-core/src/test/java/com/gemstone/gemfire/internal/cache/tier/sockets/EventIDVerificationInP2PDUnitTest.java b/geode-core/src/test/java/com/gemstone/gemfire/internal/cache/tier/sockets/EventIDVerificationInP2PDUnitTest.java index f33e6e111d3b..e59e38e9f7e2 100755 --- a/geode-core/src/test/java/com/gemstone/gemfire/internal/cache/tier/sockets/EventIDVerificationInP2PDUnitTest.java +++ b/geode-core/src/test/java/com/gemstone/gemfire/internal/cache/tier/sockets/EventIDVerificationInP2PDUnitTest.java @@ -43,7 +43,6 @@ * operation. In case of NO-ACK EventIDs should be different.Currently this test * is commented because of a bug. * - * @author Suyog Bhokare * */ diff --git a/geode-core/src/test/java/com/gemstone/gemfire/internal/cache/tier/sockets/FaultyDelta.java b/geode-core/src/test/java/com/gemstone/gemfire/internal/cache/tier/sockets/FaultyDelta.java index 698f5c287309..75610374be36 100755 --- a/geode-core/src/test/java/com/gemstone/gemfire/internal/cache/tier/sockets/FaultyDelta.java +++ b/geode-core/src/test/java/com/gemstone/gemfire/internal/cache/tier/sockets/FaultyDelta.java @@ -30,7 +30,6 @@ /** * Faulty delta implementation, raising ArrayIndexOutOfBound exception as * fromDelta reads incorrect sequence then wrote by toDelta - * @author aingle * @since 6.1 */ public class FaultyDelta implements Delta, DataSerializable { diff --git a/geode-core/src/test/java/com/gemstone/gemfire/internal/cache/tier/sockets/ForceInvalidateEvictionDUnitTest.java b/geode-core/src/test/java/com/gemstone/gemfire/internal/cache/tier/sockets/ForceInvalidateEvictionDUnitTest.java index 9313ddd3176b..901d8378a274 100644 --- a/geode-core/src/test/java/com/gemstone/gemfire/internal/cache/tier/sockets/ForceInvalidateEvictionDUnitTest.java +++ b/geode-core/src/test/java/com/gemstone/gemfire/internal/cache/tier/sockets/ForceInvalidateEvictionDUnitTest.java @@ -52,7 +52,6 @@ import com.gemstone.gemfire.test.dunit.WaitCriterion; /** - * @author dsmith * */ public class ForceInvalidateEvictionDUnitTest extends CacheTestCase { diff --git a/geode-core/src/test/java/com/gemstone/gemfire/internal/cache/tier/sockets/ForceInvalidateOffHeapEvictionDUnitTest.java b/geode-core/src/test/java/com/gemstone/gemfire/internal/cache/tier/sockets/ForceInvalidateOffHeapEvictionDUnitTest.java index b9c189371e56..219a0553053d 100644 --- a/geode-core/src/test/java/com/gemstone/gemfire/internal/cache/tier/sockets/ForceInvalidateOffHeapEvictionDUnitTest.java +++ b/geode-core/src/test/java/com/gemstone/gemfire/internal/cache/tier/sockets/ForceInvalidateOffHeapEvictionDUnitTest.java @@ -25,7 +25,6 @@ /** * Runs force invalidate eviction tests with off-heap regions. - * @author rholmes * @since 9.0 */ public class ForceInvalidateOffHeapEvictionDUnitTest extends diff --git a/geode-core/src/test/java/com/gemstone/gemfire/internal/cache/tier/sockets/HaHelper.java b/geode-core/src/test/java/com/gemstone/gemfire/internal/cache/tier/sockets/HaHelper.java index 4772b6ea1085..f80172ba752c 100755 --- a/geode-core/src/test/java/com/gemstone/gemfire/internal/cache/tier/sockets/HaHelper.java +++ b/geode-core/src/test/java/com/gemstone/gemfire/internal/cache/tier/sockets/HaHelper.java @@ -19,7 +19,6 @@ /** * Helper class to access the required functions of this package from * outside the package. - * @author Girish Thombare */ public class HaHelper { diff --git a/geode-core/src/test/java/com/gemstone/gemfire/internal/cache/tier/sockets/InterestListDUnitTest.java b/geode-core/src/test/java/com/gemstone/gemfire/internal/cache/tier/sockets/InterestListDUnitTest.java index 50ceda7320bc..506d900d6b5b 100755 --- a/geode-core/src/test/java/com/gemstone/gemfire/internal/cache/tier/sockets/InterestListDUnitTest.java +++ b/geode-core/src/test/java/com/gemstone/gemfire/internal/cache/tier/sockets/InterestListDUnitTest.java @@ -97,8 +97,6 @@ * then verify that updates has occurred as a result of interest registration. * * - * @author Yogesh Mahajan - * @author Suyog Bhokare * */ public class InterestListDUnitTest extends DistributedTestCase diff --git a/geode-core/src/test/java/com/gemstone/gemfire/internal/cache/tier/sockets/InterestListEndpointDUnitTest.java b/geode-core/src/test/java/com/gemstone/gemfire/internal/cache/tier/sockets/InterestListEndpointDUnitTest.java index 392bdd36ceac..5d9acef76b75 100755 --- a/geode-core/src/test/java/com/gemstone/gemfire/internal/cache/tier/sockets/InterestListEndpointDUnitTest.java +++ b/geode-core/src/test/java/com/gemstone/gemfire/internal/cache/tier/sockets/InterestListEndpointDUnitTest.java @@ -55,8 +55,6 @@ /** * - * @author Yogesh Mahajan - * @author Suyog Bhokare * */ public class InterestListEndpointDUnitTest extends DistributedTestCase diff --git a/geode-core/src/test/java/com/gemstone/gemfire/internal/cache/tier/sockets/InterestListEndpointPRDUnitTest.java b/geode-core/src/test/java/com/gemstone/gemfire/internal/cache/tier/sockets/InterestListEndpointPRDUnitTest.java index 11b1b192705e..e08202d364e2 100644 --- a/geode-core/src/test/java/com/gemstone/gemfire/internal/cache/tier/sockets/InterestListEndpointPRDUnitTest.java +++ b/geode-core/src/test/java/com/gemstone/gemfire/internal/cache/tier/sockets/InterestListEndpointPRDUnitTest.java @@ -21,7 +21,6 @@ /** * subclass of InterestListEndpointDUnitTest to exercise partitioned regions * - * @author Bruce Schuchardt */ public class InterestListEndpointPRDUnitTest extends InterestListEndpointDUnitTest { diff --git a/geode-core/src/test/java/com/gemstone/gemfire/internal/cache/tier/sockets/InterestListEndpointSelectorDUnitTest.java b/geode-core/src/test/java/com/gemstone/gemfire/internal/cache/tier/sockets/InterestListEndpointSelectorDUnitTest.java index 40bf1d33ba3d..2a5d32e6fa14 100644 --- a/geode-core/src/test/java/com/gemstone/gemfire/internal/cache/tier/sockets/InterestListEndpointSelectorDUnitTest.java +++ b/geode-core/src/test/java/com/gemstone/gemfire/internal/cache/tier/sockets/InterestListEndpointSelectorDUnitTest.java @@ -19,7 +19,6 @@ /** * Just like InterestListEndpointDUnitTest but uses thread pool (i.e. selector) * in bridge servers - * @author darrel * */ public class InterestListEndpointSelectorDUnitTest diff --git a/geode-core/src/test/java/com/gemstone/gemfire/internal/cache/tier/sockets/InterestListFailoverDUnitTest.java b/geode-core/src/test/java/com/gemstone/gemfire/internal/cache/tier/sockets/InterestListFailoverDUnitTest.java index 1e98cc58ce75..13a6ce46d36b 100755 --- a/geode-core/src/test/java/com/gemstone/gemfire/internal/cache/tier/sockets/InterestListFailoverDUnitTest.java +++ b/geode-core/src/test/java/com/gemstone/gemfire/internal/cache/tier/sockets/InterestListFailoverDUnitTest.java @@ -48,8 +48,6 @@ * c1 : validate (r.getEntry("key-1").getValue() == "vm2-key-1") * (r.getEntry("key-6").getValue() == "key-6") // as it is not registered * * - * @author Yogesh Mahajan - * @author Suyog Bhokare * */ public class InterestListFailoverDUnitTest extends DistributedTestCase diff --git a/geode-core/src/test/java/com/gemstone/gemfire/internal/cache/tier/sockets/InterestListRecoveryDUnitTest.java b/geode-core/src/test/java/com/gemstone/gemfire/internal/cache/tier/sockets/InterestListRecoveryDUnitTest.java index 0f25d01a03da..f33e76a11a29 100755 --- a/geode-core/src/test/java/com/gemstone/gemfire/internal/cache/tier/sockets/InterestListRecoveryDUnitTest.java +++ b/geode-core/src/test/java/com/gemstone/gemfire/internal/cache/tier/sockets/InterestListRecoveryDUnitTest.java @@ -64,8 +64,6 @@ * s2 ----> unavaliable // fail over should to s1 with intrest list s4,s5 * see only k4 and k5 are registerd on s1 * - * @author Yogesh Mahajan - * @author Suyog Bhokare */ public class InterestListRecoveryDUnitTest extends DistributedTestCase { diff --git a/geode-core/src/test/java/com/gemstone/gemfire/internal/cache/tier/sockets/InterestRegrListenerDUnitTest.java b/geode-core/src/test/java/com/gemstone/gemfire/internal/cache/tier/sockets/InterestRegrListenerDUnitTest.java index 66b33fa3d997..b1bde6cd134e 100644 --- a/geode-core/src/test/java/com/gemstone/gemfire/internal/cache/tier/sockets/InterestRegrListenerDUnitTest.java +++ b/geode-core/src/test/java/com/gemstone/gemfire/internal/cache/tier/sockets/InterestRegrListenerDUnitTest.java @@ -47,7 +47,6 @@ /** * Written to test fix for Bug #47132 - * @author tushark * */ public class InterestRegrListenerDUnitTest extends DistributedTestCase { diff --git a/geode-core/src/test/java/com/gemstone/gemfire/internal/cache/tier/sockets/InterestResultPolicyDUnitTest.java b/geode-core/src/test/java/com/gemstone/gemfire/internal/cache/tier/sockets/InterestResultPolicyDUnitTest.java index d163e299e364..d65adaff7987 100755 --- a/geode-core/src/test/java/com/gemstone/gemfire/internal/cache/tier/sockets/InterestResultPolicyDUnitTest.java +++ b/geode-core/src/test/java/com/gemstone/gemfire/internal/cache/tier/sockets/InterestResultPolicyDUnitTest.java @@ -45,7 +45,6 @@ /** * DUnit Test for use-cases of various {@link InterestResultPolicy} types. * - * @author Dinesh Patel * */ public class InterestResultPolicyDUnitTest extends DistributedTestCase diff --git a/geode-core/src/test/java/com/gemstone/gemfire/internal/cache/tier/sockets/NewRegionAttributesDUnitTest.java b/geode-core/src/test/java/com/gemstone/gemfire/internal/cache/tier/sockets/NewRegionAttributesDUnitTest.java index 1a952c8c3862..37ffd643d167 100755 --- a/geode-core/src/test/java/com/gemstone/gemfire/internal/cache/tier/sockets/NewRegionAttributesDUnitTest.java +++ b/geode-core/src/test/java/com/gemstone/gemfire/internal/cache/tier/sockets/NewRegionAttributesDUnitTest.java @@ -38,8 +38,6 @@ * This tests that basic entry operations work properly when regions are * configured with newly added RegionAttributes in a P2P environment. * - * @author Dinesh Patel - * @author Suyog Bhokare */ public class NewRegionAttributesDUnitTest extends DistributedTestCase { diff --git a/geode-core/src/test/java/com/gemstone/gemfire/internal/cache/tier/sockets/ObjectPartListJUnitTest.java b/geode-core/src/test/java/com/gemstone/gemfire/internal/cache/tier/sockets/ObjectPartListJUnitTest.java index 140b74e7136b..ef6bfcb987c8 100644 --- a/geode-core/src/test/java/com/gemstone/gemfire/internal/cache/tier/sockets/ObjectPartListJUnitTest.java +++ b/geode-core/src/test/java/com/gemstone/gemfire/internal/cache/tier/sockets/ObjectPartListJUnitTest.java @@ -28,7 +28,6 @@ import com.gemstone.gemfire.test.junit.categories.UnitTest; /** - * @author dsmith * */ @Category(UnitTest.class) diff --git a/geode-core/src/test/java/com/gemstone/gemfire/internal/cache/tier/sockets/RedundancyLevelJUnitTest.java b/geode-core/src/test/java/com/gemstone/gemfire/internal/cache/tier/sockets/RedundancyLevelJUnitTest.java index 4eefacdaefd6..fdc6e1c6baa4 100644 --- a/geode-core/src/test/java/com/gemstone/gemfire/internal/cache/tier/sockets/RedundancyLevelJUnitTest.java +++ b/geode-core/src/test/java/com/gemstone/gemfire/internal/cache/tier/sockets/RedundancyLevelJUnitTest.java @@ -85,7 +85,6 @@ public void tearDown() throws Exception * only client is started and the connection-exceptions due to no live * servers, which appear as warnings, are ignored.) * - * @author Dinesh Patel * */ @Test diff --git a/geode-core/src/test/java/com/gemstone/gemfire/internal/cache/tier/sockets/RedundancyLevelPart1DUnitTest.java b/geode-core/src/test/java/com/gemstone/gemfire/internal/cache/tier/sockets/RedundancyLevelPart1DUnitTest.java index 004dacbfee49..65d644846f32 100755 --- a/geode-core/src/test/java/com/gemstone/gemfire/internal/cache/tier/sockets/RedundancyLevelPart1DUnitTest.java +++ b/geode-core/src/test/java/com/gemstone/gemfire/internal/cache/tier/sockets/RedundancyLevelPart1DUnitTest.java @@ -26,7 +26,6 @@ /** * Tests Redundancy Level Functionality * - * @author Suyog Bhokare * */ public class RedundancyLevelPart1DUnitTest extends RedundancyLevelTestBase diff --git a/geode-core/src/test/java/com/gemstone/gemfire/internal/cache/tier/sockets/RedundancyLevelPart3DUnitTest.java b/geode-core/src/test/java/com/gemstone/gemfire/internal/cache/tier/sockets/RedundancyLevelPart3DUnitTest.java index 20329d436db1..484d7e9b0f03 100755 --- a/geode-core/src/test/java/com/gemstone/gemfire/internal/cache/tier/sockets/RedundancyLevelPart3DUnitTest.java +++ b/geode-core/src/test/java/com/gemstone/gemfire/internal/cache/tier/sockets/RedundancyLevelPart3DUnitTest.java @@ -27,7 +27,6 @@ /** * Tests Redundancy Level Functionality * - * @author Suyog Bhokare * */ public class RedundancyLevelPart3DUnitTest extends RedundancyLevelTestBase diff --git a/geode-core/src/test/java/com/gemstone/gemfire/internal/cache/tier/sockets/RedundancyLevelTestBase.java b/geode-core/src/test/java/com/gemstone/gemfire/internal/cache/tier/sockets/RedundancyLevelTestBase.java index eaba8d966939..0ea6fd5d9718 100755 --- a/geode-core/src/test/java/com/gemstone/gemfire/internal/cache/tier/sockets/RedundancyLevelTestBase.java +++ b/geode-core/src/test/java/com/gemstone/gemfire/internal/cache/tier/sockets/RedundancyLevelTestBase.java @@ -53,7 +53,6 @@ /** * Tests Redundancy Level Functionality * - * @author Suyog Bhokare * */ public class RedundancyLevelTestBase extends DistributedTestCase diff --git a/geode-core/src/test/java/com/gemstone/gemfire/internal/cache/tier/sockets/RegionCloseDUnitTest.java b/geode-core/src/test/java/com/gemstone/gemfire/internal/cache/tier/sockets/RegionCloseDUnitTest.java index b925bf792008..db6abb4c394e 100755 --- a/geode-core/src/test/java/com/gemstone/gemfire/internal/cache/tier/sockets/RegionCloseDUnitTest.java +++ b/geode-core/src/test/java/com/gemstone/gemfire/internal/cache/tier/sockets/RegionCloseDUnitTest.java @@ -45,7 +45,6 @@ * Test to verify that client side region.close() should unregister the client with the server. * It also checks that client region queue also gets removed properly. * - * @author Suyog Bhoakre */ public class RegionCloseDUnitTest extends DistributedTestCase diff --git a/geode-core/src/test/java/com/gemstone/gemfire/internal/cache/tier/sockets/RegisterInterestBeforeRegionCreationDUnitTest.java b/geode-core/src/test/java/com/gemstone/gemfire/internal/cache/tier/sockets/RegisterInterestBeforeRegionCreationDUnitTest.java index 097da6ae9685..b43df8e2bf89 100755 --- a/geode-core/src/test/java/com/gemstone/gemfire/internal/cache/tier/sockets/RegisterInterestBeforeRegionCreationDUnitTest.java +++ b/geode-core/src/test/java/com/gemstone/gemfire/internal/cache/tier/sockets/RegisterInterestBeforeRegionCreationDUnitTest.java @@ -57,7 +57,6 @@ * - data will come to region1 on server2 via GII * - data should be sent to client2 * - * @author Mitul Bid * * */ diff --git a/geode-core/src/test/java/com/gemstone/gemfire/internal/cache/tier/sockets/RegisterInterestKeysDUnitTest.java b/geode-core/src/test/java/com/gemstone/gemfire/internal/cache/tier/sockets/RegisterInterestKeysDUnitTest.java index df131a924458..a3bc85ecc073 100644 --- a/geode-core/src/test/java/com/gemstone/gemfire/internal/cache/tier/sockets/RegisterInterestKeysDUnitTest.java +++ b/geode-core/src/test/java/com/gemstone/gemfire/internal/cache/tier/sockets/RegisterInterestKeysDUnitTest.java @@ -36,7 +36,6 @@ * Test code copied from UpdatePropagationDUnitTest * Tests that registering interest KEYS works correctly. * - * @author Darrel * */ diff --git a/geode-core/src/test/java/com/gemstone/gemfire/internal/cache/tier/sockets/RegisterInterestKeysPRDUnitTest.java b/geode-core/src/test/java/com/gemstone/gemfire/internal/cache/tier/sockets/RegisterInterestKeysPRDUnitTest.java index bea768b90d51..310112c57268 100644 --- a/geode-core/src/test/java/com/gemstone/gemfire/internal/cache/tier/sockets/RegisterInterestKeysPRDUnitTest.java +++ b/geode-core/src/test/java/com/gemstone/gemfire/internal/cache/tier/sockets/RegisterInterestKeysPRDUnitTest.java @@ -21,7 +21,6 @@ /** * subclass of UpdatePropagationDUnitTest to exercise partitioned regions * - * @author Bruce Schuchardt */ public class RegisterInterestKeysPRDUnitTest extends RegisterInterestKeysDUnitTest { diff --git a/geode-core/src/test/java/com/gemstone/gemfire/internal/cache/tier/sockets/ReliableMessagingDUnitTest.java b/geode-core/src/test/java/com/gemstone/gemfire/internal/cache/tier/sockets/ReliableMessagingDUnitTest.java index f02fef5835ee..581be8983247 100755 --- a/geode-core/src/test/java/com/gemstone/gemfire/internal/cache/tier/sockets/ReliableMessagingDUnitTest.java +++ b/geode-core/src/test/java/com/gemstone/gemfire/internal/cache/tier/sockets/ReliableMessagingDUnitTest.java @@ -52,7 +52,6 @@ /** * - * @author Suyog Bhokare * * Tests the reliable messaging functionality - Client sends a periodic * ack to the primary server for the messages received. diff --git a/geode-core/src/test/java/com/gemstone/gemfire/internal/cache/tier/sockets/UnregisterInterestDUnitTest.java b/geode-core/src/test/java/com/gemstone/gemfire/internal/cache/tier/sockets/UnregisterInterestDUnitTest.java index 405648343778..21b5c6102b1c 100644 --- a/geode-core/src/test/java/com/gemstone/gemfire/internal/cache/tier/sockets/UnregisterInterestDUnitTest.java +++ b/geode-core/src/test/java/com/gemstone/gemfire/internal/cache/tier/sockets/UnregisterInterestDUnitTest.java @@ -46,7 +46,6 @@ import com.gemstone.gemfire.test.dunit.WaitCriterion; /** - * @author ashetkar */ public class UnregisterInterestDUnitTest extends DistributedTestCase { diff --git a/geode-core/src/test/java/com/gemstone/gemfire/internal/cache/tier/sockets/UpdatePropagationDUnitTest.java b/geode-core/src/test/java/com/gemstone/gemfire/internal/cache/tier/sockets/UpdatePropagationDUnitTest.java index f544e74ce8a0..31fedb1475d7 100644 --- a/geode-core/src/test/java/com/gemstone/gemfire/internal/cache/tier/sockets/UpdatePropagationDUnitTest.java +++ b/geode-core/src/test/java/com/gemstone/gemfire/internal/cache/tier/sockets/UpdatePropagationDUnitTest.java @@ -71,8 +71,6 @@ * to register with the server is the same across servers * * - * @author Yogesh Mahajan - * @author Asif * */ diff --git a/geode-core/src/test/java/com/gemstone/gemfire/internal/cache/tier/sockets/UpdatePropagationPRDUnitTest.java b/geode-core/src/test/java/com/gemstone/gemfire/internal/cache/tier/sockets/UpdatePropagationPRDUnitTest.java index 2c12c691f056..8edac456c259 100644 --- a/geode-core/src/test/java/com/gemstone/gemfire/internal/cache/tier/sockets/UpdatePropagationPRDUnitTest.java +++ b/geode-core/src/test/java/com/gemstone/gemfire/internal/cache/tier/sockets/UpdatePropagationPRDUnitTest.java @@ -21,7 +21,6 @@ /** * subclass of UpdatePropagationDUnitTest to exercise partitioned regions * - * @author Bruce Schuchardt */ public class UpdatePropagationPRDUnitTest extends UpdatePropagationDUnitTest { diff --git a/geode-core/src/test/java/com/gemstone/gemfire/internal/cache/tier/sockets/VerifyEventIDGenerationInP2PDUnitTest.java b/geode-core/src/test/java/com/gemstone/gemfire/internal/cache/tier/sockets/VerifyEventIDGenerationInP2PDUnitTest.java index 5287c9febc3d..cb12adb6150f 100755 --- a/geode-core/src/test/java/com/gemstone/gemfire/internal/cache/tier/sockets/VerifyEventIDGenerationInP2PDUnitTest.java +++ b/geode-core/src/test/java/com/gemstone/gemfire/internal/cache/tier/sockets/VerifyEventIDGenerationInP2PDUnitTest.java @@ -41,7 +41,6 @@ * that is not present in the node's region. * Currently test is commented because of the bug. * - * @author Suyog Bhokare * */ diff --git a/geode-core/src/test/java/com/gemstone/gemfire/internal/cache/tier/sockets/VerifyUpdatesFromNonInterestEndPointDUnitTest.java b/geode-core/src/test/java/com/gemstone/gemfire/internal/cache/tier/sockets/VerifyUpdatesFromNonInterestEndPointDUnitTest.java index 238a09432a66..da79ba427e51 100755 --- a/geode-core/src/test/java/com/gemstone/gemfire/internal/cache/tier/sockets/VerifyUpdatesFromNonInterestEndPointDUnitTest.java +++ b/geode-core/src/test/java/com/gemstone/gemfire/internal/cache/tier/sockets/VerifyUpdatesFromNonInterestEndPointDUnitTest.java @@ -50,8 +50,6 @@ * Now Client does a put on server1 . * The Client should not receive callback of his own put. - * @author Yogesh Mahajan - * @author Suyog Bhokare * */ public class VerifyUpdatesFromNonInterestEndPointDUnitTest extends DistributedTestCase diff --git a/geode-core/src/test/java/com/gemstone/gemfire/internal/cache/versions/RegionVersionHolderRandomJUnitTest.java b/geode-core/src/test/java/com/gemstone/gemfire/internal/cache/versions/RegionVersionHolderRandomJUnitTest.java index fe626a8e9791..d60a35466a4d 100644 --- a/geode-core/src/test/java/com/gemstone/gemfire/internal/cache/versions/RegionVersionHolderRandomJUnitTest.java +++ b/geode-core/src/test/java/com/gemstone/gemfire/internal/cache/versions/RegionVersionHolderRandomJUnitTest.java @@ -36,7 +36,6 @@ * in a random order. * * This test also contains some other non deterministic RVV junit tests - * @author dsmith * */ @Category(UnitTest.class) diff --git a/geode-core/src/test/java/com/gemstone/gemfire/internal/cache/wan/asyncqueue/AsyncEventQueueValidationsJUnitTest.java b/geode-core/src/test/java/com/gemstone/gemfire/internal/cache/wan/asyncqueue/AsyncEventQueueValidationsJUnitTest.java index 1e402241d572..ddcc9cb3d979 100644 --- a/geode-core/src/test/java/com/gemstone/gemfire/internal/cache/wan/asyncqueue/AsyncEventQueueValidationsJUnitTest.java +++ b/geode-core/src/test/java/com/gemstone/gemfire/internal/cache/wan/asyncqueue/AsyncEventQueueValidationsJUnitTest.java @@ -37,7 +37,6 @@ import junit.framework.TestCase; /** - * @author skumar * */ @Category(IntegrationTest.class) diff --git a/geode-core/src/test/java/com/gemstone/gemfire/internal/cache/wan/concurrent/ConcurrentAsyncEventQueueDUnitTest.java b/geode-core/src/test/java/com/gemstone/gemfire/internal/cache/wan/concurrent/ConcurrentAsyncEventQueueDUnitTest.java index 41accace7678..75f073332e4d 100644 --- a/geode-core/src/test/java/com/gemstone/gemfire/internal/cache/wan/concurrent/ConcurrentAsyncEventQueueDUnitTest.java +++ b/geode-core/src/test/java/com/gemstone/gemfire/internal/cache/wan/concurrent/ConcurrentAsyncEventQueueDUnitTest.java @@ -23,7 +23,6 @@ import com.gemstone.gemfire.test.dunit.AsyncInvocation; /** - * @author skumar * */ public class ConcurrentAsyncEventQueueDUnitTest extends AsyncEventQueueTestBase { diff --git a/geode-core/src/test/java/com/gemstone/gemfire/internal/cache/wan/misc/CommonParallelAsyncEventQueueDUnitTest.java b/geode-core/src/test/java/com/gemstone/gemfire/internal/cache/wan/misc/CommonParallelAsyncEventQueueDUnitTest.java index a21e2ab89efe..d26ab2a5ecb3 100644 --- a/geode-core/src/test/java/com/gemstone/gemfire/internal/cache/wan/misc/CommonParallelAsyncEventQueueDUnitTest.java +++ b/geode-core/src/test/java/com/gemstone/gemfire/internal/cache/wan/misc/CommonParallelAsyncEventQueueDUnitTest.java @@ -21,7 +21,6 @@ import com.gemstone.gemfire.test.dunit.IgnoredException; /** - * @author skumar * */ public class CommonParallelAsyncEventQueueDUnitTest extends AsyncEventQueueTestBase { diff --git a/geode-core/src/test/java/com/gemstone/gemfire/internal/cache/xmlcache/AbstractXmlParserJUnitTest.java b/geode-core/src/test/java/com/gemstone/gemfire/internal/cache/xmlcache/AbstractXmlParserJUnitTest.java index ba8762053d2d..6148da1a1fff 100644 --- a/geode-core/src/test/java/com/gemstone/gemfire/internal/cache/xmlcache/AbstractXmlParserJUnitTest.java +++ b/geode-core/src/test/java/com/gemstone/gemfire/internal/cache/xmlcache/AbstractXmlParserJUnitTest.java @@ -32,7 +32,6 @@ /** * Unit tests for {@link AbstractXmlParser}. * - * @author jbarrett@pivotal.io * * @since 8.1 */ diff --git a/geode-core/src/test/java/com/gemstone/gemfire/internal/cache/xmlcache/CacheXmlParserJUnitTest.java b/geode-core/src/test/java/com/gemstone/gemfire/internal/cache/xmlcache/CacheXmlParserJUnitTest.java index 31b8d6d46728..5a4f7b3f5e04 100644 --- a/geode-core/src/test/java/com/gemstone/gemfire/internal/cache/xmlcache/CacheXmlParserJUnitTest.java +++ b/geode-core/src/test/java/com/gemstone/gemfire/internal/cache/xmlcache/CacheXmlParserJUnitTest.java @@ -35,7 +35,6 @@ /** * Test cases for {@link CacheXmlParser}. * - * @author jbarrett@pivotal.io * * @since 8.1 */ diff --git a/geode-core/src/test/java/com/gemstone/gemfire/internal/cache/xmlcache/CacheXmlVersionJUnitTest.java b/geode-core/src/test/java/com/gemstone/gemfire/internal/cache/xmlcache/CacheXmlVersionJUnitTest.java index 35e1259a44e7..eb4ce86ebd73 100644 --- a/geode-core/src/test/java/com/gemstone/gemfire/internal/cache/xmlcache/CacheXmlVersionJUnitTest.java +++ b/geode-core/src/test/java/com/gemstone/gemfire/internal/cache/xmlcache/CacheXmlVersionJUnitTest.java @@ -25,7 +25,6 @@ import com.gemstone.gemfire.test.junit.categories.UnitTest; /** - * @author jbarrett@pivotal.io * * @since 8.1 */ diff --git a/geode-core/src/test/java/com/gemstone/gemfire/internal/cache/xmlcache/PivotalEntityResolverJUnitTest.java b/geode-core/src/test/java/com/gemstone/gemfire/internal/cache/xmlcache/PivotalEntityResolverJUnitTest.java index d13ddae3d3a6..800e5ce83830 100644 --- a/geode-core/src/test/java/com/gemstone/gemfire/internal/cache/xmlcache/PivotalEntityResolverJUnitTest.java +++ b/geode-core/src/test/java/com/gemstone/gemfire/internal/cache/xmlcache/PivotalEntityResolverJUnitTest.java @@ -35,7 +35,6 @@ * Unit test for {@link PivotalEntityResolver} and * {@link DefaultEntityResolver2}. * - * @author jbarrett@pivotal.io * * @since 8.1 */ diff --git a/geode-core/src/test/java/com/gemstone/gemfire/internal/cache/xmlcache/RegionCreationJUnitTest.java b/geode-core/src/test/java/com/gemstone/gemfire/internal/cache/xmlcache/RegionCreationJUnitTest.java index e50fa6accb3f..5a81b944ee5b 100644 --- a/geode-core/src/test/java/com/gemstone/gemfire/internal/cache/xmlcache/RegionCreationJUnitTest.java +++ b/geode-core/src/test/java/com/gemstone/gemfire/internal/cache/xmlcache/RegionCreationJUnitTest.java @@ -31,7 +31,6 @@ /** * Unit test for {@link RegionCreation}. * - * @author jbarrett@pivotal.io * * @since 8.1 */ diff --git a/geode-core/src/test/java/com/gemstone/gemfire/internal/cache/xmlcache/XmlGeneratorUtilsJUnitTest.java b/geode-core/src/test/java/com/gemstone/gemfire/internal/cache/xmlcache/XmlGeneratorUtilsJUnitTest.java index 83452d839a58..15875f7a5283 100644 --- a/geode-core/src/test/java/com/gemstone/gemfire/internal/cache/xmlcache/XmlGeneratorUtilsJUnitTest.java +++ b/geode-core/src/test/java/com/gemstone/gemfire/internal/cache/xmlcache/XmlGeneratorUtilsJUnitTest.java @@ -37,7 +37,6 @@ /** * Unit Tests for {@link XmlGeneratorUtils}. * - * @author jbarrett@pivotal.io * * @since 8.1 */ diff --git a/geode-core/src/test/java/com/gemstone/gemfire/internal/compression/CompressionCacheConfigDUnitTest.java b/geode-core/src/test/java/com/gemstone/gemfire/internal/compression/CompressionCacheConfigDUnitTest.java index 653a37670398..75b8d6badbf1 100644 --- a/geode-core/src/test/java/com/gemstone/gemfire/internal/compression/CompressionCacheConfigDUnitTest.java +++ b/geode-core/src/test/java/com/gemstone/gemfire/internal/compression/CompressionCacheConfigDUnitTest.java @@ -36,7 +36,6 @@ /** * Tests configured and badly configured cache.xml files with regards to compression. * - * @author rholmes */ public class CompressionCacheConfigDUnitTest extends CacheTestCase { /** diff --git a/geode-core/src/test/java/com/gemstone/gemfire/internal/compression/CompressionCacheListenerDUnitTest.java b/geode-core/src/test/java/com/gemstone/gemfire/internal/compression/CompressionCacheListenerDUnitTest.java index 84a9faf09585..81f4b0f33291 100644 --- a/geode-core/src/test/java/com/gemstone/gemfire/internal/compression/CompressionCacheListenerDUnitTest.java +++ b/geode-core/src/test/java/com/gemstone/gemfire/internal/compression/CompressionCacheListenerDUnitTest.java @@ -39,7 +39,6 @@ /** * Asserts that values received in EntryEvents for CacheWriters and CacheListeners are not compressed. * - * @author rholmes */ public class CompressionCacheListenerDUnitTest extends CacheTestCase { /** diff --git a/geode-core/src/test/java/com/gemstone/gemfire/internal/compression/CompressionRegionConfigDUnitTest.java b/geode-core/src/test/java/com/gemstone/gemfire/internal/compression/CompressionRegionConfigDUnitTest.java index cd71a2ce2e87..fd48a3e82002 100644 --- a/geode-core/src/test/java/com/gemstone/gemfire/internal/compression/CompressionRegionConfigDUnitTest.java +++ b/geode-core/src/test/java/com/gemstone/gemfire/internal/compression/CompressionRegionConfigDUnitTest.java @@ -40,7 +40,6 @@ /** * Sanity checks on a number of basic cluster configurations with compression turned on. * - * @author rholmes */ public class CompressionRegionConfigDUnitTest extends CacheTestCase { /** diff --git a/geode-core/src/test/java/com/gemstone/gemfire/internal/compression/CompressionRegionFactoryDUnitTest.java b/geode-core/src/test/java/com/gemstone/gemfire/internal/compression/CompressionRegionFactoryDUnitTest.java index 7a0793b37323..dcedd38a4346 100644 --- a/geode-core/src/test/java/com/gemstone/gemfire/internal/compression/CompressionRegionFactoryDUnitTest.java +++ b/geode-core/src/test/java/com/gemstone/gemfire/internal/compression/CompressionRegionFactoryDUnitTest.java @@ -28,7 +28,6 @@ /** * Tests that the compressor region attribute is properly set or rejected by a RegionFactory. - * @author rholmes */ public class CompressionRegionFactoryDUnitTest extends CacheTestCase { /** diff --git a/geode-core/src/test/java/com/gemstone/gemfire/internal/compression/CompressionRegionOperationsDUnitTest.java b/geode-core/src/test/java/com/gemstone/gemfire/internal/compression/CompressionRegionOperationsDUnitTest.java index 32164bdc5479..1ba208d50119 100644 --- a/geode-core/src/test/java/com/gemstone/gemfire/internal/compression/CompressionRegionOperationsDUnitTest.java +++ b/geode-core/src/test/java/com/gemstone/gemfire/internal/compression/CompressionRegionOperationsDUnitTest.java @@ -36,7 +36,6 @@ /** * Tests basic region operations with compression enabled. * - * @author rholmes */ public class CompressionRegionOperationsDUnitTest extends CacheTestCase { /** diff --git a/geode-core/src/test/java/com/gemstone/gemfire/internal/compression/CompressionStatsDUnitTest.java b/geode-core/src/test/java/com/gemstone/gemfire/internal/compression/CompressionStatsDUnitTest.java index db1f63604531..d91234aca709 100644 --- a/geode-core/src/test/java/com/gemstone/gemfire/internal/compression/CompressionStatsDUnitTest.java +++ b/geode-core/src/test/java/com/gemstone/gemfire/internal/compression/CompressionStatsDUnitTest.java @@ -33,7 +33,6 @@ /** * Tests compression statistics. - * @author rholmes * @since 8.0 */ public class CompressionStatsDUnitTest extends CacheTestCase { @@ -651,7 +650,6 @@ private boolean enableClockStats(boolean clockStatsEnabled) { /** * Used to record compression statistics. - * @author rholmes */ private static final class CompressionStats { long vmTotalCompressionTime = 0; diff --git a/geode-core/src/test/java/com/gemstone/gemfire/internal/compression/SnappyCompressorJUnitTest.java b/geode-core/src/test/java/com/gemstone/gemfire/internal/compression/SnappyCompressorJUnitTest.java index deff1eabe432..53b50d646252 100644 --- a/geode-core/src/test/java/com/gemstone/gemfire/internal/compression/SnappyCompressorJUnitTest.java +++ b/geode-core/src/test/java/com/gemstone/gemfire/internal/compression/SnappyCompressorJUnitTest.java @@ -32,7 +32,6 @@ /** * Tests the Snappy {@link Compressor}. - * @author rholmes */ @Category(UnitTest.class) public class SnappyCompressorJUnitTest extends TestCase { diff --git a/geode-core/src/test/java/com/gemstone/gemfire/internal/datasource/AbstractPoolCacheJUnitTest.java b/geode-core/src/test/java/com/gemstone/gemfire/internal/datasource/AbstractPoolCacheJUnitTest.java index 58e8dfed3ba1..f3ca340a34a0 100644 --- a/geode-core/src/test/java/com/gemstone/gemfire/internal/datasource/AbstractPoolCacheJUnitTest.java +++ b/geode-core/src/test/java/com/gemstone/gemfire/internal/datasource/AbstractPoolCacheJUnitTest.java @@ -50,7 +50,6 @@ import com.gemstone.gemfire.test.junit.categories.IntegrationTest; /** - * @author tnegi */ @Category(IntegrationTest.class) public class AbstractPoolCacheJUnitTest { @@ -202,7 +201,6 @@ public void testCleanUp() { /** * Tests if an XAresource obtained from an XAConnection which is already * closed , can return null or not. - * @author Asif */ @Test public void testEffectOfBlockingTimeoutOnXAConnection() diff --git a/geode-core/src/test/java/com/gemstone/gemfire/internal/datasource/CleanUpJUnitTest.java b/geode-core/src/test/java/com/gemstone/gemfire/internal/datasource/CleanUpJUnitTest.java index adefffe63c2c..95d6224db3ba 100644 --- a/geode-core/src/test/java/com/gemstone/gemfire/internal/datasource/CleanUpJUnitTest.java +++ b/geode-core/src/test/java/com/gemstone/gemfire/internal/datasource/CleanUpJUnitTest.java @@ -39,7 +39,6 @@ import com.gemstone.gemfire.test.junit.categories.IntegrationTest; /** - * @author mitulb * * To change the template for this generated type comment go to Window - * Preferences - Java - Code Generation - Code and Comments diff --git a/geode-core/src/test/java/com/gemstone/gemfire/internal/datasource/ConnectionPoolCacheImplJUnitTest.java b/geode-core/src/test/java/com/gemstone/gemfire/internal/datasource/ConnectionPoolCacheImplJUnitTest.java index f49e336bb5f9..57a0474fb458 100644 --- a/geode-core/src/test/java/com/gemstone/gemfire/internal/datasource/ConnectionPoolCacheImplJUnitTest.java +++ b/geode-core/src/test/java/com/gemstone/gemfire/internal/datasource/ConnectionPoolCacheImplJUnitTest.java @@ -43,7 +43,6 @@ import com.gemstone.gemfire.test.junit.categories.IntegrationTest; /* - * @author tnegi this is a Multithreaded test for datasource connection pool. */ @Category(IntegrationTest.class) public class ConnectionPoolCacheImplJUnitTest { diff --git a/geode-core/src/test/java/com/gemstone/gemfire/internal/datasource/ConnectionPoolingJUnitTest.java b/geode-core/src/test/java/com/gemstone/gemfire/internal/datasource/ConnectionPoolingJUnitTest.java index e2c27b48f2bd..e9ef04bc081f 100755 --- a/geode-core/src/test/java/com/gemstone/gemfire/internal/datasource/ConnectionPoolingJUnitTest.java +++ b/geode-core/src/test/java/com/gemstone/gemfire/internal/datasource/ConnectionPoolingJUnitTest.java @@ -47,7 +47,6 @@ import com.gemstone.gemfire.test.junit.categories.IntegrationTest; /** - * @author Mitul * * */ diff --git a/geode-core/src/test/java/com/gemstone/gemfire/internal/datasource/DataSourceFactoryJUnitTest.java b/geode-core/src/test/java/com/gemstone/gemfire/internal/datasource/DataSourceFactoryJUnitTest.java index 972b8d16f08b..783cda32f170 100644 --- a/geode-core/src/test/java/com/gemstone/gemfire/internal/datasource/DataSourceFactoryJUnitTest.java +++ b/geode-core/src/test/java/com/gemstone/gemfire/internal/datasource/DataSourceFactoryJUnitTest.java @@ -37,7 +37,6 @@ import com.gemstone.gemfire.test.junit.categories.IntegrationTest; /* - * @author mitulb * */ @Category(IntegrationTest.class) diff --git a/geode-core/src/test/java/com/gemstone/gemfire/internal/datasource/RestartJUnitTest.java b/geode-core/src/test/java/com/gemstone/gemfire/internal/datasource/RestartJUnitTest.java index 1c1892bf048e..6f6dacfea177 100644 --- a/geode-core/src/test/java/com/gemstone/gemfire/internal/datasource/RestartJUnitTest.java +++ b/geode-core/src/test/java/com/gemstone/gemfire/internal/datasource/RestartJUnitTest.java @@ -38,7 +38,6 @@ import com.gemstone.gemfire.test.junit.categories.IntegrationTest; /** - * @author Nand Kishor * * This test check the graceful removal of all the resource * (DataSources , TransactionManager and UserTransaction and diff --git a/geode-core/src/test/java/com/gemstone/gemfire/internal/i18n/BasicI18nJUnitTest.java b/geode-core/src/test/java/com/gemstone/gemfire/internal/i18n/BasicI18nJUnitTest.java index 3e1efd88188a..05abe30fe823 100644 --- a/geode-core/src/test/java/com/gemstone/gemfire/internal/i18n/BasicI18nJUnitTest.java +++ b/geode-core/src/test/java/com/gemstone/gemfire/internal/i18n/BasicI18nJUnitTest.java @@ -32,7 +32,6 @@ /** * This class tests all basic i18n functionality. - * @author kbanks */ @Category(UnitTest.class) public class BasicI18nJUnitTest extends TestCase { diff --git a/geode-core/src/test/java/com/gemstone/gemfire/internal/io/CompositeOutputStreamJUnitTest.java b/geode-core/src/test/java/com/gemstone/gemfire/internal/io/CompositeOutputStreamJUnitTest.java index 28f9aa7a2d3c..11f9a79f00ed 100755 --- a/geode-core/src/test/java/com/gemstone/gemfire/internal/io/CompositeOutputStreamJUnitTest.java +++ b/geode-core/src/test/java/com/gemstone/gemfire/internal/io/CompositeOutputStreamJUnitTest.java @@ -35,7 +35,6 @@ /** * Unit tests for CompositeOutputStream. * - * @author Kirk Lund * @since 7.0 */ @Category(UnitTest.class) diff --git a/geode-core/src/test/java/com/gemstone/gemfire/internal/jndi/ContextJUnitTest.java b/geode-core/src/test/java/com/gemstone/gemfire/internal/jndi/ContextJUnitTest.java index 7f0eb068bbb4..2fe0518f1846 100755 --- a/geode-core/src/test/java/com/gemstone/gemfire/internal/jndi/ContextJUnitTest.java +++ b/geode-core/src/test/java/com/gemstone/gemfire/internal/jndi/ContextJUnitTest.java @@ -39,7 +39,6 @@ /** * Tests all basic methods of ContextImpl. * - * @author Nand Kishor Jha */ @Category(UnitTest.class) public class ContextJUnitTest extends TestCase { diff --git a/geode-core/src/test/java/com/gemstone/gemfire/internal/jta/CacheUtils.java b/geode-core/src/test/java/com/gemstone/gemfire/internal/jta/CacheUtils.java index af4c3301b62b..29a88dae6662 100644 --- a/geode-core/src/test/java/com/gemstone/gemfire/internal/jta/CacheUtils.java +++ b/geode-core/src/test/java/com/gemstone/gemfire/internal/jta/CacheUtils.java @@ -43,7 +43,6 @@ /** * - * @author Nand Kishor */ public class CacheUtils { public static DistributedSystem ds; diff --git a/geode-core/src/test/java/com/gemstone/gemfire/internal/jta/DataSourceJTAJUnitTest.java b/geode-core/src/test/java/com/gemstone/gemfire/internal/jta/DataSourceJTAJUnitTest.java index 16a0ea549896..abe5a517a175 100755 --- a/geode-core/src/test/java/com/gemstone/gemfire/internal/jta/DataSourceJTAJUnitTest.java +++ b/geode-core/src/test/java/com/gemstone/gemfire/internal/jta/DataSourceJTAJUnitTest.java @@ -50,7 +50,6 @@ * behavior when DDL query is issued after inserts abd before commit or * rollback. * - * @author Prafulla Chaudhari */ @Category(IntegrationTest.class) public class DataSourceJTAJUnitTest { diff --git a/geode-core/src/test/java/com/gemstone/gemfire/internal/jta/ExceptionJUnitTest.java b/geode-core/src/test/java/com/gemstone/gemfire/internal/jta/ExceptionJUnitTest.java index c38d1e3e9ef2..4ff2896071ce 100644 --- a/geode-core/src/test/java/com/gemstone/gemfire/internal/jta/ExceptionJUnitTest.java +++ b/geode-core/src/test/java/com/gemstone/gemfire/internal/jta/ExceptionJUnitTest.java @@ -38,8 +38,6 @@ /** * Check if the correct expectations are being thrown when they are supposed to. * - * @author Mitul bid - * @author Kirk Lund */ @Category(IntegrationTest.class) public class ExceptionJUnitTest { diff --git a/geode-core/src/test/java/com/gemstone/gemfire/internal/jta/JTAUtils.java b/geode-core/src/test/java/com/gemstone/gemfire/internal/jta/JTAUtils.java index e6971060371b..7c1e1b51ed4d 100644 --- a/geode-core/src/test/java/com/gemstone/gemfire/internal/jta/JTAUtils.java +++ b/geode-core/src/test/java/com/gemstone/gemfire/internal/jta/JTAUtils.java @@ -24,7 +24,6 @@ /** * - * @author prabir */ //import java.io.*; diff --git a/geode-core/src/test/java/com/gemstone/gemfire/internal/jta/JtaIntegrationJUnitTest.java b/geode-core/src/test/java/com/gemstone/gemfire/internal/jta/JtaIntegrationJUnitTest.java index 4afbee3294e7..e3feb017727d 100644 --- a/geode-core/src/test/java/com/gemstone/gemfire/internal/jta/JtaIntegrationJUnitTest.java +++ b/geode-core/src/test/java/com/gemstone/gemfire/internal/jta/JtaIntegrationJUnitTest.java @@ -41,7 +41,6 @@ /** * Moved some non-DUnit tests over from com/gemstone/gemfire/internal/jta/dunit/JTADUnitTest * - * @author Kirk Lund */ @Category(IntegrationTest.class) public class JtaIntegrationJUnitTest { diff --git a/geode-core/src/test/java/com/gemstone/gemfire/internal/jta/SyncImpl.java b/geode-core/src/test/java/com/gemstone/gemfire/internal/jta/SyncImpl.java index ddadbe5d4cd8..e539b1cd0070 100644 --- a/geode-core/src/test/java/com/gemstone/gemfire/internal/jta/SyncImpl.java +++ b/geode-core/src/test/java/com/gemstone/gemfire/internal/jta/SyncImpl.java @@ -20,7 +20,6 @@ import javax.transaction.Synchronization; /* - * @author Mitul Bid */ public class SyncImpl implements Synchronization { public boolean befCompletion = false ; diff --git a/geode-core/src/test/java/com/gemstone/gemfire/internal/jta/TransactionImplJUnitTest.java b/geode-core/src/test/java/com/gemstone/gemfire/internal/jta/TransactionImplJUnitTest.java index 536727e6a2a8..f5bb3b56d997 100644 --- a/geode-core/src/test/java/com/gemstone/gemfire/internal/jta/TransactionImplJUnitTest.java +++ b/geode-core/src/test/java/com/gemstone/gemfire/internal/jta/TransactionImplJUnitTest.java @@ -17,7 +17,6 @@ /* * Test TransactionImpl methods not tested by UserTransactionImpl * - * @author Mitul Bid */ package com.gemstone.gemfire.internal.jta; @@ -40,8 +39,6 @@ import com.gemstone.gemfire.test.junit.categories.IntegrationTest; /** - * @author unknown - * @author Kirk Lund */ @Category(IntegrationTest.class) public class TransactionImplJUnitTest { diff --git a/geode-core/src/test/java/com/gemstone/gemfire/internal/jta/TransactionManagerImplJUnitTest.java b/geode-core/src/test/java/com/gemstone/gemfire/internal/jta/TransactionManagerImplJUnitTest.java index e2cb53d098b9..5f7be9ffd363 100644 --- a/geode-core/src/test/java/com/gemstone/gemfire/internal/jta/TransactionManagerImplJUnitTest.java +++ b/geode-core/src/test/java/com/gemstone/gemfire/internal/jta/TransactionManagerImplJUnitTest.java @@ -45,8 +45,6 @@ /** * Test TransactionManagerImpl methods not tested by UserTransactionImplTest * - * @author Mitul Bid - * @author Kirk Lund */ @Category(IntegrationTest.class) public class TransactionManagerImplJUnitTest { diff --git a/geode-core/src/test/java/com/gemstone/gemfire/internal/jta/UserTransactionImplJUnitTest.java b/geode-core/src/test/java/com/gemstone/gemfire/internal/jta/UserTransactionImplJUnitTest.java index 3e724fd66016..cae89a3c0c87 100644 --- a/geode-core/src/test/java/com/gemstone/gemfire/internal/jta/UserTransactionImplJUnitTest.java +++ b/geode-core/src/test/java/com/gemstone/gemfire/internal/jta/UserTransactionImplJUnitTest.java @@ -38,8 +38,6 @@ import com.gemstone.gemfire.test.junit.categories.IntegrationTest; /** - * @author unknown - * @author Kirk Lund */ @Category(IntegrationTest.class) public class UserTransactionImplJUnitTest { diff --git a/geode-core/src/test/java/com/gemstone/gemfire/internal/jta/dunit/CommitThread.java b/geode-core/src/test/java/com/gemstone/gemfire/internal/jta/dunit/CommitThread.java index 90ddd5f43bf9..6300fb7af9d1 100644 --- a/geode-core/src/test/java/com/gemstone/gemfire/internal/jta/dunit/CommitThread.java +++ b/geode-core/src/test/java/com/gemstone/gemfire/internal/jta/dunit/CommitThread.java @@ -36,7 +36,6 @@ *This is to test the concurrent execution of the run method and see if transaction manager handles it properly * * -*@author Prafulla Chaudhari * */ diff --git a/geode-core/src/test/java/com/gemstone/gemfire/internal/jta/dunit/RollbackThread.java b/geode-core/src/test/java/com/gemstone/gemfire/internal/jta/dunit/RollbackThread.java index f55ab175c412..c613dafe81ba 100644 --- a/geode-core/src/test/java/com/gemstone/gemfire/internal/jta/dunit/RollbackThread.java +++ b/geode-core/src/test/java/com/gemstone/gemfire/internal/jta/dunit/RollbackThread.java @@ -36,7 +36,6 @@ *This is to test the concurrent execution of the run method and see if transaction manager handles it properly * * -*@author Prafulla Chaudhari * */ diff --git a/geode-core/src/test/java/com/gemstone/gemfire/internal/jta/dunit/TransactionTimeOutDUnitTest.java b/geode-core/src/test/java/com/gemstone/gemfire/internal/jta/dunit/TransactionTimeOutDUnitTest.java index 1a19b0bb7863..6eb2da10d830 100755 --- a/geode-core/src/test/java/com/gemstone/gemfire/internal/jta/dunit/TransactionTimeOutDUnitTest.java +++ b/geode-core/src/test/java/com/gemstone/gemfire/internal/jta/dunit/TransactionTimeOutDUnitTest.java @@ -51,7 +51,6 @@ import com.gemstone.gemfire.util.test.TestUtil; /** -*@author Mitul D Bid *This test tests TransactionTimeOut functionality */ public class TransactionTimeOutDUnitTest extends DistributedTestCase { diff --git a/geode-core/src/test/java/com/gemstone/gemfire/internal/jta/dunit/TxnManagerMultiThreadDUnitTest.java b/geode-core/src/test/java/com/gemstone/gemfire/internal/jta/dunit/TxnManagerMultiThreadDUnitTest.java index 8096dc0aec63..a4297c0823ac 100755 --- a/geode-core/src/test/java/com/gemstone/gemfire/internal/jta/dunit/TxnManagerMultiThreadDUnitTest.java +++ b/geode-core/src/test/java/com/gemstone/gemfire/internal/jta/dunit/TxnManagerMultiThreadDUnitTest.java @@ -58,7 +58,6 @@ * transaction manager is tested. * * - * @author Prafulla Chaudhari * */ @FixMethodOrder(MethodSorters.NAME_ASCENDING) diff --git a/geode-core/src/test/java/com/gemstone/gemfire/internal/jta/dunit/TxnTimeOutDUnitTest.java b/geode-core/src/test/java/com/gemstone/gemfire/internal/jta/dunit/TxnTimeOutDUnitTest.java index 746972a641f5..201a855e282a 100755 --- a/geode-core/src/test/java/com/gemstone/gemfire/internal/jta/dunit/TxnTimeOutDUnitTest.java +++ b/geode-core/src/test/java/com/gemstone/gemfire/internal/jta/dunit/TxnTimeOutDUnitTest.java @@ -45,7 +45,6 @@ import com.gemstone.gemfire.util.test.TestUtil; /** -*@author Mitul D Bid *This test sees if the TransactionTimeOut works properly */ public class TxnTimeOutDUnitTest extends DistributedTestCase { diff --git a/geode-core/src/test/java/com/gemstone/gemfire/internal/jta/functional/CacheJUnitTest.java b/geode-core/src/test/java/com/gemstone/gemfire/internal/jta/functional/CacheJUnitTest.java index b548f350c940..582141e83c16 100644 --- a/geode-core/src/test/java/com/gemstone/gemfire/internal/jta/functional/CacheJUnitTest.java +++ b/geode-core/src/test/java/com/gemstone/gemfire/internal/jta/functional/CacheJUnitTest.java @@ -67,7 +67,6 @@ * and name fields respectively. Test # 15 & 16 has the dependency to run on * CloudScape database only due to variations in DDL. * - * @author prabir */ @Category(IntegrationTest.class) public class CacheJUnitTest { diff --git a/geode-core/src/test/java/com/gemstone/gemfire/internal/jta/functional/TestXACacheLoader.java b/geode-core/src/test/java/com/gemstone/gemfire/internal/jta/functional/TestXACacheLoader.java index c49ac1f249e8..abbca4a43ce4 100644 --- a/geode-core/src/test/java/com/gemstone/gemfire/internal/jta/functional/TestXACacheLoader.java +++ b/geode-core/src/test/java/com/gemstone/gemfire/internal/jta/functional/TestXACacheLoader.java @@ -29,7 +29,6 @@ * A CacheLoader used in testing. Users should override * the "2" method. * - * @author GemStone Systems, Inc. * * @since 3.0 */ diff --git a/geode-core/src/test/java/com/gemstone/gemfire/internal/lang/ClassUtilsJUnitTest.java b/geode-core/src/test/java/com/gemstone/gemfire/internal/lang/ClassUtilsJUnitTest.java index 2093e5af7079..7780b3e28b96 100644 --- a/geode-core/src/test/java/com/gemstone/gemfire/internal/lang/ClassUtilsJUnitTest.java +++ b/geode-core/src/test/java/com/gemstone/gemfire/internal/lang/ClassUtilsJUnitTest.java @@ -30,7 +30,6 @@ * The ClassUtilsJUnitTest class is a test suite with test cases to test the contract and functionality of the ClassUtils * class. *

    - * @author John Blum * @see com.gemstone.gemfire.internal.lang.ClassUtils * @see org.junit.Assert * @see org.junit.Test diff --git a/geode-core/src/test/java/com/gemstone/gemfire/internal/lang/InOutParameterJUnitTest.java b/geode-core/src/test/java/com/gemstone/gemfire/internal/lang/InOutParameterJUnitTest.java index c5d6b124a4c8..267c538fb0fa 100644 --- a/geode-core/src/test/java/com/gemstone/gemfire/internal/lang/InOutParameterJUnitTest.java +++ b/geode-core/src/test/java/com/gemstone/gemfire/internal/lang/InOutParameterJUnitTest.java @@ -27,7 +27,6 @@ * The InOutParameterJUnitTest class is a test suite with test cases to test the contract and functionality of the * InOutParameter class. *

    - * @author John Blum * @see com.gemstone.gemfire.internal.lang.InOutParameter * @see org.junit.Test * @since 6.8 diff --git a/geode-core/src/test/java/com/gemstone/gemfire/internal/lang/InitializerJUnitTest.java b/geode-core/src/test/java/com/gemstone/gemfire/internal/lang/InitializerJUnitTest.java index 4d776a22a1c1..53e6c9495fb7 100644 --- a/geode-core/src/test/java/com/gemstone/gemfire/internal/lang/InitializerJUnitTest.java +++ b/geode-core/src/test/java/com/gemstone/gemfire/internal/lang/InitializerJUnitTest.java @@ -32,7 +32,6 @@ * The InitializerJUnitTest class is a test suite of test cases testing the contract and functionality of the Initializer * utility class. *

    - * @author John Blum * @see com.gemstone.gemfire.internal.lang.Initializer * @see org.jmock.Mockery * @see org.junit.Assert diff --git a/geode-core/src/test/java/com/gemstone/gemfire/internal/lang/ObjectUtilsJUnitTest.java b/geode-core/src/test/java/com/gemstone/gemfire/internal/lang/ObjectUtilsJUnitTest.java index 867fbb643b31..faaec6af8fc9 100644 --- a/geode-core/src/test/java/com/gemstone/gemfire/internal/lang/ObjectUtilsJUnitTest.java +++ b/geode-core/src/test/java/com/gemstone/gemfire/internal/lang/ObjectUtilsJUnitTest.java @@ -27,7 +27,6 @@ * The ObjectUtilsJUnitTest class is a test suite of test cases for testing the contract and functionality of the ObjectUtils * class. *

    - * @author John Blum * @see com.gemstone.gemfire.internal.lang.ObjectUtils * @see org.junit.Assert * @see org.junit.Test diff --git a/geode-core/src/test/java/com/gemstone/gemfire/internal/lang/StringUtilsJUnitTest.java b/geode-core/src/test/java/com/gemstone/gemfire/internal/lang/StringUtilsJUnitTest.java index 031921cddd8b..98c98363532c 100644 --- a/geode-core/src/test/java/com/gemstone/gemfire/internal/lang/StringUtilsJUnitTest.java +++ b/geode-core/src/test/java/com/gemstone/gemfire/internal/lang/StringUtilsJUnitTest.java @@ -34,7 +34,6 @@ * The StringUtilsJUnitTest is a test suite containing test cases for testing the contract and functionality of * the StringUtils class. *

    - * @author John Blum * @see com.gemstone.gemfire.internal.lang.StringUtils * @see org.junit.Assert * @see org.junit.Test diff --git a/geode-core/src/test/java/com/gemstone/gemfire/internal/lang/SystemUtilsJUnitTest.java b/geode-core/src/test/java/com/gemstone/gemfire/internal/lang/SystemUtilsJUnitTest.java index 71acacc77b99..d564c2ece9b9 100644 --- a/geode-core/src/test/java/com/gemstone/gemfire/internal/lang/SystemUtilsJUnitTest.java +++ b/geode-core/src/test/java/com/gemstone/gemfire/internal/lang/SystemUtilsJUnitTest.java @@ -29,7 +29,6 @@ * The SystemUtilsJUnitTest class is a test suite of test cases for testing the contract and functionality of the SystemUtils * class. *

    - * @author John Blum * @see com.gemstone.gemfire.internal.lang.SystemUtils * @see org.junit.Assert * @see org.junit.Test diff --git a/geode-core/src/test/java/com/gemstone/gemfire/internal/lang/ThreadUtilsJUnitTest.java b/geode-core/src/test/java/com/gemstone/gemfire/internal/lang/ThreadUtilsJUnitTest.java index 4102786f50fd..62eb2c8e5761 100644 --- a/geode-core/src/test/java/com/gemstone/gemfire/internal/lang/ThreadUtilsJUnitTest.java +++ b/geode-core/src/test/java/com/gemstone/gemfire/internal/lang/ThreadUtilsJUnitTest.java @@ -40,7 +40,6 @@ * The ThreadUtilsJUnitTest class is a test suite of test cases for testing the contract and functionality of the ThreadUtils * class. *

    - * @author John Blum * @see com.gemstone.gemfire.internal.lang.ThreadUtils * @see org.jmock.Expectations * @see org.jmock.Mockery diff --git a/geode-core/src/test/java/com/gemstone/gemfire/internal/logging/DistributedSystemLogFileJUnitTest.java b/geode-core/src/test/java/com/gemstone/gemfire/internal/logging/DistributedSystemLogFileJUnitTest.java index b3f40290d759..69df87367463 100644 --- a/geode-core/src/test/java/com/gemstone/gemfire/internal/logging/DistributedSystemLogFileJUnitTest.java +++ b/geode-core/src/test/java/com/gemstone/gemfire/internal/logging/DistributedSystemLogFileJUnitTest.java @@ -50,7 +50,6 @@ /** * Connects DistributedSystem and tests logging behavior at a high level. * - * @author Kirk Lund */ @Category(IntegrationTest.class) public class DistributedSystemLogFileJUnitTest { diff --git a/geode-core/src/test/java/com/gemstone/gemfire/internal/logging/LocatorLogFileJUnitTest.java b/geode-core/src/test/java/com/gemstone/gemfire/internal/logging/LocatorLogFileJUnitTest.java index ffb09cedf5c3..df9e5b6488bd 100644 --- a/geode-core/src/test/java/com/gemstone/gemfire/internal/logging/LocatorLogFileJUnitTest.java +++ b/geode-core/src/test/java/com/gemstone/gemfire/internal/logging/LocatorLogFileJUnitTest.java @@ -42,7 +42,6 @@ /** * Creates Locator and tests logging behavior at a high level. * - * @author Kirk Lund */ @Category(IntegrationTest.class) public class LocatorLogFileJUnitTest { diff --git a/geode-core/src/test/java/com/gemstone/gemfire/internal/logging/LogServiceIntegrationJUnitTest.java b/geode-core/src/test/java/com/gemstone/gemfire/internal/logging/LogServiceIntegrationJUnitTest.java index bb3fecd337e0..efe8c832687c 100755 --- a/geode-core/src/test/java/com/gemstone/gemfire/internal/logging/LogServiceIntegrationJUnitTest.java +++ b/geode-core/src/test/java/com/gemstone/gemfire/internal/logging/LogServiceIntegrationJUnitTest.java @@ -43,7 +43,6 @@ /** * Integration tests for LogService and how it configures and uses log4j2 * - * @author Kirk Lund */ @Category(IntegrationTest.class) public class LogServiceIntegrationJUnitTest { diff --git a/geode-core/src/test/java/com/gemstone/gemfire/internal/logging/LogServiceJUnitTest.java b/geode-core/src/test/java/com/gemstone/gemfire/internal/logging/LogServiceJUnitTest.java index 1046fbcb1df5..ea2a1e94e327 100644 --- a/geode-core/src/test/java/com/gemstone/gemfire/internal/logging/LogServiceJUnitTest.java +++ b/geode-core/src/test/java/com/gemstone/gemfire/internal/logging/LogServiceJUnitTest.java @@ -39,7 +39,6 @@ /** * Unit tests for LogService * - * @author Kirk Lund */ @Category(UnitTest.class) @RunWith(JUnitParamsRunner.class) diff --git a/geode-core/src/test/java/com/gemstone/gemfire/internal/logging/LogWriterPerformanceTest.java b/geode-core/src/test/java/com/gemstone/gemfire/internal/logging/LogWriterPerformanceTest.java index 1f72a6b61fd3..4498ca61a265 100644 --- a/geode-core/src/test/java/com/gemstone/gemfire/internal/logging/LogWriterPerformanceTest.java +++ b/geode-core/src/test/java/com/gemstone/gemfire/internal/logging/LogWriterPerformanceTest.java @@ -33,7 +33,6 @@ /** * Tests performance of logging when level is OFF. * - * @author Kirk Lund */ @Category(PerformanceTest.class) @Ignore("Tests have no assertions") diff --git a/geode-core/src/test/java/com/gemstone/gemfire/internal/logging/LoggingPerformanceTestCase.java b/geode-core/src/test/java/com/gemstone/gemfire/internal/logging/LoggingPerformanceTestCase.java index 19ef84a9783f..c7f326f494eb 100644 --- a/geode-core/src/test/java/com/gemstone/gemfire/internal/logging/LoggingPerformanceTestCase.java +++ b/geode-core/src/test/java/com/gemstone/gemfire/internal/logging/LoggingPerformanceTestCase.java @@ -26,7 +26,6 @@ /** * Tests performance of logging when level is OFF. * - * @author Kirk Lund */ public abstract class LoggingPerformanceTestCase extends TestCase { diff --git a/geode-core/src/test/java/com/gemstone/gemfire/internal/logging/MergeLogFilesJUnitTest.java b/geode-core/src/test/java/com/gemstone/gemfire/internal/logging/MergeLogFilesJUnitTest.java index 32d38c8dc07b..c62593bf669a 100644 --- a/geode-core/src/test/java/com/gemstone/gemfire/internal/logging/MergeLogFilesJUnitTest.java +++ b/geode-core/src/test/java/com/gemstone/gemfire/internal/logging/MergeLogFilesJUnitTest.java @@ -48,7 +48,6 @@ * This class tests the functionality of the (new multi-threaded) * {@link MergeLogFiles} utility. * - * @author David Whitlock * */ @Category(IntegrationTest.class) diff --git a/geode-core/src/test/java/com/gemstone/gemfire/internal/logging/SortLogFileJUnitTest.java b/geode-core/src/test/java/com/gemstone/gemfire/internal/logging/SortLogFileJUnitTest.java index 47d678a1773a..24002f921598 100644 --- a/geode-core/src/test/java/com/gemstone/gemfire/internal/logging/SortLogFileJUnitTest.java +++ b/geode-core/src/test/java/com/gemstone/gemfire/internal/logging/SortLogFileJUnitTest.java @@ -37,7 +37,6 @@ /** * Tests the functionality of the {@link SortLogFile} program. * - * @author David Whitlock * * @since 3.0 */ diff --git a/geode-core/src/test/java/com/gemstone/gemfire/internal/logging/TestLogWriterFactory.java b/geode-core/src/test/java/com/gemstone/gemfire/internal/logging/TestLogWriterFactory.java index 4c46503d3f77..24b3904e1438 100644 --- a/geode-core/src/test/java/com/gemstone/gemfire/internal/logging/TestLogWriterFactory.java +++ b/geode-core/src/test/java/com/gemstone/gemfire/internal/logging/TestLogWriterFactory.java @@ -37,7 +37,6 @@ /** * Creates LogWriter instances for testing. * - * @author Kirk Lund */ public class TestLogWriterFactory extends Assert { diff --git a/geode-core/src/test/java/com/gemstone/gemfire/internal/logging/log4j/AlertAppenderJUnitTest.java b/geode-core/src/test/java/com/gemstone/gemfire/internal/logging/log4j/AlertAppenderJUnitTest.java index 93e683f18773..a1d5e9d9e26f 100644 --- a/geode-core/src/test/java/com/gemstone/gemfire/internal/logging/log4j/AlertAppenderJUnitTest.java +++ b/geode-core/src/test/java/com/gemstone/gemfire/internal/logging/log4j/AlertAppenderJUnitTest.java @@ -45,7 +45,6 @@ /** * Tests the AlertAppender. * - * @author David Hoots */ @Category(UnitTest.class) public class AlertAppenderJUnitTest { diff --git a/geode-core/src/test/java/com/gemstone/gemfire/internal/logging/log4j/ConfigLocatorJUnitTest.java b/geode-core/src/test/java/com/gemstone/gemfire/internal/logging/log4j/ConfigLocatorJUnitTest.java index 6e505df4aa19..885afa43f82a 100755 --- a/geode-core/src/test/java/com/gemstone/gemfire/internal/logging/log4j/ConfigLocatorJUnitTest.java +++ b/geode-core/src/test/java/com/gemstone/gemfire/internal/logging/log4j/ConfigLocatorJUnitTest.java @@ -37,7 +37,6 @@ /** * UnitTest for ConfigLocator which is used to find the Log4J 2 configuration file. * - * @author Kirk Lund * @since 8.2 */ @Category(UnitTest.class) diff --git a/geode-core/src/test/java/com/gemstone/gemfire/internal/logging/log4j/FastLoggerIntegrationJUnitTest.java b/geode-core/src/test/java/com/gemstone/gemfire/internal/logging/log4j/FastLoggerIntegrationJUnitTest.java index bf9943e10463..74c8e8de5a83 100644 --- a/geode-core/src/test/java/com/gemstone/gemfire/internal/logging/log4j/FastLoggerIntegrationJUnitTest.java +++ b/geode-core/src/test/java/com/gemstone/gemfire/internal/logging/log4j/FastLoggerIntegrationJUnitTest.java @@ -46,8 +46,6 @@ * * For filters see https://logging.apache.org/log4j/2.0/manual/filters.html * - * @author Kirk Lund - * @author David Hoots */ @Category(IntegrationTest.class) public class FastLoggerIntegrationJUnitTest { diff --git a/geode-core/src/test/java/com/gemstone/gemfire/internal/logging/log4j/FastLoggerWithDefaultConfigJUnitTest.java b/geode-core/src/test/java/com/gemstone/gemfire/internal/logging/log4j/FastLoggerWithDefaultConfigJUnitTest.java index 208f92d9eb8e..6a68119a32a6 100755 --- a/geode-core/src/test/java/com/gemstone/gemfire/internal/logging/log4j/FastLoggerWithDefaultConfigJUnitTest.java +++ b/geode-core/src/test/java/com/gemstone/gemfire/internal/logging/log4j/FastLoggerWithDefaultConfigJUnitTest.java @@ -33,8 +33,6 @@ /** * Integration tests for FastLogger when using the default log4j2 config for GemFire. * - * @author Kirk Lund - * @author David Hoots */ @Category(IntegrationTest.class) public class FastLoggerWithDefaultConfigJUnitTest { diff --git a/geode-core/src/test/java/com/gemstone/gemfire/internal/logging/log4j/LocalizedMessageJUnitTest.java b/geode-core/src/test/java/com/gemstone/gemfire/internal/logging/log4j/LocalizedMessageJUnitTest.java index 37734d946d8a..5c41ae04d0ee 100644 --- a/geode-core/src/test/java/com/gemstone/gemfire/internal/logging/log4j/LocalizedMessageJUnitTest.java +++ b/geode-core/src/test/java/com/gemstone/gemfire/internal/logging/log4j/LocalizedMessageJUnitTest.java @@ -31,7 +31,6 @@ * Tests for LocalizedMessage which bridges our StringId LocalizedStrings for * Log4J2 usage. * - * @author Kirk Lund */ @Category(UnitTest.class) public class LocalizedMessageJUnitTest { diff --git a/geode-core/src/test/java/com/gemstone/gemfire/internal/logging/log4j/LogWriterAppenderJUnitTest.java b/geode-core/src/test/java/com/gemstone/gemfire/internal/logging/log4j/LogWriterAppenderJUnitTest.java index 3f74988afa6a..58abcc8e8050 100644 --- a/geode-core/src/test/java/com/gemstone/gemfire/internal/logging/log4j/LogWriterAppenderJUnitTest.java +++ b/geode-core/src/test/java/com/gemstone/gemfire/internal/logging/log4j/LogWriterAppenderJUnitTest.java @@ -41,7 +41,6 @@ /** * Tests the LogWriterAppender. * - * @author David Hoots */ @Category(UnitTest.class) public class LogWriterAppenderJUnitTest { diff --git a/geode-core/src/test/java/com/gemstone/gemfire/internal/net/SocketUtilsJUnitTest.java b/geode-core/src/test/java/com/gemstone/gemfire/internal/net/SocketUtilsJUnitTest.java index a500e07838a6..4d22a4a0746a 100644 --- a/geode-core/src/test/java/com/gemstone/gemfire/internal/net/SocketUtilsJUnitTest.java +++ b/geode-core/src/test/java/com/gemstone/gemfire/internal/net/SocketUtilsJUnitTest.java @@ -36,7 +36,6 @@ * The SocketUtilsJUnitTest class is a test suite of test cases testing the contract and functionality of the SocketUtils * utility class. *

    - * @author John Blum * @see com.gemstone.gemfire.internal.net.SocketUtils * @see org.jmock.Expectations * @see org.jmock.Mockery diff --git a/geode-core/src/test/java/com/gemstone/gemfire/internal/offheap/DataTypeJUnitTest.java b/geode-core/src/test/java/com/gemstone/gemfire/internal/offheap/DataTypeJUnitTest.java index 438acb70393f..fe176e0ab25f 100755 --- a/geode-core/src/test/java/com/gemstone/gemfire/internal/offheap/DataTypeJUnitTest.java +++ b/geode-core/src/test/java/com/gemstone/gemfire/internal/offheap/DataTypeJUnitTest.java @@ -76,7 +76,6 @@ /** * Tests the DataType support for off-heap MemoryInspector. - * @author Kirk Lund */ @Category(UnitTest.class) @RunWith(PowerMockRunner.class) diff --git a/geode-core/src/test/java/com/gemstone/gemfire/internal/offheap/NullOffHeapMemoryStats.java b/geode-core/src/test/java/com/gemstone/gemfire/internal/offheap/NullOffHeapMemoryStats.java index 88bab77c90e2..fb8e8d147edb 100755 --- a/geode-core/src/test/java/com/gemstone/gemfire/internal/offheap/NullOffHeapMemoryStats.java +++ b/geode-core/src/test/java/com/gemstone/gemfire/internal/offheap/NullOffHeapMemoryStats.java @@ -21,7 +21,6 @@ /** * Null implementation of OffHeapMemoryStats for testing. * - * @author Kirk Lund */ public class NullOffHeapMemoryStats implements OffHeapMemoryStats { private boolean isClosed; diff --git a/geode-core/src/test/java/com/gemstone/gemfire/internal/offheap/NullOutOfOffHeapMemoryListener.java b/geode-core/src/test/java/com/gemstone/gemfire/internal/offheap/NullOutOfOffHeapMemoryListener.java index 7d02c9fc5c55..3e260b6cf131 100755 --- a/geode-core/src/test/java/com/gemstone/gemfire/internal/offheap/NullOutOfOffHeapMemoryListener.java +++ b/geode-core/src/test/java/com/gemstone/gemfire/internal/offheap/NullOutOfOffHeapMemoryListener.java @@ -21,7 +21,6 @@ /** * Null implementation of NullOutOfOffHeapMemoryListener for testing. * - * @author Kirk Lund */ public class NullOutOfOffHeapMemoryListener implements OutOfOffHeapMemoryListener { private boolean isClosed; diff --git a/geode-core/src/test/java/com/gemstone/gemfire/internal/offheap/OffHeapIndexJUnitTest.java b/geode-core/src/test/java/com/gemstone/gemfire/internal/offheap/OffHeapIndexJUnitTest.java index ec494e86b065..72eebc6a23cc 100644 --- a/geode-core/src/test/java/com/gemstone/gemfire/internal/offheap/OffHeapIndexJUnitTest.java +++ b/geode-core/src/test/java/com/gemstone/gemfire/internal/offheap/OffHeapIndexJUnitTest.java @@ -39,7 +39,6 @@ /** * Test off-heap regions with indexes. * - * @author darrel * */ @Category(IntegrationTest.class) diff --git a/geode-core/src/test/java/com/gemstone/gemfire/internal/offheap/OutOfOffHeapMemoryDUnitTest.java b/geode-core/src/test/java/com/gemstone/gemfire/internal/offheap/OutOfOffHeapMemoryDUnitTest.java index 25de4ea4255c..ea5246015ca0 100755 --- a/geode-core/src/test/java/com/gemstone/gemfire/internal/offheap/OutOfOffHeapMemoryDUnitTest.java +++ b/geode-core/src/test/java/com/gemstone/gemfire/internal/offheap/OutOfOffHeapMemoryDUnitTest.java @@ -53,7 +53,6 @@ /** * Test behavior of region when running out of off-heap memory. * - * @author Kirk Lund */ @SuppressWarnings("serial") public class OutOfOffHeapMemoryDUnitTest extends CacheTestCase { diff --git a/geode-core/src/test/java/com/gemstone/gemfire/internal/process/BlockingProcessStreamReaderJUnitTest.java b/geode-core/src/test/java/com/gemstone/gemfire/internal/process/BlockingProcessStreamReaderJUnitTest.java index 414e78f3a30a..d83d9fe0fe38 100755 --- a/geode-core/src/test/java/com/gemstone/gemfire/internal/process/BlockingProcessStreamReaderJUnitTest.java +++ b/geode-core/src/test/java/com/gemstone/gemfire/internal/process/BlockingProcessStreamReaderJUnitTest.java @@ -42,7 +42,6 @@ * TRAC bug #51967 which is caused by a JDK bug. The test {@link #hangsOnWindows} * verifies the existence of the bug. * - * @author Kirk Lund * @since 8.2 */ @Category(IntegrationTest.class) diff --git a/geode-core/src/test/java/com/gemstone/gemfire/internal/process/LocalProcessControllerJUnitTest.java b/geode-core/src/test/java/com/gemstone/gemfire/internal/process/LocalProcessControllerJUnitTest.java index acf8dd70b61e..da811b5c96c7 100755 --- a/geode-core/src/test/java/com/gemstone/gemfire/internal/process/LocalProcessControllerJUnitTest.java +++ b/geode-core/src/test/java/com/gemstone/gemfire/internal/process/LocalProcessControllerJUnitTest.java @@ -39,7 +39,6 @@ /** * Unit tests for LocalProcessController. * - * @author Kirk Lund * @since 7.0 */ @Category(UnitTest.class) diff --git a/geode-core/src/test/java/com/gemstone/gemfire/internal/process/LocalProcessLauncherDUnitTest.java b/geode-core/src/test/java/com/gemstone/gemfire/internal/process/LocalProcessLauncherDUnitTest.java index cb0574017e65..c6b438a93d8c 100755 --- a/geode-core/src/test/java/com/gemstone/gemfire/internal/process/LocalProcessLauncherDUnitTest.java +++ b/geode-core/src/test/java/com/gemstone/gemfire/internal/process/LocalProcessLauncherDUnitTest.java @@ -33,7 +33,6 @@ /** * Multi-process tests for ProcessLauncher. * - * @author Kirk Lund * @since 7.0 */ @SuppressWarnings("serial") diff --git a/geode-core/src/test/java/com/gemstone/gemfire/internal/process/LocalProcessLauncherJUnitTest.java b/geode-core/src/test/java/com/gemstone/gemfire/internal/process/LocalProcessLauncherJUnitTest.java index 8dc7aa64f0a2..78dc6bb43881 100755 --- a/geode-core/src/test/java/com/gemstone/gemfire/internal/process/LocalProcessLauncherJUnitTest.java +++ b/geode-core/src/test/java/com/gemstone/gemfire/internal/process/LocalProcessLauncherJUnitTest.java @@ -34,7 +34,6 @@ /** * Unit tests for ProcessLauncher. * - * @author Kirk Lund * @since 7.0 */ @Category(UnitTest.class) diff --git a/geode-core/src/test/java/com/gemstone/gemfire/internal/process/NonBlockingProcessStreamReaderJUnitTest.java b/geode-core/src/test/java/com/gemstone/gemfire/internal/process/NonBlockingProcessStreamReaderJUnitTest.java index 83b976200c4c..ca8f1a5f7ac1 100755 --- a/geode-core/src/test/java/com/gemstone/gemfire/internal/process/NonBlockingProcessStreamReaderJUnitTest.java +++ b/geode-core/src/test/java/com/gemstone/gemfire/internal/process/NonBlockingProcessStreamReaderJUnitTest.java @@ -32,7 +32,6 @@ * * None of the tests should be skipped or hang on Windows. * - * @author Kirk Lund * @since 8.2 */ @Category(IntegrationTest.class) diff --git a/geode-core/src/test/java/com/gemstone/gemfire/internal/process/PidFileJUnitTest.java b/geode-core/src/test/java/com/gemstone/gemfire/internal/process/PidFileJUnitTest.java index 5f81c2b546e3..d7f8922d66ec 100755 --- a/geode-core/src/test/java/com/gemstone/gemfire/internal/process/PidFileJUnitTest.java +++ b/geode-core/src/test/java/com/gemstone/gemfire/internal/process/PidFileJUnitTest.java @@ -47,7 +47,6 @@ /** * Unit tests the PidFile class. * - * @author Kirk Lund * @since 8.2 */ @Category(UnitTest.class) diff --git a/geode-core/src/test/java/com/gemstone/gemfire/internal/process/ProcessControllerFactoryJUnitTest.java b/geode-core/src/test/java/com/gemstone/gemfire/internal/process/ProcessControllerFactoryJUnitTest.java index 50b976c8831e..a676f8e37dbc 100755 --- a/geode-core/src/test/java/com/gemstone/gemfire/internal/process/ProcessControllerFactoryJUnitTest.java +++ b/geode-core/src/test/java/com/gemstone/gemfire/internal/process/ProcessControllerFactoryJUnitTest.java @@ -29,7 +29,6 @@ import com.gemstone.gemfire.test.junit.categories.UnitTest; /** - * @author Kirk Lund * @since 8.0 */ @Category(UnitTest.class) diff --git a/geode-core/src/test/java/com/gemstone/gemfire/internal/process/ProcessStreamReaderTestCase.java b/geode-core/src/test/java/com/gemstone/gemfire/internal/process/ProcessStreamReaderTestCase.java index b6712cae7492..413705f20d8b 100755 --- a/geode-core/src/test/java/com/gemstone/gemfire/internal/process/ProcessStreamReaderTestCase.java +++ b/geode-core/src/test/java/com/gemstone/gemfire/internal/process/ProcessStreamReaderTestCase.java @@ -32,7 +32,6 @@ /** * Functional tests for ProcessStreamReader. * - * @author Kirk Lund */ public abstract class ProcessStreamReaderTestCase { diff --git a/geode-core/src/test/java/com/gemstone/gemfire/internal/process/mbean/Process.java b/geode-core/src/test/java/com/gemstone/gemfire/internal/process/mbean/Process.java index 1c57a4ae1c43..b00a222dd9cf 100644 --- a/geode-core/src/test/java/com/gemstone/gemfire/internal/process/mbean/Process.java +++ b/geode-core/src/test/java/com/gemstone/gemfire/internal/process/mbean/Process.java @@ -19,7 +19,6 @@ /** * Extracted from LocalProcessControllerDUnitTest. * - * @author Kirk Lund */ public class Process implements ProcessMBean { diff --git a/geode-core/src/test/java/com/gemstone/gemfire/internal/process/mbean/ProcessMBean.java b/geode-core/src/test/java/com/gemstone/gemfire/internal/process/mbean/ProcessMBean.java index b590ff3fd05c..f949e7709ef3 100644 --- a/geode-core/src/test/java/com/gemstone/gemfire/internal/process/mbean/ProcessMBean.java +++ b/geode-core/src/test/java/com/gemstone/gemfire/internal/process/mbean/ProcessMBean.java @@ -19,7 +19,6 @@ /** * Extracted from LocalProcessControllerDUnitTest. * - * @author Kirk Lund */ public interface ProcessMBean { public int getPid(); diff --git a/geode-core/src/test/java/com/gemstone/gemfire/internal/process/signal/AbstractSignalNotificationHandlerJUnitTest.java b/geode-core/src/test/java/com/gemstone/gemfire/internal/process/signal/AbstractSignalNotificationHandlerJUnitTest.java index c21abaead302..243f8d39a9dc 100644 --- a/geode-core/src/test/java/com/gemstone/gemfire/internal/process/signal/AbstractSignalNotificationHandlerJUnitTest.java +++ b/geode-core/src/test/java/com/gemstone/gemfire/internal/process/signal/AbstractSignalNotificationHandlerJUnitTest.java @@ -35,7 +35,6 @@ * The AbstractSignalNotificationHandlerJUnitTest class is a test suite of test cases testing the contract * and functionality of the AbstractSignalNotificationHandler. *

    - * @author John Blum * @see com.gemstone.gemfire.internal.process.signal.AbstractSignalNotificationHandler * @see com.gemstone.gemfire.internal.process.signal.Signal * @see com.gemstone.gemfire.internal.process.signal.SignalEvent diff --git a/geode-core/src/test/java/com/gemstone/gemfire/internal/size/ObjectTraverserPerf.java b/geode-core/src/test/java/com/gemstone/gemfire/internal/size/ObjectTraverserPerf.java index 054257a0468b..a8cecbe6a699 100644 --- a/geode-core/src/test/java/com/gemstone/gemfire/internal/size/ObjectTraverserPerf.java +++ b/geode-core/src/test/java/com/gemstone/gemfire/internal/size/ObjectTraverserPerf.java @@ -26,7 +26,6 @@ import com.gemstone.gemfire.internal.Version; /** - * @author dsmith * */ public class ObjectTraverserPerf { diff --git a/geode-core/src/test/java/com/gemstone/gemfire/internal/size/SizeClassOnceObjectSizerJUnitTest.java b/geode-core/src/test/java/com/gemstone/gemfire/internal/size/SizeClassOnceObjectSizerJUnitTest.java index 1db782cee386..8f41b218f080 100644 --- a/geode-core/src/test/java/com/gemstone/gemfire/internal/size/SizeClassOnceObjectSizerJUnitTest.java +++ b/geode-core/src/test/java/com/gemstone/gemfire/internal/size/SizeClassOnceObjectSizerJUnitTest.java @@ -25,7 +25,6 @@ import com.gemstone.gemfire.test.junit.categories.UnitTest; /** - * @author dsmith * */ @Category(UnitTest.class) diff --git a/geode-core/src/test/java/com/gemstone/gemfire/internal/size/WellKnownClassSizerJUnitTest.java b/geode-core/src/test/java/com/gemstone/gemfire/internal/size/WellKnownClassSizerJUnitTest.java index c18e70d399b6..76655fb2b3c7 100644 --- a/geode-core/src/test/java/com/gemstone/gemfire/internal/size/WellKnownClassSizerJUnitTest.java +++ b/geode-core/src/test/java/com/gemstone/gemfire/internal/size/WellKnownClassSizerJUnitTest.java @@ -25,7 +25,6 @@ import static com.gemstone.gemfire.internal.size.SizeTestUtil.*; /** - * @author dsmith * */ @Category(UnitTest.class) diff --git a/geode-core/src/test/java/com/gemstone/gemfire/internal/statistics/DummyStatistics.java b/geode-core/src/test/java/com/gemstone/gemfire/internal/statistics/DummyStatistics.java index a3c0779e1fe9..c24bc22cc283 100755 --- a/geode-core/src/test/java/com/gemstone/gemfire/internal/statistics/DummyStatistics.java +++ b/geode-core/src/test/java/com/gemstone/gemfire/internal/statistics/DummyStatistics.java @@ -21,7 +21,6 @@ import com.gemstone.gemfire.StatisticsType; /** - * @author Kirk Lund * @since 7.0 */ public class DummyStatistics implements Statistics { diff --git a/geode-core/src/test/java/com/gemstone/gemfire/internal/statistics/SampleCollectorJUnitTest.java b/geode-core/src/test/java/com/gemstone/gemfire/internal/statistics/SampleCollectorJUnitTest.java index 19a5d2c9203c..dcf942099ff3 100755 --- a/geode-core/src/test/java/com/gemstone/gemfire/internal/statistics/SampleCollectorJUnitTest.java +++ b/geode-core/src/test/java/com/gemstone/gemfire/internal/statistics/SampleCollectorJUnitTest.java @@ -46,7 +46,6 @@ /** * Unit tests for the SampleCollector class. * - * @author Kirk Lund * @since 7.0 */ @Category(UnitTest.class) diff --git a/geode-core/src/test/java/com/gemstone/gemfire/internal/statistics/StatMonitorHandlerJUnitTest.java b/geode-core/src/test/java/com/gemstone/gemfire/internal/statistics/StatMonitorHandlerJUnitTest.java index b03a9f837dae..6c88fd4ec2e8 100755 --- a/geode-core/src/test/java/com/gemstone/gemfire/internal/statistics/StatMonitorHandlerJUnitTest.java +++ b/geode-core/src/test/java/com/gemstone/gemfire/internal/statistics/StatMonitorHandlerJUnitTest.java @@ -38,7 +38,6 @@ /** * Unit test for the StatMonitorHandler and its inner classes. * - * @author Kirk Lund * @since 7.0 */ @Category(UnitTest.class) @@ -222,7 +221,6 @@ private static void waitForNotificationCount(final TestStatisticsMonitor monitor } /** - * @author Kirk Lund * @since 7.0 */ static class TestStatisticsMonitor extends StatisticsMonitor { diff --git a/geode-core/src/test/java/com/gemstone/gemfire/internal/statistics/StatisticsDUnitTest.java b/geode-core/src/test/java/com/gemstone/gemfire/internal/statistics/StatisticsDUnitTest.java index 9fd18e6c98f7..e38fed706c69 100755 --- a/geode-core/src/test/java/com/gemstone/gemfire/internal/statistics/StatisticsDUnitTest.java +++ b/geode-core/src/test/java/com/gemstone/gemfire/internal/statistics/StatisticsDUnitTest.java @@ -79,7 +79,6 @@ * This test mimics hydratest/locators/cacheDS.conf in an attempt to reproduce * bug #45478. So far this test passes consistently. * - * @author Kirk Lund * @since 7.0 */ @SuppressWarnings("serial") @@ -612,7 +611,6 @@ public static void main(String[] args) throws Exception { } /** - * @author Kirk Lund * @since 7.0 */ static class PubSubStats { @@ -730,7 +728,6 @@ private void incStat(String statName, long longValue) { } /** - * @author Kirk Lund * @since 7.0 */ static class UpdateListener extends CacheListenerAdapter { @@ -748,7 +745,6 @@ public void afterUpdate(EntryEvent event) { } /** - * @author Kirk Lund * @since 7.0 */ static class RegionMembershipListener extends RegionMembershipListenerAdapter { diff --git a/geode-core/src/test/java/com/gemstone/gemfire/internal/statistics/StatisticsMonitorJUnitTest.java b/geode-core/src/test/java/com/gemstone/gemfire/internal/statistics/StatisticsMonitorJUnitTest.java index 9a7977d4efa9..f8cf043a7f80 100755 --- a/geode-core/src/test/java/com/gemstone/gemfire/internal/statistics/StatisticsMonitorJUnitTest.java +++ b/geode-core/src/test/java/com/gemstone/gemfire/internal/statistics/StatisticsMonitorJUnitTest.java @@ -38,7 +38,6 @@ /** * Unit and integration tests for the StatisticsMonitor. * - * @author Kirk Lund * @since 7.0 */ @Category(UnitTest.class) @@ -193,7 +192,6 @@ public void handleNotification(StatisticsNotification notification) { // TODO: test notifyListeners /** - * @author Kirk Lund * @since 7.0 */ static class TestStatisticsMonitor extends StatisticsMonitor { diff --git a/geode-core/src/test/java/com/gemstone/gemfire/internal/statistics/TestSampleHandler.java b/geode-core/src/test/java/com/gemstone/gemfire/internal/statistics/TestSampleHandler.java index b1bbfb85acaf..699c7d388e50 100755 --- a/geode-core/src/test/java/com/gemstone/gemfire/internal/statistics/TestSampleHandler.java +++ b/geode-core/src/test/java/com/gemstone/gemfire/internal/statistics/TestSampleHandler.java @@ -20,7 +20,6 @@ import java.util.List; /** - * @author Kirk Lund * @since 7.0 */ public class TestSampleHandler implements SampleHandler { @@ -74,7 +73,6 @@ public String toString() { } /** - * @author Kirk Lund * @since 7.0 */ public static class Info { @@ -102,7 +100,6 @@ protected void appendToString(StringBuilder sb) { } /** - * @author Kirk Lund * @since 7.0 */ public static class ResourceInstanceInfo extends Info { @@ -124,7 +121,6 @@ protected void appendToString(StringBuilder sb) { } /** - * @author Kirk Lund * @since 7.0 */ public static class ResourceTypeInfo extends Info { @@ -146,7 +142,6 @@ protected void appendToString(StringBuilder sb) { } /** - * @author Kirk Lund * @since 7.0 */ public static class SampledInfo extends Info { diff --git a/geode-core/src/test/java/com/gemstone/gemfire/internal/statistics/TestStatArchiveWriter.java b/geode-core/src/test/java/com/gemstone/gemfire/internal/statistics/TestStatArchiveWriter.java index 81ad41918cf4..5ba999e35d65 100755 --- a/geode-core/src/test/java/com/gemstone/gemfire/internal/statistics/TestStatArchiveWriter.java +++ b/geode-core/src/test/java/com/gemstone/gemfire/internal/statistics/TestStatArchiveWriter.java @@ -23,7 +23,6 @@ import com.gemstone.gemfire.internal.StatArchiveWriter; /** - * @author Kirk Lund * @since 7.0 */ public class TestStatArchiveWriter extends StatArchiveWriter { diff --git a/geode-core/src/test/java/com/gemstone/gemfire/internal/statistics/TestStatisticsManager.java b/geode-core/src/test/java/com/gemstone/gemfire/internal/statistics/TestStatisticsManager.java index 110e9fd84a22..a8620b7e5892 100755 --- a/geode-core/src/test/java/com/gemstone/gemfire/internal/statistics/TestStatisticsManager.java +++ b/geode-core/src/test/java/com/gemstone/gemfire/internal/statistics/TestStatisticsManager.java @@ -23,7 +23,6 @@ import com.gemstone.gemfire.internal.StatisticsManager; /** - * @author Kirk Lund * @since 7.0 */ public class TestStatisticsManager extends AbstractStatisticsFactory diff --git a/geode-core/src/test/java/com/gemstone/gemfire/internal/statistics/TestStatisticsSampler.java b/geode-core/src/test/java/com/gemstone/gemfire/internal/statistics/TestStatisticsSampler.java index 02c91271fd83..d5ccbf53187c 100755 --- a/geode-core/src/test/java/com/gemstone/gemfire/internal/statistics/TestStatisticsSampler.java +++ b/geode-core/src/test/java/com/gemstone/gemfire/internal/statistics/TestStatisticsSampler.java @@ -22,7 +22,6 @@ import com.gemstone.gemfire.internal.StatisticsManager; /** - * @author Kirk Lund * @since 7.0 */ public class TestStatisticsSampler implements StatisticsSampler { diff --git a/geode-core/src/test/java/com/gemstone/gemfire/internal/statistics/ValueMonitorJUnitTest.java b/geode-core/src/test/java/com/gemstone/gemfire/internal/statistics/ValueMonitorJUnitTest.java index 1d1a7388439d..52a5dfd37d63 100755 --- a/geode-core/src/test/java/com/gemstone/gemfire/internal/statistics/ValueMonitorJUnitTest.java +++ b/geode-core/src/test/java/com/gemstone/gemfire/internal/statistics/ValueMonitorJUnitTest.java @@ -48,7 +48,6 @@ /** * Integration test for the SampleCollector class. * - * @author Kirk Lund * @since 7.0 */ @Category(IntegrationTest.class) diff --git a/geode-core/src/test/java/com/gemstone/gemfire/internal/stats50/AtomicStatsJUnitTest.java b/geode-core/src/test/java/com/gemstone/gemfire/internal/stats50/AtomicStatsJUnitTest.java index 9dcd30bd103a..20e953dd5cd6 100644 --- a/geode-core/src/test/java/com/gemstone/gemfire/internal/stats50/AtomicStatsJUnitTest.java +++ b/geode-core/src/test/java/com/gemstone/gemfire/internal/stats50/AtomicStatsJUnitTest.java @@ -35,7 +35,6 @@ import com.gemstone.gemfire.test.junit.categories.IntegrationTest; /** - * @author dsmith * */ @Category(IntegrationTest.class) diff --git a/geode-core/src/test/java/com/gemstone/gemfire/internal/util/AbortableTaskServiceJUnitTest.java b/geode-core/src/test/java/com/gemstone/gemfire/internal/util/AbortableTaskServiceJUnitTest.java index 31b3bfef4ca0..4378180e9d71 100644 --- a/geode-core/src/test/java/com/gemstone/gemfire/internal/util/AbortableTaskServiceJUnitTest.java +++ b/geode-core/src/test/java/com/gemstone/gemfire/internal/util/AbortableTaskServiceJUnitTest.java @@ -166,7 +166,6 @@ public void abortBeforeRun() { * invocation to the underlying methodName until after CountDownLatch is * opened. * - * @author Kirk Lund */ private class DelayedExecutorHandler implements InvocationHandler { private final Executor executor; diff --git a/geode-core/src/test/java/com/gemstone/gemfire/internal/util/ArrayUtilsJUnitTest.java b/geode-core/src/test/java/com/gemstone/gemfire/internal/util/ArrayUtilsJUnitTest.java index 906a5fb2e0f5..0a78a19c5561 100644 --- a/geode-core/src/test/java/com/gemstone/gemfire/internal/util/ArrayUtilsJUnitTest.java +++ b/geode-core/src/test/java/com/gemstone/gemfire/internal/util/ArrayUtilsJUnitTest.java @@ -27,7 +27,6 @@ /** * The ArrayUtilsJUnitTest class...

    * - * @author jblum * @since 7.x */ @Category(UnitTest.class) diff --git a/geode-core/src/test/java/com/gemstone/gemfire/internal/util/CollectionUtilsJUnitTest.java b/geode-core/src/test/java/com/gemstone/gemfire/internal/util/CollectionUtilsJUnitTest.java index fa10a43d3fe3..07480553393a 100644 --- a/geode-core/src/test/java/com/gemstone/gemfire/internal/util/CollectionUtilsJUnitTest.java +++ b/geode-core/src/test/java/com/gemstone/gemfire/internal/util/CollectionUtilsJUnitTest.java @@ -46,7 +46,6 @@ * The CollectionUtilsJUnitTest class is a test suite of test cases testing the contract and functionality of the * CollectionUtils class. *

    - * @author John Blum * @see com.gemstone.gemfire.internal.util.CollectionUtils * @see org.junit.Assert * @see org.junit.Test diff --git a/geode-core/src/test/java/com/gemstone/gemfire/internal/util/SerializableImpl.java b/geode-core/src/test/java/com/gemstone/gemfire/internal/util/SerializableImpl.java index 1596295b4fe2..44a83637354a 100644 --- a/geode-core/src/test/java/com/gemstone/gemfire/internal/util/SerializableImpl.java +++ b/geode-core/src/test/java/com/gemstone/gemfire/internal/util/SerializableImpl.java @@ -22,7 +22,6 @@ * A {@link Serializable} class that is loaded by a class loader other * than the one that is used to load test classes. * - * @author David Whitlock * * @since 2.0.1 */ diff --git a/geode-core/src/test/java/com/gemstone/gemfire/internal/util/SerializableImplWithValue.java b/geode-core/src/test/java/com/gemstone/gemfire/internal/util/SerializableImplWithValue.java index e38565886560..5727ff80b325 100644 --- a/geode-core/src/test/java/com/gemstone/gemfire/internal/util/SerializableImplWithValue.java +++ b/geode-core/src/test/java/com/gemstone/gemfire/internal/util/SerializableImplWithValue.java @@ -22,7 +22,6 @@ * A {@link SerializableImpl} that implements an interface and has * some object state. * - * @author David Whitlock * * @since 2.0.3 */ diff --git a/geode-core/src/test/java/com/gemstone/gemfire/internal/util/Valuable.java b/geode-core/src/test/java/com/gemstone/gemfire/internal/util/Valuable.java index ce9c41ac4781..f58deb9c632c 100644 --- a/geode-core/src/test/java/com/gemstone/gemfire/internal/util/Valuable.java +++ b/geode-core/src/test/java/com/gemstone/gemfire/internal/util/Valuable.java @@ -21,7 +21,6 @@ * value associated with them. This interface is not considered to be * a "user class". * - * @author David Whitlock * * @since 2.0.3 */ diff --git a/geode-core/src/test/java/com/gemstone/gemfire/internal/util/concurrent/ReentrantSemaphoreJUnitTest.java b/geode-core/src/test/java/com/gemstone/gemfire/internal/util/concurrent/ReentrantSemaphoreJUnitTest.java index 055e713b6a6d..d24d0675429b 100644 --- a/geode-core/src/test/java/com/gemstone/gemfire/internal/util/concurrent/ReentrantSemaphoreJUnitTest.java +++ b/geode-core/src/test/java/com/gemstone/gemfire/internal/util/concurrent/ReentrantSemaphoreJUnitTest.java @@ -27,7 +27,6 @@ import junit.framework.TestCase; /** - * @author dsmith * */ @Category(UnitTest.class) diff --git a/geode-core/src/test/java/com/gemstone/gemfire/internal/util/concurrent/SemaphoreReadWriteLockJUnitTest.java b/geode-core/src/test/java/com/gemstone/gemfire/internal/util/concurrent/SemaphoreReadWriteLockJUnitTest.java index 69aec6a1b333..bc598e6bca2b 100644 --- a/geode-core/src/test/java/com/gemstone/gemfire/internal/util/concurrent/SemaphoreReadWriteLockJUnitTest.java +++ b/geode-core/src/test/java/com/gemstone/gemfire/internal/util/concurrent/SemaphoreReadWriteLockJUnitTest.java @@ -29,7 +29,6 @@ /** * - * @author sbawaska */ @Category(UnitTest.class) public class SemaphoreReadWriteLockJUnitTest extends TestCase { diff --git a/geode-core/src/test/java/com/gemstone/gemfire/management/CacheManagementDUnitTest.java b/geode-core/src/test/java/com/gemstone/gemfire/management/CacheManagementDUnitTest.java index 6ef2180853f0..64d968d87873 100644 --- a/geode-core/src/test/java/com/gemstone/gemfire/management/CacheManagementDUnitTest.java +++ b/geode-core/src/test/java/com/gemstone/gemfire/management/CacheManagementDUnitTest.java @@ -63,7 +63,6 @@ * config data and stats are of proper value To check proper federation of * MemberMBean including remote ops and remote data access * - * @author rishim * */ public class CacheManagementDUnitTest extends ManagementTestBase { diff --git a/geode-core/src/test/java/com/gemstone/gemfire/management/ClientHealthStatsDUnitTest.java b/geode-core/src/test/java/com/gemstone/gemfire/management/ClientHealthStatsDUnitTest.java index de5c07f853c3..e703f00d3caa 100644 --- a/geode-core/src/test/java/com/gemstone/gemfire/management/ClientHealthStatsDUnitTest.java +++ b/geode-core/src/test/java/com/gemstone/gemfire/management/ClientHealthStatsDUnitTest.java @@ -59,7 +59,6 @@ /** * Client health stats check * - * @author rishim * */ public class ClientHealthStatsDUnitTest extends DistributedTestCase { diff --git a/geode-core/src/test/java/com/gemstone/gemfire/management/CustomMBean.java b/geode-core/src/test/java/com/gemstone/gemfire/management/CustomMBean.java index 1f32afea8b60..f477371235c7 100644 --- a/geode-core/src/test/java/com/gemstone/gemfire/management/CustomMBean.java +++ b/geode-core/src/test/java/com/gemstone/gemfire/management/CustomMBean.java @@ -21,7 +21,6 @@ import javax.management.NotificationBroadcasterSupport; /** * A simple MBean to test various aspects of federation - * @author rishim * */ public class CustomMBean extends NotificationBroadcasterSupport implements diff --git a/geode-core/src/test/java/com/gemstone/gemfire/management/CustomMXBean.java b/geode-core/src/test/java/com/gemstone/gemfire/management/CustomMXBean.java index 755c531e9393..a2ab002d9d60 100644 --- a/geode-core/src/test/java/com/gemstone/gemfire/management/CustomMXBean.java +++ b/geode-core/src/test/java/com/gemstone/gemfire/management/CustomMXBean.java @@ -17,7 +17,6 @@ package com.gemstone.gemfire.management; /** * Interface for A simple MBean to test various aspects of federation - * @author rishim * */ public interface CustomMXBean { diff --git a/geode-core/src/test/java/com/gemstone/gemfire/management/DataBrowserJSONValidationJUnitTest.java b/geode-core/src/test/java/com/gemstone/gemfire/management/DataBrowserJSONValidationJUnitTest.java index dd6bfde746e1..7e6ce46deea9 100644 --- a/geode-core/src/test/java/com/gemstone/gemfire/management/DataBrowserJSONValidationJUnitTest.java +++ b/geode-core/src/test/java/com/gemstone/gemfire/management/DataBrowserJSONValidationJUnitTest.java @@ -52,7 +52,6 @@ /** * @since 8.1 - * @author rishim * */ @Category(IntegrationTest.class) diff --git a/geode-core/src/test/java/com/gemstone/gemfire/management/DiskManagementDUnitTest.java b/geode-core/src/test/java/com/gemstone/gemfire/management/DiskManagementDUnitTest.java index b850b54468b7..a90bd287781c 100644 --- a/geode-core/src/test/java/com/gemstone/gemfire/management/DiskManagementDUnitTest.java +++ b/geode-core/src/test/java/com/gemstone/gemfire/management/DiskManagementDUnitTest.java @@ -52,7 +52,6 @@ * Test cases to cover all test cases which pertains to disk from Management * layer * - * @author rishim * */ public class DiskManagementDUnitTest extends ManagementTestBase { diff --git a/geode-core/src/test/java/com/gemstone/gemfire/management/DistributedSystemDUnitTest.java b/geode-core/src/test/java/com/gemstone/gemfire/management/DistributedSystemDUnitTest.java index 10f628daa32b..9f9eeb382ac4 100644 --- a/geode-core/src/test/java/com/gemstone/gemfire/management/DistributedSystemDUnitTest.java +++ b/geode-core/src/test/java/com/gemstone/gemfire/management/DistributedSystemDUnitTest.java @@ -83,7 +83,6 @@ * e ) Statistics * * - * @author rishim * */ public class DistributedSystemDUnitTest extends ManagementTestBase { @@ -829,7 +828,6 @@ public Object call() throws Exception { /** * Notification handler * - * @author rishim * */ private static class TestDistributedSystemNotif implements @@ -845,7 +843,6 @@ public void handleNotification(Notification notification, Object handback) { /** * Notification handler * - * @author rishim * */ private static class AlertNotifListener implements NotificationListener { diff --git a/geode-core/src/test/java/com/gemstone/gemfire/management/LocatorManagementDUnitTest.java b/geode-core/src/test/java/com/gemstone/gemfire/management/LocatorManagementDUnitTest.java index 0d2fdbc7e70b..5a9b58803611 100644 --- a/geode-core/src/test/java/com/gemstone/gemfire/management/LocatorManagementDUnitTest.java +++ b/geode-core/src/test/java/com/gemstone/gemfire/management/LocatorManagementDUnitTest.java @@ -46,7 +46,6 @@ * DistributedSystem Cache Locator no no yes yes no yes yes yes yes * * - * @author rishim * */ diff --git a/geode-core/src/test/java/com/gemstone/gemfire/management/MBeanUtil.java b/geode-core/src/test/java/com/gemstone/gemfire/management/MBeanUtil.java index 6c3c8e719a60..1c2c3fd72d75 100644 --- a/geode-core/src/test/java/com/gemstone/gemfire/management/MBeanUtil.java +++ b/geode-core/src/test/java/com/gemstone/gemfire/management/MBeanUtil.java @@ -44,7 +44,6 @@ /** * Utility test class to get various proxies * - * @author rishim * */ public class MBeanUtil { diff --git a/geode-core/src/test/java/com/gemstone/gemfire/management/MemberMBeanAttributesDUnitTest.java b/geode-core/src/test/java/com/gemstone/gemfire/management/MemberMBeanAttributesDUnitTest.java index c3c1c2f1327b..3650800c0699 100644 --- a/geode-core/src/test/java/com/gemstone/gemfire/management/MemberMBeanAttributesDUnitTest.java +++ b/geode-core/src/test/java/com/gemstone/gemfire/management/MemberMBeanAttributesDUnitTest.java @@ -32,7 +32,6 @@ /** * This test class checks around 89 attributes of Member MBeans - * @author rishim * */ public class MemberMBeanAttributesDUnitTest extends ManagementTestBase { diff --git a/geode-core/src/test/java/com/gemstone/gemfire/management/OffHeapManagementDUnitTest.java b/geode-core/src/test/java/com/gemstone/gemfire/management/OffHeapManagementDUnitTest.java index acafada0b704..b2b5ea794ec4 100644 --- a/geode-core/src/test/java/com/gemstone/gemfire/management/OffHeapManagementDUnitTest.java +++ b/geode-core/src/test/java/com/gemstone/gemfire/management/OffHeapManagementDUnitTest.java @@ -49,7 +49,6 @@ /** * Tests the off-heap additions to the RegionMXBean and MemberMXBean JMX interfaces. - * @author rholmes */ @SuppressWarnings("serial") public class OffHeapManagementDUnitTest extends CacheTestCase { diff --git a/geode-core/src/test/java/com/gemstone/gemfire/management/QueryDataDUnitTest.java b/geode-core/src/test/java/com/gemstone/gemfire/management/QueryDataDUnitTest.java index e06fd3e891a2..ef8a4c4e2fdb 100644 --- a/geode-core/src/test/java/com/gemstone/gemfire/management/QueryDataDUnitTest.java +++ b/geode-core/src/test/java/com/gemstone/gemfire/management/QueryDataDUnitTest.java @@ -64,7 +64,6 @@ /** * - * @author rishim * */ diff --git a/geode-core/src/test/java/com/gemstone/gemfire/management/RegionManagementDUnitTest.java b/geode-core/src/test/java/com/gemstone/gemfire/management/RegionManagementDUnitTest.java index 303188aed9f6..6392fc8aa238 100644 --- a/geode-core/src/test/java/com/gemstone/gemfire/management/RegionManagementDUnitTest.java +++ b/geode-core/src/test/java/com/gemstone/gemfire/management/RegionManagementDUnitTest.java @@ -63,7 +63,6 @@ * Goal of the Test : RegionMBean gets created once region is created. Data like * Region Attributes data and stats are of proper value * - * @author rishim * */ public class RegionManagementDUnitTest extends ManagementTestBase { @@ -1410,7 +1409,6 @@ public void verifyStatistics() { /** * User defined notification handler for Region creation handling * - * @author rishim * */ private static class RegionNotif implements NotificationListener { @@ -1431,7 +1429,6 @@ public void handleNotification(Notification notification, Object handback) { /** * User defined notification handler for Region creation handling * - * @author rishim * */ private static class DistrNotif implements NotificationListener { diff --git a/geode-core/src/test/java/com/gemstone/gemfire/management/UniversalMembershipListenerAdapterDUnitTest.java b/geode-core/src/test/java/com/gemstone/gemfire/management/UniversalMembershipListenerAdapterDUnitTest.java index 394a155a5776..5c6c6e134814 100644 --- a/geode-core/src/test/java/com/gemstone/gemfire/management/UniversalMembershipListenerAdapterDUnitTest.java +++ b/geode-core/src/test/java/com/gemstone/gemfire/management/UniversalMembershipListenerAdapterDUnitTest.java @@ -59,7 +59,6 @@ /** * Tests the UniversalMembershipListenerAdapter. * - * @author Kirk Lund * @since 4.2.1 */ diff --git a/geode-core/src/test/java/com/gemstone/gemfire/management/bean/stats/AsyncEventQueueStatsJUnitTest.java b/geode-core/src/test/java/com/gemstone/gemfire/management/bean/stats/AsyncEventQueueStatsJUnitTest.java index 59b84f56d71f..0d4743e93df4 100644 --- a/geode-core/src/test/java/com/gemstone/gemfire/management/bean/stats/AsyncEventQueueStatsJUnitTest.java +++ b/geode-core/src/test/java/com/gemstone/gemfire/management/bean/stats/AsyncEventQueueStatsJUnitTest.java @@ -27,7 +27,6 @@ /** * - * @author rishim * */ @Category(IntegrationTest.class) diff --git a/geode-core/src/test/java/com/gemstone/gemfire/management/bean/stats/CacheServerStatsJUnitTest.java b/geode-core/src/test/java/com/gemstone/gemfire/management/bean/stats/CacheServerStatsJUnitTest.java index 3f9da451cb33..8f6177a8d442 100644 --- a/geode-core/src/test/java/com/gemstone/gemfire/management/bean/stats/CacheServerStatsJUnitTest.java +++ b/geode-core/src/test/java/com/gemstone/gemfire/management/bean/stats/CacheServerStatsJUnitTest.java @@ -28,7 +28,6 @@ import com.gemstone.gemfire.test.junit.categories.IntegrationTest; /** - * @author rishim */ @Category(IntegrationTest.class) public class CacheServerStatsJUnitTest extends MBeanStatsTestCase { diff --git a/geode-core/src/test/java/com/gemstone/gemfire/management/bean/stats/DiskStatsJUnitTest.java b/geode-core/src/test/java/com/gemstone/gemfire/management/bean/stats/DiskStatsJUnitTest.java index 075bcae30f54..cbba46207c8b 100644 --- a/geode-core/src/test/java/com/gemstone/gemfire/management/bean/stats/DiskStatsJUnitTest.java +++ b/geode-core/src/test/java/com/gemstone/gemfire/management/bean/stats/DiskStatsJUnitTest.java @@ -29,7 +29,6 @@ import com.gemstone.gemfire.test.junit.categories.IntegrationTest; /** - * @author rishim */ @Category(IntegrationTest.class) public class DiskStatsJUnitTest extends MBeanStatsTestCase { diff --git a/geode-core/src/test/java/com/gemstone/gemfire/management/bean/stats/DistributedSystemStatsDUnitTest.java b/geode-core/src/test/java/com/gemstone/gemfire/management/bean/stats/DistributedSystemStatsDUnitTest.java index 1de93ee0b34a..4f3256a03451 100644 --- a/geode-core/src/test/java/com/gemstone/gemfire/management/bean/stats/DistributedSystemStatsDUnitTest.java +++ b/geode-core/src/test/java/com/gemstone/gemfire/management/bean/stats/DistributedSystemStatsDUnitTest.java @@ -34,7 +34,6 @@ import com.gemstone.gemfire.test.dunit.VM; /** - * @author rishim */ public class DistributedSystemStatsDUnitTest extends ManagementTestBase{ diff --git a/geode-core/src/test/java/com/gemstone/gemfire/management/bean/stats/DistributedSystemStatsJUnitTest.java b/geode-core/src/test/java/com/gemstone/gemfire/management/bean/stats/DistributedSystemStatsJUnitTest.java index db1dff6d6a52..da1f918db118 100644 --- a/geode-core/src/test/java/com/gemstone/gemfire/management/bean/stats/DistributedSystemStatsJUnitTest.java +++ b/geode-core/src/test/java/com/gemstone/gemfire/management/bean/stats/DistributedSystemStatsJUnitTest.java @@ -41,7 +41,6 @@ /** * - * @author rishim * @since 1.4 */ @Category(IntegrationTest.class) diff --git a/geode-core/src/test/java/com/gemstone/gemfire/management/bean/stats/GatewayMBeanBridgeJUnitTest.java b/geode-core/src/test/java/com/gemstone/gemfire/management/bean/stats/GatewayMBeanBridgeJUnitTest.java index 97892ba9caa3..5baecfe5408e 100644 --- a/geode-core/src/test/java/com/gemstone/gemfire/management/bean/stats/GatewayMBeanBridgeJUnitTest.java +++ b/geode-core/src/test/java/com/gemstone/gemfire/management/bean/stats/GatewayMBeanBridgeJUnitTest.java @@ -31,7 +31,6 @@ import io.codearte.catchexception.shade.mockito.Mockito; /** - * @author rishim */ @Category(IntegrationTest.class) public class GatewayMBeanBridgeJUnitTest extends MBeanStatsTestCase { diff --git a/geode-core/src/test/java/com/gemstone/gemfire/management/bean/stats/GatewayReceiverStatsJUnitTest.java b/geode-core/src/test/java/com/gemstone/gemfire/management/bean/stats/GatewayReceiverStatsJUnitTest.java index 268c2e62d1a5..f007800b2b45 100644 --- a/geode-core/src/test/java/com/gemstone/gemfire/management/bean/stats/GatewayReceiverStatsJUnitTest.java +++ b/geode-core/src/test/java/com/gemstone/gemfire/management/bean/stats/GatewayReceiverStatsJUnitTest.java @@ -29,7 +29,6 @@ import com.gemstone.gemfire.test.junit.categories.IntegrationTest; /** - * @author rishim */ @Category(IntegrationTest.class) public class GatewayReceiverStatsJUnitTest extends MBeanStatsTestCase { diff --git a/geode-core/src/test/java/com/gemstone/gemfire/management/bean/stats/MBeanStatsTestCase.java b/geode-core/src/test/java/com/gemstone/gemfire/management/bean/stats/MBeanStatsTestCase.java index 648a7b259be0..93d26834771f 100755 --- a/geode-core/src/test/java/com/gemstone/gemfire/management/bean/stats/MBeanStatsTestCase.java +++ b/geode-core/src/test/java/com/gemstone/gemfire/management/bean/stats/MBeanStatsTestCase.java @@ -31,7 +31,6 @@ /** * Base test case for the management.bean.stats tests. * - * @author Kirk Lund * @since 7.0 */ public abstract class MBeanStatsTestCase { diff --git a/geode-core/src/test/java/com/gemstone/gemfire/management/bean/stats/MemberLevelStatsJUnitTest.java b/geode-core/src/test/java/com/gemstone/gemfire/management/bean/stats/MemberLevelStatsJUnitTest.java index 761c9dd472be..dcbbacacf823 100644 --- a/geode-core/src/test/java/com/gemstone/gemfire/management/bean/stats/MemberLevelStatsJUnitTest.java +++ b/geode-core/src/test/java/com/gemstone/gemfire/management/bean/stats/MemberLevelStatsJUnitTest.java @@ -44,7 +44,6 @@ import com.gemstone.gemfire.test.junit.categories.IntegrationTest; /** - * @author rishim */ @Category(IntegrationTest.class) public class MemberLevelStatsJUnitTest extends MBeanStatsTestCase { diff --git a/geode-core/src/test/java/com/gemstone/gemfire/management/bean/stats/RegionStatsJUnitTest.java b/geode-core/src/test/java/com/gemstone/gemfire/management/bean/stats/RegionStatsJUnitTest.java index da558cbdbf6a..6650fb249745 100644 --- a/geode-core/src/test/java/com/gemstone/gemfire/management/bean/stats/RegionStatsJUnitTest.java +++ b/geode-core/src/test/java/com/gemstone/gemfire/management/bean/stats/RegionStatsJUnitTest.java @@ -33,7 +33,6 @@ /** * Implementing RegionMXBean to ensure test coverage * - * @author rishim */ @Category(IntegrationTest.class) public class RegionStatsJUnitTest extends MBeanStatsTestCase{ diff --git a/geode-core/src/test/java/com/gemstone/gemfire/management/bean/stats/StatsRateJUnitTest.java b/geode-core/src/test/java/com/gemstone/gemfire/management/bean/stats/StatsRateJUnitTest.java index be2c027bc1d1..bdccba5a8950 100644 --- a/geode-core/src/test/java/com/gemstone/gemfire/management/bean/stats/StatsRateJUnitTest.java +++ b/geode-core/src/test/java/com/gemstone/gemfire/management/bean/stats/StatsRateJUnitTest.java @@ -29,7 +29,6 @@ /** * - * @author rishim * */ @Category(UnitTest.class) diff --git a/geode-core/src/test/java/com/gemstone/gemfire/management/internal/JettyHelperJUnitTest.java b/geode-core/src/test/java/com/gemstone/gemfire/management/internal/JettyHelperJUnitTest.java index 4ff58c258ad6..b7580ca849a0 100644 --- a/geode-core/src/test/java/com/gemstone/gemfire/management/internal/JettyHelperJUnitTest.java +++ b/geode-core/src/test/java/com/gemstone/gemfire/management/internal/JettyHelperJUnitTest.java @@ -34,7 +34,6 @@ * contract and functionality of the JettyHelper * class. *

    - * @author John Blum * @see com.gemstone.gemfire.management.internal.JettyHelper * @see org.jmock.Mockery * @see org.junit.Assert diff --git a/geode-core/src/test/java/com/gemstone/gemfire/management/internal/cli/ClasspathScanLoadHelperJUnitTest.java b/geode-core/src/test/java/com/gemstone/gemfire/management/internal/cli/ClasspathScanLoadHelperJUnitTest.java index 9aba1e35ca0f..4476cd61cc9c 100644 --- a/geode-core/src/test/java/com/gemstone/gemfire/management/internal/cli/ClasspathScanLoadHelperJUnitTest.java +++ b/geode-core/src/test/java/com/gemstone/gemfire/management/internal/cli/ClasspathScanLoadHelperJUnitTest.java @@ -33,7 +33,6 @@ import com.gemstone.gemfire.test.junit.categories.UnitTest; /** - * @author tushark */ @Category(UnitTest.class) public class ClasspathScanLoadHelperJUnitTest extends TestCase{ diff --git a/geode-core/src/test/java/com/gemstone/gemfire/management/internal/cli/CliUtilDUnitTest.java b/geode-core/src/test/java/com/gemstone/gemfire/management/internal/cli/CliUtilDUnitTest.java index 192b458a646f..5d987d7f1748 100644 --- a/geode-core/src/test/java/com/gemstone/gemfire/management/internal/cli/CliUtilDUnitTest.java +++ b/geode-core/src/test/java/com/gemstone/gemfire/management/internal/cli/CliUtilDUnitTest.java @@ -48,7 +48,6 @@ /** * - * @author tushark * */ public class CliUtilDUnitTest extends CacheTestCase { diff --git a/geode-core/src/test/java/com/gemstone/gemfire/management/internal/cli/CommandManagerJUnitTest.java b/geode-core/src/test/java/com/gemstone/gemfire/management/internal/cli/CommandManagerJUnitTest.java index 66b2d928529b..aac9528be2b0 100644 --- a/geode-core/src/test/java/com/gemstone/gemfire/management/internal/cli/CommandManagerJUnitTest.java +++ b/geode-core/src/test/java/com/gemstone/gemfire/management/internal/cli/CommandManagerJUnitTest.java @@ -51,7 +51,6 @@ /** * CommandManagerTest - Includes tests to check the CommandManager functions * - * @author apande */ @Category(UnitTest.class) public class CommandManagerJUnitTest { diff --git a/geode-core/src/test/java/com/gemstone/gemfire/management/internal/cli/CommandSeparatorEscapeJUnitTest.java b/geode-core/src/test/java/com/gemstone/gemfire/management/internal/cli/CommandSeparatorEscapeJUnitTest.java index 469e27149773..8057a1eca946 100644 --- a/geode-core/src/test/java/com/gemstone/gemfire/management/internal/cli/CommandSeparatorEscapeJUnitTest.java +++ b/geode-core/src/test/java/com/gemstone/gemfire/management/internal/cli/CommandSeparatorEscapeJUnitTest.java @@ -27,7 +27,6 @@ /** * - * @author tushark * */ @Category(UnitTest.class) diff --git a/geode-core/src/test/java/com/gemstone/gemfire/management/internal/cli/DataCommandJsonJUnitTest.java b/geode-core/src/test/java/com/gemstone/gemfire/management/internal/cli/DataCommandJsonJUnitTest.java index 0ae8128eff2d..c95faee59136 100644 --- a/geode-core/src/test/java/com/gemstone/gemfire/management/internal/cli/DataCommandJsonJUnitTest.java +++ b/geode-core/src/test/java/com/gemstone/gemfire/management/internal/cli/DataCommandJsonJUnitTest.java @@ -30,7 +30,6 @@ /** * - * @author tushark * */ @Category(UnitTest.class) diff --git a/geode-core/src/test/java/com/gemstone/gemfire/management/internal/cli/GfshParserJUnitTest.java b/geode-core/src/test/java/com/gemstone/gemfire/management/internal/cli/GfshParserJUnitTest.java index 45d3414b3ad1..91dd853821d2 100644 --- a/geode-core/src/test/java/com/gemstone/gemfire/management/internal/cli/GfshParserJUnitTest.java +++ b/geode-core/src/test/java/com/gemstone/gemfire/management/internal/cli/GfshParserJUnitTest.java @@ -54,7 +54,6 @@ * GfshParserJUnitTest - Includes tests to check the parsing and auto-completion * capabilities of {@link GfshParser} * - * @author njadhav */ @Category(UnitTest.class) public class GfshParserJUnitTest { diff --git a/geode-core/src/test/java/com/gemstone/gemfire/management/internal/cli/HeadlessGfsh.java b/geode-core/src/test/java/com/gemstone/gemfire/management/internal/cli/HeadlessGfsh.java index f8b3fd480ff4..28357316e16f 100644 --- a/geode-core/src/test/java/com/gemstone/gemfire/management/internal/cli/HeadlessGfsh.java +++ b/geode-core/src/test/java/com/gemstone/gemfire/management/internal/cli/HeadlessGfsh.java @@ -49,7 +49,6 @@ * systems. TODO : Merge HeadlessGfsh and HeadlessGfshShell TODO : Provide constructor for optionally specifying * GfshConfig to provide logDirectory and logLevel * - * @author tushark */ @SuppressWarnings("rawtypes") public class HeadlessGfsh implements ResultHandler { diff --git a/geode-core/src/test/java/com/gemstone/gemfire/management/internal/cli/HeadlessGfshJUnitTest.java b/geode-core/src/test/java/com/gemstone/gemfire/management/internal/cli/HeadlessGfshJUnitTest.java index 6053494a8964..86fe03e6dea9 100644 --- a/geode-core/src/test/java/com/gemstone/gemfire/management/internal/cli/HeadlessGfshJUnitTest.java +++ b/geode-core/src/test/java/com/gemstone/gemfire/management/internal/cli/HeadlessGfshJUnitTest.java @@ -36,7 +36,6 @@ /** * TODO : Add more tests for error-catch, different type of results etc * - * @author tushark */ @Category(IntegrationTest.class) public class HeadlessGfshJUnitTest { diff --git a/geode-core/src/test/java/com/gemstone/gemfire/management/internal/cli/TableBuilderJUnitTest.java b/geode-core/src/test/java/com/gemstone/gemfire/management/internal/cli/TableBuilderJUnitTest.java index ad23427e3473..1abd88daecec 100644 --- a/geode-core/src/test/java/com/gemstone/gemfire/management/internal/cli/TableBuilderJUnitTest.java +++ b/geode-core/src/test/java/com/gemstone/gemfire/management/internal/cli/TableBuilderJUnitTest.java @@ -42,8 +42,6 @@ /** * Testing TableBuilder and TableBuilderHelper using mocks for Gfsh * - * @author tushark - * @author Jens Deppe */ @Category(IntegrationTest.class) @RunWith(PowerMockRunner.class) diff --git a/geode-core/src/test/java/com/gemstone/gemfire/management/internal/cli/annotations/CliArgumentJUnitTest.java b/geode-core/src/test/java/com/gemstone/gemfire/management/internal/cli/annotations/CliArgumentJUnitTest.java index 6764cf77d6e3..f7b55f35bcd8 100644 --- a/geode-core/src/test/java/com/gemstone/gemfire/management/internal/cli/annotations/CliArgumentJUnitTest.java +++ b/geode-core/src/test/java/com/gemstone/gemfire/management/internal/cli/annotations/CliArgumentJUnitTest.java @@ -26,7 +26,6 @@ /** * Includes tests for checking assignment of {@link CliArgument} * - * @author njadhav * */ @Category(UnitTest.class) @@ -184,7 +183,6 @@ public void testUnspecifiedDefaultValue() { /** * Class used by the tests * - * @author njadhav * */ public static class ArgumentTestingClass { diff --git a/geode-core/src/test/java/com/gemstone/gemfire/management/internal/cli/commands/AbstractCommandsSupportJUnitTest.java b/geode-core/src/test/java/com/gemstone/gemfire/management/internal/cli/commands/AbstractCommandsSupportJUnitTest.java index 5cd39a017bf6..8d9971e26cff 100644 --- a/geode-core/src/test/java/com/gemstone/gemfire/management/internal/cli/commands/AbstractCommandsSupportJUnitTest.java +++ b/geode-core/src/test/java/com/gemstone/gemfire/management/internal/cli/commands/AbstractCommandsSupportJUnitTest.java @@ -47,7 +47,6 @@ * The AbstractCommandsSupportJUnitTest class is a test suite of test cases testing the contract and functionality * of the AbstractCommandsSupport class for implementing GemFire shell (Gfsh) commands. *

    - * @author John Blum * @see com.gemstone.gemfire.management.internal.cli.commands.AbstractCommandsSupport * @see org.jmock.Expectations * @see org.jmock.Mockery diff --git a/geode-core/src/test/java/com/gemstone/gemfire/management/internal/cli/commands/CliCommandTestBase.java b/geode-core/src/test/java/com/gemstone/gemfire/management/internal/cli/commands/CliCommandTestBase.java index 664e7a662a43..cbedefa4bbd5 100644 --- a/geode-core/src/test/java/com/gemstone/gemfire/management/internal/cli/commands/CliCommandTestBase.java +++ b/geode-core/src/test/java/com/gemstone/gemfire/management/internal/cli/commands/CliCommandTestBase.java @@ -50,10 +50,6 @@ /** * Base class for all the CLI/gfsh command dunit tests. * - * @author Tushar Khairnar - * @author Abhishek Chaudhari - * @author David Hoots - * @author John Blum */ public class CliCommandTestBase extends CacheTestCase { diff --git a/geode-core/src/test/java/com/gemstone/gemfire/management/internal/cli/commands/ConfigCommandsDUnitTest.java b/geode-core/src/test/java/com/gemstone/gemfire/management/internal/cli/commands/ConfigCommandsDUnitTest.java index dca0f7863cef..3d1de098388c 100644 --- a/geode-core/src/test/java/com/gemstone/gemfire/management/internal/cli/commands/ConfigCommandsDUnitTest.java +++ b/geode-core/src/test/java/com/gemstone/gemfire/management/internal/cli/commands/ConfigCommandsDUnitTest.java @@ -61,8 +61,6 @@ /** * Dunit class for testing GemFire config commands : export config * - * @author David Hoots - * @author Sourabh Bansod * @since 7.0 */ public class ConfigCommandsDUnitTest extends CliCommandTestBase { diff --git a/geode-core/src/test/java/com/gemstone/gemfire/management/internal/cli/commands/DeployCommandsDUnitTest.java b/geode-core/src/test/java/com/gemstone/gemfire/management/internal/cli/commands/DeployCommandsDUnitTest.java index 21e44b262d44..c89e931a4810 100644 --- a/geode-core/src/test/java/com/gemstone/gemfire/management/internal/cli/commands/DeployCommandsDUnitTest.java +++ b/geode-core/src/test/java/com/gemstone/gemfire/management/internal/cli/commands/DeployCommandsDUnitTest.java @@ -45,7 +45,6 @@ /** * Unit tests for the DeployCommands class * - * @author David Hoots * @since 7.0 */ public class DeployCommandsDUnitTest extends CliCommandTestBase { diff --git a/geode-core/src/test/java/com/gemstone/gemfire/management/internal/cli/commands/DiskStoreCommandsDUnitTest.java b/geode-core/src/test/java/com/gemstone/gemfire/management/internal/cli/commands/DiskStoreCommandsDUnitTest.java index 826f128b0db1..e7e9e6ea9284 100644 --- a/geode-core/src/test/java/com/gemstone/gemfire/management/internal/cli/commands/DiskStoreCommandsDUnitTest.java +++ b/geode-core/src/test/java/com/gemstone/gemfire/management/internal/cli/commands/DiskStoreCommandsDUnitTest.java @@ -71,8 +71,6 @@ * The DiskStoreCommandsDUnitTest class is a distributed test suite of test cases for testing the disk store commands * that are part of Gfsh.

    * - * @author John Blum - * @author David Hoots * @see com.gemstone.gemfire.management.internal.cli.commands.DiskStoreCommands * @see org.junit.Assert * @see org.junit.Test diff --git a/geode-core/src/test/java/com/gemstone/gemfire/management/internal/cli/commands/DiskStoreCommandsJUnitTest.java b/geode-core/src/test/java/com/gemstone/gemfire/management/internal/cli/commands/DiskStoreCommandsJUnitTest.java index 886f3adf95eb..4b9f4c658dea 100644 --- a/geode-core/src/test/java/com/gemstone/gemfire/management/internal/cli/commands/DiskStoreCommandsJUnitTest.java +++ b/geode-core/src/test/java/com/gemstone/gemfire/management/internal/cli/commands/DiskStoreCommandsJUnitTest.java @@ -54,7 +54,6 @@ * DiskStoreCommands class implementing commands in the GemFire shell (gfsh) that access and modify disk stores in * GemFire. *

    - * @author John Blum * @see com.gemstone.gemfire.management.internal.cli.commands.DiskStoreCommands * @see com.gemstone.gemfire.management.internal.cli.domain.DiskStoreDetails * @see com.gemstone.gemfire.management.internal.cli.functions.DescribeDiskStoreFunction diff --git a/geode-core/src/test/java/com/gemstone/gemfire/management/internal/cli/commands/FunctionCommandsDUnitTest.java b/geode-core/src/test/java/com/gemstone/gemfire/management/internal/cli/commands/FunctionCommandsDUnitTest.java index 0eba70013276..8451916d5c24 100644 --- a/geode-core/src/test/java/com/gemstone/gemfire/management/internal/cli/commands/FunctionCommandsDUnitTest.java +++ b/geode-core/src/test/java/com/gemstone/gemfire/management/internal/cli/commands/FunctionCommandsDUnitTest.java @@ -45,8 +45,6 @@ /** * Dunit class for testing gemfire function commands : execute function, destroy function, list function * - * @author apande - * @author David Hoots */ public class FunctionCommandsDUnitTest extends CliCommandTestBase { private static final long serialVersionUID = 1L; diff --git a/geode-core/src/test/java/com/gemstone/gemfire/management/internal/cli/commands/GemfireDataCommandsDUnitTest.java b/geode-core/src/test/java/com/gemstone/gemfire/management/internal/cli/commands/GemfireDataCommandsDUnitTest.java index 6d9d603c2df0..7151ffd32143 100644 --- a/geode-core/src/test/java/com/gemstone/gemfire/management/internal/cli/commands/GemfireDataCommandsDUnitTest.java +++ b/geode-core/src/test/java/com/gemstone/gemfire/management/internal/cli/commands/GemfireDataCommandsDUnitTest.java @@ -82,8 +82,6 @@ /** * Dunit class for testing gemfire data commands : get, put, remove, select, rebalance * - * @author ajayp - * @author tushark */ @SuppressWarnings("serial") diff --git a/geode-core/src/test/java/com/gemstone/gemfire/management/internal/cli/commands/GetCommandOnRegionWithCacheLoaderDuringCacheMissDUnitTest.java b/geode-core/src/test/java/com/gemstone/gemfire/management/internal/cli/commands/GetCommandOnRegionWithCacheLoaderDuringCacheMissDUnitTest.java index dc580cdd9310..7ceff3458168 100644 --- a/geode-core/src/test/java/com/gemstone/gemfire/management/internal/cli/commands/GetCommandOnRegionWithCacheLoaderDuringCacheMissDUnitTest.java +++ b/geode-core/src/test/java/com/gemstone/gemfire/management/internal/cli/commands/GetCommandOnRegionWithCacheLoaderDuringCacheMissDUnitTest.java @@ -52,7 +52,6 @@ * 'get' data command when a cache miss occurs on data in a Region with a CacheLoader defined. *

    * - * @author John Blum * @see com.gemstone.gemfire.management.internal.cli.commands.CliCommandTestBase * @see com.gemstone.gemfire.management.internal.cli.commands.DataCommands * @since 8.0 diff --git a/geode-core/src/test/java/com/gemstone/gemfire/management/internal/cli/commands/HTTPServiceSSLSupportJUnitTest.java b/geode-core/src/test/java/com/gemstone/gemfire/management/internal/cli/commands/HTTPServiceSSLSupportJUnitTest.java index 9bc6a95f2557..49f405c9bc4d 100644 --- a/geode-core/src/test/java/com/gemstone/gemfire/management/internal/cli/commands/HTTPServiceSSLSupportJUnitTest.java +++ b/geode-core/src/test/java/com/gemstone/gemfire/management/internal/cli/commands/HTTPServiceSSLSupportJUnitTest.java @@ -33,7 +33,6 @@ /** * - * @author rishim * @since 8.1 */ @Category(IntegrationTest.class) diff --git a/geode-core/src/test/java/com/gemstone/gemfire/management/internal/cli/commands/IndexCommandsJUnitTest.java b/geode-core/src/test/java/com/gemstone/gemfire/management/internal/cli/commands/IndexCommandsJUnitTest.java index b5c6a7b71946..bf77abaf8177 100644 --- a/geode-core/src/test/java/com/gemstone/gemfire/management/internal/cli/commands/IndexCommandsJUnitTest.java +++ b/geode-core/src/test/java/com/gemstone/gemfire/management/internal/cli/commands/IndexCommandsJUnitTest.java @@ -48,7 +48,6 @@ * The IndexCommandsJUnitTest class is a test suite of test cases testing the contract and functionality of the * IndexCommands class. *

    - * @author John Blum * @see com.gemstone.gemfire.management.internal.cli.commands.IndexCommands * @see com.gemstone.gemfire.management.internal.cli.domain.IndexDetails * @see com.gemstone.gemfire.management.internal.cli.functions.ListIndexFunction diff --git a/geode-core/src/test/java/com/gemstone/gemfire/management/internal/cli/commands/ListAndDescribeDiskStoreCommandsDUnitTest.java b/geode-core/src/test/java/com/gemstone/gemfire/management/internal/cli/commands/ListAndDescribeDiskStoreCommandsDUnitTest.java index 4f86a55092a9..9097027f0035 100644 --- a/geode-core/src/test/java/com/gemstone/gemfire/management/internal/cli/commands/ListAndDescribeDiskStoreCommandsDUnitTest.java +++ b/geode-core/src/test/java/com/gemstone/gemfire/management/internal/cli/commands/ListAndDescribeDiskStoreCommandsDUnitTest.java @@ -38,7 +38,6 @@ * The ListAndDescribeDiskStoreCommandsDUnitTest class is a test suite of functional tests cases testing the proper * functioning of the 'list disk-store' and 'describe disk-store' commands.

    * - * @author John Blum * @see com.gemstone.gemfire.management.internal.cli.commands.CliCommandTestBase * @see com.gemstone.gemfire.management.internal.cli.commands.DiskStoreCommands * @since 7.0 diff --git a/geode-core/src/test/java/com/gemstone/gemfire/management/internal/cli/commands/ListIndexCommandDUnitTest.java b/geode-core/src/test/java/com/gemstone/gemfire/management/internal/cli/commands/ListIndexCommandDUnitTest.java index c60f33e61982..21ca402072a8 100644 --- a/geode-core/src/test/java/com/gemstone/gemfire/management/internal/cli/commands/ListIndexCommandDUnitTest.java +++ b/geode-core/src/test/java/com/gemstone/gemfire/management/internal/cli/commands/ListIndexCommandDUnitTest.java @@ -54,7 +54,6 @@ * The ListIndexCommandDUnitTest class is distributed test suite of test cases for testing the index-based GemFire shell * (Gfsh) commands.

    * - * @author John Blum * @see com.gemstone.gemfire.management.internal.cli.commands.CliCommandTestBase * @see com.gemstone.gemfire.management.internal.cli.commands.IndexCommands * @since 7.0 diff --git a/geode-core/src/test/java/com/gemstone/gemfire/management/internal/cli/commands/MemberCommandsDUnitTest.java b/geode-core/src/test/java/com/gemstone/gemfire/management/internal/cli/commands/MemberCommandsDUnitTest.java index 7d6efc5f0a7b..c2d8b6fa1eae 100644 --- a/geode-core/src/test/java/com/gemstone/gemfire/management/internal/cli/commands/MemberCommandsDUnitTest.java +++ b/geode-core/src/test/java/com/gemstone/gemfire/management/internal/cli/commands/MemberCommandsDUnitTest.java @@ -53,7 +53,6 @@ import java.util.Set; /**** - * @author bansods since 7.0 */ public class MemberCommandsDUnitTest extends CacheTestCase { diff --git a/geode-core/src/test/java/com/gemstone/gemfire/management/internal/cli/commands/MiscellaneousCommandsDUnitTest.java b/geode-core/src/test/java/com/gemstone/gemfire/management/internal/cli/commands/MiscellaneousCommandsDUnitTest.java index a5260eb1f3ea..d44a4797c03b 100644 --- a/geode-core/src/test/java/com/gemstone/gemfire/management/internal/cli/commands/MiscellaneousCommandsDUnitTest.java +++ b/geode-core/src/test/java/com/gemstone/gemfire/management/internal/cli/commands/MiscellaneousCommandsDUnitTest.java @@ -54,7 +54,6 @@ /** * Dunit class for testing gemfire function commands : GC, Shutdown * - * @author apande */ public class MiscellaneousCommandsDUnitTest extends CliCommandTestBase { diff --git a/geode-core/src/test/java/com/gemstone/gemfire/management/internal/cli/commands/MiscellaneousCommandsExportLogsPart1DUnitTest.java b/geode-core/src/test/java/com/gemstone/gemfire/management/internal/cli/commands/MiscellaneousCommandsExportLogsPart1DUnitTest.java index c8928fa0e3e6..b9178b62b591 100644 --- a/geode-core/src/test/java/com/gemstone/gemfire/management/internal/cli/commands/MiscellaneousCommandsExportLogsPart1DUnitTest.java +++ b/geode-core/src/test/java/com/gemstone/gemfire/management/internal/cli/commands/MiscellaneousCommandsExportLogsPart1DUnitTest.java @@ -37,7 +37,6 @@ /** * Dunit class for testing gemfire function commands : export logs * - * @author apande */ public class MiscellaneousCommandsExportLogsPart1DUnitTest extends CliCommandTestBase { diff --git a/geode-core/src/test/java/com/gemstone/gemfire/management/internal/cli/commands/MiscellaneousCommandsExportLogsPart2DUnitTest.java b/geode-core/src/test/java/com/gemstone/gemfire/management/internal/cli/commands/MiscellaneousCommandsExportLogsPart2DUnitTest.java index 3d462f40eaac..678af5a24c76 100644 --- a/geode-core/src/test/java/com/gemstone/gemfire/management/internal/cli/commands/MiscellaneousCommandsExportLogsPart2DUnitTest.java +++ b/geode-core/src/test/java/com/gemstone/gemfire/management/internal/cli/commands/MiscellaneousCommandsExportLogsPart2DUnitTest.java @@ -37,7 +37,6 @@ /** * Dunit class for testing gemfire function commands : export logs * - * @author apande */ public class MiscellaneousCommandsExportLogsPart2DUnitTest extends CliCommandTestBase { diff --git a/geode-core/src/test/java/com/gemstone/gemfire/management/internal/cli/commands/MiscellaneousCommandsExportLogsPart3DUnitTest.java b/geode-core/src/test/java/com/gemstone/gemfire/management/internal/cli/commands/MiscellaneousCommandsExportLogsPart3DUnitTest.java index 9cc863f24002..361a8d1f37cc 100644 --- a/geode-core/src/test/java/com/gemstone/gemfire/management/internal/cli/commands/MiscellaneousCommandsExportLogsPart3DUnitTest.java +++ b/geode-core/src/test/java/com/gemstone/gemfire/management/internal/cli/commands/MiscellaneousCommandsExportLogsPart3DUnitTest.java @@ -39,7 +39,6 @@ /** * Dunit class for testing gemfire function commands : export logs * - * @author apande */ public class MiscellaneousCommandsExportLogsPart3DUnitTest extends CliCommandTestBase { diff --git a/geode-core/src/test/java/com/gemstone/gemfire/management/internal/cli/commands/MiscellaneousCommandsExportLogsPart4DUnitTest.java b/geode-core/src/test/java/com/gemstone/gemfire/management/internal/cli/commands/MiscellaneousCommandsExportLogsPart4DUnitTest.java index 2d1158007a20..360ba08c8b69 100644 --- a/geode-core/src/test/java/com/gemstone/gemfire/management/internal/cli/commands/MiscellaneousCommandsExportLogsPart4DUnitTest.java +++ b/geode-core/src/test/java/com/gemstone/gemfire/management/internal/cli/commands/MiscellaneousCommandsExportLogsPart4DUnitTest.java @@ -37,7 +37,6 @@ /** * Dunit class for testing gemfire function commands : export logs * - * @author apande */ public class MiscellaneousCommandsExportLogsPart4DUnitTest extends CliCommandTestBase { diff --git a/geode-core/src/test/java/com/gemstone/gemfire/management/internal/cli/commands/QueueCommandsDUnitTest.java b/geode-core/src/test/java/com/gemstone/gemfire/management/internal/cli/commands/QueueCommandsDUnitTest.java index e6c1e47e359e..9c07f851c536 100644 --- a/geode-core/src/test/java/com/gemstone/gemfire/management/internal/cli/commands/QueueCommandsDUnitTest.java +++ b/geode-core/src/test/java/com/gemstone/gemfire/management/internal/cli/commands/QueueCommandsDUnitTest.java @@ -48,7 +48,6 @@ /** * A distributed test suite of test cases for testing the queue commands that are part of Gfsh. * - * @author David Hoots * @since 8.0 */ public class QueueCommandsDUnitTest extends CliCommandTestBase { diff --git a/geode-core/src/test/java/com/gemstone/gemfire/management/internal/cli/commands/SharedConfigurationCommandsDUnitTest.java b/geode-core/src/test/java/com/gemstone/gemfire/management/internal/cli/commands/SharedConfigurationCommandsDUnitTest.java index 9dc9506a2a2c..1c9db81683cc 100644 --- a/geode-core/src/test/java/com/gemstone/gemfire/management/internal/cli/commands/SharedConfigurationCommandsDUnitTest.java +++ b/geode-core/src/test/java/com/gemstone/gemfire/management/internal/cli/commands/SharedConfigurationCommandsDUnitTest.java @@ -55,7 +55,6 @@ /*** * DUnit test to test export and import of shared configuration. * - * @author bansods */ public class SharedConfigurationCommandsDUnitTest extends CliCommandTestBase { diff --git a/geode-core/src/test/java/com/gemstone/gemfire/management/internal/cli/commands/ShowMetricsDUnitTest.java b/geode-core/src/test/java/com/gemstone/gemfire/management/internal/cli/commands/ShowMetricsDUnitTest.java index a34b1854c36a..90d0eed461df 100644 --- a/geode-core/src/test/java/com/gemstone/gemfire/management/internal/cli/commands/ShowMetricsDUnitTest.java +++ b/geode-core/src/test/java/com/gemstone/gemfire/management/internal/cli/commands/ShowMetricsDUnitTest.java @@ -50,7 +50,6 @@ import java.util.Properties; /**** - * @author bansods */ public class ShowMetricsDUnitTest extends CliCommandTestBase { diff --git a/geode-core/src/test/java/com/gemstone/gemfire/management/internal/cli/commands/ShowStackTraceDUnitTest.java b/geode-core/src/test/java/com/gemstone/gemfire/management/internal/cli/commands/ShowStackTraceDUnitTest.java index 11bd3524d977..9a72d36dccb2 100644 --- a/geode-core/src/test/java/com/gemstone/gemfire/management/internal/cli/commands/ShowStackTraceDUnitTest.java +++ b/geode-core/src/test/java/com/gemstone/gemfire/management/internal/cli/commands/ShowStackTraceDUnitTest.java @@ -33,7 +33,6 @@ /*** * DUnit test for 'show stack-trace' command * - * @author bansods */ public class ShowStackTraceDUnitTest extends CliCommandTestBase { diff --git a/geode-core/src/test/java/com/gemstone/gemfire/management/internal/cli/commands/UserCommandsDUnitTest.java b/geode-core/src/test/java/com/gemstone/gemfire/management/internal/cli/commands/UserCommandsDUnitTest.java index c7a8f5d0e9fa..887abdc91061 100644 --- a/geode-core/src/test/java/com/gemstone/gemfire/management/internal/cli/commands/UserCommandsDUnitTest.java +++ b/geode-core/src/test/java/com/gemstone/gemfire/management/internal/cli/commands/UserCommandsDUnitTest.java @@ -36,7 +36,6 @@ /** * Unit tests for configuring user commands. * - * @author David Hoots * @since 8.0 */ public class UserCommandsDUnitTest extends CliCommandTestBase { diff --git a/geode-core/src/test/java/com/gemstone/gemfire/management/internal/cli/dto/Key1.java b/geode-core/src/test/java/com/gemstone/gemfire/management/internal/cli/dto/Key1.java index 001edea44641..284c207ae809 100644 --- a/geode-core/src/test/java/com/gemstone/gemfire/management/internal/cli/dto/Key1.java +++ b/geode-core/src/test/java/com/gemstone/gemfire/management/internal/cli/dto/Key1.java @@ -21,7 +21,6 @@ /** * Sample class for Data DUnit tests with JSON keys and values - * @author tushark * */ diff --git a/geode-core/src/test/java/com/gemstone/gemfire/management/internal/cli/dto/Key2.java b/geode-core/src/test/java/com/gemstone/gemfire/management/internal/cli/dto/Key2.java index d6c4d9f204e9..0f062a7f8cc6 100644 --- a/geode-core/src/test/java/com/gemstone/gemfire/management/internal/cli/dto/Key2.java +++ b/geode-core/src/test/java/com/gemstone/gemfire/management/internal/cli/dto/Key2.java @@ -21,7 +21,6 @@ /** * Sample class for Data DUnit tests with JSON keys and values - * @author tushark * */ public class Key2 implements Serializable{ diff --git a/geode-core/src/test/java/com/gemstone/gemfire/management/internal/cli/dto/Value1.java b/geode-core/src/test/java/com/gemstone/gemfire/management/internal/cli/dto/Value1.java index 47a4024c41d8..815cdfd6fe72 100644 --- a/geode-core/src/test/java/com/gemstone/gemfire/management/internal/cli/dto/Value1.java +++ b/geode-core/src/test/java/com/gemstone/gemfire/management/internal/cli/dto/Value1.java @@ -20,7 +20,6 @@ /** * Sample class for Data DUnit tests with JSON keys and values - * @author tushark * */ diff --git a/geode-core/src/test/java/com/gemstone/gemfire/management/internal/cli/dto/Value2.java b/geode-core/src/test/java/com/gemstone/gemfire/management/internal/cli/dto/Value2.java index 5276b2941d7a..89ae608ab99a 100644 --- a/geode-core/src/test/java/com/gemstone/gemfire/management/internal/cli/dto/Value2.java +++ b/geode-core/src/test/java/com/gemstone/gemfire/management/internal/cli/dto/Value2.java @@ -21,7 +21,6 @@ /** * Sample class for Data DUnit tests with JSON keys and values - * @author tushark * */ diff --git a/geode-core/src/test/java/com/gemstone/gemfire/management/internal/cli/functions/DataCommandFunctionJUnitTest.java b/geode-core/src/test/java/com/gemstone/gemfire/management/internal/cli/functions/DataCommandFunctionJUnitTest.java index 905a9cd14ee3..9f84a36e39a0 100644 --- a/geode-core/src/test/java/com/gemstone/gemfire/management/internal/cli/functions/DataCommandFunctionJUnitTest.java +++ b/geode-core/src/test/java/com/gemstone/gemfire/management/internal/cli/functions/DataCommandFunctionJUnitTest.java @@ -37,7 +37,6 @@ /** * TODO: Add additional tests for all methods in DataCommandFunction. * - * @author Jens Deppe */ @Category(IntegrationTest.class) public class DataCommandFunctionJUnitTest { diff --git a/geode-core/src/test/java/com/gemstone/gemfire/management/internal/cli/functions/DescribeDiskStoreFunctionJUnitTest.java b/geode-core/src/test/java/com/gemstone/gemfire/management/internal/cli/functions/DescribeDiskStoreFunctionJUnitTest.java index 98d0e29e0ace..1f919bcc6568 100644 --- a/geode-core/src/test/java/com/gemstone/gemfire/management/internal/cli/functions/DescribeDiskStoreFunctionJUnitTest.java +++ b/geode-core/src/test/java/com/gemstone/gemfire/management/internal/cli/functions/DescribeDiskStoreFunctionJUnitTest.java @@ -63,7 +63,6 @@ * The DescribeDiskStoreFunctionJUnitTest test suite class tests the contract and functionality of the * DescribeDiskStoreFunction class. * - * @author jblum * @see com.gemstone.gemfire.cache.DiskStore * @see com.gemstone.gemfire.management.internal.cli.domain.DiskStoreDetails * @see com.gemstone.gemfire.management.internal.cli.functions.DescribeDiskStoreFunction diff --git a/geode-core/src/test/java/com/gemstone/gemfire/management/internal/cli/functions/ListDiskStoresFunctionJUnitTest.java b/geode-core/src/test/java/com/gemstone/gemfire/management/internal/cli/functions/ListDiskStoresFunctionJUnitTest.java index ac678436d122..2e48deafe778 100644 --- a/geode-core/src/test/java/com/gemstone/gemfire/management/internal/cli/functions/ListDiskStoresFunctionJUnitTest.java +++ b/geode-core/src/test/java/com/gemstone/gemfire/management/internal/cli/functions/ListDiskStoresFunctionJUnitTest.java @@ -49,7 +49,6 @@ * The ListDiskStoreFunctionJUnitTest test suite class tests the contract and functionality of the * ListDiskStoresFunction. *

    - * @author jblum * @see com.gemstone.gemfire.internal.cache.DiskStoreImpl * @see com.gemstone.gemfire.management.internal.cli.domain.DiskStoreDetails * @see com.gemstone.gemfire.management.internal.cli.functions.ListDiskStoresFunction diff --git a/geode-core/src/test/java/com/gemstone/gemfire/management/internal/cli/functions/ListIndexFunctionJUnitTest.java b/geode-core/src/test/java/com/gemstone/gemfire/management/internal/cli/functions/ListIndexFunctionJUnitTest.java index 9f952de6dfe3..413d0ace3a39 100644 --- a/geode-core/src/test/java/com/gemstone/gemfire/management/internal/cli/functions/ListIndexFunctionJUnitTest.java +++ b/geode-core/src/test/java/com/gemstone/gemfire/management/internal/cli/functions/ListIndexFunctionJUnitTest.java @@ -57,7 +57,6 @@ * ListIndexFunction GemFire function. *

    *

    - * @author John Blum * @see com.gemstone.gemfire.management.internal.cli.functions.ListIndexFunction * @see org.jmock.Expectations * @see org.jmock.Mockery diff --git a/geode-core/src/test/java/com/gemstone/gemfire/management/internal/cli/parser/ParserUtilsJUnitTest.java b/geode-core/src/test/java/com/gemstone/gemfire/management/internal/cli/parser/ParserUtilsJUnitTest.java index 9be9b01325ed..03d73d3f9941 100644 --- a/geode-core/src/test/java/com/gemstone/gemfire/management/internal/cli/parser/ParserUtilsJUnitTest.java +++ b/geode-core/src/test/java/com/gemstone/gemfire/management/internal/cli/parser/ParserUtilsJUnitTest.java @@ -26,7 +26,6 @@ /** * Includes tests for all utility methods in {@link ParserUtils} * - * @author njadhav * */ @Category(UnitTest.class) diff --git a/geode-core/src/test/java/com/gemstone/gemfire/management/internal/cli/parser/preprocessor/PreprocessorJUnitTest.java b/geode-core/src/test/java/com/gemstone/gemfire/management/internal/cli/parser/preprocessor/PreprocessorJUnitTest.java index f308836f6ee3..5b928e315eb5 100644 --- a/geode-core/src/test/java/com/gemstone/gemfire/management/internal/cli/parser/preprocessor/PreprocessorJUnitTest.java +++ b/geode-core/src/test/java/com/gemstone/gemfire/management/internal/cli/parser/preprocessor/PreprocessorJUnitTest.java @@ -27,8 +27,6 @@ * * Test for Preprocessor * - * @author njadhav - * @author David Hoots * */ @Category(UnitTest.class) diff --git a/geode-core/src/test/java/com/gemstone/gemfire/management/internal/cli/parser/preprocessor/PreprocessorUtilsJUnitTest.java b/geode-core/src/test/java/com/gemstone/gemfire/management/internal/cli/parser/preprocessor/PreprocessorUtilsJUnitTest.java index ec8fb0811237..2a56747b7e6b 100644 --- a/geode-core/src/test/java/com/gemstone/gemfire/management/internal/cli/parser/preprocessor/PreprocessorUtilsJUnitTest.java +++ b/geode-core/src/test/java/com/gemstone/gemfire/management/internal/cli/parser/preprocessor/PreprocessorUtilsJUnitTest.java @@ -28,7 +28,6 @@ /** * Includes tests for all utility methods in {@link PreprocessorUtils} * - * @author njadhav * */ @Category(UnitTest.class) diff --git a/geode-core/src/test/java/com/gemstone/gemfire/management/internal/cli/shell/GfshExecutionStrategyJUnitTest.java b/geode-core/src/test/java/com/gemstone/gemfire/management/internal/cli/shell/GfshExecutionStrategyJUnitTest.java index e0f6915f344f..d4edfeb88178 100644 --- a/geode-core/src/test/java/com/gemstone/gemfire/management/internal/cli/shell/GfshExecutionStrategyJUnitTest.java +++ b/geode-core/src/test/java/com/gemstone/gemfire/management/internal/cli/shell/GfshExecutionStrategyJUnitTest.java @@ -43,7 +43,6 @@ /** * GfshExecutionStrategyTest - Includes tests to for GfshExecutionStrategyTest * - * @author apande */ @Category(UnitTest.class) public class GfshExecutionStrategyJUnitTest { diff --git a/geode-core/src/test/java/com/gemstone/gemfire/management/internal/cli/shell/GfshHistoryJUnitTest.java b/geode-core/src/test/java/com/gemstone/gemfire/management/internal/cli/shell/GfshHistoryJUnitTest.java index 3d4615ac4126..5a5501d88d5c 100644 --- a/geode-core/src/test/java/com/gemstone/gemfire/management/internal/cli/shell/GfshHistoryJUnitTest.java +++ b/geode-core/src/test/java/com/gemstone/gemfire/management/internal/cli/shell/GfshHistoryJUnitTest.java @@ -32,7 +32,6 @@ import static org.junit.Assert.assertEquals; /** - * @author Jens Deppe */ @Category(UnitTest.class) public class GfshHistoryJUnitTest { diff --git a/geode-core/src/test/java/com/gemstone/gemfire/management/internal/configuration/SharedConfigurationDUnitTest.java b/geode-core/src/test/java/com/gemstone/gemfire/management/internal/configuration/SharedConfigurationDUnitTest.java index d583e515bb60..f770ed741598 100644 --- a/geode-core/src/test/java/com/gemstone/gemfire/management/internal/configuration/SharedConfigurationDUnitTest.java +++ b/geode-core/src/test/java/com/gemstone/gemfire/management/internal/configuration/SharedConfigurationDUnitTest.java @@ -59,7 +59,6 @@ /*** * Tests the starting up of shared configuration, installation of {@link ConfigurationRequestHandler} * - * @author bansods * */ public class SharedConfigurationDUnitTest extends CacheTestCase { diff --git a/geode-core/src/test/java/com/gemstone/gemfire/management/internal/configuration/ZipUtilsJUnitTest.java b/geode-core/src/test/java/com/gemstone/gemfire/management/internal/configuration/ZipUtilsJUnitTest.java index c3889c070795..1222aadadceb 100755 --- a/geode-core/src/test/java/com/gemstone/gemfire/management/internal/configuration/ZipUtilsJUnitTest.java +++ b/geode-core/src/test/java/com/gemstone/gemfire/management/internal/configuration/ZipUtilsJUnitTest.java @@ -35,7 +35,6 @@ * * TODO: this is broken on Windows: see bug #52036 * - * @author bansods */ @Category(UnitTest.class) public class ZipUtilsJUnitTest { diff --git a/geode-core/src/test/java/com/gemstone/gemfire/management/internal/configuration/domain/CacheElementJUnitTest.java b/geode-core/src/test/java/com/gemstone/gemfire/management/internal/configuration/domain/CacheElementJUnitTest.java index 7531e85e9ac7..bcb88c067221 100644 --- a/geode-core/src/test/java/com/gemstone/gemfire/management/internal/configuration/domain/CacheElementJUnitTest.java +++ b/geode-core/src/test/java/com/gemstone/gemfire/management/internal/configuration/domain/CacheElementJUnitTest.java @@ -45,7 +45,6 @@ /** * Test cases for {@link CacheElement}. * - * @author jbarrett@pivotal.io * * @see CacheElement * diff --git a/geode-core/src/test/java/com/gemstone/gemfire/management/internal/configuration/utils/XmlUtilsAddNewNodeJUnitTest.java b/geode-core/src/test/java/com/gemstone/gemfire/management/internal/configuration/utils/XmlUtilsAddNewNodeJUnitTest.java index 45e3badd51ec..d8c52c697f3b 100644 --- a/geode-core/src/test/java/com/gemstone/gemfire/management/internal/configuration/utils/XmlUtilsAddNewNodeJUnitTest.java +++ b/geode-core/src/test/java/com/gemstone/gemfire/management/internal/configuration/utils/XmlUtilsAddNewNodeJUnitTest.java @@ -52,7 +52,6 @@ * {@link SharedConfiguration} method of extracting {@link XmlEntity} from the * new config and applying it to the current shared config. * - * @author jbarrett@pivotal.io * * @since 8.1 */ diff --git a/geode-core/src/test/java/com/gemstone/gemfire/management/internal/configuration/utils/XmlUtilsJUnitTest.java b/geode-core/src/test/java/com/gemstone/gemfire/management/internal/configuration/utils/XmlUtilsJUnitTest.java index 60905b51b889..0e145013da0e 100644 --- a/geode-core/src/test/java/com/gemstone/gemfire/management/internal/configuration/utils/XmlUtilsJUnitTest.java +++ b/geode-core/src/test/java/com/gemstone/gemfire/management/internal/configuration/utils/XmlUtilsJUnitTest.java @@ -46,7 +46,6 @@ * Unit tests for {@link XmlUtils}. See Also {@link XmlUtilsAddNewNodeJUnitTest} * for tests related to {@link XmlUtils#addNewNode(Document, XmlEntity)} * - * @author jbarrett@pivotal.io * * @since 8.1 */ diff --git a/geode-core/src/test/java/com/gemstone/gemfire/management/internal/pulse/TestClientIdsDUnitTest.java b/geode-core/src/test/java/com/gemstone/gemfire/management/internal/pulse/TestClientIdsDUnitTest.java index 696de8e3c133..e4082ed43ee2 100644 --- a/geode-core/src/test/java/com/gemstone/gemfire/management/internal/pulse/TestClientIdsDUnitTest.java +++ b/geode-core/src/test/java/com/gemstone/gemfire/management/internal/pulse/TestClientIdsDUnitTest.java @@ -50,7 +50,6 @@ /** * This is for testing client IDs - * @author Ajay Pande * */ diff --git a/geode-core/src/test/java/com/gemstone/gemfire/management/internal/pulse/TestFunctionsDUnitTest.java b/geode-core/src/test/java/com/gemstone/gemfire/management/internal/pulse/TestFunctionsDUnitTest.java index b410a828969b..efd1a988b9e9 100644 --- a/geode-core/src/test/java/com/gemstone/gemfire/management/internal/pulse/TestFunctionsDUnitTest.java +++ b/geode-core/src/test/java/com/gemstone/gemfire/management/internal/pulse/TestFunctionsDUnitTest.java @@ -33,7 +33,6 @@ /** * This is for testing running functions * - * @author ajayp * */ public class TestFunctionsDUnitTest extends ManagementTestBase { diff --git a/geode-core/src/test/java/com/gemstone/gemfire/management/internal/pulse/TestHeapDUnitTest.java b/geode-core/src/test/java/com/gemstone/gemfire/management/internal/pulse/TestHeapDUnitTest.java index 78e91b0d8264..590b5a9804d9 100644 --- a/geode-core/src/test/java/com/gemstone/gemfire/management/internal/pulse/TestHeapDUnitTest.java +++ b/geode-core/src/test/java/com/gemstone/gemfire/management/internal/pulse/TestHeapDUnitTest.java @@ -26,7 +26,6 @@ /** * This is for testing heap size from Mbean - * @author ajayp * */ diff --git a/geode-core/src/test/java/com/gemstone/gemfire/management/internal/pulse/TestLocatorsDUnitTest.java b/geode-core/src/test/java/com/gemstone/gemfire/management/internal/pulse/TestLocatorsDUnitTest.java index 926c2ff66708..b3cde0e75f9d 100644 --- a/geode-core/src/test/java/com/gemstone/gemfire/management/internal/pulse/TestLocatorsDUnitTest.java +++ b/geode-core/src/test/java/com/gemstone/gemfire/management/internal/pulse/TestLocatorsDUnitTest.java @@ -25,7 +25,6 @@ /** * This is for testing locators from MBean - * @author ajayp * */ diff --git a/geode-core/src/test/java/com/gemstone/gemfire/management/internal/pulse/TestSubscriptionsDUnitTest.java b/geode-core/src/test/java/com/gemstone/gemfire/management/internal/pulse/TestSubscriptionsDUnitTest.java index ef491b01f559..b55d870cb9c7 100644 --- a/geode-core/src/test/java/com/gemstone/gemfire/management/internal/pulse/TestSubscriptionsDUnitTest.java +++ b/geode-core/src/test/java/com/gemstone/gemfire/management/internal/pulse/TestSubscriptionsDUnitTest.java @@ -51,7 +51,6 @@ /** * This is for testing subscriptions * - * @author ajayp * */ diff --git a/geode-core/src/test/java/com/gemstone/gemfire/management/internal/unsafe/ReadOpFileAccessControllerJUnitTest.java b/geode-core/src/test/java/com/gemstone/gemfire/management/internal/unsafe/ReadOpFileAccessControllerJUnitTest.java index 47b86f38f9f8..9e355b6c1964 100644 --- a/geode-core/src/test/java/com/gemstone/gemfire/management/internal/unsafe/ReadOpFileAccessControllerJUnitTest.java +++ b/geode-core/src/test/java/com/gemstone/gemfire/management/internal/unsafe/ReadOpFileAccessControllerJUnitTest.java @@ -59,7 +59,6 @@ /** * Test ReadOnly operations are accesible from RMI Connector with readOnly user - * @author tushark * */ @Category(IntegrationTest.class) diff --git a/geode-core/src/test/java/com/gemstone/gemfire/management/internal/web/controllers/WanCommandsControllerJUnitTest.java b/geode-core/src/test/java/com/gemstone/gemfire/management/internal/web/controllers/WanCommandsControllerJUnitTest.java index 34781b27bfc7..d9362cd79820 100755 --- a/geode-core/src/test/java/com/gemstone/gemfire/management/internal/web/controllers/WanCommandsControllerJUnitTest.java +++ b/geode-core/src/test/java/com/gemstone/gemfire/management/internal/web/controllers/WanCommandsControllerJUnitTest.java @@ -35,7 +35,6 @@ * * Introduced for GEODE-213 "JMX -http manager treats "start gateway-sender" as "start gateway-receiver" * - * @author Kirk Lund */ @SuppressWarnings("unused") @Category(UnitTest.class) diff --git a/geode-core/src/test/java/com/gemstone/gemfire/management/model/EmptyObject.java b/geode-core/src/test/java/com/gemstone/gemfire/management/model/EmptyObject.java index 23fdd054a288..4b2bb66520f3 100644 --- a/geode-core/src/test/java/com/gemstone/gemfire/management/model/EmptyObject.java +++ b/geode-core/src/test/java/com/gemstone/gemfire/management/model/EmptyObject.java @@ -17,7 +17,6 @@ package com.gemstone.gemfire.management.model; /** - * @author rishim */ public class EmptyObject { diff --git a/geode-core/src/test/java/com/gemstone/gemfire/management/model/Item.java b/geode-core/src/test/java/com/gemstone/gemfire/management/model/Item.java index 550bed203b55..7dd5df4d752d 100644 --- a/geode-core/src/test/java/com/gemstone/gemfire/management/model/Item.java +++ b/geode-core/src/test/java/com/gemstone/gemfire/management/model/Item.java @@ -19,7 +19,6 @@ import java.io.Serializable; /** - * @author rishim * */ public class Item implements Serializable { diff --git a/geode-core/src/test/java/com/gemstone/gemfire/management/model/Order.java b/geode-core/src/test/java/com/gemstone/gemfire/management/model/Order.java index 47fe656fd5b1..83841479913e 100644 --- a/geode-core/src/test/java/com/gemstone/gemfire/management/model/Order.java +++ b/geode-core/src/test/java/com/gemstone/gemfire/management/model/Order.java @@ -21,7 +21,6 @@ import java.util.Collection; /** - * @author rishim * */ public class Order implements Serializable { diff --git a/geode-core/src/test/java/com/gemstone/gemfire/memcached/GemcachedBinaryClientJUnitTest.java b/geode-core/src/test/java/com/gemstone/gemfire/memcached/GemcachedBinaryClientJUnitTest.java index 55807add1ea9..129cd089bd7c 100644 --- a/geode-core/src/test/java/com/gemstone/gemfire/memcached/GemcachedBinaryClientJUnitTest.java +++ b/geode-core/src/test/java/com/gemstone/gemfire/memcached/GemcachedBinaryClientJUnitTest.java @@ -52,7 +52,6 @@ /** * Test for binary protocol - * @author sbawaska */ @Category(IntegrationTest.class) public class GemcachedBinaryClientJUnitTest extends diff --git a/geode-core/src/test/java/com/gemstone/gemfire/memcached/IntegrationJUnitTest.java b/geode-core/src/test/java/com/gemstone/gemfire/memcached/IntegrationJUnitTest.java index a20309945c2d..afd386b6d0eb 100644 --- a/geode-core/src/test/java/com/gemstone/gemfire/memcached/IntegrationJUnitTest.java +++ b/geode-core/src/test/java/com/gemstone/gemfire/memcached/IntegrationJUnitTest.java @@ -42,7 +42,6 @@ /** * - * @author sbawaska */ @Category(IntegrationTest.class) public class IntegrationJUnitTest { diff --git a/geode-core/src/test/java/com/gemstone/gemfire/pdx/ClientsWithVersioningRetryDUnitTest.java b/geode-core/src/test/java/com/gemstone/gemfire/pdx/ClientsWithVersioningRetryDUnitTest.java index 40592ffc5ded..f371f65225fd 100644 --- a/geode-core/src/test/java/com/gemstone/gemfire/pdx/ClientsWithVersioningRetryDUnitTest.java +++ b/geode-core/src/test/java/com/gemstone/gemfire/pdx/ClientsWithVersioningRetryDUnitTest.java @@ -67,7 +67,6 @@ import com.gemstone.gemfire.test.dunit.Wait; /** - * @author dsmith * */ public class ClientsWithVersioningRetryDUnitTest extends CacheTestCase { diff --git a/geode-core/src/test/java/com/gemstone/gemfire/pdx/DistributedSystemIdDUnitTest.java b/geode-core/src/test/java/com/gemstone/gemfire/pdx/DistributedSystemIdDUnitTest.java index 2d2027556c2a..3ea5a4ec923b 100644 --- a/geode-core/src/test/java/com/gemstone/gemfire/pdx/DistributedSystemIdDUnitTest.java +++ b/geode-core/src/test/java/com/gemstone/gemfire/pdx/DistributedSystemIdDUnitTest.java @@ -31,7 +31,6 @@ import com.gemstone.gemfire.test.dunit.VM; /** - * @author dsmith * */ public class DistributedSystemIdDUnitTest extends DistributedTestCase { diff --git a/geode-core/src/test/java/com/gemstone/gemfire/pdx/JSONPdxClientServerDUnitTest.java b/geode-core/src/test/java/com/gemstone/gemfire/pdx/JSONPdxClientServerDUnitTest.java index 937ff31b6cef..2cd9a9c89483 100755 --- a/geode-core/src/test/java/com/gemstone/gemfire/pdx/JSONPdxClientServerDUnitTest.java +++ b/geode-core/src/test/java/com/gemstone/gemfire/pdx/JSONPdxClientServerDUnitTest.java @@ -50,7 +50,6 @@ import org.json.JSONException; import org.json.JSONObject; /** - * @author hiteshk * */ public class JSONPdxClientServerDUnitTest extends CacheTestCase { diff --git a/geode-core/src/test/java/com/gemstone/gemfire/pdx/PdxAttributesJUnitTest.java b/geode-core/src/test/java/com/gemstone/gemfire/pdx/PdxAttributesJUnitTest.java index 5e2138535f9f..ff6688c9ce16 100644 --- a/geode-core/src/test/java/com/gemstone/gemfire/pdx/PdxAttributesJUnitTest.java +++ b/geode-core/src/test/java/com/gemstone/gemfire/pdx/PdxAttributesJUnitTest.java @@ -44,7 +44,6 @@ import com.gemstone.gemfire.test.junit.categories.IntegrationTest; /** - * @author dsmith * */ @Category(IntegrationTest.class) diff --git a/geode-core/src/test/java/com/gemstone/gemfire/pdx/PdxClientServerDUnitTest.java b/geode-core/src/test/java/com/gemstone/gemfire/pdx/PdxClientServerDUnitTest.java index 772089034938..39ea1bed58b3 100644 --- a/geode-core/src/test/java/com/gemstone/gemfire/pdx/PdxClientServerDUnitTest.java +++ b/geode-core/src/test/java/com/gemstone/gemfire/pdx/PdxClientServerDUnitTest.java @@ -49,7 +49,6 @@ import com.gemstone.gemfire.test.dunit.VM; /** - * @author dsmith * */ public class PdxClientServerDUnitTest extends CacheTestCase { diff --git a/geode-core/src/test/java/com/gemstone/gemfire/pdx/PdxDeserializationDUnitTest.java b/geode-core/src/test/java/com/gemstone/gemfire/pdx/PdxDeserializationDUnitTest.java index 10b21d07a676..70ae048fd9f8 100644 --- a/geode-core/src/test/java/com/gemstone/gemfire/pdx/PdxDeserializationDUnitTest.java +++ b/geode-core/src/test/java/com/gemstone/gemfire/pdx/PdxDeserializationDUnitTest.java @@ -52,7 +52,6 @@ * * This test is trying to cover all of the possible access paths. * - * @author dsmith * */ public class PdxDeserializationDUnitTest extends CacheTestCase { diff --git a/geode-core/src/test/java/com/gemstone/gemfire/pdx/PdxInstanceJUnitTest.java b/geode-core/src/test/java/com/gemstone/gemfire/pdx/PdxInstanceJUnitTest.java index 04ce78efc532..8e2983d04452 100644 --- a/geode-core/src/test/java/com/gemstone/gemfire/pdx/PdxInstanceJUnitTest.java +++ b/geode-core/src/test/java/com/gemstone/gemfire/pdx/PdxInstanceJUnitTest.java @@ -50,7 +50,6 @@ import com.gemstone.gemfire.test.junit.categories.IntegrationTest; /** - * @author dsmith * */ @Category(IntegrationTest.class) diff --git a/geode-core/src/test/java/com/gemstone/gemfire/pdx/SimpleClass2.java b/geode-core/src/test/java/com/gemstone/gemfire/pdx/SimpleClass2.java index d4f2d4764505..0fcd3c0acdfb 100644 --- a/geode-core/src/test/java/com/gemstone/gemfire/pdx/SimpleClass2.java +++ b/geode-core/src/test/java/com/gemstone/gemfire/pdx/SimpleClass2.java @@ -17,7 +17,6 @@ package com.gemstone.gemfire.pdx; /** - * @author dsmith * */ public class SimpleClass2 extends SimpleClass { diff --git a/geode-core/src/test/java/com/gemstone/gemfire/rest/internal/web/controllers/AddFreeItemToOrders.java b/geode-core/src/test/java/com/gemstone/gemfire/rest/internal/web/controllers/AddFreeItemToOrders.java index c8a2ce38eee7..73447809d0c0 100644 --- a/geode-core/src/test/java/com/gemstone/gemfire/rest/internal/web/controllers/AddFreeItemToOrders.java +++ b/geode-core/src/test/java/com/gemstone/gemfire/rest/internal/web/controllers/AddFreeItemToOrders.java @@ -40,7 +40,6 @@ /** * Gemfire function to add free items in the existing order * if the total price for that order is greater then the argument - * @author Nilkanth Patel */ public class AddFreeItemToOrders implements Function { diff --git a/geode-core/src/test/java/com/gemstone/gemfire/rest/internal/web/controllers/Customer.java b/geode-core/src/test/java/com/gemstone/gemfire/rest/internal/web/controllers/Customer.java index 93ac63d6a0be..618e1793e94a 100644 --- a/geode-core/src/test/java/com/gemstone/gemfire/rest/internal/web/controllers/Customer.java +++ b/geode-core/src/test/java/com/gemstone/gemfire/rest/internal/web/controllers/Customer.java @@ -22,7 +22,6 @@ /** * The Customer class models a customer entity. *

    - * @author Nilkanth Patel * @since 8.0 */ diff --git a/geode-core/src/test/java/com/gemstone/gemfire/rest/internal/web/controllers/Gender.java b/geode-core/src/test/java/com/gemstone/gemfire/rest/internal/web/controllers/Gender.java index 9b0010891a16..f3206e3dfd9d 100644 --- a/geode-core/src/test/java/com/gemstone/gemfire/rest/internal/web/controllers/Gender.java +++ b/geode-core/src/test/java/com/gemstone/gemfire/rest/internal/web/controllers/Gender.java @@ -19,7 +19,6 @@ /** * The Gender enum is a enumeration of genders (sexes). *

    - * @author Nilkanth Patel, John Blum * @since 8.0 */ diff --git a/geode-core/src/test/java/com/gemstone/gemfire/rest/internal/web/controllers/GetAllEntries.java b/geode-core/src/test/java/com/gemstone/gemfire/rest/internal/web/controllers/GetAllEntries.java index cb856871b12c..33dde175790c 100644 --- a/geode-core/src/test/java/com/gemstone/gemfire/rest/internal/web/controllers/GetAllEntries.java +++ b/geode-core/src/test/java/com/gemstone/gemfire/rest/internal/web/controllers/GetAllEntries.java @@ -25,7 +25,6 @@ /** * The GetAllEntries is function that will return a map as a result of its execution. *

    - * @author Nilkanth Patel * @since 8.0 */ diff --git a/geode-core/src/test/java/com/gemstone/gemfire/rest/internal/web/controllers/GetDeliveredOrders.java b/geode-core/src/test/java/com/gemstone/gemfire/rest/internal/web/controllers/GetDeliveredOrders.java index 3a150a3bf7a1..b84f5bf51683 100644 --- a/geode-core/src/test/java/com/gemstone/gemfire/rest/internal/web/controllers/GetDeliveredOrders.java +++ b/geode-core/src/test/java/com/gemstone/gemfire/rest/internal/web/controllers/GetDeliveredOrders.java @@ -35,7 +35,6 @@ /** * The GetDeliveredOrders class is a gemfire function that gives details about delivered orders. *

    -* @author Nilkanth Patel * @since 8.0 */ diff --git a/geode-core/src/test/java/com/gemstone/gemfire/rest/internal/web/controllers/GetRegions.java b/geode-core/src/test/java/com/gemstone/gemfire/rest/internal/web/controllers/GetRegions.java index d9e039b24792..41c173c66425 100644 --- a/geode-core/src/test/java/com/gemstone/gemfire/rest/internal/web/controllers/GetRegions.java +++ b/geode-core/src/test/java/com/gemstone/gemfire/rest/internal/web/controllers/GetRegions.java @@ -29,7 +29,6 @@ /** * The GetRegions class is an gemfire function that gives data about available regions. *

    -* @author Nilkanth Patel * @since 8.0 */ diff --git a/geode-core/src/test/java/com/gemstone/gemfire/rest/internal/web/controllers/Item.java b/geode-core/src/test/java/com/gemstone/gemfire/rest/internal/web/controllers/Item.java index 450ffda34481..e331206a098d 100644 --- a/geode-core/src/test/java/com/gemstone/gemfire/rest/internal/web/controllers/Item.java +++ b/geode-core/src/test/java/com/gemstone/gemfire/rest/internal/web/controllers/Item.java @@ -26,7 +26,6 @@ /** * The Item class models item entity in the real world. *

    - * @author Nilkanth Patel * @since 8.0 */ diff --git a/geode-core/src/test/java/com/gemstone/gemfire/rest/internal/web/controllers/Order.java b/geode-core/src/test/java/com/gemstone/gemfire/rest/internal/web/controllers/Order.java index 34aefb2a5ae0..074e494f3119 100644 --- a/geode-core/src/test/java/com/gemstone/gemfire/rest/internal/web/controllers/Order.java +++ b/geode-core/src/test/java/com/gemstone/gemfire/rest/internal/web/controllers/Order.java @@ -28,7 +28,6 @@ /** * The Order class is an abstraction modeling a order. *

    -* @author Nilkanth Patel * @since 8.0 */ diff --git a/geode-core/src/test/java/com/gemstone/gemfire/rest/internal/web/controllers/Person.java b/geode-core/src/test/java/com/gemstone/gemfire/rest/internal/web/controllers/Person.java index b5b5459777a1..cae9bbde379b 100644 --- a/geode-core/src/test/java/com/gemstone/gemfire/rest/internal/web/controllers/Person.java +++ b/geode-core/src/test/java/com/gemstone/gemfire/rest/internal/web/controllers/Person.java @@ -27,7 +27,6 @@ /** * The Person class is an abstraction modeling a person. *

    -* @author Nilkanth Patel, John Blum * @since 8.0 */ @SuppressWarnings("unused") diff --git a/geode-core/src/test/java/com/gemstone/gemfire/rest/internal/web/controllers/RestTestUtils.java b/geode-core/src/test/java/com/gemstone/gemfire/rest/internal/web/controllers/RestTestUtils.java index 0406831b5b59..e4049ff69013 100644 --- a/geode-core/src/test/java/com/gemstone/gemfire/rest/internal/web/controllers/RestTestUtils.java +++ b/geode-core/src/test/java/com/gemstone/gemfire/rest/internal/web/controllers/RestTestUtils.java @@ -34,7 +34,6 @@ * The RestTestUtils class contains core functionality for Spring REST Template *

    * - * @author Nilkanth Patel * @see org.springframework.context.ApplicationContext * @see org.springframework.data.gemfire.GemfireTemplate * @since 8.0 diff --git a/geode-core/src/test/java/com/gemstone/gemfire/security/ClientAuthenticationDUnitTest.java b/geode-core/src/test/java/com/gemstone/gemfire/security/ClientAuthenticationDUnitTest.java index 8446eae10f3c..02cd2f73c893 100644 --- a/geode-core/src/test/java/com/gemstone/gemfire/security/ClientAuthenticationDUnitTest.java +++ b/geode-core/src/test/java/com/gemstone/gemfire/security/ClientAuthenticationDUnitTest.java @@ -44,7 +44,6 @@ * invalid credentials/modules. It also checks for authentication * success/failure in case of failover and for the notification channel. * - * @author sumedh * @since 5.5 */ public class ClientAuthenticationDUnitTest extends DistributedTestCase { diff --git a/geode-core/src/test/java/com/gemstone/gemfire/security/ClientAuthorizationDUnitTest.java b/geode-core/src/test/java/com/gemstone/gemfire/security/ClientAuthorizationDUnitTest.java index 0e46da506ca8..56646e30fc0e 100644 --- a/geode-core/src/test/java/com/gemstone/gemfire/security/ClientAuthorizationDUnitTest.java +++ b/geode-core/src/test/java/com/gemstone/gemfire/security/ClientAuthorizationDUnitTest.java @@ -46,7 +46,6 @@ * pre-operation callbacks. It also checks for authorization in case of * failover. * - * @author sumedh * @since 5.5 */ public class ClientAuthorizationDUnitTest extends ClientAuthorizationTestBase { diff --git a/geode-core/src/test/java/com/gemstone/gemfire/security/ClientAuthorizationTestBase.java b/geode-core/src/test/java/com/gemstone/gemfire/security/ClientAuthorizationTestBase.java index 55edaa1c8173..1fd93d3c23ed 100644 --- a/geode-core/src/test/java/com/gemstone/gemfire/security/ClientAuthorizationTestBase.java +++ b/geode-core/src/test/java/com/gemstone/gemfire/security/ClientAuthorizationTestBase.java @@ -73,7 +73,6 @@ * Base class for tests for authorization from client to server. It contains * utility functions for the authorization tests from client to server. * - * @author sumedh * @since 5.5 */ public class ClientAuthorizationTestBase extends DistributedTestCase { @@ -907,7 +906,6 @@ protected void runOpsWithFailover(OperationWithAction[] opCodes, * different operations and also queues up the received updates to precise * checking of each update. * - * @author sumedh * @since 5.5 */ public static class AuthzCqListener implements CqListener { @@ -1003,7 +1001,6 @@ public void checkPuts(String[] vals, int[] indices) { * This class specifies flags that can be used to alter the behaviour of * operations being performed by the doOp function. * - * @author sumedh * @since 5.5 */ public static class OpFlags { @@ -1161,7 +1158,6 @@ static public String description(int f) { * This class encapsulates an {@link OperationCode} with associated flags, the * client to perform the operation, and the number of operations to perform. * - * @author sumedh * @since 5.5 */ public static class OperationWithAction { @@ -1325,7 +1321,6 @@ public String toString() { * indices also. This is utilized by the post-operation authorization tests * where authorization is based on key indices. * - * @author sumedh * @since 5.5 */ public interface TestCredentialGenerator { @@ -1354,7 +1349,6 @@ public Properties getDisallowedCredentials(OperationCode[] opCodes, * Contains a {@link AuthzCredentialGenerator} and implements the * {@link TestCredentialGenerator} interface. * - * @author sumedh * @since 5.5 */ protected static class TestAuthzCredentialGenerator implements diff --git a/geode-core/src/test/java/com/gemstone/gemfire/security/P2PAuthenticationDUnitTest.java b/geode-core/src/test/java/com/gemstone/gemfire/security/P2PAuthenticationDUnitTest.java index d47b1c409020..8544bc6ed4fc 100644 --- a/geode-core/src/test/java/com/gemstone/gemfire/security/P2PAuthenticationDUnitTest.java +++ b/geode-core/src/test/java/com/gemstone/gemfire/security/P2PAuthenticationDUnitTest.java @@ -49,7 +49,6 @@ /** * Tests peer to peer authentication in Gemfire * - * @author Yogesh Mahajan * @since 5.5 */ public class P2PAuthenticationDUnitTest extends DistributedTestCase { diff --git a/geode-core/src/test/java/com/gemstone/gemfire/test/dunit/DUnitEnv.java b/geode-core/src/test/java/com/gemstone/gemfire/test/dunit/DUnitEnv.java index d662779b2cbe..d1eb0565f9bb 100644 --- a/geode-core/src/test/java/com/gemstone/gemfire/test/dunit/DUnitEnv.java +++ b/geode-core/src/test/java/com/gemstone/gemfire/test/dunit/DUnitEnv.java @@ -34,7 +34,6 @@ * through here, so that we can separate them out from depending on hydra * and run them on a different VM launching system. * - * @author dsmith */ public abstract class DUnitEnv { diff --git a/geode-core/src/test/java/com/gemstone/gemfire/test/dunit/DistributedTestCase.java b/geode-core/src/test/java/com/gemstone/gemfire/test/dunit/DistributedTestCase.java index 65224e806f90..65a4d4c3fe5c 100755 --- a/geode-core/src/test/java/com/gemstone/gemfire/test/dunit/DistributedTestCase.java +++ b/geode-core/src/test/java/com/gemstone/gemfire/test/dunit/DistributedTestCase.java @@ -70,7 +70,6 @@ * * public static void caseTearDown() -- comparable to JUnit's AfterClass annotation * - * @author David Whitlock */ @Category(DistributedTest.class) @SuppressWarnings("serial") diff --git a/geode-core/src/test/java/com/gemstone/gemfire/test/dunit/Host.java b/geode-core/src/test/java/com/gemstone/gemfire/test/dunit/Host.java index 95d6f0dbdf68..bc9fed97a26a 100644 --- a/geode-core/src/test/java/com/gemstone/gemfire/test/dunit/Host.java +++ b/geode-core/src/test/java/com/gemstone/gemfire/test/dunit/Host.java @@ -33,7 +33,6 @@ * the host on which Hydra's Master VM runs. RMI registries may be * started on other hosts via additional Hydra configuration.

    * - * @author David Whitlock */ @SuppressWarnings("serial") public abstract class Host implements Serializable { diff --git a/geode-core/src/test/java/com/gemstone/gemfire/test/dunit/IgnoredException.java b/geode-core/src/test/java/com/gemstone/gemfire/test/dunit/IgnoredException.java index e453226c4f6a..dec33386a8c2 100755 --- a/geode-core/src/test/java/com/gemstone/gemfire/test/dunit/IgnoredException.java +++ b/geode-core/src/test/java/com/gemstone/gemfire/test/dunit/IgnoredException.java @@ -57,7 +57,6 @@ * * Extracted from DistributedTestCase. * - * @author Mitch Thomas * @since 5.7bugfix */ @SuppressWarnings("serial") diff --git a/geode-core/src/test/java/com/gemstone/gemfire/test/dunit/RMIException.java b/geode-core/src/test/java/com/gemstone/gemfire/test/dunit/RMIException.java index 3e2915af6c4b..82ede05d7e34 100644 --- a/geode-core/src/test/java/com/gemstone/gemfire/test/dunit/RMIException.java +++ b/geode-core/src/test/java/com/gemstone/gemfire/test/dunit/RMIException.java @@ -41,7 +41,6 @@ * * see hydra.RemoteTestModuleIF * - * @author David Whitlock */ @SuppressWarnings("serial") public class RMIException extends GemFireException { diff --git a/geode-core/src/test/java/com/gemstone/gemfire/test/dunit/RepeatableRunnable.java b/geode-core/src/test/java/com/gemstone/gemfire/test/dunit/RepeatableRunnable.java index 9695c3220774..69e64cfcce00 100644 --- a/geode-core/src/test/java/com/gemstone/gemfire/test/dunit/RepeatableRunnable.java +++ b/geode-core/src/test/java/com/gemstone/gemfire/test/dunit/RepeatableRunnable.java @@ -20,7 +20,6 @@ * A RepeatableRunnable is an object that implements a method that * can be invoked repeatably without causing any side affects. * - * @author dmonnie * @deprecated Please use SerializableRunnable with {@link com.jayway.awaitility.Awaitility} instead. */ @Deprecated diff --git a/geode-core/src/test/java/com/gemstone/gemfire/test/dunit/SerializableCallable.java b/geode-core/src/test/java/com/gemstone/gemfire/test/dunit/SerializableCallable.java index e330693ddd3c..f9291fd3ece0 100644 --- a/geode-core/src/test/java/com/gemstone/gemfire/test/dunit/SerializableCallable.java +++ b/geode-core/src/test/java/com/gemstone/gemfire/test/dunit/SerializableCallable.java @@ -43,7 +43,6 @@ * } * * - * @author Mitch Thomas */ public abstract class SerializableCallable implements SerializableCallableIF { diff --git a/geode-core/src/test/java/com/gemstone/gemfire/test/dunit/ThreadUtils.java b/geode-core/src/test/java/com/gemstone/gemfire/test/dunit/ThreadUtils.java index 6ba87ed4ef75..fe8f2605e83d 100755 --- a/geode-core/src/test/java/com/gemstone/gemfire/test/dunit/ThreadUtils.java +++ b/geode-core/src/test/java/com/gemstone/gemfire/test/dunit/ThreadUtils.java @@ -49,7 +49,6 @@ protected ThreadUtils() { /** * Print stack dumps for all vms. * - * @author bruce * @since 5.0 */ public static void dumpAllStacks() { @@ -68,7 +67,6 @@ public static void dumpMyThreads() { /** * Print a stack dump for this vm. * - * @author bruce * @since 5.0 */ public static void dumpStack() { @@ -78,7 +76,6 @@ public static void dumpStack() { /** * Print stack dumps for all vms on the given host. * - * @author bruce * @since 5.0 */ public static void dumpStack(final Host host) { @@ -90,7 +87,6 @@ public static void dumpStack(final Host host) { /** * Print a stack dump for the given vm. * - * @author bruce * @since 5.0 */ public static void dumpStack(final VM vm) { diff --git a/geode-core/src/test/java/com/gemstone/gemfire/test/dunit/VM.java b/geode-core/src/test/java/com/gemstone/gemfire/test/dunit/VM.java index 122aa0e34dfb..ed4ba2e6b1d4 100644 --- a/geode-core/src/test/java/com/gemstone/gemfire/test/dunit/VM.java +++ b/geode-core/src/test/java/com/gemstone/gemfire/test/dunit/VM.java @@ -30,7 +30,6 @@ /** * This class represents a Java Virtual Machine that runs on a host. * - * @author David Whitlock */ @SuppressWarnings("serial") public class VM implements Serializable { diff --git a/geode-core/src/test/java/com/gemstone/gemfire/test/dunit/rules/DistributedDisconnectRule.java b/geode-core/src/test/java/com/gemstone/gemfire/test/dunit/rules/DistributedDisconnectRule.java index 125fc06de6ea..897b7a57d5ca 100755 --- a/geode-core/src/test/java/com/gemstone/gemfire/test/dunit/rules/DistributedDisconnectRule.java +++ b/geode-core/src/test/java/com/gemstone/gemfire/test/dunit/rules/DistributedDisconnectRule.java @@ -84,7 +84,6 @@ public void run() { /** * Builds an instance of DistributedDisconnectRule * - * @author Kirk Lund */ public static class Builder { private boolean disconnectBeforeClass; diff --git a/geode-core/src/test/java/com/gemstone/gemfire/test/dunit/rules/DistributedRestoreSystemProperties.java b/geode-core/src/test/java/com/gemstone/gemfire/test/dunit/rules/DistributedRestoreSystemProperties.java index 1711b21f8d0d..8c0f5783b05c 100755 --- a/geode-core/src/test/java/com/gemstone/gemfire/test/dunit/rules/DistributedRestoreSystemProperties.java +++ b/geode-core/src/test/java/com/gemstone/gemfire/test/dunit/rules/DistributedRestoreSystemProperties.java @@ -30,7 +30,6 @@ * Distributed version of RestoreSystemProperties which affects all DUnit * JVMs including the Locator JVM. * - * @author Kirk Lund */ @SuppressWarnings("serial") public class DistributedRestoreSystemProperties extends RestoreSystemProperties implements SerializableTestRule { diff --git a/geode-core/src/test/java/com/gemstone/gemfire/test/dunit/standalone/ChildVM.java b/geode-core/src/test/java/com/gemstone/gemfire/test/dunit/standalone/ChildVM.java index 49b53e84dc7f..06c3196b0c47 100644 --- a/geode-core/src/test/java/com/gemstone/gemfire/test/dunit/standalone/ChildVM.java +++ b/geode-core/src/test/java/com/gemstone/gemfire/test/dunit/standalone/ChildVM.java @@ -28,7 +28,6 @@ import com.gemstone.gemfire.test.dunit.standalone.DUnitLauncher.MasterRemote; /** - * @author dsmith * */ public class ChildVM { diff --git a/geode-core/src/test/java/com/gemstone/gemfire/test/dunit/standalone/DUnitLauncher.java b/geode-core/src/test/java/com/gemstone/gemfire/test/dunit/standalone/DUnitLauncher.java index 99548b3cac50..5b5a7f0c18d0 100644 --- a/geode-core/src/test/java/com/gemstone/gemfire/test/dunit/standalone/DUnitLauncher.java +++ b/geode-core/src/test/java/com/gemstone/gemfire/test/dunit/standalone/DUnitLauncher.java @@ -71,7 +71,6 @@ * Also, it's a good idea to set your working directory, because the test code * a lot of files that it leaves around. * - * @author dsmith * */ public class DUnitLauncher { diff --git a/geode-core/src/test/java/com/gemstone/gemfire/test/dunit/standalone/ProcessManager.java b/geode-core/src/test/java/com/gemstone/gemfire/test/dunit/standalone/ProcessManager.java index 854daa304150..b600a699abde 100644 --- a/geode-core/src/test/java/com/gemstone/gemfire/test/dunit/standalone/ProcessManager.java +++ b/geode-core/src/test/java/com/gemstone/gemfire/test/dunit/standalone/ProcessManager.java @@ -38,7 +38,6 @@ import com.gemstone.gemfire.internal.logging.LogService; /** - * @author dsmith * */ public class ProcessManager { diff --git a/geode-core/src/test/java/com/gemstone/gemfire/test/dunit/standalone/RemoteDUnitVM.java b/geode-core/src/test/java/com/gemstone/gemfire/test/dunit/standalone/RemoteDUnitVM.java index 6d016bc83b79..81c895ef60bb 100644 --- a/geode-core/src/test/java/com/gemstone/gemfire/test/dunit/standalone/RemoteDUnitVM.java +++ b/geode-core/src/test/java/com/gemstone/gemfire/test/dunit/standalone/RemoteDUnitVM.java @@ -28,7 +28,6 @@ import hydra.MethExecutorResult; /** - * @author dsmith * */ public class RemoteDUnitVM extends UnicastRemoteObject implements RemoteDUnitVMIF { diff --git a/geode-core/src/test/java/com/gemstone/gemfire/test/golden/FailOutputTestCase.java b/geode-core/src/test/java/com/gemstone/gemfire/test/golden/FailOutputTestCase.java index 325e5bc156d1..62c5d71c510b 100755 --- a/geode-core/src/test/java/com/gemstone/gemfire/test/golden/FailOutputTestCase.java +++ b/geode-core/src/test/java/com/gemstone/gemfire/test/golden/FailOutputTestCase.java @@ -24,7 +24,6 @@ * Abstract test case for tests verifying that unexpected test output will * cause expected failures. * - * @author Kirk Lund */ public abstract class FailOutputTestCase extends GoldenTestCase implements ExecutableProcess { diff --git a/geode-core/src/test/java/com/gemstone/gemfire/test/golden/FailWithErrorInOutputJUnitTest.java b/geode-core/src/test/java/com/gemstone/gemfire/test/golden/FailWithErrorInOutputJUnitTest.java index 2ade8d07ec28..aea57af41cf0 100755 --- a/geode-core/src/test/java/com/gemstone/gemfire/test/golden/FailWithErrorInOutputJUnitTest.java +++ b/geode-core/src/test/java/com/gemstone/gemfire/test/golden/FailWithErrorInOutputJUnitTest.java @@ -26,7 +26,6 @@ * Verifies that test output containing an unexpected error message * will fail with that error message as the failure message. * - * @author Kirk Lund */ @Category(IntegrationTest.class) public class FailWithErrorInOutputJUnitTest extends FailWithProblemInOutputTestCase { diff --git a/geode-core/src/test/java/com/gemstone/gemfire/test/golden/FailWithExtraLineInOutputJUnitTest.java b/geode-core/src/test/java/com/gemstone/gemfire/test/golden/FailWithExtraLineInOutputJUnitTest.java index aa2ae049e4f8..78e255868510 100755 --- a/geode-core/src/test/java/com/gemstone/gemfire/test/golden/FailWithExtraLineInOutputJUnitTest.java +++ b/geode-core/src/test/java/com/gemstone/gemfire/test/golden/FailWithExtraLineInOutputJUnitTest.java @@ -28,7 +28,6 @@ * Verifies that test output containing an unexpected extra line * will fail with that line as the failure message. * - * @author Kirk Lund */ @Category(IntegrationTest.class) public class FailWithExtraLineInOutputJUnitTest extends FailOutputTestCase { diff --git a/geode-core/src/test/java/com/gemstone/gemfire/test/golden/FailWithLineMissingFromEndOfOutputJUnitTest.java b/geode-core/src/test/java/com/gemstone/gemfire/test/golden/FailWithLineMissingFromEndOfOutputJUnitTest.java index 0d21894c32c6..f645213ccdee 100755 --- a/geode-core/src/test/java/com/gemstone/gemfire/test/golden/FailWithLineMissingFromEndOfOutputJUnitTest.java +++ b/geode-core/src/test/java/com/gemstone/gemfire/test/golden/FailWithLineMissingFromEndOfOutputJUnitTest.java @@ -28,7 +28,6 @@ * Verifies that test output missing an expected line (at the end of * the golden file) will fail with that line as the failure message. * - * @author Kirk Lund */ @Category(IntegrationTest.class) public class FailWithLineMissingFromEndOfOutputJUnitTest extends FailOutputTestCase { diff --git a/geode-core/src/test/java/com/gemstone/gemfire/test/golden/FailWithLineMissingFromMiddleOfOutputJUnitTest.java b/geode-core/src/test/java/com/gemstone/gemfire/test/golden/FailWithLineMissingFromMiddleOfOutputJUnitTest.java index 44d8a7373b76..4b7897fb5a2d 100755 --- a/geode-core/src/test/java/com/gemstone/gemfire/test/golden/FailWithLineMissingFromMiddleOfOutputJUnitTest.java +++ b/geode-core/src/test/java/com/gemstone/gemfire/test/golden/FailWithLineMissingFromMiddleOfOutputJUnitTest.java @@ -28,7 +28,6 @@ * Verifies that test output missing an expected line (at the middle * of the golden file) will fail with that line as the failure message. * - * @author Kirk Lund */ @Category(IntegrationTest.class) public class FailWithLineMissingFromMiddleOfOutputJUnitTest extends FailOutputTestCase { diff --git a/geode-core/src/test/java/com/gemstone/gemfire/test/golden/FailWithLoggerErrorInOutputJUnitTest.java b/geode-core/src/test/java/com/gemstone/gemfire/test/golden/FailWithLoggerErrorInOutputJUnitTest.java index 3a472cb2564f..121863131bbd 100755 --- a/geode-core/src/test/java/com/gemstone/gemfire/test/golden/FailWithLoggerErrorInOutputJUnitTest.java +++ b/geode-core/src/test/java/com/gemstone/gemfire/test/golden/FailWithLoggerErrorInOutputJUnitTest.java @@ -25,7 +25,6 @@ * Verifies that test output containing an unexpected ERROR message * will fail with that ERROR message as the failure message. * - * @author Kirk Lund */ @Category(IntegrationTest.class) public class FailWithLoggerErrorInOutputJUnitTest extends FailWithProblemInOutputTestCase { diff --git a/geode-core/src/test/java/com/gemstone/gemfire/test/golden/FailWithLoggerFatalInOutputJUnitTest.java b/geode-core/src/test/java/com/gemstone/gemfire/test/golden/FailWithLoggerFatalInOutputJUnitTest.java index c046bac98533..4e59fd250fc2 100755 --- a/geode-core/src/test/java/com/gemstone/gemfire/test/golden/FailWithLoggerFatalInOutputJUnitTest.java +++ b/geode-core/src/test/java/com/gemstone/gemfire/test/golden/FailWithLoggerFatalInOutputJUnitTest.java @@ -25,7 +25,6 @@ * Verifies that test output containing an unexpected FATAL message * will fail with that FATAL message as the failure message. * - * @author Kirk Lund */ @Category(IntegrationTest.class) public class FailWithLoggerFatalInOutputJUnitTest extends FailWithProblemInOutputTestCase { diff --git a/geode-core/src/test/java/com/gemstone/gemfire/test/golden/FailWithLoggerWarnInOutputJUnitTest.java b/geode-core/src/test/java/com/gemstone/gemfire/test/golden/FailWithLoggerWarnInOutputJUnitTest.java index 8454b0a097b1..956e77078528 100755 --- a/geode-core/src/test/java/com/gemstone/gemfire/test/golden/FailWithLoggerWarnInOutputJUnitTest.java +++ b/geode-core/src/test/java/com/gemstone/gemfire/test/golden/FailWithLoggerWarnInOutputJUnitTest.java @@ -25,7 +25,6 @@ * Verifies that test output containing an unexpected WARN message * will fail with that WARN message as the failure message. * - * @author Kirk Lund */ @Category(IntegrationTest.class) public class FailWithLoggerWarnInOutputJUnitTest extends FailWithProblemInOutputTestCase { diff --git a/geode-core/src/test/java/com/gemstone/gemfire/test/golden/FailWithProblemInOutputTestCase.java b/geode-core/src/test/java/com/gemstone/gemfire/test/golden/FailWithProblemInOutputTestCase.java index 1bc6debbca2e..5c71a0e28694 100755 --- a/geode-core/src/test/java/com/gemstone/gemfire/test/golden/FailWithProblemInOutputTestCase.java +++ b/geode-core/src/test/java/com/gemstone/gemfire/test/golden/FailWithProblemInOutputTestCase.java @@ -26,7 +26,6 @@ * Abstract test case for tests verifying that test output with a * log message of warning/error/severe will cause expected failures. * - * @author Kirk Lund */ public abstract class FailWithProblemInOutputTestCase extends FailOutputTestCase { diff --git a/geode-core/src/test/java/com/gemstone/gemfire/test/golden/FailWithSevereInOutputJUnitTest.java b/geode-core/src/test/java/com/gemstone/gemfire/test/golden/FailWithSevereInOutputJUnitTest.java index 4f9328491f68..99e098166d1d 100755 --- a/geode-core/src/test/java/com/gemstone/gemfire/test/golden/FailWithSevereInOutputJUnitTest.java +++ b/geode-core/src/test/java/com/gemstone/gemfire/test/golden/FailWithSevereInOutputJUnitTest.java @@ -26,7 +26,6 @@ * Verifies that test output containing an unexpected severe message * will fail with that severe message as the failure message. * - * @author Kirk Lund */ @Category(IntegrationTest.class) public class FailWithSevereInOutputJUnitTest extends FailWithProblemInOutputTestCase { diff --git a/geode-core/src/test/java/com/gemstone/gemfire/test/golden/FailWithWarningInOutputJUnitTest.java b/geode-core/src/test/java/com/gemstone/gemfire/test/golden/FailWithWarningInOutputJUnitTest.java index 86bb34cc4aaa..38ecc72a61d2 100755 --- a/geode-core/src/test/java/com/gemstone/gemfire/test/golden/FailWithWarningInOutputJUnitTest.java +++ b/geode-core/src/test/java/com/gemstone/gemfire/test/golden/FailWithWarningInOutputJUnitTest.java @@ -26,7 +26,6 @@ * Verifies that test output containing an unexpected warning message * will fail with that warning message as the failure message. * - * @author Kirk Lund */ @Category(IntegrationTest.class) public class FailWithWarningInOutputJUnitTest extends FailWithProblemInOutputTestCase { diff --git a/geode-core/src/test/java/com/gemstone/gemfire/test/golden/GoldenComparator.java b/geode-core/src/test/java/com/gemstone/gemfire/test/golden/GoldenComparator.java index e1c3f61e8f7b..357d5b2d1c96 100644 --- a/geode-core/src/test/java/com/gemstone/gemfire/test/golden/GoldenComparator.java +++ b/geode-core/src/test/java/com/gemstone/gemfire/test/golden/GoldenComparator.java @@ -32,7 +32,6 @@ /** * Compares test output to golden text file. * - * @author Kirk Lund * @since 4.1.1 */ public abstract class GoldenComparator { diff --git a/geode-core/src/test/java/com/gemstone/gemfire/test/golden/GoldenStringComparator.java b/geode-core/src/test/java/com/gemstone/gemfire/test/golden/GoldenStringComparator.java index 41932e6faa0b..8ff08c9c387f 100755 --- a/geode-core/src/test/java/com/gemstone/gemfire/test/golden/GoldenStringComparator.java +++ b/geode-core/src/test/java/com/gemstone/gemfire/test/golden/GoldenStringComparator.java @@ -24,7 +24,6 @@ * Custom GoldenComparator which returns the string of the golden file name * as the output for simple unit testing of the quickstart testing framework. * - * @author Kirk Lund */ public class GoldenStringComparator extends RegexGoldenComparator { diff --git a/geode-core/src/test/java/com/gemstone/gemfire/test/golden/GoldenTestCase.java b/geode-core/src/test/java/com/gemstone/gemfire/test/golden/GoldenTestCase.java index 334776f4240e..1a4099ef33f6 100644 --- a/geode-core/src/test/java/com/gemstone/gemfire/test/golden/GoldenTestCase.java +++ b/geode-core/src/test/java/com/gemstone/gemfire/test/golden/GoldenTestCase.java @@ -30,7 +30,6 @@ /** * Test framework for launching processes and comparing output to expected golden output. * - * @author Kirk Lund * @since 4.1.1 */ public abstract class GoldenTestCase { diff --git a/geode-core/src/test/java/com/gemstone/gemfire/test/golden/PassJUnitTest.java b/geode-core/src/test/java/com/gemstone/gemfire/test/golden/PassJUnitTest.java index c18598dc6c22..d02d6f725e0f 100755 --- a/geode-core/src/test/java/com/gemstone/gemfire/test/golden/PassJUnitTest.java +++ b/geode-core/src/test/java/com/gemstone/gemfire/test/golden/PassJUnitTest.java @@ -32,7 +32,6 @@ * Basic unit testing of the golden testing framework. This tests an * example which is expected to always pass. * - * @author Kirk Lund */ @Category(IntegrationTest.class) public class PassJUnitTest extends GoldenTestCase implements ExecutableProcess { diff --git a/geode-core/src/test/java/com/gemstone/gemfire/test/golden/PassWithExpectedErrorJUnitTest.java b/geode-core/src/test/java/com/gemstone/gemfire/test/golden/PassWithExpectedErrorJUnitTest.java index 8dcd8fa950db..90de5de34531 100755 --- a/geode-core/src/test/java/com/gemstone/gemfire/test/golden/PassWithExpectedErrorJUnitTest.java +++ b/geode-core/src/test/java/com/gemstone/gemfire/test/golden/PassWithExpectedErrorJUnitTest.java @@ -26,7 +26,6 @@ * Verifies that an example test should always pass even if the output contains * a error that is expected. * - * @author Kirk Lund */ @Category(IntegrationTest.class) public class PassWithExpectedErrorJUnitTest extends PassWithExpectedProblemTestCase { diff --git a/geode-core/src/test/java/com/gemstone/gemfire/test/golden/PassWithExpectedProblemTestCase.java b/geode-core/src/test/java/com/gemstone/gemfire/test/golden/PassWithExpectedProblemTestCase.java index 9a883d060b53..d17fe85978ae 100755 --- a/geode-core/src/test/java/com/gemstone/gemfire/test/golden/PassWithExpectedProblemTestCase.java +++ b/geode-core/src/test/java/com/gemstone/gemfire/test/golden/PassWithExpectedProblemTestCase.java @@ -28,7 +28,6 @@ * Abstract test case for golden testing framework. This provides basis for * unit tests which involve an example that is expected to always pass. * - * @author Kirk Lund */ public abstract class PassWithExpectedProblemTestCase extends GoldenTestCase implements ExecutableProcess { diff --git a/geode-core/src/test/java/com/gemstone/gemfire/test/golden/PassWithExpectedSevereJUnitTest.java b/geode-core/src/test/java/com/gemstone/gemfire/test/golden/PassWithExpectedSevereJUnitTest.java index 64819eb3cb9f..77b5d611532a 100755 --- a/geode-core/src/test/java/com/gemstone/gemfire/test/golden/PassWithExpectedSevereJUnitTest.java +++ b/geode-core/src/test/java/com/gemstone/gemfire/test/golden/PassWithExpectedSevereJUnitTest.java @@ -26,7 +26,6 @@ * Verifies that an example test should always pass even if the output contains * a severe that is expected. * - * @author Kirk Lund */ @Category(IntegrationTest.class) public class PassWithExpectedSevereJUnitTest extends PassWithExpectedProblemTestCase { diff --git a/geode-core/src/test/java/com/gemstone/gemfire/test/golden/PassWithExpectedWarningJUnitTest.java b/geode-core/src/test/java/com/gemstone/gemfire/test/golden/PassWithExpectedWarningJUnitTest.java index bd086bdc5f14..cae67af595f3 100755 --- a/geode-core/src/test/java/com/gemstone/gemfire/test/golden/PassWithExpectedWarningJUnitTest.java +++ b/geode-core/src/test/java/com/gemstone/gemfire/test/golden/PassWithExpectedWarningJUnitTest.java @@ -26,7 +26,6 @@ * Verifies that an example test should always pass even if the output contains * a warning that is expected. * - * @author Kirk Lund */ @Category(IntegrationTest.class) public class PassWithExpectedWarningJUnitTest extends PassWithExpectedProblemTestCase { diff --git a/geode-core/src/test/java/com/gemstone/gemfire/test/golden/RegexGoldenComparator.java b/geode-core/src/test/java/com/gemstone/gemfire/test/golden/RegexGoldenComparator.java index 7fcbcbfdcbca..94bfb8b38efd 100755 --- a/geode-core/src/test/java/com/gemstone/gemfire/test/golden/RegexGoldenComparator.java +++ b/geode-core/src/test/java/com/gemstone/gemfire/test/golden/RegexGoldenComparator.java @@ -21,7 +21,6 @@ /** * Compares test output to golden text file using regex pattern matching * - * @author Kirk Lund */ public class RegexGoldenComparator extends GoldenComparator { diff --git a/geode-core/src/test/java/com/gemstone/gemfire/test/golden/StringGoldenComparator.java b/geode-core/src/test/java/com/gemstone/gemfire/test/golden/StringGoldenComparator.java index 2559be67599e..34f5d832449b 100755 --- a/geode-core/src/test/java/com/gemstone/gemfire/test/golden/StringGoldenComparator.java +++ b/geode-core/src/test/java/com/gemstone/gemfire/test/golden/StringGoldenComparator.java @@ -19,7 +19,6 @@ /** * Compares test output to golden text file using string equality * - * @author Kirk Lund */ public class StringGoldenComparator extends GoldenComparator { diff --git a/geode-core/src/test/java/com/gemstone/gemfire/test/process/MainLauncher.java b/geode-core/src/test/java/com/gemstone/gemfire/test/process/MainLauncher.java index 0a57a027d0fa..40f3e445ee9a 100755 --- a/geode-core/src/test/java/com/gemstone/gemfire/test/process/MainLauncher.java +++ b/geode-core/src/test/java/com/gemstone/gemfire/test/process/MainLauncher.java @@ -25,7 +25,6 @@ * for one input. The purpose is to prevent race condition in which a process * may send output before the reader has started listening for that output. * - * @author Kirk Lund */ public class MainLauncher { public static void main(String... args) throws Exception { diff --git a/geode-core/src/test/java/com/gemstone/gemfire/test/process/MainLauncherJUnitTest.java b/geode-core/src/test/java/com/gemstone/gemfire/test/process/MainLauncherJUnitTest.java index 04e1a405b98c..15341c6f8788 100755 --- a/geode-core/src/test/java/com/gemstone/gemfire/test/process/MainLauncherJUnitTest.java +++ b/geode-core/src/test/java/com/gemstone/gemfire/test/process/MainLauncherJUnitTest.java @@ -38,7 +38,6 @@ /** * Quick sanity tests to make sure MainLauncher is functional. * - * @author Kirk Lund */ @Category(UnitTest.class) public class MainLauncherJUnitTest { diff --git a/geode-core/src/test/java/com/gemstone/gemfire/test/process/ProcessOutputReader.java b/geode-core/src/test/java/com/gemstone/gemfire/test/process/ProcessOutputReader.java index a2f02c4e8b83..59317ac8d04e 100755 --- a/geode-core/src/test/java/com/gemstone/gemfire/test/process/ProcessOutputReader.java +++ b/geode-core/src/test/java/com/gemstone/gemfire/test/process/ProcessOutputReader.java @@ -24,7 +24,6 @@ *

    * Extracted from ProcessWrapper. * - * @author Kirk Lund */ public class ProcessOutputReader { diff --git a/geode-core/src/test/java/com/gemstone/gemfire/test/process/ProcessStreamReader.java b/geode-core/src/test/java/com/gemstone/gemfire/test/process/ProcessStreamReader.java index de546b54ecdf..c01827a796e8 100755 --- a/geode-core/src/test/java/com/gemstone/gemfire/test/process/ProcessStreamReader.java +++ b/geode-core/src/test/java/com/gemstone/gemfire/test/process/ProcessStreamReader.java @@ -28,7 +28,6 @@ *

    * Extracted from ProcessWrapper. * - * @author Kirk Lund */ public class ProcessStreamReader extends Thread { diff --git a/geode-core/src/test/java/com/gemstone/gemfire/test/process/ProcessWrapper.java b/geode-core/src/test/java/com/gemstone/gemfire/test/process/ProcessWrapper.java index 67904bcfdc6d..ac8497600abe 100644 --- a/geode-core/src/test/java/com/gemstone/gemfire/test/process/ProcessWrapper.java +++ b/geode-core/src/test/java/com/gemstone/gemfire/test/process/ProcessWrapper.java @@ -41,7 +41,6 @@ /** * Wraps spawned {@link java.lang.Process} to capture output and provide interaction with the process. * - * @author Kirk Lund * @since 4.1.1 */ public class ProcessWrapper { diff --git a/geode-core/src/test/java/com/gemstone/gemfire/test/process/ProcessWrapperJUnitTest.java b/geode-core/src/test/java/com/gemstone/gemfire/test/process/ProcessWrapperJUnitTest.java index 368f9ecab41e..220b9f7ce174 100755 --- a/geode-core/src/test/java/com/gemstone/gemfire/test/process/ProcessWrapperJUnitTest.java +++ b/geode-core/src/test/java/com/gemstone/gemfire/test/process/ProcessWrapperJUnitTest.java @@ -27,7 +27,6 @@ /** * Integration tests for ProcessWrapper. * - * @author Kirk Lund */ @Category(IntegrationTest.class) public class ProcessWrapperJUnitTest { diff --git a/geode-core/src/test/java/com/gemstone/gemfire/util/JSR166TestCase.java b/geode-core/src/test/java/com/gemstone/gemfire/util/JSR166TestCase.java index a5b831015802..a4d8c1ada8c8 100755 --- a/geode-core/src/test/java/com/gemstone/gemfire/util/JSR166TestCase.java +++ b/geode-core/src/test/java/com/gemstone/gemfire/util/JSR166TestCase.java @@ -104,7 +104,6 @@ * * * - * @author Eric Zoerner * * @version Based on JSR166 TCK version 1.8 */ diff --git a/geode-core/src/test/java/com/gemstone/persistence/admin/Logger.java b/geode-core/src/test/java/com/gemstone/persistence/admin/Logger.java index 9fcacf7891a7..dbe8dac51d2f 100644 --- a/geode-core/src/test/java/com/gemstone/persistence/admin/Logger.java +++ b/geode-core/src/test/java/com/gemstone/persistence/admin/Logger.java @@ -25,7 +25,6 @@ * Currently this class only supports static methods and always * writes to stdout. * - * @author darrel */ public class Logger { diff --git a/geode-core/src/test/java/com/gemstone/sequence/LineMapper.java b/geode-core/src/test/java/com/gemstone/sequence/LineMapper.java index 7e0b96787a14..758329ff983b 100644 --- a/geode-core/src/test/java/com/gemstone/sequence/LineMapper.java +++ b/geode-core/src/test/java/com/gemstone/sequence/LineMapper.java @@ -23,7 +23,6 @@ * The most common case for this is that a lifeline represents a VM that is * restarted several times. Eg time, the line name changes, but we want to put * all of the states for that "logical" vm on the same line. - * @author dsmith * */ public interface LineMapper { diff --git a/geode-core/src/test/java/com/gemstone/sequence/gemfire/DefaultLineMapper.java b/geode-core/src/test/java/com/gemstone/sequence/gemfire/DefaultLineMapper.java index e2aa4c03a76e..576a48de5721 100644 --- a/geode-core/src/test/java/com/gemstone/sequence/gemfire/DefaultLineMapper.java +++ b/geode-core/src/test/java/com/gemstone/sequence/gemfire/DefaultLineMapper.java @@ -24,7 +24,6 @@ /** * A lifeline mapper that just returns a shortened version of * a member id. - * @author dsmith * */ public class DefaultLineMapper implements LineMapper { diff --git a/geode-core/src/test/java/com/gemstone/sequence/gemfire/GemfireSequenceDisplay.java b/geode-core/src/test/java/com/gemstone/sequence/gemfire/GemfireSequenceDisplay.java index 6481a30c75f6..0350ce65f924 100644 --- a/geode-core/src/test/java/com/gemstone/sequence/gemfire/GemfireSequenceDisplay.java +++ b/geode-core/src/test/java/com/gemstone/sequence/gemfire/GemfireSequenceDisplay.java @@ -31,7 +31,6 @@ import java.util.regex.Pattern; /** - * @author dsmith */ public class GemfireSequenceDisplay { diff --git a/geode-core/src/test/java/com/gemstone/sequence/gemfire/HydraLineMapper.java b/geode-core/src/test/java/com/gemstone/sequence/gemfire/HydraLineMapper.java index 59bf8e69bddf..4865d35abe36 100644 --- a/geode-core/src/test/java/com/gemstone/sequence/gemfire/HydraLineMapper.java +++ b/geode-core/src/test/java/com/gemstone/sequence/gemfire/HydraLineMapper.java @@ -30,7 +30,6 @@ import com.gemstone.sequence.LineMapper; /** - * @author dsmith * */ public class HydraLineMapper implements LineMapper { diff --git a/geode-core/src/test/java/com/main/MyDistributedSystemListener.java b/geode-core/src/test/java/com/main/MyDistributedSystemListener.java index a96a4e3fa589..bf9280a87bc0 100644 --- a/geode-core/src/test/java/com/main/MyDistributedSystemListener.java +++ b/geode-core/src/test/java/com/main/MyDistributedSystemListener.java @@ -35,7 +35,6 @@ * When a removedDistributedSystem is called, GatewaySender and GatewayReceiver * is stopped on site1 and site2 respectively. * - * @author kbachhav * */ public class MyDistributedSystemListener implements DistributedSystemListener { diff --git a/geode-core/src/test/java/com/main/WANBootStrapping_Site1_Add.java b/geode-core/src/test/java/com/main/WANBootStrapping_Site1_Add.java index 13dbc64cdfca..f2ef3eb69ce2 100644 --- a/geode-core/src/test/java/com/main/WANBootStrapping_Site1_Add.java +++ b/geode-core/src/test/java/com/main/WANBootStrapping_Site1_Add.java @@ -48,7 +48,6 @@ * MyDistributedSustemListener's removedDistributedSystem will be invoked who * will stop a GatewaySender.) * - * @author kbachhav * */ diff --git a/geode-core/src/test/java/com/main/WANBootStrapping_Site1_Remove.java b/geode-core/src/test/java/com/main/WANBootStrapping_Site1_Remove.java index f9aaf94e0f43..8ad17609de06 100644 --- a/geode-core/src/test/java/com/main/WANBootStrapping_Site1_Remove.java +++ b/geode-core/src/test/java/com/main/WANBootStrapping_Site1_Remove.java @@ -29,7 +29,6 @@ * is removed from site 2's locator and at the same time * MyDistributedSystemListener's removeDistributedSystem is invoked on site 2's locator which will stop the GatewayReceiver * - * @author kbachhav * */ public class WANBootStrapping_Site1_Remove { diff --git a/geode-core/src/test/java/com/main/WANBootStrapping_Site2_Add.java b/geode-core/src/test/java/com/main/WANBootStrapping_Site2_Add.java index bf96d99022a3..89ab366d3b60 100644 --- a/geode-core/src/test/java/com/main/WANBootStrapping_Site2_Add.java +++ b/geode-core/src/test/java/com/main/WANBootStrapping_Site2_Add.java @@ -45,7 +45,6 @@ * MyDistributedSustemListener's removedDistributedSystem will be invoked who * will stop a GatewayReceiver.) * - * @author kbachhav * */ diff --git a/geode-core/src/test/java/com/main/WANBootStrapping_Site2_Remove.java b/geode-core/src/test/java/com/main/WANBootStrapping_Site2_Remove.java index 385860e5947f..6f125b43982d 100644 --- a/geode-core/src/test/java/com/main/WANBootStrapping_Site2_Remove.java +++ b/geode-core/src/test/java/com/main/WANBootStrapping_Site2_Remove.java @@ -29,7 +29,6 @@ * is removed from site 1's locator and at the same time * MyDistributedSystemListener's removeDistributedSystem is invoked on site 1's locator which will stop the GatewaySender * - * @author kbachhav * */ diff --git a/geode-core/src/test/java/parReg/query/unittest/Position.java b/geode-core/src/test/java/parReg/query/unittest/Position.java index 9290d04a4e25..8cbb370cf493 100755 --- a/geode-core/src/test/java/parReg/query/unittest/Position.java +++ b/geode-core/src/test/java/parReg/query/unittest/Position.java @@ -31,7 +31,6 @@ * this class is Declarable, we can describe instances of * it in a GemFire cache.xml file. * - * @author GemStone Systems, Inc. * @since 4.0 */ public class Position implements Declarable, Serializable, Comparable { diff --git a/geode-core/src/test/java/security/AuthzCredentialGenerator.java b/geode-core/src/test/java/security/AuthzCredentialGenerator.java index e15a60a6a4b6..b32270de54ac 100644 --- a/geode-core/src/test/java/security/AuthzCredentialGenerator.java +++ b/geode-core/src/test/java/security/AuthzCredentialGenerator.java @@ -37,7 +37,6 @@ * operation in a region. Implementations will be for different kinds of * authorization scheme and authentication scheme combos. * - * @author sumedh * @since 5.5 */ public abstract class AuthzCredentialGenerator { @@ -74,7 +73,6 @@ public abstract class AuthzCredentialGenerator { * All dunit tests will automagically start testing the new implementation * after this. * - * @author sumedh * @since 5.5 */ public static final class ClassCode { diff --git a/geode-core/src/test/java/security/CredentialGenerator.java b/geode-core/src/test/java/security/CredentialGenerator.java index 7a430f16281f..14378b01c32a 100644 --- a/geode-core/src/test/java/security/CredentialGenerator.java +++ b/geode-core/src/test/java/security/CredentialGenerator.java @@ -36,7 +36,6 @@ * Encapsulates obtaining valid and invalid credentials. Implementations will be * for different kinds of authentication schemes. * - * @author sumedh * @since 5.5 */ public abstract class CredentialGenerator { @@ -65,7 +64,6 @@ public abstract class CredentialGenerator { * All security dunit tests will automagically start testing the new * implementation after this. * - * @author sumedh * @since 5.5 */ public static final class ClassCode { diff --git a/geode-core/src/test/java/security/PKCSCredentialGenerator.java b/geode-core/src/test/java/security/PKCSCredentialGenerator.java index 24c010008ded..f63942c1a197 100644 --- a/geode-core/src/test/java/security/PKCSCredentialGenerator.java +++ b/geode-core/src/test/java/security/PKCSCredentialGenerator.java @@ -31,7 +31,6 @@ import templates.security.PKCSAuthenticator; /** - * @author kneeraj * */ public class PKCSCredentialGenerator extends CredentialGenerator { diff --git a/geode-core/src/test/java/security/UserPasswordWithExtraPropsAuthInit.java b/geode-core/src/test/java/security/UserPasswordWithExtraPropsAuthInit.java index a41f73aecabe..6a3d6fb33ccd 100644 --- a/geode-core/src/test/java/security/UserPasswordWithExtraPropsAuthInit.java +++ b/geode-core/src/test/java/security/UserPasswordWithExtraPropsAuthInit.java @@ -36,7 +36,6 @@ * properties provided in getCredential props argument will also be * copied as new credentials. * - * @author Soubhik * @since 5.5 */ public class UserPasswordWithExtraPropsAuthInit extends UserPasswordAuthInit { diff --git a/geode-core/src/test/java/templates/security/DummyAuthenticator.java b/geode-core/src/test/java/templates/security/DummyAuthenticator.java index 5d33f22f90cf..2245427db00c 100644 --- a/geode-core/src/test/java/templates/security/DummyAuthenticator.java +++ b/geode-core/src/test/java/templates/security/DummyAuthenticator.java @@ -32,7 +32,6 @@ * user name and password allowing authentication depending on the format of the * user name. * - * @author Sumedh Wale * @since 5.5 */ public class DummyAuthenticator implements Authenticator { diff --git a/geode-core/src/test/java/templates/security/DummyAuthorization.java b/geode-core/src/test/java/templates/security/DummyAuthorization.java index fe8e908ef20d..b8ceb251373c 100644 --- a/geode-core/src/test/java/templates/security/DummyAuthorization.java +++ b/geode-core/src/test/java/templates/security/DummyAuthorization.java @@ -34,7 +34,6 @@ * allows authorization depending on the format of the Principal * string. * - * @author Sumedh Wale * @since 5.5 */ public class DummyAuthorization implements AccessControl { diff --git a/geode-core/src/test/java/templates/security/FunctionSecurityPrmsHolder.java b/geode-core/src/test/java/templates/security/FunctionSecurityPrmsHolder.java index 76827bb64495..f36598c89f5a 100755 --- a/geode-core/src/test/java/templates/security/FunctionSecurityPrmsHolder.java +++ b/geode-core/src/test/java/templates/security/FunctionSecurityPrmsHolder.java @@ -23,7 +23,6 @@ * This is a sample class for objects which hold information of the authorized * function names and authorized value for the optimizeForWrite. * - * @author Aneesh Karayil * @since 6.0 */ public class FunctionSecurityPrmsHolder { diff --git a/geode-core/src/test/java/templates/security/LdapUserAuthenticator.java b/geode-core/src/test/java/templates/security/LdapUserAuthenticator.java index db552191fdbd..cabfe3d9624f 100755 --- a/geode-core/src/test/java/templates/security/LdapUserAuthenticator.java +++ b/geode-core/src/test/java/templates/security/LdapUserAuthenticator.java @@ -29,7 +29,6 @@ import javax.naming.directory.InitialDirContext; /** - * @author Kumar Neeraj * @since 5.5 */ public class LdapUserAuthenticator implements Authenticator { diff --git a/geode-core/src/test/java/templates/security/PKCSAuthInit.java b/geode-core/src/test/java/templates/security/PKCSAuthInit.java index d43b78eab10b..2ff1b0d61232 100755 --- a/geode-core/src/test/java/templates/security/PKCSAuthInit.java +++ b/geode-core/src/test/java/templates/security/PKCSAuthInit.java @@ -39,7 +39,6 @@ * set to the fully qualified name the static create function * viz. templates.security.PKCSAuthInit.create * - * @author Kumar Neeraj * @since 5.5 */ public class PKCSAuthInit implements AuthInitialize { diff --git a/geode-core/src/test/java/templates/security/PKCSAuthenticator.java b/geode-core/src/test/java/templates/security/PKCSAuthenticator.java index d3610c4c385b..fbe84041e556 100755 --- a/geode-core/src/test/java/templates/security/PKCSAuthenticator.java +++ b/geode-core/src/test/java/templates/security/PKCSAuthenticator.java @@ -37,7 +37,6 @@ import java.util.Properties; /** - * @author kneeraj * */ public class PKCSAuthenticator implements Authenticator { diff --git a/geode-core/src/test/java/templates/security/PKCSPrincipal.java b/geode-core/src/test/java/templates/security/PKCSPrincipal.java index 563689bdb634..ad5840e99a42 100755 --- a/geode-core/src/test/java/templates/security/PKCSPrincipal.java +++ b/geode-core/src/test/java/templates/security/PKCSPrincipal.java @@ -20,7 +20,6 @@ import java.security.Principal; /** - * @author kneeraj * */ public class PKCSPrincipal implements Principal { diff --git a/geode-core/src/test/java/templates/security/UserPasswordAuthInit.java b/geode-core/src/test/java/templates/security/UserPasswordAuthInit.java index f4b6eeca93b7..783e773dfb27 100644 --- a/geode-core/src/test/java/templates/security/UserPasswordAuthInit.java +++ b/geode-core/src/test/java/templates/security/UserPasswordAuthInit.java @@ -32,7 +32,6 @@ * set to the fully qualified name the static create function * viz. templates.security.UserPasswordAuthInit.create * - * @author Sumedh Wale * @since 5.5 */ public class UserPasswordAuthInit implements AuthInitialize { diff --git a/geode-core/src/test/java/templates/security/UsernamePrincipal.java b/geode-core/src/test/java/templates/security/UsernamePrincipal.java index 739dd52ae5ae..d9d79b024a7d 100644 --- a/geode-core/src/test/java/templates/security/UsernamePrincipal.java +++ b/geode-core/src/test/java/templates/security/UsernamePrincipal.java @@ -23,7 +23,6 @@ /** * An implementation of {@link Principal} class for a simple user name. * - * @author Kumar Neeraj * @since 5.5 */ public class UsernamePrincipal implements Principal, Serializable { diff --git a/geode-core/src/test/java/templates/security/XmlAuthorization.java b/geode-core/src/test/java/templates/security/XmlAuthorization.java index 1ed014232b3f..2b4c3aa477f8 100644 --- a/geode-core/src/test/java/templates/security/XmlAuthorization.java +++ b/geode-core/src/test/java/templates/security/XmlAuthorization.java @@ -100,7 +100,6 @@ * not be used for post-operation authorization since it does nothing useful for * post-operation case. * - * @author Sumedh Wale * @since 5.5 */ public class XmlAuthorization implements AccessControl { diff --git a/geode-core/src/test/java/templates/security/XmlErrorHandler.java b/geode-core/src/test/java/templates/security/XmlErrorHandler.java index 5da8e09920f3..30b84e045c99 100644 --- a/geode-core/src/test/java/templates/security/XmlErrorHandler.java +++ b/geode-core/src/test/java/templates/security/XmlErrorHandler.java @@ -31,7 +31,6 @@ * fatalError cases while a {@link LogWriter#warning(String)} level * logging is done for the warning case. * - * @author Sumedh Wale * @since 5.5 */ public class XmlErrorHandler implements ErrorHandler { diff --git a/geode-cq/src/main/java/com/gemstone/gemfire/cache/client/internal/CloseCQOp.java b/geode-cq/src/main/java/com/gemstone/gemfire/cache/client/internal/CloseCQOp.java index d5e540a65b23..51597e73b0e6 100644 --- a/geode-cq/src/main/java/com/gemstone/gemfire/cache/client/internal/CloseCQOp.java +++ b/geode-cq/src/main/java/com/gemstone/gemfire/cache/client/internal/CloseCQOp.java @@ -24,7 +24,6 @@ /** * Close a continuous query on the server - * @author darrel * @since 5.7 */ public class CloseCQOp { diff --git a/geode-cq/src/main/java/com/gemstone/gemfire/cache/client/internal/CreateCQOp.java b/geode-cq/src/main/java/com/gemstone/gemfire/cache/client/internal/CreateCQOp.java index df297a8587d1..bca42d178ca5 100644 --- a/geode-cq/src/main/java/com/gemstone/gemfire/cache/client/internal/CreateCQOp.java +++ b/geode-cq/src/main/java/com/gemstone/gemfire/cache/client/internal/CreateCQOp.java @@ -31,7 +31,6 @@ /** * Creates a CQ on a server - * @author darrel * @since 5.7 */ public class CreateCQOp { diff --git a/geode-cq/src/main/java/com/gemstone/gemfire/cache/client/internal/CreateCQWithIROp.java b/geode-cq/src/main/java/com/gemstone/gemfire/cache/client/internal/CreateCQWithIROp.java index bd8c52a5434a..b227a0dbc03c 100644 --- a/geode-cq/src/main/java/com/gemstone/gemfire/cache/client/internal/CreateCQWithIROp.java +++ b/geode-cq/src/main/java/com/gemstone/gemfire/cache/client/internal/CreateCQWithIROp.java @@ -26,7 +26,6 @@ /** * Creates a CQ and fetches initial results on a server - * @author darrel * @since 5.7 */ public class CreateCQWithIROp { diff --git a/geode-cq/src/main/java/com/gemstone/gemfire/cache/client/internal/GetDurableCQsOp.java b/geode-cq/src/main/java/com/gemstone/gemfire/cache/client/internal/GetDurableCQsOp.java index 2c1ede067125..bf7e92b8d2dc 100755 --- a/geode-cq/src/main/java/com/gemstone/gemfire/cache/client/internal/GetDurableCQsOp.java +++ b/geode-cq/src/main/java/com/gemstone/gemfire/cache/client/internal/GetDurableCQsOp.java @@ -33,7 +33,6 @@ /** * Retrieves all durable cqs for a client from a server - * @author jhuynh * @since 7.0 */ public class GetDurableCQsOp { diff --git a/geode-cq/src/main/java/com/gemstone/gemfire/cache/client/internal/ServerCQProxyImpl.java b/geode-cq/src/main/java/com/gemstone/gemfire/cache/client/internal/ServerCQProxyImpl.java index d1f68922f103..f10eeb720a3f 100644 --- a/geode-cq/src/main/java/com/gemstone/gemfire/cache/client/internal/ServerCQProxyImpl.java +++ b/geode-cq/src/main/java/com/gemstone/gemfire/cache/client/internal/ServerCQProxyImpl.java @@ -24,7 +24,6 @@ /** * Used to send CQ operations from a client to a server - * @author darrel * @since 5.7 */ public class ServerCQProxyImpl extends ServerProxy { diff --git a/geode-cq/src/main/java/com/gemstone/gemfire/cache/client/internal/StopCQOp.java b/geode-cq/src/main/java/com/gemstone/gemfire/cache/client/internal/StopCQOp.java index 75b3e1e1811a..47b7d47da599 100644 --- a/geode-cq/src/main/java/com/gemstone/gemfire/cache/client/internal/StopCQOp.java +++ b/geode-cq/src/main/java/com/gemstone/gemfire/cache/client/internal/StopCQOp.java @@ -24,7 +24,6 @@ /** * Does a region query on a server - * @author darrel * @since 5.7 */ public class StopCQOp { diff --git a/geode-cq/src/main/java/com/gemstone/gemfire/cache/query/internal/cq/CqAttributesMutatorImpl.java b/geode-cq/src/main/java/com/gemstone/gemfire/cache/query/internal/cq/CqAttributesMutatorImpl.java index c991db8a56af..cf1f5459cf8f 100644 --- a/geode-cq/src/main/java/com/gemstone/gemfire/cache/query/internal/cq/CqAttributesMutatorImpl.java +++ b/geode-cq/src/main/java/com/gemstone/gemfire/cache/query/internal/cq/CqAttributesMutatorImpl.java @@ -25,7 +25,6 @@ * created. * The setter methods all return the previous value of the attribute. * - * @author anil * @since 5.5 */ public class CqAttributesMutatorImpl implements CqAttributesMutator { diff --git a/geode-cq/src/main/java/com/gemstone/gemfire/cache/query/internal/cq/CqConflatable.java b/geode-cq/src/main/java/com/gemstone/gemfire/cache/query/internal/cq/CqConflatable.java index f431343d6432..868e29e99648 100644 --- a/geode-cq/src/main/java/com/gemstone/gemfire/cache/query/internal/cq/CqConflatable.java +++ b/geode-cq/src/main/java/com/gemstone/gemfire/cache/query/internal/cq/CqConflatable.java @@ -26,7 +26,6 @@ * Implementing class for Conflatable interface. Objects of this * class will be add to the queue * - * @author Dinesh Patel * */ public class CqConflatable implements Conflatable, Serializable diff --git a/geode-cq/src/main/java/com/gemstone/gemfire/cache/query/internal/cq/CqEventImpl.java b/geode-cq/src/main/java/com/gemstone/gemfire/cache/query/internal/cq/CqEventImpl.java index bcd3cad4b3e4..d710e61fcdcb 100644 --- a/geode-cq/src/main/java/com/gemstone/gemfire/cache/query/internal/cq/CqEventImpl.java +++ b/geode-cq/src/main/java/com/gemstone/gemfire/cache/query/internal/cq/CqEventImpl.java @@ -21,7 +21,6 @@ * Interface for CqEvent. Offers methods to get information from * CqEvent. * - * @author anil * @since 5.5 */ diff --git a/geode-cq/src/main/java/com/gemstone/gemfire/cache/query/internal/cq/CqListenerImpl.java b/geode-cq/src/main/java/com/gemstone/gemfire/cache/query/internal/cq/CqListenerImpl.java index 65281f601dd8..3d132c4cb2f5 100644 --- a/geode-cq/src/main/java/com/gemstone/gemfire/cache/query/internal/cq/CqListenerImpl.java +++ b/geode-cq/src/main/java/com/gemstone/gemfire/cache/query/internal/cq/CqListenerImpl.java @@ -24,7 +24,6 @@ * CqListener class, implements CqListener interface methods. * Offers callback methods for the CqQuery. * - * @author anil * @since 5.5 */ public class CqListenerImpl implements CqListener { diff --git a/geode-cq/src/main/java/com/gemstone/gemfire/cache/query/internal/cq/CqQueryImpl.java b/geode-cq/src/main/java/com/gemstone/gemfire/cache/query/internal/cq/CqQueryImpl.java index d8daa2a525a3..32ea02f5ffbf 100644 --- a/geode-cq/src/main/java/com/gemstone/gemfire/cache/query/internal/cq/CqQueryImpl.java +++ b/geode-cq/src/main/java/com/gemstone/gemfire/cache/query/internal/cq/CqQueryImpl.java @@ -48,8 +48,6 @@ import com.gemstone.gemfire.i18n.StringId; /** - * @author rmadduri - * @author anil * @since 5.5 * Represents the CqQuery object. Implements CqQuery API and CqAttributeMutator. * diff --git a/geode-cq/src/main/java/com/gemstone/gemfire/cache/query/internal/cq/CqServiceImpl.java b/geode-cq/src/main/java/com/gemstone/gemfire/cache/query/internal/cq/CqServiceImpl.java index 21d8ff5a6652..05e062c35621 100644 --- a/geode-cq/src/main/java/com/gemstone/gemfire/cache/query/internal/cq/CqServiceImpl.java +++ b/geode-cq/src/main/java/com/gemstone/gemfire/cache/query/internal/cq/CqServiceImpl.java @@ -79,14 +79,12 @@ import com.gemstone.gemfire.i18n.StringId; /** - * @author Rao Madduri * @since 5.5 * * Implements the CqService functionality. * */ /** - * @author agingade * */ public final class CqServiceImpl implements CqService { diff --git a/geode-cq/src/main/java/com/gemstone/gemfire/cache/query/internal/cq/CqServiceStatisticsImpl.java b/geode-cq/src/main/java/com/gemstone/gemfire/cache/query/internal/cq/CqServiceStatisticsImpl.java index a66eec7f5b75..86a37e250e18 100644 --- a/geode-cq/src/main/java/com/gemstone/gemfire/cache/query/internal/cq/CqServiceStatisticsImpl.java +++ b/geode-cq/src/main/java/com/gemstone/gemfire/cache/query/internal/cq/CqServiceStatisticsImpl.java @@ -26,7 +26,6 @@ * Provides statistical information about CqService. * * @since 5.5 - * @author anil */ public class CqServiceStatisticsImpl implements CqServiceStatistics { private CqServiceImpl cqService; diff --git a/geode-cq/src/main/java/com/gemstone/gemfire/cache/query/internal/cq/CqServiceVsdStats.java b/geode-cq/src/main/java/com/gemstone/gemfire/cache/query/internal/cq/CqServiceVsdStats.java index a2e8b6e55202..dad55ffb322d 100644 --- a/geode-cq/src/main/java/com/gemstone/gemfire/cache/query/internal/cq/CqServiceVsdStats.java +++ b/geode-cq/src/main/java/com/gemstone/gemfire/cache/query/internal/cq/CqServiceVsdStats.java @@ -43,7 +43,6 @@ * Number of CQs closed * Number of CQs on a client * - * @author Rao Madduri * @since 5.5 */ public class CqServiceVsdStats diff --git a/geode-cq/src/main/java/com/gemstone/gemfire/cache/query/internal/cq/CqStatisticsImpl.java b/geode-cq/src/main/java/com/gemstone/gemfire/cache/query/internal/cq/CqStatisticsImpl.java index 0792061e1ebc..4448c2f1af1c 100644 --- a/geode-cq/src/main/java/com/gemstone/gemfire/cache/query/internal/cq/CqStatisticsImpl.java +++ b/geode-cq/src/main/java/com/gemstone/gemfire/cache/query/internal/cq/CqStatisticsImpl.java @@ -22,7 +22,6 @@ * Provides statistical information about a CqQuery. * * @since 5.5 - * @author Rao Madduri */ public class CqStatisticsImpl implements CqStatistics { private CqQueryImpl cqQuery; diff --git a/geode-cq/src/main/java/com/gemstone/gemfire/internal/cache/tier/sockets/command/ExecuteCQ61.java b/geode-cq/src/main/java/com/gemstone/gemfire/internal/cache/tier/sockets/command/ExecuteCQ61.java index d30832a192b3..b3556f1b9108 100755 --- a/geode-cq/src/main/java/com/gemstone/gemfire/internal/cache/tier/sockets/command/ExecuteCQ61.java +++ b/geode-cq/src/main/java/com/gemstone/gemfire/internal/cache/tier/sockets/command/ExecuteCQ61.java @@ -50,7 +50,6 @@ /** - * @author aingle * @since 6.1 */ diff --git a/geode-cq/src/test/java/com/gemstone/gemfire/cache/query/cq/dunit/CqDataDUnitTest.java b/geode-cq/src/test/java/com/gemstone/gemfire/cache/query/cq/dunit/CqDataDUnitTest.java index ebc6f530e098..1d08f740ed0c 100644 --- a/geode-cq/src/test/java/com/gemstone/gemfire/cache/query/cq/dunit/CqDataDUnitTest.java +++ b/geode-cq/src/test/java/com/gemstone/gemfire/cache/query/cq/dunit/CqDataDUnitTest.java @@ -54,7 +54,6 @@ * This class tests the ContiunousQuery mechanism in GemFire. * This includes the test with different data activities. * - * @author anil */ public class CqDataDUnitTest extends CacheTestCase { @@ -319,7 +318,6 @@ public void run2() throws CacheException * events then there should be. This will test the fix for * bug 37295. * - * @author rdubey */ public void testCQWithMultipleClients() throws Exception { diff --git a/geode-cq/src/test/java/com/gemstone/gemfire/cache/query/cq/dunit/CqDataUsingPoolDUnitTest.java b/geode-cq/src/test/java/com/gemstone/gemfire/cache/query/cq/dunit/CqDataUsingPoolDUnitTest.java index a329a2b5be17..28eeec7dc432 100644 --- a/geode-cq/src/test/java/com/gemstone/gemfire/cache/query/cq/dunit/CqDataUsingPoolDUnitTest.java +++ b/geode-cq/src/test/java/com/gemstone/gemfire/cache/query/cq/dunit/CqDataUsingPoolDUnitTest.java @@ -73,7 +73,6 @@ * This class tests the ContiunousQuery mechanism in GemFire. * This includes the test with different data activities. * - * @author anil */ public class CqDataUsingPoolDUnitTest extends CacheTestCase { @@ -344,7 +343,6 @@ public void run2() throws CacheException * events then there should be. This will test the fix for * bug 37295. * - * @author rdubey */ public void testCQWithMultipleClients() throws Exception { diff --git a/geode-cq/src/test/java/com/gemstone/gemfire/cache/query/cq/dunit/CqPerfDUnitTest.java b/geode-cq/src/test/java/com/gemstone/gemfire/cache/query/cq/dunit/CqPerfDUnitTest.java index 97035f0cdac0..a52ef0488474 100644 --- a/geode-cq/src/test/java/com/gemstone/gemfire/cache/query/cq/dunit/CqPerfDUnitTest.java +++ b/geode-cq/src/test/java/com/gemstone/gemfire/cache/query/cq/dunit/CqPerfDUnitTest.java @@ -48,7 +48,6 @@ * This class tests the ContiunousQuery mechanism in GemFire. * This includes the test with diffetent data activities. * - * @author anil */ public class CqPerfDUnitTest extends CacheTestCase { diff --git a/geode-cq/src/test/java/com/gemstone/gemfire/cache/query/cq/dunit/CqPerfUsingPoolDUnitTest.java b/geode-cq/src/test/java/com/gemstone/gemfire/cache/query/cq/dunit/CqPerfUsingPoolDUnitTest.java index e63188643f42..f6d9d49a2ec6 100644 --- a/geode-cq/src/test/java/com/gemstone/gemfire/cache/query/cq/dunit/CqPerfUsingPoolDUnitTest.java +++ b/geode-cq/src/test/java/com/gemstone/gemfire/cache/query/cq/dunit/CqPerfUsingPoolDUnitTest.java @@ -48,7 +48,6 @@ * This class tests the ContiunousQuery mechanism in GemFire. * This includes the test with diffetent data activities. * - * @author anil */ public class CqPerfUsingPoolDUnitTest extends CacheTestCase { diff --git a/geode-cq/src/test/java/com/gemstone/gemfire/cache/query/cq/dunit/CqQueryDUnitTest.java b/geode-cq/src/test/java/com/gemstone/gemfire/cache/query/cq/dunit/CqQueryDUnitTest.java index 973039533f91..cd32cd9deb65 100644 --- a/geode-cq/src/test/java/com/gemstone/gemfire/cache/query/cq/dunit/CqQueryDUnitTest.java +++ b/geode-cq/src/test/java/com/gemstone/gemfire/cache/query/cq/dunit/CqQueryDUnitTest.java @@ -80,7 +80,6 @@ * a data loader. The client creates the same region and attaches the connection pool. * * - * @author anil */ @SuppressWarnings("serial") public class CqQueryDUnitTest extends CacheTestCase { diff --git a/geode-cq/src/test/java/com/gemstone/gemfire/cache/query/cq/dunit/CqQueryUsingPoolDUnitTest.java b/geode-cq/src/test/java/com/gemstone/gemfire/cache/query/cq/dunit/CqQueryUsingPoolDUnitTest.java index 680112b45166..16b834f1e421 100644 --- a/geode-cq/src/test/java/com/gemstone/gemfire/cache/query/cq/dunit/CqQueryUsingPoolDUnitTest.java +++ b/geode-cq/src/test/java/com/gemstone/gemfire/cache/query/cq/dunit/CqQueryUsingPoolDUnitTest.java @@ -83,7 +83,6 @@ * a data loader. The client creates the same region and attaches the connection pool. * * - * @author anil */ public class CqQueryUsingPoolDUnitTest extends CacheTestCase { diff --git a/geode-cq/src/test/java/com/gemstone/gemfire/cache/query/cq/dunit/CqResultSetUsingPoolDUnitTest.java b/geode-cq/src/test/java/com/gemstone/gemfire/cache/query/cq/dunit/CqResultSetUsingPoolDUnitTest.java index 35cef9d36081..f3a7b20de18c 100644 --- a/geode-cq/src/test/java/com/gemstone/gemfire/cache/query/cq/dunit/CqResultSetUsingPoolDUnitTest.java +++ b/geode-cq/src/test/java/com/gemstone/gemfire/cache/query/cq/dunit/CqResultSetUsingPoolDUnitTest.java @@ -44,7 +44,6 @@ /** * This class tests the ContiunousQuery mechanism in GemFire. * - * @author anil */ public class CqResultSetUsingPoolDUnitTest extends CacheTestCase { diff --git a/geode-cq/src/test/java/com/gemstone/gemfire/cache/query/cq/dunit/CqStatsDUnitTest.java b/geode-cq/src/test/java/com/gemstone/gemfire/cache/query/cq/dunit/CqStatsDUnitTest.java index 6afdaecfa7e6..360c76b418d2 100644 --- a/geode-cq/src/test/java/com/gemstone/gemfire/cache/query/cq/dunit/CqStatsDUnitTest.java +++ b/geode-cq/src/test/java/com/gemstone/gemfire/cache/query/cq/dunit/CqStatsDUnitTest.java @@ -46,7 +46,6 @@ * This class tests the ContiunousQuery mechanism in GemFire. * This includes the test with different data activities. * - * @author Rao */ public class CqStatsDUnitTest extends CacheTestCase { diff --git a/geode-cq/src/test/java/com/gemstone/gemfire/cache/query/cq/dunit/CqStatsUsingPoolDUnitTest.java b/geode-cq/src/test/java/com/gemstone/gemfire/cache/query/cq/dunit/CqStatsUsingPoolDUnitTest.java index 04e9b421e07c..d7f867bac2da 100644 --- a/geode-cq/src/test/java/com/gemstone/gemfire/cache/query/cq/dunit/CqStatsUsingPoolDUnitTest.java +++ b/geode-cq/src/test/java/com/gemstone/gemfire/cache/query/cq/dunit/CqStatsUsingPoolDUnitTest.java @@ -46,7 +46,6 @@ * This class tests the ContiunousQuery mechanism in GemFire. * This includes the test with different data activities. * - * @author Rao */ public class CqStatsUsingPoolDUnitTest extends CacheTestCase { diff --git a/geode-cq/src/test/java/com/gemstone/gemfire/cache/query/cq/dunit/CqTimeTestListener.java b/geode-cq/src/test/java/com/gemstone/gemfire/cache/query/cq/dunit/CqTimeTestListener.java index 4edc4a8cbfc4..255d464a6316 100644 --- a/geode-cq/src/test/java/com/gemstone/gemfire/cache/query/cq/dunit/CqTimeTestListener.java +++ b/geode-cq/src/test/java/com/gemstone/gemfire/cache/query/cq/dunit/CqTimeTestListener.java @@ -29,7 +29,6 @@ import com.gemstone.gemfire.test.dunit.WaitCriterion; /** - * @author anil. * */ public class CqTimeTestListener implements CqListener { diff --git a/geode-cq/src/test/java/com/gemstone/gemfire/cache/query/cq/dunit/PartitionedRegionCqQueryDUnitTest.java b/geode-cq/src/test/java/com/gemstone/gemfire/cache/query/cq/dunit/PartitionedRegionCqQueryDUnitTest.java index 936311744361..5e4dd3dfdae9 100644 --- a/geode-cq/src/test/java/com/gemstone/gemfire/cache/query/cq/dunit/PartitionedRegionCqQueryDUnitTest.java +++ b/geode-cq/src/test/java/com/gemstone/gemfire/cache/query/cq/dunit/PartitionedRegionCqQueryDUnitTest.java @@ -56,7 +56,6 @@ /** * Test class for Partitioned Region and CQs * - * @author rdubey * @since 5.5 */ public class PartitionedRegionCqQueryDUnitTest extends CacheTestCase { diff --git a/geode-cq/src/test/java/com/gemstone/gemfire/cache/query/cq/dunit/PrCqUsingPoolDUnitTest.java b/geode-cq/src/test/java/com/gemstone/gemfire/cache/query/cq/dunit/PrCqUsingPoolDUnitTest.java index a443641799fa..8d4477ff6401 100644 --- a/geode-cq/src/test/java/com/gemstone/gemfire/cache/query/cq/dunit/PrCqUsingPoolDUnitTest.java +++ b/geode-cq/src/test/java/com/gemstone/gemfire/cache/query/cq/dunit/PrCqUsingPoolDUnitTest.java @@ -52,7 +52,6 @@ /** * Test class for Partitioned Region and CQs * - * @author rdubey * @since 5.5 */ public class PrCqUsingPoolDUnitTest extends CacheTestCase { diff --git a/geode-cq/src/test/java/com/gemstone/gemfire/cache/query/dunit/QueryIndexUpdateRIDUnitTest.java b/geode-cq/src/test/java/com/gemstone/gemfire/cache/query/dunit/QueryIndexUpdateRIDUnitTest.java index 2662120f76fe..e4904caad1d9 100644 --- a/geode-cq/src/test/java/com/gemstone/gemfire/cache/query/dunit/QueryIndexUpdateRIDUnitTest.java +++ b/geode-cq/src/test/java/com/gemstone/gemfire/cache/query/dunit/QueryIndexUpdateRIDUnitTest.java @@ -57,7 +57,6 @@ * Then client run a query on region in local cache (Not on server) using the * Index. * - * @author shoagarwal * */ public class QueryIndexUpdateRIDUnitTest extends CacheTestCase{ diff --git a/geode-cq/src/test/java/com/gemstone/gemfire/cache/query/dunit/QueryMonitorDUnitTest.java b/geode-cq/src/test/java/com/gemstone/gemfire/cache/query/dunit/QueryMonitorDUnitTest.java index 8008c3a202e8..61bfff84409e 100644 --- a/geode-cq/src/test/java/com/gemstone/gemfire/cache/query/dunit/QueryMonitorDUnitTest.java +++ b/geode-cq/src/test/java/com/gemstone/gemfire/cache/query/dunit/QueryMonitorDUnitTest.java @@ -61,7 +61,6 @@ /** * Tests for QueryMonitoring service. - * @author agingade * @since 6.0 */ public class QueryMonitorDUnitTest extends CacheTestCase { diff --git a/geode-cq/src/test/java/com/gemstone/gemfire/internal/cache/PutAllCSDUnitTest.java b/geode-cq/src/test/java/com/gemstone/gemfire/internal/cache/PutAllCSDUnitTest.java index cc5876fb1f4a..1103e1073b90 100644 --- a/geode-cq/src/test/java/com/gemstone/gemfire/internal/cache/PutAllCSDUnitTest.java +++ b/geode-cq/src/test/java/com/gemstone/gemfire/internal/cache/PutAllCSDUnitTest.java @@ -92,7 +92,6 @@ /** * Tests putAll for c/s. Also tests removeAll * - * @author Gester Zhou * @since 5.0.23 */ @SuppressWarnings("serial") diff --git a/geode-cq/src/test/java/com/gemstone/gemfire/internal/cache/RemoteCQTransactionDUnitTest.java b/geode-cq/src/test/java/com/gemstone/gemfire/internal/cache/RemoteCQTransactionDUnitTest.java index 4bca2c445e3d..f2a3e4669221 100755 --- a/geode-cq/src/test/java/com/gemstone/gemfire/internal/cache/RemoteCQTransactionDUnitTest.java +++ b/geode-cq/src/test/java/com/gemstone/gemfire/internal/cache/RemoteCQTransactionDUnitTest.java @@ -78,7 +78,6 @@ import com.gemstone.gemfire.test.dunit.WaitCriterion; /** - * @author sbawaska * */ public class RemoteCQTransactionDUnitTest extends CacheTestCase { diff --git a/geode-cq/src/test/java/com/gemstone/gemfire/internal/cache/ha/HADispatcherDUnitTest.java b/geode-cq/src/test/java/com/gemstone/gemfire/internal/cache/ha/HADispatcherDUnitTest.java index d74f3ff93804..aac8f0caa8a0 100755 --- a/geode-cq/src/test/java/com/gemstone/gemfire/internal/cache/ha/HADispatcherDUnitTest.java +++ b/geode-cq/src/test/java/com/gemstone/gemfire/internal/cache/ha/HADispatcherDUnitTest.java @@ -77,7 +77,6 @@ * 8. close client1 and client2 * 9. close server1 and server2 * - * @author Girish Thombare */ public class HADispatcherDUnitTest extends DistributedTestCase diff --git a/geode-cq/src/test/java/com/gemstone/gemfire/internal/cache/tier/sockets/ClientToServerDeltaDUnitTest.java b/geode-cq/src/test/java/com/gemstone/gemfire/internal/cache/tier/sockets/ClientToServerDeltaDUnitTest.java index 0e589e463208..e823d56c680a 100755 --- a/geode-cq/src/test/java/com/gemstone/gemfire/internal/cache/tier/sockets/ClientToServerDeltaDUnitTest.java +++ b/geode-cq/src/test/java/com/gemstone/gemfire/internal/cache/tier/sockets/ClientToServerDeltaDUnitTest.java @@ -60,7 +60,6 @@ /** * Test client to server flow for delta propogation * - * @author aingle * @since 6.1 */ public class ClientToServerDeltaDUnitTest extends DistributedTestCase { diff --git a/geode-cq/src/test/java/com/gemstone/gemfire/internal/cache/tier/sockets/DeltaPropagationWithCQDUnitTest.java b/geode-cq/src/test/java/com/gemstone/gemfire/internal/cache/tier/sockets/DeltaPropagationWithCQDUnitTest.java index 7316e0c067b9..689d168a6ee8 100644 --- a/geode-cq/src/test/java/com/gemstone/gemfire/internal/cache/tier/sockets/DeltaPropagationWithCQDUnitTest.java +++ b/geode-cq/src/test/java/com/gemstone/gemfire/internal/cache/tier/sockets/DeltaPropagationWithCQDUnitTest.java @@ -60,7 +60,6 @@ import com.gemstone.gemfire.test.dunit.WaitCriterion; /** - * @author ashetkar * */ public class DeltaPropagationWithCQDUnitTest extends DistributedTestCase { diff --git a/geode-cq/src/test/java/com/gemstone/gemfire/internal/cache/tier/sockets/DeltaToRegionRelationCQRegistrationDUnitTest.java b/geode-cq/src/test/java/com/gemstone/gemfire/internal/cache/tier/sockets/DeltaToRegionRelationCQRegistrationDUnitTest.java index 824f2e7d392f..c89847de0cf3 100755 --- a/geode-cq/src/test/java/com/gemstone/gemfire/internal/cache/tier/sockets/DeltaToRegionRelationCQRegistrationDUnitTest.java +++ b/geode-cq/src/test/java/com/gemstone/gemfire/internal/cache/tier/sockets/DeltaToRegionRelationCQRegistrationDUnitTest.java @@ -53,7 +53,6 @@ * This tests the flag setting for region ( DataPolicy as Empty ) for * Delta propogation for a client while registering CQ * - * @author aingle */ public class DeltaToRegionRelationCQRegistrationDUnitTest extends DistributedTestCase { private static Cache cache = null; diff --git a/geode-cq/src/test/java/com/gemstone/gemfire/internal/cache/tier/sockets/DurableClientCrashDUnitTest.java b/geode-cq/src/test/java/com/gemstone/gemfire/internal/cache/tier/sockets/DurableClientCrashDUnitTest.java index dce35bf8806e..57912d06ae10 100755 --- a/geode-cq/src/test/java/com/gemstone/gemfire/internal/cache/tier/sockets/DurableClientCrashDUnitTest.java +++ b/geode-cq/src/test/java/com/gemstone/gemfire/internal/cache/tier/sockets/DurableClientCrashDUnitTest.java @@ -23,7 +23,6 @@ * Class DurableClientCrashDUnitTest tests durable client * functionality when clients crash. * - * @author Abhijit Bhaware * * @since 5.2 */ diff --git a/geode-cq/src/test/java/com/gemstone/gemfire/internal/cache/tier/sockets/DurableClientNetDownDUnitTest.java b/geode-cq/src/test/java/com/gemstone/gemfire/internal/cache/tier/sockets/DurableClientNetDownDUnitTest.java index 9fa4b6b2241d..a087386f4364 100644 --- a/geode-cq/src/test/java/com/gemstone/gemfire/internal/cache/tier/sockets/DurableClientNetDownDUnitTest.java +++ b/geode-cq/src/test/java/com/gemstone/gemfire/internal/cache/tier/sockets/DurableClientNetDownDUnitTest.java @@ -21,7 +21,6 @@ * Class DurableClientCrashDUnitTest tests durable client * functionality when clients are disconnected from servers. * - * @author Abhijit Bhaware * * @since 5.2 */ diff --git a/geode-cq/src/test/java/com/gemstone/gemfire/internal/cache/tier/sockets/DurableClientTestCase.java b/geode-cq/src/test/java/com/gemstone/gemfire/internal/cache/tier/sockets/DurableClientTestCase.java index 1fc2e9f5a23a..67291dd9ebc0 100755 --- a/geode-cq/src/test/java/com/gemstone/gemfire/internal/cache/tier/sockets/DurableClientTestCase.java +++ b/geode-cq/src/test/java/com/gemstone/gemfire/internal/cache/tier/sockets/DurableClientTestCase.java @@ -74,7 +74,6 @@ * Class DurableClientTestCase tests durable client * functionality. * - * @author Barry Oglesby * * @since 5.2 */ diff --git a/geode-cq/src/test/java/com/gemstone/gemfire/management/CacheServerManagementDUnitTest.java b/geode-cq/src/test/java/com/gemstone/gemfire/management/CacheServerManagementDUnitTest.java index 64bbe0cf13fa..edc780b2b6ce 100644 --- a/geode-cq/src/test/java/com/gemstone/gemfire/management/CacheServerManagementDUnitTest.java +++ b/geode-cq/src/test/java/com/gemstone/gemfire/management/CacheServerManagementDUnitTest.java @@ -61,7 +61,6 @@ /** * Cache Server related management test cases * - * @author rishim * */ public class CacheServerManagementDUnitTest extends LocatorTestBase { @@ -557,7 +556,6 @@ public void run() { /** * Notification handler * - * @author rishim * */ private static class TestCacheServerNotif implements diff --git a/geode-cq/src/test/java/com/gemstone/gemfire/management/internal/cli/commands/ClientCommandsDUnitTest.java b/geode-cq/src/test/java/com/gemstone/gemfire/management/internal/cli/commands/ClientCommandsDUnitTest.java index 12b11e3870aa..fee5828097bb 100644 --- a/geode-cq/src/test/java/com/gemstone/gemfire/management/internal/cli/commands/ClientCommandsDUnitTest.java +++ b/geode-cq/src/test/java/com/gemstone/gemfire/management/internal/cli/commands/ClientCommandsDUnitTest.java @@ -76,7 +76,6 @@ /** * Dunit class for testing gemfire Client commands : list client , describe client - * @author ajayp * @since 8.0 */ diff --git a/geode-cq/src/test/java/com/gemstone/gemfire/management/internal/pulse/TestCQDUnitTest.java b/geode-cq/src/test/java/com/gemstone/gemfire/management/internal/pulse/TestCQDUnitTest.java index a8dcf59ed618..3716671109b1 100644 --- a/geode-cq/src/test/java/com/gemstone/gemfire/management/internal/pulse/TestCQDUnitTest.java +++ b/geode-cq/src/test/java/com/gemstone/gemfire/management/internal/pulse/TestCQDUnitTest.java @@ -29,7 +29,6 @@ /** * This is for testing continuous query. - * @author ajayp * */ diff --git a/geode-cq/src/test/java/com/gemstone/gemfire/management/internal/pulse/TestClientsDUnitTest.java b/geode-cq/src/test/java/com/gemstone/gemfire/management/internal/pulse/TestClientsDUnitTest.java index 5decf7da0584..24affd163ac8 100644 --- a/geode-cq/src/test/java/com/gemstone/gemfire/management/internal/pulse/TestClientsDUnitTest.java +++ b/geode-cq/src/test/java/com/gemstone/gemfire/management/internal/pulse/TestClientsDUnitTest.java @@ -31,7 +31,6 @@ * This is for testing Number of clients and can be extended for relevant test * addition * - * @author ajayp * */ diff --git a/geode-cq/src/test/java/com/gemstone/gemfire/management/internal/pulse/TestServerDUnitTest.java b/geode-cq/src/test/java/com/gemstone/gemfire/management/internal/pulse/TestServerDUnitTest.java index e6329937840e..c966a0fb3bf7 100644 --- a/geode-cq/src/test/java/com/gemstone/gemfire/management/internal/pulse/TestServerDUnitTest.java +++ b/geode-cq/src/test/java/com/gemstone/gemfire/management/internal/pulse/TestServerDUnitTest.java @@ -28,7 +28,6 @@ /** * This is for testing server count details from MBean - * @author ajayp * */ diff --git a/geode-cq/src/test/java/com/gemstone/gemfire/security/ClientAuthorizationTwoDUnitTest.java b/geode-cq/src/test/java/com/gemstone/gemfire/security/ClientAuthorizationTwoDUnitTest.java index 9910c8a1bb92..f79667965866 100644 --- a/geode-cq/src/test/java/com/gemstone/gemfire/security/ClientAuthorizationTwoDUnitTest.java +++ b/geode-cq/src/test/java/com/gemstone/gemfire/security/ClientAuthorizationTwoDUnitTest.java @@ -29,7 +29,6 @@ * This is the second part of the test which had become long enough to * occasionally go beyond the 10min limit. * - * @author sumedh * @since 5.5 */ public class ClientAuthorizationTwoDUnitTest extends diff --git a/geode-cq/src/test/java/com/gemstone/gemfire/security/ClientAuthzObjectModDUnitTest.java b/geode-cq/src/test/java/com/gemstone/gemfire/security/ClientAuthzObjectModDUnitTest.java index 344c977f026a..844db2c94e59 100644 --- a/geode-cq/src/test/java/com/gemstone/gemfire/security/ClientAuthzObjectModDUnitTest.java +++ b/geode-cq/src/test/java/com/gemstone/gemfire/security/ClientAuthzObjectModDUnitTest.java @@ -51,7 +51,6 @@ * This enables testing of object and callback modification both in * pre-processing and post-processing phases. * - * @author sumedh * @since 5.5 */ public class ClientAuthzObjectModDUnitTest extends ClientAuthorizationTestBase { diff --git a/geode-cq/src/test/java/com/gemstone/gemfire/security/ClientCQPostAuthorizationDUnitTest.java b/geode-cq/src/test/java/com/gemstone/gemfire/security/ClientCQPostAuthorizationDUnitTest.java index 0cb125feb244..69893e12f3bd 100644 --- a/geode-cq/src/test/java/com/gemstone/gemfire/security/ClientCQPostAuthorizationDUnitTest.java +++ b/geode-cq/src/test/java/com/gemstone/gemfire/security/ClientCQPostAuthorizationDUnitTest.java @@ -51,7 +51,6 @@ /** * This is for multiuser-authentication * - * @author ashetkar * */ public class ClientCQPostAuthorizationDUnitTest extends diff --git a/geode-cq/src/test/java/com/gemstone/gemfire/security/ClientPostAuthorizationDUnitTest.java b/geode-cq/src/test/java/com/gemstone/gemfire/security/ClientPostAuthorizationDUnitTest.java index 62bff2b9beda..9d5480943a6e 100644 --- a/geode-cq/src/test/java/com/gemstone/gemfire/security/ClientPostAuthorizationDUnitTest.java +++ b/geode-cq/src/test/java/com/gemstone/gemfire/security/ClientPostAuthorizationDUnitTest.java @@ -34,7 +34,6 @@ * with post-process callbacks in case return values of operations and for * notifications along-with failover. * - * @author sumedh * @since 5.5 */ public class ClientPostAuthorizationDUnitTest extends diff --git a/geode-cq/src/test/java/com/gemstone/gemfire/security/MultiuserDurableCQAuthzDUnitTest.java b/geode-cq/src/test/java/com/gemstone/gemfire/security/MultiuserDurableCQAuthzDUnitTest.java index 9f9d4c0c4cd3..486eaed9fd3e 100644 --- a/geode-cq/src/test/java/com/gemstone/gemfire/security/MultiuserDurableCQAuthzDUnitTest.java +++ b/geode-cq/src/test/java/com/gemstone/gemfire/security/MultiuserDurableCQAuthzDUnitTest.java @@ -44,7 +44,6 @@ import com.gemstone.gemfire.test.dunit.SerializableRunnable; /** - * @author ashetkar * */ public class MultiuserDurableCQAuthzDUnitTest extends diff --git a/geode-joptsimple/src/main/java/joptsimple/AbstractOptionSpec.java b/geode-joptsimple/src/main/java/joptsimple/AbstractOptionSpec.java index e365d4c2dce1..e65aa624386a 100644 --- a/geode-joptsimple/src/main/java/joptsimple/AbstractOptionSpec.java +++ b/geode-joptsimple/src/main/java/joptsimple/AbstractOptionSpec.java @@ -36,7 +36,6 @@ a copy of this software and associated documentation files (the /** * @param represents the type of the arguments this option accepts - * @author Paul Holser */ abstract class AbstractOptionSpec implements OptionSpec, OptionDescriptor { private final List options = new ArrayList(); diff --git a/geode-joptsimple/src/main/java/joptsimple/AlternativeLongOptionSpec.java b/geode-joptsimple/src/main/java/joptsimple/AlternativeLongOptionSpec.java index 21d2502296da..d4fcac1a92a3 100644 --- a/geode-joptsimple/src/main/java/joptsimple/AlternativeLongOptionSpec.java +++ b/geode-joptsimple/src/main/java/joptsimple/AlternativeLongOptionSpec.java @@ -33,8 +33,6 @@ a copy of this software and associated documentation files (the /** * Represents the "-W" form of long option specification. * - * @author Paul Holser - * @author Nikhil Jadhav */ class AlternativeLongOptionSpec extends ArgumentAcceptingOptionSpec { AlternativeLongOptionSpec() { diff --git a/geode-joptsimple/src/main/java/joptsimple/ArgumentAcceptingOptionSpec.java b/geode-joptsimple/src/main/java/joptsimple/ArgumentAcceptingOptionSpec.java index deea27fc0c34..550572578165 100644 --- a/geode-joptsimple/src/main/java/joptsimple/ArgumentAcceptingOptionSpec.java +++ b/geode-joptsimple/src/main/java/joptsimple/ArgumentAcceptingOptionSpec.java @@ -57,7 +57,6 @@ a copy of this software and associated documentation files (the * a {@link String}.

    * * @param represents the type of the arguments this option accepts - * @author Paul Holser */ public abstract class ArgumentAcceptingOptionSpec extends AbstractOptionSpec { private static final char NIL_VALUE_SEPARATOR = '\u0000'; diff --git a/geode-joptsimple/src/main/java/joptsimple/ArgumentList.java b/geode-joptsimple/src/main/java/joptsimple/ArgumentList.java index 3e7c5477e6b6..c31ccee43b9e 100644 --- a/geode-joptsimple/src/main/java/joptsimple/ArgumentList.java +++ b/geode-joptsimple/src/main/java/joptsimple/ArgumentList.java @@ -30,7 +30,6 @@ a copy of this software and associated documentation files (the /** *

    Wrapper for an array of command line arguments.

    * - * @author Paul Holser */ class ArgumentList { private final String[] arguments; diff --git a/geode-joptsimple/src/main/java/joptsimple/BuiltinHelpFormatter.java b/geode-joptsimple/src/main/java/joptsimple/BuiltinHelpFormatter.java index 134d6e0a3b86..faf2a27e7542 100644 --- a/geode-joptsimple/src/main/java/joptsimple/BuiltinHelpFormatter.java +++ b/geode-joptsimple/src/main/java/joptsimple/BuiltinHelpFormatter.java @@ -41,7 +41,6 @@ a copy of this software and associated documentation files (the /** - * @author Paul Holser */ class BuiltinHelpFormatter implements HelpFormatter { private ColumnarData grid; diff --git a/geode-joptsimple/src/main/java/joptsimple/HelpFormatter.java b/geode-joptsimple/src/main/java/joptsimple/HelpFormatter.java index e685ddcf8805..1678e3d352af 100644 --- a/geode-joptsimple/src/main/java/joptsimple/HelpFormatter.java +++ b/geode-joptsimple/src/main/java/joptsimple/HelpFormatter.java @@ -30,7 +30,6 @@ a copy of this software and associated documentation files (the /** *

    Represents objects charged with taking a set of option descriptions and producing some help text from them.

    * - * @author Paul Holser */ public interface HelpFormatter { /** diff --git a/geode-joptsimple/src/main/java/joptsimple/IllegalOptionSpecificationException.java b/geode-joptsimple/src/main/java/joptsimple/IllegalOptionSpecificationException.java index 2568e250f725..f95c094de721 100644 --- a/geode-joptsimple/src/main/java/joptsimple/IllegalOptionSpecificationException.java +++ b/geode-joptsimple/src/main/java/joptsimple/IllegalOptionSpecificationException.java @@ -30,8 +30,6 @@ a copy of this software and associated documentation files (the /** * Thrown when the option parser is asked to recognize an option with illegal characters in it. * - * @author Paul Holser - * @author Nikhil Jadhav */ public class IllegalOptionSpecificationException extends OptionException { private static final long serialVersionUID = -1L; diff --git a/geode-joptsimple/src/main/java/joptsimple/MissingRequiredOptionException.java b/geode-joptsimple/src/main/java/joptsimple/MissingRequiredOptionException.java index eb3cc0463173..a620e9c39934 100644 --- a/geode-joptsimple/src/main/java/joptsimple/MissingRequiredOptionException.java +++ b/geode-joptsimple/src/main/java/joptsimple/MissingRequiredOptionException.java @@ -30,8 +30,6 @@ a copy of this software and associated documentation files (the /** * Thrown when an option is marked as required, but not specified on the command line. * - * @author Emils Solmanis - * @author Nikhil Jadhav */ public class MissingRequiredOptionException extends OptionException { private static final long serialVersionUID = -1L; diff --git a/geode-joptsimple/src/main/java/joptsimple/MultipleArgumentsForOptionException.java b/geode-joptsimple/src/main/java/joptsimple/MultipleArgumentsForOptionException.java index 0aae3869a21d..a9f78aa63f7c 100644 --- a/geode-joptsimple/src/main/java/joptsimple/MultipleArgumentsForOptionException.java +++ b/geode-joptsimple/src/main/java/joptsimple/MultipleArgumentsForOptionException.java @@ -30,8 +30,6 @@ a copy of this software and associated documentation files (the /** * Thrown when asking an {@link OptionSet} for a single argument of an option when many have been specified. * - * @author Paul Holser - * @author Nikhil Jadhav */ public class MultipleArgumentsForOptionException extends OptionException { private static final long serialVersionUID = -1L; diff --git a/geode-joptsimple/src/main/java/joptsimple/NoArgumentOptionSpec.java b/geode-joptsimple/src/main/java/joptsimple/NoArgumentOptionSpec.java index 0d443e555a0a..7bff5087b554 100644 --- a/geode-joptsimple/src/main/java/joptsimple/NoArgumentOptionSpec.java +++ b/geode-joptsimple/src/main/java/joptsimple/NoArgumentOptionSpec.java @@ -33,7 +33,6 @@ a copy of this software and associated documentation files (the /** * A specification for an option that does not accept arguments. * - * @author Paul Holser */ class NoArgumentOptionSpec extends AbstractOptionSpec { NoArgumentOptionSpec( String option ) { diff --git a/geode-joptsimple/src/main/java/joptsimple/OptionArgumentConversionException.java b/geode-joptsimple/src/main/java/joptsimple/OptionArgumentConversionException.java index bcc6dcd9ee90..f3c751ae27cd 100644 --- a/geode-joptsimple/src/main/java/joptsimple/OptionArgumentConversionException.java +++ b/geode-joptsimple/src/main/java/joptsimple/OptionArgumentConversionException.java @@ -30,8 +30,6 @@ a copy of this software and associated documentation files (the /** * Thrown when a problem occurs converting an argument of an option from {@link String} to another type. * - * @author Paul Holser - * @author Nikhil Jadhav */ public class OptionArgumentConversionException extends OptionException { private static final long serialVersionUID = -1L; diff --git a/geode-joptsimple/src/main/java/joptsimple/OptionDescriptor.java b/geode-joptsimple/src/main/java/joptsimple/OptionDescriptor.java index 98a39b116a8a..3a1edea300d7 100644 --- a/geode-joptsimple/src/main/java/joptsimple/OptionDescriptor.java +++ b/geode-joptsimple/src/main/java/joptsimple/OptionDescriptor.java @@ -32,7 +32,6 @@ a copy of this software and associated documentation files (the * Describes options that an option parser recognizes, in ways that might be useful to {@linkplain HelpFormatter * help screens}. * - * @author Paul Holser */ public interface OptionDescriptor { /** diff --git a/geode-joptsimple/src/main/java/joptsimple/OptionException.java b/geode-joptsimple/src/main/java/joptsimple/OptionException.java index 1937fd4ef7f4..358d46240919 100644 --- a/geode-joptsimple/src/main/java/joptsimple/OptionException.java +++ b/geode-joptsimple/src/main/java/joptsimple/OptionException.java @@ -38,8 +38,6 @@ a copy of this software and associated documentation files (the /** * Thrown when a problem occurs during option parsing. * - * @author Paul Holser - * @author Nikhil Jadhav */ public abstract class OptionException extends RuntimeException { private static final long serialVersionUID = -1L; diff --git a/geode-joptsimple/src/main/java/joptsimple/OptionMissingRequiredArgumentException.java b/geode-joptsimple/src/main/java/joptsimple/OptionMissingRequiredArgumentException.java index 556536f18ac8..af3d62c076d4 100644 --- a/geode-joptsimple/src/main/java/joptsimple/OptionMissingRequiredArgumentException.java +++ b/geode-joptsimple/src/main/java/joptsimple/OptionMissingRequiredArgumentException.java @@ -30,8 +30,6 @@ a copy of this software and associated documentation files (the /** * Thrown when the option parser discovers an option that requires an argument, but that argument is missing. * - * @author Paul Holser - * @author Nikhil Jadhav */ public class OptionMissingRequiredArgumentException extends OptionException { private static final long serialVersionUID = -1L; diff --git a/geode-joptsimple/src/main/java/joptsimple/OptionParser.java b/geode-joptsimple/src/main/java/joptsimple/OptionParser.java index 24165b80c8d9..05855aa6eaef 100644 --- a/geode-joptsimple/src/main/java/joptsimple/OptionParser.java +++ b/geode-joptsimple/src/main/java/joptsimple/OptionParser.java @@ -190,8 +190,6 @@ a copy of this software and associated documentation files (the * ("+") * * - * @author Paul Holser - * @author Nikhil Jadhav * @see The GNU C Library */ public class OptionParser { diff --git a/geode-joptsimple/src/main/java/joptsimple/OptionParserState.java b/geode-joptsimple/src/main/java/joptsimple/OptionParserState.java index 4cda9739571b..191c7d1edf7b 100644 --- a/geode-joptsimple/src/main/java/joptsimple/OptionParserState.java +++ b/geode-joptsimple/src/main/java/joptsimple/OptionParserState.java @@ -31,8 +31,6 @@ a copy of this software and associated documentation files (the * Abstraction of parser state; mostly serves to model how a parser behaves depending on whether end-of-options * has been detected. * - * @author Paul Holser - * @author Nikhil Jadhav */ abstract class OptionParserState { static OptionParserState noMoreOptions() { diff --git a/geode-joptsimple/src/main/java/joptsimple/OptionSet.java b/geode-joptsimple/src/main/java/joptsimple/OptionSet.java index eb0582ec88fd..cbcfe9bfad00 100644 --- a/geode-joptsimple/src/main/java/joptsimple/OptionSet.java +++ b/geode-joptsimple/src/main/java/joptsimple/OptionSet.java @@ -39,7 +39,6 @@ a copy of this software and associated documentation files (the /** * Representation of a group of detected command line options, their arguments, and non-option arguments. * - * @author Paul Holser */ public class OptionSet { private final List> detectedSpecs; diff --git a/geode-joptsimple/src/main/java/joptsimple/OptionSpec.java b/geode-joptsimple/src/main/java/joptsimple/OptionSpec.java index 9f79a406948c..3b8b8b26e87c 100644 --- a/geode-joptsimple/src/main/java/joptsimple/OptionSpec.java +++ b/geode-joptsimple/src/main/java/joptsimple/OptionSpec.java @@ -47,7 +47,6 @@ a copy of this software and associated documentation files (the *
    * * @param represents the type of the arguments this option accepts - * @author Paul Holser */ public interface OptionSpec { /** diff --git a/geode-joptsimple/src/main/java/joptsimple/OptionSpecBuilder.java b/geode-joptsimple/src/main/java/joptsimple/OptionSpecBuilder.java index ff3c99ec852e..6b92e449a2d9 100644 --- a/geode-joptsimple/src/main/java/joptsimple/OptionSpecBuilder.java +++ b/geode-joptsimple/src/main/java/joptsimple/OptionSpecBuilder.java @@ -52,7 +52,6 @@ a copy of this software and associated documentation files (the * String value = parser.parse( "-c", "2" ).valueOf( optionC ); // ClassCastException *
    * - * @author Paul Holser */ public class OptionSpecBuilder extends NoArgumentOptionSpec { private final OptionParser parser; diff --git a/geode-joptsimple/src/main/java/joptsimple/OptionSpecTokenizer.java b/geode-joptsimple/src/main/java/joptsimple/OptionSpecTokenizer.java index 0318db5201c7..261466442a87 100644 --- a/geode-joptsimple/src/main/java/joptsimple/OptionSpecTokenizer.java +++ b/geode-joptsimple/src/main/java/joptsimple/OptionSpecTokenizer.java @@ -33,7 +33,6 @@ a copy of this software and associated documentation files (the /** * Tokenizes a short option specification string. * - * @author Paul Holser */ class OptionSpecTokenizer { private static final char POSIXLY_CORRECT_MARKER = '+'; diff --git a/geode-joptsimple/src/main/java/joptsimple/OptionalArgumentOptionSpec.java b/geode-joptsimple/src/main/java/joptsimple/OptionalArgumentOptionSpec.java index 250ffd3430ee..e418040c3c62 100644 --- a/geode-joptsimple/src/main/java/joptsimple/OptionalArgumentOptionSpec.java +++ b/geode-joptsimple/src/main/java/joptsimple/OptionalArgumentOptionSpec.java @@ -31,7 +31,6 @@ a copy of this software and associated documentation files (the * Specification of an option that accepts an optional argument. * * @param represents the type of the arguments this option accepts - * @author Paul Holser */ class OptionalArgumentOptionSpec extends ArgumentAcceptingOptionSpec { OptionalArgumentOptionSpec( String option ) { diff --git a/geode-joptsimple/src/main/java/joptsimple/ParserRules.java b/geode-joptsimple/src/main/java/joptsimple/ParserRules.java index da4906bcc322..2bc2251405ab 100644 --- a/geode-joptsimple/src/main/java/joptsimple/ParserRules.java +++ b/geode-joptsimple/src/main/java/joptsimple/ParserRules.java @@ -32,7 +32,6 @@ a copy of this software and associated documentation files (the /** * Can tell whether or not options are well-formed. * - * @author Paul Holser */ final class ParserRules { static final char HYPHEN_CHAR = '-'; diff --git a/geode-joptsimple/src/main/java/joptsimple/RequiredArgumentOptionSpec.java b/geode-joptsimple/src/main/java/joptsimple/RequiredArgumentOptionSpec.java index 7baae728a7f8..39e83a4c4f06 100644 --- a/geode-joptsimple/src/main/java/joptsimple/RequiredArgumentOptionSpec.java +++ b/geode-joptsimple/src/main/java/joptsimple/RequiredArgumentOptionSpec.java @@ -31,8 +31,6 @@ a copy of this software and associated documentation files (the * Specification of an option that accepts a required argument. * * @param represents the type of the arguments this option accepts - * @author Paul Holser - * @author Nikhil Jadhav */ class RequiredArgumentOptionSpec extends ArgumentAcceptingOptionSpec { RequiredArgumentOptionSpec( String option ) { diff --git a/geode-joptsimple/src/main/java/joptsimple/UnrecognizedOptionException.java b/geode-joptsimple/src/main/java/joptsimple/UnrecognizedOptionException.java index 1d6f508f2dce..f90047da16e2 100644 --- a/geode-joptsimple/src/main/java/joptsimple/UnrecognizedOptionException.java +++ b/geode-joptsimple/src/main/java/joptsimple/UnrecognizedOptionException.java @@ -30,8 +30,6 @@ a copy of this software and associated documentation files (the /** * Thrown when the option parser encounters an unrecognized option. * - * @author Paul Holser - * @author Nikhil Jadhav */ public class UnrecognizedOptionException extends OptionException { private static final long serialVersionUID = -1L; diff --git a/geode-joptsimple/src/main/java/joptsimple/ValueConversionException.java b/geode-joptsimple/src/main/java/joptsimple/ValueConversionException.java index 282c5c4b2833..93e563a7a3bc 100644 --- a/geode-joptsimple/src/main/java/joptsimple/ValueConversionException.java +++ b/geode-joptsimple/src/main/java/joptsimple/ValueConversionException.java @@ -28,7 +28,6 @@ a copy of this software and associated documentation files (the /** * Thrown by {@link ValueConverter}s when problems occur in converting string values to other Java types. * - * @author Paul Holser */ public class ValueConversionException extends RuntimeException { private static final long serialVersionUID = -1L; diff --git a/geode-joptsimple/src/main/java/joptsimple/ValueConverter.java b/geode-joptsimple/src/main/java/joptsimple/ValueConverter.java index d90bef89b4cf..ab597e57563a 100644 --- a/geode-joptsimple/src/main/java/joptsimple/ValueConverter.java +++ b/geode-joptsimple/src/main/java/joptsimple/ValueConverter.java @@ -29,7 +29,6 @@ a copy of this software and associated documentation files (the * Instances of this interface are used to convert arguments of options into specific Java types. * * @param constraint on the type of values being converted to - * @author Paul Holser */ public interface ValueConverter { /** diff --git a/geode-joptsimple/src/main/java/joptsimple/internal/AbbreviationMap.java b/geode-joptsimple/src/main/java/joptsimple/internal/AbbreviationMap.java index 35fad8910945..f279e5d20039 100644 --- a/geode-joptsimple/src/main/java/joptsimple/internal/AbbreviationMap.java +++ b/geode-joptsimple/src/main/java/joptsimple/internal/AbbreviationMap.java @@ -53,7 +53,6 @@ a copy of this software and associated documentation files (the *

    The data structure is much like a "trie".

    * * @param a constraint on the types of the values in the map - * @author Paul Holser */ public class AbbreviationMap { private String key; diff --git a/geode-joptsimple/src/main/java/joptsimple/internal/Classes.java b/geode-joptsimple/src/main/java/joptsimple/internal/Classes.java index 89e0310174a9..d643c289d679 100644 --- a/geode-joptsimple/src/main/java/joptsimple/internal/Classes.java +++ b/geode-joptsimple/src/main/java/joptsimple/internal/Classes.java @@ -29,7 +29,6 @@ a copy of this software and associated documentation files (the import java.util.Map; /** - * @author Paul Holser */ public final class Classes { private static final Map, Class> WRAPPERS = new HashMap, Class>( 13 ); diff --git a/geode-joptsimple/src/main/java/joptsimple/internal/Column.java b/geode-joptsimple/src/main/java/joptsimple/internal/Column.java index e7be1a24df9e..3e64cb1c73a8 100644 --- a/geode-joptsimple/src/main/java/joptsimple/internal/Column.java +++ b/geode-joptsimple/src/main/java/joptsimple/internal/Column.java @@ -38,7 +38,6 @@ a copy of this software and associated documentation files (the /** - * @author Paul Holser */ public class Column { static final Comparator BY_HEIGHT = new Comparator() { diff --git a/geode-joptsimple/src/main/java/joptsimple/internal/ColumnWidthCalculator.java b/geode-joptsimple/src/main/java/joptsimple/internal/ColumnWidthCalculator.java index 9b3bccc96e10..9e09432e882c 100644 --- a/geode-joptsimple/src/main/java/joptsimple/internal/ColumnWidthCalculator.java +++ b/geode-joptsimple/src/main/java/joptsimple/internal/ColumnWidthCalculator.java @@ -26,7 +26,6 @@ a copy of this software and associated documentation files (the package joptsimple.internal; /** - * @author Paul Holser */ class ColumnWidthCalculator { int calculate( int totalWidth, int numberOfColumns ) { diff --git a/geode-joptsimple/src/main/java/joptsimple/internal/ColumnarData.java b/geode-joptsimple/src/main/java/joptsimple/internal/ColumnarData.java index ebb6d128287c..b1c8b849444c 100644 --- a/geode-joptsimple/src/main/java/joptsimple/internal/ColumnarData.java +++ b/geode-joptsimple/src/main/java/joptsimple/internal/ColumnarData.java @@ -40,7 +40,6 @@ a copy of this software and associated documentation files (the /** * A means to display data in a text grid. * - * @author Paul Holser */ public class ColumnarData { private static final String LINE_SEPARATOR = getProperty( "line.separator" ); diff --git a/geode-joptsimple/src/main/java/joptsimple/internal/ConstructorInvokingValueConverter.java b/geode-joptsimple/src/main/java/joptsimple/internal/ConstructorInvokingValueConverter.java index 7a23c6ab0bd6..789f1e50de1d 100644 --- a/geode-joptsimple/src/main/java/joptsimple/internal/ConstructorInvokingValueConverter.java +++ b/geode-joptsimple/src/main/java/joptsimple/internal/ConstructorInvokingValueConverter.java @@ -35,7 +35,6 @@ a copy of this software and associated documentation files (the /** * @param constraint on the type of values being converted to - * @author Paul Holser */ class ConstructorInvokingValueConverter implements ValueConverter { private final Constructor ctor; diff --git a/geode-joptsimple/src/main/java/joptsimple/internal/MethodInvokingValueConverter.java b/geode-joptsimple/src/main/java/joptsimple/internal/MethodInvokingValueConverter.java index 345242c62350..968d7e82de31 100644 --- a/geode-joptsimple/src/main/java/joptsimple/internal/MethodInvokingValueConverter.java +++ b/geode-joptsimple/src/main/java/joptsimple/internal/MethodInvokingValueConverter.java @@ -35,7 +35,6 @@ a copy of this software and associated documentation files (the /** * @param constraint on the type of values being converted to - * @author Paul Holser */ class MethodInvokingValueConverter implements ValueConverter { private final Method method; diff --git a/geode-joptsimple/src/main/java/joptsimple/internal/Objects.java b/geode-joptsimple/src/main/java/joptsimple/internal/Objects.java index 7ccca1cbd2f7..5cf833b188e5 100644 --- a/geode-joptsimple/src/main/java/joptsimple/internal/Objects.java +++ b/geode-joptsimple/src/main/java/joptsimple/internal/Objects.java @@ -26,7 +26,6 @@ a copy of this software and associated documentation files (the package joptsimple.internal; /** - * @author Paul Holser */ public final class Objects { private Objects() { diff --git a/geode-joptsimple/src/main/java/joptsimple/internal/Reflection.java b/geode-joptsimple/src/main/java/joptsimple/internal/Reflection.java index 77d2e6b8b811..5392df9126af 100644 --- a/geode-joptsimple/src/main/java/joptsimple/internal/Reflection.java +++ b/geode-joptsimple/src/main/java/joptsimple/internal/Reflection.java @@ -40,7 +40,6 @@ a copy of this software and associated documentation files (the /** * Helper methods for reflection. * - * @author Paul Holser */ public final class Reflection { private Reflection() { diff --git a/geode-joptsimple/src/main/java/joptsimple/internal/ReflectionException.java b/geode-joptsimple/src/main/java/joptsimple/internal/ReflectionException.java index 2f48e0b00a9e..8cc6635ed142 100644 --- a/geode-joptsimple/src/main/java/joptsimple/internal/ReflectionException.java +++ b/geode-joptsimple/src/main/java/joptsimple/internal/ReflectionException.java @@ -28,7 +28,6 @@ a copy of this software and associated documentation files (the /** * This unchecked exception wraps reflection-oriented exceptions. * - * @author Paul Holser */ public class ReflectionException extends RuntimeException { private static final long serialVersionUID = -2L; diff --git a/geode-joptsimple/src/main/java/joptsimple/internal/Strings.java b/geode-joptsimple/src/main/java/joptsimple/internal/Strings.java index 8e6e9101bf61..3e1fc05023f8 100644 --- a/geode-joptsimple/src/main/java/joptsimple/internal/Strings.java +++ b/geode-joptsimple/src/main/java/joptsimple/internal/Strings.java @@ -32,7 +32,6 @@ a copy of this software and associated documentation files (the import static java.util.Arrays.*; /** - * @author Paul Holser */ public final class Strings { public static final String EMPTY = ""; diff --git a/geode-joptsimple/src/main/java/joptsimple/util/DateConverter.java b/geode-joptsimple/src/main/java/joptsimple/util/DateConverter.java index 9b4c7b195682..77909226e37d 100644 --- a/geode-joptsimple/src/main/java/joptsimple/util/DateConverter.java +++ b/geode-joptsimple/src/main/java/joptsimple/util/DateConverter.java @@ -37,7 +37,6 @@ a copy of this software and associated documentation files (the /** * Converts values to {@link Date}s using a {@link DateFormat} object. * - * @author Paul Holser */ public class DateConverter implements ValueConverter { private final DateFormat formatter; diff --git a/geode-joptsimple/src/main/java/joptsimple/util/KeyValuePair.java b/geode-joptsimple/src/main/java/joptsimple/util/KeyValuePair.java index 499a84186547..e033e7d4626d 100644 --- a/geode-joptsimple/src/main/java/joptsimple/util/KeyValuePair.java +++ b/geode-joptsimple/src/main/java/joptsimple/util/KeyValuePair.java @@ -33,7 +33,6 @@ a copy of this software and associated documentation files (the *

    This is useful as an argument type for options whose values take on the form key=value, such as JVM * command line system properties.

    * - * @author Paul Holser */ public final class KeyValuePair { public final String key; diff --git a/geode-joptsimple/src/main/java/joptsimple/util/RegexMatcher.java b/geode-joptsimple/src/main/java/joptsimple/util/RegexMatcher.java index 3ce159cf8a61..a3a67048da25 100644 --- a/geode-joptsimple/src/main/java/joptsimple/util/RegexMatcher.java +++ b/geode-joptsimple/src/main/java/joptsimple/util/RegexMatcher.java @@ -37,7 +37,6 @@ a copy of this software and associated documentation files (the /** * Ensures that values entirely match a regular expression. * - * @author Paul Holser */ public class RegexMatcher implements ValueConverter { private final Pattern pattern; diff --git a/geode-junit/src/main/java/com/gemstone/gemfire/test/junit/ConditionalIgnore.java b/geode-junit/src/main/java/com/gemstone/gemfire/test/junit/ConditionalIgnore.java index b409cb10bd20..5e037c7eee4b 100755 --- a/geode-junit/src/main/java/com/gemstone/gemfire/test/junit/ConditionalIgnore.java +++ b/geode-junit/src/main/java/com/gemstone/gemfire/test/junit/ConditionalIgnore.java @@ -29,7 +29,6 @@ * conditionally ignore the test case for a fixed amount of time, or based on a predetermined condition provided by * the IgnoreCondition interface. * - * @author John Blum * @see java.lang.annotation.Annotation * @see com.gemstone.gemfire.test.junit.IgnoreCondition * @see com.gemstone.gemfire.test.junit.support.DefaultIgnoreCondition diff --git a/geode-junit/src/main/java/com/gemstone/gemfire/test/junit/IgnoreCondition.java b/geode-junit/src/main/java/com/gemstone/gemfire/test/junit/IgnoreCondition.java index 0caa959af886..15e507e51db7 100755 --- a/geode-junit/src/main/java/com/gemstone/gemfire/test/junit/IgnoreCondition.java +++ b/geode-junit/src/main/java/com/gemstone/gemfire/test/junit/IgnoreCondition.java @@ -21,7 +21,6 @@ /** * The IgnoreCondition class... * - * @author John Blum * @see org.junit.runner.Description */ @SuppressWarnings("unused") diff --git a/geode-junit/src/main/java/com/gemstone/gemfire/test/junit/IgnoreUntil.java b/geode-junit/src/main/java/com/gemstone/gemfire/test/junit/IgnoreUntil.java index 5910d10cd100..e60e92f5cb34 100755 --- a/geode-junit/src/main/java/com/gemstone/gemfire/test/junit/IgnoreUntil.java +++ b/geode-junit/src/main/java/com/gemstone/gemfire/test/junit/IgnoreUntil.java @@ -29,7 +29,6 @@ * conditionally ignore the test case for a fixed amount of time, or based on a predetermined condition provided by * the IgnoreCondition interface. * - * @author John Blum * @see java.lang.annotation.Annotation * @see com.gemstone.gemfire.test.junit.IgnoreCondition * @see com.gemstone.gemfire.test.junit.support.DefaultIgnoreCondition diff --git a/geode-junit/src/main/java/com/gemstone/gemfire/test/junit/Repeat.java b/geode-junit/src/main/java/com/gemstone/gemfire/test/junit/Repeat.java index 5cfa3212cc58..c4424c361beb 100755 --- a/geode-junit/src/main/java/com/gemstone/gemfire/test/junit/Repeat.java +++ b/geode-junit/src/main/java/com/gemstone/gemfire/test/junit/Repeat.java @@ -26,7 +26,6 @@ * The Repeat class is a Java Annotation enabling an annotated test suite class test case method to be repeated * a specified number of iterations. * - * @author John Blum * @see java.lang.annotation.Annotation */ @Documented diff --git a/geode-junit/src/main/java/com/gemstone/gemfire/test/junit/categories/ContainerTest.java b/geode-junit/src/main/java/com/gemstone/gemfire/test/junit/categories/ContainerTest.java index 8eec738dbdaf..59f15de485d5 100755 --- a/geode-junit/src/main/java/com/gemstone/gemfire/test/junit/categories/ContainerTest.java +++ b/geode-junit/src/main/java/com/gemstone/gemfire/test/junit/categories/ContainerTest.java @@ -19,7 +19,6 @@ * JUnit Test Category that specifies a test executes within a container * environment such as an OSGi server. * - * @author Kirk Lund */ public interface ContainerTest { } diff --git a/geode-junit/src/main/java/com/gemstone/gemfire/test/junit/categories/DistributedTest.java b/geode-junit/src/main/java/com/gemstone/gemfire/test/junit/categories/DistributedTest.java index 6aa538b7b32c..d7749850c897 100644 --- a/geode-junit/src/main/java/com/gemstone/gemfire/test/junit/categories/DistributedTest.java +++ b/geode-junit/src/main/java/com/gemstone/gemfire/test/junit/categories/DistributedTest.java @@ -19,7 +19,6 @@ * JUnit Test Category that specifies a test involving multiple members of a * distributed system. * - * @author Kirk Lund */ public interface DistributedTest { } diff --git a/geode-junit/src/main/java/com/gemstone/gemfire/test/junit/categories/DistributedTransactionsTest.java b/geode-junit/src/main/java/com/gemstone/gemfire/test/junit/categories/DistributedTransactionsTest.java index 1892ddd17821..dd2eea659db2 100644 --- a/geode-junit/src/main/java/com/gemstone/gemfire/test/junit/categories/DistributedTransactionsTest.java +++ b/geode-junit/src/main/java/com/gemstone/gemfire/test/junit/categories/DistributedTransactionsTest.java @@ -19,7 +19,6 @@ /** * Unit test category that specifies tests for distributed transactions * functionality - * @author shirishd */ public interface DistributedTransactionsTest { diff --git a/geode-junit/src/main/java/com/gemstone/gemfire/test/junit/categories/HydraTest.java b/geode-junit/src/main/java/com/gemstone/gemfire/test/junit/categories/HydraTest.java index 4fe535be4821..f92a0cd06914 100755 --- a/geode-junit/src/main/java/com/gemstone/gemfire/test/junit/categories/HydraTest.java +++ b/geode-junit/src/main/java/com/gemstone/gemfire/test/junit/categories/HydraTest.java @@ -18,7 +18,6 @@ /** * JUnit Test Category that specifies a hydra test. * - * @author Kirk Lund */ public interface HydraTest { } diff --git a/geode-junit/src/main/java/com/gemstone/gemfire/test/junit/categories/IntegrationTest.java b/geode-junit/src/main/java/com/gemstone/gemfire/test/junit/categories/IntegrationTest.java index 1be6e457bd25..fda80695437d 100644 --- a/geode-junit/src/main/java/com/gemstone/gemfire/test/junit/categories/IntegrationTest.java +++ b/geode-junit/src/main/java/com/gemstone/gemfire/test/junit/categories/IntegrationTest.java @@ -19,7 +19,6 @@ * JUnit Test Category that specifies a test involving inter-operation of * components or subsystems. * - * @author Kirk Lund */ public interface IntegrationTest { } diff --git a/geode-junit/src/main/java/com/gemstone/gemfire/test/junit/categories/PerformanceTest.java b/geode-junit/src/main/java/com/gemstone/gemfire/test/junit/categories/PerformanceTest.java index ad952be014c9..0a92fce44b6b 100644 --- a/geode-junit/src/main/java/com/gemstone/gemfire/test/junit/categories/PerformanceTest.java +++ b/geode-junit/src/main/java/com/gemstone/gemfire/test/junit/categories/PerformanceTest.java @@ -18,7 +18,6 @@ /** * JUnit Test Category that specifies a test that measures performance. * - * @author Kirk Lund */ public interface PerformanceTest { diff --git a/geode-junit/src/main/java/com/gemstone/gemfire/test/junit/categories/UITest.java b/geode-junit/src/main/java/com/gemstone/gemfire/test/junit/categories/UITest.java index 834931a45043..67c1bd117ad5 100644 --- a/geode-junit/src/main/java/com/gemstone/gemfire/test/junit/categories/UITest.java +++ b/geode-junit/src/main/java/com/gemstone/gemfire/test/junit/categories/UITest.java @@ -18,7 +18,6 @@ /** * JUnit Test Category that specifies a test involving a browser present to test the UI * - * @author Jinmei Liao */ public interface UITest { } diff --git a/geode-junit/src/main/java/com/gemstone/gemfire/test/junit/categories/UnitTest.java b/geode-junit/src/main/java/com/gemstone/gemfire/test/junit/categories/UnitTest.java index d5be9e801dda..eaa2e5dc3b34 100644 --- a/geode-junit/src/main/java/com/gemstone/gemfire/test/junit/categories/UnitTest.java +++ b/geode-junit/src/main/java/com/gemstone/gemfire/test/junit/categories/UnitTest.java @@ -19,7 +19,6 @@ * JUnit Test Category that specifies a test with very narrow and well defined * scope. Any complex dependencies and interactions are stubbed or mocked. * - * @author Kirk Lund */ public interface UnitTest { } diff --git a/geode-junit/src/main/java/com/gemstone/gemfire/test/junit/categories/WanTest.java b/geode-junit/src/main/java/com/gemstone/gemfire/test/junit/categories/WanTest.java index 9abf15ba6506..ae3633aa4e2e 100644 --- a/geode-junit/src/main/java/com/gemstone/gemfire/test/junit/categories/WanTest.java +++ b/geode-junit/src/main/java/com/gemstone/gemfire/test/junit/categories/WanTest.java @@ -18,7 +18,6 @@ /** * Tests Wan Feature. * - * @author Kirk Lund */ public interface WanTest { } diff --git a/geode-junit/src/main/java/com/gemstone/gemfire/test/junit/rules/ConditionalIgnoreRule.java b/geode-junit/src/main/java/com/gemstone/gemfire/test/junit/rules/ConditionalIgnoreRule.java index 80898b5ff718..6c354d2d6313 100755 --- a/geode-junit/src/main/java/com/gemstone/gemfire/test/junit/rules/ConditionalIgnoreRule.java +++ b/geode-junit/src/main/java/com/gemstone/gemfire/test/junit/rules/ConditionalIgnoreRule.java @@ -33,7 +33,6 @@ /** * The ConditionalIgnoreRule class... * - * @author John Blum * @see org.junit.rules.TestRule * @see org.junit.runner.Description * @see org.junit.runners.model.Statement diff --git a/geode-junit/src/main/java/com/gemstone/gemfire/test/junit/rules/ExpectedTimeout.java b/geode-junit/src/main/java/com/gemstone/gemfire/test/junit/rules/ExpectedTimeout.java index 2f538118f039..420aa5d3717b 100755 --- a/geode-junit/src/main/java/com/gemstone/gemfire/test/junit/rules/ExpectedTimeout.java +++ b/geode-junit/src/main/java/com/gemstone/gemfire/test/junit/rules/ExpectedTimeout.java @@ -29,7 +29,6 @@ /** * Expect an Exception within a specified timeout. * - * @author Kirk Lund * @since 8.2 */ public class ExpectedTimeout implements TestRule { diff --git a/geode-junit/src/main/java/com/gemstone/gemfire/test/junit/rules/ExpectedTimeoutRule.java b/geode-junit/src/main/java/com/gemstone/gemfire/test/junit/rules/ExpectedTimeoutRule.java index 7b6d345f38eb..b98f6ada736d 100755 --- a/geode-junit/src/main/java/com/gemstone/gemfire/test/junit/rules/ExpectedTimeoutRule.java +++ b/geode-junit/src/main/java/com/gemstone/gemfire/test/junit/rules/ExpectedTimeoutRule.java @@ -29,7 +29,6 @@ /** * Expect an Exception within a specified timeout. * - * @author Kirk Lund * @since 8.2 */ public class ExpectedTimeoutRule implements TestRule { diff --git a/geode-junit/src/main/java/com/gemstone/gemfire/test/junit/rules/IgnoreUntilRule.java b/geode-junit/src/main/java/com/gemstone/gemfire/test/junit/rules/IgnoreUntilRule.java index bf4ec3f0aa3f..f6ba3688be01 100755 --- a/geode-junit/src/main/java/com/gemstone/gemfire/test/junit/rules/IgnoreUntilRule.java +++ b/geode-junit/src/main/java/com/gemstone/gemfire/test/junit/rules/IgnoreUntilRule.java @@ -33,7 +33,6 @@ /** * The IgnoreUntilRule class... * - * @author John Blum * @see org.junit.rules.TestRule * @see org.junit.runner.Description * @see org.junit.runners.model.Statement diff --git a/geode-junit/src/main/java/com/gemstone/gemfire/test/junit/rules/RepeatRule.java b/geode-junit/src/main/java/com/gemstone/gemfire/test/junit/rules/RepeatRule.java index 7bfe538ce5ea..da945758b844 100755 --- a/geode-junit/src/main/java/com/gemstone/gemfire/test/junit/rules/RepeatRule.java +++ b/geode-junit/src/main/java/com/gemstone/gemfire/test/junit/rules/RepeatRule.java @@ -27,7 +27,6 @@ * The RepeatRule class is a JUnit TestRule that enables an appropriately @Repeat annotated test case method * to be repeated a specified number of times. * - * @author John Blum * @see org.junit.rules.TestRule * @see org.junit.runner.Description * @see org.junit.runners.model.Statement diff --git a/geode-junit/src/main/java/com/gemstone/gemfire/test/junit/rules/SerializableExternalResource.java b/geode-junit/src/main/java/com/gemstone/gemfire/test/junit/rules/SerializableExternalResource.java index 37d8eb55ca80..bfa7c92b49d8 100755 --- a/geode-junit/src/main/java/com/gemstone/gemfire/test/junit/rules/SerializableExternalResource.java +++ b/geode-junit/src/main/java/com/gemstone/gemfire/test/junit/rules/SerializableExternalResource.java @@ -26,7 +26,6 @@ * * Implementation copied from org.junit.rules.ExternalResource. * - * @author Kirk Lund */ @SuppressWarnings("serial") public abstract class SerializableExternalResource implements SerializableTestRule { diff --git a/geode-junit/src/main/java/com/gemstone/gemfire/test/junit/rules/SerializableRuleChain.java b/geode-junit/src/main/java/com/gemstone/gemfire/test/junit/rules/SerializableRuleChain.java index 936345e64820..1a71f39ddf69 100755 --- a/geode-junit/src/main/java/com/gemstone/gemfire/test/junit/rules/SerializableRuleChain.java +++ b/geode-junit/src/main/java/com/gemstone/gemfire/test/junit/rules/SerializableRuleChain.java @@ -60,7 +60,6 @@ * finished outer rule * * - * @author Kirk Lund */ @SuppressWarnings("serial") public class SerializableRuleChain implements SerializableTestRule { diff --git a/geode-junit/src/main/java/com/gemstone/gemfire/test/junit/rules/SerializableTemporaryFolder.java b/geode-junit/src/main/java/com/gemstone/gemfire/test/junit/rules/SerializableTemporaryFolder.java index 0e796b3f9d0d..9183bec032c8 100755 --- a/geode-junit/src/main/java/com/gemstone/gemfire/test/junit/rules/SerializableTemporaryFolder.java +++ b/geode-junit/src/main/java/com/gemstone/gemfire/test/junit/rules/SerializableTemporaryFolder.java @@ -27,7 +27,6 @@ * Serializable version of TemporaryFolder JUnit Rule. JUnit lifecycle is not * executed in remote JVMs. * - * @author Kirk Lund */ @SuppressWarnings("serial") public class SerializableTemporaryFolder extends TemporaryFolder implements SerializableTestRule { diff --git a/geode-junit/src/main/java/com/gemstone/gemfire/test/junit/rules/SerializableTestName.java b/geode-junit/src/main/java/com/gemstone/gemfire/test/junit/rules/SerializableTestName.java index 1fd255f6b9d5..fc542e8a17ee 100755 --- a/geode-junit/src/main/java/com/gemstone/gemfire/test/junit/rules/SerializableTestName.java +++ b/geode-junit/src/main/java/com/gemstone/gemfire/test/junit/rules/SerializableTestName.java @@ -26,7 +26,6 @@ * Serializable version of TestName JUnit Rule. JUnit lifecycle is not * executed in remote JVMs. * - * @author Kirk Lund */ @SuppressWarnings("serial") public class SerializableTestName extends TestName implements SerializableTestRule { diff --git a/geode-junit/src/main/java/com/gemstone/gemfire/test/junit/rules/SerializableTestRule.java b/geode-junit/src/main/java/com/gemstone/gemfire/test/junit/rules/SerializableTestRule.java index 354c38a59672..acb747562397 100755 --- a/geode-junit/src/main/java/com/gemstone/gemfire/test/junit/rules/SerializableTestRule.java +++ b/geode-junit/src/main/java/com/gemstone/gemfire/test/junit/rules/SerializableTestRule.java @@ -27,7 +27,6 @@ * The simplest way to satisfy this interface is to apply transient * to every instance field. * - * @author Kirk Lund */ public interface SerializableTestRule extends Serializable, TestRule { } diff --git a/geode-junit/src/main/java/com/gemstone/gemfire/test/junit/rules/SerializableTestWatcher.java b/geode-junit/src/main/java/com/gemstone/gemfire/test/junit/rules/SerializableTestWatcher.java index 5bcf686ab36a..59d7ee2e27ad 100755 --- a/geode-junit/src/main/java/com/gemstone/gemfire/test/junit/rules/SerializableTestWatcher.java +++ b/geode-junit/src/main/java/com/gemstone/gemfire/test/junit/rules/SerializableTestWatcher.java @@ -22,7 +22,6 @@ * Serializable version of TestWatcher JUnit Rule. JUnit lifecycle is not * executed in remote JVMs. * - * @author Kirk Lund */ @SuppressWarnings("serial") public class SerializableTestWatcher extends TestWatcher implements SerializableTestRule { diff --git a/geode-junit/src/main/java/com/gemstone/gemfire/test/junit/rules/SerializableTimeout.java b/geode-junit/src/main/java/com/gemstone/gemfire/test/junit/rules/SerializableTimeout.java index 3136a1c82a0b..bae4d92cfe0c 100755 --- a/geode-junit/src/main/java/com/gemstone/gemfire/test/junit/rules/SerializableTimeout.java +++ b/geode-junit/src/main/java/com/gemstone/gemfire/test/junit/rules/SerializableTimeout.java @@ -29,7 +29,6 @@ * Serializable version of Timeout JUnit Rule. JUnit lifecycle is not * executed in remote JVMs. * - * @author Kirk Lund */ @SuppressWarnings("serial") public class SerializableTimeout extends Timeout implements SerializableTestRule { diff --git a/geode-junit/src/main/java/com/gemstone/gemfire/test/junit/support/DefaultIgnoreCondition.java b/geode-junit/src/main/java/com/gemstone/gemfire/test/junit/support/DefaultIgnoreCondition.java index b721c41a8cc1..18dc4b4514af 100755 --- a/geode-junit/src/main/java/com/gemstone/gemfire/test/junit/support/DefaultIgnoreCondition.java +++ b/geode-junit/src/main/java/com/gemstone/gemfire/test/junit/support/DefaultIgnoreCondition.java @@ -22,7 +22,6 @@ /** * The DefaultIgnoreCondition class... * - * @author John Blum * @see org.junit.runner.Description * @see com.gemstone.gemfire.test.junit.ConditionalIgnore * @see com.gemstone.gemfire.test.junit.IgnoreCondition diff --git a/geode-junit/src/main/java/com/gemstone/gemfire/test/junit/support/IgnoreConditionEvaluationException.java b/geode-junit/src/main/java/com/gemstone/gemfire/test/junit/support/IgnoreConditionEvaluationException.java index 0d8a321fe172..958e37126ce9 100755 --- a/geode-junit/src/main/java/com/gemstone/gemfire/test/junit/support/IgnoreConditionEvaluationException.java +++ b/geode-junit/src/main/java/com/gemstone/gemfire/test/junit/support/IgnoreConditionEvaluationException.java @@ -19,7 +19,6 @@ /** * The IgnoreConditionEvaluationException class... * - * @author John Blum * @see java.lang.RuntimeException */ @SuppressWarnings({ "serial", "unused" }) diff --git a/geode-junit/src/test/java/com/gemstone/gemfire/test/junit/rules/ExpectedTimeoutJUnitTest.java b/geode-junit/src/test/java/com/gemstone/gemfire/test/junit/rules/ExpectedTimeoutJUnitTest.java index 24ebdde85b8a..4e970b0a853d 100755 --- a/geode-junit/src/test/java/com/gemstone/gemfire/test/junit/rules/ExpectedTimeoutJUnitTest.java +++ b/geode-junit/src/test/java/com/gemstone/gemfire/test/junit/rules/ExpectedTimeoutJUnitTest.java @@ -38,7 +38,6 @@ /** * Unit tests for ExpectedTimeout JUnit Rule. * - * @author Kirk Lund * @since 8.2 */ @Category(UnitTest.class) diff --git a/geode-junit/src/test/java/com/gemstone/gemfire/test/junit/rules/examples/RepeatingTestCasesExampleTest.java b/geode-junit/src/test/java/com/gemstone/gemfire/test/junit/rules/examples/RepeatingTestCasesExampleTest.java index 5ee647bc72c2..fb984c5ff374 100755 --- a/geode-junit/src/test/java/com/gemstone/gemfire/test/junit/rules/examples/RepeatingTestCasesExampleTest.java +++ b/geode-junit/src/test/java/com/gemstone/gemfire/test/junit/rules/examples/RepeatingTestCasesExampleTest.java @@ -35,7 +35,6 @@ * The RepeatingTestCasesExampleTest class is a test suite of test cases testing the contract and functionality * of the JUnit @Repeat annotation on a test suite class test case methods. * - * @author John Blum * @see org.junit.Test * @see com.gemstone.gemfire.test.junit.Repeat * @see com.gemstone.gemfire.test.junit.rules.RepeatRule diff --git a/geode-junit/src/test/java/com/gemstone/gemfire/test/junit/rules/tests/ExpectedTimeoutRuleTest.java b/geode-junit/src/test/java/com/gemstone/gemfire/test/junit/rules/tests/ExpectedTimeoutRuleTest.java index b67d1ebb08d5..c6defa041e93 100755 --- a/geode-junit/src/test/java/com/gemstone/gemfire/test/junit/rules/tests/ExpectedTimeoutRuleTest.java +++ b/geode-junit/src/test/java/com/gemstone/gemfire/test/junit/rules/tests/ExpectedTimeoutRuleTest.java @@ -35,7 +35,6 @@ /** * Unit tests for ExpectedTimeout JUnit Rule. * - * @author Kirk Lund * @since 8.2 */ @Category(UnitTest.class) diff --git a/geode-junit/src/test/java/com/gemstone/gemfire/test/junit/rules/tests/IgnoreUntilRuleTest.java b/geode-junit/src/test/java/com/gemstone/gemfire/test/junit/rules/tests/IgnoreUntilRuleTest.java index a984d1d5926f..12f46884bac5 100755 --- a/geode-junit/src/test/java/com/gemstone/gemfire/test/junit/rules/tests/IgnoreUntilRuleTest.java +++ b/geode-junit/src/test/java/com/gemstone/gemfire/test/junit/rules/tests/IgnoreUntilRuleTest.java @@ -34,7 +34,6 @@ /** * Unit tests for IgnoreUntil JUnit Rule * - * @author Kirk Lund */ @Category(UnitTest.class) public class IgnoreUntilRuleTest { diff --git a/geode-junit/src/test/java/com/gemstone/gemfire/test/junit/rules/tests/RepeatRuleTest.java b/geode-junit/src/test/java/com/gemstone/gemfire/test/junit/rules/tests/RepeatRuleTest.java index 2d37de4e6aca..71cee9bfc3c6 100755 --- a/geode-junit/src/test/java/com/gemstone/gemfire/test/junit/rules/tests/RepeatRuleTest.java +++ b/geode-junit/src/test/java/com/gemstone/gemfire/test/junit/rules/tests/RepeatRuleTest.java @@ -34,7 +34,6 @@ /** * Unit tests for Repeat JUnit Rule. * - * @author Kirk Lund */ @Category(UnitTest.class) public class RepeatRuleTest { diff --git a/geode-junit/src/test/java/com/gemstone/gemfire/test/junit/rules/tests/RetryRuleGlobalWithErrorTest.java b/geode-junit/src/test/java/com/gemstone/gemfire/test/junit/rules/tests/RetryRuleGlobalWithErrorTest.java index 78bc4100c610..d5c28e08bf82 100755 --- a/geode-junit/src/test/java/com/gemstone/gemfire/test/junit/rules/tests/RetryRuleGlobalWithErrorTest.java +++ b/geode-junit/src/test/java/com/gemstone/gemfire/test/junit/rules/tests/RetryRuleGlobalWithErrorTest.java @@ -36,7 +36,6 @@ * Unit tests for Retry JUnit Rule involving global scope (ie Rule affects all * tests in the test case) with failures due to an Exception. * - * @author Kirk Lund */ @Category(UnitTest.class) public class RetryRuleGlobalWithErrorTest { diff --git a/geode-junit/src/test/java/com/gemstone/gemfire/test/junit/rules/tests/RetryRuleGlobalWithExceptionTest.java b/geode-junit/src/test/java/com/gemstone/gemfire/test/junit/rules/tests/RetryRuleGlobalWithExceptionTest.java index 114eeb44f84e..cdbfdafdea58 100755 --- a/geode-junit/src/test/java/com/gemstone/gemfire/test/junit/rules/tests/RetryRuleGlobalWithExceptionTest.java +++ b/geode-junit/src/test/java/com/gemstone/gemfire/test/junit/rules/tests/RetryRuleGlobalWithExceptionTest.java @@ -35,7 +35,6 @@ * Unit tests for Retry JUnit Rule involving global scope (ie Rule affects all * tests in the test case) with failures due to an Exception. * - * @author Kirk Lund */ @Category(UnitTest.class) public class RetryRuleGlobalWithExceptionTest { diff --git a/geode-junit/src/test/java/com/gemstone/gemfire/test/junit/rules/tests/RetryRuleLocalWithErrorTest.java b/geode-junit/src/test/java/com/gemstone/gemfire/test/junit/rules/tests/RetryRuleLocalWithErrorTest.java index af5a853a79da..a6fa96316fd5 100755 --- a/geode-junit/src/test/java/com/gemstone/gemfire/test/junit/rules/tests/RetryRuleLocalWithErrorTest.java +++ b/geode-junit/src/test/java/com/gemstone/gemfire/test/junit/rules/tests/RetryRuleLocalWithErrorTest.java @@ -36,7 +36,6 @@ * Unit tests for Retry JUnit Rule involving local scope (ie Rule affects * test methods annotated with @Retry) with failures due to an Error. * - * @author Kirk Lund */ @Category(UnitTest.class) public class RetryRuleLocalWithErrorTest { diff --git a/geode-junit/src/test/java/com/gemstone/gemfire/test/junit/rules/tests/RetryRuleLocalWithExceptionTest.java b/geode-junit/src/test/java/com/gemstone/gemfire/test/junit/rules/tests/RetryRuleLocalWithExceptionTest.java index 1b16a7a212b3..405d77d26b16 100755 --- a/geode-junit/src/test/java/com/gemstone/gemfire/test/junit/rules/tests/RetryRuleLocalWithExceptionTest.java +++ b/geode-junit/src/test/java/com/gemstone/gemfire/test/junit/rules/tests/RetryRuleLocalWithExceptionTest.java @@ -35,7 +35,6 @@ * Unit tests for Retry JUnit Rule involving local scope (ie Rule affects * test methods annotated with @Retry) with failures due to an Exception. * - * @author Kirk Lund */ @Category(UnitTest.class) public class RetryRuleLocalWithExceptionTest { diff --git a/geode-junit/src/test/java/com/gemstone/gemfire/test/junit/rules/tests/TestRunner.java b/geode-junit/src/test/java/com/gemstone/gemfire/test/junit/rules/tests/TestRunner.java index 684f452e933b..8c4cada462db 100755 --- a/geode-junit/src/test/java/com/gemstone/gemfire/test/junit/rules/tests/TestRunner.java +++ b/geode-junit/src/test/java/com/gemstone/gemfire/test/junit/rules/tests/TestRunner.java @@ -23,7 +23,6 @@ /** * Used by Rule Unit Tests to execute Test Cases. * - * @author Kirk Lund */ public class TestRunner { diff --git a/geode-lucene/src/main/java/com/gemstone/gemfire/cache/lucene/LuceneIndex.java b/geode-lucene/src/main/java/com/gemstone/gemfire/cache/lucene/LuceneIndex.java index 11c4e95911eb..7475fdebd53c 100644 --- a/geode-lucene/src/main/java/com/gemstone/gemfire/cache/lucene/LuceneIndex.java +++ b/geode-lucene/src/main/java/com/gemstone/gemfire/cache/lucene/LuceneIndex.java @@ -32,7 +32,6 @@ * The index name and region name together uniquely identifies the lucene index. *

    * - * @author Xiaojian Zhou */ @Experimental public interface LuceneIndex { diff --git a/geode-lucene/src/main/java/com/gemstone/gemfire/cache/lucene/LuceneQueryFactory.java b/geode-lucene/src/main/java/com/gemstone/gemfire/cache/lucene/LuceneQueryFactory.java index aa4d004b3402..198961ad82d8 100644 --- a/geode-lucene/src/main/java/com/gemstone/gemfire/cache/lucene/LuceneQueryFactory.java +++ b/geode-lucene/src/main/java/com/gemstone/gemfire/cache/lucene/LuceneQueryFactory.java @@ -27,7 +27,6 @@ * To use this factory configure it with the set methods and then * call {@link #create} to produce a {@link LuceneQuery} instance. * - * @author Xiaojian Zhou */ @Experimental public interface LuceneQueryFactory { diff --git a/geode-lucene/src/main/java/com/gemstone/gemfire/cache/lucene/LuceneQueryResults.java b/geode-lucene/src/main/java/com/gemstone/gemfire/cache/lucene/LuceneQueryResults.java index 68d4ec23ff4d..b49a15915f8e 100644 --- a/geode-lucene/src/main/java/com/gemstone/gemfire/cache/lucene/LuceneQueryResults.java +++ b/geode-lucene/src/main/java/com/gemstone/gemfire/cache/lucene/LuceneQueryResults.java @@ -27,7 +27,6 @@ *

    * Defines the interface for a container of lucene query result collected from function execution.
    * - * @author Xiaojian Zhou * * @param The type of the key * @param The type of the value diff --git a/geode-lucene/src/main/java/com/gemstone/gemfire/cache/lucene/LuceneResultStruct.java b/geode-lucene/src/main/java/com/gemstone/gemfire/cache/lucene/LuceneResultStruct.java index f904d93b88d0..bc587f52a14d 100644 --- a/geode-lucene/src/main/java/com/gemstone/gemfire/cache/lucene/LuceneResultStruct.java +++ b/geode-lucene/src/main/java/com/gemstone/gemfire/cache/lucene/LuceneResultStruct.java @@ -22,7 +22,6 @@ *

    * Abstract data structure for one item in query result. * - * @author Xiaojian Zhou */ @Experimental public interface LuceneResultStruct { diff --git a/geode-lucene/src/main/java/com/gemstone/gemfire/cache/lucene/LuceneService.java b/geode-lucene/src/main/java/com/gemstone/gemfire/cache/lucene/LuceneService.java index f4c665b03ddd..a42ab7245a41 100644 --- a/geode-lucene/src/main/java/com/gemstone/gemfire/cache/lucene/LuceneService.java +++ b/geode-lucene/src/main/java/com/gemstone/gemfire/cache/lucene/LuceneService.java @@ -64,7 +64,6 @@ * The item of the list is either the domain object or instance of {@link LuceneResultStruct} * * - * @author Xiaojian Zhou * */ @Experimental diff --git a/geode-lucene/src/main/java/com/gemstone/gemfire/cache/lucene/internal/LuceneServiceImpl.java b/geode-lucene/src/main/java/com/gemstone/gemfire/cache/lucene/internal/LuceneServiceImpl.java index ab48b1950d10..1a5dd1a51302 100644 --- a/geode-lucene/src/main/java/com/gemstone/gemfire/cache/lucene/internal/LuceneServiceImpl.java +++ b/geode-lucene/src/main/java/com/gemstone/gemfire/cache/lucene/internal/LuceneServiceImpl.java @@ -59,7 +59,6 @@ /** * Implementation of LuceneService to create lucene index and query. * - * @author Xiaojian Zhou * * @since 8.5 */ diff --git a/geode-pulse/src/main/java/com/vmware/gemfire/tools/pulse/internal/PulseAppListener.java b/geode-pulse/src/main/java/com/vmware/gemfire/tools/pulse/internal/PulseAppListener.java index 784caed7db5e..dd3b7b75bbfa 100644 --- a/geode-pulse/src/main/java/com/vmware/gemfire/tools/pulse/internal/PulseAppListener.java +++ b/geode-pulse/src/main/java/com/vmware/gemfire/tools/pulse/internal/PulseAppListener.java @@ -50,7 +50,6 @@ * This class is used for checking the application running mode i.e. Embedded or * not * - * @author Anand Hariharan * @since version 7.0.Beta 2012-09-23 * */ diff --git a/geode-pulse/src/main/java/com/vmware/gemfire/tools/pulse/internal/controllers/ExceptionHandlingAdvice.java b/geode-pulse/src/main/java/com/vmware/gemfire/tools/pulse/internal/controllers/ExceptionHandlingAdvice.java index 768c78e7a271..f98b5fd4b2d2 100644 --- a/geode-pulse/src/main/java/com/vmware/gemfire/tools/pulse/internal/controllers/ExceptionHandlingAdvice.java +++ b/geode-pulse/src/main/java/com/vmware/gemfire/tools/pulse/internal/controllers/ExceptionHandlingAdvice.java @@ -33,7 +33,6 @@ /** * For handling IO exception in our controllers * - * @author Riya Bhandekar * */ @ControllerAdvice diff --git a/geode-pulse/src/main/java/com/vmware/gemfire/tools/pulse/internal/controllers/PulseController.java b/geode-pulse/src/main/java/com/vmware/gemfire/tools/pulse/internal/controllers/PulseController.java index c8737ce0b487..5044211686e4 100644 --- a/geode-pulse/src/main/java/com/vmware/gemfire/tools/pulse/internal/controllers/PulseController.java +++ b/geode-pulse/src/main/java/com/vmware/gemfire/tools/pulse/internal/controllers/PulseController.java @@ -55,7 +55,6 @@ * This class contains the implementations for all http Ajax requests needs to * be served in Pulse. * - * @author azambre * @since version 7.5 */ @Controller diff --git a/geode-pulse/src/main/java/com/vmware/gemfire/tools/pulse/internal/data/Cluster.java b/geode-pulse/src/main/java/com/vmware/gemfire/tools/pulse/internal/data/Cluster.java index 732a1b0deb52..a6b33fd87c80 100644 --- a/geode-pulse/src/main/java/com/vmware/gemfire/tools/pulse/internal/data/Cluster.java +++ b/geode-pulse/src/main/java/com/vmware/gemfire/tools/pulse/internal/data/Cluster.java @@ -58,7 +58,6 @@ * Class Cluster This class is the Data Model for the data used for the Pulse * Web UI. * - * @author Anand Hariharan * @since version 7.0.Beta 2012-09-23 */ public class Cluster extends Thread { @@ -225,7 +224,6 @@ public Object[] getStatisticTrend(int trendId) { /** * Member Inner Class * - * @author Anand Hariharan * */ public static class Member { @@ -865,7 +863,6 @@ public void updateMemberClientsHMap( /** * Member Inner Class * - * @author Riya Bhandekar * */ public static class Statement { @@ -1493,7 +1490,6 @@ public void setMemberName(String memberName) { /** * Region Inner Class * - * @author Anchal * */ public static class Region { @@ -1800,7 +1796,6 @@ public void setRegionOnMembers(List regionOnMembers) { /** * Alert Inner Class * - * @author Anchal * */ public static class Alert { @@ -1897,7 +1892,6 @@ public static String formatToISOTimestamp(Date date) { /** * Client Inner Class * - * @author Anchal * */ public static class Client { @@ -2043,7 +2037,6 @@ public void setConnected(boolean isConnected) { /** * Gateway Receiver Inner Class * - * @author Anchal * */ public static class GatewayReceiver { @@ -2116,7 +2109,6 @@ public void setBatchSize(int batchSize) { /** * Gateway Sender Inner class * - * @author Anchal * */ public static class GatewaySender { @@ -2228,7 +2220,6 @@ public void setEventsExceedingAlertThreshold(int eventsExceedingAlertThreshold) /** * Async Event Queue Inner class * - * @author rbhandekar * */ public static class AsyncEventQueue { @@ -2896,7 +2887,6 @@ public boolean deleteQueryById(String userId, String queryId) { /** * inner class for creating Mock Data * - * @author Anand Hariharan * */ public class MockDataUpdater implements IClusterUpdater { @@ -3769,7 +3759,6 @@ public void addClusterStatement(String name, Statement stmt) { /** * This class is used for switching between production(JMX) and Mock Data * - * @author Anand Hariharan * */ public static class ClusterDataFactory { diff --git a/geode-pulse/src/main/java/com/vmware/gemfire/tools/pulse/internal/data/DataBrowser.java b/geode-pulse/src/main/java/com/vmware/gemfire/tools/pulse/internal/data/DataBrowser.java index dbad2dfb2e96..d6918a763d93 100644 --- a/geode-pulse/src/main/java/com/vmware/gemfire/tools/pulse/internal/data/DataBrowser.java +++ b/geode-pulse/src/main/java/com/vmware/gemfire/tools/pulse/internal/data/DataBrowser.java @@ -40,7 +40,6 @@ * Class DataBrowser This class contains Data browser functionalities for * managing queries and histories. * - * @author Sachin K * @since version 7.5.Beta 2013-03-25 */ public class DataBrowser { diff --git a/geode-pulse/src/main/java/com/vmware/gemfire/tools/pulse/internal/data/IClusterUpdater.java b/geode-pulse/src/main/java/com/vmware/gemfire/tools/pulse/internal/data/IClusterUpdater.java index 2b7e1a400c43..fff46b679c17 100644 --- a/geode-pulse/src/main/java/com/vmware/gemfire/tools/pulse/internal/data/IClusterUpdater.java +++ b/geode-pulse/src/main/java/com/vmware/gemfire/tools/pulse/internal/data/IClusterUpdater.java @@ -26,7 +26,6 @@ * Interface having updateData() function which is getting Override by both * MockDataUpdater and JMXDataUpdater * - * @author Anand Hariharan * @since version 7.0.Beta 2012-09-23 * */ diff --git a/geode-pulse/src/main/java/com/vmware/gemfire/tools/pulse/internal/data/JMXDataUpdater.java b/geode-pulse/src/main/java/com/vmware/gemfire/tools/pulse/internal/data/JMXDataUpdater.java index 8e4557a46213..50cec8e01655 100644 --- a/geode-pulse/src/main/java/com/vmware/gemfire/tools/pulse/internal/data/JMXDataUpdater.java +++ b/geode-pulse/src/main/java/com/vmware/gemfire/tools/pulse/internal/data/JMXDataUpdater.java @@ -69,7 +69,6 @@ * Class JMXDataUpdater Class used for creating JMX connection and getting all * the required MBeans * - * @author Anand Hariharan * * @since version 7.0.Beta 2012-09-23 */ diff --git a/geode-pulse/src/main/java/com/vmware/gemfire/tools/pulse/internal/data/JmxManagerFinder.java b/geode-pulse/src/main/java/com/vmware/gemfire/tools/pulse/internal/data/JmxManagerFinder.java index 3fb6d6a9b75d..9b5e4c4caee9 100644 --- a/geode-pulse/src/main/java/com/vmware/gemfire/tools/pulse/internal/data/JmxManagerFinder.java +++ b/geode-pulse/src/main/java/com/vmware/gemfire/tools/pulse/internal/data/JmxManagerFinder.java @@ -40,7 +40,6 @@ * GemFire's internal serialization codes and byte sequences have been hard * coded into this code. * - * @author darrel * @since version 7.0.Beta 2012-09-23 * */ @@ -74,7 +73,6 @@ public class JmxManagerFinder { * Describes the location of a jmx manager. If a jmx manager does not exist * then port will be 0. * - * @author darrel * */ public static class JmxManagerInfo { diff --git a/geode-pulse/src/main/java/com/vmware/gemfire/tools/pulse/internal/data/PulseConfig.java b/geode-pulse/src/main/java/com/vmware/gemfire/tools/pulse/internal/data/PulseConfig.java index 627e37c4dda5..36797cddef6f 100644 --- a/geode-pulse/src/main/java/com/vmware/gemfire/tools/pulse/internal/data/PulseConfig.java +++ b/geode-pulse/src/main/java/com/vmware/gemfire/tools/pulse/internal/data/PulseConfig.java @@ -26,7 +26,6 @@ * * PulseConfig is used for configuring Pulse application. * - * @author Sachin K * @since 7.0.1 * */ diff --git a/geode-pulse/src/main/java/com/vmware/gemfire/tools/pulse/internal/data/PulseVersion.java b/geode-pulse/src/main/java/com/vmware/gemfire/tools/pulse/internal/data/PulseVersion.java index eec433b642a9..7ac5f74f0b77 100644 --- a/geode-pulse/src/main/java/com/vmware/gemfire/tools/pulse/internal/data/PulseVersion.java +++ b/geode-pulse/src/main/java/com/vmware/gemfire/tools/pulse/internal/data/PulseVersion.java @@ -27,7 +27,6 @@ * This class is for holding Pulse Applications Version's details (like version * details, build details, source details, etc) from properties file * - * @author Sachin K * @since version Helios */ diff --git a/geode-pulse/src/main/java/com/vmware/gemfire/tools/pulse/internal/data/Repository.java b/geode-pulse/src/main/java/com/vmware/gemfire/tools/pulse/internal/data/Repository.java index 0dee7da8a5b5..5b5799d1cd59 100644 --- a/geode-pulse/src/main/java/com/vmware/gemfire/tools/pulse/internal/data/Repository.java +++ b/geode-pulse/src/main/java/com/vmware/gemfire/tools/pulse/internal/data/Repository.java @@ -31,7 +31,6 @@ /** * A Singleton instance of the memory cache for clusters. * - * @author Anand Hariharan * @since version 7.0.Beta 2012-09-23 */ public class Repository { diff --git a/geode-pulse/src/main/java/com/vmware/gemfire/tools/pulse/internal/log/LogWriter.java b/geode-pulse/src/main/java/com/vmware/gemfire/tools/pulse/internal/log/LogWriter.java index d4eac70f97ad..6bcc743079f1 100644 --- a/geode-pulse/src/main/java/com/vmware/gemfire/tools/pulse/internal/log/LogWriter.java +++ b/geode-pulse/src/main/java/com/vmware/gemfire/tools/pulse/internal/log/LogWriter.java @@ -24,7 +24,6 @@ * * LogWriter interface for Pulse Logging. * - * @author Sachin K * @since 7.0.1 * */ diff --git a/geode-pulse/src/main/java/com/vmware/gemfire/tools/pulse/internal/log/MessageFormatter.java b/geode-pulse/src/main/java/com/vmware/gemfire/tools/pulse/internal/log/MessageFormatter.java index e8cf816eefba..07787f2a58ff 100644 --- a/geode-pulse/src/main/java/com/vmware/gemfire/tools/pulse/internal/log/MessageFormatter.java +++ b/geode-pulse/src/main/java/com/vmware/gemfire/tools/pulse/internal/log/MessageFormatter.java @@ -38,7 +38,6 @@ * MessageFormatter is the custom formatter class for formatting the log * messages. * - * @author Sachin K * @since version 7.0.1 */ public class MessageFormatter extends Formatter { diff --git a/geode-pulse/src/main/java/com/vmware/gemfire/tools/pulse/internal/log/PulseLogWriter.java b/geode-pulse/src/main/java/com/vmware/gemfire/tools/pulse/internal/log/PulseLogWriter.java index 3706f12bfa43..c386f4cc9273 100644 --- a/geode-pulse/src/main/java/com/vmware/gemfire/tools/pulse/internal/log/PulseLogWriter.java +++ b/geode-pulse/src/main/java/com/vmware/gemfire/tools/pulse/internal/log/PulseLogWriter.java @@ -36,7 +36,6 @@ * * PulseLogWriter is the implementation of LogWriter. * - * @author Sachin K * @since 7.0.1 * */ diff --git a/geode-pulse/src/main/java/com/vmware/gemfire/tools/pulse/internal/log/PulseLogger.java b/geode-pulse/src/main/java/com/vmware/gemfire/tools/pulse/internal/log/PulseLogger.java index 777e65a1c789..6d9361b0e4fa 100644 --- a/geode-pulse/src/main/java/com/vmware/gemfire/tools/pulse/internal/log/PulseLogger.java +++ b/geode-pulse/src/main/java/com/vmware/gemfire/tools/pulse/internal/log/PulseLogger.java @@ -38,7 +38,6 @@ * PulseLogger is the custom logger class for Pulse Web Application. It logs * messages to the file in custom format. * - * @author Sachin K * @since version 7.0.Beta */ public class PulseLogger { @@ -106,7 +105,6 @@ public static Logger getLogger(String name) { * MessageFormatter is the custom formatter class for formatting the log * messages. * - * @author Sachin K * @since version 7.0.Beta 2012-09-23 */ private static class MessageFormatter extends Formatter { diff --git a/geode-pulse/src/main/java/com/vmware/gemfire/tools/pulse/internal/service/ClusterDetailsService.java b/geode-pulse/src/main/java/com/vmware/gemfire/tools/pulse/internal/service/ClusterDetailsService.java index 2efb6aa55148..b4dc9be9846c 100644 --- a/geode-pulse/src/main/java/com/vmware/gemfire/tools/pulse/internal/service/ClusterDetailsService.java +++ b/geode-pulse/src/main/java/com/vmware/gemfire/tools/pulse/internal/service/ClusterDetailsService.java @@ -39,7 +39,6 @@ * This service class has implementation for providing cluster's basic * statistical data. * - * @author azambare * @since version 7.5 */ diff --git a/geode-pulse/src/main/java/com/vmware/gemfire/tools/pulse/internal/service/ClusterDiskThroughputService.java b/geode-pulse/src/main/java/com/vmware/gemfire/tools/pulse/internal/service/ClusterDiskThroughputService.java index 0c1b56a5bdd5..096544ba09e0 100644 --- a/geode-pulse/src/main/java/com/vmware/gemfire/tools/pulse/internal/service/ClusterDiskThroughputService.java +++ b/geode-pulse/src/main/java/com/vmware/gemfire/tools/pulse/internal/service/ClusterDiskThroughputService.java @@ -35,7 +35,6 @@ * Class ClusterDiskThroughput This class contains implementations for getting * cluster's current disk throughput details and its trend over time * - * @author Sachin K. * @since version 7.0.Beta */ diff --git a/geode-pulse/src/main/java/com/vmware/gemfire/tools/pulse/internal/service/ClusterGCPausesService.java b/geode-pulse/src/main/java/com/vmware/gemfire/tools/pulse/internal/service/ClusterGCPausesService.java index 7c44234d907c..88e3a1b1b41e 100644 --- a/geode-pulse/src/main/java/com/vmware/gemfire/tools/pulse/internal/service/ClusterGCPausesService.java +++ b/geode-pulse/src/main/java/com/vmware/gemfire/tools/pulse/internal/service/ClusterGCPausesService.java @@ -37,7 +37,6 @@ * This class contains implementations of getting Cluster's GC Pauses (JVM * Pauses) Details and its trend over the time. * - * @author Anchal G * @since version 7.5 */ diff --git a/geode-pulse/src/main/java/com/vmware/gemfire/tools/pulse/internal/service/ClusterKeyStatisticsService.java b/geode-pulse/src/main/java/com/vmware/gemfire/tools/pulse/internal/service/ClusterKeyStatisticsService.java index 8ca4c0370963..5a3a7374495e 100644 --- a/geode-pulse/src/main/java/com/vmware/gemfire/tools/pulse/internal/service/ClusterKeyStatisticsService.java +++ b/geode-pulse/src/main/java/com/vmware/gemfire/tools/pulse/internal/service/ClusterKeyStatisticsService.java @@ -37,7 +37,6 @@ * This class contains implementations of getting Cluster's current Reads, * Writes and queries details and their trends over the time. * - * @author Anchal G * @since version 7.5 */ diff --git a/geode-pulse/src/main/java/com/vmware/gemfire/tools/pulse/internal/service/ClusterMemberService.java b/geode-pulse/src/main/java/com/vmware/gemfire/tools/pulse/internal/service/ClusterMemberService.java index 80e0b2e7ff3f..3c7d553159fd 100644 --- a/geode-pulse/src/main/java/com/vmware/gemfire/tools/pulse/internal/service/ClusterMemberService.java +++ b/geode-pulse/src/main/java/com/vmware/gemfire/tools/pulse/internal/service/ClusterMemberService.java @@ -40,7 +40,6 @@ * * This class contains implementations of getting Cluster Member's details * - * @author Anchal G * @since version 7.5 */ @Component diff --git a/geode-pulse/src/main/java/com/vmware/gemfire/tools/pulse/internal/service/ClusterMembersRGraphService.java b/geode-pulse/src/main/java/com/vmware/gemfire/tools/pulse/internal/service/ClusterMembersRGraphService.java index f9ca1372b3d2..14aab30ef2ef 100644 --- a/geode-pulse/src/main/java/com/vmware/gemfire/tools/pulse/internal/service/ClusterMembersRGraphService.java +++ b/geode-pulse/src/main/java/com/vmware/gemfire/tools/pulse/internal/service/ClusterMembersRGraphService.java @@ -43,7 +43,6 @@ * This class contains implementations of getting List of Cluster members and * their details * - * @author Anchal G * @since version 7.5 */ @Component diff --git a/geode-pulse/src/main/java/com/vmware/gemfire/tools/pulse/internal/service/ClusterMemoryUsageService.java b/geode-pulse/src/main/java/com/vmware/gemfire/tools/pulse/internal/service/ClusterMemoryUsageService.java index 830a44b43b7f..9de6dd00cdfb 100644 --- a/geode-pulse/src/main/java/com/vmware/gemfire/tools/pulse/internal/service/ClusterMemoryUsageService.java +++ b/geode-pulse/src/main/java/com/vmware/gemfire/tools/pulse/internal/service/ClusterMemoryUsageService.java @@ -37,7 +37,6 @@ * This class contains implementations of getting Cluster's overall current * memory usage details and its trend over the time. * - * @author Anchal G * @since version 7.5 */ diff --git a/geode-pulse/src/main/java/com/vmware/gemfire/tools/pulse/internal/service/ClusterRegionService.java b/geode-pulse/src/main/java/com/vmware/gemfire/tools/pulse/internal/service/ClusterRegionService.java index bb8950bfb72c..5c046cd3a399 100644 --- a/geode-pulse/src/main/java/com/vmware/gemfire/tools/pulse/internal/service/ClusterRegionService.java +++ b/geode-pulse/src/main/java/com/vmware/gemfire/tools/pulse/internal/service/ClusterRegionService.java @@ -46,7 +46,6 @@ * * This class contains implementations of getting Cluster's regions details * - * @author Anchal G * @since version 7.5 */ diff --git a/geode-pulse/src/main/java/com/vmware/gemfire/tools/pulse/internal/service/ClusterRegionsService.java b/geode-pulse/src/main/java/com/vmware/gemfire/tools/pulse/internal/service/ClusterRegionsService.java index 5d47d3fe4b5d..6f718ecc9d93 100644 --- a/geode-pulse/src/main/java/com/vmware/gemfire/tools/pulse/internal/service/ClusterRegionsService.java +++ b/geode-pulse/src/main/java/com/vmware/gemfire/tools/pulse/internal/service/ClusterRegionsService.java @@ -48,7 +48,6 @@ * * This class contains implementations of getting Cluster's regions details * - * @author Sachin K * @since version 7.5 */ diff --git a/geode-pulse/src/main/java/com/vmware/gemfire/tools/pulse/internal/service/ClusterSelectedRegionService.java b/geode-pulse/src/main/java/com/vmware/gemfire/tools/pulse/internal/service/ClusterSelectedRegionService.java index f19e78b2c516..841e140d21ed 100644 --- a/geode-pulse/src/main/java/com/vmware/gemfire/tools/pulse/internal/service/ClusterSelectedRegionService.java +++ b/geode-pulse/src/main/java/com/vmware/gemfire/tools/pulse/internal/service/ClusterSelectedRegionService.java @@ -47,7 +47,6 @@ * * This class contains implementations of getting Cluster's selected region details * - * @author Riya Bhandekar * @since version 7.5 cedar 2014-03-01 */ diff --git a/geode-pulse/src/main/java/com/vmware/gemfire/tools/pulse/internal/service/ClusterSelectedRegionsMemberService.java b/geode-pulse/src/main/java/com/vmware/gemfire/tools/pulse/internal/service/ClusterSelectedRegionsMemberService.java index f4430d5da3b2..ae2bb89878e1 100644 --- a/geode-pulse/src/main/java/com/vmware/gemfire/tools/pulse/internal/service/ClusterSelectedRegionsMemberService.java +++ b/geode-pulse/src/main/java/com/vmware/gemfire/tools/pulse/internal/service/ClusterSelectedRegionsMemberService.java @@ -44,7 +44,6 @@ * This class contains implementations of getting Cluster's selected region's member specific details * for all members in that region * - * @author Riya Bhandekar * @since version 7.5 cedar 2014-03-01 */ diff --git a/geode-pulse/src/main/java/com/vmware/gemfire/tools/pulse/internal/service/ClusterWANInfoService.java b/geode-pulse/src/main/java/com/vmware/gemfire/tools/pulse/internal/service/ClusterWANInfoService.java index 57172bd27cf0..953625194a77 100644 --- a/geode-pulse/src/main/java/com/vmware/gemfire/tools/pulse/internal/service/ClusterWANInfoService.java +++ b/geode-pulse/src/main/java/com/vmware/gemfire/tools/pulse/internal/service/ClusterWANInfoService.java @@ -39,7 +39,6 @@ * This class contains implementations of getting Cluster's WAN Informations * (connected clusters) * - * @author Sachin K * @since version 7.5 */ @Component diff --git a/geode-pulse/src/main/java/com/vmware/gemfire/tools/pulse/internal/service/MemberAsynchEventQueuesService.java b/geode-pulse/src/main/java/com/vmware/gemfire/tools/pulse/internal/service/MemberAsynchEventQueuesService.java index 70be387daf3f..d7c76cce59c8 100644 --- a/geode-pulse/src/main/java/com/vmware/gemfire/tools/pulse/internal/service/MemberAsynchEventQueuesService.java +++ b/geode-pulse/src/main/java/com/vmware/gemfire/tools/pulse/internal/service/MemberAsynchEventQueuesService.java @@ -38,7 +38,6 @@ * This class contains implementations of getting Asynchronous Event Queues * details of Cluster Member. * - * @author Sachin K * @since version 7.5 */ @Component diff --git a/geode-pulse/src/main/java/com/vmware/gemfire/tools/pulse/internal/service/MemberClientsService.java b/geode-pulse/src/main/java/com/vmware/gemfire/tools/pulse/internal/service/MemberClientsService.java index cb4a9e05beeb..335e6c41d116 100644 --- a/geode-pulse/src/main/java/com/vmware/gemfire/tools/pulse/internal/service/MemberClientsService.java +++ b/geode-pulse/src/main/java/com/vmware/gemfire/tools/pulse/internal/service/MemberClientsService.java @@ -40,7 +40,6 @@ * * This class contains implementations of getting Memeber's Clients. * - * @author Sachin K * @since version 7.5 */ @Component diff --git a/geode-pulse/src/main/java/com/vmware/gemfire/tools/pulse/internal/service/MemberDetailsService.java b/geode-pulse/src/main/java/com/vmware/gemfire/tools/pulse/internal/service/MemberDetailsService.java index 7e55712729a0..bcb5bca53749 100644 --- a/geode-pulse/src/main/java/com/vmware/gemfire/tools/pulse/internal/service/MemberDetailsService.java +++ b/geode-pulse/src/main/java/com/vmware/gemfire/tools/pulse/internal/service/MemberDetailsService.java @@ -38,7 +38,6 @@ * * This class contains implementations of getting Memeber's Statistics. * - * @author Sachin K * @since version 7.5 */ @Component diff --git a/geode-pulse/src/main/java/com/vmware/gemfire/tools/pulse/internal/service/MemberDiskThroughputService.java b/geode-pulse/src/main/java/com/vmware/gemfire/tools/pulse/internal/service/MemberDiskThroughputService.java index ce9fb59225a1..ff0ac751b227 100644 --- a/geode-pulse/src/main/java/com/vmware/gemfire/tools/pulse/internal/service/MemberDiskThroughputService.java +++ b/geode-pulse/src/main/java/com/vmware/gemfire/tools/pulse/internal/service/MemberDiskThroughputService.java @@ -38,7 +38,6 @@ * This class contains implementations for getting Memeber's current Disk * Throughput trends over the time. * - * @author Sachin K * @since version 7.5 */ @Component diff --git a/geode-pulse/src/main/java/com/vmware/gemfire/tools/pulse/internal/service/MemberGCPausesService.java b/geode-pulse/src/main/java/com/vmware/gemfire/tools/pulse/internal/service/MemberGCPausesService.java index adc01e1606ff..e82cc64431b2 100644 --- a/geode-pulse/src/main/java/com/vmware/gemfire/tools/pulse/internal/service/MemberGCPausesService.java +++ b/geode-pulse/src/main/java/com/vmware/gemfire/tools/pulse/internal/service/MemberGCPausesService.java @@ -38,7 +38,6 @@ * This class contains implementations of getting Memeber's GC Pauses (JVM * Pauses) details and its trend over the time. * - * @author Sachin K * @since version 7.5 */ diff --git a/geode-pulse/src/main/java/com/vmware/gemfire/tools/pulse/internal/service/MemberGatewayHubService.java b/geode-pulse/src/main/java/com/vmware/gemfire/tools/pulse/internal/service/MemberGatewayHubService.java index f1efd556c1b6..48c8b762ecf7 100644 --- a/geode-pulse/src/main/java/com/vmware/gemfire/tools/pulse/internal/service/MemberGatewayHubService.java +++ b/geode-pulse/src/main/java/com/vmware/gemfire/tools/pulse/internal/service/MemberGatewayHubService.java @@ -42,7 +42,6 @@ * This class contains implementations of getting Gateway Receivers and Senders * details of Cluster Member. * - * @author Sachin K * @since version 7.5 */ @Component diff --git a/geode-pulse/src/main/java/com/vmware/gemfire/tools/pulse/internal/service/MemberHeapUsageService.java b/geode-pulse/src/main/java/com/vmware/gemfire/tools/pulse/internal/service/MemberHeapUsageService.java index 0073881e0542..470584425fa2 100644 --- a/geode-pulse/src/main/java/com/vmware/gemfire/tools/pulse/internal/service/MemberHeapUsageService.java +++ b/geode-pulse/src/main/java/com/vmware/gemfire/tools/pulse/internal/service/MemberHeapUsageService.java @@ -38,7 +38,6 @@ * This class contains implementations of getting Memeber's current Heap Usage * and its trend over the time. * - * @author Sachin K * @since version 7.5 */ @Component diff --git a/geode-pulse/src/main/java/com/vmware/gemfire/tools/pulse/internal/service/MemberKeyStatisticsService.java b/geode-pulse/src/main/java/com/vmware/gemfire/tools/pulse/internal/service/MemberKeyStatisticsService.java index 9dc6126a0c05..470cd81e0a16 100644 --- a/geode-pulse/src/main/java/com/vmware/gemfire/tools/pulse/internal/service/MemberKeyStatisticsService.java +++ b/geode-pulse/src/main/java/com/vmware/gemfire/tools/pulse/internal/service/MemberKeyStatisticsService.java @@ -38,7 +38,6 @@ * This class contains implementations of getting Member's CPU, Memory and Read * Write details * - * @author Sachin K * @since version 7.5 */ @Component diff --git a/geode-pulse/src/main/java/com/vmware/gemfire/tools/pulse/internal/service/MemberRegionsService.java b/geode-pulse/src/main/java/com/vmware/gemfire/tools/pulse/internal/service/MemberRegionsService.java index 2c17886057b5..2847993c965d 100644 --- a/geode-pulse/src/main/java/com/vmware/gemfire/tools/pulse/internal/service/MemberRegionsService.java +++ b/geode-pulse/src/main/java/com/vmware/gemfire/tools/pulse/internal/service/MemberRegionsService.java @@ -41,7 +41,6 @@ * * This class contains implementations of getting Memeber's Regions details. * - * @author Sachin K * @since version 7.5 */ diff --git a/geode-pulse/src/main/java/com/vmware/gemfire/tools/pulse/internal/service/MembersListService.java b/geode-pulse/src/main/java/com/vmware/gemfire/tools/pulse/internal/service/MembersListService.java index 3a730c5cc601..62af04c794d3 100644 --- a/geode-pulse/src/main/java/com/vmware/gemfire/tools/pulse/internal/service/MembersListService.java +++ b/geode-pulse/src/main/java/com/vmware/gemfire/tools/pulse/internal/service/MembersListService.java @@ -35,7 +35,6 @@ * * This class contains implementations of getting list of Cluster Members. * - * @author Sachin K * @since version 7.5 */ @Component diff --git a/geode-pulse/src/main/java/com/vmware/gemfire/tools/pulse/internal/service/PulseService.java b/geode-pulse/src/main/java/com/vmware/gemfire/tools/pulse/internal/service/PulseService.java index e01c9110114d..cb5f19b98d87 100644 --- a/geode-pulse/src/main/java/com/vmware/gemfire/tools/pulse/internal/service/PulseService.java +++ b/geode-pulse/src/main/java/com/vmware/gemfire/tools/pulse/internal/service/PulseService.java @@ -28,7 +28,6 @@ * * This is a base class for all services in pulse. * - * @author azambare * @since version 7.5 */ public interface PulseService { diff --git a/geode-pulse/src/main/java/com/vmware/gemfire/tools/pulse/internal/service/PulseServiceFactory.java b/geode-pulse/src/main/java/com/vmware/gemfire/tools/pulse/internal/service/PulseServiceFactory.java index 9f4181c98c9a..88b81589e5ad 100644 --- a/geode-pulse/src/main/java/com/vmware/gemfire/tools/pulse/internal/service/PulseServiceFactory.java +++ b/geode-pulse/src/main/java/com/vmware/gemfire/tools/pulse/internal/service/PulseServiceFactory.java @@ -28,7 +28,6 @@ /** * Class PulseServiceFactory * - * @author azambare * @since version 7.5 */ @Component diff --git a/geode-pulse/src/main/java/com/vmware/gemfire/tools/pulse/internal/service/PulseVersionService.java b/geode-pulse/src/main/java/com/vmware/gemfire/tools/pulse/internal/service/PulseVersionService.java index 7d6a7efe57a9..97a269200d2d 100644 --- a/geode-pulse/src/main/java/com/vmware/gemfire/tools/pulse/internal/service/PulseVersionService.java +++ b/geode-pulse/src/main/java/com/vmware/gemfire/tools/pulse/internal/service/PulseVersionService.java @@ -36,7 +36,6 @@ * details (like version details, build details, source details, etc) from * properties file * - * @author Sachin K * @since version 7.0.Beta */ diff --git a/geode-pulse/src/main/java/com/vmware/gemfire/tools/pulse/internal/service/QueryStatisticsService.java b/geode-pulse/src/main/java/com/vmware/gemfire/tools/pulse/internal/service/QueryStatisticsService.java index a20a2ed6e165..69f509076b38 100644 --- a/geode-pulse/src/main/java/com/vmware/gemfire/tools/pulse/internal/service/QueryStatisticsService.java +++ b/geode-pulse/src/main/java/com/vmware/gemfire/tools/pulse/internal/service/QueryStatisticsService.java @@ -38,7 +38,6 @@ * This class returns top N queries based on pagination and filtering criteria * if any * - * @author Riya Bhandekar * @since version 7.5 */ @Component diff --git a/geode-pulse/src/main/java/com/vmware/gemfire/tools/pulse/internal/service/SystemAlertsService.java b/geode-pulse/src/main/java/com/vmware/gemfire/tools/pulse/internal/service/SystemAlertsService.java index 4aa556035ed9..070044870281 100644 --- a/geode-pulse/src/main/java/com/vmware/gemfire/tools/pulse/internal/service/SystemAlertsService.java +++ b/geode-pulse/src/main/java/com/vmware/gemfire/tools/pulse/internal/service/SystemAlertsService.java @@ -38,7 +38,6 @@ * This class contains implementations of getting system's alerts details (like * errors, warnings and severe errors). * - * @author Anchal G * @since version 7.5 */ diff --git a/geode-pulse/src/main/java/com/vmware/gemfire/tools/pulse/internal/util/ConnectionUtil.java b/geode-pulse/src/main/java/com/vmware/gemfire/tools/pulse/internal/util/ConnectionUtil.java index 6dca65d8a4aa..99e62e24e078 100644 --- a/geode-pulse/src/main/java/com/vmware/gemfire/tools/pulse/internal/util/ConnectionUtil.java +++ b/geode-pulse/src/main/java/com/vmware/gemfire/tools/pulse/internal/util/ConnectionUtil.java @@ -26,7 +26,6 @@ /** * - * @author rishim * */ public class ConnectionUtil { diff --git a/geode-pulse/src/main/java/com/vmware/gemfire/tools/pulse/internal/util/IPAddressUtil.java b/geode-pulse/src/main/java/com/vmware/gemfire/tools/pulse/internal/util/IPAddressUtil.java index 4acd4c9f4b44..b00730a6bc66 100644 --- a/geode-pulse/src/main/java/com/vmware/gemfire/tools/pulse/internal/util/IPAddressUtil.java +++ b/geode-pulse/src/main/java/com/vmware/gemfire/tools/pulse/internal/util/IPAddressUtil.java @@ -31,7 +31,6 @@ * Class IPAddressUtil This is utility class for checking whether ip address is * versions i.e. IPv4 or IPv6 address * - * @author Sachin K * * @since version 7.0.1 */ diff --git a/geode-pulse/src/main/java/com/vmware/gemfire/tools/pulse/internal/util/StringUtils.java b/geode-pulse/src/main/java/com/vmware/gemfire/tools/pulse/internal/util/StringUtils.java index f8aabedee6d6..76788469580c 100644 --- a/geode-pulse/src/main/java/com/vmware/gemfire/tools/pulse/internal/util/StringUtils.java +++ b/geode-pulse/src/main/java/com/vmware/gemfire/tools/pulse/internal/util/StringUtils.java @@ -22,7 +22,6 @@ /** * Class StringUtils This is utility class for string. * - * @author Sachin K * * @since version 7.0.1 */ diff --git a/geode-pulse/src/main/java/com/vmware/gemfire/tools/pulse/internal/util/TimeUtils.java b/geode-pulse/src/main/java/com/vmware/gemfire/tools/pulse/internal/util/TimeUtils.java index 83191df2809f..508d8ff0fb5a 100644 --- a/geode-pulse/src/main/java/com/vmware/gemfire/tools/pulse/internal/util/TimeUtils.java +++ b/geode-pulse/src/main/java/com/vmware/gemfire/tools/pulse/internal/util/TimeUtils.java @@ -24,7 +24,6 @@ * * This is utility class used for conversions of time. * - * @author Sachin K * * @since version 7.0.1 */ diff --git a/geode-pulse/src/main/webapp/scripts/pulsescript/PulseCallbacks.js b/geode-pulse/src/main/webapp/scripts/pulsescript/PulseCallbacks.js index 976fb8cdbd62..adfe90c9d551 100644 --- a/geode-pulse/src/main/webapp/scripts/pulsescript/PulseCallbacks.js +++ b/geode-pulse/src/main/webapp/scripts/pulsescript/PulseCallbacks.js @@ -24,7 +24,6 @@ * JSON response. * * @name PulseCallbacks.js - * @author ashutosh zambare. * @version 1.0 * */ diff --git a/geode-pulse/src/main/webapp/scripts/pulsescript/PulseFunctions.js b/geode-pulse/src/main/webapp/scripts/pulsescript/PulseFunctions.js index 05e2868c2307..fd1e8de27e3b 100644 --- a/geode-pulse/src/main/webapp/scripts/pulsescript/PulseFunctions.js +++ b/geode-pulse/src/main/webapp/scripts/pulsescript/PulseFunctions.js @@ -19,7 +19,6 @@ /** * @name PulseFunctions.js - * @author Ashutosh Zambare. * @version 1.0 * */ diff --git a/geode-pulse/src/main/webapp/scripts/pulsescript/regionView.js b/geode-pulse/src/main/webapp/scripts/pulsescript/regionView.js index 27c1ca0885f0..f8055b1202a0 100644 --- a/geode-pulse/src/main/webapp/scripts/pulsescript/regionView.js +++ b/geode-pulse/src/main/webapp/scripts/pulsescript/regionView.js @@ -20,7 +20,6 @@ /* Region Details javascript with pop-up with spark-lines opening from each tree-map cell showing member level region information. * This page opens from Data view on cluster page and links to member details page by clicking on tree map cell. * - * @author Riya Bhandekar * @since version 7.5 Cedar 2014-03-01 * */ diff --git a/geode-pulse/src/test/java/com/vmware/gemfire/tools/pulse/testbed/GemFireDistributedSystem.java b/geode-pulse/src/test/java/com/vmware/gemfire/tools/pulse/testbed/GemFireDistributedSystem.java index 4c682d8c01df..12efa1a2ab20 100644 --- a/geode-pulse/src/test/java/com/vmware/gemfire/tools/pulse/testbed/GemFireDistributedSystem.java +++ b/geode-pulse/src/test/java/com/vmware/gemfire/tools/pulse/testbed/GemFireDistributedSystem.java @@ -34,7 +34,6 @@ * 3. PropFile Writing * 4. Link to other remote systems, topology - multi-cluster [7.5] * - * @author tushark * */ public class GemFireDistributedSystem { diff --git a/geode-pulse/src/test/java/com/vmware/gemfire/tools/pulse/testbed/driver/PulseUITest.java b/geode-pulse/src/test/java/com/vmware/gemfire/tools/pulse/testbed/driver/PulseUITest.java index 53fc3bd8903f..f640b0e092e0 100644 --- a/geode-pulse/src/test/java/com/vmware/gemfire/tools/pulse/testbed/driver/PulseUITest.java +++ b/geode-pulse/src/test/java/com/vmware/gemfire/tools/pulse/testbed/driver/PulseUITest.java @@ -41,8 +41,6 @@ import com.vmware.gemfire.tools.pulse.testbed.TestBed; /** - * @author Sushant Rawal - * @author tushark * */ @Ignore diff --git a/geode-pulse/src/test/java/com/vmware/gemfire/tools/pulse/tests/PulseAutomatedTest.java b/geode-pulse/src/test/java/com/vmware/gemfire/tools/pulse/tests/PulseAutomatedTest.java index 848cf62212c2..d55447acf02d 100644 --- a/geode-pulse/src/test/java/com/vmware/gemfire/tools/pulse/tests/PulseAutomatedTest.java +++ b/geode-pulse/src/test/java/com/vmware/gemfire/tools/pulse/tests/PulseAutomatedTest.java @@ -23,7 +23,6 @@ * 3. * * -* @author Smita Phad * @version 1.0 * @since 2014-04-02 */ diff --git a/geode-pulse/src/test/java/com/vmware/gemfire/tools/pulse/tests/RegionOnMember.java b/geode-pulse/src/test/java/com/vmware/gemfire/tools/pulse/tests/RegionOnMember.java index 1b7d4c389714..b56a6208b45f 100644 --- a/geode-pulse/src/test/java/com/vmware/gemfire/tools/pulse/tests/RegionOnMember.java +++ b/geode-pulse/src/test/java/com/vmware/gemfire/tools/pulse/tests/RegionOnMember.java @@ -22,7 +22,6 @@ * Region on member mbean * * - * @author rbhandekar * */ public class RegionOnMember extends JMXBaseBean implements RegionOnMemberMBean { diff --git a/geode-pulse/src/test/java/com/vmware/gemfire/tools/pulse/tests/RegionOnMemberMBean.java b/geode-pulse/src/test/java/com/vmware/gemfire/tools/pulse/tests/RegionOnMemberMBean.java index e67da24ce542..9fa384567cc4 100644 --- a/geode-pulse/src/test/java/com/vmware/gemfire/tools/pulse/tests/RegionOnMemberMBean.java +++ b/geode-pulse/src/test/java/com/vmware/gemfire/tools/pulse/tests/RegionOnMemberMBean.java @@ -21,7 +21,6 @@ /** * Region on members mbean * - * @author rbhandekar * */ public interface RegionOnMemberMBean { diff --git a/geode-pulse/src/test/java/com/vmware/gemfire/tools/pulse/tests/junit/BaseServiceTest.java b/geode-pulse/src/test/java/com/vmware/gemfire/tools/pulse/tests/junit/BaseServiceTest.java index 8de628c39172..3801344bc8ef 100644 --- a/geode-pulse/src/test/java/com/vmware/gemfire/tools/pulse/tests/junit/BaseServiceTest.java +++ b/geode-pulse/src/test/java/com/vmware/gemfire/tools/pulse/tests/junit/BaseServiceTest.java @@ -52,7 +52,6 @@ * * Sub-classes should ensure that they call doLogin() in @BeforeClass and doLogout() in @AfterClass otherwise tests will fail. * - * @author rbhandekar * */ @Ignore @@ -99,7 +98,6 @@ public static void beforeClass() throws Exception{ } /** * - * @author rbhandekar * @throws java.lang.Exception */ @Before @@ -110,7 +108,6 @@ public void setUp() throws Exception { /** * - * @author rbhandekar * @throws java.lang.Exception */ @After diff --git a/geode-pulse/src/test/java/com/vmware/gemfire/tools/pulse/tests/junit/ClusterSelectedRegionServiceTest.java b/geode-pulse/src/test/java/com/vmware/gemfire/tools/pulse/tests/junit/ClusterSelectedRegionServiceTest.java index 9cbdc945eac8..380bf3e5a163 100644 --- a/geode-pulse/src/test/java/com/vmware/gemfire/tools/pulse/tests/junit/ClusterSelectedRegionServiceTest.java +++ b/geode-pulse/src/test/java/com/vmware/gemfire/tools/pulse/tests/junit/ClusterSelectedRegionServiceTest.java @@ -37,7 +37,6 @@ /** * JUnit Tests for ClusterSelectedRegionService in the back-end server for region detail page * - * @author rbhandekar * */ @Ignore @@ -45,7 +44,6 @@ public class ClusterSelectedRegionServiceTest extends BaseServiceTest { /** * - * @author rbhandekar * @throws java.lang.Exception */ @BeforeClass @@ -56,7 +54,6 @@ public static void setUpBeforeClass() throws Exception { /** * - * @author rbhandekar * @throws java.lang.Exception */ @AfterClass @@ -67,7 +64,6 @@ public static void tearDownAfterClass() throws Exception { /** * - * @author rbhandekar * @throws java.lang.Exception */ @Override @@ -77,7 +73,6 @@ public void setUp() throws Exception { /** * - * @author rbhandekar * @throws java.lang.Exception */ @Override @@ -88,7 +83,6 @@ public void tearDown() throws Exception { /** * Tests that service returns json object * - * @author rbhandekar */ @Test public void testResponseNotNull() { @@ -134,7 +128,6 @@ public void testResponseNotNull() { * * Tests that response is for same logged in user * - * @author rbhandekar */ @Test public void testResponseUsername() { @@ -186,7 +179,6 @@ public void testResponseUsername() { * * Test method for {@link com.vmware.gemfire.tools.pulse.internal.service.ClusterSelectedRegionService#execute(javax.servlet.http.HttpServletRequest)}. * - * @author rbhandekar */ @Test public void testResponseRegionPathMatches() { @@ -241,7 +233,6 @@ public void testResponseRegionPathMatches() { * * Test method for {@link com.vmware.gemfire.tools.pulse.internal.service.ClusterSelectedRegionService#execute(javax.servlet.http.HttpServletRequest)}. * - * @author rbhandekar */ @Test public void testResponseNonExistentRegion() { @@ -294,7 +285,6 @@ public void testResponseNonExistentRegion() { * * Test method for {@link com.vmware.gemfire.tools.pulse.internal.service.ClusterSelectedRegionService#execute(javax.servlet.http.HttpServletRequest)}. * - * @author rbhandekar */ @Test public void testResponseMemerberCount() { diff --git a/geode-pulse/src/test/java/com/vmware/gemfire/tools/pulse/tests/junit/ClusterSelectedRegionsMemberServiceTest.java b/geode-pulse/src/test/java/com/vmware/gemfire/tools/pulse/tests/junit/ClusterSelectedRegionsMemberServiceTest.java index ae59cb6fe12d..c1caf907dd3e 100644 --- a/geode-pulse/src/test/java/com/vmware/gemfire/tools/pulse/tests/junit/ClusterSelectedRegionsMemberServiceTest.java +++ b/geode-pulse/src/test/java/com/vmware/gemfire/tools/pulse/tests/junit/ClusterSelectedRegionsMemberServiceTest.java @@ -37,7 +37,6 @@ /** * JUnit Tests for ClusterSelectedRegionsMemberService in the back-end server for region detail page * - * @author rbhandekar * */ @Ignore @@ -46,7 +45,6 @@ public class ClusterSelectedRegionsMemberServiceTest extends BaseServiceTest { /** * @throws java.lang.Exception * - * @author rbhandekar */ @BeforeClass public static void setUpBeforeClass() throws Exception { @@ -57,7 +55,6 @@ public static void setUpBeforeClass() throws Exception { /** * @throws java.lang.Exception * - * @author rbhandekar */ @AfterClass public static void tearDownAfterClass() throws Exception { @@ -86,7 +83,6 @@ public void tearDown() throws Exception { /** * Tests that service returns json object * - * @author rbhandekar */ @Test public void testResponseNotNull() { @@ -133,7 +129,6 @@ public void testResponseNotNull() { * * Tests that response is for same logged in user * - * @author rbhandekar */ @Test public void testResponseUsername() { @@ -185,7 +180,6 @@ public void testResponseUsername() { * Tests that response is for same region * * - * @author rbhandekar */ @Test public void testResponseRegionOnMemberInfoMatches() { @@ -248,7 +242,6 @@ public void testResponseRegionOnMemberInfoMatches() { * Tests that response is for same region * * - * @author rbhandekar */ @Test public void testResponseNonExistentRegion() { @@ -301,7 +294,6 @@ public void testResponseNonExistentRegion() { * Tests that response is for same region * * - * @author rbhandekar */ @Test public void testResponseRegionOnMemberAccessor() { diff --git a/geode-pulse/src/test/java/com/vmware/gemfire/tools/pulse/tests/junit/MemberGatewayHubServiceTest.java b/geode-pulse/src/test/java/com/vmware/gemfire/tools/pulse/tests/junit/MemberGatewayHubServiceTest.java index 7e7416277e43..8669b53ac1f9 100644 --- a/geode-pulse/src/test/java/com/vmware/gemfire/tools/pulse/tests/junit/MemberGatewayHubServiceTest.java +++ b/geode-pulse/src/test/java/com/vmware/gemfire/tools/pulse/tests/junit/MemberGatewayHubServiceTest.java @@ -37,7 +37,6 @@ /** * JUnit Tests for MemberGatewayHubService in the back-end server for region detail page * - * @author rbhandekar * */ @Ignore @@ -45,7 +44,6 @@ public class MemberGatewayHubServiceTest extends BaseServiceTest { /** * - * @author rbhandekar * @throws java.lang.Exception */ @BeforeClass @@ -56,7 +54,6 @@ public static void setUpBeforeClass() throws Exception { /** * - * @author rbhandekar * @throws java.lang.Exception */ @AfterClass @@ -67,7 +64,6 @@ public static void tearDownAfterClass() throws Exception { /** * - * @author rbhandekar * @throws java.lang.Exception */ @Override @@ -77,7 +73,6 @@ public void setUp() throws Exception { /** * - * @author rbhandekar * @throws java.lang.Exception */ @Override @@ -88,7 +83,6 @@ public void tearDown() throws Exception { /** * Tests that service returns json object * - * @author rbhandekar */ @Test public void testResponseNotNull() { @@ -136,7 +130,6 @@ public void testResponseNotNull() { * * Test method for {@link com.vmware.gemfire.tools.pulse.internal.service.MemberGatewayHubService#execute(javax.servlet.http.HttpServletRequest)}. * - * @author rbhandekar */ @Test public void testResponseIsGatewaySender() { @@ -190,7 +183,6 @@ public void testResponseIsGatewaySender() { * * Test method for {@link com.vmware.gemfire.tools.pulse.internal.service.MemberGatewayHubService#execute(javax.servlet.http.HttpServletRequest)}. * - * @author rbhandekar */ @Test public void testResponseGatewaySenderCount() { @@ -247,7 +239,6 @@ public void testResponseGatewaySenderCount() { * * Test method for {@link com.vmware.gemfire.tools.pulse.internal.service.MemberGatewayHubService#execute(javax.servlet.http.HttpServletRequest)}. * - * @author rbhandekar */ @Test public void testResponseGatewaySenderProperties() { @@ -307,7 +298,6 @@ public void testResponseGatewaySenderProperties() { * * Test method for {@link com.vmware.gemfire.tools.pulse.internal.service.MemberGatewayHubService#execute(javax.servlet.http.HttpServletRequest)}. * - * @author rbhandekar */ @Test public void testResponseAsyncEventQueueProperties() { @@ -370,7 +360,6 @@ public void testResponseAsyncEventQueueProperties() { * * Test method for {@link com.vmware.gemfire.tools.pulse.internal.service.MemberGatewayHubService#execute(javax.servlet.http.HttpServletRequest)}. * - * @author rbhandekar */ @Test public void testResponseNoAsyncEventQueues() { diff --git a/geode-rebalancer/src/main/java/com/gemstone/gemfire/cache/util/AutoBalancer.java b/geode-rebalancer/src/main/java/com/gemstone/gemfire/cache/util/AutoBalancer.java index 02d0c2a2c2dc..a6488f97fa86 100644 --- a/geode-rebalancer/src/main/java/com/gemstone/gemfire/cache/util/AutoBalancer.java +++ b/geode-rebalancer/src/main/java/com/gemstone/gemfire/cache/util/AutoBalancer.java @@ -71,7 +71,6 @@ *

  • {@link AutoBalancer#SCHEDULE} *
  • TBD THRESHOLDS * - * @author Ashvin Agrawal */ public class AutoBalancer implements Declarable { /** diff --git a/geode-wan/src/main/java/com/gemstone/gemfire/cache/client/internal/SenderProxy.java b/geode-wan/src/main/java/com/gemstone/gemfire/cache/client/internal/SenderProxy.java index cf1d9fabfbe5..acaa10903c88 100644 --- a/geode-wan/src/main/java/com/gemstone/gemfire/cache/client/internal/SenderProxy.java +++ b/geode-wan/src/main/java/com/gemstone/gemfire/cache/client/internal/SenderProxy.java @@ -23,7 +23,6 @@ /** * Used to send operations from a sender to a receiver. - * @author skumar * @since 8.1 */ public class SenderProxy extends ServerProxy{ diff --git a/geode-wan/src/main/java/com/gemstone/gemfire/cache/client/internal/locator/wan/LocatorDiscovery.java b/geode-wan/src/main/java/com/gemstone/gemfire/cache/client/internal/locator/wan/LocatorDiscovery.java index 51468d3c25a8..cae5030de374 100644 --- a/geode-wan/src/main/java/com/gemstone/gemfire/cache/client/internal/locator/wan/LocatorDiscovery.java +++ b/geode-wan/src/main/java/com/gemstone/gemfire/cache/client/internal/locator/wan/LocatorDiscovery.java @@ -36,7 +36,6 @@ * with local locators(within the site) as well as remote locators (across the * site) * - * @author kbachhav * @since 7.0 */ public class LocatorDiscovery{ diff --git a/geode-wan/src/main/java/com/gemstone/gemfire/cache/client/internal/locator/wan/LocatorHelper.java b/geode-wan/src/main/java/com/gemstone/gemfire/cache/client/internal/locator/wan/LocatorHelper.java index 6233445fd2c5..1f36b126df1d 100644 --- a/geode-wan/src/main/java/com/gemstone/gemfire/cache/client/internal/locator/wan/LocatorHelper.java +++ b/geode-wan/src/main/java/com/gemstone/gemfire/cache/client/internal/locator/wan/LocatorHelper.java @@ -30,7 +30,6 @@ /** * This is a helper class which helps to add the locator information to the allLocatorInfoMap. * - * @author Kishor Bachhav * */ public class LocatorHelper { diff --git a/geode-wan/src/main/java/com/gemstone/gemfire/cache/client/internal/locator/wan/LocatorMembershipListenerImpl.java b/geode-wan/src/main/java/com/gemstone/gemfire/cache/client/internal/locator/wan/LocatorMembershipListenerImpl.java index 83355f511c3f..4a497646ed46 100644 --- a/geode-wan/src/main/java/com/gemstone/gemfire/cache/client/internal/locator/wan/LocatorMembershipListenerImpl.java +++ b/geode-wan/src/main/java/com/gemstone/gemfire/cache/client/internal/locator/wan/LocatorMembershipListenerImpl.java @@ -55,7 +55,6 @@ * An implementation of * {@link com.gemstone.gemfire.cache.client.internal.locator.wan.LocatorMembershipListener} * - * @author kbachhav * */ public class LocatorMembershipListenerImpl implements LocatorMembershipListener { diff --git a/geode-wan/src/main/java/com/gemstone/gemfire/cache/client/internal/locator/wan/RemoteLocatorJoinRequest.java b/geode-wan/src/main/java/com/gemstone/gemfire/cache/client/internal/locator/wan/RemoteLocatorJoinRequest.java index 5205f533a378..08936530a296 100644 --- a/geode-wan/src/main/java/com/gemstone/gemfire/cache/client/internal/locator/wan/RemoteLocatorJoinRequest.java +++ b/geode-wan/src/main/java/com/gemstone/gemfire/cache/client/internal/locator/wan/RemoteLocatorJoinRequest.java @@ -29,9 +29,6 @@ /** * Requests remote locators of a remote WAN site * - * @author Suranjan Kumar - * @author Yogesh Mahajan - * @author Kishor Bachhav * * @since 6.6 * diff --git a/geode-wan/src/main/java/com/gemstone/gemfire/cache/client/internal/locator/wan/RemoteLocatorJoinResponse.java b/geode-wan/src/main/java/com/gemstone/gemfire/cache/client/internal/locator/wan/RemoteLocatorJoinResponse.java index 5d563f75b074..42c3bb02ae7c 100644 --- a/geode-wan/src/main/java/com/gemstone/gemfire/cache/client/internal/locator/wan/RemoteLocatorJoinResponse.java +++ b/geode-wan/src/main/java/com/gemstone/gemfire/cache/client/internal/locator/wan/RemoteLocatorJoinResponse.java @@ -33,9 +33,6 @@ /** * List of remote locators as a response * - * @author Suranjan Kumar - * @author Yogesh Mahajan - * @author Kishor Bachhav * * */ diff --git a/geode-wan/src/main/java/com/gemstone/gemfire/cache/client/internal/locator/wan/RemoteLocatorPingRequest.java b/geode-wan/src/main/java/com/gemstone/gemfire/cache/client/internal/locator/wan/RemoteLocatorPingRequest.java index c13bba93b455..a1cb951927f5 100644 --- a/geode-wan/src/main/java/com/gemstone/gemfire/cache/client/internal/locator/wan/RemoteLocatorPingRequest.java +++ b/geode-wan/src/main/java/com/gemstone/gemfire/cache/client/internal/locator/wan/RemoteLocatorPingRequest.java @@ -25,7 +25,6 @@ /** * - * @author Kishor Bachhav * */ diff --git a/geode-wan/src/main/java/com/gemstone/gemfire/cache/client/internal/locator/wan/RemoteLocatorPingResponse.java b/geode-wan/src/main/java/com/gemstone/gemfire/cache/client/internal/locator/wan/RemoteLocatorPingResponse.java index 1e3b41bfb17c..54fdc0442c80 100644 --- a/geode-wan/src/main/java/com/gemstone/gemfire/cache/client/internal/locator/wan/RemoteLocatorPingResponse.java +++ b/geode-wan/src/main/java/com/gemstone/gemfire/cache/client/internal/locator/wan/RemoteLocatorPingResponse.java @@ -25,7 +25,6 @@ /** * - * @author Kishor Bachhav */ public class RemoteLocatorPingResponse implements DataSerializableFixedID { diff --git a/geode-wan/src/main/java/com/gemstone/gemfire/cache/client/internal/locator/wan/RemoteLocatorRequest.java b/geode-wan/src/main/java/com/gemstone/gemfire/cache/client/internal/locator/wan/RemoteLocatorRequest.java index 3a4a276b5e78..d23ca93454d8 100644 --- a/geode-wan/src/main/java/com/gemstone/gemfire/cache/client/internal/locator/wan/RemoteLocatorRequest.java +++ b/geode-wan/src/main/java/com/gemstone/gemfire/cache/client/internal/locator/wan/RemoteLocatorRequest.java @@ -24,9 +24,6 @@ import com.gemstone.gemfire.internal.Version; /** * - * @author Suranjan Kumar - * @author Yogesh Mahajan - * @author Kishor Bachhav * */ public class RemoteLocatorRequest implements DataSerializableFixedID{ diff --git a/geode-wan/src/main/java/com/gemstone/gemfire/cache/client/internal/locator/wan/RemoteLocatorResponse.java b/geode-wan/src/main/java/com/gemstone/gemfire/cache/client/internal/locator/wan/RemoteLocatorResponse.java index 97929525b6f4..a7ff6fde5580 100644 --- a/geode-wan/src/main/java/com/gemstone/gemfire/cache/client/internal/locator/wan/RemoteLocatorResponse.java +++ b/geode-wan/src/main/java/com/gemstone/gemfire/cache/client/internal/locator/wan/RemoteLocatorResponse.java @@ -27,9 +27,6 @@ /** * - * @author Suranjan Kumar - * @author Yogesh Mahajan - * @author Kishor Bachhav * */ public class RemoteLocatorResponse implements DataSerializableFixedID{ diff --git a/geode-wan/src/main/java/com/gemstone/gemfire/internal/cache/wan/GatewayReceiverFactoryImpl.java b/geode-wan/src/main/java/com/gemstone/gemfire/internal/cache/wan/GatewayReceiverFactoryImpl.java index 825d665568cc..bd9476b0a5ea 100644 --- a/geode-wan/src/main/java/com/gemstone/gemfire/internal/cache/wan/GatewayReceiverFactoryImpl.java +++ b/geode-wan/src/main/java/com/gemstone/gemfire/internal/cache/wan/GatewayReceiverFactoryImpl.java @@ -32,8 +32,6 @@ import com.gemstone.gemfire.internal.i18n.LocalizedStrings; /** - * @author Suranjan Kumar - * @author Yogesh Mahajan * * @since 7.0 */ diff --git a/geode-wan/src/main/java/com/gemstone/gemfire/internal/cache/wan/GatewayReceiverImpl.java b/geode-wan/src/main/java/com/gemstone/gemfire/internal/cache/wan/GatewayReceiverImpl.java index 2b738097a6d7..323950609c47 100644 --- a/geode-wan/src/main/java/com/gemstone/gemfire/internal/cache/wan/GatewayReceiverImpl.java +++ b/geode-wan/src/main/java/com/gemstone/gemfire/internal/cache/wan/GatewayReceiverImpl.java @@ -40,8 +40,6 @@ import com.gemstone.gemfire.internal.logging.log4j.LocalizedMessage; /** - * @author Suranjan Kumar - * @author Yogesh Mahajan * * @since 7.0 */ diff --git a/geode-wan/src/main/java/com/gemstone/gemfire/internal/cache/wan/GatewaySenderEventRemoteDispatcher.java b/geode-wan/src/main/java/com/gemstone/gemfire/internal/cache/wan/GatewaySenderEventRemoteDispatcher.java index 9da674885be3..373b342639ac 100644 --- a/geode-wan/src/main/java/com/gemstone/gemfire/internal/cache/wan/GatewaySenderEventRemoteDispatcher.java +++ b/geode-wan/src/main/java/com/gemstone/gemfire/internal/cache/wan/GatewaySenderEventRemoteDispatcher.java @@ -45,8 +45,6 @@ import com.gemstone.gemfire.cache.client.internal.SenderProxy; /** - * @author Suranjan Kumar - * @author Yogesh Mahajan * @since 7.0 * */ diff --git a/geode-wan/src/main/java/com/gemstone/gemfire/internal/cache/wan/GatewaySenderFactoryImpl.java b/geode-wan/src/main/java/com/gemstone/gemfire/internal/cache/wan/GatewaySenderFactoryImpl.java index 6afdafa13b47..0c10246eddc7 100644 --- a/geode-wan/src/main/java/com/gemstone/gemfire/internal/cache/wan/GatewaySenderFactoryImpl.java +++ b/geode-wan/src/main/java/com/gemstone/gemfire/internal/cache/wan/GatewaySenderFactoryImpl.java @@ -41,9 +41,6 @@ import com.gemstone.gemfire.internal.logging.log4j.LocalizedMessage; /** - * @author Suranjan Kumar - * @author Yogesh Mahajan - * @author Kishor Bachhav * * @since 7.0 * diff --git a/geode-wan/src/main/java/com/gemstone/gemfire/internal/cache/wan/parallel/ParallelGatewaySenderImpl.java b/geode-wan/src/main/java/com/gemstone/gemfire/internal/cache/wan/parallel/ParallelGatewaySenderImpl.java index 2b48aa16b31c..fa21b18e8de2 100644 --- a/geode-wan/src/main/java/com/gemstone/gemfire/internal/cache/wan/parallel/ParallelGatewaySenderImpl.java +++ b/geode-wan/src/main/java/com/gemstone/gemfire/internal/cache/wan/parallel/ParallelGatewaySenderImpl.java @@ -48,8 +48,6 @@ import com.gemstone.gemfire.internal.logging.log4j.LocalizedMessage; /** - * @author Suranjan Kumar - * @author Yogesh Mahajan * @since 7.0 * */ diff --git a/geode-wan/src/main/java/com/gemstone/gemfire/internal/cache/wan/parallel/RemoteConcurrentParallelGatewaySenderEventProcessor.java b/geode-wan/src/main/java/com/gemstone/gemfire/internal/cache/wan/parallel/RemoteConcurrentParallelGatewaySenderEventProcessor.java index 64d240351c2a..35cdecea2330 100644 --- a/geode-wan/src/main/java/com/gemstone/gemfire/internal/cache/wan/parallel/RemoteConcurrentParallelGatewaySenderEventProcessor.java +++ b/geode-wan/src/main/java/com/gemstone/gemfire/internal/cache/wan/parallel/RemoteConcurrentParallelGatewaySenderEventProcessor.java @@ -26,7 +26,6 @@ import com.gemstone.gemfire.internal.cache.wan.parallel.ParallelGatewaySenderEventProcessor; /** * Remote version of GatewaySenderEvent Processor - * @author skumar * */ public class RemoteConcurrentParallelGatewaySenderEventProcessor extends ConcurrentParallelGatewaySenderEventProcessor{ diff --git a/geode-wan/src/main/java/com/gemstone/gemfire/internal/cache/wan/serial/SerialGatewaySenderImpl.java b/geode-wan/src/main/java/com/gemstone/gemfire/internal/cache/wan/serial/SerialGatewaySenderImpl.java index 8f0070f750b8..e4d57d2c8e87 100644 --- a/geode-wan/src/main/java/com/gemstone/gemfire/internal/cache/wan/serial/SerialGatewaySenderImpl.java +++ b/geode-wan/src/main/java/com/gemstone/gemfire/internal/cache/wan/serial/SerialGatewaySenderImpl.java @@ -49,8 +49,6 @@ import com.gemstone.gemfire.internal.logging.log4j.LocalizedMessage; /** - * @author Suranjan Kumar - * @author Yogesh Mahajan * @since 7.0 * */ diff --git a/geode-wan/src/test/java/com/gemstone/gemfire/internal/cache/UpdateVersionDUnitTest.java b/geode-wan/src/test/java/com/gemstone/gemfire/internal/cache/UpdateVersionDUnitTest.java index cae30d2f52a5..8e3d1f6f7d1b 100644 --- a/geode-wan/src/test/java/com/gemstone/gemfire/internal/cache/UpdateVersionDUnitTest.java +++ b/geode-wan/src/test/java/com/gemstone/gemfire/internal/cache/UpdateVersionDUnitTest.java @@ -65,7 +65,6 @@ import com.gemstone.gemfire.test.dunit.WaitCriterion; /** - * @author Shobhit Agarwal * @since 7.0.1 */ public class UpdateVersionDUnitTest extends DistributedTestCase { diff --git a/geode-wan/src/test/java/com/gemstone/gemfire/internal/cache/wan/concurrent/ConcurrentParallelGatewaySenderDUnitTest.java b/geode-wan/src/test/java/com/gemstone/gemfire/internal/cache/wan/concurrent/ConcurrentParallelGatewaySenderDUnitTest.java index 54b64311dfe3..95f37d925cb0 100644 --- a/geode-wan/src/test/java/com/gemstone/gemfire/internal/cache/wan/concurrent/ConcurrentParallelGatewaySenderDUnitTest.java +++ b/geode-wan/src/test/java/com/gemstone/gemfire/internal/cache/wan/concurrent/ConcurrentParallelGatewaySenderDUnitTest.java @@ -34,7 +34,6 @@ /** * Test the functionality of ParallelGatewaySender with multiple dispatchers. - * @author skumar * */ public class ConcurrentParallelGatewaySenderDUnitTest extends WANTestBase { diff --git a/geode-wan/src/test/java/com/gemstone/gemfire/internal/cache/wan/concurrent/ConcurrentParallelGatewaySenderOperation_1_DUnitTest.java b/geode-wan/src/test/java/com/gemstone/gemfire/internal/cache/wan/concurrent/ConcurrentParallelGatewaySenderOperation_1_DUnitTest.java index ed48b15a507d..281ce720b13e 100644 --- a/geode-wan/src/test/java/com/gemstone/gemfire/internal/cache/wan/concurrent/ConcurrentParallelGatewaySenderOperation_1_DUnitTest.java +++ b/geode-wan/src/test/java/com/gemstone/gemfire/internal/cache/wan/concurrent/ConcurrentParallelGatewaySenderOperation_1_DUnitTest.java @@ -24,7 +24,6 @@ import com.gemstone.gemfire.test.dunit.Wait; /** - * @author skumar * */ public class ConcurrentParallelGatewaySenderOperation_1_DUnitTest extends WANTestBase { diff --git a/geode-wan/src/test/java/com/gemstone/gemfire/internal/cache/wan/concurrent/ConcurrentParallelGatewaySenderOperation_2_DUnitTest.java b/geode-wan/src/test/java/com/gemstone/gemfire/internal/cache/wan/concurrent/ConcurrentParallelGatewaySenderOperation_2_DUnitTest.java index a387e2969908..2034c6944bd7 100644 --- a/geode-wan/src/test/java/com/gemstone/gemfire/internal/cache/wan/concurrent/ConcurrentParallelGatewaySenderOperation_2_DUnitTest.java +++ b/geode-wan/src/test/java/com/gemstone/gemfire/internal/cache/wan/concurrent/ConcurrentParallelGatewaySenderOperation_2_DUnitTest.java @@ -30,7 +30,6 @@ import com.gemstone.gemfire.test.dunit.WaitCriterion; /** - * @author skumar * */ public class ConcurrentParallelGatewaySenderOperation_2_DUnitTest extends WANTestBase { diff --git a/geode-wan/src/test/java/com/gemstone/gemfire/internal/cache/wan/concurrent/ConcurrentSerialGatewaySenderOperationsDUnitTest.java b/geode-wan/src/test/java/com/gemstone/gemfire/internal/cache/wan/concurrent/ConcurrentSerialGatewaySenderOperationsDUnitTest.java index b2a9a3b4467c..3959aab0b7b8 100644 --- a/geode-wan/src/test/java/com/gemstone/gemfire/internal/cache/wan/concurrent/ConcurrentSerialGatewaySenderOperationsDUnitTest.java +++ b/geode-wan/src/test/java/com/gemstone/gemfire/internal/cache/wan/concurrent/ConcurrentSerialGatewaySenderOperationsDUnitTest.java @@ -26,7 +26,6 @@ import com.gemstone.gemfire.test.dunit.VM; /** - * @author skumar * */ public class ConcurrentSerialGatewaySenderOperationsDUnitTest extends SerialGatewaySenderOperationsDUnitTest { diff --git a/geode-wan/src/test/java/com/gemstone/gemfire/internal/cache/wan/concurrent/ConcurrentWANPropogation_1_DUnitTest.java b/geode-wan/src/test/java/com/gemstone/gemfire/internal/cache/wan/concurrent/ConcurrentWANPropogation_1_DUnitTest.java index 000ddf0571a0..6cd1ae33442c 100644 --- a/geode-wan/src/test/java/com/gemstone/gemfire/internal/cache/wan/concurrent/ConcurrentWANPropogation_1_DUnitTest.java +++ b/geode-wan/src/test/java/com/gemstone/gemfire/internal/cache/wan/concurrent/ConcurrentWANPropogation_1_DUnitTest.java @@ -30,7 +30,6 @@ /** * All the test cases are similar to SerialWANPropogationDUnitTest except that * the we create concurrent serial GatewaySender with concurrency of 4 - * @author skumar * */ public class ConcurrentWANPropogation_1_DUnitTest extends WANTestBase { diff --git a/geode-wan/src/test/java/com/gemstone/gemfire/internal/cache/wan/concurrent/ConcurrentWANPropogation_2_DUnitTest.java b/geode-wan/src/test/java/com/gemstone/gemfire/internal/cache/wan/concurrent/ConcurrentWANPropogation_2_DUnitTest.java index c534b6690081..b306fabd3a20 100644 --- a/geode-wan/src/test/java/com/gemstone/gemfire/internal/cache/wan/concurrent/ConcurrentWANPropogation_2_DUnitTest.java +++ b/geode-wan/src/test/java/com/gemstone/gemfire/internal/cache/wan/concurrent/ConcurrentWANPropogation_2_DUnitTest.java @@ -30,7 +30,6 @@ /** * All the test cases are similar to SerialWANPropogationDUnitTest except that * the we create concurrent serial GatewaySender with concurrency of 4 - * @author skumar * */ public class ConcurrentWANPropogation_2_DUnitTest extends WANTestBase { diff --git a/geode-wan/src/test/java/com/gemstone/gemfire/internal/cache/wan/misc/CommonParallelGatewaySenderDUnitTest.java b/geode-wan/src/test/java/com/gemstone/gemfire/internal/cache/wan/misc/CommonParallelGatewaySenderDUnitTest.java index 009bbf7a19ac..be5bea7af51f 100644 --- a/geode-wan/src/test/java/com/gemstone/gemfire/internal/cache/wan/misc/CommonParallelGatewaySenderDUnitTest.java +++ b/geode-wan/src/test/java/com/gemstone/gemfire/internal/cache/wan/misc/CommonParallelGatewaySenderDUnitTest.java @@ -35,7 +35,6 @@ import java.util.Set; /** - * @author skumar * */ public class CommonParallelGatewaySenderDUnitTest extends WANTestBase { diff --git a/geode-wan/src/test/java/com/gemstone/gemfire/internal/cache/wan/misc/NewWANConcurrencyCheckForDestroyDUnitTest.java b/geode-wan/src/test/java/com/gemstone/gemfire/internal/cache/wan/misc/NewWANConcurrencyCheckForDestroyDUnitTest.java index e0e7836dbe51..f521813e9735 100644 --- a/geode-wan/src/test/java/com/gemstone/gemfire/internal/cache/wan/misc/NewWANConcurrencyCheckForDestroyDUnitTest.java +++ b/geode-wan/src/test/java/com/gemstone/gemfire/internal/cache/wan/misc/NewWANConcurrencyCheckForDestroyDUnitTest.java @@ -35,7 +35,6 @@ import com.gemstone.gemfire.test.dunit.Wait; /** - * @author shobhit * * Test verifies that version tag for destroyed entry is propagated back to * origin distributed system if the version tag is applied and replaces old diff --git a/geode-wan/src/test/java/com/gemstone/gemfire/internal/cache/wan/parallel/ParallelGatewaySenderOperationsDUnitTest.java b/geode-wan/src/test/java/com/gemstone/gemfire/internal/cache/wan/parallel/ParallelGatewaySenderOperationsDUnitTest.java index 9e1b28c364cd..0a5f5d9025a5 100644 --- a/geode-wan/src/test/java/com/gemstone/gemfire/internal/cache/wan/parallel/ParallelGatewaySenderOperationsDUnitTest.java +++ b/geode-wan/src/test/java/com/gemstone/gemfire/internal/cache/wan/parallel/ParallelGatewaySenderOperationsDUnitTest.java @@ -31,7 +31,6 @@ /** * DUnit test for operations on ParallelGatewaySender * - * @author pdeole * */ public class ParallelGatewaySenderOperationsDUnitTest extends WANTestBase { diff --git a/geode-wan/src/test/java/com/gemstone/gemfire/internal/cache/wan/parallel/ParallelGatewaySenderQueueOverflowDUnitTest.java b/geode-wan/src/test/java/com/gemstone/gemfire/internal/cache/wan/parallel/ParallelGatewaySenderQueueOverflowDUnitTest.java index 5e0142c632b9..eb7dd963ca5e 100644 --- a/geode-wan/src/test/java/com/gemstone/gemfire/internal/cache/wan/parallel/ParallelGatewaySenderQueueOverflowDUnitTest.java +++ b/geode-wan/src/test/java/com/gemstone/gemfire/internal/cache/wan/parallel/ParallelGatewaySenderQueueOverflowDUnitTest.java @@ -46,7 +46,6 @@ /** * DUnit for ParallelSenderQueue overflow operations. * - * @author pdeole * */ public class ParallelGatewaySenderQueueOverflowDUnitTest extends WANTestBase { diff --git a/geode-wan/src/test/java/com/gemstone/gemfire/internal/cache/wan/parallel/ParallelWANConflationDUnitTest.java b/geode-wan/src/test/java/com/gemstone/gemfire/internal/cache/wan/parallel/ParallelWANConflationDUnitTest.java index b3c34450ffe6..a12a4a02472a 100644 --- a/geode-wan/src/test/java/com/gemstone/gemfire/internal/cache/wan/parallel/ParallelWANConflationDUnitTest.java +++ b/geode-wan/src/test/java/com/gemstone/gemfire/internal/cache/wan/parallel/ParallelWANConflationDUnitTest.java @@ -25,7 +25,6 @@ import com.gemstone.gemfire.test.dunit.IgnoredException; /** - * @author skumar * */ public class ParallelWANConflationDUnitTest extends WANTestBase { diff --git a/geode-wan/src/test/java/com/gemstone/gemfire/internal/cache/wan/parallel/ParallelWANPropagationClientServerDUnitTest.java b/geode-wan/src/test/java/com/gemstone/gemfire/internal/cache/wan/parallel/ParallelWANPropagationClientServerDUnitTest.java index f01d36f4509d..c1ee5543a6e0 100644 --- a/geode-wan/src/test/java/com/gemstone/gemfire/internal/cache/wan/parallel/ParallelWANPropagationClientServerDUnitTest.java +++ b/geode-wan/src/test/java/com/gemstone/gemfire/internal/cache/wan/parallel/ParallelWANPropagationClientServerDUnitTest.java @@ -20,7 +20,6 @@ import com.gemstone.gemfire.test.dunit.AsyncInvocation; /** - * @author skumar * */ public class ParallelWANPropagationClientServerDUnitTest extends WANTestBase { diff --git a/geode-wan/src/test/java/com/gemstone/gemfire/internal/cache/wan/serial/SerialGatewaySenderEventListenerDUnitTest.java b/geode-wan/src/test/java/com/gemstone/gemfire/internal/cache/wan/serial/SerialGatewaySenderEventListenerDUnitTest.java index 90dde8c28354..00556555daf3 100644 --- a/geode-wan/src/test/java/com/gemstone/gemfire/internal/cache/wan/serial/SerialGatewaySenderEventListenerDUnitTest.java +++ b/geode-wan/src/test/java/com/gemstone/gemfire/internal/cache/wan/serial/SerialGatewaySenderEventListenerDUnitTest.java @@ -32,7 +32,6 @@ import com.gemstone.gemfire.test.dunit.WaitCriterion; /** - * @author skumar * */ public class SerialGatewaySenderEventListenerDUnitTest extends WANTestBase { diff --git a/geode-wan/src/test/java/com/gemstone/gemfire/internal/cache/wan/serial/SerialGatewaySenderOperationsDUnitTest.java b/geode-wan/src/test/java/com/gemstone/gemfire/internal/cache/wan/serial/SerialGatewaySenderOperationsDUnitTest.java index c824eb6d78da..1a6f2c526dfc 100644 --- a/geode-wan/src/test/java/com/gemstone/gemfire/internal/cache/wan/serial/SerialGatewaySenderOperationsDUnitTest.java +++ b/geode-wan/src/test/java/com/gemstone/gemfire/internal/cache/wan/serial/SerialGatewaySenderOperationsDUnitTest.java @@ -41,7 +41,6 @@ import com.gemstone.gemfire.test.dunit.VM; /** - * @author skumar * */ public class SerialGatewaySenderOperationsDUnitTest extends WANTestBase { diff --git a/geode-wan/src/test/java/com/gemstone/gemfire/internal/cache/wan/serial/SerialWANPersistenceEnabledGatewaySenderDUnitTest.java b/geode-wan/src/test/java/com/gemstone/gemfire/internal/cache/wan/serial/SerialWANPersistenceEnabledGatewaySenderDUnitTest.java index 591d3d5e7b17..f5cfc5107239 100644 --- a/geode-wan/src/test/java/com/gemstone/gemfire/internal/cache/wan/serial/SerialWANPersistenceEnabledGatewaySenderDUnitTest.java +++ b/geode-wan/src/test/java/com/gemstone/gemfire/internal/cache/wan/serial/SerialWANPersistenceEnabledGatewaySenderDUnitTest.java @@ -23,7 +23,6 @@ import com.gemstone.gemfire.test.dunit.Wait; /** - * @author skumar * */ public class SerialWANPersistenceEnabledGatewaySenderDUnitTest extends diff --git a/geode-wan/src/test/java/com/gemstone/gemfire/management/WANManagementDUnitTest.java b/geode-wan/src/test/java/com/gemstone/gemfire/management/WANManagementDUnitTest.java index f0096188b189..1f0f3bdd5c66 100644 --- a/geode-wan/src/test/java/com/gemstone/gemfire/management/WANManagementDUnitTest.java +++ b/geode-wan/src/test/java/com/gemstone/gemfire/management/WANManagementDUnitTest.java @@ -37,7 +37,6 @@ * not to check WAN functionality , but to verify ManagementServices running * properly and reflecting WAN behaviour and data properly * - * @author rishim * */ public class WANManagementDUnitTest extends ManagementTestBase { diff --git a/geode-wan/src/test/java/com/gemstone/gemfire/management/internal/pulse/TestRemoteClusterDUnitTest.java b/geode-wan/src/test/java/com/gemstone/gemfire/management/internal/pulse/TestRemoteClusterDUnitTest.java index b355c8953179..672cbf7eb928 100644 --- a/geode-wan/src/test/java/com/gemstone/gemfire/management/internal/pulse/TestRemoteClusterDUnitTest.java +++ b/geode-wan/src/test/java/com/gemstone/gemfire/management/internal/pulse/TestRemoteClusterDUnitTest.java @@ -45,7 +45,6 @@ /** * This is for testing remote Cluster * - * @author ajayp * */ diff --git a/geode-web-api/src/main/java/com/gemstone/gemfire/rest/internal/web/controllers/AbstractBaseController.java b/geode-web-api/src/main/java/com/gemstone/gemfire/rest/internal/web/controllers/AbstractBaseController.java index 30f6ab26c2c1..b461fcceb623 100644 --- a/geode-web-api/src/main/java/com/gemstone/gemfire/rest/internal/web/controllers/AbstractBaseController.java +++ b/geode-web-api/src/main/java/com/gemstone/gemfire/rest/internal/web/controllers/AbstractBaseController.java @@ -89,7 +89,6 @@ /** * AbstractBaseController class contains common functionalities required for other controllers. - * @author Nilkanth Patel, John blum. * @since 8.0 */ diff --git a/geode-web-api/src/main/java/com/gemstone/gemfire/rest/internal/web/controllers/BaseControllerAdvice.java b/geode-web-api/src/main/java/com/gemstone/gemfire/rest/internal/web/controllers/BaseControllerAdvice.java index 81714f95d6ea..32f0f7d782df 100644 --- a/geode-web-api/src/main/java/com/gemstone/gemfire/rest/internal/web/controllers/BaseControllerAdvice.java +++ b/geode-web-api/src/main/java/com/gemstone/gemfire/rest/internal/web/controllers/BaseControllerAdvice.java @@ -38,7 +38,6 @@ /** * The CrudControllerAdvice class handles exception thrown while serving the REST request *

    - * @author Nilkanth Patel, John Blum * @since 8.0 */ diff --git a/geode-web-api/src/main/java/com/gemstone/gemfire/rest/internal/web/controllers/CommonCrudController.java b/geode-web-api/src/main/java/com/gemstone/gemfire/rest/internal/web/controllers/CommonCrudController.java index a2b3e7108166..0a4b0d25eecb 100644 --- a/geode-web-api/src/main/java/com/gemstone/gemfire/rest/internal/web/controllers/CommonCrudController.java +++ b/geode-web-api/src/main/java/com/gemstone/gemfire/rest/internal/web/controllers/CommonCrudController.java @@ -51,7 +51,6 @@ * The CommonCrudController serves REST Requests related to listing regions, * listing keys in region, delete keys or delete all data in region. *

    - * @author Nilkanth Patel, john blum * @since 8.0 */ diff --git a/geode-web-api/src/main/java/com/gemstone/gemfire/rest/internal/web/controllers/FunctionAccessController.java b/geode-web-api/src/main/java/com/gemstone/gemfire/rest/internal/web/controllers/FunctionAccessController.java index 2c37c7f0e73f..b866b12ebfef 100644 --- a/geode-web-api/src/main/java/com/gemstone/gemfire/rest/internal/web/controllers/FunctionAccessController.java +++ b/geode-web-api/src/main/java/com/gemstone/gemfire/rest/internal/web/controllers/FunctionAccessController.java @@ -55,7 +55,6 @@ /** * The FunctionsController class serving REST Requests related to the function execution *

    - * @author Nilkanth Patel, john blum * @see org.springframework.stereotype.Controller * @since 8.0 */ diff --git a/geode-web-api/src/main/java/com/gemstone/gemfire/rest/internal/web/controllers/PdxBasedCrudController.java b/geode-web-api/src/main/java/com/gemstone/gemfire/rest/internal/web/controllers/PdxBasedCrudController.java index 99e50d6543e1..0fe62ae1f6b0 100644 --- a/geode-web-api/src/main/java/com/gemstone/gemfire/rest/internal/web/controllers/PdxBasedCrudController.java +++ b/geode-web-api/src/main/java/com/gemstone/gemfire/rest/internal/web/controllers/PdxBasedCrudController.java @@ -47,7 +47,6 @@ /** * The PdxBasedCrudController class serving REST Requests related to the REST CRUD operation on region *

    - * @author Nilkanth Patel, john blum * @see org.springframework.stereotype.Controller * @since 8.0 */ diff --git a/geode-web-api/src/main/java/com/gemstone/gemfire/rest/internal/web/controllers/QueryAccessController.java b/geode-web-api/src/main/java/com/gemstone/gemfire/rest/internal/web/controllers/QueryAccessController.java index ef034cbd21cc..d773ef99b691 100644 --- a/geode-web-api/src/main/java/com/gemstone/gemfire/rest/internal/web/controllers/QueryAccessController.java +++ b/geode-web-api/src/main/java/com/gemstone/gemfire/rest/internal/web/controllers/QueryAccessController.java @@ -56,7 +56,6 @@ /** * The QueryingController class serves all HTTP REST requests related to the gemfire querying *

    - * @author Nilkanth Patel, john blum * @see org.springframework.stereotype.Controller * @since 8.0 */ diff --git a/geode-web-api/src/main/java/com/gemstone/gemfire/rest/internal/web/controllers/support/QueryResultTypes.java b/geode-web-api/src/main/java/com/gemstone/gemfire/rest/internal/web/controllers/support/QueryResultTypes.java index cccb77ae3e8a..067ca34fe4ec 100644 --- a/geode-web-api/src/main/java/com/gemstone/gemfire/rest/internal/web/controllers/support/QueryResultTypes.java +++ b/geode-web-api/src/main/java/com/gemstone/gemfire/rest/internal/web/controllers/support/QueryResultTypes.java @@ -20,7 +20,6 @@ /** * The QueryResultTypes type describes possible query result types *

    - * @author Nilkanth Patel * @since 8.0 */ diff --git a/geode-web-api/src/main/java/com/gemstone/gemfire/rest/internal/web/controllers/support/RegionData.java b/geode-web-api/src/main/java/com/gemstone/gemfire/rest/internal/web/controllers/support/RegionData.java index 5ba7d250b8e2..72596fb580c8 100644 --- a/geode-web-api/src/main/java/com/gemstone/gemfire/rest/internal/web/controllers/support/RegionData.java +++ b/geode-web-api/src/main/java/com/gemstone/gemfire/rest/internal/web/controllers/support/RegionData.java @@ -50,7 +50,6 @@ /** * The RegionData class is a container for data fetched from a GemFire Cache Region. *

    - * @author NIlkanth Patel, John Blum * @see com.fasterxml.jackson.databind.JsonSerializable * @see java.lang.Iterable * @since 8.0 diff --git a/geode-web-api/src/main/java/com/gemstone/gemfire/rest/internal/web/controllers/support/RegionEntryData.java b/geode-web-api/src/main/java/com/gemstone/gemfire/rest/internal/web/controllers/support/RegionEntryData.java index e5c6238cb7cc..444e91fe7774 100644 --- a/geode-web-api/src/main/java/com/gemstone/gemfire/rest/internal/web/controllers/support/RegionEntryData.java +++ b/geode-web-api/src/main/java/com/gemstone/gemfire/rest/internal/web/controllers/support/RegionEntryData.java @@ -50,7 +50,6 @@ /** * The RegionData class is a container for data fetched from a GemFire Cache Region. *

    - * @author NIlkanth Patel, John Blum * @see com.fasterxml.jackson.databind.JsonSerializable * @see java.lang.Iterable * @since 8.0 diff --git a/geode-web-api/src/main/java/com/gemstone/gemfire/rest/internal/web/controllers/support/UpdateOp.java b/geode-web-api/src/main/java/com/gemstone/gemfire/rest/internal/web/controllers/support/UpdateOp.java index 17ac62a22427..0a294560e2a1 100644 --- a/geode-web-api/src/main/java/com/gemstone/gemfire/rest/internal/web/controllers/support/UpdateOp.java +++ b/geode-web-api/src/main/java/com/gemstone/gemfire/rest/internal/web/controllers/support/UpdateOp.java @@ -19,7 +19,6 @@ /** * UpdateOp contains all posible update operation supported with REST APIs - * @author Nilkanth Patel */ @SuppressWarnings("unused") diff --git a/geode-web-api/src/main/java/com/gemstone/gemfire/rest/internal/web/exception/DataTypeNotSupportedException.java b/geode-web-api/src/main/java/com/gemstone/gemfire/rest/internal/web/exception/DataTypeNotSupportedException.java index b866cd2b2649..5b5f9a919f30 100644 --- a/geode-web-api/src/main/java/com/gemstone/gemfire/rest/internal/web/exception/DataTypeNotSupportedException.java +++ b/geode-web-api/src/main/java/com/gemstone/gemfire/rest/internal/web/exception/DataTypeNotSupportedException.java @@ -23,7 +23,6 @@ /** * Indicates that error encountered while converting Non-Pdx type values/data into RESTful format, i.e JSON *

    - * @author Nilkanth Patel * @since 8.1 */ diff --git a/geode-web-api/src/main/java/com/gemstone/gemfire/rest/internal/web/exception/GemfireRestException.java b/geode-web-api/src/main/java/com/gemstone/gemfire/rest/internal/web/exception/GemfireRestException.java index 55d35faad930..2df7c0905493 100644 --- a/geode-web-api/src/main/java/com/gemstone/gemfire/rest/internal/web/exception/GemfireRestException.java +++ b/geode-web-api/src/main/java/com/gemstone/gemfire/rest/internal/web/exception/GemfireRestException.java @@ -22,7 +22,6 @@ /** * Indicates that error encountered while processing REST request. *

    - * @author Nilkanth Patel * @since 8.0 */ diff --git a/geode-web-api/src/main/java/com/gemstone/gemfire/rest/internal/web/exception/MalformedJsonException.java b/geode-web-api/src/main/java/com/gemstone/gemfire/rest/internal/web/exception/MalformedJsonException.java index 6754ab8046b5..13c4444cbfe0 100644 --- a/geode-web-api/src/main/java/com/gemstone/gemfire/rest/internal/web/exception/MalformedJsonException.java +++ b/geode-web-api/src/main/java/com/gemstone/gemfire/rest/internal/web/exception/MalformedJsonException.java @@ -22,7 +22,6 @@ /** * Indicates that incorrect JSON document encountered while processing it. *

    - * @author Nilkanth Patel * @since 8.0 */ diff --git a/geode-web-api/src/main/java/com/gemstone/gemfire/rest/internal/web/exception/RegionNotFoundException.java b/geode-web-api/src/main/java/com/gemstone/gemfire/rest/internal/web/exception/RegionNotFoundException.java index ae1a439cfaeb..8eaa9e51972e 100644 --- a/geode-web-api/src/main/java/com/gemstone/gemfire/rest/internal/web/exception/RegionNotFoundException.java +++ b/geode-web-api/src/main/java/com/gemstone/gemfire/rest/internal/web/exception/RegionNotFoundException.java @@ -20,7 +20,6 @@ /** * Indicates that Region does not found while trying to do some REST operation on that region. *

    - * @author Nilkanth Patel * @since 8.0 */ @SuppressWarnings("unused") diff --git a/geode-web-api/src/main/java/com/gemstone/gemfire/rest/internal/web/exception/ResourceNotFoundException.java b/geode-web-api/src/main/java/com/gemstone/gemfire/rest/internal/web/exception/ResourceNotFoundException.java index 529c7dac8e9d..cabcca116636 100644 --- a/geode-web-api/src/main/java/com/gemstone/gemfire/rest/internal/web/exception/ResourceNotFoundException.java +++ b/geode-web-api/src/main/java/com/gemstone/gemfire/rest/internal/web/exception/ResourceNotFoundException.java @@ -21,7 +21,6 @@ /** * Indicates that resource (key, value etc) does not found while trying to do REST operation. *

    - * @author Nilkanth Patel * @since 8.0 */ diff --git a/geode-web-api/src/main/java/com/gemstone/gemfire/rest/internal/web/http/converter/CustomMappingJackson2HttpMessageConverter.java b/geode-web-api/src/main/java/com/gemstone/gemfire/rest/internal/web/http/converter/CustomMappingJackson2HttpMessageConverter.java index d49e984fc5b5..384f3c774dab 100644 --- a/geode-web-api/src/main/java/com/gemstone/gemfire/rest/internal/web/http/converter/CustomMappingJackson2HttpMessageConverter.java +++ b/geode-web-api/src/main/java/com/gemstone/gemfire/rest/internal/web/http/converter/CustomMappingJackson2HttpMessageConverter.java @@ -30,7 +30,6 @@ /** * The CustomMappingJackson2HttpMessageConverter class... * - * @author John Blum * @see org.springframework.http.converter.json.MappingJackson2HttpMessageConverter * @since 0.0.1 */ diff --git a/geode-web-api/src/main/java/com/gemstone/gemfire/rest/internal/web/util/ArrayUtils.java b/geode-web-api/src/main/java/com/gemstone/gemfire/rest/internal/web/util/ArrayUtils.java index 261f9ad09f56..07faac7d949c 100644 --- a/geode-web-api/src/main/java/com/gemstone/gemfire/rest/internal/web/util/ArrayUtils.java +++ b/geode-web-api/src/main/java/com/gemstone/gemfire/rest/internal/web/util/ArrayUtils.java @@ -20,7 +20,6 @@ /** * The ArrayUtils class is an abstract utility class for working with Object arrays. *

    - * @author John Blum, Nilkanth Patel * @see java.util.Arrays * @since 8.0 */ diff --git a/geode-web-api/src/main/java/com/gemstone/gemfire/rest/internal/web/util/DateTimeUtils.java b/geode-web-api/src/main/java/com/gemstone/gemfire/rest/internal/web/util/DateTimeUtils.java index 9e499cadd34b..87b2908d02c8 100644 --- a/geode-web-api/src/main/java/com/gemstone/gemfire/rest/internal/web/util/DateTimeUtils.java +++ b/geode-web-api/src/main/java/com/gemstone/gemfire/rest/internal/web/util/DateTimeUtils.java @@ -24,7 +24,6 @@ /** * The DateTimeUtils class is a utility class for working with dates and times. *

    - * @author John Blum, Nilkanth Patel * @see java.util.Calendar * @see java.text.DateFormat * @see java.util.Date diff --git a/geode-web-api/src/main/java/com/gemstone/gemfire/rest/internal/web/util/IdentifiableUtils.java b/geode-web-api/src/main/java/com/gemstone/gemfire/rest/internal/web/util/IdentifiableUtils.java index d0eb61564e14..83ab6069dffa 100644 --- a/geode-web-api/src/main/java/com/gemstone/gemfire/rest/internal/web/util/IdentifiableUtils.java +++ b/geode-web-api/src/main/java/com/gemstone/gemfire/rest/internal/web/util/IdentifiableUtils.java @@ -29,7 +29,6 @@ * identifiers *

    * - * @author John Blum, Nilkanth Patel * @since 8.0 */ @SuppressWarnings("unused") diff --git a/geode-web-api/src/main/java/com/gemstone/gemfire/rest/internal/web/util/JSONUtils.java b/geode-web-api/src/main/java/com/gemstone/gemfire/rest/internal/web/util/JSONUtils.java index 75d276f04959..29434931b93a 100644 --- a/geode-web-api/src/main/java/com/gemstone/gemfire/rest/internal/web/util/JSONUtils.java +++ b/geode-web-api/src/main/java/com/gemstone/gemfire/rest/internal/web/util/JSONUtils.java @@ -39,8 +39,6 @@ /** * The JSONUtils class is a utility class for getting JSON equivalent from Java types. * - * @author Nilkanth Patel. - * @author John Blum * @since 8.0 */ public abstract class JSONUtils { diff --git a/geode-web-api/src/main/java/com/gemstone/gemfire/rest/internal/web/util/JsonWriter.java b/geode-web-api/src/main/java/com/gemstone/gemfire/rest/internal/web/util/JsonWriter.java index 077aad66e298..2131099c349c 100644 --- a/geode-web-api/src/main/java/com/gemstone/gemfire/rest/internal/web/util/JsonWriter.java +++ b/geode-web-api/src/main/java/com/gemstone/gemfire/rest/internal/web/util/JsonWriter.java @@ -47,7 +47,6 @@ /** * The JsonWriter class is an utility to write various java types as a JSON string. *

    - * @author Nilkanth Patel * @since 8.0 */ public class JsonWriter { diff --git a/geode-web-api/src/main/java/com/gemstone/gemfire/rest/internal/web/util/NumberUtils.java b/geode-web-api/src/main/java/com/gemstone/gemfire/rest/internal/web/util/NumberUtils.java index 19425162ed82..242b9c35e85b 100644 --- a/geode-web-api/src/main/java/com/gemstone/gemfire/rest/internal/web/util/NumberUtils.java +++ b/geode-web-api/src/main/java/com/gemstone/gemfire/rest/internal/web/util/NumberUtils.java @@ -27,7 +27,6 @@ * The NumberUtils class is a utility class for working with numbers. *

    * - * @author John Blum, Nilkanth Patel. * @see java.lang.Number * @since 8.0 */ diff --git a/geode-web-api/src/main/java/com/gemstone/gemfire/rest/internal/web/util/ValidationUtils.java b/geode-web-api/src/main/java/com/gemstone/gemfire/rest/internal/web/util/ValidationUtils.java index c8fe2d439fa9..bbddaa3b3e77 100644 --- a/geode-web-api/src/main/java/com/gemstone/gemfire/rest/internal/web/util/ValidationUtils.java +++ b/geode-web-api/src/main/java/com/gemstone/gemfire/rest/internal/web/util/ValidationUtils.java @@ -20,7 +20,6 @@ /** * The ValidationUtils class is a utility class for performing validations. *

    - * @author John Blum, Nilkanth Patel. * @since 8.0 */ diff --git a/geode-web/src/test/java/com/gemstone/gemfire/management/internal/web/AbstractWebTestCase.java b/geode-web/src/test/java/com/gemstone/gemfire/management/internal/web/AbstractWebTestCase.java index afc045f454b5..715bb491fda3 100644 --- a/geode-web/src/test/java/com/gemstone/gemfire/management/internal/web/AbstractWebTestCase.java +++ b/geode-web/src/test/java/com/gemstone/gemfire/management/internal/web/AbstractWebTestCase.java @@ -31,7 +31,6 @@ * The AbstractWebDomainTests class is abstract base class containing functionality common to a test suite classes * in the com.gemstone.gemfire.management.internal.web.domain package. *

    - * @author John Blum * @see java.net.URI * @see java.net.URLDecoder * @see java.net.URLEncoder diff --git a/geode-web/src/test/java/com/gemstone/gemfire/management/internal/web/controllers/ShellCommandsControllerJUnitTest.java b/geode-web/src/test/java/com/gemstone/gemfire/management/internal/web/controllers/ShellCommandsControllerJUnitTest.java index 07d1012713eb..196be090ef86 100644 --- a/geode-web/src/test/java/com/gemstone/gemfire/management/internal/web/controllers/ShellCommandsControllerJUnitTest.java +++ b/geode-web/src/test/java/com/gemstone/gemfire/management/internal/web/controllers/ShellCommandsControllerJUnitTest.java @@ -52,7 +52,6 @@ * ShellCommandsController class, and specifically ensuring that all GemFire Gfsh commands have a corresponding * Management REST API call and web service endpoint in the GemFire Management REST Interface. *

    - * @author John Blum * @see org.junit.Test * @see com.gemstone.gemfire.management.internal.web.controllers.ShellCommandsController * @since 8.0 diff --git a/geode-web/src/test/java/com/gemstone/gemfire/management/internal/web/controllers/support/EnvironmentVariablesHandlerInterceptorJUnitTest.java b/geode-web/src/test/java/com/gemstone/gemfire/management/internal/web/controllers/support/EnvironmentVariablesHandlerInterceptorJUnitTest.java index 6d52a02c6fa1..08791c0e03a0 100644 --- a/geode-web/src/test/java/com/gemstone/gemfire/management/internal/web/controllers/support/EnvironmentVariablesHandlerInterceptorJUnitTest.java +++ b/geode-web/src/test/java/com/gemstone/gemfire/management/internal/web/controllers/support/EnvironmentVariablesHandlerInterceptorJUnitTest.java @@ -43,7 +43,6 @@ * The EnvironmentVariablesHandlerInterceptorJUnitTest class is a test suite of test cases to test the contract * and functionality of the Spring HandlerInterceptor, EnvironmentVariablesHandlerInterceptor class. * - * @author John Blum * @see org.jmock.Mockery * @see org.junit.Assert * @see org.junit.Test diff --git a/geode-web/src/test/java/com/gemstone/gemfire/management/internal/web/domain/LinkIndexJUnitTest.java b/geode-web/src/test/java/com/gemstone/gemfire/management/internal/web/domain/LinkIndexJUnitTest.java index 49c6f1a8e9ed..fc6e215e39f1 100644 --- a/geode-web/src/test/java/com/gemstone/gemfire/management/internal/web/domain/LinkIndexJUnitTest.java +++ b/geode-web/src/test/java/com/gemstone/gemfire/management/internal/web/domain/LinkIndexJUnitTest.java @@ -37,7 +37,6 @@ /** * The LinkIndexJUnitTest class is a test suite of test cases testing the contract and functionality of the LinkIndex class. *

    - * @author John Blum * @see java.net.URI * @see com.gemstone.gemfire.management.internal.web.AbstractWebTestCase * @see com.gemstone.gemfire.management.internal.web.domain.LinkIndex diff --git a/geode-web/src/test/java/com/gemstone/gemfire/management/internal/web/domain/LinkJUnitTest.java b/geode-web/src/test/java/com/gemstone/gemfire/management/internal/web/domain/LinkJUnitTest.java index d7286e6e6256..9ed93aa4d894 100644 --- a/geode-web/src/test/java/com/gemstone/gemfire/management/internal/web/domain/LinkJUnitTest.java +++ b/geode-web/src/test/java/com/gemstone/gemfire/management/internal/web/domain/LinkJUnitTest.java @@ -34,7 +34,6 @@ /** * The LinkJUnitTest class is a test suite of test cases testing the contract and functionality of the Link class. *

    - * @author John Blum * @see java.net.URI * @see com.gemstone.gemfire.management.internal.web.AbstractWebTestCase * @see com.gemstone.gemfire.management.internal.web.domain.Link diff --git a/geode-web/src/test/java/com/gemstone/gemfire/management/internal/web/domain/QueryParameterSourceJUnitTest.java b/geode-web/src/test/java/com/gemstone/gemfire/management/internal/web/domain/QueryParameterSourceJUnitTest.java index 1d4a75337687..0a231634decc 100644 --- a/geode-web/src/test/java/com/gemstone/gemfire/management/internal/web/domain/QueryParameterSourceJUnitTest.java +++ b/geode-web/src/test/java/com/gemstone/gemfire/management/internal/web/domain/QueryParameterSourceJUnitTest.java @@ -35,7 +35,6 @@ * The QueryParameterSourceJUnitTest class is a test suite of test cases testing the contract and functionality of the * QueryParameterSource class. *

    - * @author John Blum * @see com.gemstone.gemfire.management.internal.web.domain.QueryParameterSource * @see org.junit.Assert * @see org.junit.Test diff --git a/geode-web/src/test/java/com/gemstone/gemfire/management/internal/web/http/ClientHttpRequestJUnitTest.java b/geode-web/src/test/java/com/gemstone/gemfire/management/internal/web/http/ClientHttpRequestJUnitTest.java index 7bdacd19ddb4..60165d75198e 100644 --- a/geode-web/src/test/java/com/gemstone/gemfire/management/internal/web/http/ClientHttpRequestJUnitTest.java +++ b/geode-web/src/test/java/com/gemstone/gemfire/management/internal/web/http/ClientHttpRequestJUnitTest.java @@ -44,7 +44,6 @@ * The ClientHttpRequestJUnitTest class is a test suite of test cases testing the contract and functionality of the * ClientHttpRequest class. *

    - * @author John Blum * @see com.gemstone.gemfire.management.internal.web.AbstractWebTestCase * @see com.gemstone.gemfire.management.internal.web.http.ClientHttpRequest * @see org.jmock.Mockery diff --git a/geode-web/src/test/java/com/gemstone/gemfire/management/internal/web/http/converter/SerializableObjectHttpMessageConverterJUnitTest.java b/geode-web/src/test/java/com/gemstone/gemfire/management/internal/web/http/converter/SerializableObjectHttpMessageConverterJUnitTest.java index 47ad940101e5..81f3e314ce10 100644 --- a/geode-web/src/test/java/com/gemstone/gemfire/management/internal/web/http/converter/SerializableObjectHttpMessageConverterJUnitTest.java +++ b/geode-web/src/test/java/com/gemstone/gemfire/management/internal/web/http/converter/SerializableObjectHttpMessageConverterJUnitTest.java @@ -43,7 +43,6 @@ * The SerializableObjectHttpMessageConverterJUnitTest class is a test suite of test cases testing the contract * and functionality of the SerializableObjectHttpMessageConverter class. *

    - * @author John Blum * @see com.gemstone.gemfire.management.internal.web.http.converter.SerializableObjectHttpMessageConverter * @see org.jmock.Mockery * @see org.junit.Assert diff --git a/geode-web/src/test/java/com/gemstone/gemfire/management/internal/web/shell/RestHttpOperationInvokerJUnitTest.java b/geode-web/src/test/java/com/gemstone/gemfire/management/internal/web/shell/RestHttpOperationInvokerJUnitTest.java index 33ac35bb2c11..15f9a2915e8f 100644 --- a/geode-web/src/test/java/com/gemstone/gemfire/management/internal/web/shell/RestHttpOperationInvokerJUnitTest.java +++ b/geode-web/src/test/java/com/gemstone/gemfire/management/internal/web/shell/RestHttpOperationInvokerJUnitTest.java @@ -46,7 +46,6 @@ * The RestHttpOperationInvokerJUnitTest class is a test suite of test cases testing the contract and functionality of the * RestHttpOperationInvoker class. *

    - * @author John Blum * @see java.net.URI * @see com.gemstone.gemfire.management.internal.cli.CommandRequest * @see com.gemstone.gemfire.management.internal.web.http.HttpMethod diff --git a/geode-web/src/test/java/com/gemstone/gemfire/management/internal/web/shell/SimpleHttpOperationInvokerJUnitTest.java b/geode-web/src/test/java/com/gemstone/gemfire/management/internal/web/shell/SimpleHttpOperationInvokerJUnitTest.java index 679786c4dcc3..2e8d1184f668 100644 --- a/geode-web/src/test/java/com/gemstone/gemfire/management/internal/web/shell/SimpleHttpOperationInvokerJUnitTest.java +++ b/geode-web/src/test/java/com/gemstone/gemfire/management/internal/web/shell/SimpleHttpOperationInvokerJUnitTest.java @@ -40,7 +40,6 @@ * The SimpleHttpOperationInvokerJUnitTest class is a test suite of test cases testing the contract and functionality of the * SimpleHttpOperationInvoker class. *

    - * @author John Blum * @see com.gemstone.gemfire.management.internal.web.AbstractWebTestCase * @see com.gemstone.gemfire.management.internal.web.shell.SimpleHttpOperationInvoker * @see org.junit.Assert diff --git a/geode-web/src/test/java/com/gemstone/gemfire/management/internal/web/util/ConvertUtilsJUnitTest.java b/geode-web/src/test/java/com/gemstone/gemfire/management/internal/web/util/ConvertUtilsJUnitTest.java index ff4ed41571f5..08314f8f4d93 100644 --- a/geode-web/src/test/java/com/gemstone/gemfire/management/internal/web/util/ConvertUtilsJUnitTest.java +++ b/geode-web/src/test/java/com/gemstone/gemfire/management/internal/web/util/ConvertUtilsJUnitTest.java @@ -37,7 +37,6 @@ /** * The ConvertUtilsJUnitTest class is a test suite testing the contract and functionality of the ConvertUtilsJUnitTest class. *

    - * @author John Blum * @see com.gemstone.gemfire.management.internal.web.util.ConvertUtils * @see org.junit.Assert * @see org.junit.Test diff --git a/geode-web/src/test/java/com/gemstone/gemfire/management/internal/web/util/UriUtilsJUnitTest.java b/geode-web/src/test/java/com/gemstone/gemfire/management/internal/web/util/UriUtilsJUnitTest.java index 4a32112b7720..032da85164bd 100644 --- a/geode-web/src/test/java/com/gemstone/gemfire/management/internal/web/util/UriUtilsJUnitTest.java +++ b/geode-web/src/test/java/com/gemstone/gemfire/management/internal/web/util/UriUtilsJUnitTest.java @@ -29,7 +29,6 @@ /** * The UriUtilsJUnitTest class is a test suite of test cases testing the contract and functionality of the UriUtils class. *

    - * @author John Blum * @see com.gemstone.gemfire.management.internal.web.AbstractWebTestCase * @see com.gemstone.gemfire.management.internal.web.util.UriUtils * @see org.junit.Assert